LS0gJElkOiB0ZXN0ZXMvc3RyaW5ncy5sdWEgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCnByaW50KCd0ZXN0aW5nIHN0cmluZ3MgYW5kIHN0cmluZyBsaWJyYXJ5JykKCmxvY2FsIG1heGkgPGNvbnN0PiA9IG1hdGgubWF4aW50ZWdlcgpsb2NhbCBtaW5pIDxjb25zdD4gPSBtYXRoLm1pbmludGVnZXIKCgpsb2NhbCBmdW5jdGlvbiBjaGVja2Vycm9yIChtc2csIGYsIC4uLikKICBsb2NhbCBzLCBlcnIgPSBwY2FsbChmLCAuLi4pCiAgYXNzZXJ0KG5vdCBzIGFuZCBzdHJpbmcuZmluZChlcnIsIG1zZykpCmVuZAoKCi0tIHRlc3Rpbmcgc3RyaW5nIGNvbXBhcmlzb25zCmFzc2VydCgnYWxvJyA8ICdhbG8xJykKYXNzZXJ0KCcnIDwgJ2EnKQphc3NlcnQoJ2Fsb1wwYWxvJyA8ICdhbG9cMGInKQphc3NlcnQoJ2Fsb1wwYWxvXDBcMCcgPiAnYWxvXDBhbG9cMCcpCmFzc2VydCgnYWxvJyA8ICdhbG9cMCcpCmFzc2VydCgnYWxvXDAnID4gJ2FsbycpCmFzc2VydCgnXDAnIDwgJ1wxJykKYXNzZXJ0KCdcMFwwJyA8ICdcMFwxJykKYXNzZXJ0KCdcMVwwYVwwYScgPD0gJ1wxXDBhXDBhJykKYXNzZXJ0KG5vdCAoJ1wxXDBhXDBiJyA8PSAnXDFcMGFcMGEnKSkKYXNzZXJ0KCdcMFwwXDAnIDwgJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDwgJ1wwXDBcMCcpKQphc3NlcnQoJ1wwXDBcMCcgPD0gJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDw9ICdcMFwwXDAnKSkKYXNzZXJ0KCdcMFwwXDAnIDw9ICdcMFwwXDAnKQphc3NlcnQoJ1wwXDBcMCcgPj0gJ1wwXDBcMCcpCmFzc2VydChub3QgKCdcMFwwYicgPCAnXDBcMGFcMCcpKQoKLS0gdGVzdGluZyBzdHJpbmcuc3ViCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDIsNCkgPT0gIjIzNCIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDcpID09ICI3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDYpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDcpID09ICI3IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMCwwKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLDEwKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMSw5KSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLC0yMCkgPT0gIiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC0xKSA9PSAiOSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC00KSA9PSAiNjc4OSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC02LCAtNCkgPT0gIjQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCAtNCkgPT0gIjEyMzQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCBtYXhpKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsIG1pbmksIG1pbmkpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiXDAwMDEyMzQ1Njc4OSIsMyw1KSA9PSAiMjM0IikKYXNzZXJ0KCgiXDAwMDEyMzQ1Njc4OSIpOnN1Yig4KSA9PSAiNzg5IikKCi0tIHRlc3Rpbmcgc3RyaW5nLmZpbmQKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkiLCAiMzQ1IikgPT0gMykKYSxiID0gc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OSIsICIzNDUiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwgYSwgYikgPT0gIjM0NSIpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIzNDUiLCAzKSA9PSAzKQphc3NlcnQoc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ1IiwgNCkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ2IiwgNCkpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIuNDUiLCAtOSkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiY2RlZmciLCAiXDAiLCA1LCAxKSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIikgPT0gMSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIiwgMSkgPT0gMSkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgiIiwgIiIsIDIpKQphc3NlcnQobm90IHN0cmluZy5maW5kKCcnLCAnYWFhJywgMSkpCmFzc2VydCgoJ2FsbyguKWFsbycpOmZpbmQoJyguKScsIDEsIDEpID09IDQpCgphc3NlcnQoc3RyaW5nLmxlbigiIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5sZW4oIlwwXDBcMCIpID09IDMpCmFzc2VydChzdHJpbmcubGVuKCIxMjM0NTY3ODkwIikgPT0gMTApCgphc3NlcnQoIyIiID09IDApCmFzc2VydCgjIlwwXDBcMCIgPT0gMykKYXNzZXJ0KCMiMTIzNDU2Nzg5MCIgPT0gMTApCgotLSB0ZXN0aW5nIHN0cmluZy5ieXRlL3N0cmluZy5jaGFyCmFzc2VydChzdHJpbmcuYnl0ZSgiYSIpID09IDk3KQphc3NlcnQoc3RyaW5nLmJ5dGUoIlx4ZTQiKSA+IDEyNykKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDI1NSkpID09IDI1NSkKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDApKSA9PSAwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlwwIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJcMFwwYWxvXDB4IiwgLTEpID09IHN0cmluZy5ieXRlKCd4JykpCmFzc2VydChzdHJpbmcuYnl0ZSgiYmEiLCAyKSA9PSA5NykKYXNzZXJ0KHN0cmluZy5ieXRlKCJcblxuIiwgMiwgLTEpID09IDEwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlxuXG4iLCAyLCAyKSA9PSAxMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCIiKSA9PSBuaWwpCmFzc2VydChzdHJpbmcuYnl0ZSgiaGkiLCAtMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgOSwgMTApID09IG5pbCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJoaSIsIDIsIDEpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5jaGFyKCkgPT0gIiIpCmFzc2VydChzdHJpbmcuY2hhcigwLCAyNTUsIDApID09ICJcMFwyNTVcMCIpCmFzc2VydChzdHJpbmcuY2hhcigwLCBzdHJpbmcuYnl0ZSgiXHhlNCIpLCAwKSA9PSAiXDBceGU0XDAiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIDEsIC0xKSkgPT0gIlx4ZTRsXDDzdSIpCmFzc2VydChzdHJpbmcuY2hhcihzdHJpbmcuYnl0ZSgiXHhlNGxcMPN1IiwgMSwgMCkpID09ICIiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIC0xMCwgMTAwKSkgPT0gIlx4ZTRsXDDzdSIpCgpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgMjU2KQpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgLTEpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1heGludGVnZXIpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1pbmludGVnZXIpCgphc3NlcnQoc3RyaW5nLnVwcGVyKCJhYlwwYyIpID09ICJBQlwwQyIpCmFzc2VydChzdHJpbmcubG93ZXIoIlwwQUJDYyUkIikgPT0gIlwwYWJjYyUkIikKYXNzZXJ0KHN0cmluZy5yZXAoJ3Rlc3RlJywgMCkgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd06XNcMDB06icsIDIpID09ICd06XNcMHTqdOlzXDAwMHTqJykKYXNzZXJ0KHN0cmluZy5yZXAoJycsIDEwKSA9PSAnJykKCmlmIHN0cmluZy5wYWNrc2l6ZSgiaSIpID09IDQgdGhlbgogIC0tIHJlc3VsdCBsZW5ndGggd291bGQgYmUgMl4zMSAoaW50IG92ZXJmbG93KQogIGNoZWNrZXJyb3IoInRvbyBsYXJnZSIsIHN0cmluZy5yZXAsICdhYScsICgxIDw8IDMwKSkKICBjaGVja2Vycm9yKCJ0b28gbGFyZ2UiLCBzdHJpbmcucmVwLCAnYScsICgxIDw8IDMwKSwgJywnKQplbmQKCi0tIHJlcGV0aXRpb25zIHdpdGggc2VwYXJhdG9yCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDAsICd4dXh1JykgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDEsICd4dXh1JykgPT0gJ3Rlc3RlJykKYXNzZXJ0KHN0cmluZy5yZXAoJ1wxXDBcMScsIDIsICdcMFwwJykgPT0gJ1wxXDBcMVwwXDBcMVwwXDEnKQphc3NlcnQoc3RyaW5nLnJlcCgnJywgMTAsICcuJykgPT0gc3RyaW5nLnJlcCgnLicsIDkpKQphc3NlcnQobm90IHBjYWxsKHN0cmluZy5yZXAsICJhYSIsIG1heGkgLy8gMiArIDEwKSkKYXNzZXJ0KG5vdCBwY2FsbChzdHJpbmcucmVwLCAiIiwgbWF4aSAvLyAyICsgMTAsICJhYSIpKQoKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIiIgPT0gIiIpCmFzc2VydChzdHJpbmcucmV2ZXJzZSJcMFwxXDJcMyIgPT0gIlwzXDJcMVwwIikKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIlwwMDAxMjM0IiA9PSAiNDMyMVwwIikKCmZvciBpPTAsMzAgZG8gYXNzZXJ0KHN0cmluZy5sZW4oc3RyaW5nLnJlcCgnYScsIGkpKSA9PSBpKSBlbmQKCmFzc2VydCh0eXBlKHRvc3RyaW5nKG5pbCkpID09ICdzdHJpbmcnKQphc3NlcnQodHlwZSh0b3N0cmluZygxMikpID09ICdzdHJpbmcnKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmd7fSwgJ3RhYmxlOicpKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmcocHJpbnQpLCAnZnVuY3Rpb246JykpCmFzc2VydCgjdG9zdHJpbmcoJ1wwJykgPT0gMSkKYXNzZXJ0KHRvc3RyaW5nKHRydWUpID09ICJ0cnVlIikKYXNzZXJ0KHRvc3RyaW5nKGZhbHNlKSA9PSAiZmFsc2UiKQphc3NlcnQodG9zdHJpbmcoLTEyMDMpID09ICItMTIwMyIpCmFzc2VydCh0b3N0cmluZygxMjAzLjEyNSkgPT0gIjEyMDMuMTI1IikKYXNzZXJ0KHRvc3RyaW5nKC0wLjUpID09ICItMC41IikKYXNzZXJ0KHRvc3RyaW5nKC0zMjc2NykgPT0gIi0zMjc2NyIpCmlmIG1hdGgudG9pbnRlZ2VyKDIxNDc0ODM2NDcpIHRoZW4gICAtLSBubyBvdmVyZmxvdz8gKDMyIGJpdHMpCiAgYXNzZXJ0KHRvc3RyaW5nKC0yMTQ3NDgzNjQ3KSA9PSAiLTIxNDc0ODM2NDciKQplbmQKaWYgbWF0aC50b2ludGVnZXIoNDYxMTY4NjAxODQyNzM4NzkwNCkgdGhlbiAgIC0tIG5vIG92ZXJmbG93PyAoNjQgYml0cykKICBhc3NlcnQodG9zdHJpbmcoNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIjQ2MTE2ODYwMTg0MjczODc5MDQiKQogIGFzc2VydCh0b3N0cmluZygtNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIi00NjExNjg2MDE4NDI3Mzg3OTA0IikKZW5kCgppZiB0b3N0cmluZygwLjApID09ICIwLjAiIHRoZW4gICAtLSAic3RhbmRhcmQiIGNvZXJjaW9uIGZsb2F0LT5zdHJpbmcKICBhc3NlcnQoJycgLi4gMTIgPT0gJzEyJyBhbmQgMTIuMCAuLiAnJyA9PSAnMTIuMCcpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMuMCIpCmVsc2UgICAtLSBjb21wYXRpYmxlIGNvZXJjaW9uCiAgYXNzZXJ0KHRvc3RyaW5nKDAuMCkgPT0gIjAiKQogIGFzc2VydCgnJyAuLiAxMiA9PSAnMTInIGFuZCAxMi4wIC4uICcnID09ICcxMicpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMiKQplbmQKCmRvICAtLSB0ZXN0cyBmb3IgJyVwJyBmb3JtYXQKICAtLSBub3QgbXVjaCB0byB0ZXN0LCBhcyBDIGRvZXMgbm90IHNwZWNpZnkgd2hhdCAnJXAnIGRvZXMuCiAgLS0gKCJUaGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2Ugb2YgcHJpbnRpbmcKICAtLSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG1hbm5lci4iKQogIGxvY2FsIG51bGwgPSAiKG51bGwpIiAgICAtLSBudWxscyBhcmUgZm9ybWF0dGVkIGJ5IEx1YQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIDQpID09IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgdHJ1ZSkgPT0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBuaWwpID09IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwge30pIH49IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpIH49IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgY29yb3V0aW5lLnJ1bm5pbmcoKSkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikgPT0gc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpID09IHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHByaW50KSB+PSBzdHJpbmcuZm9ybWF0KCIlcCIsIGFzc2VydCkpCgogIGFzc2VydCgjc3RyaW5nLmZvcm1hdCgiJTkwcCIsIHt9KSA9PSA5MCkKICBhc3NlcnQoI3N0cmluZy5mb3JtYXQoIiUtNjBwIiwge30pID09IDYwKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlMTBwIiwgZmFsc2UpID09IHN0cmluZy5yZXAoIiAiLCAxMCAtICNudWxsKSAuLiBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlLTEycCIsIDEuNSkgPT0gbnVsbCAuLiBzdHJpbmcucmVwKCIgIiwgMTIgLSAjbnVsbCkpCgogIGRvCiAgICBsb2NhbCB0MSA9IHt9OyBsb2NhbCB0MiA9IHt9CiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCB0MSkgfj0gc3RyaW5nLmZvcm1hdCgiJXAiLCB0MikpCiAgZW5kCgogIGRvICAgICAtLSBzaG9ydCBzdHJpbmdzIGFyZSBpbnRlcm5hbGl6ZWQKICAgIGxvY2FsIHMxID0gc3RyaW5nLnJlcCgiYSIsIDEwKQogICAgbG9jYWwgczIgPSBzdHJpbmcucmVwKCJhYSIsIDUpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgczEpID09IHN0cmluZy5mb3JtYXQoIiVwIiwgczIpKQogIGVuZAoKICBkbyAgICAgLS0gbG9uZyBzdHJpbmdzIGFyZW4ndCBpbnRlcm5hbGl6ZWQKICAgIGxvY2FsIHMxID0gc3RyaW5nLnJlcCgiYSIsIDMwMCk7IGxvY2FsIHMyID0gc3RyaW5nLnJlcCgiYSIsIDMwMCkKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHMxKSB+PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHMyKSkKICBlbmQKZW5kCgp4ID0gJyLtbG8iXG5cXCcKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJyVxJXMnLCB4LCB4KSA9PSAnIlxcIu1sb1xcIlxcXG5cXFxcIiLtbG8iXG5cXCcpCmFzc2VydChzdHJpbmcuZm9ybWF0KCclcScsICJcMCIpID09IFtbIlwwIl1dKQphc3NlcnQobG9hZChzdHJpbmcuZm9ybWF0KCdyZXR1cm4gJXEnLCB4KSkoKSA9PSB4KQp4ID0gIlwwXDFcMDAyM1w1XDAwMDkiCmFzc2VydChsb2FkKHN0cmluZy5mb3JtYXQoJ3JldHVybiAlcScsIHgpKSgpID09IHgpCmFzc2VydChzdHJpbmcuZm9ybWF0KCJcMCVjXDAlYyV4XDAiLCBzdHJpbmcuYnl0ZSgiXHhlNCIpLCBzdHJpbmcuYnl0ZSgiYiIpLCAxNDApID09CiAgICAgICAgICAgICAgIlwwXHhlNFwwYjhjXDAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgnJykgPT0gIiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlYyIsMzQpLi5zdHJpbmcuZm9ybWF0KCIlYyIsNDgpLi5zdHJpbmcuZm9ybWF0KCIlYyIsOTApLi5zdHJpbmcuZm9ybWF0KCIlYyIsMTAwKSA9PQogICAgICAgc3RyaW5nLmZvcm1hdCgiJWMlYyVjJWMiLCAzNCwgNDgsIDkwLCAxMDApKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXNcMCBpcyBub3QgXDAlcyIsICdub3QgYmUnLCAnYmUnKSA9PSAnbm90IGJlXDAgaXMgbm90IFwwYmUnKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSUlZCAlMDEwZCIsIDEwLCAyMykgPT0gIiUxMCAwMDAwMDAwMDIzIikKYXNzZXJ0KHRvbnVtYmVyKHN0cmluZy5mb3JtYXQoIiVmIiwgMTAuMykpID09IDEwLjMpCnggPSBzdHJpbmcuZm9ybWF0KCciJS01MHMiJywgJ2EnKQphc3NlcnQoI3ggPT0gNTIpCmFzc2VydChzdHJpbmcuc3ViKHgsIDEsIDQpID09ICciYSAgJykKCmFzc2VydChzdHJpbmcuZm9ybWF0KCItJS4yMHMuMjBzIiwgc3RyaW5nLnJlcCgiJSIsIDIwMDApKSA9PQogICAgICAgICAgICAgICAgICAgICAiLSIuLnN0cmluZy5yZXAoIiUiLCAyMCkuLiIuMjBzIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJyItJTIwcy4yMHMiJywgc3RyaW5nLnJlcCgiJSIsIDIwMDApKSA9PQogICAgICAgc3RyaW5nLmZvcm1hdCgiJXEiLCAiLSIuLnN0cmluZy5yZXAoIiUiLCAyMDAwKS4uIi4yMHMiKSkKCmRvCiAgbG9jYWwgZnVuY3Rpb24gY2hlY2tRICh2KQogICAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoIiVxIiwgdikKICAgIGxvY2FsIG52ID0gbG9hZCgicmV0dXJuICIgLi4gcykoKQogICAgYXNzZXJ0KHYgPT0gbnYgYW5kIG1hdGgudHlwZSh2KSA9PSBtYXRoLnR5cGUobnYpKQogIGVuZAogIGNoZWNrUSgiXDBcMFwxXDI1NVx1ezIzNH0iKQogIGNoZWNrUShtYXRoLm1heGludGVnZXIpCiAgY2hlY2tRKG1hdGgubWluaW50ZWdlcikKICBjaGVja1EobWF0aC5waSkKICBjaGVja1EoMC4xKQogIGNoZWNrUSh0cnVlKQogIGNoZWNrUShuaWwpCiAgY2hlY2tRKGZhbHNlKQogIGNoZWNrUShtYXRoLmh1Z2UpCiAgY2hlY2tRKC1tYXRoLmh1Z2UpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVxIiwgMC8wKSA9PSAiKDAvMCkiKSAgIC0tIE5hTgogIGNoZWNrZXJyb3IoIm5vIGxpdGVyYWwiLCBzdHJpbmcuZm9ybWF0LCAiJXEiLCB7fSkKZW5kCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiXDAlc1wwIiwgIlwwXDBcMSIpID09ICJcMFwwXDBcMVwwIikKY2hlY2tlcnJvcigiY29udGFpbnMgemVyb3MiLCBzdHJpbmcuZm9ybWF0LCAiJTEwcyIsICJcMCIpCmNoZWNrZXJyb3IoImNhbm5vdCBoYXZlIG1vZGlmaWVycyIsIHN0cmluZy5mb3JtYXQsICIlMTBxIiwgIjEiKQoKLS0gZm9ybWF0IHggdG9zdHJpbmcKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICVzIiwgbmlsLCB0cnVlKSA9PSAibmlsIHRydWUiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXMgJS40cyIsIGZhbHNlLCB0cnVlKSA9PSAiZmFsc2UgdHJ1ZSIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlLjNzICUuM3MiLCBmYWxzZSwgdHJ1ZSkgPT0gImZhbCB0cnUiKQpsb2NhbCBtID0gc2V0bWV0YXRhYmxlKHt9LCB7X190b3N0cmluZyA9IGZ1bmN0aW9uICgpIHJldHVybiAiaGVsbG8iIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmFtZSA9ICJoaSJ9KQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXMgJS4xMHMiLCBtLCBtKSA9PSAiaGVsbG8gaGVsbG8iKQpnZXRtZXRhdGFibGUobSkuX190b3N0cmluZyA9IG5pbCAgIC0tIHdpbGwgdXNlICdfX25hbWUnIGZyb20gbm93IG9uCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlLjRzIiwgbSkgPT0gImhpOiAiKQoKZ2V0bWV0YXRhYmxlKG0pLl9fdG9zdHJpbmcgPSBmdW5jdGlvbiAoKSByZXR1cm4ge30gZW5kCmNoZWNrZXJyb3IoIidfX3Rvc3RyaW5nJyBtdXN0IHJldHVybiBhIHN0cmluZyIsIHRvc3RyaW5nLCBtKQoKCmFzc2VydChzdHJpbmcuZm9ybWF0KCIleCIsIDAuMCkgPT0gIjAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJTAyeCIsIDAuMCkgPT0gIjAwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUwOFgiLCAweEZGRkZGRkZGKSA9PSAiRkZGRkZGRkYiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSswOGQiLCAzMTUwMSkgPT0gIiswMDMxNTAxIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUrMDhkIiwgLTMwOTI3KSA9PSAiLTAwMzA5MjciKQoKCmRvICAgIC0tIGxvbmdlc3QgbnVtYmVyIHRoYXQgY2FuIGJlIGZvcm1hdHRlZAogIGxvY2FsIGkgPSAxCiAgbG9jYWwgaiA9IDEwMDAwCiAgd2hpbGUgaSArIDEgPCBqIGRvICAgLS0gYmluYXJ5IHNlYXJjaCBmb3IgbWF4aW11bSBmaW5pdGUgZmxvYXQKICAgIGxvY2FsIG0gPSAoaSArIGopIC8vIDIKICAgIGlmIDEwXm0gPCBtYXRoLmh1Z2UgdGhlbiBpID0gbSBlbHNlIGogPSBtIGVuZAogIGVuZAogIGFzc2VydCgxMF5pIDwgbWF0aC5odWdlIGFuZCAxMF5qID09IG1hdGguaHVnZSkKICBsb2NhbCBzID0gc3RyaW5nLmZvcm1hdCgnJS45OWYnLCAtKDEwXmkpKQogIGFzc2VydChzdHJpbmcubGVuKHMpID49IGkgKyAxMDEpCiAgYXNzZXJ0KHRvbnVtYmVyKHMpID09IC0oMTBeaSkpCgogIC0tIGxpbWl0IGZvciBmbG9hdHMKICBhc3NlcnQoMTBeMzggPCBtYXRoLmh1Z2UpCiAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoJyUuOTlmJywgLSgxMF4zOCkpCiAgYXNzZXJ0KHN0cmluZy5sZW4ocykgPj0gMzggKyAxMDEpCiAgYXNzZXJ0KHRvbnVtYmVyKHMpID09IC0oMTBeMzgpKQplbmQKCgotLSB0ZXN0aW5nIGxhcmdlIG51bWJlcnMgZm9yIGZvcm1hdApkbyAgIC0tIGFzc3VtZSBhdCBsZWFzdCAzMiBiaXRzCiAgbG9jYWwgbWF4LCBtaW4gPSAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCAgICAtLSAibGFyZ2UiIGZvciAzMiBiaXRzCiAgYXNzZXJ0KHN0cmluZy5zdWIoc3RyaW5nLmZvcm1hdCgiJTh4IiwgLTEpLCAtOCkgPT0gImZmZmZmZmZmIikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCBtYXgpID09ICI3ZmZmZmZmZiIpCiAgYXNzZXJ0KHN0cmluZy5zdWIoc3RyaW5nLmZvcm1hdCgiJXgiLCBtaW4pLCAtOCkgPT0gIjgwMDAwMDAwIikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWQiLCBtYXgpID09ICAiMjE0NzQ4MzY0NyIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWluKSA9PSAiLTIxNDc0ODM2NDgiKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIldSIsIDB4ZmZmZmZmZmYpID09ICI0Mjk0OTY3Mjk1IikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJW8iLCAweEFCQ0QpID09ICIxMjU3MTUiKQoKICBtYXgsIG1pbiA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwgLTB4ODAwMDAwMDAwMDAwMDAwMAogIGlmIG1heCA+IDIuMF41MyB0aGVuICAtLSBvbmx5IGZvciA2NCBiaXRzCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCAoMl41MiB8IDApIC0gMSkgPT0gImZmZmZmZmZmZmZmZmYiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIjB4JThYIiwgMHg4ZjAwMDAwMykgPT0gIjB4OEYwMDAwMDMiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgMl41MykgPT0gIjkwMDcxOTkyNTQ3NDA5OTIiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVpIiwgLTJeNTMpID09ICItOTAwNzE5OTI1NDc0MDk5MiIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCBtYXgpID09ICI3ZmZmZmZmZmZmZmZmZmZmIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIleCIsIG1pbikgPT0gIjgwMDAwMDAwMDAwMDAwMDAiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWF4KSA9PSAgIjkyMjMzNzIwMzY4NTQ3NzU4MDciKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWluKSA9PSAiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV1IiwgfigtMSA8PCA2NCkpID09ICIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpCiAgICBhc3NlcnQodG9zdHJpbmcoMTIzNDU2Nzg5MDEyMykgPT0gJzEyMzQ1Njc4OTAxMjMnKQogIGVuZAplbmQKCgpkbyBwcmludCgidGVzdGluZyAnZm9ybWF0ICVhICVBJyIpCiAgbG9jYWwgZnVuY3Rpb24gbWF0Y2hoZXhhIChuKQogICAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoIiVhIiwgbikKICAgIC0tIHJlc3VsdCBtYXRjaGVzIElTTyBDIHJlcXVpcmVtZW50cwogICAgYXNzZXJ0KHN0cmluZy5maW5kKHMsICJeJS0/MHhbMS05YS1mXSUuP1swLTlhLWZdKnBbLStdPyVkKyQiKSkKICAgIGFzc2VydCh0b251bWJlcihzKSA9PSBuKSAgLS0gYW5kIGhhcyBmdWxsIHByZWNpc2lvbgogICAgcyA9IHN0cmluZy5mb3JtYXQoIiVBIiwgbikKICAgIGFzc2VydChzdHJpbmcuZmluZChzLCAiXiUtPzBYWzEtOUEtRl0lLj9bMC05QS1GXSpQWy0rXT8lZCskIikpCiAgICBhc3NlcnQodG9udW1iZXIocykgPT0gbikKICBlbmQKICBmb3IgXywgbiBpbiBpcGFpcnN7MC4xLCAtMC4xLCAxLzMsIC0xLzMsIDFlMzAsIC0xZTMwLAogICAgICAgICAgICAgICAgICAgICAtNDUvMjQ3LCAxLCAtMSwgMiwgLTIsIDNlLTIwLCAtM2UtMjB9IGRvCiAgICBtYXRjaGhleGEobikKICBlbmQKCiAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVBIiwgMC4wKSwgIl4wWDAlLj8wKlAlKz8wJCIpKQogIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIC0wLjApLCAiXiUtMHgwJS4/MCpwJSs/MCQiKSkKCiAgaWYgbm90IF9wb3J0IHRoZW4gICAtLSB0ZXN0IGluZiwgLWluZiwgTmFOLCBhbmQgLTAuMAogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgMS8wKSwgIl5pbmYiKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlQSIsIC0xLzApLCAiXiUtSU5GIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJWEiLCAwLzApLCAiXiUtP25hbiIpKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgLTAuMCksICJeJS0weDAiKSkKICBlbmQKICAKICBpZiBub3QgcGNhbGwoc3RyaW5nLmZvcm1hdCwgIiUuM2EiLCAwKSB0aGVuCiAgICAoTWVzc2FnZSBvciBwcmludCkoIlxuID4+PiBtb2RpZmllcnMgZm9yIGZvcm1hdCAnJWEnIG5vdCBhdmFpbGFibGUgPDw8XG4iKQogIGVsc2UKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlKy4yQSIsIDEyKSwgIl4lKzBYJXglLiV4MFAlKz8lZCQiKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlLjRBIiwgLTEyKSwgIl4lLTBYJXglLiV4MDAwUCUrPyVkJCIpKQogIGVuZAplbmQKCgotLSBlcnJvcnMgaW4gZm9ybWF0Cgpsb2NhbCBmdW5jdGlvbiBjaGVjayAoZm10LCBtc2cpCiAgY2hlY2tlcnJvcihtc2csIHN0cmluZy5mb3JtYXQsIGZtdCwgMTApCmVuZAoKbG9jYWwgYXV4ID0gc3RyaW5nLnJlcCgnMCcsIDYwMCkKY2hlY2soIiUxMDAuM2QiLCAidG9vIGxvbmciKQpjaGVjaygiJTEiLi5hdXguLiIuM2QiLCAidG9vIGxvbmciKQpjaGVjaygiJTEuMTAwZCIsICJ0b28gbG9uZyIpCmNoZWNrKCIlMTAuMSIuLmF1eC4uIjAwNGQiLCAidG9vIGxvbmciKQpjaGVjaygiJXQiLCAiaW52YWxpZCBjb252ZXJzaW9uIikKY2hlY2soIiUiLi5hdXguLiJkIiwgInJlcGVhdGVkIGZsYWdzIikKY2hlY2soIiVkICVkIiwgIm5vIHZhbHVlIikKCgphc3NlcnQobG9hZCgicmV0dXJuIDFcbi0tY29tbWVudCB3aXRob3V0IGVuZGluZyBFT0wiKSgpID09IDEpCgoKY2hlY2tlcnJvcigidGFibGUgZXhwZWN0ZWQiLCB0YWJsZS5jb25jYXQsIDMpCmFzc2VydCh0YWJsZS5jb25jYXR7fSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgJ3gnKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7J1wwJywgJ1wwXDEnLCAnXDBcMVwyJ30sICcuXDAuJykgPT0gIlwwLlwwLlwwXDEuXDAuXDBcMVwyIikKbG9jYWwgYSA9IHt9OyBmb3IgaT0xLDMwMCBkbyBhW2ldID0gInh1eHUiIGVuZAphc3NlcnQodGFibGUuY29uY2F0KGEsICIxMjMiKS4uIjEyMyIgPT0gc3RyaW5nLnJlcCgieHV4dTEyMyIsIDMwMCkpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgImIiLCAyMCwgMjApID09ICJ4dXh1IikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiIiwgMjAsIDIxKSA9PSAieHV4dXh1eHUiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICJ4IiwgMjIsIDIxKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiMyIsIDI5OSkgPT0gInh1eHUzeHV4dSIpCmFzc2VydCh0YWJsZS5jb25jYXQoe30sICJ4IiwgbWF4aSwgbWF4aSAtIDEpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHt9LCAieCIsIG1pbmkgKyAxLCBtaW5pKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgIngiLCBtYXhpLCBtaW5pKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7W21heGldID0gImFsbyJ9LCAieCIsIG1heGksIG1heGkpID09ICJhbG8iKQphc3NlcnQodGFibGUuY29uY2F0KHtbbWF4aV0gPSAiYWxvIiwgW21heGkgLSAxXSA9ICJ5In0sICItIiwgbWF4aSAtIDEsIG1heGkpCiAgICAgICA9PSAieS1hbG8iKQoKYXNzZXJ0KG5vdCBwY2FsbCh0YWJsZS5jb25jYXQsIHsiYSIsICJiIiwge319KSkKCmEgPSB7ImEiLCJiIiwiYyJ9CmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAxLCAwKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDEpID09ICJhIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDIpID09ICJhLGIiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMikgPT0gImIsYyIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAzKSA9PSAiYyIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCA0KSA9PSAiIikKCmlmIG5vdCBfcG9ydCB0aGVuCgogIGxvY2FsIGxvY2FsZXMgPSB7ICJwdGIiLCAicHRfQlIuaXNvODg1OTEiLCAiSVNPLTg4NTktMSIgfQogIGxvY2FsIGZ1bmN0aW9uIHRyeWxvY2FsZSAodykKICAgIGZvciBpID0gMSwgI2xvY2FsZXMgZG8KICAgICAgaWYgb3Muc2V0bG9jYWxlKGxvY2FsZXNbaV0sIHcpIHRoZW4KICAgICAgICBwcmludChzdHJpbmcuZm9ybWF0KCInJXMnIGxvY2FsZSBzZXQgdG8gJyVzJyIsIHcsIGxvY2FsZXNbaV0pKQogICAgICAgIHJldHVybiBsb2NhbGVzW2ldCiAgICAgIGVuZAogICAgZW5kCiAgICBwcmludChzdHJpbmcuZm9ybWF0KCInJXMnIGxvY2FsZSBub3QgZm91bmQiLCB3KSkKICAgIHJldHVybiBmYWxzZQogIGVuZAoKICBpZiB0cnlsb2NhbGUoImNvbGxhdGUiKSAgdGhlbgogICAgYXNzZXJ0KCJhbG8iIDwgIuFsbyIgYW5kICLhbG8iIDwgImFtbyIpCiAgZW5kCgogIGlmIHRyeWxvY2FsZSgiY3R5cGUiKSB0aGVuCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHp7fP6IiwgIiVhIiwgIngiKSA9PSAieHh4eHgiKQogICAgYXNzZXJ0KHN0cmluZy5nc3ViKCLhwenJIiwgIiVsIiwgIngiKSA9PSAieMF4ySIpCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHB6ckiLCAiJXUiLCAieCIpID09ICLheOl4IikKICAgIGFzc2VydChzdHJpbmcudXBwZXIi4cHpe3h1eHV95+NvIiA9PSAiwcHJe1hVWFV9x8NPIikKICBlbmQKCiAgb3Muc2V0bG9jYWxlKCJDIikKICBhc3NlcnQob3Muc2V0bG9jYWxlKCkgPT0gJ0MnKQogIGFzc2VydChvcy5zZXRsb2NhbGUobmlsLCAibnVtZXJpYyIpID09ICdDJykKCmVuZAoKCi0tIGJ1ZyBpbiBMdWEgNS4zLjIKLS0gJ2dtYXRjaCcgaXRlcmF0b3IgZG9lcyBub3Qgd29yayBhY3Jvc3MgY29yb3V0aW5lcwpkbwogIGxvY2FsIGYgPSBzdHJpbmcuZ21hdGNoKCIxIDIgMyA0IDUiLCAiJWQrIikKICBhc3NlcnQoZigpID09ICIxIikKICBjbyA9IGNvcm91dGluZS53cmFwKGYpCiAgYXNzZXJ0KGNvKCkgPT0gIjIiKQplbmQKCgppZiBUPT1uaWwgdGhlbgogIChNZXNzYWdlIG9yIHByaW50KQogICAgICgiXG4gPj4+IHRlc3RDIG5vdCBhY3RpdmU6IHNraXBwaW5nICdwdXNoZnN0cmluZycgdGVzdHMgPDw8XG4iKQplbHNlCgogIHByaW50InRlc3RpbmcgJ3B1c2hmc3RyaW5nJyIKCiAgLS0gZm9ybWF0cyAlVSwgJWYsICVJIGFscmVhZHkgdGVzdGVkIGVsc2V3aGVyZQoKICBsb2NhbCBibGVuID0gNDAwICAgIC0tIGludGVybmFsIGJ1ZmZlciBsZW5ndGggaW4gJ2x1YU9fcHVzaGZzdHJpbmcnCgogIGxvY2FsIGZ1bmN0aW9uIGNhbGxwZnMgKG9wLCBmbXQsIG4pCiAgICBsb2NhbCB4ID0ge1QudGVzdEMoInB1c2hmc3RyaW5nIiAuLiBvcCAuLiAiOyByZXR1cm4gKiIsIGZtdCwgbil9CiAgICAtLSBzdGFjayBoYXMgY29kZSwgJ2ZtdCcsICduJywgYW5kIHJlc3VsdCBmcm9tIG9wZXJhdGlvbgogICAgYXNzZXJ0KCN4ID09IDQpICAtLSBtYWtlIHN1cmUgbm90aGluZyBlbHNlIHdhcyBsZWZ0IGluIHRoZSBzdGFjawogICAgcmV0dXJuIHhbNF0KICBlbmQKCiAgbG9jYWwgZnVuY3Rpb24gdGVzdHBmcyAob3AsIGZtdCwgbikKICAgIGFzc2VydChjYWxscGZzKG9wLCBmbXQsIG4pID09IHN0cmluZy5mb3JtYXQoZm10LCBuKSkKICBlbmQKCiAgdGVzdHBmcygiSSIsICIiLCAwKQogIHRlc3RwZnMoIkkiLCBzdHJpbmcucmVwKCJhIiwgYmxlbiAtIDEpLCAwKQogIHRlc3RwZnMoIkkiLCBzdHJpbmcucmVwKCJhIiwgYmxlbiksIDApCiAgdGVzdHBmcygiSSIsIHN0cmluZy5yZXAoImEiLCBibGVuICsgMSksIDApCgogIGxvY2FsIHN0ciA9IHN0cmluZy5yZXAoImFiIiwgYmxlbikgLi4gIiVkIiAuLiBzdHJpbmcucmVwKCJkIiwgYmxlbiAvIDIpCiAgdGVzdHBmcygiSSIsIHN0ciwgMl4xNCkKICB0ZXN0cGZzKCJJIiwgc3RyLCAtMl4xNSkKCiAgc3RyID0gIiVkIiAuLiBzdHJpbmcucmVwKCJjZCIsIGJsZW4pCiAgdGVzdHBmcygiSSIsIHN0ciwgMl4xNCkKICB0ZXN0cGZzKCJJIiwgc3RyLCAtMl4xNSkKCiAgc3RyID0gc3RyaW5nLnJlcCgiYyIsIGJsZW4gLSAyKSAuLiAiJWQiCiAgdGVzdHBmcygiSSIsIHN0ciwgMl4xNCkKICB0ZXN0cGZzKCJJIiwgc3RyLCAtMl4xNSkKCiAgZm9yIGwgPSAxMiwgMTQgZG8KICAgIGxvY2FsIHN0cjEgPSBzdHJpbmcucmVwKCJhIiwgbCkKICAgIGZvciBpID0gMCwgNTAwLCAxMyBkbwogICAgICBmb3IgaiA9IDAsIDUwMCwgMTMgZG8KICAgICAgICBzdHIgPSBzdHJpbmcucmVwKCJhIiwgaSkgLi4gIiVzIiAuLiBzdHJpbmcucmVwKCJkIiwgaikKICAgICAgICB0ZXN0cGZzKCJTIiwgc3RyLCBzdHIxKQogICAgICAgIHRlc3RwZnMoIlMiLCBzdHIsIHN0cikKICAgICAgZW5kCiAgICBlbmQKICBlbmQKCiAgc3RyID0gImFiYyAlYyBkZWYiCiAgdGVzdHBmcygiSSIsIHN0ciwgc3RyaW5nLmJ5dGUoIkEiKSkKICB0ZXN0cGZzKCJJIiwgc3RyLCAyNTUpCgogIHN0ciA9IHN0cmluZy5yZXAoImEiLCBibGVuIC0gMSkgLi4gIiVwIiAuLiBzdHJpbmcucmVwKCJjZCIsIGJsZW4pCiAgdGVzdHBmcygiUCIsIHN0ciwge30pCgogIHN0ciA9IHN0cmluZy5yZXAoIiUlIiwgMyAqIGJsZW4pIC4uICIlcCIgLi4gc3RyaW5nLnJlcCgiJSUiLCAyICogYmxlbikKICB0ZXN0cGZzKCJQIiwgc3RyLCB7fSkKZW5kCgoKcHJpbnQoJ09LJykKCg==