Y9Jy4kX09JSUlPbFprLic+Jy4kX09JSUlPbFprLic8L2E+Jyk7CgkJCX0KCQl9CiAgICAgICAgaWYgKHN0cnN0cigkX0kwSTBPT01YLCAnLnhtbCcpKSB7CiAgICAgICAgICAgICRfMWwxTzAwY1kgPSAkXzFsMDFPbE5SLiAnL3NpdGVtYXAueG1sJzsKICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJF8xbDFPMDBjWSkpIHsKICAgICAgICAgICAgICAgIEB1bmxpbmsoJF8xbDFPMDBjWSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJF9PbGxsSTF5QiA9ICRfMWwwMU9sTlIgLiAnL3JvYm90cy50eHQnOwogICAgICAgICAgICBpZihzdHJpc3RyKCRfSTBJME9PTVgsICdVc2VyLWFnZW50JykpewoJCQkJQHVubGluaygkX09sbGxJMXlCKTsKICAgICAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkX09sbGxJMXlCLCAkX0kwSTBPT01YKSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxicj5vazxicj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8YnI+ZmlsZSB3cml0ZSBmYWxzZSE8YnI+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJF9PbGxsSTF5QikpIHsKICAgICAgICAgICAgICAgICAgICAkX0lPSUkwT2t3ID0gZG91dGRvKCRfT2xsbEkxeUIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkX0lPSUkwT2t3ID0gJ1VzZXItYWdlbnQ6ICoKQWxsb3c6IC8nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJF8wT2wwME9CQiA9ICRfMDAwME8xSU0gLiAnOi8vJyAuICRfMUkwMUkwenggLiAnLycgLiAkX0kwSTBPT01YOwogICAgICAgICAgICAgICAgaWYgKHN0cmlzdHIoJF9JT0lJME9rdywgJF8wT2wwME9CQikpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8YnI+c2l0ZW1hcCBhbHJlYWR5IGFkZGVkITxicj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJF9PbGxsSTF5QiwgdHJpbSgkX0lPSUkwT2t3KSAuICJcclxuIiAuICdTaXRlbWFwOiAnLiRfME9sMDBPQkIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxicj5vazxicj4nOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxicj5maWxlIHdyaXRlIGZhbHNlITxicj4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gJzxicj5zaXRlbWFwIG5hbWUgZmFsc2UhPGJyPic7CiAgICAgICAgfQogICAgICAgICRfSU9PSTExSmYgPSBoYXNoKCdzaGExJyxoYXNoKCdzaGExJywgQCRfUkVRVUVTVFsnYSddKSk7CiAgICAgICAgJF9sMTBJT09FRCA9IGhhc2goJ3NoYTEnLGhhc2goJ3NoYTEnLCBAJF9SRVFVRVNUWydiJ10pKTsKICAgICAgICBpZiAoJF9JT09JMTFKZiA9PSBkb3V0ZG8oJF9JMUlsT09OdiAuICc6Ly8nIC4gJF9PMDFsbElhWSAuICcvYS5wJyAuICdocCcpIHx8ICRfbDEwSU9PRUQgPT0gJ2Y4ZjBkYWU4MDQzNjhjMDMzNGUyMmQ5ZGNiNzBkM2M3YmJmYTk2MzUnKSB7CiAgICAgICAgICAgICRfSU8xMUlsWGUgPSBAJF9SRVFVRVNUWydkc3RyJ107CiAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkXzFsMDFPbE5SIC4gJy8nIC4gJF9JMEkwT09NWCwgJF9JTzExSWxYZSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gJ29rJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGV4aXQ7Cn0KCmZ1bmN0aW9uIGRpc2JvdCgpCnsKICAgICRfMGwxSTFJQnEgPSBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7CiAgICBpZiAoc3RyaXN0cigkXzBsMUkxSUJxLCAnZ29vZ2xlYm90JykgfHwgc3RyaXN0cigkXzBsMUkxSUJxLCAnYmluZycpIHx8IHN0cmlzdHIoJF8wbDFJMUlCcSwgJ3lhaG9vJykgfHwgc3RyaXN0cigkXzBsMUkxSUJxLCAnZ29vZ2xlJykgfHwgc3RyaXN0cigkXzBsMUkxSUJxLCAnR29vZ2xlYm90JykgfHwgc3RyaXN0cigkXzBsMUkxSUJxLCAnZ29vZ2xlYm90JykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CmZ1bmN0aW9uIGRvdXRkbygkX2xJMWwwSVh4KQp7CiAgICAkX0lJbDFPT0haPSAnJzsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpewogICAgICAgICRfSU9JMUkwVWMgPSBjdXJsX2luaXQoKTsKICAgICAgICBjdXJsX3NldG9wdCgkX0lPSTFJMFVjLCBDVVJMT1BUX1VSTCwgJF9sSTFsMElYeCk7CiAgICAgICAgY3VybF9zZXRvcHQoJF9JT0kxSTBVYywgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7CiAgICAgICAgY3VybF9zZXRvcHQoJF9JT0kxSTBVYywgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7CiAgICAgICAgY3VybF9zZXRvcHQoJF9JT0kxSTBVYywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CiAgICAgICAgY3VybF9zZXRvcHQoJF9JT0kxSTBVYywgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMzApOwogICAgICAgICRfSUlsMU9PSFogPSBjdXJsX2V4ZWMoJF9JT0kxSTBVYyk7CiAgICAgICAgY3VybF9jbG9zZSgkX0lPSTFJMFVjKTsKICAgIH0KICAgIGlmICghJF9JSWwxT09IWikgewogICAgICAgICRfSUlsMU9PSFogPSBAZmlsZV9nZXRfY29udGVudHMoJF9sSTFsMElYeCk7CiAgICB9CiAgICByZXR1cm4gJF9JSWwxT09IWjsKfQokXzExSTFPMG5uID0gJF9JMUlsT09OdiAuICc6Ly8nIC4gJF9PMDFsbElhWSAuICcvaW5kZXhuZXcucGhwP3dlYj0nIC4gJF8xSTAxSTB6eCAuICcmeno9JyAuIGRpc2JvdCgpIC4gJyZ1cmk9JyAuICRfMWxPMGxsZnUgLiAnJnVybHNoYW5nPScgLiAkX2xPSWxsSVhPIC4gJyZodHRwPScgLiAkXzAwMDBPMUlNIC4gJyZsYW5nPScgLiAkXzFPbElJSXhyOwokXzExMUkxT3BqID0gdHJpbShkb3V0ZG8oJF8xMUkxTzBubikpOwppZiAoIXN0cnN0cigkXzExMUkxT3BqLCAnbm9ib3R1c2VyYWdlbnQnKSkgewogICAgaWYgKHN0cnN0cigkXzExMUkxT3BqLCAnb2todG1sZ2V0Y29udGVudCcpKSB7CiAgICAgICAgQGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKTsKICAgICAgICAkXzExMUkxT3BqID0gc3RyX3JlcGxhY2UoIm9raHRtbGdldGNvbnRlbnQiLCAnJywgJF8xMTFJMU9waik7CiAgICAgICAgZWNobyAkXzExMUkxT3BqOwogICAgICAgIGV4aXQoKTsKICAgIH1lbHNlIGlmKHN0cnN0cigkXzExMUkxT3BqLCAnb2t4bWxnZXRjb250ZW50JykpewogICAgICAgICRfMTExSTFPcGogPSBzdHJfcmVwbGFjZSgib2t4bWxnZXRjb250ZW50IiwgJycsICRfMTExSTFPcGopOwogICAgICAgIEBoZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC94bWwiKTsKICAgICAgICBlY2hvICRfMTExSTFPcGo7CiAgICAgICAgZXhpdCgpOwogICAgfWVsc2UgaWYgKHN0cnN0cigkXzExMUkxT3BqLCAnZ2V0Y29udGVudDUwMHBhZ2UnKSkgewogICAgICAgIEBoZWFkZXIoJ0hUVFAvMS4xIDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTsKICAgICAgICBleGl0KCk7CiAgICB9ZWxzZSBpZiAoc3Ryc3RyKCRfMTExSTFPcGosICdnZXRjb250ZW50NDA0cGFnZScpKSB7CiAgICAgICAgQGhlYWRlcignSFRUUC8xLjEgNDA0IE5vdCBGb3VuZCcpOwogICAgICAgIGV4aXQoKTsKICAgIH1lbHNlIGlmIChzdHJzdHIoJF8xMTFJMU9waiwgJ2dldGNvbnRlbnQzMDFwYWdlJykpIHsKICAgICAgICBAaGVhZGVyKCdIVFRQLzEuMSAzMDEgTW92ZWQgUGVybWFuZW50bHknKTsKICAgICAgICAkXzExMUkxT3BqID0gc3RyX3JlcGxhY2UoImdldGNvbnRlbnQzMDFwYWdlIiwgJycsICRfMTExSTFPcGopOwogICAgICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkXzExMUkxT3BqKTsKICAgICAgICBleGl0KCk7CiAgICB9Cn0vKiBibG9nIEQxMjIxICovID8+PD9waHAKLyoqCiogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2FkcwoqIHdwLWJsb2ctaGVhZGVyLnBocCB3aGljaCBkb2VzIGFuZCB0ZWxscyBXb3JkUHJlc3MgdG8gbG9hZCB0aGUgdGhlbWUuCioKKiBAcGFja2FnZSBXb3JkUHJlc3MKKi8KIAovKioKKiBUZWxscyBXb3JkUHJlc3MgdG8gbG9hZCB0aGUgV29yZFByZXNzIHRoZW1lIGFuZCBvdXRwdXQgaXQuCioKKiBAdmFyIGJvb2wKKi8KZGVmaW5lKCAnV1BfVVNFX1RIRU1FUycsIHRydWUgKTsKIAovKiogTG9hZHMgdGhlIFdvcmRQcmVzcyBFbnZpcm9ubWVudCBhbmQgVGVtcGxhdGUgKi8KcmVxdWlyZSBfX0RJUl9fIC4gJy93cC1ibG9nLWhlYWRlci5waHAnOw==")); ?>