IyEvdXNyL2Jpbi9weXRob24gLXUKIyAtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQppbXBvcnQgc3lzCmltcG9ydCBsaWJ4bWwyCgojIE1lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpCgpjdHh0ID0gTm9uZQoKY2xhc3MgY2FsbGJhY2s6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRkLCBzdGFydGUsIGVuZGUsIGRlbHRhLCBlbmRkKToKICAgICAgICBzZWxmLnN0YXJ0ZCA9IHN0YXJ0ZAogICAgICAgIHNlbGYuc3RhcnRlID0gc3RhcnRlCiAgICAgICAgc2VsZi5lbmRlID0gZW5kZQogICAgICAgIHNlbGYuZW5kZCA9IGVuZGQKICAgICAgICBzZWxmLmRlbHRhID0gZGVsdGEKICAgICAgICBzZWxmLmNvdW50ID0gMAoKICAgIGRlZiBzdGFydERvY3VtZW50KHNlbGYpOgogICAgICAgIGdsb2JhbCBjdHh0CiAgICAgICAgaWYgY3R4dC5ieXRlQ29uc3VtZWQoKSAhPSBzZWxmLnN0YXJ0ZDoKICAgICAgICAgICAgcHJpbnQgImRvY3VtZW50IHN0YXJ0IGF0IHdyb25nIGluZGV4OiAlZCBleHBlY3RpbmcgJWRcbiIgJSAoCiAgICAgICAgICAgICAgICAgIGN0eHQuYnl0ZUNvbnN1bWVkKCksIHNlbGYuc3RhcnRkKQogICAgICAgICAgICBzeXMuZXhpdCgxKQoKICAgIGRlZiBlbmREb2N1bWVudChzZWxmKToKICAgICAgICBnbG9iYWwgY3R4dAogICAgICAgIGV4cGVjdCA9IHNlbGYuZW5kZSArIHNlbGYuZGVsdGEgKiAoc2VsZi5jb3VudCAtIDEpICsgc2VsZi5lbmRkCiAgICAgICAgaWYgY3R4dC5ieXRlQ29uc3VtZWQoKSAhPSBleHBlY3Q6CiAgICAgICAgICAgIHByaW50ICJkb2N1bWVudCBlbmQgYXQgd3JvbmcgaW5kZXg6ICVkIGV4cGVjdGluZyAlZFxuIiAlICgKICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgZXhwZWN0KQogICAgICAgICAgICBzeXMuZXhpdCgxKQoKICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgdGFnLCBhdHRycyk6CiAgICAgICAgZ2xvYmFsIGN0eHQKICAgICAgICBpZiB0YWcgPT0gImJhcjEiOgogICAgICAgICAgICBleHBlY3QgPSBzZWxmLnN0YXJ0ZSArIHNlbGYuZGVsdGEgKiBzZWxmLmNvdW50CiAgICAgICAgICAgIGlmIGN0eHQuYnl0ZUNvbnN1bWVkKCkgIT0gZXhwZWN0OgogICAgICAgICAgICAgICAgcHJpbnQgImVsZW1lbnQgc3RhcnQgYXQgd3JvbmcgaW5kZXg6ICVkIGV4cGVjdGluZyAlZFxuIiAlICgKICAgICAgICAgICAgICAgICAgIGN0eHQuYnl0ZUNvbnN1bWVkKCksIGV4cGVjdCkKICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgICAgIAoKICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIHRhZyk6CiAgICAgICAgZ2xvYmFsIGN0eHQKICAgICAgICBpZiB0YWcgPT0gImJhcjEiOgogICAgICAgICAgICBleHBlY3QgPSBzZWxmLmVuZGUgKyBzZWxmLmRlbHRhICogc2VsZi5jb3VudAogICAgICAgICAgICBpZiBjdHh0LmJ5dGVDb25zdW1lZCgpICE9IGV4cGVjdDoKICAgICAgICAgICAgICAgIHByaW50ICJlbGVtZW50IGVuZCBhdCB3cm9uZyBpbmRleDogJWQgZXhwZWN0aW5nICVkXG4iICUgKAogICAgICAgICAgICAgICAgICAgICAgY3R4dC5ieXRlQ29uc3VtZWQoKSwgZXhwZWN0KQogICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgICAgc2VsZi5jb3VudCA9IHNlbGYuY291bnQgKyAxCgogICAgZGVmIGNoYXJhY3RlcnMoc2VsZiwgZGF0YSk6CiAgICAgICAgcGFzcwoKIwojIEZpcnN0IHJ1biBhIHB1cmUgVVRGLTggdGVzdAojCmhhbmRsZXIgPSBjYWxsYmFjaygwLCAxMywgMjcsIDE5OCwgMTgzKQpjdHh0ID0gbGlieG1sMi5jcmVhdGVQdXNoUGFyc2VyKGhhbmRsZXIsICI8Zm9vPlxuIiwgNiwgInRlc3QueG1sIikKY2h1bmsgPSAiIiIgIDxiYXIxPmNoYXJzMTwvYmFyMT4KICA8YmFyMj5jaGFyczI8L2JhcjI+CiAgPGJhcjM+Y2hhcnMzPC9iYXIzPgogIDxiYXI0PmNoYXJzNDwvYmFyND4KICA8YmFyNT5jaGFyczU8L2JhcjU+CiAgPGJhcjY+Jmx0O3M2PC9iYXI2PgogIDxiYXI3PmNoYXJzNzwvYmFyNz4KICA8YmFyOD4mIzM4Ozg8L2Jhcjg+CiAgPGJhcjk+Y2hhcnM5PC9iYXI5PgoiIiIKaSA9IDAKd2hpbGUgaSA8IDEwMDAwOgogICAgY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAwKQogICAgaSA9IGkgKyAxCmNodW5rID0gIjwvZm9vPiIKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAxKQpjdHh0PU5vbmUKCiMKIyBUaGVuIHJ1biBhIHRlc3QgcmVseWluZyBvbiBJU08tTGF0aW4tMQojCmhhbmRsZXIgPSBjYWxsYmFjayg0MywgNTcsIDcxLCAxOTgsIDE4MykKY2h1bms9IiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8Zm9vPgoiIiIKY3R4dCA9IGxpYnhtbDIuY3JlYXRlUHVzaFBhcnNlcihoYW5kbGVyLCBjaHVuaywgbGVuKGNodW5rKSwgInRlc3QueG1sIikKY2h1bmsgPSAiIiIgIDxiYXIxPmNoYXJzMTwvYmFyMT4KICA8YmFyMj5jaGFyczI8L2JhcjI+CiAgPGJhcjM+Y2hhcnMzPC9iYXIzPgogIDxiYXI0PmNo4HJzNDwvYmFyND4KICA8YmFyNT5jaGFyczU8L2JhcjU+CiAgPGJhcjY+Jmx0O3M2PC9iYXI2PgogIDxiYXI3PmNoYXJzNzwvYmFyNz4KICA8YmFyOD4mIzM4Ozg8L2Jhcjg+CiAgPGJhcjk+dHLocyA5PC9iYXI5PgoiIiIKaSA9IDAKd2hpbGUgaSA8IDEwMDAwOgogICAgY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAwKQogICAgaSA9IGkgKyAxCmNodW5rID0gIjwvZm9vPiIKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAxKQpjdHh0PU5vbmUKCiMgTWVtb3J5IGRlYnVnIHNwZWNpZmljCmxpYnhtbDIuY2xlYW51cFBhcnNlcigpCmlmIGxpYnhtbDIuZGVidWdNZW1vcnkoMSkgPT0gMDoKICAgIHByaW50ICJPSyIKZWxzZToKICAgIHByaW50ICJNZW1vcnkgbGVhayAlZCBieXRlcyIgJSAobGlieG1sMi5kZWJ1Z01lbW9yeSgxKSkKICAgIGxpYnhtbDIuZHVtcE1lbW9yeSgpCg==