Skip to contentLy8gPGJsb2NrOmdlbmVyYXRlOjQ+CmZ1bmN0aW9uIGdlbmVyYXRlRGF0YSgpIHsKICBjb25zdCBkYXRhID0gW107CgogIGZvciAobGV0IHggPSAxOyB4IDw9IDMwOyB4KyspIHsKICAgIGZvciAobGV0IHkgPSAxOyB5IDw9IDIwOyB5KyspIHsKICAgICAgZGF0YS5wdXNoKHsKICAgICAgICB4LAogICAgICAgIHksCiAgICAgICAgdjogTWF0aC5yYW5kb20oKSAqIDEwMAogICAgICB9KTsKICAgIH0KICB9CgogIHJldHVybiBkYXRhOwp9Ci8vIDwvYmxvY2s6Z2VuZXJhdGU+CgovLyA8YmxvY2s6ZGF0YToyPgpjb25zdCBkYXRhID0gewogIGRhdGFzZXRzOiBbewogICAgbGFiZWw6ICdNeSBNYXRyaXgnLAogICAgZGF0YTogZ2VuZXJhdGVEYXRhKCksCiAgICBiYWNrZ3JvdW5kQ29sb3Ioe3Jhd30pIHsKICAgICAgY29uc3QgYWxwaGEgPSAoMTAgKyByYXcudikgLyAxMTA7CiAgICAgIHJldHVybiBoZWxwZXJzLmNvbG9yKCdncmVlbicpLmFscGhhKGFscGhhKS5yZ2JTdHJpbmcoKTsKICAgIH0sCiAgICBib3JkZXJDb2xvcih7cmF3fSkgewogICAgICBjb25zdCBhbHBoYSA9ICgxMCArIHJhdy52KSAvIDExMDsKICAgICAgcmV0dXJuIGhlbHBlcnMuY29sb3IoJ2RhcmtncmVlbicpLmFscGhhKGFscGhhKS5yZ2JTdHJpbmcoKTsKICAgIH0sCiAgICBib3JkZXJXaWR0aDogMSwKICAgIHdpZHRoKHtjaGFydH0pIHsKICAgICAgY29uc3QgeCA9IGNoYXJ0LnNjYWxlcy54OwogICAgICByZXR1cm4gTWF0aC5hYnMoeC5nZXRQaXhlbEZvclZhbHVlKDIpIC0geC5nZXRQaXhlbEZvclZhbHVlKDEpKSAtIDE7CiAgICB9LAogICAgaGVpZ2h0KHtjaGFydH0pIHsKICAgICAgY29uc3QgeSA9IGNoYXJ0LnNjYWxlcy55OwogICAgICByZXR1cm4gTWF0aC5hYnMoeS5nZXRQaXhlbEZvclZhbHVlKDIpIC0geS5nZXRQaXhlbEZvclZhbHVlKDEpKSAtIDE7CiAgICB9CiAgfV0KfTsKLy8gPC9ibG9jazpkYXRhPgoKLy8gPGJsb2NrOm9wdGlvbnM6MT4KY29uc3Qgb3B0aW9ucyA9IHsKICBwbHVnaW5zOiB7CiAgICBsZWdlbmQ6IGZhbHNlLAogICAgdG9vbHRpcDogewogICAgICBjYWxsYmFja3M6IHsKICAgICAgICB0aXRsZSgpIHsKICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9LAogICAgICAgIGxhYmVsKGNvbnRleHQpIHsKICAgICAgICAgIGNvbnN0IHYgPSBjb250ZXh0LmRhdGFzZXQuZGF0YVtjb250ZXh0LmRhdGFJbmRleF07CiAgICAgICAgICByZXR1cm4gWyd4OiAnICsgdi54LCAneTogJyArIHYueSwgJ3Y6ICcgKyB2LnYudG9GaXhlZCgyKV07CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgem9vbTogewogICAgICBsaW1pdHM6IHsKICAgICAgICB4OiB7bWluOiAwLjUsIG1heDogMzAuNSwgbWluUmFuZ2U6IDN9LAogICAgICAgIHk6IHttaW46IDAuNSwgbWF4OiAyMC41LCBtaW5SYW5nZTogM30KICAgICAgfSwKICAgICAgcGFuOiB7CiAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICBtb2RlOiAneHknCiAgICAgIH0sCiAgICAgIHpvb206IHsKICAgICAgICB3aGVlbDogewogICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgcGluY2g6IHsKICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICB9LAogICAgICAgIG1vZGU6ICd4eScKICAgICAgfQogICAgfQogIH0sCiAgc2NhbGVzOiB7CiAgICB4OiB7CiAgICAgIGRpc3BsYXk6IGZhbHNlLAogICAgICBtaW46IDAuNSwKICAgICAgbWF4OiAzMC41LAogICAgICB0aWNrczogewogICAgICAgIHN0ZXBTaXplOiAxCiAgICAgIH0sCiAgICAgIGdyaWQ6IHsKICAgICAgICBkaXNwbGF5OiBmYWxzZQogICAgICB9CiAgICB9LAogICAgeTogewogICAgICBkaXNwbGF5OiBmYWxzZSwKICAgICAgbWluOiAwLjUsCiAgICAgIG1heDogMjAuNSwKICAgICAgcmV2ZXJzZTogdHJ1ZSwKICAgICAgdGlja3M6IHsKICAgICAgICBzdGVwU2l6ZTogMQogICAgICB9LAogICAgICBncmlkOiB7CiAgICAgICAgZGlzcGxheTogZmFsc2UKICAgICAgfQogICAgfQogIH0KfTsKLy8gPC9ibG9jazpvcHRpb25zPgoKLy8gPGJsb2NrOmNvbmZpZzowPgpjb25zdCBjb25maWcgPSB7CiAgdHlwZTogJ21hdHJpeCcsCiAgZGF0YTogZGF0YSwKICBvcHRpb25zOiBvcHRpb25zCn07Ci8vIDwvYmxvY2s6Y29uZmlnPgoKY29uc3QgYWN0aW9ucyA9IFsKICB7CiAgICBuYW1lOiAnUmVzZXQgem9vbScsCiAgICBoYW5kbGVyKGNoYXJ0KSB7CiAgICAgIGNoYXJ0LnJlc2V0Wm9vbSgpOwogICAgfQogIH0sCiAgewogICAgbmFtZTogJ1JhbmRvbWl6ZScsCiAgICBoYW5kbGVyKGNoYXJ0KSB7CiAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaChkYXRhc2V0ID0+IHsKICAgICAgICBkYXRhc2V0LmRhdGEuZm9yRWFjaChwb2ludCA9PiB7CiAgICAgICAgICBwb2ludC52ID0gTWF0aC5yYW5kb20oKSAqIDEwMDsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIGNoYXJ0LnVwZGF0ZSgpOwogICAgfQogIH0sCl07Cgptb2R1bGUuZXhwb3J0cyA9IHsKICBhY3Rpb25zLAogIGNvbmZpZywKfTs=