\\n
\\u8FD4\\u56DE \\n
\\u7EDF\\u8BA1 \\n
\\n
\\n
\\u6210\\u5C31\\u6392\\u884C\\u699C \\n
\\n ");\n achievementPage.find(\'#specialthanks\').click(function () {\n return _this2.switch(\'index\');\n });\n achievementPage.find(\'#rank\').click(function () {\n return _this2.hint(\'别卷了,没有排行榜\');\n }); // Talent\n\n var talentPage = $("\\n
\\n
\\u5929\\u8D4B\\u62BD\\u5361
\\n
10\\u8FDE\\u62BD\\uFF01 \\n
\\n
\\u8BF7\\u9009\\u62E93\\u4E2A \\n
\\n ");\n\n var createTalent = function createTalent(_ref) {\n var grade = _ref.grade,\n name = _ref.name,\n description = _ref.description;\n return $("
").concat(name, "\\uFF08").concat(description, "\\uFF09 "));\n };\n\n talentPage.find(\'#random\').click(function () {\n talentPage.find(\'#random\').hide();\n var ul = talentPage.find(\'#talents\');\n\n app_classPrivateFieldGet(_this2, _life).talentRandom().forEach(function (talent) {\n var li = createTalent(talent);\n ul.append(li);\n li.click(function () {\n if (li.hasClass(\'selected\')) {\n li.removeClass(\'selected\');\n\n app_classPrivateFieldGet(_this2, _talentSelected).delete(talent);\n\n if (app_classPrivateFieldGet(_this2, _talentSelected).size < 3) {\n talentPage.find(\'#next\').text(\'请选择3个\');\n }\n } else {\n if (app_classPrivateFieldGet(_this2, _talentSelected).size == 3) {\n _this2.hint(\'只能选3个天赋\');\n\n return;\n }\n\n var exclusive = app_classPrivateFieldGet(_this2, _life).exclusive(Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref2) {\n var id = _ref2.id;\n return id;\n }), talent.id);\n\n if (exclusive != null) {\n var _iterator = app_createForOfIteratorHelper(app_classPrivateFieldGet(_this2, _talentSelected)),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = _step.value,\n name = _step$value.name,\n id = _step$value.id;\n\n if (id == exclusive) {\n _this2.hint("\\u4E0E\\u5DF2\\u9009\\u62E9\\u7684\\u5929\\u8D4B\\u3010".concat(name, "\\u3011\\u51B2\\u7A81"));\n\n return;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return;\n }\n\n li.addClass(\'selected\');\n\n app_classPrivateFieldGet(_this2, _talentSelected).add(talent);\n\n if (app_classPrivateFieldGet(_this2, _talentSelected).size == 3) {\n talentPage.find(\'#next\').text(\'开始新人生\');\n }\n }\n });\n });\n\n talentPage.find(\'#next\').show();\n });\n talentPage.find(\'#next\').click(function () {\n if (app_classPrivateFieldGet(_this2, _talentSelected).size != 3) {\n _this2.hint(\'请选择3个天赋\');\n\n return;\n }\n\n talentPage.find(\'#next\').hide();\n\n app_classPrivateFieldSet(_this2, _totalMax, 20 + app_classPrivateFieldGet(_this2, _life).getTalentAllocationAddition(Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref3) {\n var id = _ref3.id;\n return id;\n })));\n\n _this2.switch(\'property\');\n }); // Property\n // hint of extension tobermory.es6-string-html\n\n var propertyPage = $(\n /*html*/\n "\\n
\\n
\\n
\\u8C03\\u6574\\u521D\\u59CB\\u5C5E\\u6027
\\n
\\u53EF\\u7528\\u5C5E\\u6027\\u70B9\\uFF1A0
\\n
\\n
\\n
\\n
\\n \\u968F\\u673A\\u5206\\u914D \\n \\u5F00\\u59CB\\u65B0\\u4EBA\\u751F \\n
\\n
\\n ");\n\n propertyPage.mounted = function () {\n propertyPage.find(\'#talentSelectedView\').append("
\\u5DF2\\u9009\\u5929\\u8D4B " + Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref4) {\n var name = _ref4.name,\n description = _ref4.description;\n return "
".concat(name, "(").concat(description, ") ");\n }).join(\'\'));\n };\n\n var groups = {};\n\n var total = function total() {\n var t = 0;\n\n for (var type in groups) {\n t += groups[type].get();\n }\n\n return t;\n };\n\n var freshTotal = function freshTotal() {\n propertyPage.find(\'#total\').text("\\u53EF\\u7528\\u5C5E\\u6027\\u70B9\\uFF1A".concat(app_classPrivateFieldGet(_this2, _totalMax) - total()));\n };\n\n var getBtnGroups = function getBtnGroups(name, min, max) {\n var group = $("
".concat(name, " "));\n var btnSub = $("
");\n var inputBox = $("
");\n var btnAdd = $("
");\n group.append(btnSub);\n group.append(inputBox);\n group.append(btnAdd);\n\n var limit = function limit(v) {\n v = Number(v) || 0;\n v = Math.round(v);\n return v < min ? min : v > max ? max : v;\n };\n\n var get = function get() {\n return Number(inputBox.val());\n };\n\n var set = function set(v) {\n inputBox.val(limit(v));\n freshTotal();\n };\n\n btnAdd.click(function () {\n if (total() >= app_classPrivateFieldGet(_this2, _totalMax)) {\n _this2.hint(\'没有可分配的点数了\');\n\n return;\n }\n\n set(get() + 1);\n });\n btnSub.click(function () {\n return set(get() - 1);\n });\n inputBox.on(\'input\', function () {\n var t = total();\n var val = get();\n\n if (t > app_classPrivateFieldGet(_this2, _totalMax)) {\n val -= t - app_classPrivateFieldGet(_this2, _totalMax);\n }\n\n val = limit(val);\n\n if (val != inputBox.val()) {\n set(val);\n }\n\n freshTotal();\n });\n return {\n group: group,\n get: get,\n set: set\n };\n };\n\n groups.CHR = getBtnGroups("颜值", 0, 10); // 颜值 charm CHR\n\n groups.INT = getBtnGroups("智力", 0, 10); // 智力 intelligence INT\n\n groups.STR = getBtnGroups("体质", 0, 10); // 体质 strength STR\n\n groups.MNY = getBtnGroups("家境", 0, 10); // 家境 money MNY\n\n var ul = propertyPage.find(\'#propertyAllocation\');\n\n for (var type in groups) {\n ul.append(groups[type].group);\n }\n\n propertyPage.find(\'#random\').click(function () {\n var t = app_classPrivateFieldGet(_this2, _totalMax);\n\n var arr = [10, 10, 10, 10];\n\n while (t > 0) {\n var sub = Math.round(Math.random() * (Math.min(t, 10) - 1)) + 1;\n\n while (true) {\n var select = Math.floor(Math.random() * 4) % 4;\n if (arr[select] - sub < 0) continue;\n arr[select] -= sub;\n t -= sub;\n break;\n }\n }\n\n groups.CHR.set(10 - arr[0]);\n groups.INT.set(10 - arr[1]);\n groups.STR.set(10 - arr[2]);\n groups.MNY.set(10 - arr[3]);\n });\n propertyPage.find(\'#start\').click(function () {\n if (total() < app_classPrivateFieldGet(_this2, _totalMax)) {\n _this2.hint("\\u4F60\\u8FD8\\u6709".concat(app_classPrivateFieldGet(_this2, _totalMax) - total(), "\\u5C5E\\u6027\\u70B9\\u6CA1\\u6709\\u5206\\u914D\\u5B8C"));\n\n return;\n } else if (total() > app_classPrivateFieldGet(_this2, _totalMax)) {\n _this2.hint("\\u4F60\\u591A\\u4F7F\\u7528\\u4E86".concat(total() - app_classPrivateFieldGet(_this2, _totalMax), "\\u5C5E\\u6027\\u70B9"));\n\n return;\n }\n\n app_classPrivateFieldGet(_this2, _life).restart({\n CHR: groups.CHR.get(),\n INT: groups.INT.get(),\n STR: groups.STR.get(),\n MNY: groups.MNY.get(),\n SPR: 5,\n TLT: Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).map(function (_ref5) {\n var id = _ref5.id;\n return id;\n })\n });\n\n _this2.switch(\'trajectory\');\n\n app_classPrivateFieldGet(_this2, _pages).trajectory.born(); // $(document).keydown(function(event){\n // if(event.which == 32 || event.which == 13){\n // $(\'#lifeTrajectory\').click();\n // }\n // })\n\n }); // Trajectory\n\n var trajectoryPage = $("\\n
\\n
\\n
\\n
\\n \\u81EA\\u52A8\\u64AD\\u653E \\n \\u81EA\\u52A8\\u64AD\\u653E2x \\n \\u4EBA\\u751F\\u603B\\u7ED3 \\n \\u4EBA\\u751F\\u56DE\\u653E \\n
\\n
\\n
\\n
\\n
\\n ");\n trajectoryPage.find(\'#lifeTrajectory\').click(function () {\n if (app_classPrivateFieldGet(_this2, _isEnd)) return;\n\n var trajectory = app_classPrivateFieldGet(_this2, _life).next();\n\n var age = trajectory.age,\n content = trajectory.content,\n isEnd = trajectory.isEnd;\n var li = $("
".concat(age, "\\u5C81\\uFF1A ").concat(content.map(function (_ref6) {\n var type = _ref6.type,\n description = _ref6.description,\n grade = _ref6.grade,\n name = _ref6.name,\n postEvent = _ref6.postEvent;\n\n switch (type) {\n case \'TLT\':\n return "\\u5929\\u8D4B\\u3010".concat(name, "\\u3011\\u53D1\\u52A8\\uFF1A").concat(description);\n\n case \'EVT\':\n return description + (postEvent ? " ".concat(postEvent) : \'\');\n }\n }).join(\' \'), " "));\n li.appendTo(\'#lifeTrajectory\');\n $("#lifeTrajectory").scrollTop($("#lifeTrajectory")[0].scrollHeight);\n\n if (isEnd) {\n $(document).unbind("keydown");\n\n app_classPrivateFieldSet(_this2, _isEnd, true);\n\n trajectoryPage.find(\'#summary\').show();\n trajectoryPage.find(\'#auto\').hide();\n trajectoryPage.find(\'#auto2x\').hide(); // trajectoryPage.find(\'#domToImage\').show();\n } else {\n // 如未死亡,更新数值\n // Update properties if not die yet\n var property = app_classPrivateFieldGet(_this2, _life).getLastRecord();\n\n $("#lifeProperty").html("\\n
\\u989C\\u503C ".concat(property.CHR, " \\n
\\u667A\\u529B ").concat(property.INT, " \\n
\\u4F53\\u8D28 ").concat(property.STR, " \\n
\\u5BB6\\u5883 ").concat(property.MNY, " \\n
\\u5FEB\\u4E50 ").concat(property.SPR, " \\n "));\n }\n }); // html2canvas\n\n trajectoryPage.find(\'#domToImage\').click(function () {\n $("#lifeTrajectory").addClass("deleteFixed");\n var ua = navigator.userAgent.toLowerCase();\n domtoimage.toJpeg(document.getElementById(\'lifeTrajectory\')).then(function (dataUrl) {\n var link = document.createElement(\'a\');\n link.download = \'我的人生回放.jpeg\';\n link.href = dataUrl;\n link.click();\n $("#lifeTrajectory").removeClass("deleteFixed"); // 微信内置浏览器,显示图片,需要用户单独保存\n\n if (ua.match(/MicroMessenger/i) == "micromessenger") {\n $(\'#endImage\').attr(\'src\', dataUrl);\n }\n });\n }).hide();\n trajectoryPage.find(\'#summary\').click(function () {\n clearInterval(app_classPrivateFieldGet(_this2, _autoTrajectory));\n\n app_classPrivateFieldSet(_this2, _autoTrajectory, null);\n\n _this2.switch(\'summary\');\n });\n\n var auto = function auto(tick) {\n if (app_classPrivateFieldGet(_this2, _autoTrajectory)) {\n clearInterval(app_classPrivateFieldGet(_this2, _autoTrajectory));\n\n app_classPrivateFieldSet(_this2, _autoTrajectory, null);\n } else {\n if (!_this2.isEnd) trajectoryPage.find(\'#lifeTrajectory\').click();\n\n app_classPrivateFieldSet(_this2, _autoTrajectory, setInterval(function () {\n if (_this2.isEnd) {\n clearInterval(app_classPrivateFieldGet(_this2, _autoTrajectory));\n\n app_classPrivateFieldSet(_this2, _autoTrajectory, null);\n } else {\n trajectoryPage.find(\'#lifeTrajectory\').click();\n }\n }, tick));\n }\n };\n\n trajectoryPage.find(\'#auto\').click(function () {\n return auto(1000);\n });\n trajectoryPage.find(\'#auto2x\').click(function () {\n return auto(500);\n }); // Summary\n\n var summaryPage = $("\\n
\\n
\\u4EBA\\u751F\\u603B\\u7ED3
\\n
\\n \\u989C\\u503C\\uFF1A 9\\u7EA7 \\u7F8E\\u82E5\\u5929\\u4ED9 \\n \\u667A\\u529B\\uFF1A 4\\u7EA7 \\u667A\\u529B\\u4E00\\u822C \\n \\u4F53\\u8D28\\uFF1A 1\\u7EA7 \\u6781\\u5EA6\\u865A\\u5F31 \\n \\u5BB6\\u5883\\uFF1A 6\\u7EA7 \\u5C0F\\u5EB7\\u4E4B\\u5BB6 \\n \\u4EAB\\u5E74\\uFF1A 3\\u5C81 \\u65E9\\u592D \\n \\u5FEB\\u4E50\\uFF1A 3\\u7EA7 \\u4E0D\\u592A\\u5E78\\u798F\\u7684\\u4EBA\\u751F \\n \\n
\\u5929\\u8D4B\\uFF0C\\u4F60\\u53EF\\u4EE5\\u9009\\u4E00\\u4E2A\\uFF0C\\u4E0B\\u8F88\\u5B50\\u8FD8\\u80FD\\u62BD\\u5230
\\n
\\n \\u9ED1\\u5E55\\uFF08\\u9762\\u8BD5\\u4E00\\u5B9A\\u6210\\u529F\\uFF09 \\n \\n
\\u518D\\u6B21\\u91CD\\u5F00\\n
\\n ");\n summaryPage.find(\'#again\').click(function () {\n _this2.times++;\n\n app_classPrivateFieldGet(_this2, _life).talentExtend(app_classPrivateFieldGet(_this2, _selectedExtendTalent));\n\n app_classPrivateFieldSet(_this2, _selectedExtendTalent, null);\n\n app_classPrivateFieldGet(_this2, _talentSelected).clear();\n\n app_classPrivateFieldSet(_this2, _totalMax, 20);\n\n app_classPrivateFieldSet(_this2, _isEnd, false);\n\n _this2.switch(\'index\');\n });\n\n app_classPrivateFieldSet(this, _pages, {\n loading: {\n page: loadingPage,\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'loading\');\n }\n },\n index: {\n page: indexPage,\n btnAchievement: indexPage.find(\'#achievement\'),\n btnRestart: indexPage.find(\'#restart\'),\n hint: indexPage.find(\'.hint\'),\n pressEnter: function pressEnter() {\n app_classPrivateFieldGet(_this2, _pages).index.btnRestart.click();\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'index\');\n\n indexPage.find(\'.hint\').hide();\n var times = _this2.times;\n var achievement = indexPage.find(\'#achievement\');\n var discord = indexPage.find(\'#discord\');\n var specialthanks = indexPage.find(\'#specialthanks\');\n\n if (times > 0) {\n achievement.show();\n discord.show();\n specialthanks.show();\n return;\n }\n\n achievement.hide();\n discord.hide();\n specialthanks.hide();\n }\n },\n specialthanks: {\n page: specialThanksPage,\n clear: function clear() {\n var groups = [specialThanksPage.find(\'#spthx > ul.g1\'), specialThanksPage.find(\'#spthx > ul.g2\')];\n groups.forEach(function (g) {\n return g.empty();\n });\n\n app_classPrivateFieldGet(_this2, _specialthanks).sort(function () {\n return 0.5 - Math.random();\n }).forEach(function (_ref7) {\n var group = _ref7.group,\n name = _ref7.name,\n comment = _ref7.comment,\n color = _ref7.color;\n return groups[--group].append("\\n
\\n ").concat(name, " \\n \\n \\n "));\n });\n }\n },\n achievement: {\n page: achievementPage,\n clear: function clear() {\n var total = achievementPage.find("ul#total");\n var achievements = achievementPage.find("ul#achievements");\n total.empty();\n achievements.empty();\n\n var formatRate = function formatRate(type, value) {\n var rate = getRate(type, value);\n var color = Object.keys(rate)[0];\n\n switch (parseInt(color)) {\n case 0:\n color = \'白色\';\n break;\n\n case 1:\n color = \'蓝色\';\n break;\n\n case 2:\n color = \'紫色\';\n break;\n\n case 3:\n color = \'橙色\';\n break;\n\n default:\n break;\n }\n\n var r = Object.values(rate)[0];\n\n switch (parseInt(r)) {\n case 1:\n r = \'不变\';\n break;\n\n case 2:\n r = \'翻倍\';\n break;\n\n case 3:\n r = \'三倍\';\n break;\n\n case 4:\n r = \'四倍\';\n break;\n\n case 5:\n r = \'五倍\';\n break;\n\n case 6:\n r = \'六倍\';\n break;\n\n default:\n break;\n }\n\n return "\\u62BD\\u5230".concat(color, "\\u6982\\u7387").concat(r);\n };\n\n var _classPrivateFieldGet3 = app_classPrivateFieldGet(_this2, _life).getTotal(),\n times = _classPrivateFieldGet3.times,\n achievement = _classPrivateFieldGet3.achievement,\n talentRate = _classPrivateFieldGet3.talentRate,\n eventRate = _classPrivateFieldGet3.eventRate;\n\n total.append("\\n
\\u5DF2\\u91CD\\u5F00").concat(times, "\\u6B21 ").concat(formatRate(\'times\', times), "\\n
\\u6210\\u5C31\\u8FBE\\u6210").concat(achievement, "\\u4E2A ").concat(formatRate(\'achievement\', achievement), "\\n
\\u4E8B\\u4EF6\\u6536\\u96C6\\u7387 ").concat(Math.floor(eventRate * 100), "%\\n
\\u5929\\u8D4B\\u6536\\u96C6\\u7387 ").concat(Math.floor(talentRate * 100), "%\\n "));\n\n var achievementsData = app_classPrivateFieldGet(_this2, _life).getAchievements();\n\n achievementsData.forEach(function (_ref8) {\n var name = _ref8.name,\n description = _ref8.description,\n hide = _ref8.hide,\n grade = _ref8.grade,\n isAchieved = _ref8.isAchieved;\n if (hide && !isAchieved) name = description = \'???\';\n achievements.append("
").concat(name, " ").concat(description, ""));\n });\n }\n },\n talent: {\n page: talentPage,\n talentList: talentPage.find(\'#talents\'),\n btnRandom: talentPage.find(\'#random\'),\n btnNext: talentPage.find(\'#next\'),\n pressEnter: function pressEnter() {\n var talentList = app_classPrivateFieldGet(_this2, _pages).talent.talentList;\n\n var btnRandom = app_classPrivateFieldGet(_this2, _pages).talent.btnRandom;\n\n var btnNext = app_classPrivateFieldGet(_this2, _pages).talent.btnNext;\n\n if (talentList.children().length) {\n btnNext.click();\n } else {\n btnRandom.click();\n }\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'talent\');\n\n talentPage.find(\'ul.selectlist\').empty();\n talentPage.find(\'#random\').show();\n\n app_classPrivateFieldSet(_this2, _totalMax, 20);\n }\n },\n property: {\n page: propertyPage,\n btnStart: propertyPage.find(\'#start\'),\n pressEnter: function pressEnter() {\n app_classPrivateFieldGet(_this2, _pages).property.btnStart.click();\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'property\');\n\n freshTotal();\n propertyPage.find(\'#talentSelectedView\').empty();\n }\n },\n trajectory: {\n page: trajectoryPage,\n lifeTrajectory: trajectoryPage.find(\'#lifeTrajectory\'),\n pressEnter: function pressEnter() {\n app_classPrivateFieldGet(_this2, _pages).trajectory.lifeTrajectory.click();\n },\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'trajectory\');\n\n trajectoryPage.find(\'#lifeTrajectory\').empty();\n trajectoryPage.find(\'#summary\').hide();\n trajectoryPage.find(\'#auto\').show();\n trajectoryPage.find(\'#auto2x\').show();\n\n app_classPrivateFieldSet(_this2, _isEnd, false);\n },\n born: function born() {\n trajectoryPage.find(\'#lifeTrajectory\').trigger("click");\n }\n },\n summary: {\n page: summaryPage,\n clear: function clear() {\n app_classPrivateFieldSet(_this2, _currentPage, \'summary\');\n\n var judge = summaryPage.find(\'#judge\');\n var talents = summaryPage.find(\'#talents\');\n judge.empty();\n talents.empty();\n\n var lastExtendTalent = app_classPrivateFieldGet(_this2, _life).getLastExtendTalent();\n\n Array.from(app_classPrivateFieldGet(_this2, _talentSelected)).sort(function (_ref9, _ref10) {\n var a = _ref9.id,\n ag = _ref9.grade;\n var b = _ref10.id,\n bg = _ref10.grade;\n if (a == lastExtendTalent) return -1;\n if (b == lastExtendTalent) return 1;\n return bg - ag;\n }).forEach(function (talent, i) {\n var li = createTalent(talent);\n talents.append(li);\n li.click(function () {\n if (li.hasClass(\'selected\')) {\n app_classPrivateFieldSet(_this2, _selectedExtendTalent, null);\n\n li.removeClass(\'selected\');\n } else if (app_classPrivateFieldGet(_this2, _selectedExtendTalent) != null) {\n _this2.hint(\'只能继承一个天赋\');\n\n return;\n } else {\n app_classPrivateFieldSet(_this2, _selectedExtendTalent, talent.id);\n\n li.addClass(\'selected\');\n }\n });\n if (!i) li.click();\n });\n\n var summaryData = app_classPrivateFieldGet(_this2, _life).getSummary();\n\n var format = function format(discription, type) {\n var value = summaryData[type];\n\n var _summary = summary(type, value),\n judge = _summary.judge,\n grade = _summary.grade;\n\n return "
").concat(discription, "\\uFF1A ").concat(value, " ").concat(judge, " ");\n };\n\n judge.append("\\n ".concat(format(\'颜值\', \'CHR\'), "\\n ").concat(format(\'智力\', \'INT\'), "\\n ").concat(format(\'体质\', \'STR\'), "\\n ").concat(format(\'家境\', \'MNY\'), "\\n ").concat(format(\'快乐\', \'SPR\'), "\\n ").concat(format(\'享年\', \'AGE\'), "\\n ").concat(format(\'总评\', \'SUM\'), "\\n "));\n }\n }\n });\n\n $$on(\'achievement\', function (_ref11) {\n var name = _ref11.name;\n\n _this2.hint("\\u89E3\\u9501\\u6210\\u5C31\\u3010".concat(name, "\\u3011"), \'success\');\n });\n }\n }, {\n key: "switch",\n value: function _switch(page) {\n var p = app_classPrivateFieldGet(this, _pages)[page];\n\n if (!p) return;\n $(\'#main\').detach();\n p.clear();\n p.page.appendTo(\'body\');\n\n if (typeof p.page.mounted === \'function\') {\n p.page.mounted();\n }\n }\n }, {\n key: "hint",\n value: function hint(message) {\n var _this3 = this;\n\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'info\';\n\n if (app_classPrivateFieldGet(this, _hintTimeout)) {\n clearTimeout(app_classPrivateFieldGet(this, _hintTimeout));\n\n app_classPrivateFieldSet(this, _hintTimeout, null);\n }\n\n hideBanners();\n requestAnimationFrame(function () {\n var banner = $(".banner.".concat(type));\n banner.addClass(\'visible\');\n banner.find(\'.banner-message\').text(message);\n\n if (type != \'error\') {\n app_classPrivateFieldSet(_this3, _hintTimeout, setTimeout(hideBanners, 3000));\n }\n });\n }\n }, {\n key: "setTheme",\n value: function setTheme(theme) {\n var themeLink = $(document).find(\'#themeLink\');\n\n if (theme == \'light\') {\n themeLink.attr(\'href\', \'light.css\');\n } else {\n themeLink.attr(\'href\', \'dark.css\');\n }\n }\n }, {\n key: "times",\n get: function get() {\n var _classPrivateFieldGet4;\n\n return ((_classPrivateFieldGet4 = app_classPrivateFieldGet(this, _life)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.times) || 0;\n },\n set: function set(v) {\n if (app_classPrivateFieldGet(this, _life)) app_classPrivateFieldGet(this, _life).times = v;\n }\n }]);\n\n return App;\n}();\n\n/* harmony default export */ const app = (App);\n;// CONCATENATED MODULE: ./src/index.js\n\n\nfunction src_asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction src_asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { src_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { src_asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\n\n\n\n\n\n\n\n\n\n\nglobalThis.$$eventMap = new Map();\n\nglobalThis.$$event = function (tag, data) {\n var listener = $$eventMap.get(tag);\n if (listener) listener.forEach(function (fn) {\n return fn(data);\n });\n};\n\nglobalThis.$$on = function (tag, fn) {\n var listener = $$eventMap.get(tag);\n\n if (!listener) {\n listener = new Set();\n $$eventMap.set(tag, listener);\n }\n\n listener.add(fn);\n};\n\nglobalThis.$$off = function (tag, fn) {\n var listener = $$eventMap.get(tag);\n if (listener) listener.delete(fn);\n};\n\nglobalThis.json = /*#__PURE__*/function () {\n var _ref = src_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(fileName) {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return fetch("../data/".concat(fileName, ".json"));\n\n case 2:\n _context.next = 4;\n return _context.sent.json();\n\n case 4:\n return _context.abrupt("return", _context.sent);\n\n case 5:\n case "end":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n}(); // Pssst, I\'ve created a github package - https://github.com/brookesb91/dismissible\n\n\nglobalThis.hideBanners = function (e) {\n document.querySelectorAll(".banner.visible").forEach(function (b) {\n return b.classList.remove("visible");\n });\n};\n\nvar src_app = new app();\nsrc_app.initial();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc4NS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUE1RUE7O0FBZ0ZBO0FBQ0E7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7OztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQWZBO0FBaUJBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQWpCQTtBQW1CQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7O0FBQ0E7QUFBQTtBQUFBOztBQUNBOztBQUNBO0FBQUE7QUFOQTtBQVFBOztBQUVBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQURBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUVBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVCQTs7Ozs7O0FBRUE7QUFDQTtBQUFBOztBQUFBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBOztBQXZDQTs7QUFGQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0FBZ0RBO0FBQUE7O0FBRUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQ0E7O0FBNEJBO0FBQ0E7QUFEQTtBQUVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFBQTtBQXJEQTtBQXVEQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTs7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBOztBQUNBO0FBQ0E7QUFBQTs7QUFDQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBOztBQUNBO0FBQUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUFBOztBQUNBO0FBQUE7QUFoQkE7QUFrQkE7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUFBO0FBbkJBO0FBcUJBOzs7QUFFQTtBQUFBOztBQUNBO0FBUUE7OztBQUVBO0FBQ0E7QUFBQTtBQUFBOztBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUdBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUlBOztBQUNBO0FBQUE7QUExQkE7QUE0QkE7OztBQUVBO0FBQ0E7QUFDQTtBQURBO0FBRUE7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFQQTs7QUFTQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBSUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBVkE7O0FBWUE7QUFDQTtBQVVBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBSUE7Ozs7OztBQUdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3VkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQUE7QUF0QkE7QUF3QkE7O0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUFBO0FBUkE7QUFVQTs7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUFBOztBQUNBO0FBQUE7O0FBQ0E7QUFBQTs7QUFDQTtBQUFBOztBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQURBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBR0E7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFHQTtBQUNBOztBQUNBOztBQUVBO0FBQUE7QUE1QkE7QUE4QkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUhBO0FBQ0E7Ozs7QUFFQTtBQUNBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztBQUlBO0FBQUE7O0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7Ozs7O0FBSUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkRBO0FBQ0E7QUFDQTs7OztBQUVBO0FBQ0E7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0FBSUE7QUFBQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQUE7O0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUNBO0FBQUE7O0FBQ0E7O0FBRkE7QUFBQTs7QUFBQTtBQUdBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBSEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBUEE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFRQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFEQTs7QUFHQTtBQUNBO0FBREE7O0FBR0E7QUFDQTtBQURBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7QUFEQTtBQUFBOztBQUFBO0FBRUE7QUFBQTtBQUNBO0FBREE7QUFGQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUlBO0FBQ0E7O0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTs7Ozs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuSEE7QUFDQTs7OztBQUVBO0FBQ0E7QUFBQTs7QUFBQTtBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUpBOztBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBWUE7QUFBQTs7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBSEE7QUFIQTtBQVFBOzs7QUFFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUFBOztBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQURBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFHQTtBQUNBOzs7QUFFQTtBQUFBOztBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBOzs7OztBQVFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQU1BO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFWQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztBQWFBO0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7QUFJQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTs7QUFMQTtBQUFBOztBQUFBO0FBTUE7QUFBQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTs7QUFDQTtBQUNBO0FBbkJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBb0JBO0FBQ0E7OztBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBRUE7O0FBSEE7QUFBQTs7QUFBQTtBQUlBO0FBQUE7QUFBQTs7QUFDQTtBQURBO0FBSkE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFPQTs7QUFQQTtBQUFBOztBQUFBO0FBUUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFEQTtBQVJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBV0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFDQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7QUFFQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFDQTtBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7OztBQUVBO0FBQUE7O0FBQUE7QUFBQTtBQUNBO0FBQUE7O0FBQ0E7O0FBQ0E7QUFJQTs7Ozs7O0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hOQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTs7Ozs7QUFhQTtBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBR0E7O0FBSUE7O0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQW5CQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztBQXNCQTtBQUFBOztBQUVBO0FBQ0E7O0FBVUE7O0FBZUE7QUFFQTtBQUVBO0FBQUE7QUFFQTtBQUVBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFFQTtBQVlBO0FBRUE7QUFBQTtBQUVBO0FBVUE7QUFFQTtBQUFBO0FBRUE7QUFFQTtBQUFBOztBQUVBOztBQVNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUdBO0FBQ0E7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFBQTtBQUFBOztBQUdBO0FBQUE7QUFBQTs7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFPQTtBQUNBOztBQUNBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFDQTtBQUdBOztBQUNBO0FBQUE7QUFBQTs7QUFjQTtBQUNBO0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFHQTs7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFEQTs7QUFFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUdBOztBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBTkE7O0FBUUE7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTs7QUFHQTtBQWdCQTtBQUdBOztBQUNBOztBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFHQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFPQTtBQUNBOztBQUVBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFHQTs7QUFDQTs7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFBQTs7QUFHQTtBQW1CQTtBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQTNCQTtBQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQUE7QUFBQTs7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQTtBQWhCQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUxBOztBQU9BOztBQUNBO0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQVBBOztBQVNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFPQTs7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQWxEQTtBQW9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQXBCQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFHQTtBQVpBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOztBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQUFBOztBQUNBO0FBQ0E7O0FBRUE7QUFTQTtBQXJEQTtBQWhLQTs7QUF5TkE7QUFBQTs7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQUE7O0FBQ0E7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7O0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTs7Ozs7O0FBSUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdnZCQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTs7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2Z1bmN0aW9ucy9zdW1tYXJ5LmpzPzRkYWUiLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2Z1bmN0aW9ucy9hZGRpdGlvbi5qcz84MDNkIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9mdW5jdGlvbnMvdXRpbC5qcz9hZWRjIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9wcm9wZXJ0eS5qcz8yOWE2Iiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9mdW5jdGlvbnMvY29uZGl0aW9uLmpzPzZkMDgiLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2V2ZW50LmpzPzQwMmEiLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL3RhbGVudC5qcz9jNTZmIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9hY2hpZXZlbWVudC5qcz9lNDIyIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9saWZlLmpzPzkxMDciLCJ3ZWJwYWNrOi8vbGlmZV9yZXN0YXJ0Ly4vc3JjL2FwcC5qcz8xMTEyIiwid2VicGFjazovL2xpZmVfcmVzdGFydC8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGRhdGEgPSB7XG4gICAgXCJDSFJcIjogW1xuICAgICAgICB7XCJqdWRnZVwiOiBcIuWcsOeLsVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjIsIFwianVkZ2VcIjogXCLkuI3kvbNcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NCwgXCJqdWRnZVwiOiBcIuaZrumAmlwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo3LCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjksIFwianVkZ2VcIjogXCLnvZXop4FcIiwgXCJncmFkZVwiOiAyfSxcbiAgICAgICAge1wibWluXCI6MTEsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICBdLFxuICAgIFwiTU5ZXCI6IFtcbiAgICAgICAge1wianVkZ2VcIjogXCLlnLDni7FcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6MSwgXCJqdWRnZVwiOiBcIuaKmOejqFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoyLCBcImp1ZGdlXCI6IFwi5LiN5L2zXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjQsIFwianVkZ2VcIjogXCLmma7pgJpcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NywgXCJqdWRnZVwiOiBcIuS8mOengFwiLCBcImdyYWRlXCI6IDF9LFxuICAgICAgICB7XCJtaW5cIjo5LCBcImp1ZGdlXCI6IFwi572V6KeBXCIsIFwiZ3JhZGVcIjogMn0sXG4gICAgICAgIHtcIm1pblwiOjExLCBcImp1ZGdlXCI6IFwi6YCG5aSpXCIsIFwiZ3JhZGVcIjogM30sXG4gICAgXSxcbiAgICBcIlNQUlwiOiBbXG4gICAgICAgIHtcImp1ZGdlXCI6IFwi5Zyw54uxXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjEsIFwianVkZ2VcIjogXCLmipjno6hcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6MiwgXCJqdWRnZVwiOiBcIuS4jeW5uFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo0LCBcImp1ZGdlXCI6IFwi5pmu6YCaXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjcsIFwianVkZ2VcIjogXCLlubjnpo9cIiwgXCJncmFkZVwiOiAxfSxcbiAgICAgICAge1wibWluXCI6OSwgXCJqdWRnZVwiOiBcIuaegeS5kFwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjoxMSwgXCJqdWRnZVwiOiBcIuWkqeWRvVwiLCBcImdyYWRlXCI6IDN9LFxuICAgIF0sXG4gICAgXCJJTlRcIjogW1xuICAgICAgICB7XCJqdWRnZVwiOiBcIuWcsOeLsVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjIsIFwianVkZ2VcIjogXCLkuI3kvbNcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NCwgXCJqdWRnZVwiOiBcIuaZrumAmlwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo3LCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjksIFwianVkZ2VcIjogXCLnvZXop4FcIiwgXCJncmFkZVwiOiAyfSxcbiAgICAgICAge1wibWluXCI6MTEsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MjEsIFwianVkZ2VcIjogXCLor4bmtbdcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MTMxLCBcImp1ZGdlXCI6IFwi5YWD56WeXCIsIFwiZ3JhZGVcIjogM30sXG4gICAgICAgIHtcIm1pblwiOjUwMSwgXCJqdWRnZVwiOiBcIuS7memtglwiLCBcImdyYWRlXCI6IDN9LFxuICAgIF0sXG4gICAgXCJTVFJcIjogW1xuICAgICAgICB7XCJqdWRnZVwiOiBcIuWcsOeLsVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjIsIFwianVkZ2VcIjogXCLkuI3kvbNcIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6NCwgXCJqdWRnZVwiOiBcIuaZrumAmlwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo3LCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjksIFwianVkZ2VcIjogXCLnvZXop4FcIiwgXCJncmFkZVwiOiAyfSxcbiAgICAgICAge1wibWluXCI6MTEsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MjEsIFwianVkZ2VcIjogXCLlh53msJRcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MTAxLCBcImp1ZGdlXCI6IFwi562R5Z+6XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgICAgIHtcIm1pblwiOjQwMSwgXCJqdWRnZVwiOiBcIumHkeS4uVwiLCBcImdyYWRlXCI6IDN9LFxuICAgICAgICB7XCJtaW5cIjoxMDAxLCBcImp1ZGdlXCI6IFwi5YWD5am0XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgICAgIHtcIm1pblwiOjIwMDEsIFwianVkZ2VcIjogXCLku5nkvZNcIiwgXCJncmFkZVwiOiAzfSxcbiAgICBdLFxuICAgIFwiQUdFXCI6IFtcbiAgICAgICAge1wianVkZ2VcIjogXCLog47mrbvohbnkuK1cIiwgXCJncmFkZVwiOiAwfSxcbiAgICAgICAge1wibWluXCI6MSwgXCJqdWRnZVwiOiBcIuaXqeWkrVwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxMCwgXCJqdWRnZVwiOiBcIuWwkeW5tFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjoxOCwgXCJqdWRnZVwiOiBcIuebm+W5tFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo0MCwgXCJqdWRnZVwiOiBcIuS4reW5tFwiLCBcImdyYWRlXCI6IDB9LFxuICAgICAgICB7XCJtaW5cIjo2MCwgXCJqdWRnZVwiOiBcIuiKseeUslwiLCBcImdyYWRlXCI6IDF9LFxuICAgICAgICB7XCJtaW5cIjo3MCwgXCJqdWRnZVwiOiBcIuWPpOeogFwiLCBcImdyYWRlXCI6IDF9LFxuICAgICAgICB7XCJtaW5cIjo4MCwgXCJqdWRnZVwiOiBcIuadluacnVwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjo5MCwgXCJqdWRnZVwiOiBcIuWNl+WxsVwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjo5NSwgXCJqdWRnZVwiOiBcIuS4jeiAgVwiLCBcImdyYWRlXCI6IDN9LFxuICAgICAgICB7XCJtaW5cIjoxMDAsIFwianVkZ2VcIjogXCLkv67ku5lcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6NTAwLCBcImp1ZGdlXCI6IFwi5LuZ5a+/XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgXSxcbiAgICBcIlNVTVwiOiBbXG4gICAgICAgIHtcImp1ZGdlXCI6IFwi5Zyw54uxXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjQxLCBcImp1ZGdlXCI6IFwi5oqY56OoXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjUwLCBcImp1ZGdlXCI6IFwi5LiN5L2zXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjYwLCBcImp1ZGdlXCI6IFwi5pmu6YCaXCIsIFwiZ3JhZGVcIjogMH0sXG4gICAgICAgIHtcIm1pblwiOjgwLCBcImp1ZGdlXCI6IFwi5LyY56eAXCIsIFwiZ3JhZGVcIjogMX0sXG4gICAgICAgIHtcIm1pblwiOjEwMCwgXCJqdWRnZVwiOiBcIue9leingVwiLCBcImdyYWRlXCI6IDJ9LFxuICAgICAgICB7XCJtaW5cIjoxMTAsIFwianVkZ2VcIjogXCLpgIblpKlcIiwgXCJncmFkZVwiOiAzfSxcbiAgICAgICAge1wibWluXCI6MTIwLCBcImp1ZGdlXCI6IFwi5Lyg6K+0XCIsIFwiZ3JhZGVcIjogM30sXG4gICAgXVxufVxuXG5mdW5jdGlvbiBzdW1tYXJ5KHR5cGUsIHZhbHVlKSB7XG4gICAgbGV0IGxlbmd0aCA9IGRhdGFbdHlwZV0ubGVuZ3RoO1xuICAgIHdoaWxlKGxlbmd0aC0tKSB7XG4gICAgICAgIGNvbnN0IHttaW4sIGp1ZGdlLCBncmFkZX0gPSBkYXRhW3R5cGVdW2xlbmd0aF07XG4gICAgICAgIGlmKG1pbj09dm9pZCAwIHx8IHZhbHVlID49IG1pbikgcmV0dXJuIHtqdWRnZSwgZ3JhZGV9O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgc3VtbWFyeSB9OyIsImV4cG9ydCBmdW5jdGlvbiBnZXRSYXRlKHR5cGUsIHZhbHVlKSB7XHJcbiAgICBzd2l0Y2godHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3RpbWVzJzpcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMTAwKSByZXR1cm4gezI6Nn07XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDcwKSByZXR1cm4gezI6NX07XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDUwKSByZXR1cm4gezI6NH07XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDMwKSByZXR1cm4gezI6M307XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDEwKSByZXR1cm4gezI6Mn07XHJcbiAgICAgICAgICAgIHJldHVybiB7MjogMX07XHJcbiAgICAgICAgY2FzZSAnYWNoaWV2ZW1lbnQnOlxyXG4gICAgICAgICAgICBpZih2YWx1ZSA+PSAxMDApIHJldHVybiB7Mzo2fTtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gNzApIHJldHVybiB7Mzo1fTtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gNTApIHJldHVybiB7Mzo0fTtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMzApIHJldHVybiB7MzozfTtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMTApIHJldHVybiB7MzoyfTtcclxuICAgICAgICAgICAgcmV0dXJuIHszOjF9O1xyXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYWRlKHR5cGUsIHZhbHVlKSB7XHJcbiAgICBzd2l0Y2godHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3RpbWVzJzpcclxuICAgICAgICBjYXNlICdhY2hpZXZlbWVudCc6XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDEwMCkgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID49IDUwKSByZXR1cm4gMjtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMTApIHJldHVybiAxO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICBjYXNlICd0YWxlbnRSYXRlJzpcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMC45KSByZXR1cm4gMztcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMC42KSByZXR1cm4gMjtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMC4zKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgY2FzZSAnZXZlbnRSYXRlJzpcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMC42KSByZXR1cm4gMztcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMC40KSByZXR1cm4gMjtcclxuICAgICAgICAgICAgaWYodmFsdWUgPj0gMC4yKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIDA7XHJcbiAgICB9XHJcbn0iLCJmdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICAgIHN3aXRjaCh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKHY9PmNsb25lKHYpKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHt9O1xuICAgICAgICAgICAgZm9yKGNvbnN0IGtleSBpbiB2YWx1ZSkgbmV3T2JqW2tleV0gPSBjbG9uZSh2YWx1ZVtrZXldKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1heCguLi5hcnIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uYXJyLmZsYXQoKSk7XG59XG5cbmZ1bmN0aW9uIG1pbiguLi5hcnIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4oLi4uYXJyLmZsYXQoKSk7XG59XG5cbmZ1bmN0aW9uIHN1bSguLi5hcnIpIHtcbiAgICBsZXQgcyA9IDA7XG4gICAgYXJyLmZsYXQoKS5mb3JFYWNoKHY9PnMrPXYpO1xuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBhdmVyYWdlKC4uLmFycikge1xuICAgIGNvbnN0IHMgPSBzdW0oLi4uYXJyKTtcbiAgICByZXR1cm4gcyAvIGFyci5mbGF0KCkubGVuZ3RoO1xufVxuXG5leHBvcnQgeyBjbG9uZSwgbWF4LCBtaW4sIHN1bSwgYXZlcmFnZSB9OyIsImltcG9ydCB7IG1heCwgbWluLCBzdW0sIGNsb25lIH0gZnJvbSAnLi9mdW5jdGlvbnMvdXRpbC5qcyc7XHJcblxyXG5jbGFzcyBQcm9wZXJ0eSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gICAgVFlQRVMgPSB7XHJcbiAgICAgICAgLy8g5pys5bGAXHJcbiAgICAgICAgQUdFOiBcIkFHRVwiLCAvLyDlubTpvoQgYWdlIEFHRVxyXG4gICAgICAgIENIUjogXCJDSFJcIiwgLy8g6aKc5YC8IGNoYXJtIENIUlxyXG4gICAgICAgIElOVDogXCJJTlRcIiwgLy8g5pm65YqbIGludGVsbGlnZW5jZSBJTlRcclxuICAgICAgICBTVFI6IFwiU1RSXCIsIC8vIOS9k+i0qCBzdHJlbmd0aCBTVFJcclxuICAgICAgICBNTlk6IFwiTU5ZXCIsIC8vIOWutuWigyBtb25leSBNTllcclxuICAgICAgICBTUFI6IFwiU1BSXCIsIC8vIOW/q+S5kCBzcGlyaXQgU1BSXHJcbiAgICAgICAgTElGOiBcIkxJRlwiLCAvLyDnlJ/lkb0gbGlmZSBMSUZFXHJcbiAgICAgICAgVExUOiBcIlRMVFwiLCAvLyDlpKnotYsgdGFsZW50IFRMVFxyXG4gICAgICAgIEVWVDogXCJFVlRcIiwgLy8g5LqL5Lu2IGV2ZW50IEVWVFxyXG4gICAgICAgIFRNUzogXCJUTVNcIiwgLy8g5qyh5pWwIHRpbWVzIFRNU1xyXG5cclxuICAgICAgICAvLyBBdXRvIGNhbGNcclxuICAgICAgICBMQUdFOiBcIkxBR0VcIiwgLy8g5pyA5L2O5bm06b6EIExvdyBBZ2VcclxuICAgICAgICBIQUdFOiBcIkhBR0VcIiwgLy8g5pyA6auY5bm06b6EIEhpZ2ggQWdlXHJcbiAgICAgICAgTENIUjogXCJMQ0hSXCIsIC8vIOacgOS9juminOWAvCBMb3cgQ2hhcm1cclxuICAgICAgICBIQ0hSOiBcIkhDSFJcIiwgLy8g5pyA6auY6aKc5YC8IEhpZ2ggQ2hhcm1cclxuICAgICAgICBMSU5UOiBcIkxJTlRcIiwgLy8g5pyA5L2O5pm65YqbIExvdyBJbnRlbGxpZ2VuY2VcclxuICAgICAgICBISU5UOiBcIkhJTlRcIiwgLy8g5pyA6auY5pm65YqbIEhpZ2ggSW50ZWxsaWdlbmNlXHJcbiAgICAgICAgTFNUUjogXCJMU1RSXCIsIC8vIOacgOS9juS9k+i0qCBMb3cgU3RyZW5ndGhcclxuICAgICAgICBIU1RSOiBcIkhTVFJcIiwgLy8g5pyA6auY5L2T6LSoIEhpZ2ggU3RyZW5ndGhcclxuICAgICAgICBMTU5ZOiBcIkxNTllcIiwgLy8g5pyA5L2O5a625aKDIExvdyBNb25leVxyXG4gICAgICAgIEhNTlk6IFwiSE1OWVwiLCAvLyDmnIDpq5jlrrblooMgSGlnaCBNb25leVxyXG4gICAgICAgIExTUFI6IFwiTFNQUlwiLCAvLyDmnIDkvY7lv6vkuZAgTG93IFNwaXJpdFxyXG4gICAgICAgIEhTUFI6IFwiSFNQUlwiLCAvLyDmnIDpq5jlv6vkuZAgSGlnaCBTcGlyaXRcclxuXHJcbiAgICAgICAgU1VNOiBcIlNVTVwiLCAvLyDmgLvor4Qgc3VtbWFyeSBTVU1cclxuXHJcbiAgICAgICAgRVhUOiBcIkVYVFwiLCAvLyDnu6fmib/lpKnotYtcclxuXHJcbiAgICAgICAgLy8g5oC76K6hXHJcbiAgICAgICAgLy8gQWNoaWV2ZW1lbnQgVG90YWxcclxuICAgICAgICBBVExUOiBcIkFUTFRcIiwgLy8g5oul5pyJ6L+H55qE5aSp6LWLIEFjaGlldmUgVGFsZW50XHJcbiAgICAgICAgQUVWVDogXCJBRVZUXCIsIC8vIOinpuWPkei/h+eahOS6i+S7tiBBY2hpZXZlIEV2ZW50XHJcbiAgICAgICAgQUNIVjogXCJBQ0hWXCIsIC8vIOi+vuaIkOeahOaIkOWwsSBBY2hpZXZlbWVudFxyXG5cclxuICAgICAgICBDVExUOiBcIlJUTFRcIiwgLy8g5aSp6LWL6YCJ5oup5pWwIENvdW50IFRhbGVudFxyXG4gICAgICAgIENFVlQ6IFwiUkVWVFwiLCAvLyDkuovku7bmlLbpm4bmlbAgQ291bnQgRXZlbnRcclxuICAgICAgICBDQUNIVjogXCJDQUNIVlwiLCAvLyDmiJDlsLHovr7miJDmlbAgQ291bnQgQWNoaWV2ZW1lbnRcclxuXHJcbiAgICB9O1xyXG5cclxuICAgICNhZ2VEYXRhO1xyXG4gICAgI2RhdGEgPSB7fTtcclxuXHJcbiAgICBpbml0aWFsKHthZ2V9KSB7XHJcblxyXG4gICAgICAgIHRoaXMuI2FnZURhdGEgPSBhZ2U7XHJcbiAgICAgICAgZm9yKGNvbnN0IGEgaW4gYWdlKSB7XHJcbiAgICAgICAgICAgIGxldCB7IGV2ZW50LCB0YWxlbnQgfSA9IGFnZVthXTtcclxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZXZlbnQpKVxyXG4gICAgICAgICAgICAgICAgZXZlbnQgPSBldmVudD8uc3BsaXQoJywnKSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50ID0gZXZlbnQubWFwKHY9PntcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYCR7dn1gLnNwbGl0KCcqJykubWFwKG49Pk51bWJlcihuKSk7XHJcbiAgICAgICAgICAgICAgICBpZih2YWx1ZS5sZW5ndGg9PTEpIHZhbHVlLnB1c2goMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkodGFsZW50KSlcclxuICAgICAgICAgICAgICAgIHRhbGVudCA9IHRhbGVudD8uc3BsaXQoJywnKSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIHRhbGVudCA9IHRhbGVudC5tYXAodj0+TnVtYmVyKHYpKTtcclxuXHJcbiAgICAgICAgICAgIGFnZVthXSA9IHsgZXZlbnQsIHRhbGVudCB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXN0YXJ0KGRhdGEpIHtcclxuICAgICAgICB0aGlzLiNkYXRhID0ge1xyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5BR0VdOiAtMSxcclxuXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkNIUl06IDAsXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLklOVF06IDAsXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLlNUUl06IDAsXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLk1OWV06IDAsXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLlNQUl06IDAsXHJcblxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5MSUZdOiAxLFxyXG5cclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuVExUXTogW10sXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkVWVF06IFtdLFxyXG5cclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuTEFHRV06IEluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5MQ0hSXTogSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkxJTlRdOiBJbmZpbml0eSxcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuTFNUUl06IEluZmluaXR5LFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5MU1BSXTogSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkxNTlldOiBJbmZpbml0eSxcclxuXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkhBR0VdOiAtSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkhDSFJdOiAtSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkhJTlRdOiAtSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkhTVFJdOiAtSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkhNTlldOiAtSW5maW5pdHksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkhTUFJdOiAtSW5maW5pdHksXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IoY29uc3Qga2V5IGluIGRhdGEpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlKGtleSwgZGF0YVtrZXldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXN0YXJ0TGFzdFN0ZXAoKSB7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkxBR0VdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5BR0UpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5MQ0hSXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuQ0hSKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuTElOVF0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLklOVCk7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkxTVFJdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5TVFIpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5MU1BSXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuU1BSKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuTE1OWV0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLk1OWSk7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkhBR0VdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5BR0UpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5IQ0hSXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuQ0hSKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuSElOVF0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLklOVCk7XHJcbiAgICAgICAgdGhpcy4jZGF0YVt0aGlzLlRZUEVTLkhTVFJdID0gdGhpcy5nZXQodGhpcy5UWVBFUy5TVFIpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbdGhpcy5UWVBFUy5ITU5ZXSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuTU5ZKTtcclxuICAgICAgICB0aGlzLiNkYXRhW3RoaXMuVFlQRVMuSFNQUl0gPSB0aGlzLmdldCh0aGlzLlRZUEVTLlNQUik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KHByb3ApIHtcclxuICAgICAgICBzd2l0Y2gocHJvcCkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQUdFOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ0hSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSU5UOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1RSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTU5ZOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1BSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTElGOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuVExUOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuRVZUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuI2RhdGFbcHJvcF0pO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTEFHRTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxDSFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MSU5UOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTFNUUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxNTlk6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MU1BSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbihcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkYXRhW3Byb3BdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHRoaXMuZmFsbGJhY2socHJvcCkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSEFHRTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhDSFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5ISU5UOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSFNUUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhNTlk6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5IU1BSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1heChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNkYXRhW3Byb3BdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KHRoaXMuZmFsbGJhY2socHJvcCkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1VNOlxyXG4gICAgICAgICAgICAgICAgY29uc3QgSEFHRSA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuSEFHRSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBIQ0hSID0gdGhpcy5nZXQodGhpcy5UWVBFUy5IQ0hSKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IEhJTlQgPSB0aGlzLmdldCh0aGlzLlRZUEVTLkhJTlQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgSFNUUiA9IHRoaXMuZ2V0KHRoaXMuVFlQRVMuSFNUUik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBITU5ZID0gdGhpcy5nZXQodGhpcy5UWVBFUy5ITU5ZKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IEhTUFIgPSB0aGlzLmdldCh0aGlzLlRZUEVTLkhTUFIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc3VtKEhDSFIsIEhJTlQsIEhTVFIsIEhNTlksIEhTUFIpKjIgKyBIQUdFLzIpO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuVE1TOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubHNnZXQoJ3RpbWVzJykgfHwgMDtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkVYVDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxzZ2V0KCdleHRlbmRUYWxlbnQnKSB8fCBudWxsO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQVRMVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkFFVlQ6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5BQ0hWOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubHNnZXQocHJvcCkgfHwgW107XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5DVExUOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ0VWVDpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNBQ0hWOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2socHJvcClcclxuICAgICAgICAgICAgICAgICkubGVuZ3RoO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmFsbGJhY2socHJvcCkge1xyXG4gICAgICAgIHN3aXRjaChwcm9wKSB7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MQUdFOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSEFHRTogcmV0dXJuIHRoaXMuVFlQRVMuQUdFO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTENIUjpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhDSFI6IHJldHVybiB0aGlzLlRZUEVTLkNIUjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxJTlQ6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5ISU5UOiByZXR1cm4gdGhpcy5UWVBFUy5JTlQ7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MU1RSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSFNUUjogcmV0dXJuIHRoaXMuVFlQRVMuU1RSO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTE1OWTpcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkhNTlk6IHJldHVybiB0aGlzLlRZUEVTLk1OWTtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkxTUFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5IU1BSOiByZXR1cm4gdGhpcy5UWVBFUy5TUFI7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5DVExUOiByZXR1cm4gdGhpcy5UWVBFUy5BVExUO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ0VWVDogcmV0dXJuIHRoaXMuVFlQRVMuQUVWVDtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkNBQ0hWOiByZXR1cm4gdGhpcy5UWVBFUy5BQ0hWO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldChwcm9wLCB2YWx1ZSkge1xyXG4gICAgICAgIHN3aXRjaChwcm9wKSB7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5BR0U6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5DSFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5JTlQ6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5TVFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5NTlk6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5TUFI6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5MSUY6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5UTFQ6XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5FVlQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhsKHByb3AsIHRoaXMuI2RhdGFbcHJvcF0gPSBjbG9uZSh2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2hpZXZlKHByb3AsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlRNUzpcclxuICAgICAgICAgICAgICAgIHRoaXMubHNzZXQoJ3RpbWVzJywgcGFyc2VJbnQodmFsdWUpIHx8IDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuRVhUOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sc3NldCgnZXh0ZW5kVGFsZW50JywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdFJlY29yZCgpIHtcclxuICAgICAgICByZXR1cm4gY2xvbmUoe1xyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5BR0VdOiB0aGlzLmdldCh0aGlzLlRZUEVTLkFHRSksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLkNIUl06IHRoaXMuZ2V0KHRoaXMuVFlQRVMuQ0hSKSxcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuSU5UXTogdGhpcy5nZXQodGhpcy5UWVBFUy5JTlQpLFxyXG4gICAgICAgICAgICBbdGhpcy5UWVBFUy5TVFJdOiB0aGlzLmdldCh0aGlzLlRZUEVTLlNUUiksXHJcbiAgICAgICAgICAgIFt0aGlzLlRZUEVTLk1OWV06IHRoaXMuZ2V0KHRoaXMuVFlQRVMuTU5ZKSxcclxuICAgICAgICAgICAgW3RoaXMuVFlQRVMuU1BSXTogdGhpcy5nZXQodGhpcy5UWVBFUy5TUFIpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZShwcm9wLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2UocHJvcCwgTnVtYmVyKHYpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2gocHJvcCkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQUdFOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ0hSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuSU5UOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1RSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTU5ZOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuU1BSOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTElGOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5obChwcm9wLCB0aGlzLiNkYXRhW3Byb3BdICs9IE51bWJlcih2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuVExUOlxyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuRVZUOlxyXG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuI2RhdGFbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZih2YWx1ZTwwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2LmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4IT0tMSkgdi5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZighdi5pbmNsdWRlcyh2YWx1ZSkpIHYucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjaGlldmUocHJvcCwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuVE1TOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldChwcm9wKSArIHBhcnNlSW50KHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlZmZlY3QoZWZmZWN0cykge1xyXG4gICAgICAgIGZvcihjb25zdCBwcm9wIGluIGVmZmVjdHMpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlKHByb3AsIE51bWJlcihlZmZlY3RzW3Byb3BdKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHRoaXMuVFlQRVMuTElGKSA8IDE7XHJcbiAgICB9XHJcblxyXG4gICAgYWdlTmV4dCgpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZSh0aGlzLlRZUEVTLkFHRSwgMSk7XHJcbiAgICAgICAgY29uc3QgYWdlID0gdGhpcy5nZXQodGhpcy5UWVBFUy5BR0UpO1xyXG4gICAgICAgIGNvbnN0IHtldmVudCwgdGFsZW50fSA9IHRoaXMuZ2V0QWdlRGF0YShhZ2UpO1xyXG4gICAgICAgIHJldHVybiB7YWdlLCBldmVudCwgdGFsZW50fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZ2VEYXRhKGFnZSkge1xyXG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLiNhZ2VEYXRhW2FnZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhsKHByb3AsIHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGtleXM7XHJcbiAgICAgICAgc3dpdGNoKHByb3ApIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkFHRToga2V5cyA9IFt0aGlzLlRZUEVTLkxBR0UsIHRoaXMuVFlQRVMuSEFHRV07IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuQ0hSOiBrZXlzID0gW3RoaXMuVFlQRVMuTENIUiwgdGhpcy5UWVBFUy5IQ0hSXTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5JTlQ6IGtleXMgPSBbdGhpcy5UWVBFUy5MSU5ULCB0aGlzLlRZUEVTLkhJTlRdOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLlNUUjoga2V5cyA9IFt0aGlzLlRZUEVTLkxTVFIsIHRoaXMuVFlQRVMuSFNUUl07IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuTU5ZOiBrZXlzID0gW3RoaXMuVFlQRVMuTE1OWSwgdGhpcy5UWVBFUy5ITU5ZXTsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5UWVBFUy5TUFI6IGtleXMgPSBbdGhpcy5UWVBFUy5MU1BSLCB0aGlzLlRZUEVTLkhTUFJdOyBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBbbCwgaF0gPSBrZXlzO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbbF0gPSBtaW4odGhpcy4jZGF0YVtsXSwgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuI2RhdGFbaF0gPSBtYXgodGhpcy4jZGF0YVtoXSwgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFjaGlldmUocHJvcCwgbmV3RGF0YSkge1xyXG4gICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgc3dpdGNoKHByb3ApIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLlRZUEVTLkFDSFY6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RGF0YSA9IHRoaXMubHNnZXQocHJvcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxzc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgKGxhc3REYXRhIHx8IFtdKS5jb25jYXQoW1tuZXdEYXRhLCBEYXRlLm5vdygpXV0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuVExUOiBrZXkgPSB0aGlzLlRZUEVTLkFUTFQ7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuVFlQRVMuRVZUOiBrZXkgPSB0aGlzLlRZUEVTLkFFVlQ7IGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxhc3REYXRhID0gdGhpcy5sc2dldChrZXkpIHx8IFtdO1xyXG4gICAgICAgIHRoaXMubHNzZXQoXHJcbiAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgICAgIG5ldyBTZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChuZXdEYXRhfHxbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZsYXQoKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGxzZ2V0KGtleSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgIGlmKGRhdGEgPT09IG51bGwpIHJldHVybjtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBsc3NldChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJvcGVydHk7IiwiZnVuY3Rpb24gcGFyc2VDb25kaXRpb24oY29uZGl0aW9uKSB7XHJcblxyXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY29uZGl0aW9uLmxlbmd0aDtcclxuICAgIGNvbnN0IHN0YWNrID0gW107XHJcbiAgICBzdGFjay51bnNoaWZ0KGNvbmRpdGlvbnMpO1xyXG4gICAgbGV0IGN1cnNvciA9IDA7XHJcbiAgICBjb25zdCBjYXRjaFN0cmluZyA9IGkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IGNvbmRpdGlvbi5zdWJzdHJpbmcoY3Vyc29yLCBpKS50cmltKCk7XHJcbiAgICAgICAgY3Vyc29yID0gaTtcclxuICAgICAgICBpZihzdHIpIHN0YWNrWzBdLnB1c2goc3RyKTtcclxuICAgIH07XHJcblxyXG4gICAgZm9yKGxldCBpPTA7IGk8bGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzd2l0Y2goY29uZGl0aW9uW2ldKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJyAnOiBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJygnOlxyXG4gICAgICAgICAgICAgICAgY2F0Y2hTdHJpbmcoaSk7XHJcbiAgICAgICAgICAgICAgICBjdXJzb3IgKys7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBbXTtcclxuICAgICAgICAgICAgICAgIHN0YWNrWzBdLnB1c2goc3ViKTtcclxuICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoc3ViKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnKSc6XHJcbiAgICAgICAgICAgICAgICBjYXRjaFN0cmluZyhpKTtcclxuICAgICAgICAgICAgICAgIGN1cnNvciArKztcclxuICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3wnOlxyXG4gICAgICAgICAgICBjYXNlICcmJzpcclxuICAgICAgICAgICAgICAgIGNhdGNoU3RyaW5nKGkpO1xyXG4gICAgICAgICAgICAgICAgY2F0Y2hTdHJpbmcoaSsxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2F0Y2hTdHJpbmcobGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gY29uZGl0aW9ucztcclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tDb25kaXRpb24ocHJvcGVydHksIGNvbmRpdGlvbikge1xyXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbik7XHJcbiAgICByZXR1cm4gY2hlY2tQYXJzZWRDb25kaXRpb25zKHByb3BlcnR5LCBjb25kaXRpb25zKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tQYXJzZWRDb25kaXRpb25zKHByb3BlcnR5LCBjb25kaXRpb25zKSB7XHJcbiAgICBpZighQXJyYXkuaXNBcnJheShjb25kaXRpb25zKSkgcmV0dXJuIGNoZWNrUHJvcChwcm9wZXJ0eSwgY29uZGl0aW9ucyk7XHJcbiAgICBpZihjb25kaXRpb25zLmxlbmd0aCA9PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmKGNvbmRpdGlvbnMubGVuZ3RoID09IDEpIHJldHVybiBjaGVja1BhcnNlZENvbmRpdGlvbnMocHJvcGVydHksIGNvbmRpdGlvbnNbMF0pO1xyXG5cclxuICAgIGxldCByZXQgPSBjaGVja1BhcnNlZENvbmRpdGlvbnMocHJvcGVydHksIGNvbmRpdGlvbnNbMF0pO1xyXG4gICAgZm9yKGxldCBpPTE7IGk8Y29uZGl0aW9ucy5sZW5ndGg7IGkrPTIpIHtcclxuICAgICAgICBzd2l0Y2goY29uZGl0aW9uc1tpXSkge1xyXG4gICAgICAgICAgICBjYXNlICcmJzpcclxuICAgICAgICAgICAgICAgIGlmKHJldCkgcmV0ID0gY2hlY2tQYXJzZWRDb25kaXRpb25zKHByb3BlcnR5LCBjb25kaXRpb25zW2krMV0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3wnOlxyXG4gICAgICAgICAgICAgICAgaWYocmV0KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldCA9IGNoZWNrUGFyc2VkQ29uZGl0aW9ucyhwcm9wZXJ0eSwgY29uZGl0aW9uc1tpKzFdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tQcm9wKHByb3BlcnR5LCBjb25kaXRpb24pIHtcclxuXHJcbiAgICBjb25zdCBsZW5ndGggPSBjb25kaXRpb24ubGVuZ3RoO1xyXG4gICAgbGV0IGkgPSBjb25kaXRpb24uc2VhcmNoKC9bPjxcXCFcXD89XS8pO1xyXG5cclxuICAgIGNvbnN0IHByb3AgPSBjb25kaXRpb24uc3Vic3RyaW5nKDAsaSk7XHJcbiAgICBjb25zdCBzeW1ib2wgPSBjb25kaXRpb24uc3Vic3RyaW5nKGksIGkrPShjb25kaXRpb25baSsxXT09Jz0nPzI6MSkpO1xyXG4gICAgY29uc3QgZCA9IGNvbmRpdGlvbi5zdWJzdHJpbmcoaSwgbGVuZ3RoKTtcclxuXHJcbiAgICBjb25zdCBwcm9wRGF0YSA9IHByb3BlcnR5LmdldChwcm9wKTtcclxuICAgIGNvbnN0IGNvbmRpdGlvbkRhdGEgPSBkWzBdPT0nWyc/IEpTT04ucGFyc2UoZCk6IE51bWJlcihkKTtcclxuXHJcbiAgICBzd2l0Y2goc3ltYm9sKSB7XHJcbiAgICAgICAgY2FzZSAnPic6ICByZXR1cm4gcHJvcERhdGEgPiAgY29uZGl0aW9uRGF0YTtcclxuICAgICAgICBjYXNlICc8JzogIHJldHVybiBwcm9wRGF0YSA8ICBjb25kaXRpb25EYXRhO1xyXG4gICAgICAgIGNhc2UgJz49JzogcmV0dXJuIHByb3BEYXRhID49IGNvbmRpdGlvbkRhdGE7XHJcbiAgICAgICAgY2FzZSAnPD0nOiByZXR1cm4gcHJvcERhdGEgPD0gY29uZGl0aW9uRGF0YTtcclxuICAgICAgICBjYXNlICc9JzpcclxuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShwcm9wRGF0YSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcERhdGEuaW5jbHVkZXMoY29uZGl0aW9uRGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wRGF0YSA9PSBjb25kaXRpb25EYXRhO1xyXG4gICAgICAgIGNhc2UgJyE9JzpcclxuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShwcm9wRGF0YSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByb3BEYXRhLmluY2x1ZGVzKGNvbmRpdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvcERhdGEgPT0gY29uZGl0aW9uRGF0YTtcclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShwcm9wRGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBwIG9mIHByb3BEYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmRpdGlvbkRhdGEuaW5jbHVkZXMocCkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25EYXRhLmluY2x1ZGVzKHByb3BEYXRhKTtcclxuICAgICAgICBjYXNlICchJzpcclxuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShwcm9wRGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBwIG9mIHByb3BEYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmRpdGlvbkRhdGEuaW5jbHVkZXMocCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAhY29uZGl0aW9uRGF0YS5pbmNsdWRlcyhwcm9wRGF0YSk7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdE1heFRyaWdnZXJzKGNvbmRpdGlvbikge1xyXG4gICAgLy8gQXNzdW1pbmcgb25seSBhZ2UgcmVsYXRlZCB0YWxlbnRzIGNhbiBiZSB0cmlnZ2VyZWQgbXVsdGlwbGUgdGltZXMuXHJcbiAgICBjb25zdCBSRV9BR0VfQ09ORElUSU9OID0gL0FHRVxcP1xcWyhbMC05XFwsXSspXFxdLztcclxuICAgIGNvbnN0IG1hdGNoX29iamVjdCA9IFJFX0FHRV9DT05ESVRJT04uZXhlYyhjb25kaXRpb24pO1xyXG4gICAgaWYgKG1hdGNoX29iamVjdCA9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gTm90IGFnZSByZWxhdGVkLCBzaW5nbGUgdHJpZ2dlci5cclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgYWdlX2xpc3QgPSBtYXRjaF9vYmplY3RbMV0uc3BsaXQoXCIsXCIpO1xyXG4gICAgcmV0dXJuIGFnZV9saXN0Lmxlbmd0aDtcclxufVxyXG5cclxuZXhwb3J0IHsgY2hlY2tDb25kaXRpb24sIGV4dHJhY3RNYXhUcmlnZ2VycyB9OyIsImltcG9ydCB7IGNsb25lIH0gZnJvbSAnLi9mdW5jdGlvbnMvdXRpbC5qcyc7XG5pbXBvcnQgeyBjaGVja0NvbmRpdGlvbiB9IGZyb20gJy4vZnVuY3Rpb25zL2NvbmRpdGlvbi5qcyc7XG5cbmNsYXNzIEV2ZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICAjZXZlbnRzO1xuXG4gICAgaW5pdGlhbCh7ZXZlbnRzfSkge1xuICAgICAgICB0aGlzLiNldmVudHMgPSBldmVudHM7XG4gICAgICAgIGZvcihjb25zdCBpZCBpbiBldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2lkXTtcbiAgICAgICAgICAgIGlmKCFldmVudC5icmFuY2gpIGNvbnRpbnVlO1xuICAgICAgICAgICAgZXZlbnQuYnJhbmNoID0gZXZlbnQuYnJhbmNoLm1hcChiPT57XG4gICAgICAgICAgICAgICAgYiA9IGIuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBiWzFdID0gTnVtYmVyKGJbMV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI2V2ZW50cykubGVuZ3RoO1xuICAgIH1cblxuICAgIGNoZWNrKGV2ZW50SWQsIHByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IHsgaW5jbHVkZSwgZXhjbHVkZSwgTm9SYW5kb20gfSA9IHRoaXMuZ2V0KGV2ZW50SWQpO1xuICAgICAgICBpZihOb1JhbmRvbSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZihleGNsdWRlICYmIGNoZWNrQ29uZGl0aW9uKHByb3BlcnR5LCBleGNsdWRlKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZihpbmNsdWRlKSByZXR1cm4gY2hlY2tDb25kaXRpb24ocHJvcGVydHksIGluY2x1ZGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQoZXZlbnRJZCkge1xuICAgICAgICBjb25zdCBldmVudCA9IHRoaXMuI2V2ZW50c1tldmVudElkXTtcbiAgICAgICAgaWYoIWV2ZW50KSB0aHJvdyBuZXcgRXJyb3IoYFtFUlJPUl0gTm8gRXZlbnRbJHtldmVudElkfV1gKTtcbiAgICAgICAgcmV0dXJuIGNsb25lKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpbmZvcm1hdGlvbihldmVudElkKSB7XG4gICAgICAgIGNvbnN0IHsgZXZlbnQ6IGRlc2NyaXB0aW9uIH0gPSB0aGlzLmdldChldmVudElkKVxuICAgICAgICByZXR1cm4geyBkZXNjcmlwdGlvbiB9O1xuICAgIH1cblxuICAgIGRvKGV2ZW50SWQsIHByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IHsgZWZmZWN0LCBicmFuY2gsIGV2ZW50OiBkZXNjcmlwdGlvbiwgcG9zdEV2ZW50IH0gPSB0aGlzLmdldChldmVudElkKTtcbiAgICAgICAgaWYoYnJhbmNoKVxuICAgICAgICAgICAgZm9yKGNvbnN0IFtjb25kLCBuZXh0XSBvZiBicmFuY2gpXG4gICAgICAgICAgICAgICAgaWYoY2hlY2tDb25kaXRpb24ocHJvcGVydHksIGNvbmQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlZmZlY3QsIG5leHQsIGRlc2NyaXB0aW9uIH07XG4gICAgICAgIHJldHVybiB7IGVmZmVjdCwgcG9zdEV2ZW50LCBkZXNjcmlwdGlvbiB9O1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmVudDsiLCJpbXBvcnQgeyBjbG9uZSB9IGZyb20gJy4vZnVuY3Rpb25zL3V0aWwuanMnO1xyXG5pbXBvcnQgeyBjaGVja0NvbmRpdGlvbiwgZXh0cmFjdE1heFRyaWdnZXJzIH0gZnJvbSAnLi9mdW5jdGlvbnMvY29uZGl0aW9uLmpzJztcclxuaW1wb3J0IHsgZ2V0UmF0ZSB9IGZyb20gJy4vZnVuY3Rpb25zL2FkZGl0aW9uLmpzJztcclxuXHJcbmNsYXNzIFRhbGVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gICAgI3RhbGVudHM7XHJcblxyXG4gICAgaW5pdGlhbCh7dGFsZW50c30pIHtcclxuICAgICAgICB0aGlzLiN0YWxlbnRzID0gdGFsZW50cztcclxuICAgICAgICBmb3IoY29uc3QgaWQgaW4gdGFsZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCB0YWxlbnQgPSB0YWxlbnRzW2lkXTtcclxuICAgICAgICAgICAgdGFsZW50LmlkPSBOdW1iZXIoaWQpO1xyXG4gICAgICAgICAgICB0YWxlbnQuZ3JhZGUgPSBOdW1iZXIodGFsZW50LmdyYWRlKTtcclxuICAgICAgICAgICAgdGFsZW50Lm1heF90cmlnZ2VycyA9IGV4dHJhY3RNYXhUcmlnZ2Vycyh0YWxlbnQuY29uZGl0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY291bnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuI3RhbGVudHMpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVjayh0YWxlbnRJZCwgcHJvcGVydHkpIHtcclxuICAgICAgICBjb25zdCB7IGNvbmRpdGlvbiB9ID0gdGhpcy5nZXQodGFsZW50SWQpO1xyXG4gICAgICAgIHJldHVybiBjaGVja0NvbmRpdGlvbihwcm9wZXJ0eSwgY29uZGl0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQodGFsZW50SWQpIHtcclxuICAgICAgICBjb25zdCB0YWxlbnQgPSB0aGlzLiN0YWxlbnRzW3RhbGVudElkXTtcclxuICAgICAgICBpZighdGFsZW50KSB0aHJvdyBuZXcgRXJyb3IoYFtFUlJPUl0gTm8gVGFsZW50WyR7dGFsZW50SWR9XWApO1xyXG4gICAgICAgIHJldHVybiBjbG9uZSh0YWxlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGluZm9ybWF0aW9uKHRhbGVudElkKSB7XHJcbiAgICAgICAgY29uc3QgeyBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuZ2V0KHRhbGVudElkKVxyXG4gICAgICAgIHJldHVybiB7IGdyYWRlLCBuYW1lLCBkZXNjcmlwdGlvbiB9O1xyXG4gICAgfVxyXG5cclxuICAgIGV4Y2x1c2l2ZSh0YWxlbmRzLCBleGNsdXNpdmVJZCkge1xyXG4gICAgICAgIGNvbnN0IHsgZXhjbHVzaXZlIH0gPSB0aGlzLmdldChleGNsdXNpdmVJZCk7XHJcbiAgICAgICAgaWYoIWV4Y2x1c2l2ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yKGNvbnN0IHRhbGVudCBvZiB0YWxlbmRzKSB7XHJcbiAgICAgICAgICAgIGZvcihjb25zdCBlIG9mIGV4Y2x1c2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYodGFsZW50ID09IGUpIHJldHVybiB0YWxlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGFsZW50UmFuZG9tKGluY2x1ZGUsIHt0aW1lcyA9IDAsIGFjaGlldmVtZW50ID0gMH0gPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHJhdGUgPSB7IDE6MTAwLCAyOjEwLCAzOjEsIH07XHJcbiAgICAgICAgY29uc3QgcmF0ZUFkZGl0aW9uID0geyAxOjEsIDI6MSwgMzoxLCB9O1xyXG4gICAgICAgIGNvbnN0IHRpbWVzUmF0ZSA9IGdldFJhdGUoJ3RpbWVzJywgdGltZXMpO1xyXG4gICAgICAgIGNvbnN0IGFjaGlldmVtZW50UmF0ZSA9IGdldFJhdGUoJ2FjaGlldmVtZW50JywgYWNoaWV2ZW1lbnQpO1xyXG5cclxuICAgICAgICBmb3IoY29uc3QgZ3JhZGUgaW4gdGltZXNSYXRlKVxyXG4gICAgICAgICAgICByYXRlQWRkaXRpb25bZ3JhZGVdICs9IHRpbWVzUmF0ZVtncmFkZV0gLSAxO1xyXG5cclxuICAgICAgICBmb3IoY29uc3QgZ3JhZGUgaW4gYWNoaWV2ZW1lbnRSYXRlKVxyXG4gICAgICAgICAgICByYXRlQWRkaXRpb25bZ3JhZGVdICs9IGFjaGlldmVtZW50UmF0ZVtncmFkZV0gLSAxO1xyXG5cclxuICAgICAgICBmb3IoY29uc3QgZ3JhZGUgaW4gcmF0ZUFkZGl0aW9uKVxyXG4gICAgICAgICAgICByYXRlW2dyYWRlXSAqPSByYXRlQWRkaXRpb25bZ3JhZGVdO1xyXG5cclxuICAgICAgICBjb25zdCByYW5kb21HcmFkZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJhbmRvbU51bWJlciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApO1xyXG4gICAgICAgICAgICBpZigocmFuZG9tTnVtYmVyIC09IHJhdGVbM10pIDwgMCkgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgIGlmKChyYW5kb21OdW1iZXIgLT0gcmF0ZVsyXSkgPCAwKSByZXR1cm4gMjtcclxuICAgICAgICAgICAgaWYoKHJhbmRvbU51bWJlciAtPSByYXRlWzFdKSA8IDApIHJldHVybiAxO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIDEwMDAsIDEwMCwgMTAsIDFcclxuICAgICAgICBjb25zdCB0YWxlbnRMaXN0ID0ge307XHJcbiAgICAgICAgZm9yKGNvbnN0IHRhbGVudElkIGluIHRoaXMuI3RhbGVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBpZCwgZ3JhZGUsIG5hbWUsIGRlc2NyaXB0aW9uIH0gPSB0aGlzLiN0YWxlbnRzW3RhbGVudElkXTtcclxuICAgICAgICAgICAgaWYoaWQgPT0gaW5jbHVkZSkge1xyXG4gICAgICAgICAgICAgICAgaW5jbHVkZSA9IHsgZ3JhZGUsIG5hbWUsIGRlc2NyaXB0aW9uLCBpZCB9O1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIXRhbGVudExpc3RbZ3JhZGVdKSB0YWxlbnRMaXN0W2dyYWRlXSA9IFt7IGdyYWRlLCBuYW1lLCBkZXNjcmlwdGlvbiwgaWQgfV07XHJcbiAgICAgICAgICAgIGVsc2UgdGFsZW50TGlzdFtncmFkZV0ucHVzaCh7IGdyYWRlLCBuYW1lLCBkZXNjcmlwdGlvbiwgaWQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEFycmF5KDEwKVxyXG4gICAgICAgICAgICAuZmlsbCgxKS5tYXAoKHYsIGkpPT57XHJcbiAgICAgICAgICAgICAgICBpZighaSAmJiBpbmNsdWRlKSByZXR1cm4gaW5jbHVkZTtcclxuICAgICAgICAgICAgICAgIGxldCBncmFkZSA9IHJhbmRvbUdyYWRlKCk7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSh0YWxlbnRMaXN0W2dyYWRlXS5sZW5ndGggPT0gMCkgZ3JhZGUtLTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRhbGVudExpc3RbZ3JhZGVdLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGVuZ3RoKSAlIGxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YWxlbnRMaXN0W2dyYWRlXS5zcGxpY2UocmFuZG9tLDEpWzBdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxvY2F0aW9uQWRkaXRpb24odGFsZW50cykge1xyXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFsZW50cykpIHtcclxuICAgICAgICAgICAgbGV0IGFkZGl0aW9uID0gMDtcclxuICAgICAgICAgICAgZm9yKGNvbnN0IHRhbGVudCBvZiB0YWxlbnRzKVxyXG4gICAgICAgICAgICAgICAgYWRkaXRpb24gKz0gdGhpcy5hbGxvY2F0aW9uQWRkaXRpb24odGFsZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFkZGl0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMuZ2V0KHRhbGVudHMpLnN0YXR1cykgfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICBkbyh0YWxlbnRJZCwgcHJvcGVydHkpIHtcclxuICAgICAgICBjb25zdCB7IGVmZmVjdCwgY29uZGl0aW9uLCBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24gfSA9IHRoaXMuZ2V0KHRhbGVudElkKTtcclxuICAgICAgICBpZihjb25kaXRpb24gJiYgIWNoZWNrQ29uZGl0aW9uKHByb3BlcnR5LCBjb25kaXRpb24pKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBlZmZlY3QsIGdyYWRlLCBuYW1lLCBkZXNjcmlwdGlvbiB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYWxlbnQ7IiwiaW1wb3J0IHsgY2xvbmUgfSBmcm9tICcuL2Z1bmN0aW9ucy91dGlsLmpzJztcclxuaW1wb3J0IHsgY2hlY2tDb25kaXRpb24gfSBmcm9tICcuL2Z1bmN0aW9ucy9jb25kaXRpb24uanMnO1xyXG5cclxuY2xhc3MgQWNoaWV2ZW1lbnQge1xyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIC8vIOaXtuaculxyXG4gICAgT3Bwb3J0dW5pdHkgPSB7XHJcbiAgICAgICAgU1RBUlQ6IFwiU1RBUlRcIiwgICAgICAgICAgICAgLy8g5YiG6YWN5a6M5oiQ54K55pWw77yM54K55Ye75byA5aeL5paw5Lq655Sf5ZCOXHJcbiAgICAgICAgVFJBSkVDVE9SWTogXCJUUkFKRUNUT1JZXCIsICAgLy8g5q+P5LiA5bm055qE5Lq655Sf57uP5Y6G5LitXHJcbiAgICAgICAgU1VNTUFSWTogXCJTVU1NQVJZXCIsICAgICAgICAgLy8g5Lq655Sf57uT5p2f77yM54K55Ye75Lq655Sf5oC757uT5ZCOXHJcbiAgICAgICAgRU5EOiBcIkVORFwiLCAgICAgICAgICAgICAgICAgLy8g5ri45oiP5a6M5oiQ77yM54K55Ye76YeN5byAIOmHjeW8gOasoeaVsOWcqOi/meS5i+WQjuaJjeS8misxXHJcbiAgICB9O1xyXG5cclxuICAgICNhY2hpZXZlbWVudHM7XHJcblxyXG4gICAgaW5pdGlhbCh7YWNoaWV2ZW1lbnRzfSkge1xyXG4gICAgICAgIHRoaXMuI2FjaGlldmVtZW50cyA9IGFjaGlldmVtZW50cztcclxuICAgIH1cclxuXHJcbiAgICBjb3VudCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jYWNoaWV2ZW1lbnRzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdChwcm9wZXJ0eSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RcclxuICAgICAgICAgICAgLnZhbHVlcyh0aGlzLiNhY2hpZXZlbWVudHMpXHJcbiAgICAgICAgICAgIC5tYXAoKHtcclxuICAgICAgICAgICAgICAgIGlkLCBuYW1lLCBvcHBvcnR1bml0eSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBoaWRlLCBncmFkZSxcclxuICAgICAgICAgICAgfSk9Pih7XHJcbiAgICAgICAgICAgICAgICBpZCwgbmFtZSwgb3Bwb3J0dW5pdHksXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgaGlkZSwgZ3JhZGUsXHJcbiAgICAgICAgICAgICAgICBpc0FjaGlldmVkOiB0aGlzLmlzQWNoaWV2ZWQoaWQsIHByb3BlcnR5KSxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChhY2hpZXZlbWVudElkKSB7XHJcbiAgICAgICAgY29uc3QgYWNoaWV2ZW1lbnQgPSB0aGlzLiNhY2hpZXZlbWVudHNbYWNoaWV2ZW1lbnRJZF07XHJcbiAgICAgICAgaWYoIWFjaGlldmVtZW50KSB0aHJvdyBuZXcgRXJyb3IoYFtFUlJPUl0gTm8gQWNoaWV2ZW1lbnRbJHthY2hpZXZlbWVudElkfV1gKTtcclxuICAgICAgICByZXR1cm4gY2xvbmUoYWNoaWV2ZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrKGFjaGlldmVtZW50SWQsIHByb3BlcnR5KSB7XHJcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb24gfSA9IHRoaXMuZ2V0KGFjaGlldmVtZW50SWQpO1xyXG4gICAgICAgIHJldHVybiBjaGVja0NvbmRpdGlvbihwcm9wZXJ0eSwgY29uZGl0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0FjaGlldmVkKGFjaGlldmVtZW50SWQsIHByb3BlcnR5KSB7XHJcbiAgICAgICAgZm9yKGNvbnN0IFthY2hpZXZlZF0gb2YgKHByb3BlcnR5LmdldChwcm9wZXJ0eS5UWVBFUy5BQ0hWKXx8W10pKVxyXG4gICAgICAgICAgICBpZihhY2hpZXZlZCA9PSBhY2hpZXZlbWVudElkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYWNoaWV2ZShvcHBvcnR1bml0eSwgcHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmxpc3QocHJvcGVydHkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHtpc0FjaGlldmVkfSk9PiFpc0FjaGlldmVkKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh7b3Bwb3J0dW5pdHk6IG99KT0+bz09b3Bwb3J0dW5pdHkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHtpZH0pPT50aGlzLmNoZWNrKGlkLCBwcm9wZXJ0eSkpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKCh7aWR9KT0+e1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkuYWNoaWV2ZShwcm9wZXJ0eS5UWVBFUy5BQ0hWLCBpZClcclxuICAgICAgICAgICAgICAgICQkZXZlbnQoJ2FjaGlldmVtZW50JywgdGhpcy5nZXQoaWQpKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWNoaWV2ZW1lbnQ7IiwiaW1wb3J0IFByb3BlcnR5IGZyb20gJy4vcHJvcGVydHkuanMnO1xyXG5pbXBvcnQgRXZlbnQgZnJvbSAnLi9ldmVudC5qcyc7XHJcbmltcG9ydCBUYWxlbnQgZnJvbSAnLi90YWxlbnQuanMnO1xyXG5pbXBvcnQgQWNoaWV2ZW1lbnQgZnJvbSAnLi9hY2hpZXZlbWVudC5qcyc7XHJcblxyXG5jbGFzcyBMaWZlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuI3Byb3BlcnR5ID0gbmV3IFByb3BlcnR5KCk7XHJcbiAgICAgICAgdGhpcy4jZXZlbnQgPSBuZXcgRXZlbnQoKTtcclxuICAgICAgICB0aGlzLiN0YWxlbnQgPSBuZXcgVGFsZW50KCk7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQgPSBuZXcgQWNoaWV2ZW1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAjcHJvcGVydHk7XHJcbiAgICAjZXZlbnQ7XHJcbiAgICAjdGFsZW50O1xyXG4gICAgI2FjaGlldmVtZW50O1xyXG4gICAgI3RyaWdnZXJUYWxlbnRzO1xyXG5cclxuICAgIGFzeW5jIGluaXRpYWwoKSB7XHJcbiAgICAgICAgY29uc3QgW2FnZSwgdGFsZW50cywgZXZlbnRzLCBhY2hpZXZlbWVudHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAganNvbignYWdlJyksXHJcbiAgICAgICAgICBqc29uKCd0YWxlbnRzJyksXHJcbiAgICAgICAgICBqc29uKCdldmVudHMnKSxcclxuICAgICAgICAgIGpzb24oJ2FjaGlldmVtZW50JyksXHJcbiAgICAgICAgXSlcclxuICAgICAgICB0aGlzLiNwcm9wZXJ0eS5pbml0aWFsKHthZ2V9KTtcclxuICAgICAgICB0aGlzLiN0YWxlbnQuaW5pdGlhbCh7dGFsZW50c30pO1xyXG4gICAgICAgIHRoaXMuI2V2ZW50LmluaXRpYWwoe2V2ZW50c30pO1xyXG4gICAgICAgIHRoaXMuI2FjaGlldmVtZW50LmluaXRpYWwoe2FjaGlldmVtZW50c30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3RhcnQoYWxsb2NhdGlvbikge1xyXG4gICAgICAgIHRoaXMuI3RyaWdnZXJUYWxlbnRzID0ge307XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkucmVzdGFydChhbGxvY2F0aW9uKTtcclxuICAgICAgICB0aGlzLmRvVGFsZW50KCk7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkucmVzdGFydExhc3RTdGVwKCk7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuYWNoaWV2ZShcclxuICAgICAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuT3Bwb3J0dW5pdHkuU1RBUlQsXHJcbiAgICAgICAgICAgIHRoaXMuI3Byb3BlcnR5XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRhbGVudEFsbG9jYXRpb25BZGRpdGlvbih0YWxlbnRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RhbGVudC5hbGxvY2F0aW9uQWRkaXRpb24odGFsZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFsZW50Q3VycmVudFRyaWdnZXJDb3VudCh0YWxlbnRJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiN0cmlnZ2VyVGFsZW50c1t0YWxlbnRJZF0gfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICBuZXh0KCkge1xyXG4gICAgICAgIGNvbnN0IHthZ2UsIGV2ZW50LCB0YWxlbnR9ID0gdGhpcy4jcHJvcGVydHkuYWdlTmV4dCgpO1xyXG5cclxuICAgICAgICBjb25zdCB0YWxlbnRDb250ZW50ID0gdGhpcy5kb1RhbGVudCh0YWxlbnQpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50Q29udGVudCA9IHRoaXMuZG9FdmVudCh0aGlzLnJhbmRvbShldmVudCkpO1xyXG5cclxuICAgICAgICBjb25zdCBpc0VuZCA9IHRoaXMuI3Byb3BlcnR5LmlzRW5kKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBbdGFsZW50Q29udGVudCwgZXZlbnRDb250ZW50XS5mbGF0KCk7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuYWNoaWV2ZShcclxuICAgICAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuT3Bwb3J0dW5pdHkuVFJBSkVDVE9SWSxcclxuICAgICAgICAgICAgdGhpcy4jcHJvcGVydHlcclxuICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIHsgYWdlLCBjb250ZW50LCBpc0VuZCB9O1xyXG4gICAgfVxyXG5cclxuICAgIGRvVGFsZW50KHRhbGVudHMpIHtcclxuICAgICAgICBpZih0YWxlbnRzKSB0aGlzLiNwcm9wZXJ0eS5jaGFuZ2UodGhpcy4jcHJvcGVydHkuVFlQRVMuVExULCB0YWxlbnRzKTtcclxuICAgICAgICB0YWxlbnRzID0gdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLlRMVClcclxuICAgICAgICAgICAgLmZpbHRlcih0YWxlbnRJZCA9PiB0aGlzLmdldFRhbGVudEN1cnJlbnRUcmlnZ2VyQ291bnQodGFsZW50SWQpIDwgdGhpcy4jdGFsZW50LmdldCh0YWxlbnRJZCkubWF4X3RyaWdnZXJzKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudHMgPSBbXTtcclxuICAgICAgICBmb3IoY29uc3QgdGFsZW50SWQgb2YgdGFsZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLiN0YWxlbnQuZG8odGFsZW50SWQsIHRoaXMuI3Byb3BlcnR5KTtcclxuICAgICAgICAgICAgaWYoIXJlc3VsdCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHRoaXMuI3RyaWdnZXJUYWxlbnRzW3RhbGVudElkXSA9IHRoaXMuZ2V0VGFsZW50Q3VycmVudFRyaWdnZXJDb3VudCh0YWxlbnRJZCkgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCB7IGVmZmVjdCwgbmFtZSwgZGVzY3JpcHRpb24sIGdyYWRlIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy4jcHJvcGVydHkuVFlQRVMuVExULFxyXG4gICAgICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgICAgIGdyYWRlLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCFlZmZlY3QpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB0aGlzLiNwcm9wZXJ0eS5lZmZlY3QoZWZmZWN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGRvRXZlbnQoZXZlbnRJZCkge1xyXG4gICAgICAgIGNvbnN0IHsgZWZmZWN0LCBuZXh0LCBkZXNjcmlwdGlvbiwgcG9zdEV2ZW50IH0gPSB0aGlzLiNldmVudC5kbyhldmVudElkLCB0aGlzLiNwcm9wZXJ0eSk7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkuY2hhbmdlKHRoaXMuI3Byb3BlcnR5LlRZUEVTLkVWVCwgZXZlbnRJZCk7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkuZWZmZWN0KGVmZmVjdCk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHtcclxuICAgICAgICAgICAgdHlwZTogdGhpcy4jcHJvcGVydHkuVFlQRVMuRVZULFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgcG9zdEV2ZW50LFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihuZXh0KSByZXR1cm4gW2NvbnRlbnQsIHRoaXMuZG9FdmVudChuZXh0KV0uZmxhdCgpO1xyXG4gICAgICAgIHJldHVybiBbY29udGVudF07XHJcbiAgICB9XHJcblxyXG4gICAgcmFuZG9tKGV2ZW50cykge1xyXG4gICAgICAgIGV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKFtldmVudElkXSk9PnRoaXMuI2V2ZW50LmNoZWNrKGV2ZW50SWQsIHRoaXMuI3Byb3BlcnR5KSk7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbFdlaWdodHMgPSAwO1xyXG4gICAgICAgIGZvcihjb25zdCBbLCB3ZWlnaHRdIG9mIGV2ZW50cylcclxuICAgICAgICAgICAgdG90YWxXZWlnaHRzICs9IHdlaWdodDtcclxuXHJcbiAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkgKiB0b3RhbFdlaWdodHM7XHJcbiAgICAgICAgZm9yKGNvbnN0IFtldmVudElkLCB3ZWlnaHRdIG9mIGV2ZW50cylcclxuICAgICAgICAgICAgaWYoKHJhbmRvbS09d2VpZ2h0KTwwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50SWQ7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c1tldmVudHMubGVuZ3RoLTFdO1xyXG4gICAgfVxyXG5cclxuICAgIHRhbGVudFJhbmRvbSgpIHtcclxuICAgICAgICBjb25zdCB0aW1lcyA9IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5UTVMpO1xyXG4gICAgICAgIGNvbnN0IGFjaGlldmVtZW50ID0gdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkNBQ0hWKTtcclxuICAgICAgICByZXR1cm4gdGhpcy4jdGFsZW50LnRhbGVudFJhbmRvbSh0aGlzLmdldExhc3RFeHRlbmRUYWxlbnQoKSwgeyB0aW1lcywgYWNoaWV2ZW1lbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGFsZW50RXh0ZW5kKHRhbGVudElkKSB7XHJcbiAgICAgICAgdGhpcy4jcHJvcGVydHkuc2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkVYVCwgdGFsZW50SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RFeHRlbmRUYWxlbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5FWFQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN1bW1hcnkoKSB7XHJcbiAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuYWNoaWV2ZShcclxuICAgICAgICAgICAgdGhpcy4jYWNoaWV2ZW1lbnQuT3Bwb3J0dW5pdHkuU1VNTUFSWSxcclxuICAgICAgICAgICAgdGhpcy4jcHJvcGVydHlcclxuICAgICAgICApXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgQUdFOiB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuSEFHRSksXHJcbiAgICAgICAgICAgIENIUjogdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkhDSFIpLFxyXG4gICAgICAgICAgICBJTlQ6IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5ISU5UKSxcclxuICAgICAgICAgICAgU1RSOiB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuSFNUUiksXHJcbiAgICAgICAgICAgIE1OWTogdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkhNTlkpLFxyXG4gICAgICAgICAgICBTUFI6IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5IU1BSKSxcclxuICAgICAgICAgICAgU1VNOiB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuU1VNKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RSZWNvcmQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BlcnR5LmdldExhc3RSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNsdXNpdmUodGFsZW50cywgZXhjbHVzaXZlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RhbGVudC5leGNsdXNpdmUodGFsZW50cywgZXhjbHVzaXZlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY2hpZXZlbWVudHMoKSB7XHJcbiAgICAgICAgY29uc3QgdGlja3MgPSB7fTtcclxuICAgICAgICB0aGlzLiNwcm9wZXJ0eVxyXG4gICAgICAgICAgICAuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLkFDSFYpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChbaWQsIHRpY2tdKSA9PiB0aWNrc1tpZF0gPSB0aWNrKTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuI2FjaGlldmVtZW50XHJcbiAgICAgICAgICAgIC5saXN0KHRoaXMuI3Byb3BlcnR5KVxyXG4gICAgICAgICAgICAuc29ydCgoXHJcbiAgICAgICAgICAgICAgICB7aWQ6IGEsIGdyYWRlOiBhZywgaGlkZTogYWh9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBiLCBncmFkZTogYmcsIGhpZGU6IGJofVxyXG4gICAgICAgICAgICApPT57XHJcbiAgICAgICAgICAgICAgICBhID0gdGlja3NbYV07XHJcbiAgICAgICAgICAgICAgICBiID0gdGlja3NbYl07XHJcbiAgICAgICAgICAgICAgICBpZihhJiZiKSByZXR1cm4gYiAtIGE7XHJcbiAgICAgICAgICAgICAgICBpZighYSYmIWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihhaCYmYmgpIHJldHVybiBiZyAtIGFnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGFoKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICBpZihiaCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiZyAtIGFnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoIWEpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgaWYoIWIpIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG90YWwoKSB7XHJcbiAgICAgICAgY29uc3QgVE1TID0gdGhpcy4jcHJvcGVydHkuZ2V0KHRoaXMuI3Byb3BlcnR5LlRZUEVTLlRNUyk7XHJcbiAgICAgICAgY29uc3QgQ0FDSFYgPSB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuQ0FDSFYpO1xyXG4gICAgICAgIGNvbnN0IENUTFQgPSB0aGlzLiNwcm9wZXJ0eS5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuQ1RMVCk7XHJcbiAgICAgICAgY29uc3QgQ0VWVCA9IHRoaXMuI3Byb3BlcnR5LmdldCh0aGlzLiNwcm9wZXJ0eS5UWVBFUy5DRVZUKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxUYWxlbnQgPSB0aGlzLiN0YWxlbnQuY291bnQoKTtcclxuICAgICAgICBjb25zdCB0b3RhbEV2ZW50ID0gdGhpcy4jZXZlbnQuY291bnQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZXM6IFRNUyxcclxuICAgICAgICAgICAgYWNoaWV2ZW1lbnQ6IENBQ0hWLFxyXG4gICAgICAgICAgICB0YWxlbnRSYXRlOiBDVExUIC8gdG90YWxUYWxlbnQsXHJcbiAgICAgICAgICAgIGV2ZW50UmF0ZTogQ0VWVCAvIHRvdGFsRXZlbnQsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0aW1lcygpIHsgcmV0dXJuIHRoaXMuI3Byb3BlcnR5Py5nZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuVE1TKSB8fCAwOyB9XHJcbiAgICBzZXQgdGltZXModikge1xyXG4gICAgICAgIHRoaXMuI3Byb3BlcnR5Py5zZXQodGhpcy4jcHJvcGVydHkuVFlQRVMuVE1TLCB2KSB8fCAwO1xyXG4gICAgICAgIHRoaXMuI2FjaGlldmVtZW50LmFjaGlldmUoXHJcbiAgICAgICAgICAgIHRoaXMuI2FjaGlldmVtZW50Lk9wcG9ydHVuaXR5LkVORCxcclxuICAgICAgICAgICAgdGhpcy4jcHJvcGVydHlcclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpZmU7XHJcblxyXG4iLCJpbXBvcnQgeyBzdW1tYXJ5IH0gZnJvbSAnLi9mdW5jdGlvbnMvc3VtbWFyeS5qcyc7XHJcbmltcG9ydCB7IGdldFJhdGUsIGdldEdyYWRlIH0gZnJvbSAnLi9mdW5jdGlvbnMvYWRkaXRpb24uanMnO1xyXG5pbXBvcnQgTGlmZSBmcm9tICcuL2xpZmUuanMnO1xyXG5cclxuY2xhc3MgQXBwe1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLiNsaWZlID0gbmV3IExpZmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAjbGlmZTtcclxuICAgICNwYWdlcztcclxuICAgICNjdXJyZW50UGFnZTtcclxuICAgICN0YWxlbnRTZWxlY3RlZCA9IG5ldyBTZXQoKTtcclxuICAgICN0b3RhbE1heD0yMDtcclxuICAgICNpc0VuZCA9IGZhbHNlO1xyXG4gICAgI3NlbGVjdGVkRXh0ZW5kVGFsZW50ID0gbnVsbDtcclxuICAgICNoaW50VGltZW91dDtcclxuICAgICNzcGVjaWFsdGhhbmtzO1xyXG4gICAgI2F1dG9UcmFqZWN0b3J5O1xyXG5cclxuICAgIGFzeW5jIGluaXRpYWwoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0UGFnZXMoKTtcclxuICAgICAgICB0aGlzLnN3aXRjaCgnbG9hZGluZycpO1xyXG4gICAgICAgIGNvbnN0IFssc3BlY2lhbHRoYW5rc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgIHRoaXMuI2xpZmUuaW5pdGlhbCgpLFxyXG4gICAgICAgICAgICBqc29uKCdzcGVjaWFsdGhhbmtzJylcclxuICAgICAgICBdKTtcclxuICAgICAgICB0aGlzLiNzcGVjaWFsdGhhbmtzID0gc3BlY2lhbHRoYW5rcztcclxuICAgICAgICB0aGlzLnN3aXRjaCgnaW5kZXgnKTtcclxuICAgICAgICBnbG9iYWxUaGlzLm9uZXJyb3IgPSAoZXZlbnQsIHNvdXJjZSwgbGluZW5vLCBjb2xubywgZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaW50KGBbRVJST1JdIGF0ICgke3NvdXJjZX06JHtsaW5lbm99OiR7Y29sbm99KVxcblxcbiR7ZXJyb3I/LnN0YWNrfHxlcnJvcnx8J3Vua25vdyBFcnJvcid9YCwgJ2Vycm9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGtleURvd25DYWxsYmFjayA9IChrZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LndoaWNoID09PSAxMyB8fCBrZXlib2FyZEV2ZW50LmtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVzc0VudGVyRnVuYyA9IHRoaXMuI3BhZ2VzW3RoaXMuI2N1cnJlbnRQYWdlXT8ucHJlc3NFbnRlcjtcclxuICAgICAgICAgICAgICAgIHByZXNzRW50ZXJGdW5jICYmIHR5cGVvZiBwcmVzc0VudGVyRnVuYyA9PT0gJ2Z1bmN0aW9uJyAmJiBwcmVzc0VudGVyRnVuYygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleURvd25DYWxsYmFjayk7XHJcbiAgICAgICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5RG93bkNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0UGFnZXMoKSB7XHJcblxyXG4gICAgICAgIC8vIExvYWRpbmdcclxuICAgICAgICBjb25zdCBsb2FkaW5nUGFnZSA9ICQoYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAg5Lq655Sf6YeN5byA5qih5ouf5ZmoPGJyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxLjVyZW07IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj7liqDovb3kuK0uLi48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCk7XHJcblxyXG4gICAgICAgIC8vIEluZGV4XHJcbiAgICAgICAgY29uc3QgaW5kZXhQYWdlID0gJChgXHJcbiAgICAgICAgPGRpdiBpZD1cIm1haW5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFjaGlldmVtZW50XCI+5oiQ5bCxPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzcGVjaWFsdGhhbmtzXCI+54m55Yir5oSf6LCiPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJ0aGVtZVRvZ2dsZUJ0blwiPum7kTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIOS6uueUn+mHjeW8gOaooeaLn+WZqDxicj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MS41cmVtOyBmb250LXdlaWdodDpub3JtYWw7XCI+6L+Z5Z6D5Zy+5Lq655Sf5LiA56eS5Lmf5LiN5oOz5ZGG5LqGPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwicmVzdGFydFwiIGNsYXNzPVwibWFpbmJ0blwiPjxzcGFuIGNsYXNzPVwiaWNvbmZvbnRcIj4mI3hlNmE3Ozwvc3Bhbj7nq4vljbPph43lvIA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGEgaWQ9XCJkaXNjb3JkXCIgaHJlZj1cImh0dHBzOi8vZGlzY29yZC5nZy9VM3FyZjQ5Tk1RXCIgc3R5bGU9XCJ6LWluZGV4OiA5OTk5O1wiIGFyaWEtbGFiZWw9XCJDaGF0IG9uIERpc2NvcmRcIj48YnV0dG9uIGNsYXNzPVwiZGlzY29yZC1idG5cIj48c3ZnIHdpZHRoPVwiNTAlXCIgaGVpZ2h0PVwiNTVcIiB2aWV3Qm94PVwiMCAwIDcxIDU1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMClcIj48cGF0aCBkPVwiTTYwLjEwNDUgNC44OTc4QzU1LjU3OTIgMi44MjE0IDUwLjcyNjUgMS4yOTE2IDQ1LjY1MjcgMC40MTU0MkM0NS41NjAzIDAuMzk4NTEgNDUuNDY4IDAuNDQwNzY5IDQ1LjQyMDQgMC41MjUyODlDNDQuNzk2MyAxLjYzNTMgNDQuMTA1IDMuMDgzNCA0My42MjA5IDQuMjIxNkMzOC4xNjM3IDMuNDA0NiAzMi43MzQ1IDMuNDA0NiAyNy4zODkyIDQuMjIxNkMyNi45MDUgMy4wNTgxIDI2LjE4ODYgMS42MzUzIDI1LjU2MTcgMC41MjUyODlDMjUuNTE0MSAwLjQ0MzU4OSAyNS40MjE4IDAuNDAxMzMgMjUuMzI5NCAwLjQxNTQyQzIwLjI1ODQgMS4yODg4IDE1LjQwNTcgMi44MTg2IDEwLjg3NzYgNC44OTc4QzEwLjgzODQgNC45MTQ3IDEwLjgwNDggNC45NDI5IDEwLjc4MjUgNC45Nzk1QzEuNTc3OTUgMTguNzMwOSAtMC45NDM1NjEgMzIuMTQ0MyAwLjI5MzQwOCA0NS4zOTE0QzAuMjk5MDA1IDQ1LjQ1NjIgMC4zMzUzODYgNDUuNTE4MiAwLjM4NTc2MSA0NS41NTc2QzYuNDU4NjYgNTAuMDE3NCAxMi4zNDEzIDUyLjcyNDkgMTguMTE0NyA1NC41MTk1QzE4LjIwNzEgNTQuNTQ3NyAxOC4zMDUgNTQuNTEzOSAxOC4zNjM4IDU0LjQzNzhDMTkuNzI5NSA1Mi41NzI4IDIwLjk0NjkgNTAuNjA2MyAyMS45OTA3IDQ4LjUzODNDMjIuMDUyMyA0OC40MTcyIDIxLjk5MzUgNDguMjczNSAyMS44Njc2IDQ4LjIyNTZDMTkuOTM2NiA0Ny40OTMxIDE4LjA5NzkgNDYuNiAxNi4zMjkyIDQ1LjU4NThDMTYuMTg5MyA0NS41MDQxIDE2LjE3ODEgNDUuMzA0IDE2LjMwNjggNDUuMjA4MkMxNi42NzkgNDQuOTI5MyAxNy4wNTEzIDQ0LjYzOTEgMTcuNDA2NyA0NC4zNDYxQzE3LjQ3MSA0NC4yOTI2IDE3LjU2MDYgNDQuMjgxMyAxNy42MzYyIDQ0LjMxNTFDMjkuMjU1OCA0OS42MjAyIDQxLjgzNTQgNDkuNjIwMiA1My4zMTc5IDQ0LjMxNTFDNTMuMzkzNSA0NC4yNzg1IDUzLjQ4MzEgNDQuMjg5OCA1My41NTAyIDQ0LjM0MzNDNTMuOTA1NyA0NC42MzYzIDU0LjI3NzkgNDQuOTI5MyA1NC42NTI5IDQ1LjIwODJDNTQuNzgxNiA0NS4zMDQgNTQuNzczMiA0NS41MDQxIDU0LjYzMzMgNDUuNTg1OEM1Mi44NjQ2IDQ2LjYxOTcgNTEuMDI1OSA0Ny40OTMxIDQ5LjA5MjEgNDguMjIyOEM0OC45NjYyIDQ4LjI3MDcgNDguOTEwMiA0OC40MTcyIDQ4Ljk3MTggNDguNTM4M0M1MC4wMzggNTAuNjAzNCA1MS4yNTU0IDUyLjU2OTkgNTIuNTk1OSA1NC40MzVDNTIuNjUxOSA1NC41MTM5IDUyLjc1MjYgNTQuNTQ3NyA1Mi44NDUgNTQuNTE5NUM1OC42NDY0IDUyLjcyNDkgNjQuNTI5IDUwLjAxNzQgNzAuNjAxOSA0NS41NTc2QzcwLjY1NTEgNDUuNTE4MiA3MC42ODg3IDQ1LjQ1OSA3MC42OTQzIDQ1LjM5NDJDNzIuMTc0NyAzMC4wNzkxIDY4LjIxNDcgMTYuNzc1NyA2MC4xOTY4IDQuOTgyM0M2MC4xNzcyIDQuOTQyOSA2MC4xNDM3IDQuOTE0NyA2MC4xMDQ1IDQuODk3OFpNMjMuNzI1OSAzNy4zMjUzQzIwLjIyNzYgMzcuMzI1MyAxNy4zNDUxIDM0LjExMzYgMTcuMzQ1MSAzMC4xNjkzQzE3LjM0NTEgMjYuMjI1IDIwLjE3MTcgMjMuMDEzMyAyMy43MjU5IDIzLjAxMzNDMjcuMzA4IDIzLjAxMzMgMzAuMTYyNiAyNi4yNTMyIDMwLjEwNjYgMzAuMTY5M0MzMC4xMDY2IDM0LjExMzYgMjcuMjggMzcuMzI1MyAyMy43MjU5IDM3LjMyNTNaTTQ3LjMxNzggMzcuMzI1M0M0My44MTk2IDM3LjMyNTMgNDAuOTM3MSAzNC4xMTM2IDQwLjkzNzEgMzAuMTY5M0M0MC45MzcxIDI2LjIyNSA0My43NjM2IDIzLjAxMzMgNDcuMzE3OCAyMy4wMTMzQzUwLjkgMjMuMDEzMyA1My43NTQ1IDI2LjI1MzIgNTMuNjk4NiAzMC4xNjkzQzUzLjY5ODYgMzQuMTEzNiA1MC45IDM3LjMyNTMgNDcuMzE3OCAzNy4zMjUzWlwiIGZpbGw9XCIjZmZmZmZmXCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9XCJjbGlwMFwiPjxyZWN0IHdpZHRoPVwiNzFcIiBoZWlnaHQ9XCI1NVwiIGZpbGw9XCJ3aGl0ZVwiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz5DSEFUPC9idXR0b24+PHN0eWxlPi5kaXNjb3JkLWJ0biB7cG9zaXRpb246IGZpeGVkO2JvdHRvbTogMC41cmVtO2xlZnQ6IDAuNXJlbTtiYWNrZ3JvdW5kLWNvbG9yOiAjNTg2NUYyO3BhZGRpbmc6IDAuN3JlbTtoZWlnaHQ6IGF1dG87Y29sb3I6IHdoaXRlO3RleHQtYWxpZ246IHJpZ2h0O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ym9yZGVyOiBub25lO3dpZHRoOiA2LjVyZW07Zm9udC1zaXplOiAxcmVtO2JvcmRlci1yYWRpdXM6IDRweDt9LmRpc2NvcmQtYnRuIHN2ZyB7aGVpZ2h0OiAxLjVyZW07cG9zaXRpb246IGFic29sdXRlO3RvcDogNTAlO2xlZnQ6IDA7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO30uZGlzY29yZC1idG46aG92ZXIgc3Zne2FuaW1hdGlvbjpkaXNjb3JkLXdhdmUgNTYwbXMgZWFzZS1pbi1vdXQ7fUBrZXlmcmFtZXMgZGlzY29yZC13YXZlezAlLDEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDApfTIwJSw2MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKC0yNWRlZyl9NDAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTBkZWcpfX1AbWVkaWEgKG1heC13aWR0aDo1MDBweCl7LmRpc2NvcmQtYnRuOmhvdmVyIHN2Z3thbmltYXRpb246bm9uZX0uZGlzY29yZC1idG4gc3Zne2FuaW1hdGlvbjpkaXNjb3JkLXdhdmUgNTYwbXMgZWFzZS1pbi1vdXR9fTwvc3R5bGU+PC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICAvLyBJbml0IHRoZW1lXHJcbiAgICAgICAgdGhpcy5zZXRUaGVtZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWUnKSlcclxuXHJcbiAgICAgICAgaW5kZXhQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjcmVzdGFydCcpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+dGhpcy5zd2l0Y2goJ3RhbGVudCcpKTtcclxuXHJcbiAgICAgICAgaW5kZXhQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjYWNoaWV2ZW1lbnQnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdhY2hpZXZlbWVudCcpKTtcclxuXHJcbiAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lJykgPT0gJ2xpZ2h0Jykge1xyXG4gICAgICAgICAgICBpbmRleFBhZ2UuZmluZCgnI3RoZW1lVG9nZ2xlQnRuJykudGV4dCgn6buRJylcclxuICAgICAgICB9IGVsc2V7XHJcbiAgICAgICAgICAgIGluZGV4UGFnZS5maW5kKCcjdGhlbWVUb2dnbGVCdG4nKS50ZXh0KCfnmb0nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5kZXhQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKFwiI3RoZW1lVG9nZ2xlQnRuXCIpXHJcbiAgICAgICAgICAgIC5jbGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWUnKSA9PSAnbGlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lJywgJ2RhcmsnKTtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleFBhZ2UuZmluZCgnI3RoZW1lVG9nZ2xlQnRuJykudGV4dCgn55m9JylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RoZW1lJywgJ2xpZ2h0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhQYWdlLmZpbmQoJyN0aGVtZVRvZ2dsZUJ0bicpLnRleHQoJ+m7kScpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaGVtZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWUnKSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGluZGV4UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3NwZWNpYWx0aGFua3MnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdzcGVjaWFsdGhhbmtzJykpO1xyXG5cclxuICAgICAgICBjb25zdCBzcGVjaWFsVGhhbmtzUGFnZSA9ICQoYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJzcGVjaWFsdGhhbmtzXCI+6L+U5ZuePC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzcHRoeFwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZzFcIj48L3VsPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZzJcIj48L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNwb25zb3JcIiBvbmNsaWNrPVwiZ2xvYmFsVGhpcy5vcGVuKCdodHRwczovL2FmZGlhbi5uZXQvQExpZmVSZXN0YXJ0JylcIiBzdHlsZT1cImJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywjOTQ2Y2U2LCM3ZTVmZDkpOyBsZWZ0OmF1dG87IHJpZ2h0OjUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTJyZW0sLTUwJSk7XCI+5omT6LWP562W5YiSKOeIseWPkeeUtSk8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNwb25zb3JcIiBvbmNsaWNrPVwiZ2xvYmFsVGhpcy5vcGVuKCdodHRwczovL2R1bi5taWFuYmFvZHVvLmNvbS9Admlja3NjYXJsZXQnKVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojYzY5OyBsZWZ0OjUwJTsgcmlnaHQ6YXV0bzsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMnJlbSwtNTAlKTtcIj7miZPotY/nqIvluo8o6aG/6aG/6aWtKTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICBzcGVjaWFsVGhhbmtzUGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3NwZWNpYWx0aGFua3MnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdpbmRleCcpKTtcclxuXHJcbiAgICAgICAgY29uc3QgYWNoaWV2ZW1lbnRQYWdlID0gJChgXHJcbiAgICAgICAgPGRpdiBpZD1cIm1haW5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInNwZWNpYWx0aGFua3NcIj7ov5Tlm548L2J1dHRvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPue7n+iuoTwvc3Bhbj5cclxuICAgICAgICAgICAgPHVsIGlkPVwidG90YWxcIj48L3VsPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInBhZGRpbmc6MC4yNXJlbTsgbWFyZ2luOiAwLjVyZW0gMDsgYm9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjY2NjO1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPuaIkOWwsTxidXR0b24gaWQ9XCJyYW5rXCI+5o6S6KGM5qacPC9idXR0b24+PC9zcGFuPlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJhY2hpZXZlbWVudHNcIj48L3VsPlxyXG4gICAgICAgIGApXHJcblxyXG4gICAgICAgIGFjaGlldmVtZW50UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3NwZWNpYWx0aGFua3MnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PnRoaXMuc3dpdGNoKCdpbmRleCcpKTtcclxuXHJcbiAgICAgICAgYWNoaWV2ZW1lbnRQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjcmFuaycpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+dGhpcy5oaW50KCfliKvljbfkuobvvIzmsqHmnInmjpLooYzmppwnKSk7XHJcbiAgICAgICAgLy8gVGFsZW50XHJcbiAgICAgICAgY29uc3QgdGFsZW50UGFnZSA9ICQoYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNnJlbVwiPuWkqei1i+aKveWNoTwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwicmFuZG9tXCIgY2xhc3M9XCJtYWluYnRuXCIgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHRvcDogNTAlOyBsZWZ0OiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1wiXCI+MTDov57mir3vvIE8L2J1dHRvbj5cclxuICAgICAgICAgICAgPHVsIGlkPVwidGFsZW50c1wiIGNsYXNzPVwic2VsZWN0bGlzdFwiPjwvdWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJuZXh0XCIgY2xhc3M9XCJtYWluYnRuXCI+6K+36YCJ5oupM+S4qjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGApO1xyXG5cclxuICAgICAgICBjb25zdCBjcmVhdGVUYWxlbnQgPSAoeyBncmFkZSwgbmFtZSwgZGVzY3JpcHRpb24gfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gJChgPGxpIGNsYXNzPVwiZ3JhZGUke2dyYWRlfWJcIj4ke25hbWV977yIJHtkZXNjcmlwdGlvbn3vvIk8L2xpPmApXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGFsZW50UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3JhbmRvbScpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGFsZW50UGFnZS5maW5kKCcjcmFuZG9tJykuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdWwgPSB0YWxlbnRQYWdlLmZpbmQoJyN0YWxlbnRzJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNsaWZlLnRhbGVudFJhbmRvbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2godGFsZW50PT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpID0gY3JlYXRlVGFsZW50KHRhbGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVsLmFwcGVuZChsaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihsaS5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdGFsZW50U2VsZWN0ZWQuZGVsZXRlKHRhbGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy4jdGFsZW50U2VsZWN0ZWQuc2l6ZTwzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbGVudFBhZ2UuZmluZCgnI25leHQnKS50ZXh0KCfor7fpgInmi6kz5LiqJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuI3RhbGVudFNlbGVjdGVkLnNpemU9PTMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50KCflj6rog73pgIkz5Liq5aSp6LWLJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1c2l2ZSA9IHRoaXMuI2xpZmUuZXhjbHVzaXZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuI3RhbGVudFNlbGVjdGVkKS5tYXAoKHtpZH0pPT5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbGVudC5pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXhjbHVzaXZlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IHsgbmFtZSwgaWQgfSBvZiB0aGlzLiN0YWxlbnRTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaWQgPT0gZXhjbHVzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50KGDkuI7lt7LpgInmi6nnmoTlpKnotYvjgJAke25hbWV944CR5Yay56qBYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdGFsZW50U2VsZWN0ZWQuYWRkKHRhbGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy4jdGFsZW50U2VsZWN0ZWQuc2l6ZT09Mykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWxlbnRQYWdlLmZpbmQoJyNuZXh0JykudGV4dCgn5byA5aeL5paw5Lq655SfJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGFsZW50UGFnZS5maW5kKCcjbmV4dCcpLnNob3coKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGFsZW50UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI25leHQnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI3RhbGVudFNlbGVjdGVkLnNpemUhPTMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnQoJ+ivt+mAieaLqTPkuKrlpKnotYsnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YWxlbnRQYWdlLmZpbmQoJyNuZXh0JykuaGlkZSgpXHJcbiAgICAgICAgICAgICAgICB0aGlzLiN0b3RhbE1heCA9IDIwICsgdGhpcy4jbGlmZS5nZXRUYWxlbnRBbGxvY2F0aW9uQWRkaXRpb24oQXJyYXkuZnJvbSh0aGlzLiN0YWxlbnRTZWxlY3RlZCkubWFwKCh7aWR9KT0+aWQpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoKCdwcm9wZXJ0eScpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAvLyBQcm9wZXJ0eVxyXG4gICAgICAgIC8vIGhpbnQgb2YgZXh0ZW5zaW9uIHRvYmVybW9yeS5lczYtc3RyaW5nLWh0bWxcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhZ2UgPSAkKC8qaHRtbCovYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNnJlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj7osIPmlbTliJ3lp4vlsZ7mgKc8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0b3RhbFwiIHN0eWxlPVwiZm9udC1zaXplOjFyZW07IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj7lj6/nlKjlsZ7mgKfngrnvvJowPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJwcm9wZXJ0eUFsbG9jYXRpb25cIiBjbGFzcz1cInByb3Bpbml0aWFsXCI+PC91bD5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwic2VsZWN0bGlzdFwiIGlkPVwidGFsZW50U2VsZWN0ZWRWaWV3XCI+PC91bD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1hcmVhXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwicmFuZG9tXCIgY2xhc3M9XCJtYWluYnRuXCI+6ZqP5py65YiG6YWNPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwic3RhcnRcIiBjbGFzcz1cIm1haW5idG5cIj7lvIDlp4vmlrDkurrnlJ88L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCk7XHJcbiAgICAgICAgcHJvcGVydHlQYWdlLm1vdW50ZWQgPSAoKT0+e1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyN0YWxlbnRTZWxlY3RlZFZpZXcnKS5hcHBlbmQoXHJcbiAgICAgICAgICAgICAgICBgPGxpPuW3sumAieWkqei1izwvbGk+YCArXHJcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuI3RhbGVudFNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgLm1hcCgoe25hbWUsZGVzY3JpcHRpb259KT0+YDxsaSBjbGFzcz1cImdyYWRlMGJcIj4ke25hbWV9KCR7ZGVzY3JpcHRpb259KTwvbGk+YClcclxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHRvdGFsID0gKCk9PntcclxuICAgICAgICAgICAgbGV0IHQgPSAwO1xyXG4gICAgICAgICAgICBmb3IoY29uc3QgdHlwZSBpbiBncm91cHMpXHJcbiAgICAgICAgICAgICAgICB0ICs9IGdyb3Vwc1t0eXBlXS5nZXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZyZXNoVG90YWwgPSAoKT0+e1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVBhZ2UuZmluZCgnI3RvdGFsJykudGV4dChg5Y+v55So5bGe5oCn54K577yaJHt0aGlzLiN0b3RhbE1heCAtIHRvdGFsKCl9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGdldEJ0bkdyb3VwcyA9IChuYW1lLCBtaW4sIG1heCk9PntcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSAkKGA8bGk+JHtuYW1lfSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvbGk+YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ0blN1YiA9ICQoYDxzcGFuIGNsYXNzPVwiaWNvbmZvbnQgcHJvcGJ0blwiPiYjeGU2YTU7PC9zcGFuPmApO1xyXG4gICAgICAgICAgICBjb25zdCBpbnB1dEJveCA9ICQoYDxpbnB1dCB2YWx1ZT1cIjBcIj5gKTtcclxuICAgICAgICAgICAgY29uc3QgYnRuQWRkID0gJChgPHNwYW4gY2xhc3M9XCJpY29uZm9udCBwcm9wYnRuXCI+JiN4ZTZhNjs8L3NwYW4+YCk7XHJcbiAgICAgICAgICAgIGdyb3VwLmFwcGVuZChidG5TdWIpO1xyXG4gICAgICAgICAgICBncm91cC5hcHBlbmQoaW5wdXRCb3gpO1xyXG4gICAgICAgICAgICBncm91cC5hcHBlbmQoYnRuQWRkKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gdj0+e1xyXG4gICAgICAgICAgICAgICAgdiA9IE51bWJlcih2KXx8MDtcclxuICAgICAgICAgICAgICAgIHYgPSBNYXRoLnJvdW5kKHYpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHYgPCBtaW4gPyBtaW4gOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdiA+IG1heCA/IG1heCA6IHZcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBnZXQgPSAoKT0+TnVtYmVyKGlucHV0Qm94LnZhbCgpKTtcclxuICAgICAgICAgICAgY29uc3Qgc2V0ID0gdj0+e1xyXG4gICAgICAgICAgICAgICAgaW5wdXRCb3gudmFsKGxpbWl0KHYpKTtcclxuICAgICAgICAgICAgICAgIGZyZXNoVG90YWwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidG5BZGQuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHRvdGFsKCkgPj0gdGhpcy4jdG90YWxNYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnQoJ+ayoeacieWPr+WIhumFjeeahOeCueaVsOS6hicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNldChnZXQoKSsxKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJ0blN1Yi5jbGljaygoKT0+c2V0KGdldCgpLTEpKTtcclxuICAgICAgICAgICAgaW5wdXRCb3gub24oJ2lucHV0JywgKCk9PntcclxuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSB0b3RhbCgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGdldCgpO1xyXG4gICAgICAgICAgICAgICAgaWYodCA+IHRoaXMuI3RvdGFsTWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsIC09IHQgLSB0aGlzLiN0b3RhbE1heDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhbCA9IGxpbWl0KHZhbCk7XHJcbiAgICAgICAgICAgICAgICBpZih2YWwgIT0gaW5wdXRCb3gudmFsKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXQodmFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyZXNoVG90YWwoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7Z3JvdXAsIGdldCwgc2V0fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdyb3Vwcy5DSFIgPSBnZXRCdG5Hcm91cHMoXCLpopzlgLxcIiwgMCwgMTApOyAvLyDpopzlgLwgY2hhcm0gQ0hSXHJcbiAgICAgICAgZ3JvdXBzLklOVCA9IGdldEJ0bkdyb3VwcyhcIuaZuuWKm1wiLCAwLCAxMCk7IC8vIOaZuuWKmyBpbnRlbGxpZ2VuY2UgSU5UXHJcbiAgICAgICAgZ3JvdXBzLlNUUiA9IGdldEJ0bkdyb3VwcyhcIuS9k+i0qFwiLCAwLCAxMCk7IC8vIOS9k+i0qCBzdHJlbmd0aCBTVFJcclxuICAgICAgICBncm91cHMuTU5ZID0gZ2V0QnRuR3JvdXBzKFwi5a625aKDXCIsIDAsIDEwKTsgLy8g5a625aKDIG1vbmV5IE1OWVxyXG5cclxuICAgICAgICBjb25zdCB1bCA9IHByb3BlcnR5UGFnZS5maW5kKCcjcHJvcGVydHlBbGxvY2F0aW9uJyk7XHJcblxyXG4gICAgICAgIGZvcihjb25zdCB0eXBlIGluIGdyb3Vwcykge1xyXG4gICAgICAgICAgICB1bC5hcHBlbmQoZ3JvdXBzW3R5cGVdLmdyb3VwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByb3BlcnR5UGFnZVxyXG4gICAgICAgICAgICAuZmluZCgnI3JhbmRvbScpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgbGV0IHQgPSB0aGlzLiN0b3RhbE1heDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IFsxMCwgMTAsIDEwLCAxMF07XHJcbiAgICAgICAgICAgICAgICB3aGlsZSh0PjApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAoTWF0aC5taW4odCwgMTApIC0gMSkpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDQpICUgNDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXJyW3NlbGVjdF0gLSBzdWIgPDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbc2VsZWN0XSAtPSBzdWI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgLT0gc3ViO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBncm91cHMuQ0hSLnNldCgxMCAtIGFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cHMuSU5ULnNldCgxMCAtIGFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cHMuU1RSLnNldCgxMCAtIGFyclsyXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cHMuTU5ZLnNldCgxMCAtIGFyclszXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBwcm9wZXJ0eVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNzdGFydCcpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYodG90YWwoKSA8IHRoaXMuI3RvdGFsTWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaW50KGDkvaDov5jmnIkke3RoaXMuI3RvdGFsTWF4LXRvdGFsKCl95bGe5oCn54K55rKh5pyJ5YiG6YWN5a6MYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b3RhbCgpID4gdGhpcy4jdG90YWxNYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnQoYOS9oOWkmuS9v+eUqOS6hiR7dG90YWwoKSAtIHRoaXMuI3RvdGFsTWF4feWxnuaAp+eCuWApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuI2xpZmUucmVzdGFydCh7XHJcbiAgICAgICAgICAgICAgICAgICAgQ0hSOiBncm91cHMuQ0hSLmdldCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIElOVDogZ3JvdXBzLklOVC5nZXQoKSxcclxuICAgICAgICAgICAgICAgICAgICBTVFI6IGdyb3Vwcy5TVFIuZ2V0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgTU5ZOiBncm91cHMuTU5ZLmdldCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIFNQUjogNSxcclxuICAgICAgICAgICAgICAgICAgICBUTFQ6IEFycmF5LmZyb20odGhpcy4jdGFsZW50U2VsZWN0ZWQpLm1hcCgoe2lkfSk9PmlkKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2l0Y2goJ3RyYWplY3RvcnknKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2VzLnRyYWplY3RvcnkuYm9ybigpO1xyXG4gICAgICAgICAgICAgICAgLy8gJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihldmVudCl7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYoZXZlbnQud2hpY2ggPT0gMzIgfHwgZXZlbnQud2hpY2ggPT0gMTMpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAkKCcjbGlmZVRyYWplY3RvcnknKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUcmFqZWN0b3J5XHJcbiAgICAgICAgY29uc3QgdHJhamVjdG9yeVBhZ2UgPSAkKGBcclxuICAgICAgICA8ZGl2IGlkPVwibWFpblwiPlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJsaWZlUHJvcGVydHlcIiBjbGFzcz1cImxpZmVQcm9wZXJ0eVwiPjwvdWw+XHJcbiAgICAgICAgICAgIDx1bCBpZD1cImxpZmVUcmFqZWN0b3J5XCIgY2xhc3M9XCJsaWZlVHJhamVjdG9yeVwiPjwvdWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tYXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImF1dG9cIiBjbGFzcz1cIm1haW5idG5cIj7oh6rliqjmkq3mlL48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJhdXRvMnhcIiBjbGFzcz1cIm1haW5idG5cIj7oh6rliqjmkq3mlL4yeDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cInN1bW1hcnlcIiBjbGFzcz1cIm1haW5idG5cIj7kurrnlJ/mgLvnu5M8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJkb21Ub0ltYWdlXCIgY2xhc3M9XCJtYWluYnRuXCI+5Lq655Sf5Zue5pS+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9tVG9JbWFnZTJ3eFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJcIiBpZD1cImVuZEltYWdlXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCk7XHJcblxyXG4gICAgICAgIHRyYWplY3RvcnlQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjbGlmZVRyYWplY3RvcnknKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuI2lzRW5kKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFqZWN0b3J5ID0gdGhpcy4jbGlmZS5uZXh0KCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFnZSwgY29udGVudCwgaXNFbmQgfSA9IHRyYWplY3Rvcnk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaSA9ICQoYDxsaT48c3Bhbj4ke2FnZX3lsoHvvJo8L3NwYW4+PHNwYW4+JHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50Lm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHt0eXBlLCBkZXNjcmlwdGlvbiwgZ3JhZGUsIG5hbWUsIHBvc3RFdmVudH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVExUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGDlpKnotYvjgJAke25hbWV944CR5Y+R5Yqo77yaJHtkZXNjcmlwdGlvbn1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VWVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbiArIChwb3N0RXZlbnQ/YDxicj4ke3Bvc3RFdmVudH1gOicnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICkuam9pbignPGJyPicpXHJcbiAgICAgICAgICAgICAgICB9PC9zcGFuPjwvbGk+YCk7XHJcbiAgICAgICAgICAgICAgICBsaS5hcHBlbmRUbygnI2xpZmVUcmFqZWN0b3J5Jyk7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2xpZmVUcmFqZWN0b3J5XCIpLnNjcm9sbFRvcCgkKFwiI2xpZmVUcmFqZWN0b3J5XCIpWzBdLnNjcm9sbEhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZihpc0VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnVuYmluZChcImtleWRvd25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaXNFbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNzdW1tYXJ5Jykuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNhdXRvJykuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNhdXRvMngnKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJhamVjdG9yeVBhZ2UuZmluZCgnI2RvbVRvSW1hZ2UnKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWmguacquatu+S6oe+8jOabtOaWsOaVsOWAvFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzIGlmIG5vdCBkaWUgeWV0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLiNsaWZlLmdldExhc3RSZWNvcmQoKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI2xpZmVQcm9wZXJ0eVwiKS5odG1sKGBcclxuICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4+6aKc5YC8PC9zcGFuPjxzcGFuPiR7cHJvcGVydHkuQ0hSfTwvc3Bhbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaT48c3Bhbj7mmbrlips8L3NwYW4+PHNwYW4+JHtwcm9wZXJ0eS5JTlR9PC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPjxzcGFuPuS9k+i0qDwvc3Bhbj48c3Bhbj4ke3Byb3BlcnR5LlNUUn08L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+PHNwYW4+5a625aKDPC9zcGFuPjxzcGFuPiR7cHJvcGVydHkuTU5ZfTwvc3Bhbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaT48c3Bhbj7lv6vkuZA8L3NwYW4+PHNwYW4+JHtwcm9wZXJ0eS5TUFJ9PC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGh0bWwyY2FudmFzXHJcbiAgICAgICAgdHJhamVjdG9yeVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNkb21Ub0ltYWdlJylcclxuICAgICAgICAgICAgLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICAkKFwiI2xpZmVUcmFqZWN0b3J5XCIpLmFkZENsYXNzKFwiZGVsZXRlRml4ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGRvbXRvaW1hZ2UudG9KcGVnKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaWZlVHJhamVjdG9yeScpKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gJ+aIkeeahOS6uueUn+WbnuaUvi5qcGVnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gZGF0YVVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2xpZmVUcmFqZWN0b3J5XCIpLnJlbW92ZUNsYXNzKFwiZGVsZXRlRml4ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOW+ruS/oeWGhee9rua1j+iniOWZqO+8jOaYvuekuuWbvueJh++8jOmcgOimgeeUqOaIt+WNleeLrOS/neWtmFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih1YS5tYXRjaCgvTWljcm9NZXNzZW5nZXIvaSk9PVwibWljcm9tZXNzZW5nZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2VuZEltYWdlJykuYXR0cignc3JjJywgZGF0YVVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5oaWRlKCk7XHJcblxyXG4gICAgICAgIHRyYWplY3RvcnlQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjc3VtbWFyeScpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNhdXRvVHJhamVjdG9yeSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNhdXRvVHJhamVjdG9yeSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXRjaCgnc3VtbWFyeScpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgYXV0byA9IHRpY2s9PntcclxuICAgICAgICAgICAgaWYodGhpcy4jYXV0b1RyYWplY3RvcnkpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4jYXV0b1RyYWplY3RvcnkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jYXV0b1RyYWplY3RvcnkgPSBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXNFbmQpXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhamVjdG9yeVBhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJyNsaWZlVHJhamVjdG9yeScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jYXV0b1RyYWplY3RvcnkgPSBzZXRJbnRlcnZhbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNFbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiNhdXRvVHJhamVjdG9yeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2F1dG9UcmFqZWN0b3J5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFqZWN0b3J5UGFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJyNsaWZlVHJhamVjdG9yeScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCB0aWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyYWplY3RvcnlQYWdlXHJcbiAgICAgICAgICAgIC5maW5kKCcjYXV0bycpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+YXV0bygxMDAwKSk7XHJcbiAgICAgICAgdHJhamVjdG9yeVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNhdXRvMngnKVxyXG4gICAgICAgICAgICAuY2xpY2soKCk9PmF1dG8oNTAwKSk7XHJcblxyXG4gICAgICAgIC8vIFN1bW1hcnlcclxuICAgICAgICBjb25zdCBzdW1tYXJ5UGFnZSA9ICQoYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJtYWluXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkXCI+5Lq655Sf5oC757uTPC9kaXY+XHJcbiAgICAgICAgICAgIDx1bCBpZD1cImp1ZGdlXCIgY2xhc3M9XCJqdWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZ3JhZGUyXCI+PHNwYW4+6aKc5YC877yaPC9zcGFuPjxzcGFuPjnnuqcg576O6Iul5aSp5LuZPC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJncmFkZTBcIj48c3Bhbj7mmbrlipvvvJo8L3NwYW4+PHNwYW4+NOe6pyDmmbrlipvkuIDoiKw8L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImdyYWRlMFwiPjxzcGFuPuS9k+i0qO+8mjwvc3Bhbj48c3Bhbj4x57qnIOaegeW6puiZmuW8sTwvc3Bhbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZ3JhZGUwXCI+PHNwYW4+5a625aKD77yaPC9zcGFuPjxzcGFuPjbnuqcg5bCP5bq35LmL5a62PC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJncmFkZTBcIj48c3Bhbj7kuqvlubTvvJo8L3NwYW4+PHNwYW4+M+WygSDml6nlpK08L3NwYW4+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImdyYWRlMFwiPjxzcGFuPuW/q+S5kO+8mjwvc3Bhbj48c3Bhbj48L3NwYW4+M+e6pyDkuI3lpKrlubjnpo/nmoTkurrnlJ88L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiIHN0eWxlPVwiaGVpZ2h0OmF1dG87XCI+5aSp6LWL77yM5L2g5Y+v5Lul6YCJ5LiA5Liq77yM5LiL6L6I5a2Q6L+Y6IO95oq95YiwPC9kaXY+XHJcbiAgICAgICAgICAgIDx1bCBpZD1cInRhbGVudHNcIiBjbGFzcz1cInNlbGVjdGxpc3RcIiBzdHlsZT1cImZsZXg6IDAgMSBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZ3JhZGUyYlwiPum7keW5le+8iOmdouivleS4gOWumuaIkOWKn++8iTwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJhZ2FpblwiIGNsYXNzPVwibWFpbmJ0blwiPjxzcGFuIGNsYXNzPVwiaWNvbmZvbnRcIj4mI3hlNmE3Ozwvc3Bhbj7lho3mrKHph43lvIA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBgKTtcclxuXHJcbiAgICAgICAgc3VtbWFyeVBhZ2VcclxuICAgICAgICAgICAgLmZpbmQoJyNhZ2FpbicpXHJcbiAgICAgICAgICAgIC5jbGljaygoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcyArKztcclxuICAgICAgICAgICAgICAgIHRoaXMuI2xpZmUudGFsZW50RXh0ZW5kKHRoaXMuI3NlbGVjdGVkRXh0ZW5kVGFsZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3NlbGVjdGVkRXh0ZW5kVGFsZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3RhbGVudFNlbGVjdGVkLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiN0b3RhbE1heCA9IDIwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jaXNFbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoKCdpbmRleCcpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy4jcGFnZXMgPSB7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IGxvYWRpbmdQYWdlLFxyXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3VycmVudFBhZ2UgPSAnbG9hZGluZyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpbmRleDoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogaW5kZXhQYWdlLFxyXG4gICAgICAgICAgICAgICAgYnRuQWNoaWV2ZW1lbnQ6IGluZGV4UGFnZS5maW5kKCcjYWNoaWV2ZW1lbnQnKSxcclxuICAgICAgICAgICAgICAgIGJ0blJlc3RhcnQ6IGluZGV4UGFnZS5maW5kKCcjcmVzdGFydCcpLFxyXG4gICAgICAgICAgICAgICAgaGludDogaW5kZXhQYWdlLmZpbmQoJy5oaW50JyksXHJcbiAgICAgICAgICAgICAgICBwcmVzc0VudGVyOiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2VzLmluZGV4LmJ0blJlc3RhcnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjdXJyZW50UGFnZSA9ICdpbmRleCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhQYWdlLmZpbmQoJy5oaW50JykuaGlkZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lcyA9IHRoaXMudGltZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNoaWV2ZW1lbnQgPSBpbmRleFBhZ2UuZmluZCgnI2FjaGlldmVtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzY29yZCA9IGluZGV4UGFnZS5maW5kKCcjZGlzY29yZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWNpYWx0aGFua3MgPSBpbmRleFBhZ2UuZmluZCgnI3NwZWNpYWx0aGFua3MnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGltZXMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjaGlldmVtZW50LnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY29yZC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWx0aGFua3Muc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBhY2hpZXZlbWVudC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzY29yZC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BlY2lhbHRoYW5rcy5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzcGVjaWFsdGhhbmtzOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiBzcGVjaWFsVGhhbmtzUGFnZSxcclxuICAgICAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsVGhhbmtzUGFnZS5maW5kKCcjc3B0aHggPiB1bC5nMScpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsVGhhbmtzUGFnZS5maW5kKCcjc3B0aHggPiB1bC5nMicpLFxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goZz0+Zy5lbXB0eSgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNzcGVjaWFsdGhhbmtzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCgpPT4wLjUtTWF0aC5yYW5kb20oKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHtncm91cCwgbmFtZSwgY29tbWVudCwgY29sb3J9KT0+Z3JvdXBzWy0tZ3JvdXBdLmFwcGVuZChgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCIgJHtjb2xvcj8oJ3N0eWxlPVwiY29sb3I6Jytjb2xvcisnXCInKTonJ30+JHtuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1lbnRcIj4ke2NvbW1lbnR8fCcnfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGApKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhY2hpZXZlbWVudDoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogYWNoaWV2ZW1lbnRQYWdlLFxyXG4gICAgICAgICAgICAgICAgY2xlYXI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IGFjaGlldmVtZW50UGFnZS5maW5kKFwidWwjdG90YWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNoaWV2ZW1lbnRzID0gYWNoaWV2ZW1lbnRQYWdlLmZpbmQoXCJ1bCNhY2hpZXZlbWVudHNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICBhY2hpZXZlbWVudHMuZW1wdHkoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0UmF0ZSA9ICh0eXBlLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYXRlID0gZ2V0UmF0ZSh0eXBlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xvciA9IE9iamVjdC5rZXlzKHJhdGUpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocGFyc2VJbnQoY29sb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNvbG9yID0gJ+eZveiJsic7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBjb2xvciA9ICfok53oibInOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogY29sb3IgPSAn57Sr6ImyJzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IGNvbG9yID0gJ+apmeiJsic7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBPYmplY3QudmFsdWVzKHJhdGUpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocGFyc2VJbnQocikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogciA9ICfkuI3lj5gnOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogciA9ICfnv7vlgI0nOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogciA9ICfkuInlgI0nOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogciA9ICflm5vlgI0nOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogciA9ICfkupTlgI0nOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogciA9ICflha3lgI0nOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBg5oq95YiwJHtjb2xvcn3mpoLnjocke3J9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGltZXMsIGFjaGlldmVtZW50LCB0YWxlbnRSYXRlLCBldmVudFJhdGUgfSA9IHRoaXMuI2xpZmUuZ2V0VG90YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbC5hcHBlbmQoYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJhY2h2ZyR7Z2V0R3JhZGUoJ3RpbWVzJywgdGltZXMpfVwiPjxzcGFuIGNsYXNzPVwiYWNoaWV2ZW1lbnR0aXRsZVwiPuW3sumHjeW8gCR7dGltZXN95qyhPC9zcGFuPiR7Zm9ybWF0UmF0ZSgndGltZXMnLCB0aW1lcyl9PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYWNodmcke2dldEdyYWRlKCdhY2hpZXZlbWVudCcsIGFjaGlldmVtZW50KX1cIj48c3BhbiBjbGFzcz1cImFjaGlldmVtZW50dGl0bGVcIj7miJDlsLHovr7miJAke2FjaGlldmVtZW50feS4qjwvc3Bhbj4ke2Zvcm1hdFJhdGUoJ2FjaGlldmVtZW50JywgYWNoaWV2ZW1lbnQpfTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImFjaHZnJHtnZXRHcmFkZSgnZXZlbnRSYXRlJywgZXZlbnRSYXRlKX1cIj48c3BhbiBjbGFzcz1cImFjaGlldmVtZW50dGl0bGVcIj7kuovku7bmlLbpm4bnjoc8L3NwYW4+JHtNYXRoLmZsb29yKGV2ZW50UmF0ZSAqIDEwMCl9JTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImFjaHZnJHtnZXRHcmFkZSgndGFsZW50UmF0ZScsIHRhbGVudFJhdGUpfVwiPjxzcGFuIGNsYXNzPVwiYWNoaWV2ZW1lbnR0aXRsZVwiPuWkqei1i+aUtumbhueOhzwvc3Bhbj4ke01hdGguZmxvb3IodGFsZW50UmF0ZSAqIDEwMCl9JTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjaGlldmVtZW50c0RhdGEgPSB0aGlzLiNsaWZlLmdldEFjaGlldmVtZW50cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFjaGlldmVtZW50c0RhdGEuZm9yRWFjaCgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwgaGlkZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGUsIGlzQWNoaWV2ZWRcclxuICAgICAgICAgICAgICAgICAgICB9KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoaWRlICYmICFpc0FjaGlldmVkKSBuYW1lID0gZGVzY3JpcHRpb24gPSAnPz8/JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNoaWV2ZW1lbnRzLmFwcGVuZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA8bGkgY2xhc3M9XCJhY2h2ZyR7Z3JhZGV9ICR7aXNBY2hpZXZlZD8nJzonbWFzayd9XCI+PHNwYW4gY2xhc3M9XCJhY2hpZXZlbWVudHRpdGxlXCI+JHtuYW1lfTwvc3Bhbj4ke2Rlc2NyaXB0aW9ufTwvbGk+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0YWxlbnQ6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRhbGVudFBhZ2UsXHJcbiAgICAgICAgICAgICAgICB0YWxlbnRMaXN0OiB0YWxlbnRQYWdlLmZpbmQoJyN0YWxlbnRzJyksXHJcbiAgICAgICAgICAgICAgICBidG5SYW5kb206IHRhbGVudFBhZ2UuZmluZCgnI3JhbmRvbScpLFxyXG4gICAgICAgICAgICAgICAgYnRuTmV4dDogdGFsZW50UGFnZS5maW5kKCcjbmV4dCcpLFxyXG4gICAgICAgICAgICAgICAgcHJlc3NFbnRlcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWxlbnRMaXN0ID0gdGhpcy4jcGFnZXMudGFsZW50LnRhbGVudExpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnRuUmFuZG9tID0gdGhpcy4jcGFnZXMudGFsZW50LmJ0blJhbmRvbTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBidG5OZXh0ID0gdGhpcy4jcGFnZXMudGFsZW50LmJ0bk5leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhbGVudExpc3QuY2hpbGRyZW4oKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnRuTmV4dC5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ0blJhbmRvbS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjdXJyZW50UGFnZSA9ICd0YWxlbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhbGVudFBhZ2UuZmluZCgndWwuc2VsZWN0bGlzdCcpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFsZW50UGFnZS5maW5kKCcjcmFuZG9tJykuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3RvdGFsTWF4ID0gMjA7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwcm9wZXJ0eToge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogcHJvcGVydHlQYWdlLFxyXG4gICAgICAgICAgICAgICAgYnRuU3RhcnQ6IHByb3BlcnR5UGFnZS5maW5kKCcjc3RhcnQnKSxcclxuICAgICAgICAgICAgICAgIHByZXNzRW50ZXI6ICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcGFnZXMucHJvcGVydHkuYnRuU3RhcnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjdXJyZW50UGFnZSA9ICdwcm9wZXJ0eSc7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJlc2hUb3RhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5UGFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnI3RhbGVudFNlbGVjdGVkVmlldycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdHJhamVjdG9yeToge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdHJhamVjdG9yeVBhZ2UsXHJcbiAgICAgICAgICAgICAgICBsaWZlVHJhamVjdG9yeTogdHJhamVjdG9yeVBhZ2UuZmluZCgnI2xpZmVUcmFqZWN0b3J5JyksXHJcbiAgICAgICAgICAgICAgICBwcmVzc0VudGVyOiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2VzLnRyYWplY3RvcnkubGlmZVRyYWplY3RvcnkuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjdXJyZW50UGFnZSA9ICd0cmFqZWN0b3J5JztcclxuICAgICAgICAgICAgICAgICAgICB0cmFqZWN0b3J5UGFnZS5maW5kKCcjbGlmZVRyYWplY3RvcnknKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNzdW1tYXJ5JykuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNhdXRvJykuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNhdXRvMngnKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaXNFbmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBib3JuOiAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWplY3RvcnlQYWdlLmZpbmQoJyNsaWZlVHJhamVjdG9yeScpLnRyaWdnZXIoXCJjbGlja1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VtbWFyeToge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogc3VtbWFyeVBhZ2UsXHJcbiAgICAgICAgICAgICAgICBjbGVhcjogKCk9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNjdXJyZW50UGFnZSA9ICdzdW1tYXJ5JztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqdWRnZSA9IHN1bW1hcnlQYWdlLmZpbmQoJyNqdWRnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhbGVudHMgPSBzdW1tYXJ5UGFnZS5maW5kKCcjdGFsZW50cycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGp1ZGdlLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFsZW50cy5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFeHRlbmRUYWxlbnQgPSB0aGlzLiNsaWZlLmdldExhc3RFeHRlbmRUYWxlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBBcnJheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZnJvbSh0aGlzLiN0YWxlbnRTZWxlY3RlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lkOmEsIGdyYWRlOmFnfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpZDpiLCBncmFkZTpiZ30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGEgPT0gbGFzdEV4dGVuZFRhbGVudCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYiA9PSBsYXN0RXh0ZW5kVGFsZW50KSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiZyAtIGFnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgodGFsZW50LCBpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGkgPSBjcmVhdGVUYWxlbnQodGFsZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhbGVudHMuYXBwZW5kKGxpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpLmNsaWNrKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGkuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2VsZWN0ZWRFeHRlbmRUYWxlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYodGhpcy4jc2VsZWN0ZWRFeHRlbmRUYWxlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnQoJ+WPquiDvee7p+aJv+S4gOS4quWkqei1iycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jc2VsZWN0ZWRFeHRlbmRUYWxlbnQgPSB0YWxlbnQuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWkpIGxpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuI2xpZmUuZ2V0U3VtbWFyeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IChkaXNjcmlwdGlvbiwgdHlwZSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzdW1tYXJ5RGF0YVt0eXBlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBqdWRnZSwgZ3JhZGUgfSA9IHN1bW1hcnkodHlwZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxsaSBjbGFzcz1cImdyYWRlJHtncmFkZX1cIj48c3Bhbj4ke2Rpc2NyaXB0aW9ufe+8mjwvc3Bhbj48c3Bhbj4ke3ZhbHVlfSAke2p1ZGdlfTwvc3Bhbj48L2xpPmA7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAganVkZ2UuYXBwZW5kKGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+minOWAvCcsICdDSFInKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+aZuuWKmycsICdJTlQnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+S9k+i0qCcsICdTVFInKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+WutuWigycsICdNTlknKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+W/q+S5kCcsICdTUFInKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+S6q+W5tCcsICdBR0UnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHtmb3JtYXQoJ+aAu+ivhCcsICdTVU0nKX1cclxuICAgICAgICAgICAgICAgICAgICBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQkb24oJ2FjaGlldmVtZW50JywgKHtuYW1lfSk9PntcclxuICAgICAgICAgICAgdGhpcy5oaW50KGDop6PplIHmiJDlsLHjgJAke25hbWV944CRYCwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaChwYWdlKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhZ2VzW3BhZ2VdO1xyXG4gICAgICAgIGlmKCFwKSByZXR1cm47XHJcbiAgICAgICAgJCgnI21haW4nKS5kZXRhY2goKTtcclxuICAgICAgICBwLmNsZWFyKCk7XHJcbiAgICAgICAgcC5wYWdlLmFwcGVuZFRvKCdib2R5Jyk7XHJcbiAgICAgICAgaWYodHlwZW9mIHAucGFnZS5tb3VudGVkID09PSAnZnVuY3Rpb24nKXtcclxuICAgICAgICAgICAgcC5wYWdlLm1vdW50ZWQoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoaW50KG1lc3NhZ2UsIHR5cGU9J2luZm8nKSB7XHJcbiAgICAgICAgaWYodGhpcy4jaGludFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuI2hpbnRUaW1lb3V0KTtcclxuICAgICAgICAgICAgdGhpcy4jaGludFRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWRlQmFubmVycygpO1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhbm5lciA9ICQoYC5iYW5uZXIuJHt0eXBlfWApO1xyXG4gICAgICAgICAgICBiYW5uZXIuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcclxuICAgICAgICAgICAgYmFubmVyLmZpbmQoJy5iYW5uZXItbWVzc2FnZScpLnRleHQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGlmKHR5cGUgIT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jaGludFRpbWVvdXQgPSBzZXRUaW1lb3V0KGhpZGVCYW5uZXJzLCAzMDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRoZW1lKHRoZW1lKSB7XHJcbiAgICAgICAgY29uc3QgdGhlbWVMaW5rID0gJChkb2N1bWVudCkuZmluZCgnI3RoZW1lTGluaycpO1xyXG5cclxuICAgICAgICBpZih0aGVtZSA9PSAnbGlnaHQnKSB7XHJcbiAgICAgICAgICAgIHRoZW1lTGluay5hdHRyKCdocmVmJywgJ2xpZ2h0LmNzcycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoZW1lTGluay5hdHRyKCdocmVmJywgJ2RhcmsuY3NzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0aW1lcygpIHtyZXR1cm4gdGhpcy4jbGlmZT8udGltZXMgfHwgMDt9XHJcbiAgICBzZXQgdGltZXModikgeyBpZih0aGlzLiNsaWZlKSB0aGlzLiNsaWZlLnRpbWVzID0gdiB9O1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXBwO1xyXG4iLCJpbXBvcnQgQXBwIGZyb20gJy4uL3NyYy9hcHAuanMnO1xyXG5cclxuZ2xvYmFsVGhpcy4kJGV2ZW50TWFwID0gbmV3IE1hcCgpO1xyXG5nbG9iYWxUaGlzLiQkZXZlbnQgPSAodGFnLCBkYXRhKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ZW5lciA9ICQkZXZlbnRNYXAuZ2V0KHRhZyk7XHJcbiAgICBpZihsaXN0ZW5lcikgbGlzdGVuZXIuZm9yRWFjaChmbj0+Zm4oZGF0YSkpO1xyXG59XHJcbmdsb2JhbFRoaXMuJCRvbiA9ICh0YWcsIGZuKSA9PiB7XHJcbiAgICBsZXQgbGlzdGVuZXIgPSAkJGV2ZW50TWFwLmdldCh0YWcpO1xyXG4gICAgaWYoIWxpc3RlbmVyKSB7XHJcbiAgICAgICAgbGlzdGVuZXIgPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgJCRldmVudE1hcC5zZXQodGFnLCBsaXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgICBsaXN0ZW5lci5hZGQoZm4pO1xyXG59XHJcbmdsb2JhbFRoaXMuJCRvZmYgPSAodGFnLCBmbikgPT4ge1xyXG4gICAgY29uc3QgbGlzdGVuZXIgPSAkJGV2ZW50TWFwLmdldCh0YWcpO1xyXG4gICAgaWYobGlzdGVuZXIpIGxpc3RlbmVyLmRlbGV0ZShmbik7XHJcbn1cclxuXHJcbmdsb2JhbFRoaXMuanNvbiA9IGFzeW5jIGZpbGVOYW1lID0+IGF3YWl0IChhd2FpdCBmZXRjaChgLi4vZGF0YS8ke2ZpbGVOYW1lfS5qc29uYCkpLmpzb24oKTtcclxuXHJcbi8vIFBzc3N0LCBJJ3ZlIGNyZWF0ZWQgYSBnaXRodWIgcGFja2FnZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9icm9va2VzYjkxL2Rpc21pc3NpYmxlXHJcbmdsb2JhbFRoaXMuaGlkZUJhbm5lcnMgPSAoZSkgPT4ge1xyXG4gICAgZG9jdW1lbnRcclxuICAgICAgICAucXVlcnlTZWxlY3RvckFsbChcIi5iYW5uZXIudmlzaWJsZVwiKVxyXG4gICAgICAgIC5mb3JFYWNoKChiKSA9PiBiLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXNpYmxlXCIpKTtcclxufTtcclxuXHJcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcclxuYXBwLmluaXRpYWwoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3785\n')}},__webpack_module_cache__={};function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var __webpack_exports__=__webpack_require__(3785)})();