stamp:PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlNUQU1QZWRlPC90aXRsZT48c3R5bGU+Ym9keXtiYWNrZ3JvdW5kOiMzMzM7Y29sb3I6I2ZmZjtmb250LWZhbWlseTpBcmlhbCxzYW5zLXNlcmlmO3RleHQtYWxpZ246Y2VudGVyfSNib2FyZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg1LDUwcHgpO2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoNSw1MHB4KTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MjBweH0uY2VsbHtib3JkZXI6MXB4IHNvbGlkICNmZmY7d2lkdGg6NTBweDtoZWlnaHQ6NTBweH0uY2VsbC5ob21le2JhY2tncm91bmQtY29sb3I6b3JhbmdlfS5kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjpyZWR9LnRva2VuWHtjb2xvcjpyZWR9LnRva2VuT3tjb2xvcjojZmZmfSNkaWNle3BhZGRpbmc6MTBweDttYXJnaW4tdG9wOjIwcHg7Y3Vyc29yOnBvaW50ZXJ9I3Nie21hcmdpbi10b3A6MjBweH0uZGljZVJlc3VsdHtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjEwcHh9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PGgyPlNUQU1QZWRlPC9oMj48ZGl2IGlkPSJib2FyZCI+PC9kaXY+PGJ1dHRvbiBpZD0iZGljZSIgb25jbGljaz0icm9sbERpY2UoKSI+Um9sbCBEaWNlPC9idXR0b24+PHAgaWQ9ImRpY2VSZXN1bHQiIGNsYXNzPSJkaWNlUmVzdWx0Ij48L3A+PHAgaWQ9InN0Ij48L3A+PGRpdiBpZD0ic2IiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPktldmluIFg6PHNwYW4gaWQ9InNYIj4wPC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6I2ZmZiI+THVrZSBPOjxzcGFuIGlkPSJzTyI+MDwvc3Bhbj48L3NwYW4+PC9kaXY+PHNjcmlwdD52YXIgYm9hcmRTaXplID0gNSwgZW5kUG9zID0gMjQ7CiAgICB2YXIgcGxheWVycyA9IHsgWDogMCwgTzogMCB9OwogICAgdmFyIGRhbmdlclNxdWFyZXMgPSBbNiwgMTMsIDIwXTsKICAgIHZhciBjdXJyZW50UGxheWVyID0gJ1gnOwogICAgdmFyIHMgPSB7IFg6IDAsIE86IDAgfTsKICAgIHZhciBkaWNlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpY2UnKTsKICAgIHZhciBzdGF0dXNUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0Jyk7CiAgICB2YXIgbW92ZUludGVydmFsOwoKICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICBjcmVhdGVCb2FyZCgpOwogICAgfTsKCiAgICBmdW5jdGlvbiBjcmVhdGVCb2FyZCgpIHsKICAgICAgICBjb25zdCBib2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2FyZCcpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9hcmRTaXplICogYm9hcmRTaXplOyBpKyspIHsKICAgICAgICAgICAgbGV0IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAnY2VsbCcgKyAoaSA9PT0gZW5kUG9zID8gJyBob21lJyA6ICcnKSArIChkYW5nZXJTcXVhcmVzLmluY2x1ZGVzKGkpID8gJyBkYW5nZXInIDogJycpOwogICAgICAgICAgICBib2FyZC5hcHBlbmRDaGlsZChjZWxsKTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlQm9hcmQoKTsKICAgIH0KCiAgICBmdW5jdGlvbiByb2xsRGljZSgpIHsKICAgICAgICBkaWNlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICBzdGF0dXNUZXh0LmlubmVyVGV4dCA9ICcnOwogICAgICAgIGNvbnN0IGRpY2VSZXN1bHQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA2KSArIDE7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpY2VSZXN1bHQnKS5pbm5lclRleHQgPSAnUm9sbGVkOiAnICsgZGljZVJlc3VsdDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGljZVJlc3VsdCcpLnN0eWxlLmNvbG9yID0gY3VycmVudFBsYXllciA9PT0gJ1gnID8gJ3JlZCcgOiAnd2hpdGUnOwogICAgICAgIGFuaW1hdGVNb3ZlKGN1cnJlbnRQbGF5ZXIsIGRpY2VSZXN1bHQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFuaW1hdGVNb3ZlKHBsYXllciwgc3RlcHMpIHsKICAgICAgICB2YXIgY3VycmVudFBvcyA9IHBsYXllcnNbcGxheWVyXTsKICAgICAgICB2YXIgZmluYWxQb3MgPSBjdXJyZW50UG9zICsgc3RlcHM7CiAgICAgICAgaWYgKGZpbmFsUG9zID4gZW5kUG9zKSB7CiAgICAgICAgICAgIHN0YXR1c1RleHQuaW5uZXJUZXh0ID0gJ1JvbGwgd2FzIHRvbyBoaWdoISc7CiAgICAgICAgICAgIHN3aXRjaFR1cm4oKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbW92ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50UG9zIDwgZmluYWxQb3MpIHsKICAgICAgICAgICAgICAgIGN1cnJlbnRQb3MrKzsKICAgICAgICAgICAgICAgIHVwZGF0ZVBsYXllclBvc2l0aW9uKHBsYXllciwgY3VycmVudFBvcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKG1vdmVJbnRlcnZhbCk7CiAgICAgICAgICAgICAgICBjaGVja1NxdWFyZShwbGF5ZXIsIGZpbmFsUG9zKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIDUwMCk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlUGxheWVyUG9zaXRpb24ocGxheWVyLCBuZXdQb3MpIHsKICAgICAgICBwbGF5ZXJzW3BsYXllcl0gPSBuZXdQb3M7CiAgICAgICAgdXBkYXRlQm9hcmQoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjaGVja1NxdWFyZShwbGF5ZXIsIG5ld1BvcykgewogICAgICAgIHZhciBvcHBvbmVudCA9IHBsYXllciA9PT0gJ1gnID8gJ08nIDogJ1gnOwogICAgICAgIGlmIChwbGF5ZXJzW29wcG9uZW50XSA9PT0gbmV3UG9zKSB7CiAgICAgICAgICAgIHBsYXllcnNbb3Bwb25lbnRdID0gMDsKICAgICAgICAgICAgdXBkYXRlQm9hcmQoKTsKICAgICAgICB9CgogICAgICAgIGlmIChkYW5nZXJTcXVhcmVzLmluY2x1ZGVzKG5ld1BvcykpIHsKICAgICAgICAgICAgcGxheWVyc1twbGF5ZXJdID0gMDsKICAgICAgICAgICAgc3RhdHVzVGV4dC5pbm5lclRleHQgPSAnT2ggbm8hIEhpdCBhIGRhbmdlciBzcXVhcmUhJzsKICAgICAgICAgICAgdXBkYXRlQm9hcmQoKTsKICAgICAgICB9IGVsc2UgaWYgKG5ld1BvcyA9PT0gZW5kUG9zKSB7CiAgICAgICAgICAgIHN0YXR1c1RleHQuaW5uZXJUZXh0ID0gKHBsYXllciA9PT0gJ1gnID8gJ0tldmluIFgnIDogJ0x1a2UgTycpICsgJyBXaW5zISc7CiAgICAgICAgICAgIHVwZGF0ZVNjb3JlKHBsYXllcik7CiAgICAgICAgICAgIHJlc2V0R2FtZSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2hUdXJuKCk7CiAgICB9CgogICAgZnVuY3Rpb24gc3dpdGNoVHVybigpIHsKICAgICAgICBjdXJyZW50UGxheWVyID0gY3VycmVudFBsYXllciA9PT0gJ1gnID8gJ08nIDogJ1gnOwogICAgICAgIGRpY2VCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVCb2FyZCgpIHsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2VsbCcpLmZvckVhY2goY2VsbCA9PiBjZWxsLmlubmVySFRNTCA9ICcnKTsKICAgICAgICBPYmplY3Qua2V5cyhwbGF5ZXJzKS5mb3JFYWNoKHBsYXllciA9PiB7CiAgICAgICAgICAgIGNvbnN0IHRva2VuQ2VsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jZWxsJylbcGxheWVyc1twbGF5ZXJdXTsKICAgICAgICAgICAgdG9rZW5DZWxsLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0idG9rZW4nICsgcGxheWVyICsgJyI+JyArIHBsYXllciArICc8L3NwYW4+JzsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiByZXNldEdhbWUoKSB7CiAgICAgICAgcGxheWVycyA9IHsgWDogMCwgTzogMCB9OwogICAgICAgIGN1cnJlbnRQbGF5ZXIgPSAnWCc7CiAgICAgICAgdXBkYXRlQm9hcmQoKTsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVTY29yZShwbGF5ZXIpIHsKICAgICAgICBzW3BsYXllcl0rKzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncycgKyBwbGF5ZXIpLmlubmVyVGV4dCA9IHNbcGxheWVyXTsKICAgIH08L3NjcmlwdD48L2JvZHk+PC9odG1sPg==
On-chain description