LS0gJElkOiBwbS5sdWEsdiAxLjQ4IDIwMTYvMTEvMDcgMTM6MTE6Mjggcm9iZXJ0byBFeHAgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCnByaW50KCd0ZXN0aW5nIHBhdHRlcm4gbWF0Y2hpbmcnKQoKbG9jYWwgZnVuY3Rpb24gY2hlY2tlcnJvciAobXNnLCBmLCAuLi4pCiAgbG9jYWwgcywgZXJyID0gcGNhbGwoZiwgLi4uKQogIGFzc2VydChub3QgcyBhbmQgc3RyaW5nLmZpbmQoZXJyLCBtc2cpKQplbmQKCgpmdW5jdGlvbiBmKHMsIHApCiAgbG9jYWwgaSxlID0gc3RyaW5nLmZpbmQocywgcCkKICBpZiBpIHRoZW4gcmV0dXJuIHN0cmluZy5zdWIocywgaSwgZSkgZW5kCmVuZAoKYSxiID0gc3RyaW5nLmZpbmQoJycsICcnKSAgICAtLSBlbXB0eSBwYXR0ZXJucyBhcmUgdHJpY2t5CmFzc2VydChhID09IDEgYW5kIGIgPT0gMCk7CmEsYiA9IHN0cmluZy5maW5kKCdhbG8nLCAnJykKYXNzZXJ0KGEgPT0gMSBhbmQgYiA9PSAwKQphLGIgPSBzdHJpbmcuZmluZCgnYVwwbyBhXDBvIGFcMG8nLCAnYScsIDEpICAgLS0gZmlyc3QgcG9zaXRpb24KYXNzZXJ0KGEgPT0gMSBhbmQgYiA9PSAxKQphLGIgPSBzdHJpbmcuZmluZCgnYVwwbyBhXDBvIGFcMG8nLCAnYVwwbycsIDIpICAgLS0gc3RhcnRzIGluIHRoZSBtaWRsZQphc3NlcnQoYSA9PSA1IGFuZCBiID09IDcpCmEsYiA9IHN0cmluZy5maW5kKCdhXDBvIGFcMG8gYVwwbycsICdhXDBvJywgOSkgICAtLSBzdGFydHMgaW4gdGhlIG1pZGxlCmFzc2VydChhID09IDkgYW5kIGIgPT0gMTEpCmEsYiA9IHN0cmluZy5maW5kKCdhXDBhXDBhXDBhXDBcMGFiJywgJ1wwYWInLCAyKTsgIC0tIGZpbmRzIGF0IHRoZSBlbmQKYXNzZXJ0KGEgPT0gOSBhbmQgYiA9PSAxMSk7CmEsYiA9IHN0cmluZy5maW5kKCdhXDBhXDBhXDBhXDBcMGFiJywgJ2InKSAgICAtLSBsYXN0IHBvc2l0aW9uCmFzc2VydChhID09IDExIGFuZCBiID09IDExKQphc3NlcnQoc3RyaW5nLmZpbmQoJ2FcMGFcMGFcMGFcMFwwYWInLCAnYlwwJykgPT0gbmlsKSAgIC0tIGNoZWNrIGVuZGluZwphc3NlcnQoc3RyaW5nLmZpbmQoJycsICdcMCcpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5maW5kKCdhbG8xMjNhbG8nLCAnMTInKSA9PSA0KQphc3NlcnQoc3RyaW5nLmZpbmQoJ2FsbzEyM2FsbycsICdeMTInKSA9PSBuaWwpCgphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWFiIiwgIi4qYiIpID09ICJhYWFiIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhIiwgIi4qYSIpID09ICJhYWEiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJiIiwgIi4qYiIpID09ICJiIikKCmFzc2VydChzdHJpbmcubWF0Y2goImFhYWIiLCAiLitiIikgPT0gImFhYWIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWEiLCAiLithIikgPT0gImFhYSIpCmFzc2VydChub3Qgc3RyaW5nLm1hdGNoKCJiIiwgIi4rYiIpKQoKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhYiIsICIuP2IiKSA9PSAiYWIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWEiLCAiLj9hIikgPT0gImFhIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYiIsICIuP2IiKSA9PSAiYiIpCgphc3NlcnQoZignYWxvQUxPJywgJyVsKicpID09ICdhbG8nKQphc3NlcnQoZignYUxvX0FMTycsICclYSonKSA9PSAnYUxvJykKCmFzc2VydChmKCIgIFxuXHIqJlxuXHIgICB4dXh1ICBcblxuIiwgIiVnJWclZysiKSA9PSAieHV4dSIpCgphc3NlcnQoZignYWFhYicsICdhKicpID09ICdhYWEnKTsKYXNzZXJ0KGYoJ2FhYScsICdeLiokJykgPT0gJ2FhYScpOwphc3NlcnQoZignYWFhJywgJ2IqJykgPT0gJycpOwphc3NlcnQoZignYWFhJywgJ2FiKmEnKSA9PSAnYWEnKQphc3NlcnQoZignYWJhJywgJ2FiKmEnKSA9PSAnYWJhJykKYXNzZXJ0KGYoJ2FhYWInLCAnYSsnKSA9PSAnYWFhJykKYXNzZXJ0KGYoJ2FhYScsICdeLiskJykgPT0gJ2FhYScpCmFzc2VydChmKCdhYWEnLCAnYisnKSA9PSBuaWwpCmFzc2VydChmKCdhYWEnLCAnYWIrYScpID09IG5pbCkKYXNzZXJ0KGYoJ2FiYScsICdhYithJykgPT0gJ2FiYScpCmFzc2VydChmKCdhJGEnLCAnLiQnKSA9PSAnYScpCmFzc2VydChmKCdhJGEnLCAnLiUkJykgPT0gJ2EkJykKYXNzZXJ0KGYoJ2EkYScsICcuJC4nKSA9PSAnYSRhJykKYXNzZXJ0KGYoJ2EkYScsICckJCcpID09IG5pbCkKYXNzZXJ0KGYoJ2EkYicsICdhJCcpID09IG5pbCkKYXNzZXJ0KGYoJ2EkYScsICckJykgPT0gJycpCmFzc2VydChmKCcnLCAnYionKSA9PSAnJykKYXNzZXJ0KGYoJ2FhYScsICdiYionKSA9PSBuaWwpCmFzc2VydChmKCdhYWFiJywgJ2EtJykgPT0gJycpCmFzc2VydChmKCdhYWEnLCAnXi4tJCcpID09ICdhYWEnKQphc3NlcnQoZignYWFiYWFhYmFhYWJhYWFiYScsICdiLipiJykgPT0gJ2JhYWFiYWFhYmFhYWInKQphc3NlcnQoZignYWFiYWFhYmFhYWJhYWFiYScsICdiLi1iJykgPT0gJ2JhYWFiJykKYXNzZXJ0KGYoJ2FsbyB4bycsICcubyQnKSA9PSAneG8nKQphc3NlcnQoZignIFxuIGlzdG8g6SBhc3NpbScsICclUyVTKicpID09ICdpc3RvJykKYXNzZXJ0KGYoJyBcbiBpc3RvIOkgYXNzaW0nLCAnJVMqJCcpID09ICdhc3NpbScpCmFzc2VydChmKCcgXG4gaXN0byDpIGFzc2ltJywgJ1thLXpdKiQnKSA9PSAnYXNzaW0nKQphc3NlcnQoZigndW0gY2FyYWN0ZXIgPyBleHRyYScsICdbXiVzYS16XScpID09ICc/JykKYXNzZXJ0KGYoJycsICdhPycpID09ICcnKQphc3NlcnQoZign4ScsICfhPycpID09ICfhJykKYXNzZXJ0KGYoJ+FibCcsICfhP2I/bD8nKSA9PSAn4WJsJykKYXNzZXJ0KGYoJyAg4WJsJywgJ+E/Yj9sPycpID09ICcnKQphc3NlcnQoZignYWEnLCAnXmFhP2E/YScpID09ICdhYScpCmFzc2VydChmKCddXV3hYicsICdbXl1dJykgPT0gJ+EnKQphc3NlcnQoZigiMGFsbyBhbG8iLCAiJXgqIikgPT0gIjBhIikKYXNzZXJ0KGYoImFsbyBhbG8iLCAiJUMrIikgPT0gImFsbyBhbG8iKQpwcmludCgnKycpCgoKZnVuY3Rpb24gZjEocywgcCkKICBwID0gc3RyaW5nLmdzdWIocCwgIiUlKFswLTldKSIsIGZ1bmN0aW9uIChzKQogICAgICAgIHJldHVybiAiJSIgLi4gKHRvbnVtYmVyKHMpKzEpCiAgICAgICBlbmQpCiAgcCA9IHN0cmluZy5nc3ViKHAsICJeKF4/KSIsICIlMSgpIiwgMSkKICBwID0gc3RyaW5nLmdzdWIocCwgIigkPykkIiwgIigpJTEiLCAxKQogIGxvY2FsIHQgPSB7c3RyaW5nLm1hdGNoKHMsIHApfQogIHJldHVybiBzdHJpbmcuc3ViKHMsIHRbMV0sIHRbI3RdIC0gMSkKZW5kCgphc3NlcnQoZjEoJ2FsbyBhbHggMTIzIGJcMG8gYlwwbycsICcoLi4qKSAlMScpID09ICJiXDBvIGJcMG8iKQphc3NlcnQoZjEoJ2F4ejEyMz0gND0gNCAzNCcsICcoLispPSguKik9JTIgJTEnKSA9PSAnMz0gND0gNCAzJykKYXNzZXJ0KGYxKCc9PT09PT09JywgJ14oPSopPSUxJCcpID09ICc9PT09PT09JykKYXNzZXJ0KHN0cmluZy5tYXRjaCgnPT09PT09PT09PScsICdeKFs9XSopPSUxJCcpID09IG5pbCkKCmxvY2FsIGZ1bmN0aW9uIHJhbmdlIChpLCBqKQogIGlmIGkgPD0gaiB0aGVuCiAgICByZXR1cm4gaSwgcmFuZ2UoaSsxLCBqKQogIGVuZAplbmQKCmxvY2FsIGFiYyA9IHN0cmluZy5jaGFyKHJhbmdlKDAsIDI1NSkpOwoKYXNzZXJ0KHN0cmluZy5sZW4oYWJjKSA9PSAyNTYpCgpmdW5jdGlvbiBzdHJzZXQgKHApCiAgbG9jYWwgcmVzID0ge3M9Jyd9CiAgc3RyaW5nLmdzdWIoYWJjLCBwLCBmdW5jdGlvbiAoYykgcmVzLnMgPSByZXMucyAuLiBjIGVuZCkKICByZXR1cm4gcmVzLnMKZW5kOwoKYXNzZXJ0KHN0cmluZy5sZW4oc3Ryc2V0KCdbXDIwMC1cMjEwXScpKSA9PSAxMSkKCmFzc2VydChzdHJzZXQoJ1thLXpdJykgPT0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikKYXNzZXJ0KHN0cnNldCgnW2EteiVkXScpID09IHN0cnNldCgnWyVkYS11dS16XScpKQphc3NlcnQoc3Ryc2V0KCdbYS1dJykgPT0gIi1hIikKYXNzZXJ0KHN0cnNldCgnW14lV10nKSA9PSBzdHJzZXQoJ1sld10nKSkKYXNzZXJ0KHN0cnNldCgnW10lJV0nKSA9PSAnJV0nKQphc3NlcnQoc3Ryc2V0KCdbYSUtel0nKSA9PSAnLWF6JykKYXNzZXJ0KHN0cnNldCgnWyVeJVslLWElXSUtYl0nKSA9PSAnLVtdXmFiJykKYXNzZXJ0KHN0cnNldCgnJVonKSA9PSBzdHJzZXQoJ1tcMS1cMjU1XScpKQphc3NlcnQoc3Ryc2V0KCcuJykgPT0gc3Ryc2V0KCdbXDEtXDI1NSV6XScpKQpwcmludCgnKycpOwoKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWxvIHh5eksiLCAiKCV3KylLIikgPT0gInh5eiIpCmFzc2VydChzdHJpbmcubWF0Y2goIjI1NCBLIiwgIiglZCopSyIpID09ICIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhbG8gIiwgIigldyopJCIpID09ICIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhbG8gIiwgIigldyspJCIpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5maW5kKCIo4WxvKSIsICIlKOEiKSA9PSAxKQpsb2NhbCBhLCBiLCBjLCBkLCBlID0gc3RyaW5nLm1hdGNoKCLibG8gYWxvIiwgIl4oKCguKS4pLiogKCV3KikpJCIpCmFzc2VydChhID09ICfibG8gYWxvJyBhbmQgYiA9PSAn4mwnIGFuZCBjID09ICfiJyBhbmQgZCA9PSAnYWxvJyBhbmQgZSA9PSBuaWwpCmEsIGIsIGMsIGQgID0gc3RyaW5nLm1hdGNoKCcwMTIzNDU2Nzg5JywgJyguKyguPykoKSknKQphc3NlcnQoYSA9PSAnMDEyMzQ1Njc4OScgYW5kIGIgPT0gJycgYW5kIGMgPT0gMTEgYW5kIGQgPT0gbmlsKQpwcmludCgnKycpCgphc3NlcnQoc3RyaW5nLmdzdWIoJ/xsbyD8bG8nLCAn/CcsICd4JykgPT0gJ3hsbyB4bG8nKQphc3NlcnQoc3RyaW5nLmdzdWIoJ2FsbyD6bG8gICcsICcgKyQnLCAnJykgPT0gJ2FsbyD6bG8nKSAgLS0gdHJpbQphc3NlcnQoc3RyaW5nLmdzdWIoJyAgYWxvIGFsbyAgJywgJ14lcyooLi0pJXMqJCcsICclMScpID09ICdhbG8gYWxvJykgIC0tIGRvdWJsZSB0cmltCmFzc2VydChzdHJpbmcuZ3N1YignYWxvICBhbG8gIFxuIDEyM1xuICcsICclcysnLCAnICcpID09ICdhbG8gYWxvIDEyMyAnKQp0ID0gImFi5yBkIgphLCBiID0gc3RyaW5nLmdzdWIodCwgJyguKScsICclMUAnKQphc3NlcnQoJ0AnLi5hID09IHN0cmluZy5nc3ViKHQsICcnLCAnQCcpIGFuZCBiID09IDUpCmEsIGIgPSBzdHJpbmcuZ3N1YignYWLnZCcsICcoLiknLCAnJTBAJywgMikKYXNzZXJ0KGEgPT0gJ2FAYkDnZCcgYW5kIGIgPT0gMikKYXNzZXJ0KHN0cmluZy5nc3ViKCdhbG8gYWxvJywgJygpW2FsXScsICclMScpID09ICcxMm8gNTZvJykKYXNzZXJ0KHN0cmluZy5nc3ViKCJhYmM9eHl6IiwgIigldyopKCVwKSgldyspIiwgIiUzJTIlMS0lMCIpID09CiAgICAgICAgICAgICAgInh5ej1hYmMtYWJjPXh5eiIpCmFzc2VydChzdHJpbmcuZ3N1YigiYWJjIiwgIiV3IiwgIiUxJTAiKSA9PSAiYWFiYmNjIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJhYmMiLCAiJXcrIiwgIiUwJTEiKSA9PSAiYWJjYWJjIikKYXNzZXJ0KHN0cmluZy5nc3ViKCfh6e0nLCAnJCcsICdcMPP6JykgPT0gJ+Hp7Vww8/onKQphc3NlcnQoc3RyaW5nLmdzdWIoJycsICdeJywgJ3InKSA9PSAncicpCmFzc2VydChzdHJpbmcuZ3N1YignJywgJyQnLCAncicpID09ICdyJykKcHJpbnQoJysnKQoKCmRvICAgLS0gbmV3ICg1LjMuMykgc2VtYW50aWNzIGZvciBlbXB0eSBtYXRjaGVzCiAgYXNzZXJ0KHN0cmluZy5nc3ViKCJhIGIgY2QiLCAiICoiLCAiLSIpID09ICItYS1iLWMtZC0iKQoKICBsb2NhbCByZXMgPSAiIgogIGxvY2FsIHN1YiA9ICJhICBcbmJjXHRcdGQiCiAgbG9jYWwgaSA9IDEKICBmb3IgcCwgZSBpbiBzdHJpbmcuZ21hdGNoKHN1YiwgIigpJXMqKCkiKSBkbwogICAgcmVzID0gcmVzIC4uIHN0cmluZy5zdWIoc3ViLCBpLCBwIC0gMSkgLi4gIi0iCiAgICBpID0gZQogIGVuZAogIGFzc2VydChyZXMgPT0gIi1hLWItYy1kLSIpCmVuZAoKCmFzc2VydChzdHJpbmcuZ3N1YigidW0gKGRvaXMpIHRyZXMgKHF1YXRybykiLCAiKCUoJXcrJSkpIiwgc3RyaW5nLnVwcGVyKSA9PQogICAgICAgICAgICAidW0gKERPSVMpIHRyZXMgKFFVQVRSTykiKQoKZG8KICBsb2NhbCBmdW5jdGlvbiBzZXRnbG9iYWwgKG4sdikgcmF3c2V0KF9HLCBuLCB2KSBlbmQKICBzdHJpbmcuZ3N1YigiYT1yb2JlcnRvLHJvYmVydG89YSIsICIoJXcrKT0oJXcldyopIiwgc2V0Z2xvYmFsKQogIGFzc2VydChfRy5hPT0icm9iZXJ0byIgYW5kIF9HLnJvYmVydG89PSJhIikKZW5kCgpmdW5jdGlvbiBmKGEsYikgcmV0dXJuIHN0cmluZy5nc3ViKGEsJy4nLGIpIGVuZAphc3NlcnQoc3RyaW5nLmdzdWIoInRyb2NhciB0dWRvIGVtIHx0ZXN0ZXxifCDpIHxiZWxlemF8YWx8IiwgInwoW158XSopfChbXnxdKil8IiwgZikgPT0KICAgICAgICAgICAgInRyb2NhciB0dWRvIGVtIGJiYmJiIOkgYWxhbGFsYWxhbGFsIikKCmxvY2FsIGZ1bmN0aW9uIGRvc3RyaW5nIChzKSByZXR1cm4gbG9hZChzLCAiIikoKSBvciAiIiBlbmQKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gJGE9J3gnJCBub3ZhbWVudGUgJHJldHVybiBhJCIsCiAgICAgICAgICAgICAgICAgICAiJChbXiRdKiklJCIsCiAgICAgICAgICAgICAgICAgICBkb3N0cmluZykgPT0gImFsbyAgbm92YW1lbnRlIHgiKQoKeCA9IHN0cmluZy5nc3ViKCIkeD1zdHJpbmcuZ3N1YignYWxvJywgJy4nLCBzdHJpbmcudXBwZXIpJCBhc3NpbSB2YWkgcGFyYSAkcmV0dXJuIHgkIiwKICAgICAgICAgIiQoW14kXSopJSQiLCBkb3N0cmluZykKYXNzZXJ0KHggPT0gJyBhc3NpbSB2YWkgcGFyYSBBTE8nKQoKdCA9IHt9CnMgPSAnYSBhbG8gam9zZSAgam9hbycKciA9IHN0cmluZy5nc3ViKHMsICcoKSgldyspKCknLCBmdW5jdGlvbiAoYSx3LGIpCiAgICAgIGFzc2VydChzdHJpbmcubGVuKHcpID09IGItYSk7CiAgICAgIHRbYV0gPSBiLWE7CiAgICBlbmQpCmFzc2VydChzID09IHIgYW5kIHRbMV0gPT0gMSBhbmQgdFszXSA9PSAzIGFuZCB0WzddID09IDQgYW5kIHRbMTNdID09IDQpCgoKZnVuY3Rpb24gaXNiYWxhbmNlZCAocykKICByZXR1cm4gc3RyaW5nLmZpbmQoc3RyaW5nLmdzdWIocywgIiViKCkiLCAiIiksICJbKCldIikgPT0gbmlsCmVuZAoKYXNzZXJ0KGlzYmFsYW5jZWQoIig5ICgoOCkpKFwwKSA3KSBcMFwwIGEgYiAoKShjKSgpIGEiKSkKYXNzZXJ0KG5vdCBpc2JhbGFuY2VkKCIoOSAoKDgpIDcpIGEgYiAoXDAgYykgYSIpKQphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyAnb2knIGFsbyIsICIlYicnIiwgJyInKSA9PSAnYWxvICIgYWxvJykKCgpsb2NhbCB0ID0geyJhcHBsZSIsICJvcmFuZ2UiLCAibGltZSI7IG49MH0KYXNzZXJ0KHN0cmluZy5nc3ViKCJ4IGFuZCB4IGFuZCB4IiwgIngiLCBmdW5jdGlvbiAoKSB0Lm49dC5uKzE7IHJldHVybiB0W3Qubl0gZW5kKQogICAgICAgID09ICJhcHBsZSBhbmQgb3JhbmdlIGFuZCBsaW1lIikKCnQgPSB7bj0wfQpzdHJpbmcuZ3N1YigiZmlyc3Qgc2Vjb25kIHdvcmQiLCAiJXcldyoiLCBmdW5jdGlvbiAodykgdC5uPXQubisxOyB0W3Qubl0gPSB3IGVuZCkKYXNzZXJ0KHRbMV0gPT0gImZpcnN0IiBhbmQgdFsyXSA9PSAic2Vjb25kIiBhbmQgdFszXSA9PSAid29yZCIgYW5kIHQubiA9PSAzKQoKdCA9IHtuPTB9CmFzc2VydChzdHJpbmcuZ3N1YigiZmlyc3Qgc2Vjb25kIHdvcmQiLCAiJXcrIiwKICAgICAgICAgZnVuY3Rpb24gKHcpIHQubj10Lm4rMTsgdFt0Lm5dID0gdyBlbmQsIDIpID09ICJmaXJzdCBzZWNvbmQgd29yZCIpCmFzc2VydCh0WzFdID09ICJmaXJzdCIgYW5kIHRbMl0gPT0gInNlY29uZCIgYW5kIHRbM10gPT0gbmlsKQoKY2hlY2tlcnJvcigiaW52YWxpZCByZXBsYWNlbWVudCB2YWx1ZSAlKGEgdGFibGUlKSIsCiAgICAgICAgICAgIHN0cmluZy5nc3ViLCAiYWxvIiwgIi4iLCB7YSA9IHt9fSkKY2hlY2tlcnJvcigiaW52YWxpZCBjYXB0dXJlIGluZGV4ICUlMiIsIHN0cmluZy5nc3ViLCAiYWxvIiwgIi4iLCAiJTIiKQpjaGVja2Vycm9yKCJpbnZhbGlkIGNhcHR1cmUgaW5kZXggJSUwIiwgc3RyaW5nLmdzdWIsICJhbG8iLCAiKCUwKSIsICJhIikKY2hlY2tlcnJvcigiaW52YWxpZCBjYXB0dXJlIGluZGV4ICUlMSIsIHN0cmluZy5nc3ViLCAiYWxvIiwgIiglMSkiLCAiYSIpCmNoZWNrZXJyb3IoImludmFsaWQgdXNlIG9mICclJSciLCBzdHJpbmcuZ3N1YiwgImFsbyIsICIuIiwgIiV4IikKCi0tIGJ1ZyBzaW5jZSAyLjUgKEMtc3RhY2sgb3ZlcmZsb3cpCmRvCiAgbG9jYWwgZnVuY3Rpb24gZiAoc2l6ZSkKICAgIGxvY2FsIHMgPSBzdHJpbmcucmVwKCJhIiwgc2l6ZSkKICAgIGxvY2FsIHAgPSBzdHJpbmcucmVwKCIuPyIsIHNpemUpCiAgICByZXR1cm4gcGNhbGwoc3RyaW5nLm1hdGNoLCBzLCBwKQogIGVuZAogIGxvY2FsIHIsIG0gPSBmKDgwKQogIGFzc2VydChyIGFuZCAjbSA9PSA4MCkKICByLCBtID0gZigyMDAwMDApCiAgYXNzZXJ0KG5vdCByIGFuZCBzdHJpbmcuZmluZChtLCAidG9vIGNvbXBsZXgiKSkKZW5kCgppZiBub3QgX3NvZnQgdGhlbgogIHByaW50KCJiaWcgc3RyaW5ncyIpCiAgbG9jYWwgYSA9IHN0cmluZy5yZXAoJ2EnLCAzMDAwMDApCiAgYXNzZXJ0KHN0cmluZy5maW5kKGEsICdeYSouPyQnKSkKICBhc3NlcnQobm90IHN0cmluZy5maW5kKGEsICdeYSouP2IkJykpCiAgYXNzZXJ0KHN0cmluZy5maW5kKGEsICdeYS0uPyQnKSkKCiAgLS0gYnVnIGluIDUuMS4yCiAgYSA9IHN0cmluZy5yZXAoJ2EnLCAxMDAwMCkgLi4gc3RyaW5nLnJlcCgnYicsIDEwMDAwKQogIGFzc2VydChub3QgcGNhbGwoc3RyaW5nLmdzdWIsIGEsICdiJykpCmVuZAoKLS0gcmVjdXJzaXZlIG5lc3Qgb2YgZ3N1YnMKZnVuY3Rpb24gcmV2IChzKQogIHJldHVybiBzdHJpbmcuZ3N1YihzLCAiKC4pKC4rKSIsIGZ1bmN0aW9uIChjLHMxKSByZXR1cm4gcmV2KHMxKS4uYyBlbmQpCmVuZAoKbG9jYWwgeCA9ICJhYmNkZWYiCmFzc2VydChyZXYocmV2KHgpKSA9PSB4KQoKCi0tIGdzdWIgd2l0aCB0YWJsZXMKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gYWxvIiwgIi4iLCB7fSkgPT0gImFsbyBhbG8iKQphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyBhbG8iLCAiKC4pIiwge2E9IkFBIiwgbD0iIn0pID09ICJBQW8gQUFvIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gYWxvIiwgIiguKS4iLCB7YT0iQUEiLCBsPSJLIn0pID09ICJBQW8gQUFvIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gYWxvIiwgIigoLikoLj8pKSIsIHthbD0iQUEiLCBvPWZhbHNlfSkgPT0gIkFBbyBBQW8iKQoKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gYWxvIiwgIigpLiIsIHsneCcsJ3l5Jywnenp6J30pID09ICJ4eXl6enogYWxvIikKCnQgPSB7fTsgc2V0bWV0YXRhYmxlKHQsIHtfX2luZGV4ID0gZnVuY3Rpb24gKHQscykgcmV0dXJuIHN0cmluZy51cHBlcihzKSBlbmR9KQphc3NlcnQoc3RyaW5nLmdzdWIoImEgYWxvIGIgaGkiLCAiJXcldysiLCB0KSA9PSAiYSBBTE8gYiBISSIpCgoKLS0gdGVzdHMgZm9yIGdtYXRjaApsb2NhbCBhID0gMApmb3IgaSBpbiBzdHJpbmcuZ21hdGNoKCdhYmNkZScsICcoKScpIGRvIGFzc2VydChpID09IGErMSk7IGE9aSBlbmQKYXNzZXJ0KGE9PTYpCgp0ID0ge249MH0KZm9yIHcgaW4gc3RyaW5nLmdtYXRjaCgiZmlyc3Qgc2Vjb25kIHdvcmQiLCAiJXcrIikgZG8KICAgICAgdC5uPXQubisxOyB0W3Qubl0gPSB3CmVuZAphc3NlcnQodFsxXSA9PSAiZmlyc3QiIGFuZCB0WzJdID09ICJzZWNvbmQiIGFuZCB0WzNdID09ICJ3b3JkIikKCnQgPSB7MywgNiwgOX0KZm9yIGkgaW4gc3RyaW5nLmdtYXRjaCAoInh1eHggdXUgcHBhciByIiwgIigpKC4pJTIiKSBkbwogIGFzc2VydChpID09IHRhYmxlLnJlbW92ZSh0LCAxKSkKZW5kCmFzc2VydCgjdCA9PSAwKQoKdCA9IHt9CmZvciBpLGogaW4gc3RyaW5nLmdtYXRjaCgiMTMgMTQgMTAgPSAxMSwgMTU9IDE2LCAyMj0yMyIsICIoJWQrKSVzKj0lcyooJWQrKSIpIGRvCiAgdFt0b251bWJlcihpKV0gPSB0b251bWJlcihqKQplbmQKYSA9IDAKZm9yIGssdiBpbiBwYWlycyh0KSBkbyBhc3NlcnQoaysxID09IHYrMCk7IGE9YSsxIGVuZAphc3NlcnQoYSA9PSAzKQoKCi0tIHRlc3RzIGZvciBgJWYnIChgZnJvbnRpZXJzJykKCmFzc2VydChzdHJpbmcuZ3N1YigiYWFhIGFhIGEgYWFhIGEiLCAiJWZbJXddYSIsICJ4IikgPT0gInhhYSB4YSB4IHhhYSB4IikKYXNzZXJ0KHN0cmluZy5nc3ViKCJbW11dIFtdW10gW1tbWyIsICIlZltbXS4iLCAieCIpID09ICJ4W11dIHhdeF0geFtbWyIpCmFzc2VydChzdHJpbmcuZ3N1YigiMDFhYmM0NWRlMyIsICIlZlslZF0iLCAiLiIpID09ICIuMDFhYmMuNDVkZS4zIikKYXNzZXJ0KHN0cmluZy5nc3ViKCIwMWFiYzQ1IGRlM3giLCAiJWZbJURdJXciLCAiLiIpID09ICIwMS5iYzQ1IGRlMy4iKQphc3NlcnQoc3RyaW5nLmdzdWIoImZ1bmN0aW9uIiwgIiVmW1wxLVwyNTVdJXciLCAiLiIpID09ICIudW5jdGlvbiIpCmFzc2VydChzdHJpbmcuZ3N1YigiZnVuY3Rpb24iLCAiJWZbXlwxLVwyNTVdIiwgIi4iKSA9PSAiZnVuY3Rpb24uIikKCmFzc2VydChzdHJpbmcuZmluZCgiYSIsICIlZlthXSIpID09IDEpCmFzc2VydChzdHJpbmcuZmluZCgiYSIsICIlZlteJXpdIikgPT0gMSkKYXNzZXJ0KHN0cmluZy5maW5kKCJhIiwgIiVmW14lbF0iKSA9PSAyKQphc3NlcnQoc3RyaW5nLmZpbmQoImFiYSIsICIlZlthJXpdIikgPT0gMykKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmEiLCAiJWZbJXpdIikgPT0gNCkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgiYWJhIiwgIiVmWyVsJXpdIikpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiYSIsICIlZlteJWwlel0iKSkKCmxvY2FsIGksIGUgPSBzdHJpbmcuZmluZCgiIGFsbyBhYWxvIGFsbG8iLCAiJWZbJVNdLi0lZlslc10uLSVmWyVTXSIpCmFzc2VydChpID09IDIgYW5kIGUgPT0gNSkKbG9jYWwgayA9IHN0cmluZy5tYXRjaCgiIGFsbyBhYWxvIGFsbG8iLCAiJWZbJVNdKC4tJWZbJXNdLi0lZlslU10pIikKYXNzZXJ0KGsgPT0gJ2FsbyAnKQoKbG9jYWwgYSA9IHsxLCA1LCA5LCAxNCwgMTcsfQpmb3IgayBpbiBzdHJpbmcuZ21hdGNoKCJhbG8gYWxvIHRoMDIgaXMgMWhhdCIsICIoKSVmWyV3JWRdIikgZG8KICBhc3NlcnQodGFibGUucmVtb3ZlKGEsIDEpID09IGspCmVuZAphc3NlcnQoI2EgPT0gMCkKCgotLSBtYWxmb3JtZWQgcGF0dGVybnMKbG9jYWwgZnVuY3Rpb24gbWFsZm9ybSAocCwgbSkKICBtID0gbSBvciAibWFsZm9ybWVkIgogIGxvY2FsIHIsIG1zZyA9IHBjYWxsKHN0cmluZy5maW5kLCAiYSIsIHApCiAgYXNzZXJ0KG5vdCByIGFuZCBzdHJpbmcuZmluZChtc2csIG0pKQplbmQKCm1hbGZvcm0oIiguIiwgInVuZmluaXNoZWQgY2FwdHVyZSIpCm1hbGZvcm0oIi4pIiwgImludmFsaWQgcGF0dGVybiBjYXB0dXJlIikKbWFsZm9ybSgiW2EiKQptYWxmb3JtKCJbXSIpCm1hbGZvcm0oIlteXSIpCm1hbGZvcm0oIlthJV0iKQptYWxmb3JtKCJbYSUiKQptYWxmb3JtKCIlYiIpCm1hbGZvcm0oIiViYSIpCm1hbGZvcm0oIiUiKQptYWxmb3JtKCIlZiIsICJtaXNzaW5nIikKCi0tIFwwIGluIHBhdHRlcm5zCmFzc2VydChzdHJpbmcubWF0Y2goImFiXDBcMVwyYyIsICJbXDAtXDJdKyIpID09ICJcMFwxXDIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYlwwXDFcMmMiLCAiW1wwLVwwXSsiKSA9PSAiXDAiKQphc3NlcnQoc3RyaW5nLmZpbmQoImIkYSIsICIkXDA/IikgPT0gMikKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmNcMGVmZyIsICIlXDAiKSA9PSA0KQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYmNcMGVmZ1wwXDFlXDFnIiwgIiViXDBcMSIpID09ICJcMGVmZ1wwXDFlXDEiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYmNcMFwwXDAiLCAiJVwwKyIpID09ICJcMFwwXDAiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYmNcMFwwXDAiLCAiJVwwJVwwPyIpID09ICJcMFwwIikKCi0tIG1hZ2ljIGNoYXIgYWZ0ZXIgXDAKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmNcMFwwIiwiXDAuIikgPT0gNCkKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmN4XDBcMGFiY1wwYWJjIiwieFwwXDBhYmNcMGEuIikgPT0gNCkKCnByaW50KCdPSycpCgo=