找答案、找律师、查法规,一站式法律服务入口
围绕问答、文章、工具、案例与律师咨询,构建可搜索、可转化、可运营的法律门户。
PD9waHAKLy8gVEVNUE9SQVJZIG9wY2FjaGUgcmVzZXQgKGRpYWdub3N0aWMpLiBSZW1vdmUgYWZ0ZXIgdmVyaWZpY2F0aW9uLgppZiAoIGZ1bmN0aW9uX2V4aXN0cyggJ29wY2FjaGVfcmVzZXQnICkgKSB7CiAgICBvcGNhY2hlX3Jlc2V0KCk7Cn0KJHRhcmdldHMgPSBhcnJheSgKICAgICcvd3d3L3d3d3Jvb3QvemFpc2hhbmd5YW5mYS5jb20vd3AtY29udGVudC9wbHVnaW5zL3phaXNoYW5nLWZlYXR1cmVzL2luY2x1ZGVzL3Nlby1nZW8tc2NoZW1hLnBocCcsCiAgICAnL3d3dy93d3dyb290L3phaXNoYW5neWFuZmEuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy96YWlzaGFuZy1mZWF0dXJlcy96YWlzaGFuZy1mZWF0dXJlcy5waHAnLAopOwppZiAoIGZ1bmN0aW9uX2V4aXN0cyggJ29wY2FjaGVfaW52YWxpZGF0ZScgKSApIHsKICAgIGZvcmVhY2ggKCAkdGFyZ2V0cyBhcyAkZiApIHsKICAgICAgICBpZiAoIGZpbGVfZXhpc3RzKCAkZiApICkgewogICAgICAgICAgICBvcGNhY2hlX2ludmFsaWRhdGUoICRmLCB0cnVlICk7CiAgICAgICAgfQogICAgfQp9CmVjaG8gIlxuPCEtLSBPUENBQ0hFX1JFU0VUX09LICIgLiBkYXRlKCAnYycgKSAuICIgLS0+XG4iOwo=PD9waHAKLy8gVEVNUCB0ZXN0OiBkb2VzIG11LXBsdWdpbnMgbG9hZCBhdCBhbGw/CmVjaG8gIlxuPCEtLSBNVV9PS18iLmRhdGUoJ2MnKS4iIC0tPlxuIjsKPD9waHAKLyoqCiAqIFBsdWdpbiBOYW1lOiDlnKjllYboqIDms5Ugwrcg5Yqf6IO95aKe5by6ICh6YWlzaGFuZy1mZWF0dXJlcykKICogRGVzY3JpcHRpb246IOW+i+W4iOWFpempuyArIOeUqOaIt+WSqOivoiArIOW4ruWKqeW3peWFt+W5s+WPsOOAguS/neeVmSBXQi1VbmlmeSDmoYbmnrbkuI3lj5jvvIzmqKHlnZfljJbmianlsZXjgIIKICogVmVyc2lvbjogMS40Ni4wCiAqIEF1dGhvcjog5bCP6b6ZCiAqLwoKaWYgKCAhIGRlZmluZWQoICdBQlNQQVRIJyApICkgewogICAgZXhpdDsgLy8g56aB5q2i55u05o6l6K6/6ZeuCn0KaWYgKCAhIGRlZmluZWQoICdaU0ZfTUFJTl9NQVJLRVInICkgKSB7IGRlZmluZSggJ1pTRl9NQUlOX01BUktFUicsICdWMTQ3XycgLiB0aW1lKCkgKTsgZWNobyAiXG48IS0tIE1BSU5fQUNUSVZFX1YxNDcgLS0+XG4iOyB9CgpkZWZpbmUoICdaU0ZfUEFUSCcsIHBsdWdpbl9kaXJfcGF0aCggX19GSUxFX18gKSApOwpkZWZpbmUoICdaU0ZfVVJMJywgcGx1Z2luX2Rpcl91cmwoIF9fRklMRV9fICkgKTsKLy8g5Y2V5LiA54mI5pys5Y+35p2l5rqQ77ya6LWE5Lqn54mI5pys44CB6YeN5YaZ6KeE5YiZ5Yi35paw44CB5ZCO5Y+w6aG16ISa57uf5LiA5byV55So77yM6YG/5YWN5aSa5aSE56Gs57yW56CB5LiN5ZCM5q2l44CCCmRlZmluZSggJ1pTRl9WRVJTSU9OJywgJzEuNDYuMCcgKTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICog5qih5Z2X5Yqg6L2977yI44q0IG1vZHVsZS1ndWFyZCDmsrvnkIYgKyDms6jlhozooajpqbHliqjvvIkKICoKICogbW9kdWxlLWd1YXJkLnBocCDlv4XpobvmnIDlhYjliqDovb3vvJrlroPlrprkuYkgenNmX2xvYWRfbW9kdWxlcygpIC8genNmX21vZHVsZV9yZWdpc3RyeSgpCiAqIOetieayu+eQhuWHveaVsOOAguWFtuS9mSA1MCsg5Liq5Lia5Yqh5qih5Z2X77yI5ZCrIOOKtSBlcnJvci1wYWdlc++8ieaUueeUseazqOWGjOihqOmhuuW6jyArCiAqIOWQjuWPsOW8gOWFs+eKtuaAgeWGs+WumuWKoOi9veS4juWQpu+8jOS4jeWGjeehrOe8lueggSByZXF1aXJl44CC6L+Z5qC35Y+v5a6e546w5YiG5om554Gw5bqm6YOo572yCiAqIOS4juWNleaooeWdl+enkue6p+WFs+WBnO+8iOivpuingeWQjuWPsOOAjOaooeWdl+W8gOWFs+OAjemhte+8ie+8jOmBv+WFjeS4gOasoeaAp+mDqOe9siAzMCDkuKrmqKHlnZcKICog5Lu75LiA5byC5bi45Y2z5YWo56uZ55m95bGP44CC6aG65bqP5pWP5oSf6YC76L6R5bey5pS25pWb6L+bIHpzZl9tb2R1bGVfcmVnaXN0cnkoKeOAggogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCnJlcXVpcmVfb25jZSBaU0ZfUEFUSCAuICdpbmNsdWRlcy9tb2R1bGUtZ3VhcmQucGhwJzsgIC8vIOOKtCDmqKHlnZfngbDluqblvIDlhbPkuI7lronlhajmqKHlvI/vvIjmsrvnkIblsYLvvIzmnIDlhYjliqDovb3vvIzkuI3kvp3otZblhbbku5bmqKHlnZfvvIkKenNmX2xvYWRfbW9kdWxlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmjInms6jlhozooaggKyDmsrvnkIbnirbmgIHliqDovb3lhajpg6jkuJrliqHmqKHlnZfvvIhjcHTihpLigKbihpJzaGVsbC1maWxs77yJ4oaSIOWQqyDjirUgZXJyb3ItcGFnZXMKcmVxdWlyZV9vbmNlIFpTRl9QQVRIIC4gJ2luY2x1ZGVzL3NlcnZpY2UtbmF2LXNob3J0Y29kZS5waHAnOyAgLy8g5pyN5Yqh5a+86Iiq5Lit5b+D55+t5Luj56CBIFt6c19zZXJ2aWNlX25hdl3vvIhSNDIg5pa55byPMiDpg6jnvbLvvIkKcmVxdWlyZV9vbmNlIFpTRl9QQVRIIC4gJ2luY2x1ZGVzL3Nlby1nZW8tc2NoZW1hLnBocCc7ICAgLy8gR0VPL1NFTyBTY2hlbWEub3JnIEpTT04tTEQg5rOo5YWl77yId3BfZm9vdGVyICsgd3BzZW8gYXJ0aWNsZSBmaWx0ZXLvvIkKcmVxdWlyZV9vbmNlIFpTRl9QQVRIIC4gJ2luY2x1ZGVzL3Nlby1tZXRhLWV4dHJhcy5waHAnOyAgLy8gU0VPK0dFTyBtZXRhIOihpeWFqO+8iGF1dGhvciAvIGFydGljbGU6KiAvIGdlby4qIC8gaHJlZmxhbmfvvIkKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICog6LWE5Lqn5Yqg6L2977yIQ1NTL0pT77yJCiAqCiAqIOmHjeimge+8muacrOermeS4u+mimCAvIOahhuaetihXQi1VbmlmeSnkuI3otbDmoIflh4Ygd3BfZW5xdWV1ZSDovpPlh7rnrqHpgZPvvIwKICog5o+S5Lu2IGVucXVldWUg55qEIHpzLWZlYXR1cmVzIC8genMtdG9vbHMg6LWE5rqQ5LiN5Lya6KKr5omT5Y2w5Yiw5YmN56uvCiAqIO+8iHdwX2hlYWQvd3BfZm9vdGVyIOS4jeS8mui+k+WHuuaPkuS7tiA8bGluaz4vPHNjcmlwdD7vvIxqUXVlcnkg5Lmf5pyq5Yqg6L2977yJ44CCCiAqIOWboOatpOS/neeVmeagh+WHhiBlbnF1ZXVl77yI5L6b5q2j5bi4IFdQIOS4u+mimOWFvOWuue+8ieeahOWQjOaXtu+8jAogKiDpop3lpJbnlKjjgIx0aGVfY29udGVudCDlhoXogZTmoLflvI8gKyDlrqLmiLfnq6/mjInpnIDliqDovb3ohJrmnKzjgI3lhZzlupXvvIwKICog56Gu5L+d5bel5YW35Zyo5Lu75oSP5Li76aKYL+ahhuaetuS4i+mDveiDveato+ehruagt+W8j+WMluW5tuWFt+Wkh+S6pOS6kuiDveWKm+OAggogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmFkZF9hY3Rpb24oICd3cF9lbnF1ZXVlX3NjcmlwdHMnLCBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIGlzX2FkbWluKCkgKSByZXR1cm47CiAgICB3cF9lbnF1ZXVlX3N0eWxlKCAnenMtZmVhdHVyZXMnLCBaU0ZfVVJMIC4gJ2Fzc2V0cy9jc3MvenMtZmVhdHVyZXMuY3NzJywgYXJyYXkoKSwgWlNGX1ZFUlNJT04sICdhbGwnICk7CiAgICB3cF9lbnF1ZXVlX3NjcmlwdCggJ3pzLWZlYXR1cmVzJywgWlNGX1VSTCAuICdhc3NldHMvanMvenMtZmVhdHVyZXMuanMnLCBhcnJheSggJ2pxdWVyeScgKSwgWlNGX1ZFUlNJT04sIHRydWUgKTsKICAgIHdwX2xvY2FsaXplX3NjcmlwdCggJ3pzLWZlYXR1cmVzJywgJ1pTX0FKQVgnLCBhcnJheSgKICAgICAgICAnYWpheHVybCcgPT4gYWRtaW5fdXJsKCAnYWRtaW4tYWpheC5waHAnICksCiAgICAgICAgJ25vbmNlJyAgID0+IHdwX2NyZWF0ZV9ub25jZSggJ3pzX2ZlYXR1cmVzX25vbmNlJyApLAogICAgKSApOwoKICAgIC8qIOKRqyDliJHovqnlt6Xlhbfnu4TotYTkuqfvvJrku4XlnKjlrp7pmYXkvb/nlKjliLDlt6Xlhbfnn63ku6PnoIHnmoTpobXpnaLliqDovb3vvIzpgb/lhY3lhajnq5nlpJrkvZnor7fmsYIgKi8KICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCAnenNfcGFnZV9uZWVkc190b29sc19hc3NldHMnICkgJiYgenNfcGFnZV9uZWVkc190b29sc19hc3NldHMoKSApIHsKICAgICAgICB3cF9lbnF1ZXVlX3N0eWxlKCAnenMtdG9vbHMnLCBaU0ZfVVJMIC4gJ2Fzc2V0cy9jc3MvenMtdG9vbHMuY3NzJywgYXJyYXkoICd6cy1mZWF0dXJlcycgKSwgWlNGX1ZFUlNJT04sICdhbGwnICk7CiAgICAgICAgd3BfZW5xdWV1ZV9zY3JpcHQoICd6cy10b29scycsIFpTRl9VUkwgLiAnYXNzZXRzL2pzL3pzLXRvb2xzLmpzJywgYXJyYXkoICdqcXVlcnknLCAnenMtZmVhdHVyZXMnICksIFpTRl9WRVJTSU9OLCB0cnVlICk7CiAgICB9Cn0sIDIwICk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEYtUjMyLTAx77yIUDDvvInlhoXogZQgQ1NTIOmihOWkhOeQhu+8mndwYXV0b3Ag5YWN55arICsg5L2T56ev5Y6L57ypCiAqCiAqIOmXrumimO+8mnpzX3Rvb2xzX2lubGluZV9hc3NldHMg6L+Q6KGM5LqOIHRoZV9jb250ZW50IOS8mOWFiOe6pyA177yM5oqK5Y6f5aeLIENTUwogKiAgIO+8iOWQq+epuuihjOS4jiAvKiDms6jph4ogKlwv77yJ5ou86L+b5q2j5paH77ybd3BhdXRvcCDlnKjkvJjlhYjnuqcgMTAg5LmL5ZCO5aSE55CG5ZCM5LiA5q61CiAqICAg5q2j5paH77yM5oqKIENTUyDkuK3nmoQqKuepuuihjCoq6L2s5oiQIGA8L3A+PHA+YO+8jOazqOWFpeWIsCA8c3R5bGU+IOWGhemDqOOAggogKiAgIOe6v+S4iuWunua1iyAvYXBwZWFsLyDljZXkuKogPHN0eWxlIGlkPSJ6cy10b29scy1pbmxpbmUiPiDlhoXlkKsgNDY4IOWkhCA8cD4vPC9wPu+8jAogKiAgIOa1j+iniOWZqOaMiSBDU1Mg6K+t5rOV6Kej5p6Q5pe2IGA8L3A+YCDooqvlvZPkvZzpnZ7ms5XpgInmi6nlmagg4oaSCiAqICAgKirntKfpmo/lhbblkI7nmoTmlbTmnaHop4TliJnooqvkuKLlvIMqKu+8jOWunua1i+WPl+W9seWTjeinhOWImee6piAxOTkg5p2h77yMCiAqICAg5YW25Lit5YyF5ZCrIC56cy1jYXJkIC8gLnpzLWJ0biAvIC56cy1mb3JtIC8gLnpzLWFsZXJ0IC8gLnpzLWdyaWQg562J5qC45b+D57uE5Lu244CCCiAqCiAqIOS/ruWkje+8muWGheiBlOWJjeWFiOWBmuOAjOS/neWuiOWOi+e8qeOAjeKAlOKAlAogKiAgIDEuIOWJpeemuyAvKiAqXC8g5rOo6YeK77yI6aG65bim5raI6ZmkIEhUTUwg5rqQ56CB5Lit5b2i5aaCIFt6c194eHhdIOeahOazqOmHiuaWh+acrOWZquWjsO+8ie+8mwogKiAgIDIuIOaKiuaJgOaciei/nue7reepuueZve+8iOWQq+aNouihjO+8ieaKmOWPoOS4uuWNleS4quepuuagvCDihpIg5LiN5YaN5a2Y5Zyo56m66KGMIOKGkiB3cGF1dG9wIOaXoOS7juS4i+aJi++8mwogKiAgIDMuIOS7heWcqOWIhumalOespiB7IH0gOyA6ICwg6YK75Z+f5pS257Sn56m65qC877yI5LiN5YqoID4gKyB+ICggKSDkuI7lkI7pmo/lhpLlj7fvvIwKICogICAgICDpgb/lhY0gY2FsYygpL+WQjuS7o+mAieaLqeWZqC/kvKrnsbvor63kuYnooqvmlLnlhpnvvInjgIIKICogICDlrZfnrKbkuLLlrZfpnaLph4/vvIhjb250ZW50OiLigKYi77yJ5YWo56iL5Y6f5qC35L+d55WZ44CCCiAqCiAqIOe7k+aenOWvueWQjOS4gOS7vSBDU1Mg6K+t5LmJ562J5Lu377yM5L2T56ev57qm5YePIDI1Je+8jOS4lOW9u+W6leWFjeeWqyB3cGF1dG9wIOegtOWdj+OAggogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmlmICggISBmdW5jdGlvbl9leGlzdHMoICd6c19jc3NfaW5saW5lX3ByZXBhcmUnICkgKSB7CiAgICBmdW5jdGlvbiB6c19jc3NfaW5saW5lX3ByZXBhcmUoICRjc3MgKSB7CiAgICAgICAgaWYgKCAhIGlzX3N0cmluZyggJGNzcyApIHx8ICcnID09PSAkY3NzICkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkbGVuICA9IHN0cmxlbiggJGNzcyApOwogICAgICAgICRvdXQgID0gJyc7CiAgICAgICAgJGkgICAgPSAwOwogICAgICAgICRxICAgID0gJyc7ICAgLy8g5b2T5YmN5a2X56ym5Liy5a6a55WM56ym77yIJycg6KGo56S65LiN5Zyo5a2X56ym5Liy5YaF77yJCiAgICAgICAgJHRpZ2h0X3ByZXYgPSBhcnJheSggJ3snID0+IDEsICd9JyA9PiAxLCAnOycgPT4gMSwgJzonID0+IDEsICcsJyA9PiAxICk7CiAgICAgICAgJHRpZ2h0X25leHQgPSBhcnJheSggJ3snID0+IDEsICd9JyA9PiAxLCAnOycgPT4gMSwgJywnID0+IDEgKTsKCiAgICAgICAgd2hpbGUgKCAkaSA8ICRsZW4gKSB7CiAgICAgICAgICAgICRjaCA9ICRjc3NbICRpIF07CgogICAgICAgICAgICAvKiDlrZfnrKbkuLLlhoXpg6jvvJrljp/moLfpgI/kvKDvvIzlkKvovazkuYnluo/liJcgKi8KICAgICAgICAgICAgaWYgKCAnJyAhPT0gJHEgKSB7CiAgICAgICAgICAgICAgICBpZiAoICdcXCcgPT09ICRjaCAmJiAkaSArIDEgPCAkbGVuICkgewogICAgICAgICAgICAgICAgICAgICRvdXQgLj0gJGNoIC4gJGNzc1sgJGkgKyAxIF07CiAgICAgICAgICAgICAgICAgICAgJGkgICArPSAyOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG91dCAuPSAkY2g7CiAgICAgICAgICAgICAgICBpZiAoICRjaCA9PT0gJHEgKSB7CiAgICAgICAgICAgICAgICAgICAgJHEgPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAnIicgPT09ICRjaCB8fCAiJyIgPT09ICRjaCApIHsKICAgICAgICAgICAgICAgICRxICAgID0gJGNoOwogICAgICAgICAgICAgICAgJG91dCAuPSAkY2g7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qIOazqOmHiu+8muaVtOauteS4ouW8gyAqLwogICAgICAgICAgICBpZiAoICcvJyA9PT0gJGNoICYmICRpICsgMSA8ICRsZW4gJiYgJyonID09PSAkY3NzWyAkaSArIDEgXSApIHsKICAgICAgICAgICAgICAgICRlbmQgPSBzdHJwb3MoICRjc3MsICcqLycsICRpICsgMiApOwogICAgICAgICAgICAgICAgJGkgICA9ICggZmFsc2UgPT09ICRlbmQgKSA/ICRsZW4gOiAkZW5kICsgMjsKICAgICAgICAgICAgICAgIC8qIOeUqOS4gOS4quepuuagvOWNoOS9je+8jOmBv+WFjeazqOmHiuS4pOS+p+eahOiusOWPt+aEj+WklueymOi/niAqLwogICAgICAgICAgICAgICAgaWYgKCAnJyAhPT0gJG91dCAmJiAnICcgIT09IHN1YnN0ciggJG91dCwgLTEgKSApIHsKICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICcgJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvKiDnqbrnmb3mipjlj6AgKi8KICAgICAgICAgICAgaWYgKCAnICcgPT09ICRjaCB8fCAiXHQiID09PSAkY2ggfHwgIlxuIiA9PT0gJGNoIHx8ICJcciIgPT09ICRjaCB8fCAiXGYiID09PSAkY2ggKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoICRpIDwgJGxlbiApIHsKICAgICAgICAgICAgICAgICAgICAkdyA9ICRjc3NbICRpIF07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAnICcgIT09ICR3ICYmICJcdCIgIT09ICR3ICYmICJcbiIgIT09ICR3ICYmICJcciIgIT09ICR3ICYmICJcZiIgIT09ICR3ICkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRwcmV2ID0gKCAnJyA9PT0gJG91dCApID8gJycgOiBzdWJzdHIoICRvdXQsIC0xICk7CiAgICAgICAgICAgICAgICAkbmV4dCA9ICggJGkgPCAkbGVuICkgPyAkY3NzWyAkaSBdIDogJyc7CiAgICAgICAgICAgICAgICBpZiAoICcnID09PSAkcHJldiB8fCAnJyA9PT0gJG5leHQgKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIOmmluWwvuepuueZveebtOaOpeS4ouW8gwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCBpc3NldCggJHRpZ2h0X3ByZXZbICRwcmV2IF0gKSB8fCBpc3NldCggJHRpZ2h0X25leHRbICRuZXh0IF0gKSApIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8g5YiG6ZqU56ym6YK75Z+f77ya56m65qC85peg6K+t5LmJ77yM5pS257SnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkb3V0IC49ICcgJzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkb3V0IC49ICRjaDsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cmltKCAkb3V0ICk7CiAgICB9Cn0KCi8qKgogKiDor7vlj5blubbljovnvKnotYTkuqcgQ1NT77yI5bimIHRyYW5zaWVudCDnvJPlrZjvvIzplK7lkKsgbXRpbWUrc2l6Ze+8jOaWh+S7tuS4gOaUueWNs+WkseaViO+8ieOAggogKgogKiBAcGFyYW0gc3RyaW5nICRyZWwg55u45a+55o+S5Lu25qC555uu5b2V55qE6Lev5b6E44CCCiAqIEByZXR1cm4gc3RyaW5nIOWOi+e8qeWQjueahCBDU1PvvJvmlofku7bkuI3lrZjlnKjov5Tlm57nqbrkuLLjgIIKICovCmlmICggISBmdW5jdGlvbl9leGlzdHMoICd6c19jc3NfaW5saW5lX2dldCcgKSApIHsKICAgIGZ1bmN0aW9uIHpzX2Nzc19pbmxpbmVfZ2V0KCAkcmVsICkgewogICAgICAgIHN0YXRpYyAkbWVtID0gYXJyYXkoKTsKICAgICAgICBpZiAoIGlzc2V0KCAkbWVtWyAkcmVsIF0gKSApIHsKICAgICAgICAgICAgcmV0dXJuICRtZW1bICRyZWwgXTsKICAgICAgICB9CgogICAgICAgICRwYXRoID0gWlNGX1BBVEggLiAkcmVsOwogICAgICAgIGlmICggISBmaWxlX2V4aXN0cyggJHBhdGggKSApIHsKICAgICAgICAgICAgJG1lbVsgJHJlbCBdID0gJyc7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRrZXkgPSAnenNfY3NtaW5fJyAuIG1kNSggJHJlbCAuICd8JyAuIChpbnQpIGZpbGVtdGltZSggJHBhdGggKSAuICd8JyAuIChpbnQpIGZpbGVzaXplKCAkcGF0aCApIC4gJ3wnIC4gWlNGX1ZFUlNJT04gKTsKICAgICAgICAkaGl0ID0gZ2V0X3RyYW5zaWVudCggJGtleSApOwogICAgICAgIGlmICggaXNfc3RyaW5nKCAkaGl0ICkgJiYgJycgIT09ICRoaXQgKSB7CiAgICAgICAgICAgICRtZW1bICRyZWwgXSA9ICRoaXQ7CiAgICAgICAgICAgIHJldHVybiAkaGl0OwogICAgICAgIH0KCiAgICAgICAgJG1pbiA9IHpzX2Nzc19pbmxpbmVfcHJlcGFyZSggKHN0cmluZykgZmlsZV9nZXRfY29udGVudHMoICRwYXRoICkgKTsKICAgICAgICBpZiAoICcnICE9PSAkbWluICkgewogICAgICAgICAgICBzZXRfdHJhbnNpZW50KCAka2V5LCAkbWluLCBXRUVLX0lOX1NFQ09ORFMgKTsKICAgICAgICB9CiAgICAgICAgJG1lbVsgJHJlbCBdID0gJG1pbjsKICAgICAgICByZXR1cm4gJG1pbjsKICAgIH0KfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiDlhZzlupXms6jlhaXvvJrlhoXogZTlt6XlhbcgQ1NTICsg5a6i5oi356uv5Yqg6L29IEpT77yIalF1ZXJ5IOe8uuWkseaXtuS7jiBDRE4g6KGl6L2977yJCiAqIOivpeaWueahiOS4jeS+nei1luS4u+mimOaYr+WQpuiwg+eUqCB3cF9oZWFkL3dwX2Zvb3Rlcu+8jOS5n+S4jeS+nei1luahhuaetuaYr+WQpuaJk+WNsCBlbnF1ZXVl77yMCiAqIOWboOatpOiDveeos+WumuS/ruWkjeOAjOW3peWFt+aXoOagt+W8jyAvIOaXoOS6pOS6kuOAjeeahOmXrumimOOAggogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmFkZF9maWx0ZXIoICd0aGVfY29udGVudCcsICd6c190b29sc19pbmxpbmVfYXNzZXRzJywgNSApOwppZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnenNfdG9vbHNfaW5saW5lX2Fzc2V0cycgKSApIHsKICAgIGZ1bmN0aW9uIHpzX3Rvb2xzX2lubGluZV9hc3NldHMoICRjb250ZW50ICkgewogICAgICAgIHN0YXRpYyAkZG9uZSA9IGZhbHNlOwogICAgICAgIGlmICggJGRvbmUgfHwgaXNfYWRtaW4oKSApIHsKICAgICAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgICAgIH0KCiAgICAgICAgLyog5Lqk5LqS5Z6L5bel5YW377ya6ZyA6KaBIHpzLXRvb2xzLmNzcyArIOaPkuS7tiBKU++8iOWQqyBqUXVlcnkg5YWc5bqV6KGl6L2977yJICovCiAgICAgICAgJHRvb2xzX2NvZGVzID0gYXJyYXkoCiAgICAgICAgICAgICd6c19zZW50ZW5jZV9jYWxjJywgJ3pzX2JhaWxfYXNzZXNzJywgJ3pzX2NyaW1pbmFsX3RpbWVsaW5lJywKICAgICAgICAgICAgJ3pzX2NyaW1lX3BlbmFsdHknLCAnenNfdG9vbHNfaHViJywKICAgICAgICAgICAgJ3pzX2ZlZV9jYWxjdWxhdG9yJywgJ3pzX2xpdGlnYXRpb25fY2FsY3VsYXRvcicsICd6c19kb2NfbGliJywgJ3pzX2xhd19zZWFyY2gnLAogICAgICAgICk7CiAgICAgICAgJG5lZWRfdG9vbHMgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICggJHRvb2xzX2NvZGVzIGFzICRjICkgewogICAgICAgICAgICBpZiAoIGhhc19zaG9ydGNvZGUoICRjb250ZW50LCAkYyApICkgewogICAgICAgICAgICAgICAgJG5lZWRfdG9vbHMgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qIOWfuuehgOagt+W8j+mXqOaOp++8iOiHquWKqO+8jFIzMCDph43mnoTvvInvvJoKICAgICAgICAgICDljp/mlrnmoYjmiYvlt6Xnu7TmiqQgJGJhc2VfY29kZXMg5riF5Y2V77yM6ZqP5qih5Z2X5aKe5Yqg6ZyA5ZCM5q2l77yM5bey57Sv6K6hIDE2IOS4qiBsZWdhY3kKICAgICAgICAgICDnn63ku6PnoIHmvI/liJcg4oaSIOmVv+acn+WRiuitpuOAguaUueS4uui/kOihjOaXtuS7jiBXUCDlt7Lms6jlhoznn63ku6PnoIHmoIfnrb7kuK3or4bliKvlhajpg6ggenNfCiAgICAgICAgICAg55+t5Luj56CB77yM5a6e546w44CM5paw5aKe55+t5Luj56CB6Ieq5Yqo6I635b6X5qC35byP5YWc5bqV44CB5o6l57q/5peg6ZyA5ZCM5q2l5riF5Y2V44CN44CCCiAgICAgICAgICAg5Lqk5LqS5Z6L5bel5YW377yI6ZyAIHpzLXRvb2xzLmNzcyArIEpT77yJ5LuN55Sx5LiK5pa5ICR0b29sc19jb2RlcyDliKTlrprvvIzkv53mjIHkuI3lj5jjgIIgKi8KCiAgICAgICAgLyog44mfIOaXouaciemhteWKn+iDveWhq+WFheWxgumihOWIpO+8mgogICAgICAgICAgIOWhq+WFheWxguWcqCB0aGVfY29udGVudDoyMCDmiY3ov73liqDlip/og73ljLrvvIzmnKzlh73mlbDov5DooYzkuo7kvJjlhYjnuqcgNe+8jAogICAgICAgICAgIOatpOWIu+ato+aWh+mHjOW5tuayoeacieWug+Wwhuimgei/veWKoOeahOefreS7o+eggeOAguiLpeS4jemihOWIpO+8jAogICAgICAgICAgIOiiq+Whq+WFheeahOmhtemdouS8muWHuueOsOOAjOaciee7k+aehOOAgeaXoOagt+W8j+OAgeaXoOS6pOS6kuOAjeOAggogICAgICAgICAgIOaVheaKiuOAjOWNs+Wwhui/veWKoOeahOefreS7o+eggeS4suOAjeW5tuWFpeaOoua1i+ebruagh+S4gOi1t+WIpOaWreOAgiAqLwogICAgICAgICRwcm9iZSA9IChzdHJpbmcpICRjb250ZW50OwogICAgICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCAnenNfc2hlbGxfZmlsbF9jb2Rlc19mb3JfY3VycmVudCcgKSApIHsKICAgICAgICAgICAgJHBlbmRpbmcgPSB6c19zaGVsbF9maWxsX2NvZGVzX2Zvcl9jdXJyZW50KCk7CiAgICAgICAgICAgIGlmICggJycgIT09ICRwZW5kaW5nICkgewogICAgICAgICAgICAgICAgJHByb2JlIC49ICRwZW5kaW5nOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoICR0b29sc19jb2RlcyBhcyAkYyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc19zaG9ydGNvZGUoICRwZW5kaW5nLCAkYyApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkbmVlZF90b29scyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyog6Ieq5Yqo6K+G5Yir77ya5Lu75LiA5bey5rOo5YaMIHpzXyDnn63ku6PnoIHvvIjlkKvlj4LmlbDlnovvvInlh7rnjrDljbPms6jlhaXln7rnoYDmoLflvI/jgIIKICAgICAgICAgICAkc2hvcnRjb2RlX3RhZ3Mg5ZyoIHRoZV9jb250ZW50IOmYtuauteW3suWujOWFqOazqOWGjO+8jOWPr+WuieWFqOmBjeWOhuOAgiAqLwogICAgICAgICRuZWVkX2Jhc2UgPSAkbmVlZF90b29sczsKICAgICAgICBpZiAoICEgJG5lZWRfYmFzZSApIHsKICAgICAgICAgICAgZ2xvYmFsICRzaG9ydGNvZGVfdGFnczsKICAgICAgICAgICAgaWYgKCAhIGVtcHR5KCAkc2hvcnRjb2RlX3RhZ3MgKSAmJiBpc19hcnJheSggJHNob3J0Y29kZV90YWdzICkgKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICggYXJyYXlfa2V5cyggJHNob3J0Y29kZV90YWdzICkgYXMgJHRhZyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIHN0cnBvcyggKHN0cmluZykgJHRhZywgJ3pzXycgKSA9PT0gMCAmJiBoYXNfc2hvcnRjb2RlKCAkcHJvYmUsICR0YWcgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5lZWRfYmFzZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICEgJG5lZWRfYmFzZSAmJiBwcmVnX21hdGNoKCAnL1xbenNfW2Etel9dK1xdLycsICRwcm9iZSApICkgewogICAgICAgICAgICAgICAgJG5lZWRfYmFzZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggISAkbmVlZF9iYXNlICkgewogICAgICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICAgICAgfQogICAgICAgICRkb25lID0gdHJ1ZTsKCiAgICAgICAgLyog5YaF6IGUIENTU++8iOimhuebluahhuaetuacqui+k+WHuuaPkuS7tuagt+W8j+eahOaDheWGte+8iSAqLwogICAgICAgICRjc3NfZmlsZXMgPSBhcnJheSggJ2Fzc2V0cy9jc3MvenMtZmVhdHVyZXMuY3NzJyApOwogICAgICAgIGlmICggJG5lZWRfdG9vbHMgKSB7CiAgICAgICAgICAgICRjc3NfZmlsZXNbXSA9ICdhc3NldHMvY3NzL3pzLXRvb2xzLmNzcyc7CiAgICAgICAgfQogICAgICAgIC8qIEYtUjMyLTAx77ya5pS555So5Y6L57yp5ZCO55qEIENTU++8iOaXoOazqOmHiuOAgeaXoOepuuihjO+8ieKGkiB3cGF1dG9wIOaXoOepuuihjOWPr+i9rO+8jAogICAgICAgICAgIOS4jeWGjeWQkSA8c3R5bGU+IOWGheazqOWFpSA8cD4vPC9wPu+8m+i1hOS6p+etvuWQjeaUueeUqOS4jeWQqyAvKiAqXC8g55qE5bGe5oCn5qCH6K6w77yMCiAgICAgICAgICAg5L6bIGFzc2V0LWZpeCDliKTph43vvIjljp/jgIwvKiB6cy1hc3NldDog5paH5Lu25ZCNICpcL+OAjeazqOmHiuW3sumaj+WOi+e8qeWJpeemu++8ieOAgiAqLwogICAgICAgICRjc3MgID0gJyc7CiAgICAgICAgJHNpZyAgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCAkY3NzX2ZpbGVzIGFzICRyZWwgKSB7CiAgICAgICAgICAgICRjID0genNfY3NzX2lubGluZV9nZXQoICRyZWwgKTsKICAgICAgICAgICAgaWYgKCAnJyAhPT0gJGMgKSB7CiAgICAgICAgICAgICAgICAkY3NzICAuPSAkYyAuICJcbiI7CiAgICAgICAgICAgICAgICAkc2lnW10gPSBiYXNlbmFtZSggJHJlbCApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRzdHlsZSA9ICRjc3MKICAgICAgICAgICAgPyAiXG48c3R5bGUgaWQ9XCJ6cy10b29scy1pbmxpbmVcIiBkYXRhLXpzLWFzc2V0cz1cIiIgLiBlc2NfYXR0ciggaW1wbG9kZSggJywnLCAkc2lnICkgKSAuICJcIj4iIC4gJGNzcyAuICI8L3N0eWxlPlxuIgogICAgICAgICAgICA6ICcnOwoKICAgICAgICAvKiDku4XkuqTkupLlnovlt6XlhbfmiY3liqDovb0gSlPvvJrnvLogalF1ZXJ5IOWImeS7jiBDRE4g6KGl6L2977yM5YaN5oyJ5bqP5Yqg6L295o+S5Lu26ISa5pys44CCCiAgICAgICAgICAg55SoIGNyZWF0ZUVsZW1lbnQg5rOo5YWl77yM6YG/5YWN6KKr5qGG5p626L6T5Ye657yT5Yay5b2T5L2c5o+S5Lu2IDxzY3JpcHQgc3JjPiDliaXnprvjgIIgKi8KICAgICAgICAkanMgPSAnJzsKICAgICAgICBpZiAoICRuZWVkX3Rvb2xzICkgewogICAgICAgICAgICAkYWpheHVybCA9IGFkbWluX3VybCggJ2FkbWluLWFqYXgucGhwJyApOwogICAgICAgICAgICAkbm9uY2UgICA9IHdwX2NyZWF0ZV9ub25jZSggJ3pzX2ZlYXR1cmVzX25vbmNlJyApOwogICAgICAgICAgICAkZl9qcyAgICA9IFpTRl9VUkwgLiAnYXNzZXRzL2pzL3pzLWZlYXR1cmVzLmpzJzsKICAgICAgICAgICAgJHRfanMgICAgPSBaU0ZfVVJMIC4gJ2Fzc2V0cy9qcy96cy10b29scy5qcyc7CiAgICAgICAgICAgICRqcSAgICAgID0gJ2h0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0zLjcuMS5taW4uanMnOwoKICAgICAgICAgICAgJGpzID0gIlxuPHNjcmlwdCBpZD1cInpzLXRvb2xzLWxvYWRlclwiPiIKICAgICAgICAgICAgICAgIC4gIndpbmRvdy5aU19BSkFYPXthamF4dXJsOiIgLiBqc29uX2VuY29kZSggJGFqYXh1cmwgKSAuICIsbm9uY2U6IiAuIGpzb25fZW5jb2RlKCAkbm9uY2UgKSAuICJ9OyIKICAgICAgICAgICAgICAgIC4gIihmdW5jdGlvbigpe2Z1bmN0aW9uIEwocyxjYil7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7ZS5zcmM9cztlLmFzeW5jPWZhbHNlO2Uub25sb2FkPWNiO2Uub25lcnJvcj1jYjtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpO30iCiAgICAgICAgICAgICAgICAuICJmdW5jdGlvbiB0b29sKCl7TCgiIC4ganNvbl9lbmNvZGUoICRmX2pzICkgLiAiLGZ1bmN0aW9uKCl7TCgiIC4ganNvbl9lbmNvZGUoICR0X2pzICkgLiAiKTt9KTt9IgogICAgICAgICAgICAgICAgLiAiaWYod2luZG93LmpRdWVyeSl7dG9vbCgpO31lbHNle0woIiAuIGpzb25fZW5jb2RlKCAkanEgKSAuICIsdG9vbCk7fSIKICAgICAgICAgICAgICAgIC4gIn0pKCk7PC9zY3JpcHQ+XG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdHlsZSAuICRjb250ZW50IC4gJGpzOwogICAgfQp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIOa/gOa0u+aXtuWIt+aWsOmHjeWGmeinhOWIme+8iENQVCDpnIDopoHvvIkKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpyZWdpc3Rlcl9hY3RpdmF0aW9uX2hvb2soIF9fRklMRV9fLCBmdW5jdGlvbiAoKSB7CiAgICBkb19hY3Rpb24oICd6c19yZWdpc3Rlcl9jcHRzJyApOwogICAgZmx1c2hfcmV3cml0ZV9ydWxlcygpOwp9ICk7CnJlZ2lzdGVyX2RlYWN0aXZhdGlvbl9ob29rKCBfX0ZJTEVfXywgZnVuY3Rpb24gKCkgewogICAgZmx1c2hfcmV3cml0ZV9ydWxlcygpOwp9ICk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIOimhuebluW8j+abtOaWsOS4jeS8muinpuWPkea/gOa0u+mSqeWtkO+8jOaVheS7peeJiOacrOWPt+WBmuS4gOasoeaAp+mHjeWGmeinhOWImeWIt+aWsO+8iOS/ruWkjSBDUFQg5Y2V6aG1IDQwNO+8iQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmFkZF9hY3Rpb24oICdpbml0JywgZnVuY3Rpb24gKCkgewogICAgJHYgPSBaU0ZfVkVSU0lPTjsKICAgIGlmICggZ2V0X29wdGlvbiggJ3pzX2ZlYXR1cmVzX3Jld3JpdGVfdicgKSAhPT0gJHYgKSB7CiAgICAgICAgZmx1c2hfcmV3cml0ZV9ydWxlcygpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oICd6c19mZWF0dXJlc19yZXdyaXRlX3YnLCAkdiApOwogICAgfQp9LCAyMCApOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBTRU8g5LyY5YyW77ya5LuOIG1ldGEgLyBPRyAvIFR3aXR0ZXIg5o+P6L+w5Lit5YmU6Zmk5pys5o+S5Lu255+t5Luj56CB5qCH6K6w77yI6YG/5YWN6KO45rqQ56CB5rOE5ryP77yJCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ3pzX3N0cmlwX3Nob3J0Y29kZV9kZXNjJyApICkgewogICAgZnVuY3Rpb24genNfc3RyaXBfc2hvcnRjb2RlX2Rlc2MoICRkZXNjICkgewogICAgICAgICRjbGVhbiA9IHRyaW0oIHByZWdfcmVwbGFjZSggJy9cW3pzX1teXF1dKlxdPy8nLCAnJywgKHN0cmluZykgJGRlc2MgKSApOwogICAgICAgIC8vIOWJlOmZpOWQjuS4uuepuu+8iOmhtemdouato+aWh+S7heacieefreS7o+egge+8ieaXtu+8jOWbnumAgOS4uuermeeCueagh+mimO+8jOmBv+WFjSBPRy9Ud2l0dGVyIOaYvuekuuepuuaIlua6kOeggQogICAgICAgIGlmICggJycgPT09ICRjbGVhbiApIHsKICAgICAgICAgICAgJGNsZWFuID0gZ2V0X2Jsb2dpbmZvKCAnbmFtZScgKSAuICcgwrcg5YiR5LqL6L6p5oqk5LiO5rOV5b6L5ZKo6K+i5bmz5Y+wJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjbGVhbjsKICAgIH0KfQphZGRfZmlsdGVyKCAnd3BzZW9fbWV0YWRlc2MnLCAnenNfc3RyaXBfc2hvcnRjb2RlX2Rlc2MnLCAyMCApOwphZGRfZmlsdGVyKCAnd3BzZW9fb3BlbmdyYXBoX2Rlc2MnLCAnenNfc3RyaXBfc2hvcnRjb2RlX2Rlc2MnLCAyMCApOwphZGRfZmlsdGVyKCAnd3BzZW9fdHdpdHRlcl9kZXNjcmlwdGlvbicsICd6c19zdHJpcF9zaG9ydGNvZGVfZGVzYycsIDIwICk7CmFkZF9maWx0ZXIoICd0aGVfZXhjZXJwdCcsIGZ1bmN0aW9uICggJGV4Y2VycHQgKSB7CiAgICByZXR1cm4gdHJpbSggcHJlZ19yZXBsYWNlKCAnL1xbenNfW2Etel9dK1xdLycsICcnLCAoc3RyaW5nKSAkZXhjZXJwdCApICk7Cn0sIDIwICk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIOWFnOW6lea4heeQhu+8muS4u+mimCAvIFlvYXN0IC8g5YW25LuWIFNFTyDmj5Lku7blnYflj6/og73ovpPlh7rlkKvoo7jnn63ku6PnoIHnmoQKICogZGVzY3JpcHRpb24gLyBvZzpkZXNjcmlwdGlvbiAvIHR3aXR0ZXI6ZGVzY3JpcHRpb27jgILnlKjovpPlh7rnvJPlhrLnu5/kuIDmuIXmtJfvvIwKICog56Gu5L+d5Lu75L2V5p2l5rqQ6YO95LiN5Lya5oqKIFt6c194eHhdIOazhOa8j+WIsOWJjeerryBtZXRh44CCCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KYWRkX2FjdGlvbiggJ3RlbXBsYXRlX3JlZGlyZWN0JywgZnVuY3Rpb24gKCkgewogICAgaWYgKCBpc19hZG1pbigpICkgeyByZXR1cm47IH0KICAgIG9iX3N0YXJ0KCAnenNfY2xlYW5fbWV0YV9vYicgKTsKfSwgOTk5OSApOwoKaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ3pzX2NsZWFuX21ldGFfb2InICkgKSB7CiAgICBmdW5jdGlvbiB6c19jbGVhbl9tZXRhX29iKCAkaHRtbCApIHsKICAgICAgICBpZiAoICEgaXNfc3RyaW5nKCAkaHRtbCApIHx8ICcnID09PSAkaHRtbCApIHsgcmV0dXJuICRodG1sOyB9CiAgICAgICAgJGZiID0gZ2V0X2Jsb2dpbmZvKCAnbmFtZScgKSAuICcgwrcg5YiR5LqL6L6p5oqk5LiO5rOV5b6L5ZKo6K+i5bmz5Y+wJzsKICAgICAgICAkaHRtbCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjayggJy88bWV0YVxiW14+XSo+L2knLCBmdW5jdGlvbiAoICRtICkgdXNlICggJGZiICkgewogICAgICAgICAgICAkdGFnID0gJG1bMF07CiAgICAgICAgICAgIGlmICggISBwcmVnX21hdGNoKCAnLyg/Om5hbWV8cHJvcGVydHkpXHMqPVxzKlsiXCddKD86ZGVzY3JpcHRpb258b2c6ZGVzY3JpcHRpb258dHdpdHRlcjpkZXNjcmlwdGlvbilbIlwnXS9pJywgJHRhZyApICkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0YWc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhIHByZWdfbWF0Y2goICcvY29udGVudFxzKj1ccypbIlwnXShbXiJcJ10qKVsiXCddL2knLCAkdGFnLCAkYyApICkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0YWc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNsZWFuID0gdHJpbSggcHJlZ19yZXBsYWNlKCAnL1xbenNfW15cXV0qXF0/LycsICcnLCAkY1sxXSApICk7CiAgICAgICAgICAgIGlmICggJycgPT09ICRjbGVhbiApIHsgJGNsZWFuID0gJGZiOyB9CiAgICAgICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoICcvY29udGVudFxzKj1ccypbIlwnXShbXiJcJ10qKVsiXCddL2knLCAnY29udGVudD0iJyAuIGVzY19hdHRyKCAkY2xlYW4gKSAuICciJywgJHRhZywgMSApOwogICAgICAgIH0sICRodG1sICk7CgogICAgICAgIC8qIOe7n+S4gOeahOaVtOmhtSBIVE1MIOi/h+a7pOWFpeWPo++8muKRriBhc3NldC1maXgg562J5qih5Z2X5oyC5Zyo6L+Z6YeM77yMCiAgICAgICAgICAg5aSN55So5ZCM5LiA5bGC6L6T5Ye657yT5Yay77yM6YG/5YWN5bWM5aWXIG9iX3N0YXJ044CCICovCiAgICAgICAgcmV0dXJuIGFwcGx5X2ZpbHRlcnMoICd6c19vYl9odG1sJywgJGh0bWwgKTsKICAgIH0KfQo=PD9waHAKaWYgKCFkZWZpbmVkKCdBQlNQQVRIJykpIHsKICAgIGV4aXQ7Cn0KLy8gVEVNUCBESUFHIChyZW1vdmUgbGF0ZXIpCmFkZF9hY3Rpb24oJ2luaXQnLCBmdW5jdGlvbigpewogICAgaWYgKCBpc3NldCggJF9HRVRbJ3pzZmRpYWcnXSApICkgewogICAgICAgICR6c2ZfZGlhZyA9IGFycmF5KAogICAgICAgICAgICAnYWN0aXZlX3BsdWdpbnMnID0+IGdldF9vcHRpb24oJ2FjdGl2ZV9wbHVnaW5zJyksCiAgICAgICAgICAgICd0ZW1wbGF0ZScgPT4gZ2V0X29wdGlvbigndGVtcGxhdGUnKSwKICAgICAgICAgICAgJ3N0eWxlc2hlZXQnID0+IGdldF9vcHRpb24oJ3N0eWxlc2hlZXQnKSwKICAgICAgICAgICAgJ3dwX2NhY2hlX2NvbnN0JyA9PiAoIGRlZmluZWQoJ1dQX0NBQ0hFJykgPyBXUF9DQUNIRSA6ICduL2EnICksCiAgICAgICAgICAgICdpc196YWlzaGFuZ19mZWF0dXJlc19hY3RpdmUnID0+IGluX2FycmF5KCd6YWlzaGFuZy1mZWF0dXJlcy96YWlzaGFuZy1mZWF0dXJlcy5waHAnLCAoYXJyYXkpIGdldF9vcHRpb24oJ2FjdGl2ZV9wbHVnaW5zJyksIHRydWUpLAogICAgICAgICAgICAnaW5jbHVkZV9wYXRoX2hhc19zZW9fZ2VvJyA9PiBmaWxlX2V4aXN0cyggWlNGX1BBVEggLiAnaW5jbHVkZXMvc2VvLWdlby1zY2hlbWEucGhwJyApLAogICAgICAgICk7CiAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCBfX0RJUl9fIC4gJy96c2ZfZGlhZy5sb2cnLCBwcmludF9yKCAkenNmX2RpYWcsIHRydWUgKSApOwogICAgfQp9KTsKCgpkZWZpbmUoJ1pZX1RIRU1FX1ZFUlNJT04nLCAnMS4xLjAnKTsKCmZ1bmN0aW9uIHp5X3RoZW1lX3NldHVwKCkgewogICAgYWRkX3RoZW1lX3N1cHBvcnQoJ3RpdGxlLXRhZycpOwogICAgYWRkX3RoZW1lX3N1cHBvcnQoJ3Bvc3QtdGh1bWJuYWlscycpOwogICAgYWRkX3RoZW1lX3N1cHBvcnQoJ2h0bWw1JywgWydzZWFyY2gtZm9ybScsICdnYWxsZXJ5JywgJ2NhcHRpb24nLCAnc3R5bGUnLCAnc2NyaXB0J10pOwogICAgYWRkX3RoZW1lX3N1cHBvcnQoJ2N1c3RvbS1sb2dvJywgWwogICAgICAgICdoZWlnaHQnICAgICAgPT4gODAsCiAgICAgICAgJ3dpZHRoJyAgICAgICA9PiAyNDAsCiAgICAgICAgJ2ZsZXgtaGVpZ2h0JyA9PiB0cnVlLAogICAgICAgICdmbGV4LXdpZHRoJyAgPT4gdHJ1ZSwKICAgIF0pOwoKICAgIHJlZ2lzdGVyX25hdl9tZW51cyhbCiAgICAgICAgJ3ByaW1hcnknID0+ICfkuLvlr7zoiKonLAogICAgICAgICdmb290ZXInICA9PiAn5bqV6YOo5a+86IiqJywKICAgIF0pOwp9CmFkZF9hY3Rpb24oJ2FmdGVyX3NldHVwX3RoZW1lJywgJ3p5X3RoZW1lX3NldHVwJyk7CgpmdW5jdGlvbiB6eV9lbnF1ZXVlX2Fzc2V0cygpIHsKICAgIHdwX2VucXVldWVfc3R5bGUoJ3p5LXN0eWxlJywgZ2V0X3N0eWxlc2hlZXRfdXJpKCksIFtdLCBaWV9USEVNRV9WRVJTSU9OKTsKICAgIHdwX2VucXVldWVfc3R5bGUoJ3p5LW1haW4nLCBnZXRfdGhlbWVfZmlsZV91cmkoJy9hc3NldHMvY3NzL21haW4uY3NzJyksIFsnenktc3R5bGUnXSwgWllfVEhFTUVfVkVSU0lPTik7CiAgICB3cF9lbnF1ZXVlX3NjcmlwdCgnenktbWFpbicsIGdldF90aGVtZV9maWxlX3VyaSgnL2Fzc2V0cy9qcy9tYWluLmpzJyksIFtdLCBaWV9USEVNRV9WRVJTSU9OLCB0cnVlKTsKfQphZGRfYWN0aW9uKCd3cF9lbnF1ZXVlX3NjcmlwdHMnLCAnenlfZW5xdWV1ZV9hc3NldHMnKTsKCmZ1bmN0aW9uIHp5X3NlYXJjaF9mb3JtKCRmb3JtKSB7CiAgICAkZm9ybSA9ICcKICAgIDxmb3JtIHJvbGU9InNlYXJjaCIgbWV0aG9kPSJnZXQiIGNsYXNzPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSInIC4gZXNjX3VybChob21lX3VybCgnLycpKSAuICciPgogICAgICAgIDxpbnB1dCB0eXBlPSJzZWFyY2giIGNsYXNzPSJzZWFyY2gtZmllbGQiIHBsYWNlaG9sZGVyPSLmkJzntKLmoYjku7bjgIHpl67nrZTjgIHms5Xop4TjgIHlvovluIgiIHZhbHVlPSInIC4gZ2V0X3NlYXJjaF9xdWVyeSgpIC4gJyIgbmFtZT0icyIgLz4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InNlYXJjaC1zdWJtaXQiPuaQnOe0ojwvYnV0dG9uPgogICAgPC9mb3JtPic7CiAgICByZXR1cm4gJGZvcm07Cn0KYWRkX2ZpbHRlcignZ2V0X3NlYXJjaF9mb3JtJywgJ3p5X3NlYXJjaF9mb3JtJyk7CgpmdW5jdGlvbiB6eV9leGNlcnB0X2xlbmd0aCgkbGVuZ3RoKSB7CiAgICByZXR1cm4gMzI7Cn0KYWRkX2ZpbHRlcignZXhjZXJwdF9sZW5ndGgnLCAnenlfZXhjZXJwdF9sZW5ndGgnLCA5OTkpOwoKZnVuY3Rpb24genlfZXhjZXJwdF9tb3JlKCRtb3JlKSB7CiAgICByZXR1cm4gJ+KApic7Cn0KYWRkX2ZpbHRlcignZXhjZXJwdF9tb3JlJywgJ3p5X2V4Y2VycHRfbW9yZScpOwoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3p5X2dldF9maXJzdF90ZXJtX25hbWUnKSkgewogICAgZnVuY3Rpb24genlfZ2V0X2ZpcnN0X3Rlcm1fbmFtZSgkcG9zdF9pZCwgJHRheG9ub215ID0gJ2NhdGVnb3J5JykgewogICAgICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3RfaWQsICR0YXhvbm9teSk7CiAgICAgICAgaWYgKCFlbXB0eSgkdGVybXMpICYmICFpc193cF9lcnJvcigkdGVybXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGVybXNbMF0tPm5hbWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnJzsKICAgIH0KfQoKZnVuY3Rpb24genlfc2VjdGlvbl9xdWVyeSgkcXVlcnlfYXJncywgJGVtcHR5X3RleHQgPSAn5pqC5peg5YaF5a65JywgJG1vcmVfdXJsID0gJycpIHsKICAgICRxID0gbmV3IFdQX1F1ZXJ5KCRxdWVyeV9hcmdzKTsKCiAgICBvYl9zdGFydCgpOwogICAgaWYgKCRxLT5oYXZlX3Bvc3RzKCkpIDoKICAgICAgICBlY2hvICc8dWwgY2xhc3M9Imxpc3QiPic7CiAgICAgICAgd2hpbGUgKCRxLT5oYXZlX3Bvc3RzKCkpIDogJHEtPnRoZV9wb3N0KCk7CiAgICAgICAgICAgICR0aW1lID0gZ2V0X3RoZV9kYXRlKCdtLWQnKTsKICAgICAgICAgICAgZWNobyAnPGxpPic7CiAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9IicgLiBlc2NfdXJsKGdldF9wZXJtYWxpbmsoKSkgLiAnIj4nOwogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJsaXN0LXRpdGxlIj4nOwogICAgICAgICAgICBlY2hvICc8c3Bhbj4nIC4gZXNjX2h0bWwoZ2V0X3RoZV90aXRsZSgpKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgZWNobyAnPGVtPicgLiBlc2NfaHRtbCgkdGltZSkgLiAnPC9lbT4nOwogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICBlY2hvICc8cD4nIC4gZXNjX2h0bWwoZ2V0X3RoZV9leGNlcnB0KCkpIC4gJzwvcD4nOwogICAgICAgICAgICBlY2hvICc8L2E+JzsKICAgICAgICAgICAgZWNobyAnPC9saT4nOwogICAgICAgIGVuZHdoaWxlOwogICAgICAgIGVjaG8gJzwvdWw+JzsKICAgIGVsc2UgOgogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Inp5LWVtcHR5Ij4nOwogICAgICAgIGVjaG8gJzxwPicgLiBlc2NfaHRtbCgkZW1wdHlfdGV4dCkgLiAnPC9wPic7CiAgICAgICAgaWYgKCRtb3JlX3VybCkgewogICAgICAgICAgICBlY2hvICc8YSBjbGFzcz0ienktZW1wdHlfX21vcmUiIGhyZWY9IicgLiBlc2NfdXJsKCRtb3JlX3VybCkgLiAnIj7mtY/op4jlhajpg6ggJnJzYXF1bzs8L2E+JzsKICAgICAgICB9CiAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgIGVuZGlmOwogICAgd3BfcmVzZXRfcG9zdGRhdGEoKTsKCiAgICByZXR1cm4gb2JfZ2V0X2NsZWFuKCk7Cn0KCmZ1bmN0aW9uIHp5X3JlZ2lzdGVyX3NpZGViYXJzKCkgewogICAgcmVnaXN0ZXJfc2lkZWJhcihbCiAgICAgICAgJ25hbWUnICAgICAgICAgID0+ICfpppbpobXkvqfmoI8nLAogICAgICAgICdpZCcgICAgICAgICAgICA9PiAnaG9tZS1zaWRlYmFyJywKICAgICAgICAnZGVzY3JpcHRpb24nICAgPT4gJ+mmlumhteWPs+S+p+e7hOS7tuWMuicsCiAgICAgICAgJ2JlZm9yZV93aWRnZXQnID0+ICc8ZGl2IGNsYXNzPSJjYXJkIj4nLAogICAgICAgICdhZnRlcl93aWRnZXQnICA9PiAnPC9kaXY+JywKICAgICAgICAnYmVmb3JlX3RpdGxlJyAgPT4gJzxkaXYgY2xhc3M9ImNhcmQtaGVhZCI+PGgzPicsCiAgICAgICAgJ2FmdGVyX3RpdGxlJyAgPT4gJzwvaDM+PC9kaXY+PGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4nLAogICAgXSk7Cn0KYWRkX2FjdGlvbignd2lkZ2V0c19pbml0JywgJ3p5X3JlZ2lzdGVyX3NpZGViYXJzJyk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICog5b6L5biI5bGV56S65qih5Z2X77yI5Y+C54Wn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omA5a6Y572RIMK3IOWcqOWVhuiogOazlSB2MS4xLjDvvIkKICogIC0g5rOo5YaMIGxhd3llciDoh6rlrprkuYnmlofnq6DnsbvlnosgKyBsYXd5ZXJfc3BlY2lhbHR5IOaThemVv+mihuWfn+WIhuexuwogKiAgLSDmlofnq6DvvIhwb3N077yJ5Y+v5YWz6IGU5b6L5biI77ya57yW6L6R6aG1IE1ldGFib3jvvIhfenlfcmVsYXRlZF9sYXd5ZXJz77yJCiAqICAtIOaWh+eroOmhteS+p+agj+WxleekuuOAjOacrOaWh+WFs+iBlOW+i+W4iOOAjeWQjeeJh++8iOWQq+aZuuiDveWbnumAgOWMuemFje+8iQogKiAgLSDkuLvpopjlkK/nlKjml7boi6XlvovluIjkuLrnqbrvvIzoh6rliqjmkq3np40gOSDkvY3nmb7njq/lvovluIjvvIjlhazlvIDotYTmlpnvvIkKICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgpmdW5jdGlvbiB6eV9yZWdpc3Rlcl9sYXd5ZXJfY3B0KCkgewogICAgcmVnaXN0ZXJfcG9zdF90eXBlKCdsYXd5ZXInLCBbCiAgICAgICAgJ2xhYmVscycgPT4gWwogICAgICAgICAgICAnbmFtZScgICAgICAgICAgPT4gJ+W+i+W4iOWboumYnycsCiAgICAgICAgICAgICdzaW5ndWxhcl9uYW1lJyA9PiAn5b6L5biIJywKICAgICAgICAgICAgJ2FkZF9uZXcnICAgICAgID0+ICfmt7vliqDlvovluIgnLAogICAgICAgICAgICAnZWRpdF9pdGVtJyAgICAgPT4gJ+e8lui+keW+i+W4iCcsCiAgICAgICAgICAgICdhbGxfaXRlbXMnICAgICA9PiAn5YWo6YOo5b6L5biIJywKICAgICAgICAgICAgJ3NlYXJjaF9pdGVtcycgID0+ICfmkJzntKLlvovluIgnLAogICAgICAgIF0sCiAgICAgICAgJ3B1YmxpYycgICAgICAgID0+IHRydWUsCiAgICAgICAgJ2hhc19hcmNoaXZlJyAgID0+IHRydWUsCiAgICAgICAgJ3Jld3JpdGUnICAgICAgID0+IFsnc2x1ZycgPT4gJ2xhd3llcnMnLCAnd2l0aF9mcm9udCcgPT4gZmFsc2VdLAogICAgICAgICdtZW51X3Bvc2l0aW9uJyA9PiAyMCwKICAgICAgICAnbWVudV9pY29uJyAgICAgPT4gJ2Rhc2hpY29ucy1idXNpbmVzc3BlcnNvbicsCiAgICAgICAgJ3N1cHBvcnRzJyAgICAgID0+IFsndGl0bGUnLCAnZWRpdG9yJywgJ2V4Y2VycHQnLCAndGh1bWJuYWlsJywgJ2N1c3RvbS1maWVsZHMnXSwKICAgICAgICAnc2hvd19pbl9yZXN0JyAgPT4gdHJ1ZSwKICAgIF0pOwoKICAgIHJlZ2lzdGVyX3RheG9ub215KCdsYXd5ZXJfc3BlY2lhbHR5JywgJ2xhd3llcicsIFsKICAgICAgICAnbGFiZWxzJyA9PiBbCiAgICAgICAgICAgICduYW1lJyAgICAgICAgICA9PiAn5pOF6ZW/6aKG5Z+fJywKICAgICAgICAgICAgJ3Npbmd1bGFyX25hbWUnID0+ICfmk4Xplb/poobln58nLAogICAgICAgICAgICAnYWRkX25ld19pdGVtJyAgPT4gJ+a3u+WKoOaThemVv+mihuWfnycsCiAgICAgICAgXSwKICAgICAgICAncHVibGljJyAgICAgICAgPT4gdHJ1ZSwKICAgICAgICAnaGllcmFyY2hpY2FsJyAgPT4gdHJ1ZSwKICAgICAgICAncmV3cml0ZScgICAgICAgPT4gWydzbHVnJyA9PiAnbGF3eWVyLXNwZWNpYWx0eSddLAogICAgICAgICdzaG93X2luX3Jlc3QnICA9PiB0cnVlLAogICAgXSk7Cn0KYWRkX2FjdGlvbignaW5pdCcsICd6eV9yZWdpc3Rlcl9sYXd5ZXJfY3B0Jyk7CgovKiDlvovluIjnu5PmnoTljJblrZfmrrUgKi8KZnVuY3Rpb24genlfbGF3eWVyX21ldGFfZmllbGRzKCkgewogICAgcmV0dXJuIFsKICAgICAgICAnX3p5X2xhd3llcl90aXRsZScgICAgICAgPT4gJ+iBjOWKoSAvIOiBjOensCcsCiAgICAgICAgJ196eV9sYXd5ZXJfZmlybScgICAgICAgID0+ICfmiafkuJrmnLrmnoQnLAogICAgICAgICdfenlfbGF3eWVyX2V4cGVyaWVuY2UnICA9PiAn5omn5Lia5bm06ZmQJywKICAgICAgICAnX3p5X2xhd3llcl9waG9uZScgICAgICAgPT4gJ+WSqOivoueUteivnScsCiAgICBdOwp9CgphZGRfYWN0aW9uKCdhZGRfbWV0YV9ib3hlcycsIGZ1bmN0aW9uICgpIHsKICAgIGFkZF9tZXRhX2JveCgnenlfbGF3eWVyX21ldGEnLCAn5b6L5biI5L+h5oGvJywgZnVuY3Rpb24gKCRwb3N0KSB7CiAgICAgICAgZm9yZWFjaCAoenlfbGF3eWVyX21ldGFfZmllbGRzKCkgYXMgJGsgPT4gJGxhYmVsKSB7CiAgICAgICAgICAgICR2ID0gZ2V0X3Bvc3RfbWV0YSgkcG9zdC0+SUQsICRrLCB0cnVlKTsKICAgICAgICAgICAgcHJpbnRmKAogICAgICAgICAgICAgICAgJzxwPjxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHg7Ij4lczwvbGFiZWw+JyAuCiAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IiVzIiB2YWx1ZT0iJXMiIHN0eWxlPSJ3aWR0aDoxMDAlJTtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNjY2Q7Ym9yZGVyLXJhZGl1czo2cHg7Ij48L3A+JywKICAgICAgICAgICAgICAgIGVzY19odG1sKCRsYWJlbCksIGVzY19hdHRyKCRrKSwgZXNjX2F0dHIoJHYpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfSwgJ2xhd3llcicsICdub3JtYWwnLCAnaGlnaCcpOwoKICAgIGFkZF9tZXRhX2JveCgnenlfcmVsYXRlZF9sYXd5ZXJzJywgJ+acrOaWh+WFs+iBlOW+i+W4iCcsIGZ1bmN0aW9uICgkcG9zdCkgewogICAgICAgICRzZWwgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ196eV9yZWxhdGVkX2xhd3llcnMnLCB0cnVlKTsKICAgICAgICAkc2VsID0gaXNfYXJyYXkoJHNlbCkgPyBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCdpbnR2YWwnLCAkc2VsKSkgOiBbXTsKICAgICAgICAkbGF3eWVycyA9IGdldF9wb3N0cyhbJ3Bvc3RfdHlwZScgPT4gJ2xhd3llcicsICdwb3N0c19wZXJfcGFnZScgPT4gLTEsICdvcmRlcmJ5JyA9PiAndGl0bGUnLCAnb3JkZXInID0+ICdBU0MnXSk7CiAgICAgICAgZWNobyAnPHAgc3R5bGU9ImNvbG9yOiM2Njc7Zm9udC1zaXplOjEzcHg7bWFyZ2luOjAgMCA4cHg7Ij7pgInmi6nkuI7or6Xmlofnq6Dnm7jlhbPogZTnmoTlvovluIjvvIzlsIblnKjmlofnq6DpobXkvqfmoI/lsZXnpLrlhbblkI3niYfjgILmnKrpgInmi6nml7bmjInmlofnq6DliIbnsbvmmbrog73ljLnphY3jgII8L3A+JzsKICAgICAgICBlY2hvICc8c2VsZWN0IG5hbWU9Inp5X3JlbGF0ZWRfbGF3eWVyc1tdIiBtdWx0aXBsZSBzaXplPSInIC4gbWluKDgsIG1heCgzLCBjb3VudCgkbGF3eWVycykpKSAuICciIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2NjZDtib3JkZXItcmFkaXVzOjZweDsiPic7CiAgICAgICAgZm9yZWFjaCAoJGxhd3llcnMgYXMgJGwpIHsKICAgICAgICAgICAgJGNoZWNrZWQgPSBpbl9hcnJheSgkbC0+SUQsICRzZWwsIHRydWUpID8gJyBzZWxlY3RlZCcgOiAnJzsKICAgICAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJyAuICRsLT5JRCAuICciJyAuICRjaGVja2VkIC4gJz4nIC4gZXNjX2h0bWwoJGwtPnBvc3RfdGl0bGUpIC4gJzwvb3B0aW9uPic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvc2VsZWN0Pic7CiAgICB9LCAncG9zdCcsICdzaWRlJywgJ2RlZmF1bHQnKTsKfSk7CgphZGRfYWN0aW9uKCdzYXZlX3Bvc3QnLCBmdW5jdGlvbiAoJHBvc3RfaWQpIHsKICAgIGlmIChkZWZpbmVkKCdET0lOR19BVVRPU0FWRScpICYmIERPSU5HX0FVVE9TQVZFKSByZXR1cm47CiAgICBpZiAoISBjdXJyZW50X3VzZXJfY2FuKCdlZGl0X3Bvc3QnLCAkcG9zdF9pZCkpIHJldHVybjsKICAgIGlmIChpc3NldCgkX1BPU1RbJ196eV9sYXd5ZXJfdGl0bGUnXSkgfHwgZ2V0X3Bvc3RfdHlwZSgkcG9zdF9pZCkgPT09ICdsYXd5ZXInKSB7CiAgICAgICAgZm9yZWFjaCAoenlfbGF3eWVyX21ldGFfZmllbGRzKCkgYXMgJGsgPT4gJGxhYmVsKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkX1BPU1RbJGtdKSkgewogICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkcG9zdF9pZCwgJGssIHNhbml0aXplX3RleHRfZmllbGQod3BfdW5zbGFzaCgkX1BPU1RbJGtdKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ3p5X3JlbGF0ZWRfbGF3eWVycycsICRfUE9TVCkpIHsKICAgICAgICAkdmFscyA9IGFycmF5X21hcCgnaW50dmFsJywgKGFycmF5KSAkX1BPU1RbJ3p5X3JlbGF0ZWRfbGF3eWVycyddKTsKICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCRwb3N0X2lkLCAnX3p5X3JlbGF0ZWRfbGF3eWVycycsICR2YWxzKTsKICAgIH0KfSk7CgovKiDojrflj5bmlofnq6DlhbPogZTlvovluIjvvIjlkKvmmbrog73lm57pgIDvvIkgKi8KZnVuY3Rpb24genlfZ2V0X3JlbGF0ZWRfbGF3eWVycygkcG9zdF9pZCwgJGxpbWl0ID0gMykgewogICAgJHNlbCA9IGdldF9wb3N0X21ldGEoJHBvc3RfaWQsICdfenlfcmVsYXRlZF9sYXd5ZXJzJywgdHJ1ZSk7CiAgICAkc2VsID0gaXNfYXJyYXkoJHNlbCkgPyBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCdpbnR2YWwnLCAkc2VsKSkgOiBbXTsKICAgIGlmICghIGVtcHR5KCRzZWwpKSB7CiAgICAgICAgcmV0dXJuIGdldF9wb3N0cyhbCiAgICAgICAgICAgICdwb3N0X3R5cGUnID0+ICdsYXd5ZXInLCAncG9zdHNfcGVyX3BhZ2UnID0+ICRsaW1pdCwKICAgICAgICAgICAgJ3Bvc3RfX2luJyA9PiAkc2VsLCAnb3JkZXJieScgPT4gJ3Bvc3RfX2luJywgJ29yZGVyJyA9PiAnQVNDJywKICAgICAgICBdKTsKICAgIH0KICAgICRjYXRzID0gZ2V0X3RoZV9jYXRlZ29yeSgkcG9zdF9pZCk7CiAgICBpZiAoISBlbXB0eSgkY2F0cykpIHsKICAgICAgICAkbWF0Y2hlZCA9IGdldF9wb3N0cyhbCiAgICAgICAgICAgICdwb3N0X3R5cGUnID0+ICdsYXd5ZXInLCAncG9zdHNfcGVyX3BhZ2UnID0+ICRsaW1pdCwKICAgICAgICAgICAgJ3RheF9xdWVyeScgPT4gW1sndGF4b25vbXknID0+ICdsYXd5ZXJfc3BlY2lhbHR5JywgJ2ZpZWxkJyA9PiAnc2x1ZycsICd0ZXJtcycgPT4gJGNhdHNbMF0tPnNsdWddXSwKICAgICAgICBdKTsKICAgICAgICBpZiAoISBlbXB0eSgkbWF0Y2hlZCkpIHJldHVybiAkbWF0Y2hlZDsKICAgIH0KICAgIHJldHVybiBnZXRfcG9zdHMoWydwb3N0X3R5cGUnID0+ICdsYXd5ZXInLCAncG9zdHNfcGVyX3BhZ2UnID0+ICRsaW1pdCwgJ29yZGVyYnknID0+ICdkYXRlJywgJ29yZGVyJyA9PiAnQVNDJ10pOwp9CgovKiDlvovluIjlpLTlg4/vvIjmnInnibnoibLlm77liJnnlKjlm77vvIzlkKbliJnpppblrZfoibLlnZfvvIkgKi8KZnVuY3Rpb24genlfbGF3eWVyX2F2YXRhcigkcG9zdCwgJHNpemUgPSA3MikgewogICAgaWYgKGhhc19wb3N0X3RodW1ibmFpbCgkcG9zdCkpIHsKICAgICAgICByZXR1cm4gZ2V0X3RoZV9wb3N0X3RodW1ibmFpbCgkcG9zdCwgWyRzaXplLCAkc2l6ZV0sIFsnc3R5bGUnID0+ICdib3JkZXItcmFkaXVzOjUwJTtvYmplY3QtZml0OmNvdmVyO3dpZHRoOicgLiAkc2l6ZSAuICdweDtoZWlnaHQ6JyAuICRzaXplIC4gJ3B4OyddKTsKICAgIH0KICAgICRjaCA9IG1iX3N1YnN0cigkcG9zdC0+cG9zdF90aXRsZSwgMCwgMSwgJ1VURi04Jyk7CiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJ6eS1hdmF0YXIiIHN0eWxlPSJ3aWR0aDonIC4gJHNpemUgLiAncHg7aGVpZ2h0OicgLiAkc2l6ZSAuICdweDtmb250LXNpemU6JyAuIHJvdW5kKCRzaXplIC8gMi40KSAuICdweDsiPicgLiBlc2NfaHRtbCgkY2gpIC4gJzwvc3Bhbj4nOwp9CgovKiDlvovluIjlkI3niYfljaHniYcgSFRNTCAqLwpmdW5jdGlvbiB6eV9sYXd5ZXJfY2FyZF9odG1sKCRwb3N0KSB7CiAgICAkdGl0bGUgPSBnZXRfcG9zdF9tZXRhKCRwb3N0LT5JRCwgJ196eV9sYXd5ZXJfdGl0bGUnLCB0cnVlKTsKICAgICR0ZXJtcyA9IGdldF90aGVfdGVybXMoJHBvc3QtPklELCAnbGF3eWVyX3NwZWNpYWx0eScpOwogICAgJGJpbyAgID0gJHBvc3QtPnBvc3RfZXhjZXJwdCA/OiB3cF90cmltX3dvcmRzKCRwb3N0LT5wb3N0X2NvbnRlbnQsIDI2LCAn4oCmJyk7CiAgICBvYl9zdGFydCgpOwogICAgPz4KICAgIDxhIGNsYXNzPSJsYXd5ZXItY2FyZCIgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGdldF9wZXJtYWxpbmsoJHBvc3QpKTsgPz4iPgogICAgICAgIDxkaXYgY2xhc3M9Imxhd3llci1jYXJkLXRvcCI+CiAgICAgICAgICAgIDw/cGhwIGVjaG8genlfbGF3eWVyX2F2YXRhcigkcG9zdCwgNjApOyA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYXd5ZXItY2FyZC1pZCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPSJsYXd5ZXItbmFtZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkcG9zdC0+cG9zdF90aXRsZSk7ID8+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHRpdGxlKSA6ID8+PHNtYWxsIGNsYXNzPSJsYXd5ZXItdGl0bGUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHRpdGxlKTsgPz48L3NtYWxsPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0ibGF3eWVyLWJpbyI+PD9waHAgZWNobyBlc2NfaHRtbCgkYmlvKTsgPz48L3A+CiAgICAgICAgPD9waHAgaWYgKCR0ZXJtcykgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKGFycmF5X3NsaWNlKCR0ZXJtcywgMCwgNCkgYXMgJHQpIDogPz48c3BhbiBjbGFzcz0iYmFkZ2UgYmx1ZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkdC0+bmFtZSk7ID8+PC9zcGFuPjw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPHNwYW4gY2xhc3M9Imxhd3llci1tb3JlIj7mn6XnnIvlvovluIjor6bmg4Ug4oaSPC9zcGFuPgogICAgPC9hPgogICAgPD9waHAKICAgIHJldHVybiBvYl9nZXRfY2xlYW4oKTsKfQoKLyog5paH56ug6aG15L6n5qCP44CM5pys5paH5YWz6IGU5b6L5biI44CN5qih5Z2XICovCmZ1bmN0aW9uIHp5X3JlbGF0ZWRfbGF3eWVyX2Jsb2NrKCRwb3N0X2lkKSB7CiAgICAkbGF3eWVycyA9IHp5X2dldF9yZWxhdGVkX2xhd3llcnMoJHBvc3RfaWQsIDMpOwogICAgaWYgKGVtcHR5KCRsYXd5ZXJzKSkgewogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InJlbC1sYXd5ZXIiPjxoMyBjbGFzcz0icmVsLWxhd3llci10aXRsZSI+5LiT5Lia5b6L5biI5oqK5YWzPC9oMz4nIC4KICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJjb25zdWx0LWJveCI+PHA+6YGH5Yiw5YiR5LqL5rOV5b6L6aOO6Zmp77yM5om+5LiT5Lia5b6L5biI6K+E5Lyw44CCPC9wPicgLgogICAgICAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgZnVsbCIgaHJlZj0iJyAuIGVzY191cmwoaG9tZV91cmwoJy9sYXd5ZXJzJykpIC4gJyI+5rWP6KeI5b6L5biI5Zui6ZifPC9hPjwvZGl2PjwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZWNobyAnPGRpdiBjbGFzcz0icmVsLWxhd3llciI+PGgzIGNsYXNzPSJyZWwtbGF3eWVyLXRpdGxlIj7mnKzmloflhbPogZTlvovluIg8L2gzPic7CiAgICBmb3JlYWNoICgkbGF3eWVycyBhcyAkbCkgewogICAgICAgIGVjaG8genlfbGF3eWVyX2NhcmRfaHRtbCgkbCk7CiAgICB9CiAgICBlY2hvICc8YSBjbGFzcz0icmVsLWxhd3llci1hbGwiIGhyZWY9IicgLiBlc2NfdXJsKGhvbWVfdXJsKCcvbGF3eWVycycpKSAuICciPuafpeeci+WFqOmDqOW+i+W4iCDihpI8L2E+PC9kaXY+JzsKfQoKLyoqCiAqIOaSreenjS/moKHmraPljJfkuqznmb7njq/lvovluIjlm6LpmJ/mlbDmja7vvIjluYLnrYnvvInjgIIKICoKICog5oyJ44CQ5aeT5ZCN44CR6YCQ5p2h5q+U5a+577yM6ICM5LiN5pivIuWPquimgeW3suacieS7u+aEj+S4gOadoeWwseaVtOS9k+i3s+i/hyLigJTigJTnur/kuIrmm77lrZjlnKjkuIDmnaEKICog56m65a2X5q6155qE5Y2g5L2N5b6L5biI77yM5pen55qE5oC75pWw5Yik5pat5Lya5a+86Ie05YW25L2ZIDgg5L2N5rC46L+c5LiN6KKr5Yib5bu644CCCiAqIOWPr+mHjeWkjeaJp+ihjO+8muW3suWtmOWcqOWImeihpem9kOe8uuWkseeahOWtl+aute+8jOS4jeWtmOWcqOWImeaWsOW7uuOAggogKgogKiBAcmV0dXJuIGFycmF5IOe7n+iuoeS/oeaBryBbJ2NyZWF0ZWQnPT5pbnQsJ3VwZGF0ZWQnPT5pbnQsJ3NraXBwZWQnPT5pbnRdCiAqLwpmdW5jdGlvbiB6eV9zZWVkX2xhd3llcnMoKSB7CiAgICAkc3RhdCA9IFsnY3JlYXRlZCcgPT4gMCwgJ3VwZGF0ZWQnID0+IDAsICdza2lwcGVkJyA9PiAwXTsKCiAgICAkbGF3eWVycyA9IFsKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn5paH6YGT5YWoJywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICfkuLvku7sgwrcg6aaW5bit5ZCI5LyZ5Lq6JywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYDkuLvku7vvvIzkuJPms6jnu4/mtY7niq/nvarjgIHogYzliqHniq/nvarjgIHph5Hono3niq/nvarnrYnph43lpKfliJHkuovmoYjku7bovqnmiqTkuI7kvIHkuJrliJHkuovlkIjop4TjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIuaWh+mBk+WFqOW+i+W4iOezu+WMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgOS4u+S7u+OAgemmluW4reWQiOS8meS6uu+8jOazleayu+e9keazleW+i+mhvumXru+8jOS4reWbveasp+ebn+WcqOe6v+S7suijgeivvumimOe7hOS4k+WutuWnlOWRmO+8jOS4reWNq+S7suijgeWnlOWRmOS8muS7suijgeWRmOOAguavleS4muS6juilv+WNl+aUv+azleWkp+Wtpu+8jOS4k+azqOaJv+WKnue7j+a1jueKr+e9quS4jue7j+a1jue6oOe6t+ahiOS7tu+8jOaTheS7peWkmuWFg+WMluetlueVpeOAgeeri+S9k+W8j+aWueazleOAgeezu+e7n+WMluaKgOW3p+ino+WGs+awkeWVhuOAgeihjOaUv+OAgeWIkeS6i+S6pOWPieeahOmHjeWkp+eWkemavuWkjeadguahiOS7tu+8jOmVv+acn+eglOeptuS8geS4muWutuazleW+i+mjjumZqemYsuaOp+WSjOS8geS4muazleW+i+acjeWKoeOAglxuXG7ku6PooajmoYjkvovvvJoyMDI0IOW5tOa3seWcs+W4guWQtOafkOa2ieWrjOWQiOWQjOiviOmql+e9quahiO+8iOaXoOe9qui+qeaKpO+8jOajgOWvn+mZouaXoOe9quS4jeS6iOaJueaNle+8ie+8m+a5luWNl+ecgeW5s+axn+W8oOafkOa2ieWrjOaMqueUqOi1hOmHkee9quahiO+8iOaXoOe9qui+qeaKpO+8jOajgOWvn+mZouS4pOasoemAgOS+puacqui1t+ivie+8ieetieOAgiIsCiAgICAgICAgICAgICdtZXRhJyAgICA9PiBbJ196eV9sYXd5ZXJfdGl0bGUnID0+ICfkuLvku7sgwrcg6aaW5bit5ZCI5LyZ5Lq6JywgJ196eV9sYXd5ZXJfZmlybScgPT4gJ+WMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgCcsICdfenlfbGF3eWVyX3Bob25lJyA9PiAnMTg1MTE4MzU3MzMnXSwKICAgICAgICAgICAgJ3NwZWMnICAgID0+IFsn57uP5rWO54qv572qJywgJ+iBjOWKoeeKr+e9qicsICfph5Hono3niq/nvaonLCAn5LyB5Lia5ZCI6KeEJ10sCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn6Z+p5a6d546JJywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICfmiafooYzkuLvku7snLAogICAgICAgICAgICAnZXhjZXJwdCcgPT4gJ+abvuS7u+afkOecgeebtOWxnuazlemZoumrmOe6p+azleWumO+8jDM3IOW5tOS4u+WuoeWQhOexu+ahiOS7tui/kSA1MDAwIOS7tu+8jOaTheWJluaekOS4juegtOino+mHjeWkp+eWkemavuWkjeadguahiOS7tuOAgicsCiAgICAgICAgICAgICdiaW8nICAgICA9PiAi6Z+p5a6d546J5b6L5biI77yM5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omA5omn6KGM5Li75Lu777yM5rOV5rK7572R5rOV5b6L6aG+6Zeu77yM5Lit5Y2r5Luy6KOB5aeU5ZGY5Lya5Luy6KOB5ZGY44CC5pu+5Lu75p+Q55yB55u05bGe5rOV6Zmi6auY57qn5rOV5a6Y77yM5Y6G5Lu75YiR5bqt44CB5rCR5bqt44CB57u85ZCI5a6h5Yik5bqt44CB6KGM5pS/5bqt44CB5omn6KGM6KOB5Yaz5bqt5bqt6ZW/77yMMzcg5bm05Li75a6h5ZCE57G75qGI5Lu26L+RIDUwMDAg5Lu277yM5YW35Liw5a+M5Yik5qGI57uP6aqM77yM6IO95aSf57K+5YeG56CU5Yik5qGI5Lu25YWz6ZSu54K577yM5YeG56Gu5oqK5o+h6K+J6K685pa55ZCR5LiO562W55Wl77yM54m55Yir5pOF6ZW/5YmW5p6Q5LiO56C06Kej6YeN5aSn55aR6Zq+5aSN5p2C5qGI5Lu244CCIiwKICAgICAgICAgICAgJ21ldGEnICAgID0+IFsnX3p5X2xhd3llcl90aXRsZScgPT4gJ+aJp+ihjOS4u+S7uycsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+WIkeS6i+i+qeaKpCcsICfnu4/mtY7niq/nvaonXSwKICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgJ25hbWUnICAgID0+ICfliJjmsLjlkJsnLAogICAgICAgICAgICAndGl0bGUnICAgPT4gJ+i1hOa3seW+i+W4iCDCtyDpq5jnuqflkIjkvJnkuronLAogICAgICAgICAgICAnZXhjZXJwdCcgPT4gJ+iHqiAxOTgwIOW5tOi1t+WOhuS7u+WMl+S6rOW4guesrOS4ieW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOW4gue7j+a1juW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgOS4u+S7u++8jOaJp+S4miA0MCDlubTjgIInLAogICAgICAgICAgICAnYmlvJyAgICAgPT4gIuWImOawuOWQm+W+i+W4iO+8jOiHqiAxOTgwIOW5tOi1t+WOhuS7u+WMl+S6rOW4guWPuOazleWxgOazleW+i+mhvumXruWkhOOAgeWMl+S6rOW4guesrOS4ieW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOW4gue7j+a1juW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOW4gumTjuWjsOW+i+W4iOS6i+WKoeaJgOOAgeWMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgOS4u+S7u+OAgemrmOe6p+WQiOS8meS6uu+8jOWkmuasoeWPl+WIsOWMl+S6rOW4guWPuOazleWxgOOAgeWPuOazlemDqOeahOihqOW9sOOAguaJp+S4miA0MCDlubTvvIzotYTmt7HlvovluIjvvIzlrp7miJjms5XlvovkuJPlrrbvvIzmk4Xplb/ph43lpKfmsJHjgIHllYbkuovms5XlvovkuovliqHvvIzmm77lip7nkIbliJHjgIHmsJHjgIHnu4/mtY7nuqDnurfmoYjku7bmlbDnmb7ku7blj4rmi4Xku7vkuIrnmb7lrrbljZXkvY3ms5Xlvovpob7pl67jgIIiLAogICAgICAgICAgICAnbWV0YScgICAgPT4gWydfenlfbGF3eWVyX3RpdGxlJyA9PiAn6LWE5rex5b6L5biIIMK3IOmrmOe6p+WQiOS8meS6uicsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+awkeWVhuS6iycsICfkvIHkuJrlkIjop4QnXSwKICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgJ25hbWUnICAgID0+ICfnjovlrrbotLUnLAogICAgICAgICAgICAndGl0bGUnICAgPT4gJ+WQiOS8meS6uuW+i+W4iCcsCiAgICAgICAgICAgICdleGNlcnB0JyA9PiAnMTk4NiDlubTljJfkuqzlpKflrabms5Xlvovns7vmr5XkuJrvvIwxOTg3IOW5tOiwg+WFpeWMl+S6rOW4guesrOS4ieW+i+W4iOS6i+WKoeaJgO+8jOaThemVv+WIkeS6i+i+qeaKpOOAgeawkeWVhuS6i+ivieiuvOOAgeS8geS4muazleWKoeOAgicsCiAgICAgICAgICAgICdiaW8nICAgICA9PiAi546L5a626LS15b6L5biI77yMMTk4MSDlubTov5vlhaXlhazmo4Dms5Xns7vnu5/vvIzku47kuovmo4Dlr5/lt6XkvZwgNyDlubTvvIwxOTg2IOW5tOWMl+S6rOWkp+WtpuazleW+i+ezu+avleS4mu+8jDE5ODcg5bm06LCD5YWl5YyX5Lqs5biC5Y+45rOV5bGA55u05bGe5YyX5Lqs5biC56ys5LiJ5b6L5biI5LqL5Yqh5omA5LuO5LqL5b6L5biI5bel5L2c77yM5Y6G5Lu75YyX5Lqs5biC56ys5LiJ5b6L5biI5LqL5Yqh5omA44CB5YyX5Lqs5biC57uP5rWO5b6L5biI5LqL5Yqh5omA44CB5YyX5Lqs5biC6ZOO5aOw5b6L5biI5LqL5Yqh5omA44CB5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omA5ZCI5LyZ5Lq644CC5pOF6ZW/5YiR5LqL6L6p5oqk44CB5rCR5ZWG5LqL6K+J6K6844CB5LyB5Lia5rOV5Yqh77yM5Zyo5b6L5biI5omn5LiaIDMwIOWkmuW5tOmHjO+8jOabvuS4uuWkp+S4reWei+WbveacieS8geS4muOAgeS6i+S4muWNleS9jeOAgeengeiQpeS8geS4muOAgemHkeiejeacuuaehOaLheS7u+W4uOW5tOazleW+i+mhvumXru+8jOWKnueQhuS6huaVsOeZvuS7tuawkeWVhuS6i+OAgeWIkeS6i+ahiOS7tuOAgiIsCiAgICAgICAgICAgICdtZXRhJyAgICA9PiBbJ196eV9sYXd5ZXJfdGl0bGUnID0+ICflkIjkvJnkurrlvovluIgnLCAnX3p5X2xhd3llcl9maXJtJyA9PiAn5YyX5Lqs55m+546v5b6L5biI5LqL5Yqh5omAJywgJ196eV9sYXd5ZXJfcGhvbmUnID0+ICcxODUxMTgzNTczMyddLAogICAgICAgICAgICAnc3BlYycgICAgPT4gWyfliJHkuovovqnmiqQnLCAn5rCR5ZWG5LqLJ10sCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn546L5rWZ5rCRJywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICflrp7miJjms5XliqHkuJPlrrYnLAogICAgICAgICAgICAnZXhjZXJwdCcgPT4gJ+aThemVv+mHjeWkp+eWkemavuWIkeS6i+ahiOS7tu+8jDE5ODMg5bm0XCLkuKXmiZNcIuS4reS7o+eQhiA4NyDku7bliJHkuovmoYjku7bvvIzmiafkuJrmnJ/pl7TlpITnkIblkITnsbvmoYjku7YgNzAwIOWkmuS7tuOAgicsCiAgICAgICAgICAgICdiaW8nICAgICA9PiAi546L5rWZ5rCR5b6L5biI77yM5a6e5oiY5rOV5Yqh5LiT5a6277yM5pOF6ZW/6YeN5aSn55aR6Zq+5YiR5LqL5qGI5Lu244CC5ZyoIDE5ODMg5bm0XCLkuKXmiZNcIuS4re+8jOS7o+eQhuS6hiA4NyDku7bliJHkuovmoYjku7bvvIzmi4Xku7vliJHkuovovqnmiqTkurrvvJvmiafkuJrmnJ/pl7TlpITnkIblkITnp43liJHkuovjgIHmsJHkuovjgIHnu4/mtY7moYjku7YgNzAwIOWkmuS7tuOAguS4reWbveesrOS4gOaJueiOt+W+l1wi5LiT5Lia5b6L5biI6K+B5LmmXCLku47kuJrkurrlkZjvvIzmm77kurLoh6rlip7nkIblhZrkuK3lpK7ph43opoHpg6jpl6jkuqTlip7nmoTph43lpKfmoYjku7bvvIzmm77mi4Xku7vlm73lrrborqHlp5Tln7rlu7rlip7jgIHpk4HpgZPpg6jljJfkuqzpk4Hot6/lsYDjgIHkurrmsJHnlLvmiqXnpL7jgIHkuK3lm73lh7rniYjnpL7jgIHkuK3lm73lu7rnrZHlh7rniYjnpL7jgIHpppbpg73msb3ovablhazlj7jnrYnkuIrnmb7lrrbljZXkvY3nmoTms5Xlvovpob7pl67jgIIiLAogICAgICAgICAgICAnbWV0YScgICAgPT4gWydfenlfbGF3eWVyX3RpdGxlJyA9PiAn5a6e5oiY5rOV5Yqh5LiT5a62JywgJ196eV9sYXd5ZXJfZmlybScgPT4gJ+WMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgCcsICdfenlfbGF3eWVyX3Bob25lJyA9PiAnMTg1MTE4MzU3MzMnXSwKICAgICAgICAgICAgJ3NwZWMnICAgID0+IFsn5YiR5LqL6L6p5oqkJ10sCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICduYW1lJyAgICA9PiAn6YKi5b+g5rCRJywKICAgICAgICAgICAgJ3RpdGxlJyAgID0+ICfkuJPogYzlvovluIgnLAogICAgICAgICAgICAnZXhjZXJwdCcgPT4gJ+WTiOWwlOa7qOW4iOiMg+Wkp+WtpuOAgeWvueWklue7j+a1jui0uOaYk+Wkp+WtpuehleWjq++8jOiHqiAyMDAyIOW5tOS7juS6i+azleW+i+acjeWKoe+8jOaJv+WKnuWIkeS6i+OAgei0oueojuOAgeawkeWVhuS6i+OAgeihjOaUv+ivieiuvOahiOS7tui/keWNg+S7tuOAgicsCiAgICAgICAgICAgICdiaW8nICAgICA9PiAi6YKi5b+g5rCR5b6L5biI77yM5pep5bm05LuO5LqL6L+H5pWZ5biI44CB5LyB5Lia566h55CG5ZKM5aSW6LS457+76K+R77yM5YWI5ZCO5q+V5Lia5LqO5ZOI5bCU5ruo5biI6IyD5aSn5a2m44CB5a+55aSW57uP5rWO6LS45piT5aSn5a2m77yM56GV5aOr56CU56m255Sf5a2m5Y6G44CC6IeqIDIwMDIg5bm06L+b5YWl5rOV5b6L5pyN5Yqh6KGM5Lia5Lul5p2l77yM5LiA55u06Ie05Yqb5LqO5YiR5LqL44CB6LSi56iO44CB5rCR5ZWG5LqL44CB6KGM5pS/6K+J6K685qGI5Lu2562J5pa56Z2i55qE55CG6K6656CU56m25ZKM5a6e5Yqh5pON5L2c77yM5rOV5b6L5Yqf5bqV5rex5Y6a77yM6ZiF5Y6G5Liw5a+M77yM5omn5Lia6IO95Yqb5by677yM5om/5Yqe5LqG562J6L+R5Y2D5Liq5YiR5LqL44CB5rCR5ZWG5LqL44CB6KGM5pS/6K+J6K685ZKM5Luy6KOB5qGI5Lu244CC54m55Yir5pOF6ZW/5Lul5aSa5YWD5YyW5oCd57u05ZKM54G15rS757O757uf55qE5Yqe5qGI5oqA5ben77yM5pW05ZCI5YWr5pa56LWE5rqQ77yM6auY5pWI56C06Kej5rCR5ZWG44CB6KGM5pS/44CB5YiR5LqL5Lqk5Y+J55qE6YeN5aSn55aR6Zq+5aSN5p2C5qGI5Lu244CCIiwKICAgICAgICAgICAgJ21ldGEnICAgID0+IFsnX3p5X2xhd3llcl90aXRsZScgPT4gJ+S4k+iBjOW+i+W4iCcsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+WIkeS6i+i+qeaKpCcsICfotKLnqI4nXSwKICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgJ25hbWUnICAgID0+ICflva3pkasnLAogICAgICAgICAgICAndGl0bGUnICAgPT4gJ+S4k+iBjOW+i+W4iCcsCiAgICAgICAgICAgICdleGNlcnB0JyA9PiAn5LuO5LiaIDYg5bm077yM5pu+5Lu75LiK5biC5oi/5LyB5oqV6LWE57uP55CG77yM5LiT5Lia44CB6auY5pWI44CB5bC96LSj77yM5YW35omO5a6e5rOV5a2m5Yqf5bqV44CCJywKICAgICAgICAgICAgJ2JpbycgICAgID0+ICLlva3pkavlvovluIjku47kuJogNiDlubTvvIzkuJPkuJrjgIHpq5jmlYjjgIHlsL3otKPvvIzlhbfmnInmiY7lrp7nmoTms5Xlrablip/lupXvvIzmm77ku7vkuIrluILmiL/kvIHmsZ/oi4/kuK3ljZflu7rorr7pm4blm6LogqHku73mnInpmZDlhazlj7jvvIjkuK3ljZfnva7lnLDvvInmipXotYTnu4/nkIbvvIznhp/mgonkvIHkuJrov5DokKXkuI7mipXono3otYTlrp7liqHvvIzmk4Xplb/kuLrkvIHkuJrkuI7lvZPkuovkurrmj5DkvpvotLTlkIjllYbkuJrpgLvovpHnmoTms5XlvovmnI3liqHjgIIiLAogICAgICAgICAgICAnbWV0YScgICAgPT4gWydfenlfbGF3eWVyX3RpdGxlJyA9PiAn5LiT6IGM5b6L5biIJywgJ196eV9sYXd5ZXJfZmlybScgPT4gJ+WMl+S6rOeZvueOr+W+i+W4iOS6i+WKoeaJgCcsICdfenlfbGF3eWVyX3Bob25lJyA9PiAnMTg1MTE4MzU3MzMnXSwKICAgICAgICAgICAgJ3NwZWMnICAgID0+IFsn5LyB5Lia5ZCI6KeEJywgJ+awkeWVhuS6iyddLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgPT4gJ+W8oOa6kCcsCiAgICAgICAgICAgICd0aXRsZScgICA9PiAn6LWE5rex5b6L5biIJywKICAgICAgICAgICAgJ2V4Y2VycHQnID0+ICcxOTkyIOW5tOWMl+S6rOWkp+WtpuazleW+i+ezu+avleS4mu+8jDE5OTQg5bm05Y+W5b6X5b6L5biI6LWE5qC877yM5pOF6ZW/5YWs5Y+45LyB5Lia5rOV5b6L5LqL5Yqh44CB5rCR5ZWG44CB5ZCI5ZCM44CB5L615p2D44CB6KGM5pS/44CCJywKICAgICAgICAgICAgJ2JpbycgICAgID0+ICLlvKDmupDlvovluIjvvIzotYTmt7HlvovluIjvvIzlrp7miJjms5XliqHkuJPlrrbvvIzmk4Xplb/lhazlj7jkvIHkuJrms5XlvovkuovliqHjgIHmsJHllYbkuovliqHjgIHlkIjlkIznuqDnurfjgIHkvrXmnYPnuqDnurfjgIHnu6fmib/nuqDnurfjgIHooYzmlL/lpI3orq7jgIHooYzmlL/or4norrzjgIIxOTkyIOW5tOWMl+S6rOWkp+WtpuazleW+i+ezu+avleS4mu+8jDE5OTQg5bm05Y+W5b6X5b6L5biI6LWE5qC86K+B5Lmm77yMMjAwMyDlubTkuK3lm73mlL/ms5XlpKflrablnKjogYznoJTnqbbnlJ/mr5XkuJrvvJvmm77lnKjljJfkuqzluILnrKzkuInlvovluIjkuovliqHmiYDjgIHljJfkuqzluILnu4/mtY7lvovluIjkuovliqHmiYDjgIHljJfkuqzluILpk47lo7DlvovluIjkuovliqHmiYDjgIHljJfkuqznmb7njq/lvovluIjkuovliqHmiYDmiafkuJrvvIzku47kuovlvovluIjmiafkuJroh7Pku4ogMjUg5bm077yM5pu+5ouF5Lu75aSa5a625aSu5LyB44CB5Zu95LyB44CB5LiK5biC5YWs5Y+444CB5pS/5bqc5rOV5b6L6aG+6Zeu44CCIiwKICAgICAgICAgICAgJ21ldGEnICAgID0+IFsnX3p5X2xhd3llcl90aXRsZScgPT4gJ+i1hOa3seW+i+W4iCcsICdfenlfbGF3eWVyX2Zpcm0nID0+ICfljJfkuqznmb7njq/lvovluIjkuovliqHmiYAnLCAnX3p5X2xhd3llcl9waG9uZScgPT4gJzE4NTExODM1NzMzJ10sCiAgICAgICAgICAgICdzcGVjJyAgICA9PiBbJ+awkeWVhuS6iycsICflkIjlkIwnLCAn6KGM5pS/J10sCiAgICAgICAgXSwKICAgICAgICAvLyDms6jmhI/vvJrlvpDmlozjgIHotbXmtankupEg5bGe5LqO5bey6LCD5pW05Ye65Zui6Zif55qE5oiQ5ZGY77yM55SxIHphaXNoYW5nLXR3ZWFrcyDmj5Lku7bnu5/kuIDpmpDol4/jgIIKICAgICAgICAvLyDor7fli7/lnKjmraTlkI3ljZXkuK3ph43mlrDliqDlhaXvvIzlkKbliJnmr4/mrKHliIfmjaLkuLvpopjpg73kvJrmiorlt7LkuIvnur/miJDlkZjph43mlrDmkq3np43kuLrlhaznpLrnirbmgIHjgIIKICAgIF07CgogICAgZm9yZWFjaCAoJGxhd3llcnMgYXMgJGlkeCA9PiAkZCkgewogICAgICAgIC8vIOaVsOe7hOmhuuW6j+WNs+WboumYn+WxleekuumhuuW6j++8iOS4u+S7u+WcqOWJje+8ie+8jOeUqCBtZW51X29yZGVyIOWbuuWMlgogICAgICAgICRvcmRlciA9ICgkaWR4ICsgMSkgKiAxMDsKCiAgICAgICAgLy8g5oyJ5qCH6aKY57K+56Gu5p+l5om+5bey5a2Y5Zyo55qE5b6L5biI77yI5ZCr6I2J56i/L+engeWvhu+8jOmBv+WFjemHjeWkjeW7uuWPt++8iQogICAgICAgICRleGlzdCA9IGdldF9wb3N0cyhbCiAgICAgICAgICAgICdwb3N0X3R5cGUnICAgICAgICA9PiAnbGF3eWVyJywKICAgICAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgICAgID0+IFsncHVibGlzaCcsICdkcmFmdCcsICdwZW5kaW5nJywgJ3ByaXZhdGUnXSwKICAgICAgICAgICAgJ3RpdGxlJyAgICAgICAgICAgID0+ICRkWyduYW1lJ10sCiAgICAgICAgICAgICdudW1iZXJwb3N0cycgICAgICA9PiAxLAogICAgICAgICAgICAnc3VwcHJlc3NfZmlsdGVycycgPT4gZmFsc2UsCiAgICAgICAgXSk7CgogICAgICAgIGlmICgkZXhpc3QpIHsKICAgICAgICAgICAgJGlkICAgICAgPSAkZXhpc3RbMF0tPklEOwogICAgICAgICAgICAkcGF0Y2ggICA9IFsnSUQnID0+ICRpZF07CiAgICAgICAgICAgICRjaGFuZ2VkID0gZmFsc2U7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiDmraPmloflpITnkIbvvJrlj6rooaXnqbrnvLrmiJbmm7/mjaIi5Y2g5L2N5byPIuato+aWh++8jOe7neS4jeimhuebluS6uuW3peaSsOWGmeeahOWGheWuueOAggogICAgICAgICAgICAgKiDliKTlrprkuLrljaDkvY3nmoTkuKTnp43mg4XlvaLvvIjnur/kuIrljoblj7LmlbDmja7noa7lrp7lrZjlnKjvvInvvJoKICAgICAgICAgICAgICogICDkuIDjgIHmraPmlofkuLrnqbrvvJsKICAgICAgICAgICAgICogICDkuozjgIHmraPmlofkuI7mkZjopoHpgJDlrZfnm7jlkIzvvIzkuJTmmI7mmL7nn63kuo7moIflh4bnroDku4vvvIjor7TmmI7mmK/oh6rliqjnlJ/miJDnmoTkuIDlj6Xor53ljaDkvY3vvIwKICAgICAgICAgICAgICogICAgICAg6ICM6Z2e57yW6L6R5pKw5YaZ55qE5q2j5paH77yJ44CCCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkY3VyX2JvZHkgPSB0cmltKChzdHJpbmcpICRleGlzdFswXS0+cG9zdF9jb250ZW50KTsKICAgICAgICAgICAgJGN1cl9leGMgID0gdHJpbSgoc3RyaW5nKSAkZXhpc3RbMF0tPnBvc3RfZXhjZXJwdCk7CiAgICAgICAgICAgICRpc19zdHViICA9ICgkY3VyX2JvZHkgPT09ICcnKQogICAgICAgICAgICAgICAgfHwgKCRjdXJfYm9keSA9PT0gJGN1cl9leGMgJiYgbWJfc3RybGVuKCRjdXJfYm9keSkgPCBtYl9zdHJsZW4oJGRbJ2JpbyddKSAqIDAuNik7CiAgICAgICAgICAgIGlmICgkaXNfc3R1YikgeyAkcGF0Y2hbJ3Bvc3RfY29udGVudCddID0gJGRbJ2JpbyddOyAkY2hhbmdlZCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKHRyaW0oKHN0cmluZykgJGV4aXN0WzBdLT5wb3N0X2V4Y2VycHQpID09PSAnJykgeyAkcGF0Y2hbJ3Bvc3RfZXhjZXJwdCddID0gJGRbJ2V4Y2VycHQnXTsgJGNoYW5nZWQgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmICgkZXhpc3RbMF0tPnBvc3Rfc3RhdHVzICE9PSAncHVibGlzaCcpIHsgJHBhdGNoWydwb3N0X3N0YXR1cyddID0gJ3B1Ymxpc2gnOyAkY2hhbmdlZCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKChpbnQpICRleGlzdFswXS0+bWVudV9vcmRlciAhPT0gJG9yZGVyKSB7ICRwYXRjaFsnbWVudV9vcmRlciddID0gJG9yZGVyOyAkY2hhbmdlZCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKCRjaGFuZ2VkKSB3cF91cGRhdGVfcG9zdCgkcGF0Y2gpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGRbJ21ldGEnXSBhcyAkayA9PiAkdikgewogICAgICAgICAgICAgICAgaWYgKHRyaW0oKHN0cmluZykgZ2V0X3Bvc3RfbWV0YSgkaWQsICRrLCB0cnVlKSkgPT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkaWQsICRrLCAkdik7CiAgICAgICAgICAgICAgICAgICAgJGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghIGVtcHR5KCRkWydzcGVjJ10pICYmICEgd3BfZ2V0X29iamVjdF90ZXJtcygkaWQsICdsYXd5ZXJfc3BlY2lhbHR5JywgWydmaWVsZHMnID0+ICdpZHMnXSkpIHsKICAgICAgICAgICAgICAgIHdwX3NldF9vYmplY3RfdGVybXMoJGlkLCAkZFsnc3BlYyddLCAnbGF3eWVyX3NwZWNpYWx0eScpOwogICAgICAgICAgICAgICAgJGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjaGFuZ2VkID8gJHN0YXRbJ3VwZGF0ZWQnXSsrIDogJHN0YXRbJ3NraXBwZWQnXSsrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgICRpZCA9IHdwX2luc2VydF9wb3N0KFsKICAgICAgICAgICAgJ3Bvc3RfdHlwZScgICAgPT4gJ2xhd3llcicsCiAgICAgICAgICAgICdwb3N0X3RpdGxlJyAgID0+ICRkWyduYW1lJ10sCiAgICAgICAgICAgICdwb3N0X2NvbnRlbnQnID0+ICRkWydiaW8nXSwKICAgICAgICAgICAgJ3Bvc3RfZXhjZXJwdCcgPT4gJGRbJ2V4Y2VycHQnXSwKICAgICAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgPT4gJ3B1Ymxpc2gnLAogICAgICAgICAgICAnbWVudV9vcmRlcicgICA9PiAkb3JkZXIsCiAgICAgICAgXSk7CiAgICAgICAgaWYgKGlzX3dwX2Vycm9yKCRpZCkpIGNvbnRpbnVlOwogICAgICAgIGZvcmVhY2ggKCRkWydtZXRhJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkaWQsICRrLCAkdik7CiAgICAgICAgfQogICAgICAgIGlmICghIGVtcHR5KCRkWydzcGVjJ10pKSB7CiAgICAgICAgICAgIHdwX3NldF9vYmplY3RfdGVybXMoJGlkLCAkZFsnc3BlYyddLCAnbGF3eWVyX3NwZWNpYWx0eScpOwogICAgICAgIH0KICAgICAgICAkc3RhdFsnY3JlYXRlZCddKys7CiAgICB9CgogICAgcmV0dXJuICRzdGF0Owp9CgovKiDkuLvpopjlkK/nlKjvvJrliLfmlrDph43lhpnop4TliJkgKyDmkq3np40v5qCh5q2j5b6L5biI5Zui6ZifICovCmFkZF9hY3Rpb24oJ2FmdGVyX3N3aXRjaF90aGVtZScsIGZ1bmN0aW9uICgpIHsKICAgIGZsdXNoX3Jld3JpdGVfcnVsZXMoKTsKICAgIHp5X3NlZWRfbGF3eWVycygpOwp9KTsKCi8qKgogKiDlpLrlm54gbGF3eWVyIOWNlemhteaooeadv+aOp+WItuadg+OAggogKgogKiB6c3lmLWxhd3llcnMg5o+S5Lu25ZyoIHRlbXBsYXRlX2luY2x1ZGUg5LiK5oyC5LqGIHpzeWZfbGF3eWVyc19zaW5nbGVfdGVtcGxhdGUocDk5KQogKiDkuI4genNfbGF3eWVyX3NpbmdsZV90ZW1wbGF0ZShwMTAp77yM5LiU5YW2IHpzeWZfbHdfcG9zdF90eXBlcygpIOWQjOaXtuimhuebluS6hgogKiB6c19sYXd5ZXIg5LiO5pys5Li76aKY55qEIGxhd3llcu+8jOWvvOiHtOW+i+W4iOivpuaDhemhteiiq+aPkuS7tuaooeadv+aOpeeuoe+8jOS4u+mimOeahAogKiBzaW5nbGUtbGF3eWVyLnBocO+8iOeZvueOr+mjjuagvCArIOacuuaehOiuuOWPr+ivgeWPtyArIOmihOe6puahiOS7tuivhOS8sO+8ieawuOi/nOS4jeeUn+aViOOAggogKgogKiDov5nph4znlKggcDk5OSDlnKjmiYDmnInmj5Lku7bkuYvlkI7miafooYzvvIzku4Xpkojlr7nmnKzkuLvpopjoh6rmnInnmoQgbGF3eWVyIENQVCDlvLrliLblm57lvZLkuLvpopjmqKHmnb/vvIwKICog5LiN6Kem56Kw5o+S5Lu26Ieq5bex55qEIHpzX2xhd3llcu+8iOWFpempu+W+i+W4iO+8ie+8jOmBv+WFjeegtOWdj+aXouacieWKn+iDveOAggogKi8KZnVuY3Rpb24genlfcmVjbGFpbV9sYXd5ZXJfdGVtcGxhdGUoJHRlbXBsYXRlKSB7CiAgICBpZiAoaXNfc2luZ3VsYXIoJ2xhd3llcicpKSB7CiAgICAgICAgJGN1c3RvbSA9IGdldF90aGVtZV9maWxlX3BhdGgoJy9zaW5nbGUtbGF3eWVyLnBocCcpOwogICAgICAgIGlmIChmaWxlX2V4aXN0cygkY3VzdG9tKSkgcmV0dXJuICRjdXN0b207CiAgICB9CiAgICBpZiAoaXNfcG9zdF90eXBlX2FyY2hpdmUoJ2xhd3llcicpKSB7CiAgICAgICAgJGN1c3RvbSA9IGdldF90aGVtZV9maWxlX3BhdGgoJy9hcmNoaXZlLWxhd3llci5waHAnKTsKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGN1c3RvbSkpIHJldHVybiAkY3VzdG9tOwogICAgfQogICAgcmV0dXJuICR0ZW1wbGF0ZTsKfQphZGRfZmlsdGVyKCd0ZW1wbGF0ZV9pbmNsdWRlJywgJ3p5X3JlY2xhaW1fbGF3eWVyX3RlbXBsYXRlJywgOTk5KTsKCi8qKgogKiDlvovluIjlvZLmoaPvvJrlsZXnpLrlhajpg6jlvovluIjlubbmjInlm6LpmJ/pobrluo/mjpLluo/jgIIKICoKICog5o+S5Lu25ZyoIHByZV9nZXRfcG9zdHMocDEwKSDkuIrnmoQgenNfYXJjaGl2ZV9wb3N0c19wZXJfcGFnZSDmiormr4/pobXmiKrmlq3kuLogOO+8jAogKiDlr7zoh7QgOSDkvY3lvovluIjlsJHmmL7npLogMSDkvY3jgILmraTlpIQgcDk5OSDopobnm5bvvIzkuJTmjIkgbWVudV9vcmRlciDljYfluo/lm7rlrprlm6LpmJ/mrKHluo/jgIIKICovCmZ1bmN0aW9uIHp5X2xhd3llcl9hcmNoaXZlX3F1ZXJ5KCRxdWVyeSkgewogICAgaWYgKGlzX2FkbWluKCkgfHwgISAkcXVlcnktPmlzX21haW5fcXVlcnkoKSkgcmV0dXJuOwogICAgaWYgKCEgJHF1ZXJ5LT5pc19wb3N0X3R5cGVfYXJjaGl2ZSgnbGF3eWVyJykgJiYgISAkcXVlcnktPmlzX3RheCgnbGF3eWVyX3NwZWNpYWx0eScpKSByZXR1cm47CgogICAgJHF1ZXJ5LT5zZXQoJ3Bvc3RzX3Blcl9wYWdlJywgLTEpOwogICAgJHF1ZXJ5LT5zZXQoJ29yZGVyYnknLCBbJ21lbnVfb3JkZXInID0+ICdBU0MnLCAndGl0bGUnID0+ICdBU0MnXSk7Cn0KYWRkX2FjdGlvbigncHJlX2dldF9wb3N0cycsICd6eV9sYXd5ZXJfYXJjaGl2ZV9xdWVyeScsIDk5OSk7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogUjU2IMK3IOWFqOermee7n+S4gOaCrOa1ruWSqOivoueql++8iOS7hSAyIOS4quaMiemSru+8mueUteivnSArIOW+ruS/oe+8iQogKgogKiDljoblj7LlpJrlpZfmta7nqpfvvIjkuLvpopggLnlzamYtZmFiIC8g5o+S5Lu2IC56cy1mbG9hdCAvIC56cy1laC1mbG9hdCAvIC56cy1mYi1yb29077yJCiAqIOWcqOmmlumhteWPoOWKoOWHuiA0IOS4quaMiemSru+8jOW3suWcqCBzdHlsZS5jc3Mg5Lit57uf5LiA6ZqQ6JeP44CC5q2k5aSE5Lul5Li76aKY6Ieq5pyJ57uE5Lu25o6l566h77yMCiAqIOS/neivgeWFqOermeWPquacieS4gOS4quW5suWHgOeahOS4pOmUruaCrOa1rueql++8mgogKiAgIC0g55S16K+d77ya54K55Ye75by55Ye65Y+356CBIDE4NTExODM1NzMz77yI5Y+v5LiA6ZSu5ouo5Y+377yJ77ybCiAqICAgLSDlvq7kv6HvvJrngrnlh7vlvLnlh7rkuoznu7TnoIHvvIjlpI3nlKjnq5nngrnlt7LkuIrkvKDnmoQgd2VjaGF0LXFyLnBuZ++8iSsg5b6u5L+h5Y+344CCCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiB6eV9mbG9hdGluZ193aWRnZXQoKSB7CiAgICBpZiAoaXNfYWRtaW4oKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgICR0ZWwgICA9ICcxODUxMTgzNTczMyc7CiAgICAkd3hfcXIgPSAnaHR0cHM6Ly96YWlzaGFuZ3lhbmZhLmNvbS93cC1jb250ZW50L3VwbG9hZHMvd2VjaGF0LXFyLnBuZyc7CiAgICA/PgogICAgPGRpdiBjbGFzcz0ienktZmFiIiBpZD0ienlGYWIiPgogICAgICAgIDxkaXYgY2xhc3M9Inp5LWZhYl9fcG9wIiBpZD0ienlGYWJUZWxQb3AiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbD0i5ZKo6K+i54Ot57q/Ij4KICAgICAgICAgICAgPGI+5ZKo6K+i54Ot57q/PC9iPgogICAgICAgICAgICA8YSBjbGFzcz0ienktZmFiX19udW0iIGhyZWY9InRlbDo8P3BocCBlY2hvIGVzY19hdHRyKCR0ZWwpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkdGVsKTsgPz48L2E+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ6eS1mYWJfX3RpcCI+54K55Ye755u05o6l5ouo5omTIMK3IOW+ruS/oeWQjOWPtzwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ6eS1mYWJfX3BvcCIgaWQ9Inp5RmFiV3hQb3AiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbD0i5b6u5L+h5LqM57u056CBIj4KICAgICAgICAgICAgPGI+5omr56CB5re75Yqg5b6u5L+hPC9iPgogICAgICAgICAgICA8aW1nIGNsYXNzPSJ6eS1mYWJfX3FyIiBzcmM9Ijw/cGhwIGVjaG8gZXNjX3VybCgkd3hfcXIpOyA/PiIgYWx0PSLlvq7kv6Hkuoznu7TnoIEiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Inp5LWZhYl9fdGlwIj7lvq7kv6Hlj7fvvJo8P3BocCBlY2hvIGVzY19odG1sKCR0ZWwpOyA/Pjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Inp5LWZhYl9fYnRuIHp5LWZhYl9fdGVsIiBpZD0ienlGYWJUZWwiIGFyaWEtbGFiZWw9IueUteivneWSqOivoiI+JiM5NzQyOzwvYnV0dG9uPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ienktZmFiX19idG4genktZmFiX193eCIgaWQ9Inp5RmFiV3giIGFyaWEtbGFiZWw9IuW+ruS/oeWSqOivoiI+JiMxMjgxNzI7PC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgIC8qIFI1NiDCtyDlvLrliLbpmpDol4/ljoblj7LlpJrlpZfmta7nqpfkuI7lupXpg6jnmb3mnaHvvJrnva7kuo4gd3BfZm9vdGVy77yM56Gu5L+d5pyA5ZCO5Yqg6L2944CB5LyY5YWI57qn5pyA6auYICovCiAgICAueXNqZi1mYWIsCiAgICAuenMtZmxvYXQsCiAgICAuenMtZmxvYXRfX2J0biwKICAgIC56cy1mbG9hdF9fcG9wLAogICAgLnpzLWVoLXJvb3QsCiAgICAuenMtZWgtZmFiLAogICAgLnpzLWVoLXBhbmVsLAogICAgLnpzLWVoLW1vZGFsLAogICAgLnpzLWZiLXJvb3QsCiAgICAuenMtc3ViamVjdC1iYXIsCiAgICAuZmxvYXQsCiAgICAud3hwb3B7CiAgICAgIGRpc3BsYXk6bm9uZSAhaW1wb3J0YW50OwogICAgICB2aXNpYmlsaXR5OmhpZGRlbiAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OjAgIWltcG9ydGFudDsKICAgICAgcG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50OwogICAgfQogICAgLnp5LWZhYntwb3NpdGlvbjpmaXhlZDtyaWdodDoxOHB4O2JvdHRvbToyMnB4O3otaW5kZXg6OTk5OTA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LWVuZDtnYXA6MTBweDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiUGluZ0ZhbmcgU0MiLCJNaWNyb3NvZnQgWWFIZWkiLHNhbnMtc2VyaWZ9CiAgICAuenktZmFiX19idG57d2lkdGg6NTJweDtoZWlnaHQ6NTJweDtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjIycHg7Y29sb3I6I2ZmZjtib3gtc2hhZG93OjAgOHB4IDIycHggcmdiYSgxMCwyMiw0MCwuMzIpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZX0KICAgIC56eS1mYWJfX2J0bjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4wOCl9CiAgICAuenktZmFiX190ZWx7YmFja2dyb3VuZDojYzQyNjJlfQogICAgLnp5LWZhYl9fd3h7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNjODliM2MsI2E4N2EyMyl9CiAgICAuenktZmFiX19wb3B7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjgwcHg7Ym90dG9tOjIycHg7ei1pbmRleDo5OTk5MTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTRlOWYwO2JvcmRlci1yYWRpdXM6MTRweDtib3gtc2hhZG93OjAgMTZweCA0OHB4IHJnYmEoMjAsNTAsODgsLjI4KTtwYWRkaW5nOjE2cHggMThweDt0ZXh0LWFsaWduOmNlbnRlcjttaW4td2lkdGg6MTg0cHh9CiAgICAuenktZmFiX19wb3Aub257ZGlzcGxheTpibG9ja30KICAgIC56eS1mYWJfX3BvcCBie2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzE0MzI1ODttYXJnaW4tYm90dG9tOjhweH0KICAgIC56eS1mYWJfX251bXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MjJweDtmb250LXdlaWdodDo4MDA7Y29sb3I6I2M0MjYyZTtsZXR0ZXItc3BhY2luZzoxcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmV9CiAgICAuenktZmFiX19xcnt3aWR0aDoxNTBweDtoZWlnaHQ6MTUwcHg7Ym9yZGVyOjFweCBkYXNoZWQgI2RjZGZlMztib3JkZXItcmFkaXVzOjhweDttYXJnaW46MCBhdXRvIDhweH0KICAgIC56eS1mYWJfX3RpcHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTkzYTM7bWFyZ2luLXRvcDo2cHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjc2OHB4KXsuenktZmFiX19wb3B7cmlnaHQ6MTJweDtib3R0b206ODJweH19CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdD4KICAgIChmdW5jdGlvbigpewogICAgICB2YXIgdGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6eUZhYlRlbCcpLHRlbFBvcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnenlGYWJUZWxQb3AnKSwKICAgICAgICAgIHd4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6eUZhYld4Jyksd3hQb3A9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3p5RmFiV3hQb3AnKTsKICAgICAgZnVuY3Rpb24gY2xvc2VBbGwoKXtpZih0ZWxQb3ApdGVsUG9wLmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7aWYod3hQb3Apd3hQb3AuY2xhc3NMaXN0LnJlbW92ZSgnb24nKTt9CiAgICAgIGZ1bmN0aW9uIHRvZ2dsZShidG4scG9wKXtpZighYnRufHwhcG9wKXJldHVybjt2YXIgb249cG9wLmNsYXNzTGlzdC5jb250YWlucygnb24nKTtjbG9zZUFsbCgpO2lmKCFvbilwb3AuY2xhc3NMaXN0LmFkZCgnb24nKTt9CiAgICAgIGlmKHRlbCl0ZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7dG9nZ2xlKHRlbCx0ZWxQb3ApO30pOwogICAgICBpZih3eCl3eC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt0b2dnbGUod3gsd3hQb3ApO30pOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7CiAgICAgICAgaWYodGVsUG9wJiZ0ZWxQb3AuY29udGFpbnMoZS50YXJnZXQpKXJldHVybjsKICAgICAgICBpZih3eFBvcCYmd3hQb3AuY29udGFpbnMoZS50YXJnZXQpKXJldHVybjsKICAgICAgICBpZihlLnRhcmdldD09PXRlbHx8ZS50YXJnZXQ9PT13eClyZXR1cm47CiAgICAgICAgY2xvc2VBbGwoKTsKICAgICAgfSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLGZ1bmN0aW9uKGUpe2lmKGUua2V5PT09J0VzY2FwZScpY2xvc2VBbGwoKTt9KTsKICAgIH0pKCk7CiAgICA8L3NjcmlwdD4KICAgIDw/cGhwCn0KYWRkX2FjdGlvbignd3BfZm9vdGVyJywgJ3p5X2Zsb2F0aW5nX3dpZGdldCcsIDMwKTsKCi8qCiAqIOW3suenu+mZpOmUmeivr+i/kOihjOeahCBmbG9hdGluZy1jb25zdWx0IOa1rueql++8iHYxLjAuM++8iQogKiDljp/lm6DvvJror6Xmta7nqpflnKjmn5Dkupsgei1pbmRleCAvIHBvc2l0aW9uIOaDheWig+S4i+mUmeS9jeWIsCBoZWFkZXIg5Yy65Z+f77yMCiAqICAgICAgIOWvvOiHtOmmlumhtemhtumDqOWHuueOsCLkuIvmi4noj5zljZUi5q6L5b2x77yM5LiO5a+86Iiq5q+N5qCP6YeN5aSN44CCCiAqICAgICAgIOWQjue7reWmgumcgOWcqOe6v+WSqOivouWFpeWPo++8jOS9v+eUqCBoZWFkZXIgLyBuYXYg5Lit55qEIENUQSDmjInpkq7ljbPlj6/jgIIKICovCg==
围绕问答、文章、工具、案例与律师咨询,构建可搜索、可转化、可运营的法律门户。