tag. We found the following text: ' + text);\n var wrapper = document.createElement('span');\n wrapper.innerHTML = addedNode.nodeValue;\n addedNode.parentNode.insertBefore(wrapper, addedNode);\n addedNode.parentNode.removeChild(addedNode);\n }\n }\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n }).observe(_this5, {\n childList: true\n });\n return _this5;\n }\n _inherits(Article, _HTMLElement2);\n return _createClass(Article, null, [{\n key: \"is\",\n get: function get() {\n return 'd-article';\n }\n }]);\n }( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {};\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n var bibtexParse = createCommonjsModule(function (module, exports) {\n /* start bibtexParse 0.0.22 */\n\n //Original work by Henrik Muehe (c) 2010\n //\n //CommonJS port by Mikola Lysenko 2013\n //\n //Port to Browser lib by ORCID / RCPETERS\n //\n //Issues:\n //no comment handling within strings\n //no string concatenation\n //no variable values yet\n //Grammar implemented here:\n //bibtex -> (string | preamble | comment | entry)*;\n //string -> '@STRING' '{' key_equals_value '}';\n //preamble -> '@PREAMBLE' '{' value '}';\n //comment -> '@COMMENT' '{' value '}';\n //entry -> '@' key '{' key ',' key_value_list '}';\n //key_value_list -> key_equals_value (',' key_equals_value)*;\n //key_equals_value -> key '=' value;\n //value -> value_quotes | value_braces | key;\n //value_quotes -> '\"' .*? '\"'; // not quite\n //value_braces -> '{' .*? '\"'; // not quite\n (function (exports) {\n function BibtexParser() {\n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',', '{', '}', ' ', '='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n this.currentEntry = \"\";\n this.setInput = function (t) {\n this.input = t;\n };\n this.getEntries = function () {\n return this.entries;\n };\n this.isWhitespace = function (s) {\n return s == ' ' || s == '\\r' || s == '\\t' || s == '\\n';\n };\n this.match = function (s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \" + this.input.substring(this.pos);\n }\n this.skipWhitespace(canCommentOut);\n };\n this.tryMatch = function (s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null) canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n }\n };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function () {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n }\n if (this.input[this.pos] == '@') {\n return true;\n }\n return false;\n };\n this.skipWhitespace = function (canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n }\n if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n }\n this.skipWhitespace(canCommentOut);\n }\n };\n this.value_braces = function () {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n }\n } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n }\n }\n if (this.input[this.pos] == '\\\\' && escaped == false) escaped = true;else escaped = false;\n this.pos++;\n }\n };\n this.value_comment = function () {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{') brcktCnt++;\n if (this.input[this.pos] == '}') brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n }\n this.pos++;\n }\n return str;\n };\n this.value_quotes = function () {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n }\n }\n if (this.input[this.pos] == '\\\\' && escaped == false) escaped = true;else escaped = false;\n this.pos++;\n }\n };\n this.single_value = function () {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\")) return k;else if (this.months.indexOf(k.toLowerCase()) >= 0) return k.toLowerCase();else throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n }\n };\n this.value = function () {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n }\n return values.join(\"\");\n };\n this.key = function () {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n } // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n }\n }\n };\n this.key_equals_value = function () {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [key, val];\n } else {\n throw \"... = value expected, equals sign missing:\" + this.input.substring(this.pos);\n }\n };\n this.key_value_list = function () {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n }\n };\n this.entry_body = function (d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key();\n this.currentEntry['entryType'] = d.substring(1);\n this.match(\",\");\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n this.directive = function () {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n this.preamble = function () {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n this.comment = function () {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n this.entry = function (d) {\n this.entry_body(d);\n };\n this.bibtex = function () {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n }\n };\n }\n exports.toJSON = function (bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function (json) {\n var out = '';\n for (var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey) out += json[i].citationKey + ', ';\n if (json[i].entry) out += json[i].entry;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0) tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n };\n })(exports);\n\n /* end bibtexParse */\n });\n\n // Copyright 2018 The Distill Template Authors\n\n function normalizeTag(string) {\n return string.replace(/[\\t\\n ]+/g, ' ').replace(/{\\\\[\"^`.'acu~Hvs]( )?([a-zA-Z])}/g, function (full, x, _char) {\n return _char;\n }).replace(/{\\\\([a-zA-Z])}/g, function (full, _char2) {\n return _char2;\n });\n }\n function parseBibtex(bibtex) {\n var bibliography = new Map();\n var parsedEntries = bibtexParse.toJSON(bibtex);\n var _iterator14 = _createForOfIteratorHelper(parsedEntries),\n _step14;\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var entry = _step14.value;\n // normalize tags; note entryTags is an object, not Map\n for (var _i = 0, _Object$entries = Object.entries(entry.entryTags); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n key = _Object$entries$_i[0],\n value = _Object$entries$_i[1];\n entry.entryTags[key.toLowerCase()] = normalizeTag(value);\n }\n entry.entryTags.type = entry.entryType;\n // add to bibliography\n bibliography.set(entry.citationKey, entry.entryTags);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n return bibliography;\n }\n function serializeFrontmatterToBibtex(frontMatter) {\n return \"@article{\".concat(frontMatter.slug, \",\\n author = {\").concat(frontMatter.bibtexAuthors, \"},\\n title = {\").concat(frontMatter.title, \"},\\n journal = {\").concat(frontMatter.journal.title, \"},\\n year = {\").concat(frontMatter.publishedYear, \"},\\n note = {\").concat(frontMatter.url, \"},\\n doi = {\").concat(frontMatter.doi, \"}\\n}\");\n }\n\n // Copyright 2018 The Distill Template Authors\n var Bibliography = /*#__PURE__*/function (_HTMLElement3) {\n function Bibliography() {\n var _this6;\n _classCallCheck(this, Bibliography);\n _this6 = _callSuper(this, Bibliography);\n\n // set up mutation observer\n var options = {\n childList: true,\n characterData: true,\n subtree: true\n };\n var observer = new MutationObserver(function (entries) {\n var _iterator15 = _createForOfIteratorHelper(entries),\n _step15;\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var entry = _step15.value;\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n _this6.parseIfPossible();\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n });\n observer.observe(_this6, options);\n return _this6;\n }\n _inherits(Bibliography, _HTMLElement3);\n return _createClass(Bibliography, [{\n key: \"connectedCallback\",\n value: function connectedCallback() {\n var _this7 = this;\n requestAnimationFrame(function () {\n _this7.parseIfPossible();\n });\n }\n }, {\n key: \"parseIfPossible\",\n value: function parseIfPossible() {\n var scriptTag = this.querySelector('script');\n if (!scriptTag) return;\n if (scriptTag.type == 'text/bibtex') {\n var newBibtex = scriptTag.textContent;\n if (this.bibtex !== newBibtex) {\n this.bibtex = newBibtex;\n var bibliography = parseBibtex(this.bibtex);\n this.notify(bibliography);\n }\n } else if (scriptTag.type == 'text/json') {\n var _bibliography = new Map(JSON.parse(scriptTag.textContent));\n this.notify(_bibliography);\n } else {\n console.warn('Unsupported bibliography script tag type: ' + scriptTag.type);\n }\n }\n }, {\n key: \"notify\",\n value: function notify(bibliography) {\n var options = {\n detail: bibliography,\n bubbles: true\n };\n var event = new CustomEvent('onBibliographyChanged', options);\n this.dispatchEvent(event);\n }\n\n /* observe 'src' attribute */\n }, {\n key: \"receivedBibtex\",\n value: function receivedBibtex(event) {\n var bibliography = parseBibtex(event.target.response);\n this.notify(bibliography);\n }\n }, {\n key: \"attributeChangedCallback\",\n value: function attributeChangedCallback(name, oldValue, newValue) {\n var _this8 = this;\n var oReq = new XMLHttpRequest();\n oReq.onload = function (e) {\n return _this8.receivedBibtex(e);\n };\n oReq.onerror = function () {\n return console.warn(\"Could not load Bibtex! (tried \".concat(newValue, \")\"));\n };\n oReq.responseType = 'text';\n oReq.open('GET', newValue, true);\n oReq.send();\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-bibliography';\n }\n }, {\n key: \"observedAttributes\",\n get: function get() {\n return ['src'];\n }\n }]);\n }( /*#__PURE__*/_wrapNativeSuper(HTMLElement)); // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n // import style from '../styles/d-byline.css';\n function bylineTemplate(frontMatter) {\n return \"\\n
\\n\");\n }\n var Byline = /*#__PURE__*/function (_HTMLElement4) {\n function Byline() {\n _classCallCheck(this, Byline);\n return _callSuper(this, Byline, arguments);\n }\n _inherits(Byline, _HTMLElement4);\n return _createClass(Byline, [{\n key: \"frontMatter\",\n set: function set(frontMatter) {\n this.innerHTML = bylineTemplate(frontMatter);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'd-byline';\n }\n }]);\n }( /*#__PURE__*/_wrapNativeSuper(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var T$3 = Template(\"d-cite\", \"\\n\\n\\n
\\n\\n\"));\n var Code = /*#__PURE__*/function (_Mutating2) {\n function Code() {\n _classCallCheck(this, Code);\n return _callSuper(this, Code, arguments);\n }\n _inherits(Code, _Mutating2);\n return _createClass(Code, [{\n key: \"renderContent\",\n value: function renderContent() {\n // check if language can be highlighted\n this.languageName = this.getAttribute('language');\n if (!this.languageName) {\n console.warn('You need to provide a language attribute to your \";\n if (frontMatter.githubCompareUpdatesUrl) {\n html += \"View all changes to this article since it was first published.\");\n }\n html += \"\\n If you see mistakes or want to suggest changes, please create an issue on GitHub.
\\n \");\n }\n var journal = frontMatter.journal;\n if (typeof journal !== 'undefined' && journal.title === 'Distill') {\n html += \"\\nDiagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don\\u2019t fall under this license and can be recognized by a note in their caption: \\u201CFigure from \\u2026\\u201D.
\\n \");\n }\n if (typeof frontMatter.publishedDate !== 'undefined') {\n html += \"\\nFor attribution in academic contexts, please cite this work as
\\n\".concat(frontMatter.concatenatedAuthors, \", \\\"\").concat(frontMatter.title, \"\\\", Distill, \").concat(frontMatter.publishedYear, \".\\n
BibTeX citation
\\n\").concat(serializeFrontmatterToBibtex(frontMatter), \"\\n \");\n }\n return html;\n }\n var DistillAppendix = /*#__PURE__*/function (_HTMLElement9) {\n function DistillAppendix() {\n _classCallCheck(this, DistillAppendix);\n return _callSuper(this, DistillAppendix, arguments);\n }\n _inherits(DistillAppendix, _HTMLElement9);\n return _createClass(DistillAppendix, [{\n key: \"frontMatter\",\n set: function set(frontMatter) {\n this.innerHTML = appendixTemplate(frontMatter);\n }\n }], [{\n key: \"is\",\n get: function get() {\n return 'distill-appendix';\n }\n }]);\n }( /*#__PURE__*/_wrapNativeSuper(HTMLElement));\n var footerTemplate = \"\\n\\n\\n \\n\\n\");\n\n // Copyright 2018 The Distill Template Authors\n\n var T$c = Template('distill-footer', footerTemplate);\n var DistillFooter = /*#__PURE__*/function (_T$c) {\n function DistillFooter() {\n _classCallCheck(this, DistillFooter);\n return _callSuper(this, DistillFooter, arguments);\n }\n _inherits(DistillFooter, _T$c);\n return _createClass(DistillFooter);\n }(T$c(HTMLElement)); // Copyright 2018 The Distill Template Authors\n var templateIsLoading = false;\n var runlevel = 0;\n var initialize = function initialize() {\n if (window.distill.runlevel < 1) {\n throw new Error(\"Insufficient Runlevel for Distill Template!\");\n }\n\n /* 1. Flag that we're being loaded */\n if (\"distill\" in window && window.distill.templateIsLoading) {\n throw new Error(\"Runlevel 1: Distill Template is getting loaded more than once, aborting!\");\n } else {\n window.distill.templateIsLoading = true;\n console.debug(\"Runlevel 1: Distill Template has started loading.\");\n }\n\n /* 2. Add styles if they weren't added during prerendering */\n makeStyleTag(document);\n console.debug(\"Runlevel 1: Static Distill styles have been added.\");\n console.debug(\"Runlevel 1->2.\");\n window.distill.runlevel += 1;\n\n /* 3. Register Controller listener functions */\n /* Needs to happen before components to their connected callbacks have a controller to talk to. */\n for (var _i2 = 0, _Object$entries2 = Object.entries(Controller.listeners); _i2 < _Object$entries2.length; _i2++) {\n var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),\n functionName = _Object$entries2$_i[0],\n callback = _Object$entries2$_i[1];\n if (typeof callback === \"function\") {\n document.addEventListener(functionName, callback);\n } else {\n console.error(\"Runlevel 2: Controller listeners need to be functions!\");\n }\n }\n console.debug(\"Runlevel 2: We can now listen to controller events.\");\n console.debug(\"Runlevel 2->3.\");\n window.distill.runlevel += 1;\n\n /* 4. Register components */\n var components = [Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code, Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure, Slider, Interstitial];\n var distillComponents = [DistillHeader, DistillAppendix, DistillFooter];\n if (window.distill.runlevel < 2) {\n throw new Error(\"Insufficient Runlevel for adding custom elements!\");\n }\n var allComponents = components.concat(distillComponents);\n var _iterator21 = _createForOfIteratorHelper(allComponents),\n _step21;\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var component = _step21.value;\n console.debug(\"Runlevel 2: Registering custom element: \" + component.is);\n customElements.define(component.is, component);\n }\n } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\n console.debug(\"Runlevel 3: Distill Template finished registering custom elements.\");\n console.debug(\"Runlevel 3->4.\");\n window.distill.runlevel += 1;\n\n // If template was added after DOMContentLoaded we may have missed that event.\n // Controller will check for that case, so trigger the event explicitly:\n if (domContentLoaded()) {\n Controller.listeners.DOMContentLoaded();\n }\n console.debug(\"Runlevel 4: Distill Template initialisation complete.\");\n window.distill.templateIsLoading = false;\n window.distill.templateHasLoaded = true;\n };\n window.distill = {\n runlevel: runlevel,\n initialize: initialize,\n templateIsLoading: templateIsLoading\n };\n\n /* 0. Check browser feature support; synchronously polyfill if needed */\n if (Polyfills.browserSupportsAllFeatures()) {\n console.debug(\"Runlevel 0: No need for polyfills.\");\n console.debug(\"Runlevel 0->1.\");\n window.distill.runlevel += 1;\n window.distill.initialize();\n } else {\n console.debug(\"Runlevel 0: Distill Template is loading polyfills.\");\n Polyfills.load(window.distill.initialize);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Yy9kaXN0aWxsLmpzP2U5N2MiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIGZhY3RvcnkoKTtcbn0oKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIGNvbnN0IGRheXMgPSBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J107XG4gIGNvbnN0IG1vbnRocyA9IFsnSmFuLicsICdGZWIuJywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVnLicsICdTZXB0LicsICdPY3QuJywgJ05vdi4nLCAnRGVjLiddO1xuICBjb25zdCB6ZXJvUGFkID0gbiA9PiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcblxuICBjb25zdCBSRkMgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgY29uc3QgZGF5ID0gZGF5c1tkYXRlLmdldERheSgpXS5zdWJzdHJpbmcoMCwgMyk7XG4gICAgY29uc3QgcGFkZGVkRGF0ZSA9IHplcm9QYWQoZGF0ZS5nZXREYXRlKCkpO1xuICAgIGNvbnN0IG1vbnRoID0gbW9udGhzW2RhdGUuZ2V0TW9udGgoKV0uc3Vic3RyaW5nKDAsMyk7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIGAke2RheX0sICR7cGFkZGVkRGF0ZX0gJHttb250aH0gJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30gWmA7XG4gIH07XG5cbiAgY29uc3Qgb2JqZWN0RnJvbU1hcCA9IGZ1bmN0aW9uKG1hcCkge1xuICAgIGNvbnN0IG9iamVjdCA9IEFycmF5LmZyb20obWFwKS5yZWR1Y2UoKG9iamVjdCwgW2tleSwgdmFsdWVdKSA9PiAoXG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgeyBba2V5XTogdmFsdWUgfSkgLy8gQmUgY2FyZWZ1bCEgTWFwcyBjYW4gaGF2ZSBub24tU3RyaW5nIGtleXM7IG9iamVjdCBsaXRlcmFscyBjYW4ndC5cbiAgICApLCB7fSk7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcblxuICBjb25zdCBtYXBGcm9tT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgbWFwLnNldChwcm9wZXJ0eSwgb2JqZWN0W3Byb3BlcnR5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH07XG5cbiAgY2xhc3MgQXV0aG9yIHtcblxuICAgIC8vIGNvbnN0cnVjdG9yKG5hbWU9JycsIHBlcnNvbmFsVVJMPScnLCBhZmZpbGlhdGlvbj0nJywgYWZmaWxpYXRpb25VUkw9JycpIHtcbiAgICAvLyAgIHRoaXMubmFtZSA9IG5hbWU7IC8vICdDaHJpcyBPbGFoJ1xuICAgIC8vICAgdGhpcy5wZXJzb25hbFVSTCA9IHBlcnNvbmFsVVJMOyAvLyAnaHR0cHM6Ly9jb2xhaC5naXRodWIuaW8nXG4gICAgLy8gICB0aGlzLmFmZmlsaWF0aW9uID0gYWZmaWxpYXRpb247IC8vICdHb29nbGUgQnJhaW4nXG4gICAgLy8gICB0aGlzLmFmZmlsaWF0aW9uVVJMID0gYWZmaWxpYXRpb25VUkw7IC8vICdodHRwczovL2cuY28vYnJhaW4nXG4gICAgLy8gfVxuXG4gICAgY29uc3RydWN0b3Iob2JqZWN0KSB7XG4gICAgICB0aGlzLm5hbWUgPSBvYmplY3QuYXV0aG9yOyAvLyAnQ2hyaXMgT2xhaCdcbiAgICAgIHRoaXMucGVyc29uYWxVUkwgPSBvYmplY3QuYXV0aG9yVVJMOyAvLyAnaHR0cHM6Ly9jb2xhaC5naXRodWIuaW8nXG4gICAgICB0aGlzLmFmZmlsaWF0aW9uID0gb2JqZWN0LmFmZmlsaWF0aW9uOyAvLyAnR29vZ2xlIEJyYWluJ1xuICAgICAgdGhpcy5hZmZpbGlhdGlvblVSTCA9IG9iamVjdC5hZmZpbGlhdGlvblVSTDsgLy8gJ2h0dHBzOi8vZy5jby9icmFpbidcbiAgICAgIHRoaXMuYWZmaWxpYXRpb25zID0gb2JqZWN0LmFmZmlsaWF0aW9ucyB8fCBbXTsgLy8gbmV3LXN0eWxlIGFmZmlsaWF0aW9uc1xuICAgIH1cblxuICAgIC8vICdDaHJpcydcbiAgICBnZXQgZmlyc3ROYW1lKCkge1xuICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLm5hbWUuc3BsaXQoJyAnKTtcbiAgICAgIHJldHVybiBuYW1lcy5zbGljZSgwLCBuYW1lcy5sZW5ndGggLSAxKS5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLy8gJ09sYWgnXG4gICAgZ2V0IGxhc3ROYW1lKCkge1xuICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLm5hbWUuc3BsaXQoJyAnKTtcbiAgICAgIHJldHVybiBuYW1lc1tuYW1lcy5sZW5ndGggLTFdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRnJvbVlNTEZyb250bWF0dGVyKHRhcmdldCwgc291cmNlKSB7XG4gICAgdGFyZ2V0LnRpdGxlID0gc291cmNlLnRpdGxlO1xuICAgIGlmIChzb3VyY2UucHVibGlzaGVkKSB7XG4gICAgICBpZiAoc291cmNlLnB1Ymxpc2hlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZERhdGUgPSBzb3VyY2UucHVibGlzaGVkO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2UucHVibGlzaGVkLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZERhdGUgPSBuZXcgRGF0ZShzb3VyY2UucHVibGlzaGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNvdXJjZS5wdWJsaXNoZWREYXRlKSB7XG4gICAgICBpZiAoc291cmNlLnB1Ymxpc2hlZERhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHRhcmdldC5wdWJsaXNoZWREYXRlID0gc291cmNlLnB1Ymxpc2hlZERhdGU7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZS5wdWJsaXNoZWREYXRlLmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZERhdGUgPSBuZXcgRGF0ZShzb3VyY2UucHVibGlzaGVkRGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEb25cXCd0IGtub3cgd2hhdCB0byBkbyB3aXRoIHB1Ymxpc2hlZCBkYXRlOiAnICsgc291cmNlLnB1Ymxpc2hlZERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICB0YXJnZXQuZGVzY3JpcHRpb24gPSBzb3VyY2UuZGVzY3JpcHRpb247XG4gICAgdGFyZ2V0LmF1dGhvcnMgPSBzb3VyY2UuYXV0aG9ycy5tYXAoIChhdXRob3JPYmplY3QpID0+IG5ldyBBdXRob3IoYXV0aG9yT2JqZWN0KSk7XG4gICAgdGFyZ2V0LmthdGV4ID0gc291cmNlLmthdGV4O1xuICAgIHRhcmdldC5wYXNzd29yZCA9IHNvdXJjZS5wYXNzd29yZDtcbiAgICBpZiAoc291cmNlLmRvaSkge1xuICAgICAgdGFyZ2V0LmRvaSA9IHNvdXJjZS5kb2k7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgRnJvbnRNYXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy50aXRsZSA9ICd1bm5hbWVkIGFydGljbGUnOyAvLyAnQXR0ZW50aW9uIGFuZCBBdWdtZW50ZWQgUmVjdXJyZW50IE5ldXJhbCBOZXR3b3JrcydcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSAnJzsgLy8gJ0EgdmlzdWFsIG92ZXJ2aWV3IG9mIG5ldXJhbCBhdHRlbnRpb24uLi4nXG4gICAgICB0aGlzLmF1dGhvcnMgPSBbXTsgLy8gQXJyYXkgb2YgQXV0aG9yKHMpXG5cbiAgICAgIHRoaXMuYmlibGlvZ3JhcGh5ID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5iaWJsaW9ncmFwaHlQYXJzZWQgPSBmYWxzZTtcbiAgICAgIC8vICB7XG4gICAgICAvLyAgICAnZ3JlZ29yMjAxNWRyYXcnOiB7XG4gICAgICAvLyAgICAgICd0aXRsZSc6ICdEUkFXOiBBIHJlY3VycmVudCBuZXVyYWwgbmV0d29yayBmb3IgaW1hZ2UgZ2VuZXJhdGlvbicsXG4gICAgICAvLyAgICAgICdhdXRob3InOiAnR3JlZ29yLCBLYXJvbCBhbmQgRGFuaWhlbGthLCBJdm8gYW5kIEdyYXZlcywgQWxleCBhbmQgUmV6ZW5kZSwgRGFuaWxvIEppbWVuZXogYW5kIFdpZXJzdHJhLCBEYWFuJyxcbiAgICAgIC8vICAgICAgJ2pvdXJuYWwnOiAnYXJYaXYgcHJlcHJpbnQgYXJYaXY6MTUwMi4wNDYyMycsXG4gICAgICAvLyAgICAgICd5ZWFyJzogJzIwMTUnLFxuICAgICAgLy8gICAgICAndXJsJzogJ2h0dHBzOi8vYXJ4aXYub3JnL3BkZi8xNTAyLjA0NjIzLnBkZicsXG4gICAgICAvLyAgICAgICd0eXBlJzogJ2FydGljbGUnXG4gICAgICAvLyAgICB9LFxuICAgICAgLy8gIH1cblxuICAgICAgLy8gQ2l0YXRpb24ga2V5cyBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXJlIGFwcGVhciBpbiB0aGUgZG9jdW1lbnQuXG4gICAgICAvLyBFYWNoIGtleSByZWZlcnMgdG8gYSBrZXkgaW4gdGhlIGJpYmxpb2dyYXBoeSBkaWN0aW9uYXJ5LlxuICAgICAgdGhpcy5jaXRhdGlvbnMgPSBbXTsgLy8gWyAnZ3JlZ29yMjAxNWRyYXcnLCAnbWVyY2llcjIwMTFodW1hbnMnIF1cbiAgICAgIHRoaXMuY2l0YXRpb25zQ29sbGVjdGVkID0gZmFsc2U7XG5cbiAgICAgIC8vXG4gICAgICAvLyBBc3NpZ25lZCBmcm9tIHBvc3RzLmNzdlxuICAgICAgLy9cblxuICAgICAgLy8gIHB1Ymxpc2hlZERhdGU6IDIwMTYtMDktMDhUMDc6MDA6MDAuMDAwWixcbiAgICAgIC8vICB0YWdzOiBbICdybm4nIF0sXG4gICAgICAvLyAgZGlzdGlsbFBhdGg6ICcyMDE2L2F1Z21lbnRlZC1ybm5zJyxcbiAgICAgIC8vICBnaXRodWJQYXRoOiAnZGlzdGlsbHB1Yi9wb3N0LS1hdWdtZW50ZWQtcm5ucycsXG4gICAgICAvLyAgZG9pU3VmZml4OiAxLFxuXG4gICAgICAvL1xuICAgICAgLy8gQXNzaWduZWQgZnJvbSBqb3VybmFsXG4gICAgICAvL1xuICAgICAgdGhpcy5qb3VybmFsID0ge307XG4gICAgICAvLyAgam91cm5hbDoge1xuICAgICAgLy8gICAgJ3RpdGxlJzogJ0Rpc3RpbGwnLFxuICAgICAgLy8gICAgJ2Z1bGxfdGl0bGUnOiAnRGlzdGlsbCcsXG4gICAgICAvLyAgICAnYWJicmV2X3RpdGxlJzogJ0Rpc3RpbGwnLFxuICAgICAgLy8gICAgJ3VybCc6ICdodHRwOi8vZGlzdGlsbC5wdWInLFxuICAgICAgLy8gICAgJ2RvaSc6ICcxMC4yMzkxNS9kaXN0aWxsJyxcbiAgICAgIC8vICAgICdwdWJsaXNoZXJOYW1lJzogJ0Rpc3RpbGwgV29ya2luZyBHcm91cCcsXG4gICAgICAvLyAgICAncHVibGlzaGVyRW1haWwnOiAnYWRtaW5AZGlzdGlsbC5wdWInLFxuICAgICAgLy8gICAgJ2lzc24nOiAnMjQ3Ni0wNzU3JyxcbiAgICAgIC8vICAgICdlZGl0b3JzJzogWy4uLl0sXG4gICAgICAvLyAgICAnY29tbWl0dGVlJzogWy4uLl1cbiAgICAgIC8vICB9XG4gICAgICAvLyAgdm9sdW1lOiAxLFxuICAgICAgLy8gIGlzc3VlOiA5LFxuXG4gICAgICB0aGlzLmthdGV4ID0ge307XG5cbiAgICAgIC8vXG4gICAgICAvLyBBc3NpZ25lZCBmcm9tIHB1Ymxpc2hpbmcgcHJvY2Vzc1xuICAgICAgLy9cblxuICAgICAgLy8gIGdpdGh1YkNvbXBhcmVVcGRhdGVzVXJsOiAnaHR0cHM6Ly9naXRodWIuY29tL2Rpc3RpbGxwdWIvcG9zdC0tYXVnbWVudGVkLXJubnMvY29tcGFyZS8xNTk2ZTA5NGQ4OTQzZDJkYzBlYTQ0NWQ5MjA3MTEyOWM2NDE5YzU5Li4uM2JkOTIwOWUwYzI0ZDAyMGY4N2NmNjE1MmRjZWNjNjAxN2NiYzE5MycsXG4gICAgICAvLyAgdXBkYXRlZERhdGU6IDIwMTctMDMtMjFUMDc6MTM6MTYuMDAwWixcbiAgICAgIC8vICBkb2k6ICcxMC4yMzkxNS9kaXN0aWxsLjAwMDAxJyxcbiAgICAgIHRoaXMuZG9pID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wdWJsaXNoZWREYXRlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEV4YW1wbGU6XG4gICAgLy8gdGl0bGU6IERlbW8gVGl0bGUgQXR0ZW50aW9uIGFuZCBBdWdtZW50ZWQgUmVjdXJyZW50IE5ldXJhbCBOZXR3b3Jrc1xuICAgIC8vIHB1Ymxpc2hlZDogSmFuIDEwLCAyMDE3XG4gICAgLy8gYXV0aG9yczpcbiAgICAvLyAtIENocmlzIE9sYWg6XG4gICAgLy8gLSBTaGFuIENhcnRlcjogaHR0cDovL3NoYW5jYXJ0ZXIuY29tXG4gICAgLy8gYWZmaWxpYXRpb25zOlxuICAgIC8vIC0gR29vZ2xlIEJyYWluOlxuICAgIC8vIC0gR29vZ2xlIEJyYWluOiBodHRwOi8vZy5jby9icmFpblxuXG4gICAgLy9cbiAgICAvLyBDb21wdXRlZCBQcm9wZXJ0aWVzXG4gICAgLy9cblxuICAgIC8vICdodHRwOi8vZGlzdGlsbC5wdWIvMjAxNi9hdWdtZW50ZWQtcm5ucycsXG4gICAgc2V0IHVybCh2YWx1ZSkge1xuICAgICAgdGhpcy5fdXJsID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB1cmwoKSB7XG4gICAgICBpZiAodGhpcy5fdXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlzdGlsbFBhdGggJiYgdGhpcy5qb3VybmFsLnVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qb3VybmFsLnVybCArICcvJyArIHRoaXMuZGlzdGlsbFBhdGg7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuam91cm5hbC51cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuam91cm5hbC51cmw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gJ2h0dHBzOi8vZ2l0aHViLmNvbS9kaXN0aWxscHViL3Bvc3QtLWF1Z21lbnRlZC1ybm5zJyxcbiAgICBnZXQgZ2l0aHViVXJsKCkge1xuICAgICAgaWYgKHRoaXMuZ2l0aHViUGF0aCkge1xuICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZ2l0aHViLmNvbS8nICsgdGhpcy5naXRodWJQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPIHJlc29sdmUgZGlmZmVyZW5jZXMgaW4gbmFtaW5nIG9mIFVSTC9VcmwvdXJsLlxuICAgIC8vICdodHRwOi8vZGlzdGlsbC5wdWIvMjAxNi9hdWdtZW50ZWQtcm5ucy90aHVtYm5haWwuanBnJyxcbiAgICBzZXQgcHJldmlld1VSTCh2YWx1ZSkge1xuICAgICAgdGhpcy5fcHJldmlld1VSTCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgcHJldmlld1VSTCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcmV2aWV3VVJMID8gdGhpcy5fcHJldmlld1VSTCA6IHRoaXMudXJsICsgJy90aHVtYm5haWwuanBnJztcbiAgICB9XG5cbiAgICAvLyAnVGh1LCAwOCBTZXAgMjAxNiAwMDowMDowMCAtMDcwMCcsXG4gICAgZ2V0IHB1Ymxpc2hlZERhdGVSRkMoKSB7XG4gICAgICByZXR1cm4gUkZDKHRoaXMucHVibGlzaGVkRGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gJ1RodSwgMDggU2VwIDIwMTYgMDA6MDA6MDAgLTA3MDAnLFxuICAgIGdldCB1cGRhdGVkRGF0ZVJGQygpIHtcbiAgICAgIHJldHVybiBSRkModGhpcy51cGRhdGVkRGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gMjAxNixcbiAgICBnZXQgcHVibGlzaGVkWWVhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnB1Ymxpc2hlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG5cbiAgICAvLyAnU2VwdCcsXG4gICAgZ2V0IHB1Ymxpc2hlZE1vbnRoKCkge1xuICAgICAgcmV0dXJuIG1vbnRoc1t0aGlzLnB1Ymxpc2hlZERhdGUuZ2V0TW9udGgoKV07XG4gICAgfVxuXG4gICAgLy8gOCxcbiAgICBnZXQgcHVibGlzaGVkRGF5KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHVibGlzaGVkRGF0ZS5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gJzA5JyxcbiAgICBnZXQgcHVibGlzaGVkTW9udGhQYWRkZWQoKSB7XG4gICAgICByZXR1cm4gemVyb1BhZCh0aGlzLnB1Ymxpc2hlZERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgIH1cblxuICAgIC8vICcwOCcsXG4gICAgZ2V0IHB1Ymxpc2hlZERheVBhZGRlZCgpIHtcbiAgICAgIHJldHVybiB6ZXJvUGFkKHRoaXMucHVibGlzaGVkRGF0ZS5nZXREYXRlKCkpO1xuICAgIH1cblxuICAgIGdldCBwdWJsaXNoZWRJU09EYXRlT25seSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnB1Ymxpc2hlZERhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgIH1cblxuICAgIGdldCB2b2x1bWUoKSB7XG4gICAgICBjb25zdCB2b2x1bWUgPSB0aGlzLnB1Ymxpc2hlZFllYXIgLSAyMDE1O1xuICAgICAgaWYgKHZvbHVtZSA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHB1Ymxpc2ggZGF0ZSBkZXRlY3RlZCBkdXJpbmcgY29tcHV0aW5nIHZvbHVtZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvbHVtZTtcbiAgICB9XG5cbiAgICBnZXQgaXNzdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wdWJsaXNoZWREYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgIH1cblxuICAgIC8vICdPbGFoICYgQ2FydGVyJyxcbiAgICBnZXQgY29uY2F0ZW5hdGVkQXV0aG9ycygpIHtcbiAgICAgIGlmICh0aGlzLmF1dGhvcnMubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRob3JzWzBdLmxhc3ROYW1lICsgJywgZXQgYWwuJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdXRob3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRob3JzWzBdLmxhc3ROYW1lICsgJyAmICcgKyB0aGlzLmF1dGhvcnNbMV0ubGFzdE5hbWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0aG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aG9yc1swXS5sYXN0TmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAnT2xhaCwgQ2hyaXMgYW5kIENhcnRlciwgU2hhbicsXG4gICAgZ2V0IGJpYnRleEF1dGhvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXRob3JzLm1hcChhdXRob3IgPT4ge1xuICAgICAgICByZXR1cm4gYXV0aG9yLmxhc3ROYW1lICsgJywgJyArIGF1dGhvci5maXJzdE5hbWU7XG4gICAgICB9KS5qb2luKCcgYW5kICcpO1xuICAgIH1cblxuICAgIC8vICdvbGFoMjAxNmF0dGVudGlvbidcbiAgICBnZXQgc2x1ZygpIHtcbiAgICAgIGxldCBzbHVnID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRob3JzLmxlbmd0aCkge1xuICAgICAgICBzbHVnICs9IHRoaXMuYXV0aG9yc1swXS5sYXN0TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBzbHVnICs9IHRoaXMucHVibGlzaGVkWWVhcjtcbiAgICAgICAgc2x1ZyArPSB0aGlzLnRpdGxlLnNwbGl0KCcgJylbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbHVnIHx8ICdVbnRpdGxlZCc7XG4gICAgfVxuXG4gICAgZ2V0IGJpYmxpb2dyYXBoeUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcCh0aGlzLmNpdGF0aW9ucy5tYXAoIGNpdGF0aW9uS2V5ID0+IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmJpYmxpb2dyYXBoeS5nZXQoY2l0YXRpb25LZXkpO1xuICAgICAgICByZXR1cm4gW2NpdGF0aW9uS2V5LCBlbnRyeV07XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgc2V0IGJpYmxpb2dyYXBoeShiaWJsaW9ncmFwaHkpIHtcbiAgICAgIGlmIChiaWJsaW9ncmFwaHkgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgdGhpcy5fYmlibGlvZ3JhcGh5ID0gYmlibGlvZ3JhcGh5O1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYmlibGlvZ3JhcGh5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLl9iaWJsaW9ncmFwaHkgPSBtYXBGcm9tT2JqZWN0KGJpYmxpb2dyYXBoeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGJpYmxpb2dyYXBoeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9iaWJsaW9ncmFwaHk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21PYmplY3Qoc291cmNlKSB7XG4gICAgICBjb25zdCBmcm9udE1hdHRlciA9IG5ldyBGcm9udE1hdHRlcigpO1xuICAgICAgT2JqZWN0LmFzc2lnbihmcm9udE1hdHRlciwgc291cmNlKTtcbiAgICAgIHJldHVybiBmcm9udE1hdHRlcjtcbiAgICB9XG5cbiAgICBhc3NpZ25Ub09iamVjdCh0YXJnZXQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCB0aGlzKTtcbiAgICAgIHRhcmdldC5iaWJsaW9ncmFwaHkgPSBvYmplY3RGcm9tTWFwKHRoaXMuYmlibGlvZ3JhcGh5RW50cmllcyk7XG4gICAgICB0YXJnZXQudXJsID0gdGhpcy51cmw7XG4gICAgICB0YXJnZXQuZG9pID0gdGhpcy5kb2k7XG4gICAgICB0YXJnZXQuZ2l0aHViVXJsID0gdGhpcy5naXRodWJVcmw7XG4gICAgICB0YXJnZXQucHJldmlld1VSTCA9IHRoaXMucHJldmlld1VSTDtcbiAgICAgIGlmICh0aGlzLnB1Ymxpc2hlZERhdGUpIHtcbiAgICAgICAgdGFyZ2V0LnZvbHVtZSA9IHRoaXMudm9sdW1lO1xuICAgICAgICB0YXJnZXQuaXNzdWUgPSB0aGlzLmlzc3VlO1xuICAgICAgICB0YXJnZXQucHVibGlzaGVkRGF0ZVJGQyA9IHRoaXMucHVibGlzaGVkRGF0ZVJGQztcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZFllYXIgPSB0aGlzLnB1Ymxpc2hlZFllYXI7XG4gICAgICAgIHRhcmdldC5wdWJsaXNoZWRNb250aCA9IHRoaXMucHVibGlzaGVkTW9udGg7XG4gICAgICAgIHRhcmdldC5wdWJsaXNoZWREYXkgPSB0aGlzLnB1Ymxpc2hlZERheTtcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZE1vbnRoUGFkZGVkID0gdGhpcy5wdWJsaXNoZWRNb250aFBhZGRlZDtcbiAgICAgICAgdGFyZ2V0LnB1Ymxpc2hlZERheVBhZGRlZCA9IHRoaXMucHVibGlzaGVkRGF5UGFkZGVkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXBkYXRlZERhdGUpIHtcbiAgICAgICAgdGFyZ2V0LnVwZGF0ZWREYXRlUkZDID0gdGhpcy51cGRhdGVkRGF0ZVJGQztcbiAgICAgIH1cbiAgICAgIHRhcmdldC5jb25jYXRlbmF0ZWRBdXRob3JzID0gdGhpcy5jb25jYXRlbmF0ZWRBdXRob3JzO1xuICAgICAgdGFyZ2V0LmJpYnRleEF1dGhvcnMgPSB0aGlzLmJpYnRleEF1dGhvcnM7XG4gICAgICB0YXJnZXQuc2x1ZyA9IHRoaXMuc2x1ZztcbiAgICB9XG5cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIGNvbnN0IE11dGF0aW5nID0gKHN1cGVyY2xhc3MpID0+IHtcbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBzdXBlcmNsYXNzIHtcblxuICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgLy8gc2V0IHVwIG11dGF0aW9uIG9ic2VydmVyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7Y2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlciggKCkgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcklmUG9zc2libGUoKTtcbiAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAuLi5hbmQgbGlzdGVuIGZvciBjaGFuZ2VzXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgb3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgICAgIHRoaXMucmVuZGVySWZQb3NzaWJsZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBwb3RlbnRpYWwgVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBlbm91Z2ggZm9yIGFsbCBvdXIgdXNlY2FzZXNcbiAgICAgIC8vIG1heWJlIHByb3ZpZGUgYSBjdXN0b20gZnVuY3Rpb24gdG8gdGVsbCBpZiB3ZSBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZW5kZXJcbiAgICAgIHJlbmRlcklmUG9zc2libGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHRDb250ZW50ICYmIHRoaXMucm9vdCkge1xuICAgICAgICAgIHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlbmRlckNvbnRlbnQoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFlvdXIgY2xhc3MgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IG11c3QgcHJvdmlkZSBhIGN1c3RvbSByZW5kZXJDb250ZW50KCkgbWV0aG9kIWAgKTtcbiAgICAgIH1cblxuICAgIH07IC8vIGVuZCBjbGFzc1xuICB9OyAvLyBlbmQgbWl4aW4gZnVuY3Rpb25cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG4gIC8vXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIC8vXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gIC8vXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuICAvKmdsb2JhbCBTaGFkeUNTUyovXG5cbiAgY29uc3QgVGVtcGxhdGUgPSAobmFtZSwgdGVtcGxhdGVTdHJpbmcsIHVzZVNoYWRvdyA9IHRydWUpID0+IHtcblxuICAgIHJldHVybiAoc3VwZXJjbGFzcykgPT4ge1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSB0ZW1wbGF0ZVN0cmluZztcblxuICAgICAgaWYgKHVzZVNoYWRvdyAmJiAnU2hhZHlDU1MnIGluIHdpbmRvdykge1xuICAgICAgICBTaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUodGVtcGxhdGUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBzdXBlcmNsYXNzIHtcblxuICAgICAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gbmFtZTsgfVxuXG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgICB0aGlzLmNsb25lID0gZG9jdW1lbnQuaW1wb3J0Tm9kZSh0ZW1wbGF0ZS5jb250ZW50LCB0cnVlKTtcbiAgICAgICAgICBpZiAodXNlU2hhZG93KSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XG4gICAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5jbG9uZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKCdkaXN0aWxsLXByZXJlbmRlcmVkJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZVNoYWRvdykge1xuICAgICAgICAgICAgaWYgKCdTaGFkeUNTUycgaW4gd2luZG93KSB7XG4gICAgICAgICAgICAgIFNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZSwgdGhpcy5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgcm9vdCgpIHtcbiAgICAgICAgICBpZiAodXNlU2hhZG93KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBUT0RPOiBBcmUgd2UgdXNpbmcgdGhlc2U/IFNob3VsZCB3ZSBldmVuPyAqL1xuICAgICAgICAkKHF1ZXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKHF1ZXJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgICQkKHF1ZXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBtYXRoID0gXCIvKlxcbiAqIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcXG4gKlxcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcXFwiTGljZW5zZVxcXCIpO1xcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcXG4gKlxcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXFxuICpcXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXFxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXFxcIkFTIElTXFxcIiBCQVNJUyxcXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXFxuICovXFxuXFxuc3Bhbi5rYXRleC1kaXNwbGF5IHtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICBwYWRkaW5nOiA4cHggMCA4cHggMDtcXG4gIG1hcmdpbjogMC41ZW0gMCAwLjVlbSAxZW07XFxufVxcblxcbnNwYW4ua2F0ZXgge1xcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgZm9udC1zaXplOiAxLjE4ZW07XFxufVxcblwiO1xuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIC8vIFRoaXMgaXMgYSBzdHJhaWdodCBjb25jYXRlbmF0aW9uIG9mIGNvZGUgZnJvbSBLYVRlWCdzIGNvbnRyaWIgZm9sZGVyLFxuICAvLyBidXQgd2UgYXJlbid0IHVzaW5nIHNvbWUgb2YgdGhlaXIgaGVscGVycyB0aGF0IGRvbid0IHdvcmsgd2VsbCBvdXRzaWRlIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cblxuICAvKmdsb2JhbCBrYXRleCAqL1xuXG4gIGNvbnN0IGZpbmRFbmRPZk1hdGggPSBmdW5jdGlvbihkZWxpbWl0ZXIsIHRleHQsIHN0YXJ0SW5kZXgpIHtcbiAgICAvLyBBZGFwdGVkIGZyb21cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hhbi9wZXJzZXVzL2Jsb2IvbWFzdGVyL3NyYy9wZXJzZXVzLW1hcmtkb3duLmpzeFxuICAgIGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgbGV0IGJyYWNlTGV2ZWwgPSAwO1xuXG4gICAgY29uc3QgZGVsaW1MZW5ndGggPSBkZWxpbWl0ZXIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoYXJhY3RlciA9IHRleHRbaW5kZXhdO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGJyYWNlTGV2ZWwgPD0gMCAmJlxuICAgICAgICB0ZXh0LnNsaWNlKGluZGV4LCBpbmRleCArIGRlbGltTGVuZ3RoKSA9PT0gZGVsaW1pdGVyXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gXCJ7XCIpIHtcbiAgICAgICAgYnJhY2VMZXZlbCsrO1xuICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09IFwifVwiKSB7XG4gICAgICAgIGJyYWNlTGV2ZWwtLTtcbiAgICAgIH1cblxuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH07XG5cbiAgY29uc3Qgc3BsaXRBdERlbGltaXRlcnMgPSBmdW5jdGlvbihzdGFydERhdGEsIGxlZnREZWxpbSwgcmlnaHREZWxpbSwgZGlzcGxheSkge1xuICAgIGNvbnN0IGZpbmFsRGF0YSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdGFydERhdGFbaV0udHlwZSA9PT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHN0YXJ0RGF0YVtpXS5kYXRhO1xuXG4gICAgICAgIGxldCBsb29raW5nRm9yTGVmdCA9IHRydWU7XG4gICAgICAgIGxldCBjdXJySW5kZXggPSAwO1xuICAgICAgICBsZXQgbmV4dEluZGV4O1xuXG4gICAgICAgIG5leHRJbmRleCA9IHRleHQuaW5kZXhPZihsZWZ0RGVsaW0pO1xuICAgICAgICBpZiAobmV4dEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGN1cnJJbmRleCA9IG5leHRJbmRleDtcbiAgICAgICAgICBmaW5hbERhdGEucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIGRhdGE6IHRleHQuc2xpY2UoMCwgY3VyckluZGV4KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvb2tpbmdGb3JMZWZ0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgICAgaWYgKGxvb2tpbmdGb3JMZWZ0KSB7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSB0ZXh0LmluZGV4T2YobGVmdERlbGltLCBjdXJySW5kZXgpO1xuICAgICAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIGRhdGE6IHRleHQuc2xpY2UoY3VyckluZGV4LCBuZXh0SW5kZXgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY3VyckluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSBmaW5kRW5kT2ZNYXRoKFxuICAgICAgICAgICAgICByaWdodERlbGltLFxuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICBjdXJySW5kZXggKyBsZWZ0RGVsaW0ubGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJtYXRoXCIsXG4gICAgICAgICAgICAgIGRhdGE6IHRleHQuc2xpY2UoY3VyckluZGV4ICsgbGVmdERlbGltLmxlbmd0aCwgbmV4dEluZGV4KSxcbiAgICAgICAgICAgICAgcmF3RGF0YTogdGV4dC5zbGljZShjdXJySW5kZXgsIG5leHRJbmRleCArIHJpZ2h0RGVsaW0ubGVuZ3RoKSxcbiAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGN1cnJJbmRleCA9IG5leHRJbmRleCArIHJpZ2h0RGVsaW0ubGVuZ3RoO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvb2tpbmdGb3JMZWZ0ID0gIWxvb2tpbmdGb3JMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgZmluYWxEYXRhLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRhdGE6IHRleHQuc2xpY2UoY3VyckluZGV4KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmFsRGF0YS5wdXNoKHN0YXJ0RGF0YVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsRGF0YTtcbiAgfTtcblxuICBjb25zdCBzcGxpdFdpdGhEZWxpbWl0ZXJzID0gZnVuY3Rpb24odGV4dCwgZGVsaW1pdGVycykge1xuICAgIGxldCBkYXRhID0gW3sgdHlwZTogXCJ0ZXh0XCIsIGRhdGE6IHRleHQgfV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxpbWl0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBkZWxpbWl0ZXJzW2ldO1xuICAgICAgZGF0YSA9IHNwbGl0QXREZWxpbWl0ZXJzKFxuICAgICAgICBkYXRhLFxuICAgICAgICBkZWxpbWl0ZXIubGVmdCxcbiAgICAgICAgZGVsaW1pdGVyLnJpZ2h0LFxuICAgICAgICBkZWxpbWl0ZXIuZGlzcGxheSB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgLyogTm90ZTogb3B0aW9uc0NvcHkgaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZC4gSWYgaXQgaXMgZXZlciBleHBvc2VkIGluIHRoZVxuICAgKiBBUEksIHdlIHNob3VsZCBjb3B5IGl0IGJlZm9yZSBtdXRhdGluZy5cbiAgICovXG4gIGNvbnN0IHJlbmRlck1hdGhJblRleHQgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zQ29weSkge1xuICAgIGNvbnN0IGRhdGEgPSBzcGxpdFdpdGhEZWxpbWl0ZXJzKHRleHQsIG9wdGlvbnNDb3B5LmRlbGltaXRlcnMpO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZGF0YVtpXS50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhW2ldLmRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkLW1hdGhcIik7XG4gICAgICAgIGNvbnN0IG1hdGggPSBkYXRhW2ldLmRhdGE7XG4gICAgICAgIC8vIE92ZXJyaWRlIGFueSBkaXNwbGF5IG1vZGUgZGVmaW5lZCBpbiB0aGUgc2V0dGluZ3Mgd2l0aCB0aGF0XG4gICAgICAgIC8vIGRlZmluZWQgYnkgdGhlIHRleHQgaXRzZWxmXG4gICAgICAgIG9wdGlvbnNDb3B5LmRpc3BsYXlNb2RlID0gZGF0YVtpXS5kaXNwbGF5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRhZy50ZXh0Q29udGVudCA9IG1hdGg7XG4gICAgICAgICAgaWYgKG9wdGlvbnNDb3B5LmRpc3BsYXlNb2RlKSB7XG4gICAgICAgICAgICB0YWcuc2V0QXR0cmlidXRlKFwiYmxvY2tcIiwgXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIGthdGV4LlBhcnNlRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHRpb25zQ29weS5lcnJvckNhbGxiYWNrKFxuICAgICAgICAgICAgXCJLYVRlWCBhdXRvLXJlbmRlcjogRmFpbGVkIHRvIHBhcnNlIGBcIiArIGRhdGFbaV0uZGF0YSArIFwiYCB3aXRoIFwiLFxuICAgICAgICAgICAgZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YVtpXS5yYXdEYXRhKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQodGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRWxlbSA9IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnNDb3B5KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW0uY2hpbGROb2Rlc1tpXTtcbiAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgLy8gVGV4dCBub2RlXG4gICAgICAgIGNvbnN0IHRleHQgPSBjaGlsZE5vZGUudGV4dENvbnRlbnQ7XG4gICAgICAgIGlmIChvcHRpb25zQ29weS5taWdodEhhdmVNYXRoKHRleHQpKSB7XG4gICAgICAgICAgY29uc3QgZnJhZyA9IHJlbmRlck1hdGhJblRleHQodGV4dCwgb3B0aW9uc0NvcHkpO1xuICAgICAgICAgIGkgKz0gZnJhZy5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgZWxlbS5yZXBsYWNlQ2hpbGQoZnJhZywgY2hpbGROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgLy8gRWxlbWVudCBub2RlXG4gICAgICAgIGNvbnN0IHNob3VsZFJlbmRlciA9XG4gICAgICAgICAgb3B0aW9uc0NvcHkuaWdub3JlZFRhZ3MuaW5kZXhPZihjaGlsZE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgPT09XG4gICAgICAgICAgLTE7XG5cbiAgICAgICAgaWYgKHNob3VsZFJlbmRlcikge1xuICAgICAgICAgIHJlbmRlckVsZW0oY2hpbGROb2RlLCBvcHRpb25zQ29weSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgaXQncyBzb21ldGhpbmcgZWxzZSwgYW5kIGlnbm9yZSBpdC5cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEF1dG9SZW5kZXJPcHRpb25zID0ge1xuICAgIGRlbGltaXRlcnM6IFtcbiAgICAgIHsgbGVmdDogXCIkJFwiLCByaWdodDogXCIkJFwiLCBkaXNwbGF5OiB0cnVlIH0sXG4gICAgICB7IGxlZnQ6IFwiXFxcXFtcIiwgcmlnaHQ6IFwiXFxcXF1cIiwgZGlzcGxheTogdHJ1ZSB9LFxuICAgICAgeyBsZWZ0OiBcIlxcXFwoXCIsIHJpZ2h0OiBcIlxcXFwpXCIsIGRpc3BsYXk6IGZhbHNlIH1cbiAgICAgIC8vIExhVGVYIHVzZXMgdGhpcywgYnV0IGl0IHJ1aW5zIHRoZSBkaXNwbGF5IG9mIG5vcm1hbCBgJGAgaW4gdGV4dDpcbiAgICAgIC8vIHtsZWZ0OiAnJCcsIHJpZ2h0OiAnJCcsIGRpc3BsYXk6IGZhbHNlfSxcbiAgICBdLFxuXG4gICAgaWdub3JlZFRhZ3M6IFtcbiAgICAgIFwic2NyaXB0XCIsXG4gICAgICBcIm5vc2NyaXB0XCIsXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBcInRleHRhcmVhXCIsXG4gICAgICBcInByZVwiLFxuICAgICAgXCJjb2RlXCIsXG4gICAgICBcInN2Z1wiXG4gICAgXSxcblxuICAgIGVycm9yQ2FsbGJhY2s6IGZ1bmN0aW9uKG1zZywgZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1zZywgZXJyKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyTWF0aEluRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW0sIG9wdGlvbnMpIHtcbiAgICBpZiAoIWVsZW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGVsZW1lbnQgcHJvdmlkZWQgdG8gcmVuZGVyXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnNDb3B5ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdEF1dG9SZW5kZXJPcHRpb25zLCBvcHRpb25zKTtcbiAgICBjb25zdCBkZWxpbWl0ZXJTdHJpbmdzID0gb3B0aW9uc0NvcHkuZGVsaW1pdGVycy5mbGF0TWFwKGQgPT4gW1xuICAgICAgZC5sZWZ0LFxuICAgICAgZC5yaWdodFxuICAgIF0pO1xuICAgIGNvbnN0IG1pZ2h0SGF2ZU1hdGggPSB0ZXh0ID0+XG4gICAgICBkZWxpbWl0ZXJTdHJpbmdzLnNvbWUoZCA9PiB0ZXh0LmluZGV4T2YoZCkgIT09IC0xKTtcbiAgICBvcHRpb25zQ29weS5taWdodEhhdmVNYXRoID0gbWlnaHRIYXZlTWF0aDtcbiAgICByZW5kZXJFbGVtKGVsZW0sIG9wdGlvbnNDb3B5KTtcbiAgfTtcblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgY29uc3Qga2F0ZXhKU1VSTCA9ICdodHRwczovL2Rpc3RpbGwucHViL3RoaXJkLXBhcnR5L2thdGV4L2thdGV4Lm1pbi5qcyc7XG4gIGNvbnN0IGthdGV4Q1NTVGFnID0gJzxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi90aGlyZC1wYXJ0eS9rYXRleC9rYXRleC5taW4uY3NzXCIgY3Jvc3NvcmlnaW49XCJhbm9ueW1vdXNcIj4nO1xuXG4gIGNvbnN0IFQgPSBUZW1wbGF0ZSgnZC1tYXRoJywgYFxuJHtrYXRleENTU1RhZ31cbjxzdHlsZT5cblxuOmhvc3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbnRhaW46IHN0eWxlO1xufVxuXG46aG9zdChbYmxvY2tdKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ke21hdGh9XG48L3N0eWxlPlxuPHNwYW4gaWQ9J2thdGV4LWNvbnRhaW5lcic+PC9zcGFuPlxuYCk7XG5cbiAgLy8gRE1hdGgsIG5vdCBNYXRoLCBiZWNhdXNlIHRoYXQgd291bGQgY29uZmxpY3Qgd2l0aCB0aGUgSlMgYnVpbHQtaW5cbiAgY2xhc3MgRE1hdGggZXh0ZW5kcyBNdXRhdGluZyhUKEhUTUxFbGVtZW50KSkge1xuXG4gICAgc3RhdGljIHNldCBrYXRleE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgRE1hdGguX2thdGV4T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBpZiAoRE1hdGgua2F0ZXhPcHRpb25zLmRlbGltaXRlcnMpIHtcbiAgICAgICAgaWYgKCFETWF0aC5rYXRleEFkZGVkKSB7XG4gICAgICAgICAgRE1hdGguYWRkS2F0ZXgoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBETWF0aC5rYXRleExvYWRlZENhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IGthdGV4T3B0aW9ucygpIHtcbiAgICAgIGlmICghRE1hdGguX2thdGV4T3B0aW9ucykge1xuICAgICAgICBETWF0aC5fa2F0ZXhPcHRpb25zID0ge1xuICAgICAgICAgIGRlbGltaXRlcnM6IFsgeyAnbGVmdCc6JyQkJywgJ3JpZ2h0JzonJCQnLCAnZGlzcGxheSc6IGZhbHNlIH0gXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIERNYXRoLl9rYXRleE9wdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIGthdGV4TG9hZGVkQ2FsbGJhY2soKSB7XG4gICAgICAvLyByZW5kZXIgYWxsIGQtbWF0aCB0YWdzXG4gICAgICBjb25zdCBtYXRoVGFncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2QtbWF0aCcpO1xuICAgICAgZm9yIChjb25zdCBtYXRoVGFnIG9mIG1hdGhUYWdzKSB7XG4gICAgICAgIG1hdGhUYWcucmVuZGVyQ29udGVudCgpO1xuICAgICAgfVxuICAgICAgLy8gdHJhbnNmb3JtIGlubGluZSBkZWxpbWl0ZWQgbWF0aCB0byBkLW1hdGggdGFnc1xuICAgICAgaWYgKERNYXRoLmthdGV4T3B0aW9ucy5kZWxpbWl0ZXJzKSB7XG4gICAgICAgIHJlbmRlck1hdGhJbkVsZW1lbnQoZG9jdW1lbnQuYm9keSwgRE1hdGgua2F0ZXhPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYWRkS2F0ZXgoKSB7XG4gICAgICAvLyBjc3MgdGFnIGNhbiB1c2UgdGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvblxuICAgICAgZG9jdW1lbnQuaGVhZC5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIGthdGV4Q1NTVGFnKTtcbiAgICAgIC8vIHNjcmlwdCB0YWcgaGFzIHRvIGJlIGNyZWF0ZWQgdG8gd29yayBwcm9wZXJseVxuICAgICAgY29uc3Qgc2NyaXB0VGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHRUYWcuc3JjID0ga2F0ZXhKU1VSTDtcbiAgICAgIHNjcmlwdFRhZy5hc3luYyA9IHRydWU7XG4gICAgICBzY3JpcHRUYWcub25sb2FkID0gRE1hdGgua2F0ZXhMb2FkZWRDYWxsYmFjaztcbiAgICAgIHNjcmlwdFRhZy5jcm9zc29yaWdpbiA9ICdhbm9ueW1vdXMnO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRUYWcpO1xuXG4gICAgICBETWF0aC5rYXRleEFkZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGxvY2FsT3B0aW9ucyA9IHsgZGlzcGxheU1vZGU6IHRoaXMuaGFzQXR0cmlidXRlKCdibG9jaycpIH07XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihsb2NhbE9wdGlvbnMsIERNYXRoLmthdGV4T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgaWYgKCFETWF0aC5rYXRleEFkZGVkKSB7XG4gICAgICAgIERNYXRoLmFkZEthdGV4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyQ29udGVudCgpIHtcbiAgICAgIGlmICh0eXBlb2Yga2F0ZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcja2F0ZXgtY29udGFpbmVyJyk7XG4gICAgICAgIGthdGV4LnJlbmRlcih0aGlzLnRleHRDb250ZW50LCBjb250YWluZXIsIHRoaXMub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBETWF0aC5rYXRleEFkZGVkID0gZmFsc2U7XG4gIERNYXRoLmlubGluZU1hdGhSZW5kZXJlZCA9IGZhbHNlO1xuICB3aW5kb3cuRE1hdGggPSBETWF0aDsgLy8gVE9ETzogY2hlY2sgaWYgdGhpcyBjYW4gYmUgcmVtb3ZlZCwgb3IgaWYgd2Ugc2hvdWxkIGV4cG9zZSBhIGRpc3RpbGwgZ2xvYmFsXG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuICAvL1xuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAvL1xuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAvL1xuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiAgZnVuY3Rpb24gY29sbGVjdF9jaXRhdGlvbnMoZG9tID0gZG9jdW1lbnQpIHtcbiAgICBjb25zdCBjaXRhdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgY2l0ZVRhZ3MgPSBkb20ucXVlcnlTZWxlY3RvckFsbChcImQtY2l0ZVwiKTtcbiAgICBmb3IgKGNvbnN0IHRhZyBvZiBjaXRlVGFncykge1xuICAgICAgY29uc3Qga2V5U3RyaW5nID0gdGFnLmdldEF0dHJpYnV0ZShcImtleVwiKSB8fCB0YWcuZ2V0QXR0cmlidXRlKFwiYmlidGV4LWtleVwiKTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlTdHJpbmcuc3BsaXQoXCIsXCIpLm1hcChrID0+IGsudHJpbSgpKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgY2l0YXRpb25zLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLmNpdGF0aW9uc107XG4gIH1cblxuICBmdW5jdGlvbiBhdXRob3Jfc3RyaW5nKGVudCwgdGVtcGxhdGUsIHNlcCwgZmluYWxTZXApIHtcbiAgICBpZiAoZW50LmF1dGhvciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgdmFyIG5hbWVzID0gZW50LmF1dGhvci5zcGxpdChcIiBhbmQgXCIpO1xuICAgIGxldCBuYW1lX3N0cmluZ3MgPSBuYW1lcy5tYXAobmFtZSA9PiB7XG4gICAgICBuYW1lID0gbmFtZS50cmltKCk7XG4gICAgICBpZiAobmFtZS5pbmRleE9mKFwiLFwiKSAhPSAtMSkge1xuICAgICAgICB2YXIgbGFzdCA9IG5hbWUuc3BsaXQoXCIsXCIpWzBdLnRyaW0oKTtcbiAgICAgICAgdmFyIGZpcnN0cyA9IG5hbWUuc3BsaXQoXCIsXCIpWzFdO1xuICAgICAgfSBlbHNlIGlmIChuYW1lLmluZGV4T2YoXCIgXCIpICE9IC0xKSB7XG4gICAgICAgIHZhciBsYXN0ID0gbmFtZVxuICAgICAgICAgIC5zcGxpdChcIiBcIilcbiAgICAgICAgICAuc2xpY2UoLTEpWzBdXG4gICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgdmFyIGZpcnN0cyA9IG5hbWVcbiAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgLnNsaWNlKDAsIC0xKVxuICAgICAgICAgIC5qb2luKFwiIFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsYXN0ID0gbmFtZS50cmltKCk7XG4gICAgICB9XG4gICAgICB2YXIgaW5pdGlhbHMgPSBcIlwiO1xuICAgICAgaWYgKGZpcnN0cyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5pdGlhbHMgPSBmaXJzdHNcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgIC5tYXAocyA9PiBzLnRyaW0oKVswXSk7XG4gICAgICAgIGluaXRpYWxzID0gaW5pdGlhbHMuam9pbihcIi5cIikgKyBcIi5cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW1wbGF0ZVxuICAgICAgICAucmVwbGFjZShcIiR7Rn1cIiwgZmlyc3RzKVxuICAgICAgICAucmVwbGFjZShcIiR7TH1cIiwgbGFzdClcbiAgICAgICAgLnJlcGxhY2UoXCIke0l9XCIsIGluaXRpYWxzKVxuICAgICAgICAudHJpbSgpOyAvLyBpbiBjYXNlIG9uZSBvZiBmaXJzdCBvciBsYXN0IHdhcyBlbXB0eVxuICAgIH0pO1xuICAgIGlmIChuYW1lcy5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgc3RyID0gbmFtZV9zdHJpbmdzLnNsaWNlKDAsIG5hbWVzLmxlbmd0aCAtIDEpLmpvaW4oc2VwKTtcbiAgICAgIHN0ciArPSAoZmluYWxTZXAgfHwgc2VwKSArIG5hbWVfc3RyaW5nc1tuYW1lcy5sZW5ndGggLSAxXTtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuYW1lX3N0cmluZ3NbMF07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdmVudWVfc3RyaW5nKGVudCkge1xuICAgIHZhciBjaXRlID0gZW50LmpvdXJuYWwgfHwgZW50LmJvb2t0aXRsZSB8fCBcIlwiO1xuICAgIGlmIChcInZvbHVtZVwiIGluIGVudCkge1xuICAgICAgdmFyIGlzc3VlID0gZW50Lmlzc3VlIHx8IGVudC5udW1iZXI7XG4gICAgICBpc3N1ZSA9IGlzc3VlICE9IHVuZGVmaW5lZCA/IFwiKFwiICsgaXNzdWUgKyBcIilcIiA6IFwiXCI7XG4gICAgICBjaXRlICs9IFwiLCBWb2wgXCIgKyBlbnQudm9sdW1lICsgaXNzdWU7XG4gICAgfVxuICAgIGlmIChcInBhZ2VzXCIgaW4gZW50KSB7XG4gICAgICBjaXRlICs9IFwiLCBwcC4gXCIgKyBlbnQucGFnZXM7XG4gICAgfVxuICAgIGlmIChjaXRlICE9IFwiXCIpIGNpdGUgKz0gXCIuIFwiO1xuICAgIGlmIChcInB1Ymxpc2hlclwiIGluIGVudCkge1xuICAgICAgY2l0ZSArPSBlbnQucHVibGlzaGVyO1xuICAgICAgaWYgKGNpdGVbY2l0ZS5sZW5ndGggLSAxXSAhPSBcIi5cIikgY2l0ZSArPSBcIi5cIjtcbiAgICB9XG4gICAgcmV0dXJuIGNpdGU7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rX3N0cmluZyhlbnQpIHtcbiAgICBpZiAoXCJ1cmxcIiBpbiBlbnQpIHtcbiAgICAgIHZhciB1cmwgPSBlbnQudXJsO1xuICAgICAgdmFyIGFyeGl2X21hdGNoID0gL2FyeGl2XFwub3JnXFwvYWJzXFwvKFswLTlcXC5dKikvLmV4ZWModXJsKTtcbiAgICAgIGlmIChhcnhpdl9tYXRjaCAhPSBudWxsKSB7XG4gICAgICAgIHVybCA9IGBodHRwOi8vYXJ4aXYub3JnL3BkZi8ke2FyeGl2X21hdGNoWzFdfS5wZGZgO1xuICAgICAgfVxuXG4gICAgICBpZiAodXJsLnNsaWNlKC00KSA9PSBcIi5wZGZcIikge1xuICAgICAgICB2YXIgbGFiZWwgPSBcIlBERlwiO1xuICAgICAgfSBlbHNlIGlmICh1cmwuc2xpY2UoLTUpID09IFwiLmh0bWxcIikge1xuICAgICAgICB2YXIgbGFiZWwgPSBcIkhUTUxcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgICZlbnNwOzxhIGhyZWY9XCIke3VybH1cIj5bJHtsYWJlbCB8fCBcImxpbmtcIn1dPC9hPmA7XG4gICAgfSAvKiBlbHNlIGlmIChcImRvaVwiIGluIGVudCl7XG4gICAgICByZXR1cm4gYCAmZW5zcDs8YSBocmVmPVwiaHR0cHM6Ly9kb2kub3JnLyR7ZW50LmRvaX1cIiA+W0RPSV08L2E+YDtcbiAgICB9Ki8gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZG9pX3N0cmluZyhlbnQsIG5ld19saW5lKSB7XG4gICAgaWYgKFwiZG9pXCIgaW4gZW50KSB7XG4gICAgICByZXR1cm4gYCR7bmV3X2xpbmUgPyBcIjxicj5cIiA6IFwiXCJ9IDxhIGhyZWY9XCJodHRwczovL2RvaS5vcmcvJHtcbiAgICAgIGVudC5kb2lcbiAgICB9XCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246aW5oZXJpdDtcIj5ET0k6ICR7ZW50LmRvaX08L2E+YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGl0bGVfc3RyaW5nKGVudCkge1xuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPicgKyBlbnQudGl0bGUgKyBcIjwvc3Bhbj4gXCI7XG4gIH1cblxuICBmdW5jdGlvbiBiaWJsaW9ncmFwaHlfY2l0ZShlbnQsIGZhbmN5KSB7XG4gICAgaWYgKGVudCkge1xuICAgICAgdmFyIGNpdGUgPSB0aXRsZV9zdHJpbmcoZW50KTtcbiAgICAgIGNpdGUgKz0gbGlua19zdHJpbmcoZW50KSArIFwiPGJyPlwiO1xuICAgICAgaWYgKGVudC5hdXRob3IpIHtcbiAgICAgICAgY2l0ZSArPSBhdXRob3Jfc3RyaW5nKGVudCwgXCIke0x9LCAke0l9XCIsIFwiLCBcIiwgXCIgYW5kIFwiKTtcbiAgICAgICAgaWYgKGVudC55ZWFyIHx8IGVudC5kYXRlKSB7XG4gICAgICAgICAgY2l0ZSArPSBcIiwgXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbnQueWVhciB8fCBlbnQuZGF0ZSkge1xuICAgICAgICBjaXRlICs9IChlbnQueWVhciB8fCBlbnQuZGF0ZSkgKyBcIi4gXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaXRlICs9IFwiLiBcIjtcbiAgICAgIH1cbiAgICAgIGNpdGUgKz0gdmVudWVfc3RyaW5nKGVudCk7XG4gICAgICBjaXRlICs9IGRvaV9zdHJpbmcoZW50KTtcbiAgICAgIHJldHVybiBjaXRlO1xuICAgICAgLyp2YXIgY2l0ZSA9ICBhdXRob3Jfc3RyaW5nKGVudCwgXCIke0x9LCAke0l9XCIsIFwiLCBcIiwgXCIgYW5kIFwiKTtcbiAgICAgIGlmIChlbnQueWVhciB8fCBlbnQuZGF0ZSl7XG4gICAgICAgIGNpdGUgKz0gXCIsIFwiICsgKGVudC55ZWFyIHx8IGVudC5kYXRlKSArIFwiLiBcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2l0ZSArPSBcIi4gXCJcbiAgICAgIH1cbiAgICAgIGNpdGUgKz0gXCI8Yj5cIiArIGVudC50aXRsZSArIFwiPC9iPi4gXCI7XG4gICAgICBjaXRlICs9IHZlbnVlX3N0cmluZyhlbnQpO1xuICAgICAgY2l0ZSArPSBkb2lfc3RyaW5nKGVudCk7XG4gICAgICBjaXRlICs9IGxpbmtfc3RyaW5nKGVudCk7XG4gICAgICByZXR1cm4gY2l0ZSovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIj9cIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBob3Zlcl9jaXRlKGVudCkge1xuICAgIGlmIChlbnQpIHtcbiAgICAgIHZhciBjaXRlID0gXCJcIjtcbiAgICAgIGNpdGUgKz0gXCI8c3Ryb25nPlwiICsgZW50LnRpdGxlICsgXCI8L3N0cm9uZz5cIjtcbiAgICAgIGNpdGUgKz0gbGlua19zdHJpbmcoZW50KTtcbiAgICAgIGNpdGUgKz0gXCI8YnI+XCI7XG5cbiAgICAgIHZhciBhX3N0ciA9IGF1dGhvcl9zdHJpbmcoZW50LCBcIiR7SX0gJHtMfVwiLCBcIiwgXCIpICsgXCIuXCI7XG4gICAgICB2YXIgdl9zdHIgPVxuICAgICAgICB2ZW51ZV9zdHJpbmcoZW50KS50cmltKCkgKyBcIiBcIiArIGVudC55ZWFyICsgXCIuIFwiICsgZG9pX3N0cmluZyhlbnQsIHRydWUpO1xuXG4gICAgICBpZiAoKGFfc3RyICsgdl9zdHIpLmxlbmd0aCA8IE1hdGgubWluKDQwLCBlbnQudGl0bGUubGVuZ3RoKSkge1xuICAgICAgICBjaXRlICs9IGFfc3RyICsgXCIgXCIgKyB2X3N0cjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNpdGUgKz0gYV9zdHIgKyBcIjxicj5cIiArIHZfc3RyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNpdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIj9cIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkb21Db250ZW50TG9hZGVkKCkge1xuICAgIHJldHVybiBbJ2ludGVyYWN0aXZlJywgJ2NvbXBsZXRlJ10uaW5kZXhPZihkb2N1bWVudC5yZWFkeVN0YXRlKSAhPT0gLTE7XG4gIH1cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG4gIC8vXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIC8vXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gIC8vXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuICBmdW5jdGlvbiBfbW92ZUxlZ2FjeUFmZmlsaWF0aW9uRm9ybWF0SW50b0FycmF5KGZyb250TWF0dGVyKSB7XG4gICAgLy8gYXV0aG9ycyB1c2VkIHRvIGhhdmUgcHJvcG9lcnRpZXMgXCJhZmZpbGlhdGlvblwiIGFuZCBcImFmZmlsaWF0aW9uVVJMXCIuXG4gICAgLy8gV2Ugbm93IGVuY291cmFnZSB1c2luZyBhbiBhcnJheSBmb3IgYWZmaWxpYXRpb25zIGNvbnRhaW5pbmcgb2JqZWN0cyB3aXRoXG4gICAgLy8gcHJvcGVydGllcyBcIm5hbWVcIiBhbmQgXCJ1cmxcIi5cbiAgICBmb3IgKGxldCBhdXRob3Igb2YgZnJvbnRNYXR0ZXIuYXV0aG9ycykge1xuICAgICAgY29uc3QgaGFzT2xkU3R5bGUgPSBCb29sZWFuKGF1dGhvci5hZmZpbGlhdGlvbik7XG4gICAgICBjb25zdCBoYXNOZXdTdHlsZSA9IEJvb2xlYW4oYXV0aG9yLmFmZmlsaWF0aW9ucyk7XG4gICAgICBpZiAoIWhhc09sZFN0eWxlKSBjb250aW51ZTtcbiAgICAgIGlmIChoYXNOZXdTdHlsZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEF1dGhvciAke2F1dGhvci5hdXRob3J9IGhhcyBib3RoIG9sZC1zdHlsZSAoXCJhZmZpbGlhdGlvblwiICYgXCJhZmZpbGlhdGlvblVSTFwiKSBhbmQgbmV3IHN0eWxlIChcImFmZmlsaWF0aW9uc1wiKSBhZmZpbGlhdGlvbiBpbmZvcm1hdGlvbiFgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBuZXdBZmZpbGlhdGlvbiA9IHtcbiAgICAgICAgICBcIm5hbWVcIjogYXV0aG9yLmFmZmlsaWF0aW9uXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhdXRob3IuYWZmaWxpYXRpb25VUkwpIG5ld0FmZmlsaWF0aW9uLnVybCA9IGF1dGhvci5hZmZpbGlhdGlvblVSTDtcbiAgICAgICAgYXV0aG9yLmFmZmlsaWF0aW9ucyA9IFtuZXdBZmZpbGlhdGlvbl07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmcm9udE1hdHRlclxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VGcm9udG1hdHRlcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2NyaXB0VGFnID0gZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICBpZiAoc2NyaXB0VGFnKSB7XG4gICAgICBjb25zdCB0eXBlID0gc2NyaXB0VGFnLmdldEF0dHJpYnV0ZSgndHlwZScpO1xuICAgICAgaWYgKHR5cGUuc3BsaXQoJy8nKVsxXSA9PSAnanNvbicpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHNjcmlwdFRhZy50ZXh0Q29udGVudDtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgcmV0dXJuIF9tb3ZlTGVnYWN5QWZmaWxpYXRpb25Gb3JtYXRJbnRvQXJyYXkocGFyc2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Rpc3RpbGwgb25seSBzdXBwb3J0cyBKU09OIGZyb250bWF0dGVyIHRhZ3MgYW55bW9yZTsgbm8gbW9yZSBZQU1MLicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdZb3UgYWRkZWQgYSBmcm9udG1hdHRlciB0YWcgYnV0IGRpZCBub3QgcHJvdmlkZSBhIHNjcmlwdCB0YWcgd2l0aCBmcm9udCBtYXR0ZXIgZGF0YSBpbiBpdC4gUGxlYXNlIHRha2UgYSBsb29rIGF0IG91ciB0ZW1wbGF0ZXMuJyk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNsYXNzIEZyb250TWF0dGVyJDEgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2QtZnJvbnQtbWF0dGVyJzsgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0ge2NoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSwgc3VidHJlZTogdHJ1ZX07XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCAoZW50cmllcykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0Lm5vZGVOYW1lID09PSAnU0NSSVBUJyB8fCBlbnRyeS50eXBlID09PSAnY2hhcmFjdGVyRGF0YScpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBwYXJzZUZyb250bWF0dGVyKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgbm90aWZ5KGRhdGEpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IGRldGFpbDogZGF0YSwgYnViYmxlczogdHJ1ZSB9O1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ29uRnJvbnRNYXR0ZXJDaGFuZ2VkJywgb3B0aW9ucyk7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIC8vIG5vIGFwcGVuZGl4IC0+IGFkZCBhcHBlbmRpeFxuICAvLyB0aXRsZSBpbiBmcm9udCwgbm8gaDEgLT4gYWRkIGl0XG4gIC8vIG5vIHRpdGxlIGluIGZyb250LCBoMSAtPiByZWFkIGFuZCBwdXQgaW50byBmcm9udE1hdHRlclxuICAvLyBmb290bm90ZSAtPiBmb290bm90ZSBsaXN0XG4gIC8vIGJyZWFrIHVwIGJpYlxuICAvLyBpZiBjaXRhdGlvbiwgbm8gYmliLWxpc3QgLT4gYWRkIGNpdGF0aW9uLWxpc3RcblxuICAvLyBpZiBhdXRob3JzLCBubyBieWxpbmUgLT4gYWRkIGJ5bGluZVxuXG4gIGZ1bmN0aW9uIG9wdGlvbmFsQ29tcG9uZW50cyhkb20sIGRhdGEpIHtcbiAgICBjb25zdCBib2R5ID0gZG9tLmJvZHk7XG4gICAgY29uc3QgYXJ0aWNsZSA9IGJvZHkucXVlcnlTZWxlY3RvcignZC1hcnRpY2xlJyk7XG5cbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGFydGljbGUgdGFnLCBzb21ldGhpbmcgd2VpcmQgaXMgZ29pbmcgb27igJRnaXZpbmcgdXAuXG4gICAgaWYgKCFhcnRpY2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIGQtYXJ0aWNsZSB0YWcgZm91bmQ7IHNraXBwaW5nIGFkZGluZyBvcHRpb25hbCBjb21wb25lbnRzIScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBieWxpbmUgPSBkb20ucXVlcnlTZWxlY3RvcignZC1ieWxpbmUnKTtcbiAgICBpZiAoIWJ5bGluZSkge1xuICAgICAgaWYgKGRhdGEuYXV0aG9ycykge1xuICAgICAgICBieWxpbmUgPSBkb20uY3JlYXRlRWxlbWVudCgnZC1ieWxpbmUnKTtcbiAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoYnlsaW5lLCBhcnRpY2xlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gYXV0aG9ycyBmb3VuZCBpbiBmcm9udCBtYXR0ZXI7IHBsZWFzZSBhZGQgdGhlbSBiZWZvcmUgc3VibWlzc2lvbiEnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGl0bGUgPSBkb20ucXVlcnlTZWxlY3RvcignZC10aXRsZScpO1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHRpdGxlID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ2QtdGl0bGUnKTtcbiAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKHRpdGxlLCBieWxpbmUpO1xuICAgIH1cblxuICAgIGxldCBoMSA9IHRpdGxlLnF1ZXJ5U2VsZWN0b3IoJ2gxJyk7XG4gICAgaWYgKCFoMSkge1xuICAgICAgaDEgPSBkb20uY3JlYXRlRWxlbWVudCgnaDEnKTtcbiAgICAgIGgxLnRleHRDb250ZW50ID0gZGF0YS50aXRsZTtcbiAgICAgIHRpdGxlLmluc2VydEJlZm9yZShoMSwgdGl0bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzUGFzc3dvcmQgPSB0eXBlb2YgZGF0YS5wYXNzd29yZCAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgbGV0IGludGVyc3RpdGlhbCA9IGJvZHkucXVlcnlTZWxlY3RvcignZC1pbnRlcnN0aXRpYWwnKTtcbiAgICBpZiAoaGFzUGFzc3dvcmQgJiYgIWludGVyc3RpdGlhbCkge1xuICAgICAgY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICBjb25zdCBvbkxvY2FsaG9zdCA9IGluQnJvd3NlciAmJiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUuaW5jbHVkZXMoJ2xvY2FsaG9zdCcpO1xuICAgICAgaWYgKCFpbkJyb3dzZXIgfHwgIW9uTG9jYWxob3N0KSB7XG4gICAgICAgIGludGVyc3RpdGlhbCA9IGRvbS5jcmVhdGVFbGVtZW50KCdkLWludGVyc3RpdGlhbCcpO1xuICAgICAgICBpbnRlcnN0aXRpYWwucGFzc3dvcmQgPSBkYXRhLnBhc3N3b3JkO1xuICAgICAgICBib2R5Lmluc2VydEJlZm9yZShpbnRlcnN0aXRpYWwsIGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaGFzUGFzc3dvcmQgJiYgaW50ZXJzdGl0aWFsKSB7XG4gICAgICBpbnRlcnN0aXRpYWwucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICB9XG5cbiAgICBsZXQgYXBwZW5kaXggPSBkb20ucXVlcnlTZWxlY3RvcignZC1hcHBlbmRpeCcpO1xuICAgIGlmICghYXBwZW5kaXgpIHtcbiAgICAgIGFwcGVuZGl4ID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ2QtYXBwZW5kaXgnKTtcbiAgICAgIGRvbS5ib2R5LmFwcGVuZENoaWxkKGFwcGVuZGl4KTtcbiAgICB9XG5cbiAgICBsZXQgZm9vdG5vdGVMaXN0ID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJ2QtZm9vdG5vdGUtbGlzdCcpO1xuICAgIGlmICghZm9vdG5vdGVMaXN0KSB7XG4gICAgICBmb290bm90ZUxpc3QgPSBkb20uY3JlYXRlRWxlbWVudCgnZC1mb290bm90ZS1saXN0Jyk7XG4gICAgICBhcHBlbmRpeC5hcHBlbmRDaGlsZChmb290bm90ZUxpc3QpO1xuICAgIH1cblxuICAgIGxldCBjaXRhdGlvbkxpc3QgPSBkb20ucXVlcnlTZWxlY3RvcignZC1jaXRhdGlvbi1saXN0Jyk7XG4gICAgaWYgKCFjaXRhdGlvbkxpc3QpIHtcbiAgICAgIGNpdGF0aW9uTGlzdCA9IGRvbS5jcmVhdGVFbGVtZW50KCdkLWNpdGF0aW9uLWxpc3QnKTtcbiAgICAgIGFwcGVuZGl4LmFwcGVuZENoaWxkKGNpdGF0aW9uTGlzdCk7XG4gICAgfVxuXG4gIH1cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgY29uc3QgZnJvbnRNYXR0ZXIgPSBuZXcgRnJvbnRNYXR0ZXIoKTtcblxuICBjb25zdCBDb250cm9sbGVyID0ge1xuICAgIGZyb250TWF0dGVyOiBmcm9udE1hdHRlcixcbiAgICB3YWl0aW5nT246IHtcbiAgICAgIGJpYmxpb2dyYXBoeTogW10sXG4gICAgICBjaXRhdGlvbnM6IFtdXG4gICAgfSxcbiAgICBsaXN0ZW5lcnM6IHtcbiAgICAgIG9uQ2l0ZUtleUNyZWF0ZWQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgW2NpdGVUYWcsIGtleXNdID0gZXZlbnQuZGV0YWlsO1xuXG4gICAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGNpdGF0aW9uc1xuICAgICAgICBpZiAoIWZyb250TWF0dGVyLmNpdGF0aW9uc0NvbGxlY3RlZCkge1xuICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ29uQ2l0ZUtleUNyZWF0ZWQsIGJ1dCB1bnJlc29sdmVkIGRlcGVuZGVuY3kgKFwiY2l0YXRpb25zXCIpLiBFbnF1ZWluZy4nKTtcbiAgICAgICAgICBDb250cm9sbGVyLndhaXRpbmdPbi5jaXRhdGlvbnMucHVzaCgoKSA9PlxuICAgICAgICAgICAgQ29udHJvbGxlci5saXN0ZW5lcnMub25DaXRlS2V5Q3JlYXRlZChldmVudClcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVuc3VyZSB3ZSBoYXZlIGEgbG9hZGVkIGJpYmxpb2dyYXBoeVxuICAgICAgICBpZiAoIWZyb250TWF0dGVyLmJpYmxpb2dyYXBoeVBhcnNlZCkge1xuICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ29uQ2l0ZUtleUNyZWF0ZWQsIGJ1dCB1bnJlc29sdmVkIGRlcGVuZGVuY3kgKFwiYmlibGlvZ3JhcGh5XCIpLiBFbnF1ZWluZy4nKTtcbiAgICAgICAgICBDb250cm9sbGVyLndhaXRpbmdPbi5iaWJsaW9ncmFwaHkucHVzaCgoKSA9PlxuICAgICAgICAgICAgQ29udHJvbGxlci5saXN0ZW5lcnMub25DaXRlS2V5Q3JlYXRlZChldmVudClcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBrZXlzLm1hcChrZXkgPT4gZnJvbnRNYXR0ZXIuY2l0YXRpb25zLmluZGV4T2Yoa2V5KSk7XG4gICAgICAgIGNpdGVUYWcubnVtYmVycyA9IG51bWJlcnM7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBrZXlzLm1hcChrZXkgPT4gZnJvbnRNYXR0ZXIuYmlibGlvZ3JhcGh5LmdldChrZXkpKTtcbiAgICAgICAgY2l0ZVRhZy5lbnRyaWVzID0gZW50cmllcztcbiAgICAgIH0sXG5cbiAgICAgIG9uQ2l0ZUtleUNoYW5nZWQoKSB7XG4gICAgICAgIC8vIGNvbnN0IFtjaXRlVGFnLCBrZXlzXSA9IGV2ZW50LmRldGFpbDtcblxuICAgICAgICAvLyB1cGRhdGUgY2l0YXRpb25zXG4gICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9ucyA9IGNvbGxlY3RfY2l0YXRpb25zKCk7XG4gICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9uc0NvbGxlY3RlZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3Qgd2FpdGluZ0NhbGxiYWNrIG9mIENvbnRyb2xsZXIud2FpdGluZ09uLmNpdGF0aW9ucy5zbGljZSgpKSB7XG4gICAgICAgICAgd2FpdGluZ0NhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgYmlibGlvZ3JhcGh5XG4gICAgICAgIGNvbnN0IGNpdGF0aW9uTGlzdFRhZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkLWNpdGF0aW9uLWxpc3RcIik7XG4gICAgICAgIGNvbnN0IGJpYmxpb2dyYXBoeUVudHJpZXMgPSBuZXcgTWFwKFxuICAgICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9ucy5tYXAoY2l0YXRpb25LZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtjaXRhdGlvbktleSwgZnJvbnRNYXR0ZXIuYmlibGlvZ3JhcGh5LmdldChjaXRhdGlvbktleSldO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNpdGF0aW9uTGlzdFRhZy5jaXRhdGlvbnMgPSBiaWJsaW9ncmFwaHlFbnRyaWVzO1xuXG4gICAgICAgIGNvbnN0IGNpdGVUYWdzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImQtY2l0ZVwiKTtcbiAgICAgICAgZm9yIChjb25zdCBjaXRlVGFnIG9mIGNpdGVUYWdzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2l0ZVRhZyk7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IGNpdGVUYWcua2V5cztcbiAgICAgICAgICBjb25zdCBudW1iZXJzID0ga2V5cy5tYXAoa2V5ID0+IGZyb250TWF0dGVyLmNpdGF0aW9ucy5pbmRleE9mKGtleSkpO1xuICAgICAgICAgIGNpdGVUYWcubnVtYmVycyA9IG51bWJlcnM7XG4gICAgICAgICAgY29uc3QgZW50cmllcyA9IGtleXMubWFwKGtleSA9PiBmcm9udE1hdHRlci5iaWJsaW9ncmFwaHkuZ2V0KGtleSkpO1xuICAgICAgICAgIGNpdGVUYWcuZW50cmllcyA9IGVudHJpZXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9uQ2l0ZUtleVJlbW92ZWQoZXZlbnQpIHtcbiAgICAgICAgQ29udHJvbGxlci5saXN0ZW5lcnMub25DaXRlS2V5Q2hhbmdlZChldmVudCk7XG4gICAgICB9LFxuXG4gICAgICBvbkJpYmxpb2dyYXBoeUNoYW5nZWQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2l0YXRpb25MaXN0VGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImQtY2l0YXRpb24tbGlzdFwiKTtcblxuICAgICAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBldmVudC5kZXRhaWw7XG5cbiAgICAgICAgZnJvbnRNYXR0ZXIuYmlibGlvZ3JhcGh5ID0gYmlibGlvZ3JhcGh5O1xuICAgICAgICBmcm9udE1hdHRlci5iaWJsaW9ncmFwaHlQYXJzZWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHdhaXRpbmdDYWxsYmFjayBvZiBDb250cm9sbGVyLndhaXRpbmdPbi5iaWJsaW9ncmFwaHkuc2xpY2UoKSkge1xuICAgICAgICAgIHdhaXRpbmdDYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5zdXJlIHdlIGhhdmUgY2l0YXRpb25zXG4gICAgICAgIGlmICghZnJvbnRNYXR0ZXIuY2l0YXRpb25zQ29sbGVjdGVkKSB7XG4gICAgICAgICAgQ29udHJvbGxlci53YWl0aW5nT24uY2l0YXRpb25zLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBDb250cm9sbGVyLmxpc3RlbmVycy5vbkJpYmxpb2dyYXBoeUNoYW5nZWQoe1xuICAgICAgICAgICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgZGV0YWlsOiBldmVudC5kZXRhaWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXRhdGlvbkxpc3RUYWcuaGFzQXR0cmlidXRlKFwiZGlzdGlsbC1wcmVyZW5kZXJlZFwiKSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJDaXRhdGlvbiBsaXN0IHdhcyBwcmVyZW5kZXJlZDsgbm90IHVwZGF0aW5nIGl0LlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbnRyaWVzID0gbmV3IE1hcChcbiAgICAgICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9ucy5tYXAoY2l0YXRpb25LZXkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gW2NpdGF0aW9uS2V5LCBmcm9udE1hdHRlci5iaWJsaW9ncmFwaHkuZ2V0KGNpdGF0aW9uS2V5KV07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgY2l0YXRpb25MaXN0VGFnLmNpdGF0aW9ucyA9IGVudHJpZXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9uRm9vdG5vdGVDaGFuZ2VkKCkge1xuICAgICAgICAvLyBjb25zdCBmb290bm90ZSA9IGV2ZW50LmRldGFpbDtcbiAgICAgICAgLy9UT0RPOiBvcHRpbWl6ZSB0byBvbmx5IHVwZGF0ZSBjdXJyZW50IGZvb3Rub3RlXG4gICAgICAgIGNvbnN0IGZvb3Rub3Rlc0xpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZC1mb290bm90ZS1saXN0XCIpO1xuICAgICAgICBpZiAoZm9vdG5vdGVzTGlzdCkge1xuICAgICAgICAgIGNvbnN0IGZvb3Rub3RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJkLWZvb3Rub3RlXCIpO1xuICAgICAgICAgIGZvb3Rub3Rlc0xpc3QuZm9vdG5vdGVzID0gZm9vdG5vdGVzO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBvbkZyb250TWF0dGVyQ2hhbmdlZChldmVudCkge1xuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGV0YWlsO1xuICAgICAgICBtZXJnZUZyb21ZTUxGcm9udG1hdHRlcihmcm9udE1hdHRlciwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgaW50ZXJzdGl0aWFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImQtaW50ZXJzdGl0aWFsXCIpO1xuICAgICAgICBpZiAoaW50ZXJzdGl0aWFsKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmcm9udE1hdHRlci5wYXNzd29yZCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgaW50ZXJzdGl0aWFsLnBhc3N3b3JkID0gZnJvbnRNYXR0ZXIucGFzc3dvcmQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludGVyc3RpdGlhbC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGludGVyc3RpdGlhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJlcmVuZGVyZWQgPSBkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZShcImRpc3RpbGwtcHJlcmVuZGVyZWRcIik7XG4gICAgICAgIGlmICghcHJlcmVuZGVyZWQgJiYgZG9tQ29udGVudExvYWRlZCgpKSB7XG4gICAgICAgICAgb3B0aW9uYWxDb21wb25lbnRzKGRvY3VtZW50LCBmcm9udE1hdHRlcik7XG5cbiAgICAgICAgICBjb25zdCBhcHBlbmRpeCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXN0aWxsLWFwcGVuZGl4XCIpO1xuICAgICAgICAgIGlmIChhcHBlbmRpeCkge1xuICAgICAgICAgICAgYXBwZW5kaXguZnJvbnRNYXR0ZXIgPSBmcm9udE1hdHRlcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBieWxpbmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZC1ieWxpbmVcIik7XG4gICAgICAgICAgaWYgKGJ5bGluZSkge1xuICAgICAgICAgICAgYnlsaW5lLmZyb250TWF0dGVyID0gZnJvbnRNYXR0ZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRhdGEua2F0ZXgpIHtcbiAgICAgICAgICAgIERNYXRoLmthdGV4T3B0aW9ucyA9IGRhdGEua2F0ZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBET01Db250ZW50TG9hZGVkKCkge1xuICAgICAgICBpZiAoQ29udHJvbGxlci5sb2FkZWQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIkNvbnRyb2xsZXIgcmVjZWl2ZWQgRE9NQ29udGVudExvYWRlZCBidXQgd2FzIGFscmVhZHkgbG9hZGVkIVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoIWRvbUNvbnRlbnRMb2FkZWQoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiQ29udHJvbGxlciByZWNlaXZlZCBET01Db250ZW50TG9hZGVkIGF0IGRvY3VtZW50LnJlYWR5U3RhdGU6IFwiICtcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVhZHlTdGF0ZSArXG4gICAgICAgICAgICAgIFwiIVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQ29udHJvbGxlci5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCA0OiBDb250cm9sbGVyIHJ1bm5pbmcgRE9NQ29udGVudExvYWRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZyb250TWF0dGVyVGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImQtZnJvbnQtbWF0dGVyXCIpO1xuICAgICAgICBpZiAoZnJvbnRNYXR0ZXJUYWcpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcGFyc2VGcm9udG1hdHRlcihmcm9udE1hdHRlclRhZyk7XG4gICAgICAgICAgQ29udHJvbGxlci5saXN0ZW5lcnMub25Gcm9udE1hdHRlckNoYW5nZWQoeyBkZXRhaWw6IGRhdGEgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZpbmcgXCJjaXRhdGlvbnNcIiBkZXBlbmRlbmN5IGR1ZSB0byBpbml0aWFsIERPTSBsb2FkXG4gICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9ucyA9IGNvbGxlY3RfY2l0YXRpb25zKCk7XG4gICAgICAgIGZyb250TWF0dGVyLmNpdGF0aW9uc0NvbGxlY3RlZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3Qgd2FpdGluZ0NhbGxiYWNrIG9mIENvbnRyb2xsZXIud2FpdGluZ09uLmNpdGF0aW9ucy5zbGljZSgpKSB7XG4gICAgICAgICAgd2FpdGluZ0NhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJvbnRNYXR0ZXIuYmlibGlvZ3JhcGh5UGFyc2VkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3YWl0aW5nQ2FsbGJhY2sgb2YgQ29udHJvbGxlci53YWl0aW5nT24uYmlibGlvZ3JhcGh5LnNsaWNlKCkpIHtcbiAgICAgICAgICAgIHdhaXRpbmdDYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvb3Rub3Rlc0xpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiZC1mb290bm90ZS1saXN0XCIpO1xuICAgICAgICBpZiAoZm9vdG5vdGVzTGlzdCkge1xuICAgICAgICAgIGNvbnN0IGZvb3Rub3RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJkLWZvb3Rub3RlXCIpO1xuICAgICAgICAgIGZvb3Rub3Rlc0xpc3QuZm9vdG5vdGVzID0gZm9vdG5vdGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBsaXN0ZW5lcnNcbiAgfTsgLy8gQ29udHJvbGxlclxuXG4gIHZhciBiYXNlID0gXCIvKlxcbiAqIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcXG4gKlxcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcXFwiTGljZW5zZVxcXCIpO1xcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcXG4gKlxcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXFxuICpcXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXFxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXFxcIkFTIElTXFxcIiBCQVNJUyxcXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXFxuICovXFxuXFxuaHRtbCB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuXFx0bGluZS1oZWlnaHQ6IDEuNmVtO1xcbiAgLyogZm9udC1mYW1pbHk6IFxcXCJMaWJyZSBGcmFua2xpblxcXCIsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIHNhbnMtc2VyaWY7ICovXFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIE94eWdlbiwgVWJ1bnR1LCBDYW50YXJlbGwsIFxcXCJGaXJhIFNhbnNcXFwiLCBcXFwiRHJvaWQgU2Fuc1xcXCIsIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgLyosIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOyovXFxuICB0ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBodG1sIHtcXG4gICAgZm9udC1zaXplOiAxNnB4O1xcbiAgfVxcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogIzAwNDI3NjtcXG59XFxuXFxuZmlndXJlIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxudGFibGUge1xcblxcdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuXFx0Ym9yZGVyLXNwYWNpbmc6IDA7XFxufVxcblxcbnRhYmxlIHRoIHtcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG5cXG50YWJsZSB0aGVhZCB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG59XFxuXFxudGFibGUgdGhlYWQgdGgge1xcbiAgcGFkZGluZy1ib3R0b206IDAuNWVtO1xcbn1cXG5cXG50YWJsZSB0Ym9keSA6Zmlyc3QtY2hpbGQgdGQge1xcbiAgcGFkZGluZy10b3A6IDAuNWVtO1xcbn1cXG5cXG5wcmUge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxufVxcblxcbnAge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG59XFxuXFxuc3VwLCBzdWIge1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdG9wOiAtMC40ZW07XFxuICBsaW5lLWhlaWdodDogMWVtO1xcbn1cXG5cXG5zdWIge1xcbiAgdG9wOiAwLjRlbTtcXG59XFxuXFxuLmtpY2tlcixcXG4ubWFya2VyIHtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbn1cXG5cXG5cXG4vKiBIZWFkbGluZSAqL1xcblxcbkBtZWRpYShtaW4td2lkdGg6IDEwMjRweCkge1xcbiAgZC10aXRsZSBoMSBzcGFuIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICB9XFxufVxcblxcbi8qIEZpZ3VyZSAqL1xcblxcbmZpZ3VyZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBtYXJnaW4tYm90dG9tOiAyLjVlbTtcXG4gIG1hcmdpbi10b3A6IDEuNWVtO1xcbn1cXG5cXG5maWdjYXB0aW9uK2ZpZ3VyZSB7XFxuXFxufVxcblxcbmZpZ3VyZSBpbWcge1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbmZpZ3VyZSBzdmcgdGV4dCxcXG5maWd1cmUgc3ZnIHRzcGFuIHtcXG59XFxuXFxuZmlnY2FwdGlvbixcXG4uZmlnY2FwdGlvbiB7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuNWVtO1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiAxMDI0cHgpIHtcXG5maWdjYXB0aW9uLFxcbi5maWdjYXB0aW9uIHtcXG4gICAgZm9udC1zaXplOiAxM3B4O1xcbiAgfVxcbn1cXG5cXG5maWd1cmUuZXh0ZXJuYWwgaW1nIHtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgYm94LXNoYWRvdzogMCAxcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIHBhZGRpbmc6IDE4cHg7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5maWdjYXB0aW9uIGEge1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcXG59XFxuXFxuZmlnY2FwdGlvbiBiLFxcbmZpZ2NhcHRpb24gc3Ryb25nLCB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMS4wKTtcXG59XFxuXCI7XG5cbiAgdmFyIGxheW91dCA9IFwiLypcXG4gKiBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXFxuICpcXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXFxcIkxpY2Vuc2VcXFwiKTtcXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXFxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XFxuICpcXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxcbiAqXFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFxcXCJBUyBJU1xcXCIgQkFTSVMsXFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXFxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxcbiAqL1xcblxcbkBzdXBwb3J0cyBub3QgKGRpc3BsYXk6IGdyaWQpIHtcXG4gIC5iYXNlLWdyaWQsXFxuICBkaXN0aWxsLWhlYWRlcixcXG4gIGQtdGl0bGUsXFxuICBkLWFic3RyYWN0LFxcbiAgZC1hcnRpY2xlLFxcbiAgZC1hcHBlbmRpeCxcXG4gIGRpc3RpbGwtYXBwZW5kaXgsXFxuICBkLWJ5bGluZSxcXG4gIGQtZm9vdG5vdGUtbGlzdCxcXG4gIGQtY2l0YXRpb24tbGlzdCxcXG4gIGRpc3RpbGwtZm9vdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHBhZGRpbmc6IDhweDtcXG4gIH1cXG59XFxuXFxuLmJhc2UtZ3JpZCxcXG5kaXN0aWxsLWhlYWRlcixcXG5kLXRpdGxlLFxcbmQtYWJzdHJhY3QsXFxuZC1hcnRpY2xlLFxcbmQtYXBwZW5kaXgsXFxuZGlzdGlsbC1hcHBlbmRpeCxcXG5kLWJ5bGluZSxcXG5kLWZvb3Rub3RlLWxpc3QsXFxuZC1jaXRhdGlvbi1saXN0LFxcbmRpc3RpbGwtZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBqdXN0aWZ5LWl0ZW1zOiBzdHJldGNoO1xcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBbc2NyZWVuLXN0YXJ0XSA4cHggW3BhZ2Utc3RhcnQga2lja2VyLXN0YXJ0IHRleHQtc3RhcnQgZ3V0dGVyLXN0YXJ0IG1pZGRsZS1zdGFydF0gMWZyIDFmciAxZnIgMWZyIDFmciAxZnIgMWZyIDFmciBbdGV4dC1lbmQgcGFnZS1lbmQgZ3V0dGVyLWVuZCBraWNrZXItZW5kIG1pZGRsZS1lbmRdIDhweCBbc2NyZWVuLWVuZF07XFxuICBncmlkLWNvbHVtbi1nYXA6IDhweDtcXG59XFxuXFxuLmdyaWQge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIGdyaWQtY29sdW1uLWdhcDogOHB4O1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLmJhc2UtZ3JpZCxcXG4gIGRpc3RpbGwtaGVhZGVyLFxcbiAgZC10aXRsZSxcXG4gIGQtYWJzdHJhY3QsXFxuICBkLWFydGljbGUsXFxuICBkLWFwcGVuZGl4LFxcbiAgZGlzdGlsbC1hcHBlbmRpeCxcXG4gIGQtYnlsaW5lLFxcbiAgZC1mb290bm90ZS1saXN0LFxcbiAgZC1jaXRhdGlvbi1saXN0LFxcbiAgZGlzdGlsbC1mb290ZXIge1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IFtzY3JlZW4tc3RhcnRdIDFmciBbcGFnZS1zdGFydCBraWNrZXItc3RhcnQgbWlkZGxlLXN0YXJ0IHRleHQtc3RhcnRdIDQ1cHggNDVweCA0NXB4IDQ1cHggNDVweCA0NXB4IDQ1cHggNDVweCBbIGtpY2tlci1lbmQgdGV4dC1lbmQgZ3V0dGVyLXN0YXJ0XSA0NXB4IFttaWRkbGUtZW5kXSA0NXB4IFtwYWdlLWVuZCBndXR0ZXItZW5kXSAxZnIgW3NjcmVlbi1lbmRdO1xcbiAgICBncmlkLWNvbHVtbi1nYXA6IDE2cHg7XFxuICB9XFxuXFxuICAuZ3JpZCB7XFxuICAgIGdyaWQtY29sdW1uLWdhcDogMTZweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTAwMHB4KSB7XFxuICAuYmFzZS1ncmlkLFxcbiAgZGlzdGlsbC1oZWFkZXIsXFxuICBkLXRpdGxlLFxcbiAgZC1hYnN0cmFjdCxcXG4gIGQtYXJ0aWNsZSxcXG4gIGQtYXBwZW5kaXgsXFxuICBkaXN0aWxsLWFwcGVuZGl4LFxcbiAgZC1ieWxpbmUsXFxuICBkLWZvb3Rub3RlLWxpc3QsXFxuICBkLWNpdGF0aW9uLWxpc3QsXFxuICBkaXN0aWxsLWZvb3RlciB7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogW3NjcmVlbi1zdGFydF0gMWZyIFtwYWdlLXN0YXJ0IGtpY2tlci1zdGFydF0gNTBweCBbbWlkZGxlLXN0YXJ0XSA1MHB4IFt0ZXh0LXN0YXJ0IGtpY2tlci1lbmRdIDUwcHggNTBweCA1MHB4IDUwcHggNTBweCA1MHB4IDUwcHggNTBweCBbdGV4dC1lbmQgZ3V0dGVyLXN0YXJ0XSA1MHB4IFttaWRkbGUtZW5kXSA1MHB4IFtwYWdlLWVuZCBndXR0ZXItZW5kXSAxZnIgW3NjcmVlbi1lbmRdO1xcbiAgICBncmlkLWNvbHVtbi1nYXA6IDE2cHg7XFxuICB9XFxuXFxuICAuZ3JpZCB7XFxuICAgIGdyaWQtY29sdW1uLWdhcDogMTZweDtcXG4gIH1cXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTE4MHB4KSB7XFxuICAuYmFzZS1ncmlkLFxcbiAgZGlzdGlsbC1oZWFkZXIsXFxuICBkLXRpdGxlLFxcbiAgZC1hYnN0cmFjdCxcXG4gIGQtYXJ0aWNsZSxcXG4gIGQtYXBwZW5kaXgsXFxuICBkaXN0aWxsLWFwcGVuZGl4LFxcbiAgZC1ieWxpbmUsXFxuICBkLWZvb3Rub3RlLWxpc3QsXFxuICBkLWNpdGF0aW9uLWxpc3QsXFxuICBkaXN0aWxsLWZvb3RlciB7XFxuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogW3NjcmVlbi1zdGFydF0gMWZyIFtwYWdlLXN0YXJ0IGtpY2tlci1zdGFydF0gNjBweCBbbWlkZGxlLXN0YXJ0XSA2MHB4IFt0ZXh0LXN0YXJ0IGtpY2tlci1lbmRdIDYwcHggNjBweCA2MHB4IDYwcHggNjBweCA2MHB4IDYwcHggNjBweCBbdGV4dC1lbmQgZ3V0dGVyLXN0YXJ0XSA2MHB4IFttaWRkbGUtZW5kXSA2MHB4IFtwYWdlLWVuZCBndXR0ZXItZW5kXSAxZnIgW3NjcmVlbi1lbmRdO1xcbiAgICBncmlkLWNvbHVtbi1nYXA6IDMycHg7XFxuICB9XFxuXFxuICAuZ3JpZCB7XFxuICAgIGdyaWQtY29sdW1uLWdhcDogMzJweDtcXG4gIH1cXG59XFxuXFxuXFxuXFxuXFxuLmJhc2UtZ3JpZCB7XFxuICBncmlkLWNvbHVtbjogc2NyZWVuO1xcbn1cXG5cXG4vKiAubC1ib2R5LFxcbmQtYXJ0aWNsZSA+ICogIHtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG4ubC1wYWdlLFxcbmQtdGl0bGUgPiAqLFxcbmQtZmlndXJlIHtcXG4gIGdyaWQtY29sdW1uOiBwYWdlO1xcbn0gKi9cXG5cXG4ubC1ndXR0ZXIge1xcbiAgZ3JpZC1jb2x1bW46IGd1dHRlcjtcXG59XFxuXFxuLmwtdGV4dCxcXG4ubC1ib2R5IHtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG4ubC1wYWdlIHtcXG4gIGdyaWQtY29sdW1uOiBwYWdlO1xcbn1cXG5cXG4ubC1ib2R5LW91dHNldCB7XFxuICBncmlkLWNvbHVtbjogbWlkZGxlO1xcbn1cXG5cXG4ubC1wYWdlLW91dHNldCB7XFxuICBncmlkLWNvbHVtbjogcGFnZTtcXG59XFxuXFxuLmwtc2NyZWVuIHtcXG4gIGdyaWQtY29sdW1uOiBzY3JlZW47XFxufVxcblxcbi5sLXNjcmVlbi1pbnNldCB7XFxuICBncmlkLWNvbHVtbjogc2NyZWVuO1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG5cXG5cXG4vKiBBc2lkZSAqL1xcblxcbmQtYXJ0aWNsZSBhc2lkZSB7XFxuICBncmlkLWNvbHVtbjogZ3V0dGVyO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuNmVtO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KVxcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgYXNpZGUge1xcbiAgICBncmlkLWNvbHVtbjogZ3V0dGVyO1xcbiAgfVxcblxcbiAgLnNpZGUge1xcbiAgICBncmlkLWNvbHVtbjogZ3V0dGVyO1xcbiAgfVxcbn1cXG5cIjtcblxuICB2YXIgcHJpbnQgPSBcIi8qXFxuICogQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xcbiAqXFxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFxcXCJMaWNlbnNlXFxcIik7XFxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxcbiAqXFxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcXG4gKlxcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcXFwiQVMgSVNcXFwiIEJBU0lTLFxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cXG4gKi9cXG5cXG5AbWVkaWEgcHJpbnQge1xcblxcbiAgQHBhZ2Uge1xcbiAgICBzaXplOiA4aW4gMTFpbjtcXG4gICAgQGJvdHRvbS1yaWdodCB7XFxuICAgICAgY29udGVudDogY291bnRlcihwYWdlKSBcXFwiIG9mIFxcXCIgY291bnRlcihwYWdlcyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGh0bWwge1xcbiAgICAvKiBubyBnZW5lcmFsIG1hcmdpbnMgLS0gQ1NTIEdyaWQgdGFrZXMgY2FyZSBvZiB0aG9zZSAqL1xcbiAgfVxcblxcbiAgcCwgY29kZSB7XFxuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gIH1cXG5cXG4gIGgyLCBoMyB7XFxuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xcbiAgfVxcblxcbiAgZC1oZWFkZXIge1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICB9XFxuXFxuICBkLWZvb3RlciB7XFxuICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xcbiAgfVxcblxcbn1cXG5cIjtcblxuICB2YXIgYnlsaW5lID0gXCIvKlxcbiAqIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcXG4gKlxcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcXFwiTGljZW5zZVxcXCIpO1xcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcXG4gKlxcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXFxuICpcXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXFxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXFxcIkFTIElTXFxcIiBCQVNJUyxcXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXFxuICovXFxuXFxuZC1ieWxpbmUge1xcbiAgY29udGFpbjogc3R5bGU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuOGVtO1xcbiAgcGFkZGluZzogMS41cmVtIDA7XFxuICBtaW4taGVpZ2h0OiAxLjhlbTtcXG59XFxuXFxuXFxuZC1ieWxpbmUgLmJ5bGluZSB7XFxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XFxuICBncmlkLWNvbHVtbjogdGV4dDtcXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIGQtYnlsaW5lIC5ieWxpbmUge1xcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyIDFmcjtcXG4gIH1cXG59XFxuXFxuZC1ieWxpbmUgLmF1dGhvcnMtYWZmaWxpYXRpb25zIHtcXG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAyO1xcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgZC1ieWxpbmUgLmF1dGhvcnMtYWZmaWxpYXRpb25zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG59XFxuXFxuZC1ieWxpbmUgaDMge1xcbiAgZm9udC1zaXplOiAwLjZyZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gIG1hcmdpbjogMDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxufVxcblxcbmQtYnlsaW5lIHAge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG5kLWJ5bGluZSBhLFxcbmQtYXJ0aWNsZSBkLWJ5bGluZSBhIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG5cXG5kLWFydGljbGUgZC1ieWxpbmUgYTpob3ZlciB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcblxcbmQtYnlsaW5lIHAuYXV0aG9yIHtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcblxcbmQtYnlsaW5lIC5hZmZpbGlhdGlvbnMge1xcblxcbn1cXG5cIjtcblxuICB2YXIgYXJ0aWNsZSA9IFwiLypcXG4gKiBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXFxuICpcXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXFxcIkxpY2Vuc2VcXFwiKTtcXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXFxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XFxuICpcXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxcbiAqXFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFxcXCJBUyBJU1xcXCIgQkFTSVMsXFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXFxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxcbiAqL1xcblxcbmQtYXJ0aWNsZSB7XFxuICBjb250YWluOiBsYXlvdXQgc3R5bGU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgcGFkZGluZy10b3A6IDJyZW07XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbn1cXG5cXG5kLWFydGljbGUgPiAqIHtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiA3NjhweCkge1xcbiAgZC1hcnRpY2xlIHtcXG4gICAgZm9udC1zaXplOiAxNnB4O1xcbiAgfVxcbn1cXG5cXG5AbWVkaWEobWluLXdpZHRoOiAxMDI0cHgpIHtcXG4gIGQtYXJ0aWNsZSB7XFxuICAgIGZvbnQtc2l6ZTogMS4wNnJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuN2VtO1xcbiAgfVxcbn1cXG5cXG5cXG4vKiBIMiAqL1xcblxcblxcbmQtYXJ0aWNsZSAubWFya2VyIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGNvdW50ZXItcmVzZXQ6IHNlY3Rpb247XFxuICBncmlkLWNvbHVtbjoga2lja2VyO1xcbiAgbGluZS1oZWlnaHQ6IDEuN2VtO1xcbn1cXG5cXG5kLWFydGljbGUgLm1hcmtlcjpob3ZlciB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbmQtYXJ0aWNsZSAubWFya2VyIHNwYW4ge1xcbiAgcGFkZGluZzogMCAzcHggNHB4O1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogNHB4O1xcbn1cXG5cXG5kLWFydGljbGUgLm1hcmtlcjpob3ZlciBzcGFuIHtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjcpO1xcbn1cXG5cXG5kLWFydGljbGUgaDIge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI1ZW07XFxuICBtYXJnaW46IDJyZW0gMCAxLjVyZW0gMDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcXG59XFxuXFxuQG1lZGlhKG1pbi13aWR0aDogMTAyNHB4KSB7XFxuICBkLWFydGljbGUgaDIge1xcbiAgICBmb250LXNpemU6IDM2cHg7XFxuICB9XFxufVxcblxcbi8qIEgzICovXFxuXFxuZC1hcnRpY2xlIGgzIHtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBsaW5lLWhlaWdodDogMS40ZW07XFxuICBtYXJnaW4tYm90dG9tOiAxZW07XFxuICBtYXJnaW4tdG9wOiAyZW07XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDEwMjRweCkge1xcbiAgZC1hcnRpY2xlIGgzIHtcXG4gICAgZm9udC1zaXplOiAyMHB4O1xcbiAgfVxcbn1cXG5cXG4vKiBINCAqL1xcblxcbmQtYXJ0aWNsZSBoNCB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjRlbTtcXG59XFxuXFxuZC1hcnRpY2xlIGEge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcblxcbmQtYXJ0aWNsZSBwLFxcbmQtYXJ0aWNsZSB1bCxcXG5kLWFydGljbGUgb2wsXFxuZC1hcnRpY2xlIGJsb2NrcXVvdGUge1xcbiAgbWFyZ2luLXRvcDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbn1cXG5cXG5kLWFydGljbGUgYmxvY2txdW90ZSB7XFxuICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG4gIHBhZGRpbmctbGVmdDogMmVtO1xcbiAgZm9udC1zdHlsZTogaXRhbGljO1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcXG59XFxuXFxuZC1hcnRpY2xlIGEge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40KTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuZC1hcnRpY2xlIGE6aG92ZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC44KTtcXG59XFxuXFxuZC1hcnRpY2xlIC5saW5rIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5kLWFydGljbGUgdWwsXFxuZC1hcnRpY2xlIG9sIHtcXG4gIHBhZGRpbmctbGVmdDogMjRweDtcXG59XFxuXFxuZC1hcnRpY2xlIGxpIHtcXG4gIG1hcmdpbi1ib3R0b206IDFlbTtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbn1cXG5cXG5kLWFydGljbGUgbGk6bGFzdC1jaGlsZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG5cXG5kLWFydGljbGUgcHJlIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XFxufVxcblxcbmQtYXJ0aWNsZSBociB7XFxuICBncmlkLWNvbHVtbjogc2NyZWVuO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgbWFyZ2luLXRvcDogNjBweDtcXG4gIG1hcmdpbi1ib3R0b206IDYwcHg7XFxufVxcblxcbmQtYXJ0aWNsZSBzZWN0aW9uIHtcXG4gIG1hcmdpbi10b3A6IDYwcHg7XFxuICBtYXJnaW4tYm90dG9tOiA2MHB4O1xcbn1cXG5cXG5kLWFydGljbGUgc3Bhbi5lcXVhdGlvbi1taW1pYyB7XFxuICBmb250LWZhbWlseTogZ2VvcmdpYTtcXG4gIGZvbnQtc2l6ZTogMTE1JTtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XFxuXFxuZC1hcnRpY2xlID4gZC1jb2RlLFxcbmQtYXJ0aWNsZSBzZWN0aW9uID4gZC1jb2RlICB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuZC1hcnRpY2xlID4gZC1tYXRoW2Jsb2NrXSxcXG5kLWFydGljbGUgc2VjdGlvbiA+IGQtbWF0aFtibG9ja10gIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcXG4gIGQtYXJ0aWNsZSA+IGQtY29kZSxcXG4gIGQtYXJ0aWNsZSBzZWN0aW9uID4gZC1jb2RlLFxcbiAgZC1hcnRpY2xlID4gZC1tYXRoW2Jsb2NrXSxcXG4gIGQtYXJ0aWNsZSBzZWN0aW9uID4gZC1tYXRoW2Jsb2NrXSB7XFxuICAgICAgb3ZlcmZsb3cteDogc2Nyb2xsO1xcbiAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgIC8vIElFIDEwK1xcbiAgICAgIG92ZXJmbG93OiAtbW96LXNjcm9sbGJhcnMtbm9uZTsgIC8vIEZpcmVmb3hcXG4gIH1cXG5cXG4gIGQtYXJ0aWNsZSA+IGQtY29kZTo6LXdlYmtpdC1zY3JvbGxiYXIsXFxuICBkLWFydGljbGUgc2VjdGlvbiA+IGQtY29kZTo6LXdlYmtpdC1zY3JvbGxiYXIsXFxuICBkLWFydGljbGUgPiBkLW1hdGhbYmxvY2tdOjotd2Via2l0LXNjcm9sbGJhcixcXG4gIGQtYXJ0aWNsZSBzZWN0aW9uID4gZC1tYXRoW2Jsb2NrXTo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgICBkaXNwbGF5OiBub25lOyAgLy8gU2FmYXJpIGFuZCBDaHJvbWVcXG4gIH1cXG59XFxuXFxuZC1hcnRpY2xlIC5jaXRhdGlvbiB7XFxuICBjb2xvcjogIzY2ODtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuZC1pbmNsdWRlIHtcXG4gIHdpZHRoOiBhdXRvO1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbmQtZmlndXJlIHtcXG4gIGNvbnRhaW46IGxheW91dCBzdHlsZTtcXG59XFxuXFxuLyogS2FUZVggKi9cXG5cXG4ua2F0ZXgsIC5rYXRleC1wcmVyZW5kZXJlZCB7XFxuICBjb250YWluOiBzdHlsZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLyogVGFibGVzICovXFxuXFxuZC1hcnRpY2xlIHRhYmxlIHtcXG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbn1cXG5cXG5kLWFydGljbGUgdGFibGUgdGgge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcXG59XFxuXFxuZC1hcnRpY2xlIHRhYmxlIHRkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbn1cXG5cXG5kLWFydGljbGUgdGFibGUgdHI6bGFzdC1vZi10eXBlIHRkIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxufVxcblxcbmQtYXJ0aWNsZSB0YWJsZSB0aCxcXG5kLWFydGljbGUgdGFibGUgdGQge1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgcGFkZGluZzogMnB4IDhweDtcXG59XFxuXFxuZC1hcnRpY2xlIHRhYmxlIHRib2R5IDpmaXJzdC1jaGlsZCB0ZCB7XFxuICBwYWRkaW5nLXRvcDogMnB4O1xcbn1cXG5cIjtcblxuICB2YXIgdGl0bGUgPSBcIi8qXFxuICogQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xcbiAqXFxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFxcXCJMaWNlbnNlXFxcIik7XFxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxcbiAqXFxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcXG4gKlxcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcXFwiQVMgSVNcXFwiIEJBU0lTLFxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cXG4gKi9cXG5cXG5kLXRpdGxlIHtcXG4gIHBhZGRpbmc6IDJyZW0gMCAxLjVyZW07XFxuICBjb250YWluOiBsYXlvdXQgc3R5bGU7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBkLXRpdGxlIHtcXG4gICAgcGFkZGluZzogNHJlbSAwIDEuNXJlbTtcXG4gIH1cXG59XFxuXFxuZC10aXRsZSBoMSB7XFxuICBncmlkLWNvbHVtbjogdGV4dDtcXG4gIGZvbnQtc2l6ZTogNDBweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBsaW5lLWhlaWdodDogMS4xZW07XFxuICBtYXJnaW46IDAgMCAwLjVyZW07XFxufVxcblxcbkBtZWRpYShtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBkLXRpdGxlIGgxIHtcXG4gICAgZm9udC1zaXplOiA1MHB4O1xcbiAgfVxcbn1cXG5cXG5kLXRpdGxlIHAge1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuNTVlbTtcXG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xcbn1cXG5cXG5kLXRpdGxlIC5zdGF0dXMge1xcbiAgbWFyZ2luLXRvcDogMHB4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6ICMwMDk2ODg7XFxuICBvcGFjaXR5OiAwLjg7XFxuICBncmlkLWNvbHVtbjoga2lja2VyO1xcbn1cXG5cXG5kLXRpdGxlIC5zdGF0dXMgc3BhbiB7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmc6IDZweCAwO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4MGNiYzQ7XFxuICBmb250LXNpemU6IDExcHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG5cIjtcblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgY29uc3Qgc3R5bGVzID0gYmFzZSArIGxheW91dCArIHRpdGxlICsgYnlsaW5lICsgYXJ0aWNsZSArIG1hdGggKyBwcmludDtcblxuICBmdW5jdGlvbiBtYWtlU3R5bGVUYWcoZG9tKSB7XG5cbiAgICBjb25zdCBzdHlsZVRhZ0lkID0gJ2Rpc3RpbGwtcHJlcmVuZGVyZWQtc3R5bGVzJztcbiAgICBjb25zdCBwcmVyZW5kZXJlZFRhZyA9IGRvbS5nZXRFbGVtZW50QnlJZChzdHlsZVRhZ0lkKTtcbiAgICBpZiAoIXByZXJlbmRlcmVkVGFnKSB7XG4gICAgICBjb25zdCBzdHlsZVRhZyA9IGRvbS5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVUYWcuaWQgPSBzdHlsZVRhZ0lkO1xuICAgICAgc3R5bGVUYWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBjb25zdCBjc3NUZXh0VGFnID0gZG9tLmNyZWF0ZVRleHROb2RlKHN0eWxlcyk7XG4gICAgICBzdHlsZVRhZy5hcHBlbmRDaGlsZChjc3NUZXh0VGFnKTtcbiAgICAgIGNvbnN0IGZpcnN0U2NyaXB0VGFnID0gZG9tLmhlYWQucXVlcnlTZWxlY3Rvcignc2NyaXB0Jyk7XG4gICAgICBkb20uaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGVUYWcsIGZpcnN0U2NyaXB0VGFnKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIGZ1bmN0aW9uIGFkZFBvbHlmaWxsKHBvbHlmaWxsLCBwb2x5ZmlsbExvYWRlZENhbGxiYWNrKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnUnVubGV2ZWwgMDogUG9seWZpbGwgcmVxdWlyZWQ6ICcgKyBwb2x5ZmlsbC5uYW1lKTtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gcG9seWZpbGwudXJsO1xuICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlO1xuICAgIGlmIChwb2x5ZmlsbExvYWRlZENhbGxiYWNrKSB7XG4gICAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24oKSB7IHBvbHlmaWxsTG9hZGVkQ2FsbGJhY2socG9seWZpbGwpOyB9O1xuICAgIH1cbiAgICBzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgbmV3IEVycm9yKCdSdW5sZXZlbCAwOiBQb2x5ZmlsbHMgZmFpbGVkIHRvIGxvYWQgc2NyaXB0ICcgKyBwb2x5ZmlsbC5uYW1lKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfVxuXG4gIGNvbnN0IHBvbHlmaWxscyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnV2ViQ29tcG9uZW50cycsXG4gICAgICBzdXBwb3J0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdjdXN0b21FbGVtZW50cycgaW4gd2luZG93ICYmXG4gICAgICAgICAgICAgICAnYXR0YWNoU2hhZG93JyBpbiBFbGVtZW50LnByb3RvdHlwZSAmJlxuICAgICAgICAgICAgICAgJ2dldFJvb3ROb2RlJyBpbiBFbGVtZW50LnByb3RvdHlwZSAmJlxuICAgICAgICAgICAgICAgJ2NvbnRlbnQnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykgJiZcbiAgICAgICAgICAgICAgICdQcm9taXNlJyBpbiB3aW5kb3cgJiZcbiAgICAgICAgICAgICAgICdmcm9tJyBpbiBBcnJheTtcbiAgICAgIH0sXG4gICAgICB1cmw6ICdodHRwczovL2Rpc3RpbGwucHViL3RoaXJkLXBhcnR5L3BvbHlmaWxscy93ZWJjb21wb25lbnRzLWxpdGUuanMnXG4gICAgfSwge1xuICAgICAgbmFtZTogJ0ludGVyc2VjdGlvbk9ic2VydmVyJyxcbiAgICAgIHN1cHBvcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cgJiZcbiAgICAgICAgICAgICAgICdJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5JyBpbiB3aW5kb3c7XG4gICAgICB9LFxuICAgICAgdXJsOiAnaHR0cHM6Ly9kaXN0aWxsLnB1Yi90aGlyZC1wYXJ0eS9wb2x5ZmlsbHMvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmpzJ1xuICAgIH0sXG4gIF07XG5cbiAgY2xhc3MgUG9seWZpbGxzIHtcblxuICAgIHN0YXRpYyBicm93c2VyU3VwcG9ydHNBbGxGZWF0dXJlcygpIHtcbiAgICAgIHJldHVybiBwb2x5ZmlsbHMuZXZlcnkoKHBvbHkpID0+IHBvbHkuc3VwcG9ydCgpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbG9hZChjYWxsYmFjaykge1xuICAgICAgLy8gRGVmaW5lIGFuIGludGVybWVkaWF0ZSBjYWxsYmFjayB0aGF0IGNoZWNrcyBpZiBhbGwgaXMgbG9hZGVkLlxuICAgICAgY29uc3QgcG9seWZpbGxMb2FkZWQgPSBmdW5jdGlvbihwb2x5ZmlsbCkge1xuICAgICAgICBwb2x5ZmlsbC5sb2FkZWQgPSB0cnVlO1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdSdW5sZXZlbCAwOiBQb2x5ZmlsbCBoYXMgZmluaXNoZWQgbG9hZGluZzogJyArIHBvbHlmaWxsLm5hbWUpO1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKHdpbmRvd1twb2x5ZmlsbC5uYW1lXSk7XG4gICAgICAgIGlmIChQb2x5ZmlsbHMubmVlZGVkUG9seWZpbGxzLmV2ZXJ5KChwb2x5KSA9PiBwb2x5LmxvYWRlZCkpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdSdW5sZXZlbCAwOiBBbGwgcmVxdWlyZWQgcG9seWZpbGxzIGhhdmUgZmluaXNoZWQgbG9hZGluZy4nKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdSdW5sZXZlbCAwLT4xLicpO1xuICAgICAgICAgIHdpbmRvdy5kaXN0aWxsUnVubGV2ZWwgPSAxO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvLyBBZGQgcG9seWZpbGwgc2NyaXB0IHRhZ3NcbiAgICAgIGZvciAoY29uc3QgcG9seWZpbGwgb2YgUG9seWZpbGxzLm5lZWRlZFBvbHlmaWxscykge1xuICAgICAgICBhZGRQb2x5ZmlsbChwb2x5ZmlsbCwgcG9seWZpbGxMb2FkZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgbmVlZGVkUG9seWZpbGxzKCkge1xuICAgICAgaWYgKCFQb2x5ZmlsbHMuX25lZWRlZFBvbHlmaWxscykge1xuICAgICAgICBQb2x5ZmlsbHMuX25lZWRlZFBvbHlmaWxscyA9IHBvbHlmaWxscy5maWx0ZXIoKHBvbHkpID0+ICFwb2x5LnN1cHBvcnQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUG9seWZpbGxzLl9uZWVkZWRQb2x5ZmlsbHM7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuICAvL1xuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAvL1xuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAvL1xuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiAgLy8gY29uc3QgbWFyZ2luU21hbGwgPSAxNjtcbiAgLy8gY29uc3QgbWFyZ2luTGFyZ2UgPSAzICogbWFyZ2luU21hbGw7XG4gIC8vIGNvbnN0IG1hcmdpbiA9IG1hcmdpblNtYWxsICsgbWFyZ2luTGFyZ2U7XG4gIC8vIGNvbnN0IGd1dHRlciA9IG1hcmdpblNtYWxsO1xuICAvLyBjb25zdCBvdXRzZXRBbW91bnQgPSBtYXJnaW4gLyAyO1xuICAvLyBjb25zdCBudW1Db2xzID0gNDtcbiAgLy8gY29uc3QgbnVtR3V0dGVycyA9IG51bUNvbHMgLSAxO1xuICAvLyBjb25zdCBjb2x1bW5XaWR0aCA9ICg3NjggLSAyICogbWFyZ2luTGFyZ2UgLSBudW1HdXR0ZXJzICogZ3V0dGVyKSAvIG51bUNvbHM7XG4gIC8vXG4gIC8vIGNvbnN0IHNjcmVlbndpZHRoID0gNzY4O1xuICAvLyBjb25zdCBwYWdlV2lkdGggPSBzY3JlZW53aWR0aCAtIDIgKiBtYXJnaW5MYXJnZTtcbiAgLy8gY29uc3QgYm9keVdpZHRoID0gcGFnZVdpZHRoIC0gY29sdW1uV2lkdGggLSBndXR0ZXI7XG5cbiAgZnVuY3Rpb24gYm9keShzZWxlY3Rvcikge1xuICAgIHJldHVybiBgJHtzZWxlY3Rvcn0ge1xuICAgICAgZ3JpZC1jb2x1bW46IGxlZnQgLyB0ZXh0O1xuICAgIH1cbiAgYDtcbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjb25zdCBUJDEgPSBUZW1wbGF0ZSgnZC1hYnN0cmFjdCcsIGBcbjxzdHlsZT5cbiAgOmhvc3Qge1xuICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgfVxuXG4gIDo6c2xvdHRlZChwKSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gICAgZ3JpZC1jb2x1bW46IHRleHQtc3RhcnQgLyBtaWRkbGUtZW5kO1xuICB9XG4gICR7Ym9keSgnZC1hYnN0cmFjdCcpfVxuPC9zdHlsZT5cblxuPHNsb3Q+PC9zbG90PlxuYCk7XG5cbiAgY2xhc3MgQWJzdHJhY3QgZXh0ZW5kcyBUJDEoSFRNTEVsZW1lbnQpIHtcblxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuXG4gIGNvbnN0IFQkMiA9IFRlbXBsYXRlKCdkLWFwcGVuZGl4JywgYFxuPHN0eWxlPlxuXG5kLWFwcGVuZGl4IHtcbiAgY29udGFpbjogbGF5b3V0IHN0eWxlO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBsaW5lLWhlaWdodDogMS43ZW07XG4gIG1hcmdpbi10b3A6IDYwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7XG4gIHBhZGRpbmctdG9wOiA2MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNDhweDtcbn1cblxuZC1hcHBlbmRpeCBoMyB7XG4gIGdyaWQtY29sdW1uOiBwYWdlLXN0YXJ0IC8gdGV4dC1zdGFydDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNjUpO1xufVxuXG5kLWFwcGVuZGl4IGgzICsgKiB7XG4gIG1hcmdpbi10b3A6IDFlbTtcbn1cblxuZC1hcHBlbmRpeCBvbCB7XG4gIHBhZGRpbmc6IDAgMCAwIDE1cHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICBkLWFwcGVuZGl4IG9sIHtcbiAgICBwYWRkaW5nOiAwIDAgMCAzMHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMzBweDtcbiAgfVxufVxuXG5kLWFwcGVuZGl4IGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG5kLWFwcGVuZGl4IGEge1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xufVxuXG5kLWFwcGVuZGl4ID4gKiB7XG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xufVxuXG5kLWFwcGVuZGl4ID4gZC1mb290bm90ZS1saXN0LFxuZC1hcHBlbmRpeCA+IGQtY2l0YXRpb24tbGlzdCxcbmQtYXBwZW5kaXggPiBkaXN0aWxsLWFwcGVuZGl4IHtcbiAgZ3JpZC1jb2x1bW46IHNjcmVlbjtcbn1cblxuPC9zdHlsZT5cblxuYCwgZmFsc2UpO1xuXG4gIGNsYXNzIEFwcGVuZGl4IGV4dGVuZHMgVCQyKEhUTUxFbGVtZW50KSB7XG5cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIC8vIGltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbWl4aW5zL3RlbXBsYXRlJztcbiAgLy8gaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXInO1xuXG4gIGNvbnN0IGlzT25seVdoaXRlc3BhY2UgPSAvXlxccyokLztcblxuICBjbGFzcyBBcnRpY2xlIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC1hcnRpY2xlJzsgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuXG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlciggKG11dGF0aW9ucykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWRkZWROb2RlIG9mIG11dGF0aW9uLmFkZGVkTm9kZXMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYWRkZWROb2RlLm5vZGVOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICcjdGV4dCc6IHsgLy8gdXN1YWxseSB0ZXh0IG5vZGVzIGFyZSBvbmx5IGxpbmVicmVha3MuXG4gICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBhZGRlZE5vZGUubm9kZVZhbHVlO1xuICAgICAgICAgICAgICBpZiAoIWlzT25seVdoaXRlc3BhY2UudGVzdCh0ZXh0KSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVXNlIG9mIHVud3JhcHBlZCB0ZXh0IGluIGRpc3RpbGwgYXJ0aWNsZXMgaXMgZGlzY291cmFnZWQgYXMgaXQgYnJlYWtzIGxheW91dCEgUGxlYXNlIHdyYXAgYW55IHRleHQgaW4gYSA8c3Bhbj4gb3IgPHA+IHRhZy4gV2UgZm91bmQgdGhlIGZvbGxvd2luZyB0ZXh0OiAnICsgdGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVyLmlubmVySFRNTCA9IGFkZGVkTm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgYWRkZWROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIGFkZGVkTm9kZSk7XG4gICAgICAgICAgICAgICAgYWRkZWROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYWRkZWROb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9ic2VydmUodGhpcywge2NoaWxkTGlzdDogdHJ1ZX0pO1xuICAgIH1cblxuICB9XG5cbiAgdmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tbW9uanNNb2R1bGUoZm4sIG1vZHVsZSkge1xuICBcdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcbiAgfVxuXG4gIHZhciBiaWJ0ZXhQYXJzZSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbiAgLyogc3RhcnQgYmlidGV4UGFyc2UgMC4wLjIyICovXG5cbiAgLy9PcmlnaW5hbCB3b3JrIGJ5IEhlbnJpayBNdWVoZSAoYykgMjAxMFxuICAvL1xuICAvL0NvbW1vbkpTIHBvcnQgYnkgTWlrb2xhIEx5c2Vua28gMjAxM1xuICAvL1xuICAvL1BvcnQgdG8gQnJvd3NlciBsaWIgYnkgT1JDSUQgLyBSQ1BFVEVSU1xuICAvL1xuICAvL0lzc3VlczpcbiAgLy9ubyBjb21tZW50IGhhbmRsaW5nIHdpdGhpbiBzdHJpbmdzXG4gIC8vbm8gc3RyaW5nIGNvbmNhdGVuYXRpb25cbiAgLy9ubyB2YXJpYWJsZSB2YWx1ZXMgeWV0XG4gIC8vR3JhbW1hciBpbXBsZW1lbnRlZCBoZXJlOlxuICAvL2JpYnRleCAtPiAoc3RyaW5nIHwgcHJlYW1ibGUgfCBjb21tZW50IHwgZW50cnkpKjtcbiAgLy9zdHJpbmcgLT4gJ0BTVFJJTkcnICd7JyBrZXlfZXF1YWxzX3ZhbHVlICd9JztcbiAgLy9wcmVhbWJsZSAtPiAnQFBSRUFNQkxFJyAneycgdmFsdWUgJ30nO1xuICAvL2NvbW1lbnQgLT4gJ0BDT01NRU5UJyAneycgdmFsdWUgJ30nO1xuICAvL2VudHJ5IC0+ICdAJyBrZXkgJ3snIGtleSAnLCcga2V5X3ZhbHVlX2xpc3QgJ30nO1xuICAvL2tleV92YWx1ZV9saXN0IC0+IGtleV9lcXVhbHNfdmFsdWUgKCcsJyBrZXlfZXF1YWxzX3ZhbHVlKSo7XG4gIC8va2V5X2VxdWFsc192YWx1ZSAtPiBrZXkgJz0nIHZhbHVlO1xuICAvL3ZhbHVlIC0+IHZhbHVlX3F1b3RlcyB8IHZhbHVlX2JyYWNlcyB8IGtleTtcbiAgLy92YWx1ZV9xdW90ZXMgLT4gJ1wiJyAuKj8gJ1wiJzsgLy8gbm90IHF1aXRlXG4gIC8vdmFsdWVfYnJhY2VzIC0+ICd7JyAuKj8gJ1wiJzsgLy8gbm90IHF1aXRlXG4gIChmdW5jdGlvbihleHBvcnRzKSB7XG5cbiAgICAgIGZ1bmN0aW9uIEJpYnRleFBhcnNlcigpIHtcblxuICAgICAgICAgIHRoaXMubW9udGhzID0gW1wiamFuXCIsIFwiZmViXCIsIFwibWFyXCIsIFwiYXByXCIsIFwibWF5XCIsIFwianVuXCIsIFwianVsXCIsIFwiYXVnXCIsIFwic2VwXCIsIFwib2N0XCIsIFwibm92XCIsIFwiZGVjXCJdO1xuICAgICAgICAgIHRoaXMubm90S2V5ID0gWycsJywneycsJ30nLCcgJywnPSddO1xuICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICB0aGlzLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICB0aGlzLmVudHJpZXMgPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5ID0gXCJcIjtcblxuICAgICAgICAgIHRoaXMuc2V0SW5wdXQgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0O1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLmdldEVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcztcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5pc1doaXRlc3BhY2UgPSBmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICAgIHJldHVybiAocyA9PSAnICcgfHwgcyA9PSAnXFxyJyB8fCBzID09ICdcXHQnIHx8IHMgPT0gJ1xcbicpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLm1hdGNoID0gZnVuY3Rpb24ocywgY2FuQ29tbWVudE91dCkge1xuICAgICAgICAgICAgICBpZiAoY2FuQ29tbWVudE91dCA9PSB1bmRlZmluZWQgfHwgY2FuQ29tbWVudE91dCA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgY2FuQ29tbWVudE91dCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoY2FuQ29tbWVudE91dCk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLnBvcywgdGhpcy5wb3MgKyBzLmxlbmd0aCkgPT0gcykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBcIlRva2VuIG1pc21hdGNoLCBleHBlY3RlZCBcIiArIHMgKyBcIiwgZm91bmQgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLnBvcyk7XG4gICAgICAgICAgICAgIH0gICAgICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKGNhbkNvbW1lbnRPdXQpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnRyeU1hdGNoID0gZnVuY3Rpb24ocywgY2FuQ29tbWVudE91dCkge1xuICAgICAgICAgICAgICBpZiAoY2FuQ29tbWVudE91dCA9PSB1bmRlZmluZWQgfHwgY2FuQ29tbWVudE91dCA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgY2FuQ29tbWVudE91dCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoY2FuQ29tbWVudE91dCk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0LnN1YnN0cmluZyh0aGlzLnBvcywgdGhpcy5wb3MgKyBzLmxlbmd0aCkgPT0gcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0gICAgICAgIH07XG5cbiAgICAgICAgICAvKiB3aGVuIHNlYXJjaCBmb3IgYSBtYXRjaCBhbGwgdGV4dCBjYW4gYmUgaWdub3JlZCwgbm90IGp1c3Qgd2hpdGUgc3BhY2UgKi9cbiAgICAgICAgICB0aGlzLm1hdGNoQXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXQubGVuZ3RoID4gdGhpcy5wb3MgJiYgdGhpcy5pbnB1dFt0aGlzLnBvc10gIT0gJ0AnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnQCcpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlID0gZnVuY3Rpb24oY2FuQ29tbWVudE91dCkge1xuICAgICAgICAgICAgICB3aGlsZSAodGhpcy5pc1doaXRlc3BhY2UodGhpcy5pbnB1dFt0aGlzLnBvc10pKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICB9ICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09IFwiJVwiICYmIGNhbkNvbW1lbnRPdXQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXRbdGhpcy5wb3NdICE9IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKGNhbkNvbW1lbnRPdXQpO1xuICAgICAgICAgICAgICB9ICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy52YWx1ZV9icmFjZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIGJyYWNlY291bnQgPSAwO1xuICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwie1wiLCBmYWxzZSk7XG4gICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09ICd9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJhY2Vjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlY291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goXCJ9XCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAneycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2Vjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwiVW50ZXJtaW5hdGVkIHZhbHVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnXFxcXCcgJiYgZXNjYXBlZCA9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICB9ICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy52YWx1ZV9jb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBzdHIgPSAnJztcbiAgICAgICAgICAgICAgdmFyIGJyY2t0Q250ID0gMDtcbiAgICAgICAgICAgICAgd2hpbGUgKCEodGhpcy50cnlNYXRjaChcIn1cIiwgZmFsc2UpICYmIGJyY2t0Q250ID09IDApKSB7XG4gICAgICAgICAgICAgICAgICBzdHIgPSBzdHIgKyB0aGlzLmlucHV0W3RoaXMucG9zXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAneycpXG4gICAgICAgICAgICAgICAgICAgICAgYnJja3RDbnQrKztcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnfScpXG4gICAgICAgICAgICAgICAgICAgICAgYnJja3RDbnQtLTtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIlVudGVybWluYXRlZCB2YWx1ZTpcIiArIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMudmFsdWVfcXVvdGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRoaXMubWF0Y2goJ1wiJywgZmFsc2UpO1xuICAgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgnXCInLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIlVudGVybWluYXRlZCB2YWx1ZTpcIiArIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PSAnXFxcXCcgJiYgZXNjYXBlZCA9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICB9ICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5zaW5nbGVfdmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnRyeU1hdGNoKFwie1wiKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVfYnJhY2VzKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50cnlNYXRjaCgnXCInKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVfcXVvdGVzKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgayA9IHRoaXMua2V5KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoay5tYXRjaChcIl5bMC05XSskXCIpKVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrO1xuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tb250aHMuaW5kZXhPZihrLnRvTG93ZXJDYXNlKCkpID49IDApXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGsudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIlZhbHVlIGV4cGVjdGVkOlwiICsgdGhpcy5pbnB1dC5zdWJzdHJpbmcoc3RhcnQpICsgJyBmb3Iga2V5OiAnICsgaztcblxuICAgICAgICAgICAgICB9ICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuc2luZ2xlX3ZhbHVlKCkpO1xuICAgICAgICAgICAgICB3aGlsZSAodGhpcy50cnlNYXRjaChcIiNcIikpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goXCIjXCIpO1xuICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5zaW5nbGVfdmFsdWUoKSk7XG4gICAgICAgICAgICAgIH0gICAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCJcIik7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMua2V5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCJSdW5hd2F5IGtleVwiO1xuICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0LAt0Y/QkC3QryBpcyBDeXJpbGxpY1xuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucHV0W3RoaXMucG9zXSk7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub3RLZXkuaW5kZXhPZih0aGlzLmlucHV0W3RoaXMucG9zXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuXG4gICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgfSAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gdGhpcy5rZXkoKTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goXCI9XCIpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gWyBrZXksIHZhbCBdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgXCIuLi4gPSB2YWx1ZSBleHBlY3RlZCwgZXF1YWxzIHNpZ24gbWlzc2luZzpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHRoaXMucG9zKTtcbiAgICAgICAgICAgICAgfSAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMua2V5X3ZhbHVlX2xpc3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIGt2ID0gdGhpcy5rZXlfZXF1YWxzX3ZhbHVlKCk7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeVRhZ3MnXSA9IHt9O1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeVsnZW50cnlUYWdzJ11ba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgICAgICAgIHdoaWxlICh0aGlzLnRyeU1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChcIixcIik7XG4gICAgICAgICAgICAgICAgICAvLyBmaXhlcyBwcm9ibGVtcyB3aXRoIGNvbW1hcyBhdCB0aGUgZW5kIG9mIGEgbGlzdFxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBrdiA9IHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnlbJ2VudHJ5VGFncyddW2t2WzBdXSA9IGt2WzFdO1xuICAgICAgICAgICAgICB9ICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5lbnRyeV9ib2R5ID0gZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeSA9IHt9O1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFbnRyeVsnY2l0YXRpb25LZXknXSA9IHRoaXMua2V5KCk7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeVR5cGUnXSA9IGQuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICB0aGlzLm1hdGNoKFwiLFwiKTtcbiAgICAgICAgICAgICAgdGhpcy5rZXlfdmFsdWVfbGlzdCgpO1xuICAgICAgICAgICAgICB0aGlzLmVudHJpZXMucHVzaCh0aGlzLmN1cnJlbnRFbnRyeSk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuZGlyZWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRoaXMubWF0Y2goXCJAXCIpO1xuICAgICAgICAgICAgICByZXR1cm4gXCJAXCIgKyB0aGlzLmtleSgpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnByZWFtYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5ID0ge307XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeVR5cGUnXSA9ICdQUkVBTUJMRSc7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeSddID0gdGhpcy52YWx1ZV9jb21tZW50KCk7XG4gICAgICAgICAgICAgIHRoaXMuZW50cmllcy5wdXNoKHRoaXMuY3VycmVudEVudHJ5KTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5jb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5ID0ge307XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEVudHJ5WydlbnRyeVR5cGUnXSA9ICdDT01NRU5UJztcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RW50cnlbJ2VudHJ5J10gPSB0aGlzLnZhbHVlX2NvbW1lbnQoKTtcbiAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnB1c2godGhpcy5jdXJyZW50RW50cnkpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLmVudHJ5ID0gZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICB0aGlzLmVudHJ5X2JvZHkoZCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuYmlidGV4ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoQXQoKSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLmRpcmVjdGl2ZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChcIntcIik7XG4gICAgICAgICAgICAgICAgICBpZiAoZCA9PSBcIkBTVFJJTkdcIikge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGQgPT0gXCJAUFJFQU1CTEVcIikge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlYW1ibGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZCA9PSBcIkBDT01NRU5UXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeShkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goXCJ9XCIpO1xuICAgICAgICAgICAgICB9ICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZXhwb3J0cy50b0pTT04gPSBmdW5jdGlvbihiaWJ0ZXgpIHtcbiAgICAgICAgICB2YXIgYiA9IG5ldyBCaWJ0ZXhQYXJzZXIoKTtcbiAgICAgICAgICBiLnNldElucHV0KGJpYnRleCk7XG4gICAgICAgICAgYi5iaWJ0ZXgoKTtcbiAgICAgICAgICByZXR1cm4gYi5lbnRyaWVzO1xuICAgICAgfTtcblxuICAgICAgLyogYWRkZWQgZHVyaW5nIGhhY2thdGhvbiBkb24ndCBoYXRlIG9uIG1lICovXG4gICAgICBleHBvcnRzLnRvQmlidGV4ID0gZnVuY3Rpb24oanNvbikge1xuICAgICAgICAgIHZhciBvdXQgPSAnJztcbiAgICAgICAgICBmb3IgKCB2YXIgaSBpbiBqc29uKSB7XG4gICAgICAgICAgICAgIG91dCArPSBcIkBcIiArIGpzb25baV0uZW50cnlUeXBlO1xuICAgICAgICAgICAgICBvdXQgKz0gJ3snO1xuICAgICAgICAgICAgICBpZiAoanNvbltpXS5jaXRhdGlvbktleSlcbiAgICAgICAgICAgICAgICAgIG91dCArPSBqc29uW2ldLmNpdGF0aW9uS2V5ICsgJywgJztcbiAgICAgICAgICAgICAgaWYgKGpzb25baV0uZW50cnkpXG4gICAgICAgICAgICAgICAgICBvdXQgKz0ganNvbltpXS5lbnRyeSA7XG4gICAgICAgICAgICAgIGlmIChqc29uW2ldLmVudHJ5VGFncykge1xuICAgICAgICAgICAgICAgICAgdmFyIHRhZ3MgPSAnJztcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGpkeCBpbiBqc29uW2ldLmVudHJ5VGFncykge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWdzLmxlbmd0aCAhPSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICs9ICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgdGFncyArPSBqZHggKyAnPSB7JyArIGpzb25baV0uZW50cnlUYWdzW2pkeF0gKyAnfSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gdGFncztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJ31cXG5cXG4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3V0O1xuXG4gICAgICB9O1xuXG4gIH0pKCBleHBvcnRzKTtcblxuICAvKiBlbmQgYmlidGV4UGFyc2UgKi9cbiAgfSk7XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVRhZyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nXG4gICAgICAucmVwbGFjZSgvW1xcdFxcbiBdKy9nLCAnICcpXG4gICAgICAucmVwbGFjZSgve1xcXFxbXCJeYC4nYWN1fkh2c10oICk/KFthLXpBLVpdKX0vZywgKGZ1bGwsIHgsIGNoYXIpID0+IGNoYXIpXG4gICAgICAucmVwbGFjZSgve1xcXFwoW2EtekEtWl0pfS9nLCAoZnVsbCwgY2hhcikgPT4gY2hhcik7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUJpYnRleChiaWJ0ZXgpIHtcbiAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcGFyc2VkRW50cmllcyA9IGJpYnRleFBhcnNlLnRvSlNPTihiaWJ0ZXgpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGFyc2VkRW50cmllcykge1xuICAgICAgLy8gbm9ybWFsaXplIHRhZ3M7IG5vdGUgZW50cnlUYWdzIGlzIGFuIG9iamVjdCwgbm90IE1hcFxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cnkuZW50cnlUYWdzKSkge1xuICAgICAgICBlbnRyeS5lbnRyeVRhZ3Nba2V5LnRvTG93ZXJDYXNlKCldID0gbm9ybWFsaXplVGFnKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGVudHJ5LmVudHJ5VGFncy50eXBlID0gZW50cnkuZW50cnlUeXBlO1xuICAgICAgLy8gYWRkIHRvIGJpYmxpb2dyYXBoeVxuICAgICAgYmlibGlvZ3JhcGh5LnNldChlbnRyeS5jaXRhdGlvbktleSwgZW50cnkuZW50cnlUYWdzKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpYmxpb2dyYXBoeTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlcmlhbGl6ZUZyb250bWF0dGVyVG9CaWJ0ZXgoZnJvbnRNYXR0ZXIpIHtcbiAgICByZXR1cm4gYEBhcnRpY2xleyR7ZnJvbnRNYXR0ZXIuc2x1Z30sXG4gIGF1dGhvciA9IHske2Zyb250TWF0dGVyLmJpYnRleEF1dGhvcnN9fSxcbiAgdGl0bGUgPSB7JHtmcm9udE1hdHRlci50aXRsZX19LFxuICBqb3VybmFsID0geyR7ZnJvbnRNYXR0ZXIuam91cm5hbC50aXRsZX19LFxuICB5ZWFyID0geyR7ZnJvbnRNYXR0ZXIucHVibGlzaGVkWWVhcn19LFxuICBub3RlID0geyR7ZnJvbnRNYXR0ZXIudXJsfX0sXG4gIGRvaSA9IHske2Zyb250TWF0dGVyLmRvaX19XG59YDtcbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjbGFzcyBCaWJsaW9ncmFwaHkgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2QtYmlibGlvZ3JhcGh5JzsgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuXG4gICAgICAvLyBzZXQgdXAgbXV0YXRpb24gb2JzZXJ2ZXJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7Y2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlLCBzdWJ0cmVlOiB0cnVlfTtcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoIChlbnRyaWVzKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgIGlmIChlbnRyeS50YXJnZXQubm9kZU5hbWUgPT09ICdTQ1JJUFQnIHx8IGVudHJ5LnR5cGUgPT09ICdjaGFyYWN0ZXJEYXRhJykge1xuICAgICAgICAgICAgdGhpcy5wYXJzZUlmUG9zc2libGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucGFyc2VJZlBvc3NpYmxlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYXJzZUlmUG9zc2libGUoKSB7XG4gICAgICBjb25zdCBzY3JpcHRUYWcgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdCcpO1xuICAgICAgaWYgKCFzY3JpcHRUYWcpIHJldHVybjtcbiAgICAgIGlmIChzY3JpcHRUYWcudHlwZSA9PSAndGV4dC9iaWJ0ZXgnKSB7XG4gICAgICAgIGNvbnN0IG5ld0JpYnRleCA9IHNjcmlwdFRhZy50ZXh0Q29udGVudDtcbiAgICAgICAgaWYgKHRoaXMuYmlidGV4ICE9PSBuZXdCaWJ0ZXgpIHtcbiAgICAgICAgICB0aGlzLmJpYnRleCA9IG5ld0JpYnRleDtcbiAgICAgICAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBwYXJzZUJpYnRleCh0aGlzLmJpYnRleCk7XG4gICAgICAgICAgdGhpcy5ub3RpZnkoYmlibGlvZ3JhcGh5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzY3JpcHRUYWcudHlwZSA9PSAndGV4dC9qc29uJykge1xuICAgICAgICBjb25zdCBiaWJsaW9ncmFwaHkgPSBuZXcgTWFwKEpTT04ucGFyc2Uoc2NyaXB0VGFnLnRleHRDb250ZW50KSk7XG4gICAgICAgIHRoaXMubm90aWZ5KGJpYmxpb2dyYXBoeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Vuc3VwcG9ydGVkIGJpYmxpb2dyYXBoeSBzY3JpcHQgdGFnIHR5cGU6ICcgKyBzY3JpcHRUYWcudHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm90aWZ5KGJpYmxpb2dyYXBoeSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgZGV0YWlsOiBiaWJsaW9ncmFwaHksIGJ1YmJsZXM6IHRydWUgfTtcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkJpYmxpb2dyYXBoeUNoYW5nZWQnLCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgLyogb2JzZXJ2ZSAnc3JjJyBhdHRyaWJ1dGUgKi9cblxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIFsnc3JjJ107XG4gICAgfVxuXG4gICAgcmVjZWl2ZWRCaWJ0ZXgoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGJpYmxpb2dyYXBoeSA9IHBhcnNlQmlidGV4KGV2ZW50LnRhcmdldC5yZXNwb25zZSk7XG4gICAgICB0aGlzLm5vdGlmeShiaWJsaW9ncmFwaHkpO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpIHtcbiAgICAgIHZhciBvUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICBvUmVxLm9ubG9hZCA9IChlKSA9PiB0aGlzLnJlY2VpdmVkQmlidGV4KGUpO1xuICAgICAgb1JlcS5vbmVycm9yID0gKCkgPT4gY29uc29sZS53YXJuKGBDb3VsZCBub3QgbG9hZCBCaWJ0ZXghICh0cmllZCAke25ld1ZhbHVlfSlgKTtcbiAgICAgIG9SZXEucmVzcG9uc2VUeXBlID0gJ3RleHQnO1xuICAgICAgb1JlcS5vcGVuKCdHRVQnLCBuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgICBvUmVxLnNlbmQoKTtcbiAgICB9XG5cblxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuICAvL1xuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAvL1xuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAvL1xuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiAgLy8gaW1wb3J0IHN0eWxlIGZyb20gJy4uL3N0eWxlcy9kLWJ5bGluZS5jc3MnO1xuXG4gIGZ1bmN0aW9uIGJ5bGluZVRlbXBsYXRlKGZyb250TWF0dGVyKSB7XG4gICAgcmV0dXJuIGBcbiAgICA8ZGl2IGNsYXNzPVwiYnlsaW5lIGdyaWRcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgICAgPGgzPkF1dGhvcnM8L2gzPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICR7ZnJvbnRNYXR0ZXIuYXV0aG9ycy5tYXAoKGF1dGhvciwgaSkgPT4gYFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dGhvclwiPlxuICAgICAgICAke2F1dGhvci5wZXJzb25hbFVSTCA/IGBcbiAgICAgICAgICA8YSBjbGFzcz1cIm5hbWVcIiBocmVmPVwiJHthdXRob3IucGVyc29uYWxVUkx9XCI+JHthdXRob3IubmFtZX1gICsgKGkgKyAxIDwgZnJvbnRNYXR0ZXIuYXV0aG9ycy5sZW5ndGggPyBgLGAgOiBgYCkgKyBgPC9hPmAgOiBgXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCI+JHthdXRob3IubmFtZX1gICsgKGkgKyAxIDwgZnJvbnRNYXR0ZXIuYXV0aG9ycy5sZW5ndGggPyBgLGAgOiBgYCkgKyBgPC9zcGFuPmB9XG4gICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIGApLmpvaW4oJycpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ID5cbiAgICAgICAgICA8aDM+QWZmaWxpYXRpb248L2gzPlxuICAgICAgICAgIDxkaXY+PGEgaHJlZj1cImh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vXCI+SHVnZ2luZ0ZhY2U8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgPlxuICAgICAgICAgIDxoMz5QdWJsaXNoZWQ8L2gzPlxuICAgICAgICAgIDxkaXY+TWF5IDMxLCAyMDI0PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbmA7XG4gIH1cblxuICBjbGFzcyBCeWxpbmUgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG5cbiAgICBzdGF0aWMgZ2V0IGlzKCkgeyByZXR1cm4gJ2QtYnlsaW5lJzsgfVxuXG4gICAgc2V0IGZyb250TWF0dGVyKGZyb250TWF0dGVyKSB7XG4gICAgICB0aGlzLmlubmVySFRNTCA9IGJ5bGluZVRlbXBsYXRlKGZyb250TWF0dGVyKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjb25zdCBUJDMgPSBUZW1wbGF0ZShcbiAgICBcImQtY2l0ZVwiLFxuICAgIGBcbjxzdHlsZT5cblxuOmhvc3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5jaXRhdGlvbiB7XG4gIGNvbG9yOiBoc2xhKDIwNiwgOTAlLCAyMCUsIDAuNyk7XG59XG5cbi5jaXRhdGlvbi1udW1iZXIge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiUm9ib3RvXCIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGNvbG9yOiBoc2xhKDIwNiwgOTAlLCAyMCUsIDAuNyk7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDEuMWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMnB4O1xuICBtYXJnaW46IDAgMnB4O1xufVxuXG5maWdjYXB0aW9uIC5jaXRhdGlvbi1udW1iZXIge1xuICBmb250LXNpemU6IDExcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHRvcDogLTJweDtcbiAgbGluZS1oZWlnaHQ6IDFlbTtcbn1cblxudWwge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cblxudWwgbGkge1xuICBwYWRkaW5nOiAxNXB4IDEwcHggMTVweCAxMHB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEpXG59XG5cbnVsIGxpOmxhc3Qtb2YtdHlwZSB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbjwvc3R5bGU+XG5cbjxkLWhvdmVyLWJveCBpZD1cImhvdmVyLWJveFwiPjwvZC1ob3Zlci1ib3g+XG5cbjxkaXYgaWQ9XCJjaXRhdGlvbi1cIiBjbGFzcz1cImNpdGF0aW9uXCI+XG4gIDxzcGFuIGNsYXNzPVwiY2l0YXRpb24tbnVtYmVyXCI+PC9zcGFuPlxuPC9kaXY+XG5gXG4gICk7XG5cbiAgY2xhc3MgQ2l0ZSBleHRlbmRzIFQkMyhIVE1MRWxlbWVudCkge1xuICAgIC8qIExpZmVjeWNsZSAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX251bWJlcnMgPSBbXTtcbiAgICAgIHRoaXMuX2VudHJpZXMgPSBbXTtcbiAgICB9XG5cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHRoaXMub3V0ZXJTcGFuID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoXCIjY2l0YXRpb24tXCIpO1xuICAgICAgdGhpcy5pbm5lclNwYW4gPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihcIi5jaXRhdGlvbi1udW1iZXJcIik7XG4gICAgICB0aGlzLmhvdmVyQm94ID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoXCJkLWhvdmVyLWJveFwiKTtcbiAgICAgIHdpbmRvdy5jdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZChcImQtaG92ZXItYm94XCIpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmhvdmVyQm94Lmxpc3Rlbih0aGlzKTtcbiAgICAgIH0pO1xuICAgICAgLy8gaW4gY2FzZSB0aGlzIGNvbXBvbmVudCBnb3QgY29ubmVjdGVkIGFmdGVyIHZhbHVlcyB3ZXJlIHNldFxuICAgICAgaWYgKHRoaXMubnVtYmVycykge1xuICAgICAgICB0aGlzLmRpc3BsYXlOdW1iZXJzKHRoaXMubnVtYmVycyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheUVudHJpZXModGhpcy5lbnRyaWVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1RPRE8gVGhpcyBjYXVzZXMgYW4gaW5maW5pdGUgbG9vcCBvbiBmaXJlZm94IHdpdGggcG9seWZpbGxzLlxuICAgIC8vIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGludGVyYWN0aXZlIGVkaXRpbmcgc28gbm8gcHJpb3JpdHkuXG4gICAgLy8gZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgLy8gY29uc3Qgb3B0aW9ucyA9IHsgZGV0YWlsOiBbdGhpcywgdGhpcy5rZXlzXSwgYnViYmxlczogdHJ1ZSB9O1xuICAgIC8vIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdvbkNpdGVLZXlSZW1vdmVkJywgb3B0aW9ucyk7XG4gICAgLy8gZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgLy8gfVxuXG4gICAgLyogb2JzZXJ2ZSAna2V5JyBhdHRyaWJ1dGUgKi9cblxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIFtcImtleVwiLCBcImJpYnRleC1rZXlcIl07XG4gICAgfVxuXG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gb2xkVmFsdWUgPyBcIm9uQ2l0ZUtleUNoYW5nZWRcIiA6IFwib25DaXRlS2V5Q3JlYXRlZFwiO1xuICAgICAgY29uc3Qga2V5cyA9IG5ld1ZhbHVlLnNwbGl0KFwiLFwiKS5tYXAoayA9PiBrLnRyaW0oKSk7XG4gICAgICBjb25zdCBvcHRpb25zID0geyBkZXRhaWw6IFt0aGlzLCBrZXlzXSwgYnViYmxlczogdHJ1ZSB9O1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCBvcHRpb25zKTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHNldCBrZXkodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwia2V5XCIsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQga2V5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwia2V5XCIpIHx8IHRoaXMuZ2V0QXR0cmlidXRlKFwiYmlidGV4LWtleVwiKTtcbiAgICB9XG5cbiAgICBnZXQga2V5cygpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMua2V5LnNwbGl0KFwiLFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qIFNldHRlcnMgJiBSZW5kZXJpbmcgKi9cblxuICAgIHNldCBudW1iZXJzKG51bWJlcnMpIHtcbiAgICAgIHRoaXMuX251bWJlcnMgPSBudW1iZXJzO1xuICAgICAgdGhpcy5kaXNwbGF5TnVtYmVycyhudW1iZXJzKTtcbiAgICB9XG5cbiAgICBnZXQgbnVtYmVycygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9udW1iZXJzO1xuICAgIH1cblxuICAgIGRpc3BsYXlOdW1iZXJzKG51bWJlcnMpIHtcbiAgICAgIGlmICghdGhpcy5pbm5lclNwYW4pIHJldHVybjtcbiAgICAgIGNvbnN0IG51bWJlclN0cmluZ3MgPSBudW1iZXJzLm1hcChpbmRleCA9PiB7XG4gICAgICAgIHJldHVybiBpbmRleCA9PSAtMSA/IFwiP1wiIDogaW5kZXggKyAxICsgXCJcIjtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBcIltcIiArIG51bWJlclN0cmluZ3Muam9pbihcIiwgXCIpICsgXCJdXCI7XG4gICAgICB0aGlzLmlubmVyU3Bhbi50ZXh0Q29udGVudCA9IHRleHRDb250ZW50O1xuICAgIH1cblxuICAgIHNldCBlbnRyaWVzKGVudHJpZXMpIHtcbiAgICAgIHRoaXMuX2VudHJpZXMgPSBlbnRyaWVzO1xuICAgICAgdGhpcy5kaXNwbGF5RW50cmllcyhlbnRyaWVzKTtcbiAgICB9XG5cbiAgICBnZXQgZW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbnRyaWVzO1xuICAgIH1cblxuICAgIGRpc3BsYXlFbnRyaWVzKGVudHJpZXMpIHtcbiAgICAgIGlmICghdGhpcy5ob3ZlckJveCkgcmV0dXJuO1xuICAgICAgdGhpcy5ob3ZlckJveC5pbm5lckhUTUwgPSBgPHVsPlxuICAgICAgJHtlbnRyaWVzXG4gICAgICAgIC5tYXAoaG92ZXJfY2l0ZSlcbiAgICAgICAgLm1hcChodG1sID0+IGA8bGk+JHtodG1sfTwvbGk+YClcbiAgICAgICAgLmpvaW4oXCJcXG5cIil9XG4gICAgPC91bD5gO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjb25zdCBzdHlsZXMkMSA9IGBcbmQtY2l0YXRpb24tbGlzdCB7XG4gIGNvbnRhaW46IHN0eWxlO1xufVxuXG5kLWNpdGF0aW9uLWxpc3QgLnJlZmVyZW5jZXMge1xuICBncmlkLWNvbHVtbjogdGV4dDtcbn1cblxuZC1jaXRhdGlvbi1saXN0IC5yZWZlcmVuY2VzIC50aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5gO1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNpdGF0aW9uTGlzdChlbGVtZW50LCBlbnRyaWVzLCBkb209ZG9jdW1lbnQpIHtcbiAgICBpZiAoZW50cmllcy5zaXplID4gMCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICBsZXQgbGlzdCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLnJlZmVyZW5jZXMnKTtcbiAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgIGxpc3QuaW5uZXJIVE1MID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdHlsZXNUYWcgPSBkb20uY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGVzVGFnLmlubmVySFRNTCA9IHN0eWxlcyQxO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlc1RhZyk7XG5cbiAgICAgICAgY29uc3QgaGVhZGluZyA9IGRvbS5jcmVhdGVFbGVtZW50KCdoMycpO1xuICAgICAgICBoZWFkaW5nLmlkID0gJ3JlZmVyZW5jZXMnO1xuICAgICAgICBoZWFkaW5nLnRleHRDb250ZW50ID0gJ1JlZmVyZW5jZXMnO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGhlYWRpbmcpO1xuXG4gICAgICAgIGxpc3QgPSBkb20uY3JlYXRlRWxlbWVudCgnb2wnKTtcbiAgICAgICAgbGlzdC5pZCA9ICdyZWZlcmVuY2VzLWxpc3QnO1xuICAgICAgICBsaXN0LmNsYXNzTmFtZSA9ICdyZWZlcmVuY2VzJztcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChsaXN0KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBsaXN0SXRlbSA9IGRvbS5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgICAgICBsaXN0SXRlbS5pZCA9IGtleTtcbiAgICAgICAgbGlzdEl0ZW0uaW5uZXJIVE1MID0gYmlibGlvZ3JhcGh5X2NpdGUoZW50cnkpO1xuICAgICAgICBsaXN0LmFwcGVuZENoaWxkKGxpc3RJdGVtKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIENpdGF0aW9uTGlzdCBleHRlbmRzIEhUTUxFbGVtZW50IHtcblxuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC1jaXRhdGlvbi1saXN0JzsgfVxuXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkaXN0aWxsLXByZXJlbmRlcmVkJykpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldCBjaXRhdGlvbnMoY2l0YXRpb25zKSB7XG4gICAgICByZW5kZXJDaXRhdGlvbkxpc3QodGhpcywgY2l0YXRpb25zKTtcbiAgICB9XG5cbiAgfVxuXG4gIHZhciBwcmlzbSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgIEJlZ2luIHByaXNtLWNvcmUuanNcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4gIHZhciBfc2VsZiA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcbiAgXHQ/IHdpbmRvdyAgIC8vIGlmIGluIGJyb3dzZXJcbiAgXHQ6IChcbiAgXHRcdCh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSlcbiAgXHRcdD8gc2VsZiAvLyBpZiBpbiB3b3JrZXJcbiAgXHRcdDoge30gICAvLyBpZiBpbiBub2RlIGpzXG4gIFx0KTtcblxuICAvKipcbiAgICogUHJpc206IExpZ2h0d2VpZ2h0LCByb2J1c3QsIGVsZWdhbnQgc3ludGF4IGhpZ2hsaWdodGluZ1xuICAgKiBNSVQgbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocC9cbiAgICogQGF1dGhvciBMZWEgVmVyb3UgaHR0cDovL2xlYS52ZXJvdS5tZVxuICAgKi9cblxuICB2YXIgUHJpc20gPSAoZnVuY3Rpb24gKF9zZWxmKXtcblxuICAvLyBQcml2YXRlIGhlbHBlciB2YXJzXG4gIHZhciBsYW5nID0gL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2k7XG4gIHZhciB1bmlxdWVJZCA9IDA7XG5cblxuICB2YXIgXyA9IHtcbiAgXHRtYW51YWw6IF9zZWxmLlByaXNtICYmIF9zZWxmLlByaXNtLm1hbnVhbCxcbiAgXHRkaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXI6IF9zZWxmLlByaXNtICYmIF9zZWxmLlByaXNtLmRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcixcbiAgXHR1dGlsOiB7XG4gIFx0XHRlbmNvZGU6IGZ1bmN0aW9uIGVuY29kZSh0b2tlbnMpIHtcbiAgXHRcdFx0aWYgKHRva2VucyBpbnN0YW5jZW9mIFRva2VuKSB7XG4gIFx0XHRcdFx0cmV0dXJuIG5ldyBUb2tlbih0b2tlbnMudHlwZSwgZW5jb2RlKHRva2Vucy5jb250ZW50KSwgdG9rZW5zLmFsaWFzKTtcbiAgXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRva2VucykpIHtcbiAgXHRcdFx0XHRyZXR1cm4gdG9rZW5zLm1hcChlbmNvZGUpO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdHJldHVybiB0b2tlbnMucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvXFx1MDBhMC9nLCAnICcpO1xuICBcdFx0XHR9XG4gIFx0XHR9LFxuXG4gIFx0XHR0eXBlOiBmdW5jdGlvbiAobykge1xuICBcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgXHRcdH0sXG5cbiAgXHRcdG9iaklkOiBmdW5jdGlvbiAob2JqKSB7XG4gIFx0XHRcdGlmICghb2JqWydfX2lkJ10pIHtcbiAgXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19pZCcsIHsgdmFsdWU6ICsrdW5pcXVlSWQgfSk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0cmV0dXJuIG9ialsnX19pZCddO1xuICBcdFx0fSxcblxuICBcdFx0Ly8gRGVlcCBjbG9uZSBhIGxhbmd1YWdlIGRlZmluaXRpb24gKGUuZy4gdG8gZXh0ZW5kIGl0KVxuICBcdFx0Y2xvbmU6IGZ1bmN0aW9uIGRlZXBDbG9uZShvLCB2aXNpdGVkKSB7XG4gIFx0XHRcdHZhciBjbG9uZSwgaWQsIHR5cGUgPSBfLnV0aWwudHlwZShvKTtcbiAgXHRcdFx0dmlzaXRlZCA9IHZpc2l0ZWQgfHwge307XG5cbiAgXHRcdFx0c3dpdGNoICh0eXBlKSB7XG4gIFx0XHRcdFx0Y2FzZSAnT2JqZWN0JzpcbiAgXHRcdFx0XHRcdGlkID0gXy51dGlsLm9iaklkKG8pO1xuICBcdFx0XHRcdFx0aWYgKHZpc2l0ZWRbaWRdKSB7XG4gIFx0XHRcdFx0XHRcdHJldHVybiB2aXNpdGVkW2lkXTtcbiAgXHRcdFx0XHRcdH1cbiAgXHRcdFx0XHRcdGNsb25lID0ge307XG4gIFx0XHRcdFx0XHR2aXNpdGVkW2lkXSA9IGNsb25lO1xuXG4gIFx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gbykge1xuICBcdFx0XHRcdFx0XHRpZiAoby5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gIFx0XHRcdFx0XHRcdFx0Y2xvbmVba2V5XSA9IGRlZXBDbG9uZShvW2tleV0sIHZpc2l0ZWQpO1xuICBcdFx0XHRcdFx0XHR9XG4gIFx0XHRcdFx0XHR9XG5cbiAgXHRcdFx0XHRcdHJldHVybiBjbG9uZTtcblxuICBcdFx0XHRcdGNhc2UgJ0FycmF5JzpcbiAgXHRcdFx0XHRcdGlkID0gXy51dGlsLm9iaklkKG8pO1xuICBcdFx0XHRcdFx0aWYgKHZpc2l0ZWRbaWRdKSB7XG4gIFx0XHRcdFx0XHRcdHJldHVybiB2aXNpdGVkW2lkXTtcbiAgXHRcdFx0XHRcdH1cbiAgXHRcdFx0XHRcdGNsb25lID0gW107XG4gIFx0XHRcdFx0XHR2aXNpdGVkW2lkXSA9IGNsb25lO1xuXG4gIFx0XHRcdFx0XHRvLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcbiAgXHRcdFx0XHRcdFx0Y2xvbmVbaV0gPSBkZWVwQ2xvbmUodiwgdmlzaXRlZCk7XG4gIFx0XHRcdFx0XHR9KTtcblxuICBcdFx0XHRcdFx0cmV0dXJuIGNsb25lO1xuXG4gIFx0XHRcdFx0ZGVmYXVsdDpcbiAgXHRcdFx0XHRcdHJldHVybiBvO1xuICBcdFx0XHR9XG4gIFx0XHR9LFxuXG4gIFx0XHQvKipcbiAgXHRcdCAqIFJldHVybnMgdGhlIFByaXNtIGxhbmd1YWdlIG9mIHRoZSBnaXZlbiBlbGVtZW50IHNldCBieSBhIGBsYW5ndWFnZS14eHh4YCBvciBgbGFuZy14eHh4YCBjbGFzcy5cbiAgXHRcdCAqXG4gIFx0XHQgKiBJZiBubyBsYW5ndWFnZSBpcyBzZXQgZm9yIHRoZSBlbGVtZW50IG9yIHRoZSBlbGVtZW50IGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgYG5vbmVgIHdpbGwgYmUgcmV0dXJuZWQuXG4gIFx0XHQgKlxuICBcdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gIFx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuICBcdFx0ICovXG4gIFx0XHRnZXRMYW5ndWFnZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgXHRcdFx0d2hpbGUgKGVsZW1lbnQgJiYgIWxhbmcudGVzdChlbGVtZW50LmNsYXNzTmFtZSkpIHtcbiAgXHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICBcdFx0XHR9XG4gIFx0XHRcdGlmIChlbGVtZW50KSB7XG4gIFx0XHRcdFx0cmV0dXJuIChlbGVtZW50LmNsYXNzTmFtZS5tYXRjaChsYW5nKSB8fCBbLCAnbm9uZSddKVsxXS50b0xvd2VyQ2FzZSgpO1xuICBcdFx0XHR9XG4gIFx0XHRcdHJldHVybiAnbm9uZSc7XG4gIFx0XHR9LFxuXG4gIFx0XHQvKipcbiAgXHRcdCAqIFJldHVybnMgdGhlIHNjcmlwdCBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5IGV4ZWN1dGluZy5cbiAgXHRcdCAqXG4gIFx0XHQgKiBUaGlzIGRvZXMgX19ub3RfXyB3b3JrIGZvciBsaW5lIHNjcmlwdCBlbGVtZW50LlxuICBcdFx0ICpcbiAgXHRcdCAqIEByZXR1cm5zIHtIVE1MU2NyaXB0RWxlbWVudCB8IG51bGx9XG4gIFx0XHQgKi9cbiAgXHRcdGN1cnJlbnRTY3JpcHQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgXHRcdFx0XHRyZXR1cm4gbnVsbDtcbiAgXHRcdFx0fVxuICBcdFx0XHRpZiAoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50KSB7XG4gIFx0XHRcdFx0cmV0dXJuIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQ7XG4gIFx0XHRcdH1cblxuICBcdFx0XHQvLyBJRTExIHdvcmthcm91bmRcbiAgXHRcdFx0Ly8gd2UnbGwgZ2V0IHRoZSBzcmMgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IGJ5IHBhcnNpbmcgSUUxMSdzIGVycm9yIHN0YWNrIHRyYWNlXG4gIFx0XHRcdC8vIHRoaXMgd2lsbCBub3Qgd29yayBmb3IgaW5saW5lIHNjcmlwdHNcblxuICBcdFx0XHR0cnkge1xuICBcdFx0XHRcdHRocm93IG5ldyBFcnJvcigpO1xuICBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiAgXHRcdFx0XHQvLyBHZXQgZmlsZSBzcmMgdXJsIGZyb20gc3RhY2suIFNwZWNpZmljYWxseSB3b3JrcyB3aXRoIHRoZSBmb3JtYXQgb2Ygc3RhY2sgdHJhY2VzIGluIElFLlxuICBcdFx0XHRcdC8vIEEgc3RhY2sgd2lsbCBsb29rIGxpa2UgdGhpczpcbiAgXHRcdFx0XHQvL1xuICBcdFx0XHRcdC8vIEVycm9yXG4gIFx0XHRcdFx0Ly8gICAgYXQgXy51dGlsLmN1cnJlbnRTY3JpcHQgKGh0dHA6Ly9sb2NhbGhvc3QvY29tcG9uZW50cy9wcmlzbS1jb3JlLmpzOjExOTo1KVxuICBcdFx0XHRcdC8vICAgIGF0IEdsb2JhbCBjb2RlIChodHRwOi8vbG9jYWxob3N0L2NvbXBvbmVudHMvcHJpc20tY29yZS5qczo2MDY6MSlcblxuICBcdFx0XHRcdHZhciBzcmMgPSAoL2F0IFteKFxcclxcbl0qXFwoKC4qKTouKzouK1xcKSQvaS5leGVjKGVyci5zdGFjaykgfHwgW10pWzFdO1xuICBcdFx0XHRcdGlmIChzcmMpIHtcbiAgXHRcdFx0XHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpO1xuICBcdFx0XHRcdFx0Zm9yICh2YXIgaSBpbiBzY3JpcHRzKSB7XG4gIFx0XHRcdFx0XHRcdGlmIChzY3JpcHRzW2ldLnNyYyA9PSBzcmMpIHtcbiAgXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2NyaXB0c1tpXTtcbiAgXHRcdFx0XHRcdFx0fVxuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdH1cbiAgXHRcdFx0XHRyZXR1cm4gbnVsbDtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRsYW5ndWFnZXM6IHtcbiAgXHRcdGV4dGVuZDogZnVuY3Rpb24gKGlkLCByZWRlZikge1xuICBcdFx0XHR2YXIgbGFuZyA9IF8udXRpbC5jbG9uZShfLmxhbmd1YWdlc1tpZF0pO1xuXG4gIFx0XHRcdGZvciAodmFyIGtleSBpbiByZWRlZikge1xuICBcdFx0XHRcdGxhbmdba2V5XSA9IHJlZGVmW2tleV07XG4gIFx0XHRcdH1cblxuICBcdFx0XHRyZXR1cm4gbGFuZztcbiAgXHRcdH0sXG5cbiAgXHRcdC8qKlxuICBcdFx0ICogSW5zZXJ0IGEgdG9rZW4gYmVmb3JlIGFub3RoZXIgdG9rZW4gaW4gYSBsYW5ndWFnZSBsaXRlcmFsXG4gIFx0XHQgKiBBcyB0aGlzIG5lZWRzIHRvIHJlY3JlYXRlIHRoZSBvYmplY3QgKHdlIGNhbm5vdCBhY3R1YWxseSBpbnNlcnQgYmVmb3JlIGtleXMgaW4gb2JqZWN0IGxpdGVyYWxzKSxcbiAgXHRcdCAqIHdlIGNhbm5vdCBqdXN0IHByb3ZpZGUgYW4gb2JqZWN0LCB3ZSBuZWVkIGFuIG9iamVjdCBhbmQgYSBrZXkuXG4gIFx0XHQgKiBAcGFyYW0gaW5zaWRlIFRoZSBrZXkgKG9yIGxhbmd1YWdlIGlkKSBvZiB0aGUgcGFyZW50XG4gIFx0XHQgKiBAcGFyYW0gYmVmb3JlIFRoZSBrZXkgdG8gaW5zZXJ0IGJlZm9yZS5cbiAgXHRcdCAqIEBwYXJhbSBpbnNlcnQgT2JqZWN0IHdpdGggdGhlIGtleS92YWx1ZSBwYWlycyB0byBpbnNlcnRcbiAgXHRcdCAqIEBwYXJhbSByb290IFRoZSBvYmplY3QgdGhhdCBjb250YWlucyBgaW5zaWRlYC4gSWYgZXF1YWwgdG8gUHJpc20ubGFuZ3VhZ2VzLCBpdCBjYW4gYmUgb21pdHRlZC5cbiAgXHRcdCAqL1xuICBcdFx0aW5zZXJ0QmVmb3JlOiBmdW5jdGlvbiAoaW5zaWRlLCBiZWZvcmUsIGluc2VydCwgcm9vdCkge1xuICBcdFx0XHRyb290ID0gcm9vdCB8fCBfLmxhbmd1YWdlcztcbiAgXHRcdFx0dmFyIGdyYW1tYXIgPSByb290W2luc2lkZV07XG4gIFx0XHRcdHZhciByZXQgPSB7fTtcblxuICBcdFx0XHRmb3IgKHZhciB0b2tlbiBpbiBncmFtbWFyKSB7XG4gIFx0XHRcdFx0aWYgKGdyYW1tYXIuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG5cbiAgXHRcdFx0XHRcdGlmICh0b2tlbiA9PSBiZWZvcmUpIHtcbiAgXHRcdFx0XHRcdFx0Zm9yICh2YXIgbmV3VG9rZW4gaW4gaW5zZXJ0KSB7XG4gIFx0XHRcdFx0XHRcdFx0aWYgKGluc2VydC5oYXNPd25Qcm9wZXJ0eShuZXdUb2tlbikpIHtcbiAgXHRcdFx0XHRcdFx0XHRcdHJldFtuZXdUb2tlbl0gPSBpbnNlcnRbbmV3VG9rZW5dO1xuICBcdFx0XHRcdFx0XHRcdH1cbiAgXHRcdFx0XHRcdFx0fVxuICBcdFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0XHQvLyBEbyBub3QgaW5zZXJ0IHRva2VuIHdoaWNoIGFsc28gb2NjdXIgaW4gaW5zZXJ0LiBTZWUgIzE1MjVcbiAgXHRcdFx0XHRcdGlmICghaW5zZXJ0Lmhhc093blByb3BlcnR5KHRva2VuKSkge1xuICBcdFx0XHRcdFx0XHRyZXRbdG9rZW5dID0gZ3JhbW1hclt0b2tlbl07XG4gIFx0XHRcdFx0XHR9XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG5cbiAgXHRcdFx0dmFyIG9sZCA9IHJvb3RbaW5zaWRlXTtcbiAgXHRcdFx0cm9vdFtpbnNpZGVdID0gcmV0O1xuXG4gIFx0XHRcdC8vIFVwZGF0ZSByZWZlcmVuY2VzIGluIG90aGVyIGxhbmd1YWdlIGRlZmluaXRpb25zXG4gIFx0XHRcdF8ubGFuZ3VhZ2VzLkRGUyhfLmxhbmd1YWdlcywgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICBcdFx0XHRcdGlmICh2YWx1ZSA9PT0gb2xkICYmIGtleSAhPSBpbnNpZGUpIHtcbiAgXHRcdFx0XHRcdHRoaXNba2V5XSA9IHJldDtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH0pO1xuXG4gIFx0XHRcdHJldHVybiByZXQ7XG4gIFx0XHR9LFxuXG4gIFx0XHQvLyBUcmF2ZXJzZSBhIGxhbmd1YWdlIGRlZmluaXRpb24gd2l0aCBEZXB0aCBGaXJzdCBTZWFyY2hcbiAgXHRcdERGUzogZnVuY3Rpb24gREZTKG8sIGNhbGxiYWNrLCB0eXBlLCB2aXNpdGVkKSB7XG4gIFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xuXG4gIFx0XHRcdHZhciBvYmpJZCA9IF8udXRpbC5vYmpJZDtcblxuICBcdFx0XHRmb3IgKHZhciBpIGluIG8pIHtcbiAgXHRcdFx0XHRpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICBcdFx0XHRcdFx0Y2FsbGJhY2suY2FsbChvLCBpLCBvW2ldLCB0eXBlIHx8IGkpO1xuXG4gIFx0XHRcdFx0XHR2YXIgcHJvcGVydHkgPSBvW2ldLFxuICBcdFx0XHRcdFx0ICAgIHByb3BlcnR5VHlwZSA9IF8udXRpbC50eXBlKHByb3BlcnR5KTtcblxuICBcdFx0XHRcdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gJ09iamVjdCcgJiYgIXZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSkge1xuICBcdFx0XHRcdFx0XHR2aXNpdGVkW29iaklkKHByb3BlcnR5KV0gPSB0cnVlO1xuICBcdFx0XHRcdFx0XHRERlMocHJvcGVydHksIGNhbGxiYWNrLCBudWxsLCB2aXNpdGVkKTtcbiAgXHRcdFx0XHRcdH1cbiAgXHRcdFx0XHRcdGVsc2UgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0FycmF5JyAmJiAhdmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldKSB7XG4gIFx0XHRcdFx0XHRcdHZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSA9IHRydWU7XG4gIFx0XHRcdFx0XHRcdERGUyhwcm9wZXJ0eSwgY2FsbGJhY2ssIGksIHZpc2l0ZWQpO1xuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG4gIFx0cGx1Z2luczoge30sXG5cbiAgXHRoaWdobGlnaHRBbGw6IGZ1bmN0aW9uKGFzeW5jLCBjYWxsYmFjaykge1xuICBcdFx0Xy5oaWdobGlnaHRBbGxVbmRlcihkb2N1bWVudCwgYXN5bmMsIGNhbGxiYWNrKTtcbiAgXHR9LFxuXG4gIFx0aGlnaGxpZ2h0QWxsVW5kZXI6IGZ1bmN0aW9uKGNvbnRhaW5lciwgYXN5bmMsIGNhbGxiYWNrKSB7XG4gIFx0XHR2YXIgZW52ID0ge1xuICBcdFx0XHRjYWxsYmFjazogY2FsbGJhY2ssXG4gIFx0XHRcdGNvbnRhaW5lcjogY29udGFpbmVyLFxuICBcdFx0XHRzZWxlY3RvcjogJ2NvZGVbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdLCBbY2xhc3MqPVwibGFuZ3VhZ2UtXCJdIGNvZGUsIGNvZGVbY2xhc3MqPVwibGFuZy1cIl0sIFtjbGFzcyo9XCJsYW5nLVwiXSBjb2RlJ1xuICBcdFx0fTtcblxuICBcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1oaWdobGlnaHRhbGwnLCBlbnYpO1xuXG4gIFx0XHRlbnYuZWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZW52LmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGVudi5zZWxlY3RvcikpO1xuXG4gIFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLWFsbC1lbGVtZW50cy1oaWdobGlnaHQnLCBlbnYpO1xuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgZWxlbWVudDsgZWxlbWVudCA9IGVudi5lbGVtZW50c1tpKytdOykge1xuICBcdFx0XHRfLmhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudCwgYXN5bmMgPT09IHRydWUsIGVudi5jYWxsYmFjayk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdGhpZ2hsaWdodEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGFzeW5jLCBjYWxsYmFjaykge1xuICBcdFx0Ly8gRmluZCBsYW5ndWFnZVxuICBcdFx0dmFyIGxhbmd1YWdlID0gXy51dGlsLmdldExhbmd1YWdlKGVsZW1lbnQpO1xuICBcdFx0dmFyIGdyYW1tYXIgPSBfLmxhbmd1YWdlc1tsYW5ndWFnZV07XG5cbiAgXHRcdC8vIFNldCBsYW5ndWFnZSBvbiB0aGUgZWxlbWVudCwgaWYgbm90IHByZXNlbnRcbiAgXHRcdGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShsYW5nLCAnJykucmVwbGFjZSgvXFxzKy9nLCAnICcpICsgJyBsYW5ndWFnZS0nICsgbGFuZ3VhZ2U7XG5cbiAgXHRcdC8vIFNldCBsYW5ndWFnZSBvbiB0aGUgcGFyZW50LCBmb3Igc3R5bGluZ1xuICBcdFx0dmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgXHRcdGlmIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdwcmUnKSB7XG4gIFx0XHRcdHBhcmVudC5jbGFzc05hbWUgPSBwYXJlbnQuY2xhc3NOYW1lLnJlcGxhY2UobGFuZywgJycpLnJlcGxhY2UoL1xccysvZywgJyAnKSArICcgbGFuZ3VhZ2UtJyArIGxhbmd1YWdlO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgY29kZSA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG5cbiAgXHRcdHZhciBlbnYgPSB7XG4gIFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnQsXG4gIFx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZSxcbiAgXHRcdFx0Z3JhbW1hcjogZ3JhbW1hcixcbiAgXHRcdFx0Y29kZTogY29kZVxuICBcdFx0fTtcblxuICBcdFx0ZnVuY3Rpb24gaW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKGhpZ2hsaWdodGVkQ29kZSkge1xuICBcdFx0XHRlbnYuaGlnaGxpZ2h0ZWRDb2RlID0gaGlnaGxpZ2h0ZWRDb2RlO1xuXG4gIFx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaW5zZXJ0JywgZW52KTtcblxuICBcdFx0XHRlbnYuZWxlbWVudC5pbm5lckhUTUwgPSBlbnYuaGlnaGxpZ2h0ZWRDb2RlO1xuXG4gIFx0XHRcdF8uaG9va3MucnVuKCdhZnRlci1oaWdobGlnaHQnLCBlbnYpO1xuICBcdFx0XHRfLmhvb2tzLnJ1bignY29tcGxldGUnLCBlbnYpO1xuICBcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjay5jYWxsKGVudi5lbGVtZW50KTtcbiAgXHRcdH1cblxuICBcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1zYW5pdHktY2hlY2snLCBlbnYpO1xuXG4gIFx0XHRpZiAoIWVudi5jb2RlKSB7XG4gIFx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XG4gIFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0JywgZW52KTtcblxuICBcdFx0aWYgKCFlbnYuZ3JhbW1hcikge1xuICBcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy51dGlsLmVuY29kZShlbnYuY29kZSkpO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChhc3luYyAmJiBfc2VsZi5Xb3JrZXIpIHtcbiAgXHRcdFx0dmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoXy5maWxlbmFtZSk7XG5cbiAgXHRcdFx0d29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2dCkge1xuICBcdFx0XHRcdGluc2VydEhpZ2hsaWdodGVkQ29kZShldnQuZGF0YSk7XG4gIFx0XHRcdH07XG5cbiAgXHRcdFx0d29ya2VyLnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgXHRcdFx0XHRsYW5ndWFnZTogZW52Lmxhbmd1YWdlLFxuICBcdFx0XHRcdGNvZGU6IGVudi5jb2RlLFxuICBcdFx0XHRcdGltbWVkaWF0ZUNsb3NlOiB0cnVlXG4gIFx0XHRcdH0pKTtcbiAgXHRcdH1cbiAgXHRcdGVsc2Uge1xuICBcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy5oaWdobGlnaHQoZW52LmNvZGUsIGVudi5ncmFtbWFyLCBlbnYubGFuZ3VhZ2UpKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0aGlnaGxpZ2h0OiBmdW5jdGlvbiAodGV4dCwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcbiAgXHRcdHZhciBlbnYgPSB7XG4gIFx0XHRcdGNvZGU6IHRleHQsXG4gIFx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXG4gIFx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZVxuICBcdFx0fTtcbiAgXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtdG9rZW5pemUnLCBlbnYpO1xuICBcdFx0ZW52LnRva2VucyA9IF8udG9rZW5pemUoZW52LmNvZGUsIGVudi5ncmFtbWFyKTtcbiAgXHRcdF8uaG9va3MucnVuKCdhZnRlci10b2tlbml6ZScsIGVudik7XG4gIFx0XHRyZXR1cm4gVG9rZW4uc3RyaW5naWZ5KF8udXRpbC5lbmNvZGUoZW52LnRva2VucyksIGVudi5sYW5ndWFnZSk7XG4gIFx0fSxcblxuICBcdHRva2VuaXplOiBmdW5jdGlvbih0ZXh0LCBncmFtbWFyKSB7XG4gIFx0XHR2YXIgcmVzdCA9IGdyYW1tYXIucmVzdDtcbiAgXHRcdGlmIChyZXN0KSB7XG4gIFx0XHRcdGZvciAodmFyIHRva2VuIGluIHJlc3QpIHtcbiAgXHRcdFx0XHRncmFtbWFyW3Rva2VuXSA9IHJlc3RbdG9rZW5dO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0ZGVsZXRlIGdyYW1tYXIucmVzdDtcbiAgXHRcdH1cblxuICBcdFx0dmFyIHRva2VuTGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7XG4gIFx0XHRhZGRBZnRlcih0b2tlbkxpc3QsIHRva2VuTGlzdC5oZWFkLCB0ZXh0KTtcblxuICBcdFx0bWF0Y2hHcmFtbWFyKHRleHQsIHRva2VuTGlzdCwgZ3JhbW1hciwgdG9rZW5MaXN0LmhlYWQsIDApO1xuXG4gIFx0XHRyZXR1cm4gdG9BcnJheSh0b2tlbkxpc3QpO1xuICBcdH0sXG5cbiAgXHRob29rczoge1xuICBcdFx0YWxsOiB7fSxcblxuICBcdFx0YWRkOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spIHtcbiAgXHRcdFx0dmFyIGhvb2tzID0gXy5ob29rcy5hbGw7XG5cbiAgXHRcdFx0aG9va3NbbmFtZV0gPSBob29rc1tuYW1lXSB8fCBbXTtcblxuICBcdFx0XHRob29rc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcbiAgXHRcdH0sXG5cbiAgXHRcdHJ1bjogZnVuY3Rpb24gKG5hbWUsIGVudikge1xuICBcdFx0XHR2YXIgY2FsbGJhY2tzID0gXy5ob29rcy5hbGxbbmFtZV07XG5cbiAgXHRcdFx0aWYgKCFjYWxsYmFja3MgfHwgIWNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgXHRcdFx0XHRyZXR1cm47XG4gIFx0XHRcdH1cblxuICBcdFx0XHRmb3IgKHZhciBpPTAsIGNhbGxiYWNrOyBjYWxsYmFjayA9IGNhbGxiYWNrc1tpKytdOykge1xuICBcdFx0XHRcdGNhbGxiYWNrKGVudik7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0VG9rZW46IFRva2VuXG4gIH07XG5cbiAgX3NlbGYuUHJpc20gPSBfO1xuXG4gIGZ1bmN0aW9uIFRva2VuKHR5cGUsIGNvbnRlbnQsIGFsaWFzLCBtYXRjaGVkU3RyLCBncmVlZHkpIHtcbiAgXHR0aGlzLnR5cGUgPSB0eXBlO1xuICBcdHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIFx0dGhpcy5hbGlhcyA9IGFsaWFzO1xuICBcdC8vIENvcHkgb2YgdGhlIGZ1bGwgc3RyaW5nIHRoaXMgdG9rZW4gd2FzIGNyZWF0ZWQgZnJvbVxuICBcdHRoaXMubGVuZ3RoID0gKG1hdGNoZWRTdHIgfHwgJycpLmxlbmd0aHwwO1xuICBcdHRoaXMuZ3JlZWR5ID0gISFncmVlZHk7XG4gIH1cblxuICBUb2tlbi5zdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkobywgbGFuZ3VhZ2UpIHtcbiAgXHRpZiAodHlwZW9mIG8gPT0gJ3N0cmluZycpIHtcbiAgXHRcdHJldHVybiBvO1xuICBcdH1cbiAgXHRpZiAoQXJyYXkuaXNBcnJheShvKSkge1xuICBcdFx0dmFyIHMgPSAnJztcbiAgXHRcdG8uZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICBcdFx0XHRzICs9IHN0cmluZ2lmeShlLCBsYW5ndWFnZSk7XG4gIFx0XHR9KTtcbiAgXHRcdHJldHVybiBzO1xuICBcdH1cblxuICBcdHZhciBlbnYgPSB7XG4gIFx0XHR0eXBlOiBvLnR5cGUsXG4gIFx0XHRjb250ZW50OiBzdHJpbmdpZnkoby5jb250ZW50LCBsYW5ndWFnZSksXG4gIFx0XHR0YWc6ICdzcGFuJyxcbiAgXHRcdGNsYXNzZXM6IFsndG9rZW4nLCBvLnR5cGVdLFxuICBcdFx0YXR0cmlidXRlczoge30sXG4gIFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2VcbiAgXHR9O1xuXG4gIFx0dmFyIGFsaWFzZXMgPSBvLmFsaWFzO1xuICBcdGlmIChhbGlhc2VzKSB7XG4gIFx0XHRpZiAoQXJyYXkuaXNBcnJheShhbGlhc2VzKSkge1xuICBcdFx0XHRBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlbnYuY2xhc3NlcywgYWxpYXNlcyk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRlbnYuY2xhc3Nlcy5wdXNoKGFsaWFzZXMpO1xuICBcdFx0fVxuICBcdH1cblxuICBcdF8uaG9va3MucnVuKCd3cmFwJywgZW52KTtcblxuICBcdHZhciBhdHRyaWJ1dGVzID0gJyc7XG4gIFx0Zm9yICh2YXIgbmFtZSBpbiBlbnYuYXR0cmlidXRlcykge1xuICBcdFx0YXR0cmlidXRlcyArPSAnICcgKyBuYW1lICsgJz1cIicgKyAoZW52LmF0dHJpYnV0ZXNbbmFtZV0gfHwgJycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKSArICdcIic7XG4gIFx0fVxuXG4gIFx0cmV0dXJuICc8JyArIGVudi50YWcgKyAnIGNsYXNzPVwiJyArIGVudi5jbGFzc2VzLmpvaW4oJyAnKSArICdcIicgKyBhdHRyaWJ1dGVzICsgJz4nICsgZW52LmNvbnRlbnQgKyAnPC8nICsgZW52LnRhZyArICc+JztcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0PHN0cmluZyB8IFRva2VuPn0gdG9rZW5MaXN0XG4gICAqIEBwYXJhbSB7YW55fSBncmFtbWFyXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdE5vZGU8c3RyaW5nIHwgVG9rZW4+fSBzdGFydE5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0UG9zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29uZXNob3Q9ZmFsc2VdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XVxuICAgKi9cbiAgZnVuY3Rpb24gbWF0Y2hHcmFtbWFyKHRleHQsIHRva2VuTGlzdCwgZ3JhbW1hciwgc3RhcnROb2RlLCBzdGFydFBvcywgb25lc2hvdCwgdGFyZ2V0KSB7XG4gIFx0Zm9yICh2YXIgdG9rZW4gaW4gZ3JhbW1hcikge1xuICBcdFx0aWYgKCFncmFtbWFyLmhhc093blByb3BlcnR5KHRva2VuKSB8fCAhZ3JhbW1hclt0b2tlbl0pIHtcbiAgXHRcdFx0Y29udGludWU7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBwYXR0ZXJucyA9IGdyYW1tYXJbdG9rZW5dO1xuICBcdFx0cGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHBhdHRlcm5zKSA/IHBhdHRlcm5zIDogW3BhdHRlcm5zXTtcblxuICBcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwYXR0ZXJucy5sZW5ndGg7ICsraikge1xuICBcdFx0XHRpZiAodGFyZ2V0ICYmIHRhcmdldCA9PSB0b2tlbiArICcsJyArIGopIHtcbiAgXHRcdFx0XHRyZXR1cm47XG4gIFx0XHRcdH1cblxuICBcdFx0XHR2YXIgcGF0dGVybiA9IHBhdHRlcm5zW2pdLFxuICBcdFx0XHRcdGluc2lkZSA9IHBhdHRlcm4uaW5zaWRlLFxuICBcdFx0XHRcdGxvb2tiZWhpbmQgPSAhIXBhdHRlcm4ubG9va2JlaGluZCxcbiAgXHRcdFx0XHRncmVlZHkgPSAhIXBhdHRlcm4uZ3JlZWR5LFxuICBcdFx0XHRcdGxvb2tiZWhpbmRMZW5ndGggPSAwLFxuICBcdFx0XHRcdGFsaWFzID0gcGF0dGVybi5hbGlhcztcblxuICBcdFx0XHRpZiAoZ3JlZWR5ICYmICFwYXR0ZXJuLnBhdHRlcm4uZ2xvYmFsKSB7XG4gIFx0XHRcdFx0Ly8gV2l0aG91dCB0aGUgZ2xvYmFsIGZsYWcsIGxhc3RJbmRleCB3b24ndCB3b3JrXG4gIFx0XHRcdFx0dmFyIGZsYWdzID0gcGF0dGVybi5wYXR0ZXJuLnRvU3RyaW5nKCkubWF0Y2goL1tpbXN1eV0qJC8pWzBdO1xuICBcdFx0XHRcdHBhdHRlcm4ucGF0dGVybiA9IFJlZ0V4cChwYXR0ZXJuLnBhdHRlcm4uc291cmNlLCBmbGFncyArICdnJyk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHRwYXR0ZXJuID0gcGF0dGVybi5wYXR0ZXJuIHx8IHBhdHRlcm47XG5cbiAgXHRcdFx0Zm9yICggLy8gaXRlcmF0ZSB0aGUgdG9rZW4gbGlzdCBhbmQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCB0b2tlbi9zdHJpbmcgcG9zaXRpb25cbiAgXHRcdFx0XHR2YXIgY3VycmVudE5vZGUgPSBzdGFydE5vZGUubmV4dCwgcG9zID0gc3RhcnRQb3M7XG4gIFx0XHRcdFx0Y3VycmVudE5vZGUgIT09IHRva2VuTGlzdC50YWlsO1xuICBcdFx0XHRcdHBvcyArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGgsIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFxuICBcdFx0XHQpIHtcblxuICBcdFx0XHRcdHZhciBzdHIgPSBjdXJyZW50Tm9kZS52YWx1ZTtcblxuICBcdFx0XHRcdGlmICh0b2tlbkxpc3QubGVuZ3RoID4gdGV4dC5sZW5ndGgpIHtcbiAgXHRcdFx0XHRcdC8vIFNvbWV0aGluZyB3ZW50IHRlcnJpYmx5IHdyb25nLCBBQk9SVCwgQUJPUlQhXG4gIFx0XHRcdFx0XHRyZXR1cm47XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0aWYgKHN0ciBpbnN0YW5jZW9mIFRva2VuKSB7XG4gIFx0XHRcdFx0XHRjb250aW51ZTtcbiAgXHRcdFx0XHR9XG5cbiAgXHRcdFx0XHR2YXIgcmVtb3ZlQ291bnQgPSAxOyAvLyB0aGlzIGlzIHRoZSB0byBwYXJhbWV0ZXIgb2YgcmVtb3ZlQmV0d2VlblxuXG4gIFx0XHRcdFx0aWYgKGdyZWVkeSAmJiBjdXJyZW50Tm9kZSAhPSB0b2tlbkxpc3QudGFpbC5wcmV2KSB7XG4gIFx0XHRcdFx0XHRwYXR0ZXJuLmxhc3RJbmRleCA9IHBvcztcbiAgXHRcdFx0XHRcdHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcbiAgXHRcdFx0XHRcdGlmICghbWF0Y2gpIHtcbiAgXHRcdFx0XHRcdFx0YnJlYWs7XG4gIFx0XHRcdFx0XHR9XG5cbiAgXHRcdFx0XHRcdHZhciBmcm9tID0gbWF0Y2guaW5kZXggKyAobG9va2JlaGluZCAmJiBtYXRjaFsxXSA/IG1hdGNoWzFdLmxlbmd0aCA6IDApO1xuICBcdFx0XHRcdFx0dmFyIHRvID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIFx0XHRcdFx0XHR2YXIgcCA9IHBvcztcblxuICBcdFx0XHRcdFx0Ly8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBtYXRjaFxuICBcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XG4gIFx0XHRcdFx0XHR3aGlsZSAoZnJvbSA+PSBwKSB7XG4gIFx0XHRcdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dDtcbiAgXHRcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XG4gIFx0XHRcdFx0XHR9XG4gIFx0XHRcdFx0XHQvLyBhZGp1c3QgcG9zIChhbmQgcClcbiAgXHRcdFx0XHRcdHAgLT0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoO1xuICBcdFx0XHRcdFx0cG9zID0gcDtcblxuICBcdFx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFRva2VuLCB0aGVuIHRoZSBtYXRjaCBzdGFydHMgaW5zaWRlIGFub3RoZXIgVG9rZW4sIHdoaWNoIGlzIGludmFsaWRcbiAgXHRcdFx0XHRcdGlmIChjdXJyZW50Tm9kZS52YWx1ZSBpbnN0YW5jZW9mIFRva2VuKSB7XG4gIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuICBcdFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0XHQvLyBmaW5kIHRoZSBsYXN0IG5vZGUgd2hpY2ggaXMgYWZmZWN0ZWQgYnkgdGhpcyBtYXRjaFxuICBcdFx0XHRcdFx0Zm9yIChcbiAgXHRcdFx0XHRcdFx0dmFyIGsgPSBjdXJyZW50Tm9kZTtcbiAgXHRcdFx0XHRcdFx0ayAhPT0gdG9rZW5MaXN0LnRhaWwgJiYgKHAgPCB0byB8fCAodHlwZW9mIGsudmFsdWUgPT09ICdzdHJpbmcnICYmICFrLnByZXYudmFsdWUuZ3JlZWR5KSk7XG4gIFx0XHRcdFx0XHRcdGsgPSBrLm5leHRcbiAgXHRcdFx0XHRcdCkge1xuICBcdFx0XHRcdFx0XHRyZW1vdmVDb3VudCsrO1xuICBcdFx0XHRcdFx0XHRwICs9IGsudmFsdWUubGVuZ3RoO1xuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdFx0cmVtb3ZlQ291bnQtLTtcblxuICBcdFx0XHRcdFx0Ly8gcmVwbGFjZSB3aXRoIHRoZSBuZXcgbWF0Y2hcbiAgXHRcdFx0XHRcdHN0ciA9IHRleHQuc2xpY2UocG9zLCBwKTtcbiAgXHRcdFx0XHRcdG1hdGNoLmluZGV4IC09IHBvcztcbiAgXHRcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdFx0cGF0dGVybi5sYXN0SW5kZXggPSAwO1xuXG4gIFx0XHRcdFx0XHR2YXIgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3RyKTtcbiAgXHRcdFx0XHR9XG5cbiAgXHRcdFx0XHRpZiAoIW1hdGNoKSB7XG4gIFx0XHRcdFx0XHRpZiAob25lc2hvdCkge1xuICBcdFx0XHRcdFx0XHRicmVhaztcbiAgXHRcdFx0XHRcdH1cblxuICBcdFx0XHRcdFx0Y29udGludWU7XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0aWYgKGxvb2tiZWhpbmQpIHtcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmRMZW5ndGggPSBtYXRjaFsxXSA/IG1hdGNoWzFdLmxlbmd0aCA6IDA7XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0dmFyIGZyb20gPSBtYXRjaC5pbmRleCArIGxvb2tiZWhpbmRMZW5ndGgsXG4gIFx0XHRcdFx0XHRtYXRjaCA9IG1hdGNoWzBdLnNsaWNlKGxvb2tiZWhpbmRMZW5ndGgpLFxuICBcdFx0XHRcdFx0dG8gPSBmcm9tICsgbWF0Y2gubGVuZ3RoLFxuICBcdFx0XHRcdFx0YmVmb3JlID0gc3RyLnNsaWNlKDAsIGZyb20pLFxuICBcdFx0XHRcdFx0YWZ0ZXIgPSBzdHIuc2xpY2UodG8pO1xuXG4gIFx0XHRcdFx0dmFyIHJlbW92ZUZyb20gPSBjdXJyZW50Tm9kZS5wcmV2O1xuXG4gIFx0XHRcdFx0aWYgKGJlZm9yZSkge1xuICBcdFx0XHRcdFx0cmVtb3ZlRnJvbSA9IGFkZEFmdGVyKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgYmVmb3JlKTtcbiAgXHRcdFx0XHRcdHBvcyArPSBiZWZvcmUubGVuZ3RoO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdHJlbW92ZVJhbmdlKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgcmVtb3ZlQ291bnQpO1xuXG4gIFx0XHRcdFx0dmFyIHdyYXBwZWQgPSBuZXcgVG9rZW4odG9rZW4sIGluc2lkZSA/IF8udG9rZW5pemUobWF0Y2gsIGluc2lkZSkgOiBtYXRjaCwgYWxpYXMsIG1hdGNoLCBncmVlZHkpO1xuICBcdFx0XHRcdGN1cnJlbnROb2RlID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCB3cmFwcGVkKTtcblxuICBcdFx0XHRcdGlmIChhZnRlcikge1xuICBcdFx0XHRcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCBjdXJyZW50Tm9kZSwgYWZ0ZXIpO1xuICBcdFx0XHRcdH1cblxuXG4gIFx0XHRcdFx0aWYgKHJlbW92ZUNvdW50ID4gMSlcbiAgXHRcdFx0XHRcdG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIGN1cnJlbnROb2RlLnByZXYsIHBvcywgdHJ1ZSwgdG9rZW4gKyAnLCcgKyBqKTtcblxuICBcdFx0XHRcdGlmIChvbmVzaG90KVxuICBcdFx0XHRcdFx0YnJlYWs7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYgTGlua2VkTGlzdE5vZGVcbiAgICogQHByb3BlcnR5IHtUfSB2YWx1ZVxuICAgKiBAcHJvcGVydHkge0xpbmtlZExpc3ROb2RlPFQ+IHwgbnVsbH0gcHJldiBUaGUgcHJldmlvdXMgbm9kZS5cbiAgICogQHByb3BlcnR5IHtMaW5rZWRMaXN0Tm9kZTxUPiB8IG51bGx9IG5leHQgVGhlIG5leHQgbm9kZS5cbiAgICogQHRlbXBsYXRlIFRcbiAgICovXG5cbiAgLyoqXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqL1xuICBmdW5jdGlvbiBMaW5rZWRMaXN0KCkge1xuICBcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXG4gIFx0dmFyIGhlYWQgPSB7IHZhbHVlOiBudWxsLCBwcmV2OiBudWxsLCBuZXh0OiBudWxsIH07XG4gIFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cbiAgXHR2YXIgdGFpbCA9IHsgdmFsdWU6IG51bGwsIHByZXY6IGhlYWQsIG5leHQ6IG51bGwgfTtcbiAgXHRoZWFkLm5leHQgPSB0YWlsO1xuXG4gIFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cbiAgXHR0aGlzLmhlYWQgPSBoZWFkO1xuICBcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXG4gIFx0dGhpcy50YWlsID0gdGFpbDtcbiAgXHR0aGlzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBub2RlIHdpdGggdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge0xpbmtlZExpc3Q8VD59IGxpc3RcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0Tm9kZTxUPn0gbm9kZVxuICAgKiBAcGFyYW0ge1R9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtMaW5rZWRMaXN0Tm9kZTxUPn0gVGhlIGFkZGVkIG5vZGUuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqL1xuICBmdW5jdGlvbiBhZGRBZnRlcihsaXN0LCBub2RlLCB2YWx1ZSkge1xuICBcdC8vIGFzc3VtZXMgdGhhdCBub2RlICE9IGxpc3QudGFpbCAmJiB2YWx1ZXMubGVuZ3RoID49IDBcbiAgXHR2YXIgbmV4dCA9IG5vZGUubmV4dDtcblxuICBcdHZhciBuZXdOb2RlID0geyB2YWx1ZTogdmFsdWUsIHByZXY6IG5vZGUsIG5leHQ6IG5leHQgfTtcbiAgXHRub2RlLm5leHQgPSBuZXdOb2RlO1xuICBcdG5leHQucHJldiA9IG5ld05vZGU7XG4gIFx0bGlzdC5sZW5ndGgrKztcblxuICBcdHJldHVybiBuZXdOb2RlO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGBjb3VudGAgbm9kZXMgYWZ0ZXIgdGhlIGdpdmVuIG5vZGUuIFRoZSBnaXZlbiBub2RlIHdpbGwgbm90IGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxuICAgKiBAcGFyYW0ge0xpbmtlZExpc3ROb2RlPFQ+fSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICAgKiBAdGVtcGxhdGUgVFxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlUmFuZ2UobGlzdCwgbm9kZSwgY291bnQpIHtcbiAgXHR2YXIgbmV4dCA9IG5vZGUubmV4dDtcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50ICYmIG5leHQgIT09IGxpc3QudGFpbDsgaSsrKSB7XG4gIFx0XHRuZXh0ID0gbmV4dC5uZXh0O1xuICBcdH1cbiAgXHRub2RlLm5leHQgPSBuZXh0O1xuICBcdG5leHQucHJldiA9IG5vZGU7XG4gIFx0bGlzdC5sZW5ndGggLT0gaTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtMaW5rZWRMaXN0PFQ+fSBsaXN0XG4gICAqIEByZXR1cm5zIHtUW119XG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqL1xuICBmdW5jdGlvbiB0b0FycmF5KGxpc3QpIHtcbiAgXHR2YXIgYXJyYXkgPSBbXTtcbiAgXHR2YXIgbm9kZSA9IGxpc3QuaGVhZC5uZXh0O1xuICBcdHdoaWxlIChub2RlICE9PSBsaXN0LnRhaWwpIHtcbiAgXHRcdGFycmF5LnB1c2gobm9kZS52YWx1ZSk7XG4gIFx0XHRub2RlID0gbm9kZS5uZXh0O1xuICBcdH1cbiAgXHRyZXR1cm4gYXJyYXk7XG4gIH1cblxuXG4gIGlmICghX3NlbGYuZG9jdW1lbnQpIHtcbiAgXHRpZiAoIV9zZWxmLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgXHRcdC8vIGluIE5vZGUuanNcbiAgXHRcdHJldHVybiBfO1xuICBcdH1cblxuICBcdGlmICghXy5kaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXIpIHtcbiAgXHRcdC8vIEluIHdvcmtlclxuICBcdFx0X3NlbGYuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldnQpIHtcbiAgXHRcdFx0dmFyIG1lc3NhZ2UgPSBKU09OLnBhcnNlKGV2dC5kYXRhKSxcbiAgXHRcdFx0XHRsYW5nID0gbWVzc2FnZS5sYW5ndWFnZSxcbiAgXHRcdFx0XHRjb2RlID0gbWVzc2FnZS5jb2RlLFxuICBcdFx0XHRcdGltbWVkaWF0ZUNsb3NlID0gbWVzc2FnZS5pbW1lZGlhdGVDbG9zZTtcblxuICBcdFx0XHRfc2VsZi5wb3N0TWVzc2FnZShfLmhpZ2hsaWdodChjb2RlLCBfLmxhbmd1YWdlc1tsYW5nXSwgbGFuZykpO1xuICBcdFx0XHRpZiAoaW1tZWRpYXRlQ2xvc2UpIHtcbiAgXHRcdFx0XHRfc2VsZi5jbG9zZSgpO1xuICBcdFx0XHR9XG4gIFx0XHR9LCBmYWxzZSk7XG4gIFx0fVxuXG4gIFx0cmV0dXJuIF87XG4gIH1cblxuICAvL0dldCBjdXJyZW50IHNjcmlwdCBhbmQgaGlnaGxpZ2h0XG4gIHZhciBzY3JpcHQgPSBfLnV0aWwuY3VycmVudFNjcmlwdCgpO1xuXG4gIGlmIChzY3JpcHQpIHtcbiAgXHRfLmZpbGVuYW1lID0gc2NyaXB0LnNyYztcblxuICBcdGlmIChzY3JpcHQuaGFzQXR0cmlidXRlKCdkYXRhLW1hbnVhbCcpKSB7XG4gIFx0XHRfLm1hbnVhbCA9IHRydWU7XG4gIFx0fVxuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKCkge1xuICBcdGlmICghXy5tYW51YWwpIHtcbiAgXHRcdF8uaGlnaGxpZ2h0QWxsKCk7XG4gIFx0fVxuICB9XG5cbiAgaWYgKCFfLm1hbnVhbCkge1xuICBcdC8vIElmIHRoZSBkb2N1bWVudCBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhlbiB3ZSdsbCB1c2UgRE9NQ29udGVudExvYWRlZC5cbiAgXHQvLyBJZiB0aGUgZG9jdW1lbnQgc3RhdGUgaXMgXCJpbnRlcmFjdGl2ZVwiIGFuZCB0aGUgcHJpc20uanMgc2NyaXB0IGlzIGRlZmVycmVkLCB0aGVuIHdlJ2xsIGFsc28gdXNlIHRoZVxuICBcdC8vIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBzb21lIHBsdWdpbnMgb3IgbGFuZ3VhZ2VzIHdoaWNoIGhhdmUgYWxzbyBiZWVuIGRlZmVycmVkIGFuZCB0aGV5XG4gIFx0Ly8gbWlnaHQgdGFrZSBsb25nZXIgb25lIGFuaW1hdGlvbiBmcmFtZSB0byBleGVjdXRlIHdoaWNoIGNhbiBjcmVhdGUgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbmx5IHNvbWUgcGx1Z2lucyBoYXZlXG4gIFx0Ly8gYmVlbiBsb2FkZWQgd2hlbiBQcmlzbS5oaWdobGlnaHRBbGwoKSBpcyBleGVjdXRlZCwgZGVwZW5kaW5nIG9uIGhvdyBmYXN0IHJlc291cmNlcyBhcmUgbG9hZGVkLlxuICBcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUHJpc21KUy9wcmlzbS9pc3N1ZXMvMjEwMlxuICBcdHZhciByZWFkeVN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcbiAgXHRpZiAocmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IHJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScgJiYgc2NyaXB0ICYmIHNjcmlwdC5kZWZlcikge1xuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjayk7XG4gIFx0fSBlbHNlIHtcbiAgXHRcdGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gIFx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjaywgMTYpO1xuICBcdFx0fVxuICBcdH1cbiAgfVxuXG4gIHJldHVybiBfO1xuXG4gIH0pKF9zZWxmKTtcblxuICBpZiAoIG1vZHVsZS5leHBvcnRzKSB7XG4gIFx0bW9kdWxlLmV4cG9ydHMgPSBQcmlzbTtcbiAgfVxuXG4gIC8vIGhhY2sgZm9yIGNvbXBvbmVudHMgdG8gd29yayBjb3JyZWN0bHkgaW4gbm9kZS5qc1xuICBpZiAodHlwZW9mIGNvbW1vbmpzR2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICBcdGNvbW1vbmpzR2xvYmFsLlByaXNtID0gUHJpc207XG4gIH1cblxuXG4gIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICBCZWdpbiBwcmlzbS1tYXJrdXAuanNcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4gIFByaXNtLmxhbmd1YWdlcy5tYXJrdXAgPSB7XG4gIFx0J2NvbW1lbnQnOiAvPCEtLVtcXHNcXFNdKj8tLT4vLFxuICBcdCdwcm9sb2cnOiAvPFxcP1tcXHNcXFNdKz9cXD8+LyxcbiAgXHQnZG9jdHlwZSc6IHtcbiAgXHRcdHBhdHRlcm46IC88IURPQ1RZUEUoPzpbXj5cIidbXFxdXXxcIlteXCJdKlwifCdbXiddKicpKyg/OlxcWyg/Oig/ITwhLS0pW15cIidcXF1dfFwiW15cIl0qXCJ8J1teJ10qJ3w8IS0tW1xcc1xcU10qPy0tPikqXFxdXFxzKik/Pi9pLFxuICBcdFx0Z3JlZWR5OiB0cnVlXG4gIFx0fSxcbiAgXHQnY2RhdGEnOiAvPCFcXFtDREFUQVxcW1tcXHNcXFNdKj9dXT4vaSxcbiAgXHQndGFnJzoge1xuICBcdFx0cGF0dGVybjogLzxcXC8/KD8hXFxkKVteXFxzPlxcLz0kPCVdKyg/Olxccyg/OlxccypbXlxccz5cXC89XSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKD89W1xccz5dKSl8KD89W1xccy8+XSkpKSspP1xccypcXC8/Pi9pLFxuICBcdFx0Z3JlZWR5OiB0cnVlLFxuICBcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdCd0YWcnOiB7XG4gIFx0XHRcdFx0cGF0dGVybjogL148XFwvP1teXFxzPlxcL10rL2ksXG4gIFx0XHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjxcXC8/LyxcbiAgXHRcdFx0XHRcdCduYW1lc3BhY2UnOiAvXlteXFxzPlxcLzpdKzovXG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9LFxuICBcdFx0XHQnYXR0ci12YWx1ZSc6IHtcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKS9pLFxuICBcdFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogW1xuICBcdFx0XHRcdFx0XHQvXj0vLFxuICBcdFx0XHRcdFx0XHR7XG4gIFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbXCInXXxbXCInXSQvLFxuICBcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHRcdFx0XHRcdFx0fVxuICBcdFx0XHRcdFx0XVxuICBcdFx0XHRcdH1cbiAgXHRcdFx0fSxcbiAgXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLz8+LyxcbiAgXHRcdFx0J2F0dHItbmFtZSc6IHtcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvW15cXHM+XFwvXSsvLFxuICBcdFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9eW15cXHM+XFwvOl0rOi9cbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cblxuICBcdFx0fVxuICBcdH0sXG4gIFx0J2VudGl0eSc6IC8mIz9bXFxkYS16XXsxLDh9Oy9pXG4gIH07XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10uaW5zaWRlWydlbnRpdHknXSA9XG4gIFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsnZW50aXR5J107XG5cbiAgLy8gUGx1Z2luIHRvIG1ha2UgZW50aXR5IHRpdGxlIHNob3cgdGhlIHJlYWwgZW50aXR5LCBpZGVhIGJ5IFJvbWFuIEtvbWFyb3ZcbiAgUHJpc20uaG9va3MuYWRkKCd3cmFwJywgZnVuY3Rpb24oZW52KSB7XG5cbiAgXHRpZiAoZW52LnR5cGUgPT09ICdlbnRpdHknKSB7XG4gIFx0XHRlbnYuYXR0cmlidXRlc1sndGl0bGUnXSA9IGVudi5jb250ZW50LnJlcGxhY2UoLyZhbXA7LywgJyYnKTtcbiAgXHR9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZywgJ2FkZElubGluZWQnLCB7XG4gIFx0LyoqXG4gIFx0ICogQWRkcyBhbiBpbmxpbmVkIGxhbmd1YWdlIHRvIG1hcmt1cC5cbiAgXHQgKlxuICBcdCAqIEFuIGV4YW1wbGUgb2YgYW4gaW5saW5lZCBsYW5ndWFnZSBpcyBDU1Mgd2l0aCBgPHN0eWxlPmAgdGFncy5cbiAgXHQgKlxuICBcdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFRoZSBuYW1lIG9mIHRoZSB0YWcgdGhhdCBjb250YWlucyB0aGUgaW5saW5lZCBsYW5ndWFnZS4gVGhpcyBuYW1lIHdpbGwgYmUgdHJlYXRlZCBhc1xuICBcdCAqIGNhc2UgaW5zZW5zaXRpdmUuXG4gIFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1YWdlIGtleS5cbiAgXHQgKiBAZXhhbXBsZVxuICBcdCAqIGFkZElubGluZWQoJ3N0eWxlJywgJ2NzcycpO1xuICBcdCAqL1xuICBcdHZhbHVlOiBmdW5jdGlvbiBhZGRJbmxpbmVkKHRhZ05hbWUsIGxhbmcpIHtcbiAgXHRcdHZhciBpbmNsdWRlZENkYXRhSW5zaWRlID0ge307XG4gIFx0XHRpbmNsdWRlZENkYXRhSW5zaWRlWydsYW5ndWFnZS0nICsgbGFuZ10gPSB7XG4gIFx0XHRcdHBhdHRlcm46IC8oXjwhXFxbQ0RBVEFcXFspW1xcc1xcU10rPyg/PVxcXVxcXT4kKS9pLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuICBcdFx0fTtcbiAgXHRcdGluY2x1ZGVkQ2RhdGFJbnNpZGVbJ2NkYXRhJ10gPSAvXjwhXFxbQ0RBVEFcXFt8XFxdXFxdPiQvaTtcblxuICBcdFx0dmFyIGluc2lkZSA9IHtcbiAgXHRcdFx0J2luY2x1ZGVkLWNkYXRhJzoge1xuICBcdFx0XHRcdHBhdHRlcm46IC88IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4vaSxcbiAgXHRcdFx0XHRpbnNpZGU6IGluY2x1ZGVkQ2RhdGFJbnNpZGVcbiAgXHRcdFx0fVxuICBcdFx0fTtcbiAgXHRcdGluc2lkZVsnbGFuZ3VhZ2UtJyArIGxhbmddID0ge1xuICBcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cbiAgXHRcdH07XG5cbiAgXHRcdHZhciBkZWYgPSB7fTtcbiAgXHRcdGRlZlt0YWdOYW1lXSA9IHtcbiAgXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oPF9fW1xcc1xcU10qPz4pKD86PCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+XFxzKnxbXFxzXFxTXSkqPyg/PTxcXC9fXz4pLy5zb3VyY2UucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFnTmFtZTsgfSksICdpJyksXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdFx0aW5zaWRlOiBpbnNpZGVcbiAgXHRcdH07XG5cbiAgXHRcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmt1cCcsICdjZGF0YScsIGRlZik7XG4gIFx0fVxuICB9KTtcblxuICBQcmlzbS5sYW5ndWFnZXMueG1sID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xuICBQcmlzbS5sYW5ndWFnZXMuaHRtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG4gIFByaXNtLmxhbmd1YWdlcy5tYXRobWwgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuICBQcmlzbS5sYW5ndWFnZXMuc3ZnID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblxuXG4gIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICBCZWdpbiBwcmlzbS1jc3MuanNcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4gIChmdW5jdGlvbiAoUHJpc20pIHtcblxuICBcdHZhciBzdHJpbmcgPSAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XG5cbiAgXHRQcmlzbS5sYW5ndWFnZXMuY3NzID0ge1xuICBcdFx0J2NvbW1lbnQnOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG4gIFx0XHQnYXRydWxlJzoge1xuICBcdFx0XHRwYXR0ZXJuOiAvQFtcXHctXStbXFxzXFxTXSo/KD86O3woPz1cXHMqXFx7KSkvLFxuICBcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHQncnVsZSc6IC9eQFtcXHctXSsvLFxuICBcdFx0XHRcdCdzZWxlY3Rvci1mdW5jdGlvbi1hcmd1bWVudCc6IHtcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxic2VsZWN0b3JcXHMqXFwoKD8hXFxzKlxcKSlcXHMqKSg/OlteKCldfFxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKSs/KD89XFxzKlxcKSkvLFxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdFx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG4gIFx0XHRcdFx0fVxuICBcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG4gIFx0XHRcdH1cbiAgXHRcdH0sXG4gIFx0XHQndXJsJzoge1xuICBcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ3VybFxcXFwoKD86JyArIHN0cmluZy5zb3VyY2UgKyAnfFteXFxuXFxyKCldKilcXFxcKScsICdpJyksXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0J2Z1bmN0aW9uJzogL151cmwvaSxcbiAgXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcKHxcXCkkL1xuICBcdFx0XHR9XG4gIFx0XHR9LFxuICBcdFx0J3NlbGVjdG9yJzogUmVnRXhwKCdbXnt9XFxcXHNdKD86W157fTtcIlxcJ118JyArIHN0cmluZy5zb3VyY2UgKyAnKSo/KD89XFxcXHMqXFxcXHspJyksXG4gIFx0XHQnc3RyaW5nJzoge1xuICBcdFx0XHRwYXR0ZXJuOiBzdHJpbmcsXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZVxuICBcdFx0fSxcbiAgXHRcdCdwcm9wZXJ0eSc6IC9bLV9hLXpcXHhBMC1cXHVGRkZGXVstXFx3XFx4QTAtXFx1RkZGRl0qKD89XFxzKjopL2ksXG4gIFx0XHQnaW1wb3J0YW50JzogLyFpbXBvcnRhbnRcXGIvaSxcbiAgXHRcdCdmdW5jdGlvbic6IC9bLWEtejAtOV0rKD89XFwoKS9pLFxuICBcdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9OzosXS9cbiAgXHR9O1xuXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLmNzc1snYXRydWxlJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMuY3NzO1xuXG4gIFx0dmFyIG1hcmt1cCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG4gIFx0aWYgKG1hcmt1cCkge1xuICBcdFx0bWFya3VwLnRhZy5hZGRJbmxpbmVkKCdzdHlsZScsICdjc3MnKTtcblxuICBcdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ2F0dHItdmFsdWUnLCB7XG4gIFx0XHRcdCdzdHlsZS1hdHRyJzoge1xuICBcdFx0XHRcdHBhdHRlcm46IC9cXHMqc3R5bGU9KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDEvaSxcbiAgXHRcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHRcdCdhdHRyLW5hbWUnOiB7XG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFxzKnN0eWxlL2ksXG4gIFx0XHRcdFx0XHRcdGluc2lkZTogbWFya3VwLnRhZy5pbnNpZGVcbiAgXHRcdFx0XHRcdH0sXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxccyo9XFxzKlsnXCJdfFsnXCJdXFxzKiQvLFxuICBcdFx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC8uKy9pLFxuICBcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc3NcbiAgXHRcdFx0XHRcdH1cbiAgXHRcdFx0XHR9LFxuICBcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtY3NzJ1xuICBcdFx0XHR9XG4gIFx0XHR9LCBtYXJrdXAudGFnKTtcbiAgXHR9XG5cbiAgfShQcmlzbSkpO1xuXG5cbiAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgIEJlZ2luIHByaXNtLWNsaWtlLmpzXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuICBQcmlzbS5sYW5ndWFnZXMuY2xpa2UgPSB7XG4gIFx0J2NvbW1lbnQnOiBbXG4gIFx0XHR7XG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHR9LFxuICBcdFx0e1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRncmVlZHk6IHRydWVcbiAgXHRcdH1cbiAgXHRdLFxuICBcdCdzdHJpbmcnOiB7XG4gIFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuICBcdFx0Z3JlZWR5OiB0cnVlXG4gIFx0fSxcbiAgXHQnY2xhc3MtbmFtZSc6IHtcbiAgXHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8aW50ZXJmYWNlfGV4dGVuZHN8aW1wbGVtZW50c3x0cmFpdHxpbnN0YW5jZW9mfG5ldylcXHMrfFxcYmNhdGNoXFxzK1xcKClbXFx3LlxcXFxdKy9pLFxuICBcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdGluc2lkZToge1xuICBcdFx0XHQncHVuY3R1YXRpb24nOiAvWy5cXFxcXS9cbiAgXHRcdH1cbiAgXHR9LFxuICBcdCdrZXl3b3JkJzogL1xcYig/OmlmfGVsc2V8d2hpbGV8ZG98Zm9yfHJldHVybnxpbnxpbnN0YW5jZW9mfGZ1bmN0aW9ufG5ld3x0cnl8dGhyb3d8Y2F0Y2h8ZmluYWxseXxudWxsfGJyZWFrfGNvbnRpbnVlKVxcYi8sXG4gIFx0J2Jvb2xlYW4nOiAvXFxiKD86dHJ1ZXxmYWxzZSlcXGIvLFxuICBcdCdmdW5jdGlvbic6IC9cXHcrKD89XFwoKS8sXG4gIFx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrXFwuP1xcZCp8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcbiAgXHQnb3BlcmF0b3InOiAvWzw+XT0/fFshPV09Pz0/fC0tP3xcXCtcXCs/fCYmP3xcXHxcXHw/fFs/Ki9+XiVdLyxcbiAgXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG4gIH07XG5cblxuICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgQmVnaW4gcHJpc20tamF2YXNjcmlwdC5qc1xuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbiAgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcbiAgXHQnY2xhc3MtbmFtZSc6IFtcbiAgXHRcdFByaXNtLmxhbmd1YWdlcy5jbGlrZVsnY2xhc3MtbmFtZSddLFxuICBcdFx0e1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58W14kXFx3XFx4QTAtXFx1RkZGRl0pW18kQS1aXFx4QTAtXFx1RkZGRl1bJFxcd1xceEEwLVxcdUZGRkZdKig/PVxcLig/OnByb3RvdHlwZXxjb25zdHJ1Y3RvcikpLyxcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdFx0fVxuICBcdF0sXG4gIFx0J2tleXdvcmQnOiBbXG4gIFx0XHR7XG4gIFx0XHRcdHBhdHRlcm46IC8oKD86Xnx9KVxccyopKD86Y2F0Y2h8ZmluYWxseSlcXGIvLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHR9LFxuICBcdFx0e1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58W14uXXxcXC5cXC5cXC5cXHMqKVxcYig/OmFzfGFzeW5jKD89XFxzKig/OmZ1bmN0aW9uXFxifFxcKHxbJFxcd1xceEEwLVxcdUZGRkZdfCQpKXxhd2FpdHxicmVha3xjYXNlfGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlYnVnZ2VyfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZW51bXxleHBvcnR8ZXh0ZW5kc3xmb3J8ZnJvbXxmdW5jdGlvbnxnZXR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnRlcmZhY2V8bGV0fG5ld3xudWxsfG9mfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdFx0fSxcbiAgXHRdLFxuICBcdCdudW1iZXInOiAvXFxiKD86KD86MFt4WF0oPzpbXFxkQS1GYS1mXSg/Ol9bXFxkQS1GYS1mXSk/KSt8MFtiQl0oPzpbMDFdKD86X1swMV0pPykrfDBbb09dKD86WzAtN10oPzpfWzAtN10pPykrKW4/fCg/OlxcZCg/Ol9cXGQpPykrbnxOYU58SW5maW5pdHkpXFxifCg/OlxcYig/OlxcZCg/Ol9cXGQpPykrXFwuPyg/OlxcZCg/Ol9cXGQpPykqfFxcQlxcLig/OlxcZCg/Ol9cXGQpPykrKSg/OltFZV1bKy1dPyg/OlxcZCg/Ol9cXGQpPykrKT8vLFxuICBcdC8vIEFsbG93IGZvciBhbGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMDA4NDQ0KVxuICBcdCdmdW5jdGlvbic6IC8jP1tfJGEtekEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSooPz1cXHMqKD86XFwuXFxzKig/OmFwcGx5fGJpbmR8Y2FsbClcXHMqKT9cXCgpLyxcbiAgXHQnb3BlcmF0b3InOiAvLS18XFwrXFwrfFxcKlxcKj0/fD0+fCYmfFxcfFxcfHxbIT1dPT18PDw9P3w+Pj4/PT98Wy0rKi8lJnxeIT08Pl09P3xcXC57M318XFw/Wy4/XT98W346XS9cbiAgfSk7XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ2NsYXNzLW5hbWUnXVswXS5wYXR0ZXJuID0gLyhcXGIoPzpjbGFzc3xpbnRlcmZhY2V8ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8bmV3KVxccyspW1xcdy5cXFxcXSsvO1xuXG4gIFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAna2V5d29yZCcsIHtcbiAgXHQncmVnZXgnOiB7XG4gIFx0XHRwYXR0ZXJuOiAvKCg/Ol58W14kXFx3XFx4QTAtXFx1RkZGRi5cIidcXF0pXFxzXSlcXHMqKVxcLyg/OlxcWyg/OlteXFxdXFxcXFxcclxcbl18XFxcXC4pKl18XFxcXC58W14vXFxcXFxcW1xcclxcbl0pK1xcL1tnaW15dXNdezAsNn0oPz0oPzpcXHN8XFwvXFwqW1xcc1xcU10qP1xcKlxcLykqKD86JHxbXFxyXFxuLC47On0pXFxdXXxcXC9cXC8pKS8sXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0Z3JlZWR5OiB0cnVlXG4gIFx0fSxcbiAgXHQvLyBUaGlzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGtleXdvcmQgYmVjYXVzZSB3ZSB1c2UgXCJmdW5jdGlvblwiIGluc2lkZSB0aGUgbG9vay1mb3J3YXJkXG4gIFx0J2Z1bmN0aW9uLXZhcmlhYmxlJzoge1xuICBcdFx0cGF0dGVybjogLyM/W18kYS16QS1aXFx4QTAtXFx1RkZGRl1bJFxcd1xceEEwLVxcdUZGRkZdKig/PVxccypbPTpdXFxzKig/OmFzeW5jXFxzKik/KD86XFxiZnVuY3Rpb25cXGJ8KD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8W18kYS16QS1aXFx4QTAtXFx1RkZGRl1bJFxcd1xceEEwLVxcdUZGRkZdKilcXHMqPT4pKS8sXG4gIFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuICBcdH0sXG4gIFx0J3BhcmFtZXRlcic6IFtcbiAgXHRcdHtcbiAgXHRcdFx0cGF0dGVybjogLyhmdW5jdGlvbig/OlxccytbXyRBLVphLXpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKT9cXHMqXFwoXFxzKikoPyFcXHMpKD86W14oKV18XFwoW14oKV0qXFwpKSs/KD89XFxzKlxcKSkvLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG4gIFx0XHR9LFxuICBcdFx0e1xuICBcdFx0XHRwYXR0ZXJuOiAvW18kYS16XFx4QTAtXFx1RkZGRl1bJFxcd1xceEEwLVxcdUZGRkZdKig/PVxccyo9PikvaSxcbiAgXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuICBcdFx0fSxcbiAgXHRcdHtcbiAgXHRcdFx0cGF0dGVybjogLyhcXChcXHMqKSg/IVxccykoPzpbXigpXXxcXChbXigpXSpcXCkpKz8oPz1cXHMqXFwpXFxzKj0+KS8sXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcbiAgXHRcdH0sXG4gIFx0XHR7XG4gIFx0XHRcdHBhdHRlcm46IC8oKD86XFxifFxcc3xeKSg/ISg/OmFzfGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVidWdnZXJ8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHVuZGVmaW5lZHx2YXJ8dm9pZHx3aGlsZXx3aXRofHlpZWxkKSg/IVskXFx3XFx4QTAtXFx1RkZGRl0pKSg/OltfJEEtWmEtelxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSpcXHMqKVxcKFxccyopKD8hXFxzKSg/OlteKCldfFxcKFteKCldKlxcKSkrPyg/PVxccypcXClcXHMqXFx7KS8sXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcbiAgXHRcdH1cbiAgXHRdLFxuICBcdCdjb25zdGFudCc6IC9cXGJbQS1aXSg/OltBLVpfXXxcXGR4PykqXFxiL1xuICB9KTtcblxuICBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ3N0cmluZycsIHtcbiAgXHQndGVtcGxhdGUtc3RyaW5nJzoge1xuICBcdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118XFwkeyg/Oltee31dfHsoPzpbXnt9XXx7W159XSp9KSp9KSt9fCg/IVxcJHspW15cXFxcYF0pKmAvLFxuICBcdFx0Z3JlZWR5OiB0cnVlLFxuICBcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdCd0ZW1wbGF0ZS1wdW5jdHVhdGlvbic6IHtcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXmB8YCQvLFxuICBcdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuICBcdFx0XHR9LFxuICBcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkeyg/Oltee31dfHsoPzpbXnt9XXx7W159XSp9KSp9KSt9LyxcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwke3x9JC8sXG4gIFx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG4gIFx0XHRcdFx0XHR9LFxuICBcdFx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH0sXG4gIFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgaWYgKFByaXNtLmxhbmd1YWdlcy5tYXJrdXApIHtcbiAgXHRQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5hZGRJbmxpbmVkKCdzY3JpcHQnLCAnamF2YXNjcmlwdCcpO1xuICB9XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLmpzID0gUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQ7XG5cblxuICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgQmVnaW4gcHJpc20tZmlsZS1oaWdobGlnaHQuanNcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4gIChmdW5jdGlvbiAoKSB7XG4gIFx0aWYgKHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyB8fCAhc2VsZi5QcmlzbSB8fCAhc2VsZi5kb2N1bWVudCB8fCAhZG9jdW1lbnQucXVlcnlTZWxlY3Rvcikge1xuICBcdFx0cmV0dXJuO1xuICBcdH1cblxuICBcdC8qKlxuICBcdCAqIEBwYXJhbSB7RWxlbWVudH0gW2NvbnRhaW5lcj1kb2N1bWVudF1cbiAgXHQgKi9cbiAgXHRzZWxmLlByaXNtLmZpbGVIaWdobGlnaHQgPSBmdW5jdGlvbihjb250YWluZXIpIHtcbiAgXHRcdGNvbnRhaW5lciA9IGNvbnRhaW5lciB8fCBkb2N1bWVudDtcblxuICBcdFx0dmFyIEV4dGVuc2lvbnMgPSB7XG4gIFx0XHRcdCdqcyc6ICdqYXZhc2NyaXB0JyxcbiAgXHRcdFx0J3B5JzogJ3B5dGhvbicsXG4gIFx0XHRcdCdyYic6ICdydWJ5JyxcbiAgXHRcdFx0J3BzMSc6ICdwb3dlcnNoZWxsJyxcbiAgXHRcdFx0J3BzbTEnOiAncG93ZXJzaGVsbCcsXG4gIFx0XHRcdCdzaCc6ICdiYXNoJyxcbiAgXHRcdFx0J2JhdCc6ICdiYXRjaCcsXG4gIFx0XHRcdCdoJzogJ2MnLFxuICBcdFx0XHQndGV4JzogJ2xhdGV4J1xuICBcdFx0fTtcblxuICBcdFx0QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZVtkYXRhLXNyY10nKSkuZm9yRWFjaChmdW5jdGlvbiAocHJlKSB7XG4gIFx0XHRcdC8vIGlnbm9yZSBpZiBhbHJlYWR5IGxvYWRlZFxuICBcdFx0XHRpZiAocHJlLmhhc0F0dHJpYnV0ZSgnZGF0YS1zcmMtbG9hZGVkJykpIHtcbiAgXHRcdFx0XHRyZXR1cm47XG4gIFx0XHRcdH1cblxuICBcdFx0XHQvLyBsb2FkIGN1cnJlbnRcbiAgXHRcdFx0dmFyIHNyYyA9IHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG5cbiAgXHRcdFx0dmFyIGxhbmd1YWdlLCBwYXJlbnQgPSBwcmU7XG4gIFx0XHRcdHZhciBsYW5nID0gL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2k7XG4gIFx0XHRcdHdoaWxlIChwYXJlbnQgJiYgIWxhbmcudGVzdChwYXJlbnQuY2xhc3NOYW1lKSkge1xuICBcdFx0XHRcdHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0aWYgKHBhcmVudCkge1xuICBcdFx0XHRcdGxhbmd1YWdlID0gKHByZS5jbGFzc05hbWUubWF0Y2gobGFuZykgfHwgWywgJyddKVsxXTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGlmICghbGFuZ3VhZ2UpIHtcbiAgXHRcdFx0XHR2YXIgZXh0ZW5zaW9uID0gKHNyYy5tYXRjaCgvXFwuKFxcdyspJC8pIHx8IFssICcnXSlbMV07XG4gIFx0XHRcdFx0bGFuZ3VhZ2UgPSBFeHRlbnNpb25zW2V4dGVuc2lvbl0gfHwgZXh0ZW5zaW9uO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0dmFyIGNvZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjb2RlJyk7XG4gIFx0XHRcdGNvZGUuY2xhc3NOYW1lID0gJ2xhbmd1YWdlLScgKyBsYW5ndWFnZTtcblxuICBcdFx0XHRwcmUudGV4dENvbnRlbnQgPSAnJztcblxuICBcdFx0XHRjb2RlLnRleHRDb250ZW50ID0gJ0xvYWRpbmfigKYnO1xuXG4gIFx0XHRcdHByZS5hcHBlbmRDaGlsZChjb2RlKTtcblxuICBcdFx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgXHRcdFx0eGhyLm9wZW4oJ0dFVCcsIHNyYywgdHJ1ZSk7XG5cbiAgXHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkge1xuXG4gIFx0XHRcdFx0XHRpZiAoeGhyLnN0YXR1cyA8IDQwMCAmJiB4aHIucmVzcG9uc2VUZXh0KSB7XG4gIFx0XHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSB4aHIucmVzcG9uc2VUZXh0O1xuXG4gIFx0XHRcdFx0XHRcdFByaXNtLmhpZ2hsaWdodEVsZW1lbnQoY29kZSk7XG4gIFx0XHRcdFx0XHRcdC8vIG1hcmsgYXMgbG9hZGVkXG4gIFx0XHRcdFx0XHRcdHByZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjLWxvYWRlZCcsICcnKTtcbiAgXHRcdFx0XHRcdH1cbiAgXHRcdFx0XHRcdGVsc2UgaWYgKHhoci5zdGF0dXMgPj0gNDAwKSB7XG4gIFx0XHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSAn4pyWIEVycm9yICcgKyB4aHIuc3RhdHVzICsgJyB3aGlsZSBmZXRjaGluZyBmaWxlOiAnICsgeGhyLnN0YXR1c1RleHQ7XG4gIFx0XHRcdFx0XHR9XG4gIFx0XHRcdFx0XHRlbHNlIHtcbiAgXHRcdFx0XHRcdFx0Y29kZS50ZXh0Q29udGVudCA9ICfinJYgRXJyb3I6IEZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgZW1wdHknO1xuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdH1cbiAgXHRcdFx0fTtcblxuICBcdFx0XHR4aHIuc2VuZChudWxsKTtcbiAgXHRcdH0pO1xuICBcdH07XG5cbiAgXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gZXhlY3V0ZSBpbnNpZGUgaGFuZGxlciwgZm9yIGRyb3BwaW5nIEV2ZW50IGFzIGFyZ3VtZW50XG4gIFx0XHRzZWxmLlByaXNtLmZpbGVIaWdobGlnaHQoKTtcbiAgXHR9KTtcblxuICB9KSgpO1xuICB9KTtcblxuICBQcmlzbS5sYW5ndWFnZXMucHl0aG9uID0ge1xuICBcdCdjb21tZW50Jzoge1xuICBcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHR9LFxuICBcdCdzdHJpbmctaW50ZXJwb2xhdGlvbic6IHtcbiAgXHRcdHBhdHRlcm46IC8oPzpmfHJmfGZyKSg/OihcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMikvaSxcbiAgXHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdGluc2lkZToge1xuICBcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcbiAgXHRcdFx0XHQvLyBcIntcIiA8ZXhwcmVzc2lvbj4gPG9wdGlvbmFsIFwiIXNcIiwgXCIhclwiLCBvciBcIiFhXCI+IDxvcHRpb25hbCBcIjpcIiBmb3JtYXQgc3BlY2lmaWVyPiBcIn1cIlxuICBcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXntdKSg/Ont7KSopeyg/IXspKD86W157fV18eyg/IXspKD86W157fV18eyg/IXspKD86W157fV0pK30pK30pK30vLFxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0XHQnZm9ybWF0LXNwZWMnOiB7XG4gIFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oOilbXjooKXt9XSsoPz19JCkvLFxuICBcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHRcdFx0XHR9LFxuICBcdFx0XHRcdFx0J2NvbnZlcnNpb24tb3B0aW9uJzoge1xuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvIVtzcmFdKD89Wzp9XSQpLyxcbiAgXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcbiAgXHRcdFx0XHRcdH0sXG4gIFx0XHRcdFx0XHRyZXN0OiBudWxsXG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9LFxuICBcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cbiAgXHRcdH1cbiAgXHR9LFxuICBcdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcbiAgXHRcdHBhdHRlcm46IC8oPzpbcnViXXxyYnxicik/KFwiXCJcInwnJycpW1xcc1xcU10rP1xcMS9pLFxuICBcdFx0Z3JlZWR5OiB0cnVlLFxuICBcdFx0YWxpYXM6ICdzdHJpbmcnXG4gIFx0fSxcbiAgXHQnc3RyaW5nJzoge1xuICBcdFx0cGF0dGVybjogLyg/OltydWJdfHJifGJyKT8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxL2ksXG4gIFx0XHRncmVlZHk6IHRydWVcbiAgXHR9LFxuICBcdCdmdW5jdGlvbic6IHtcbiAgXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpZGVmWyBcXHRdKylbYS16QS1aX11cXHcqKD89XFxzKlxcKCkvZyxcbiAgXHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHR9LFxuICBcdCdjbGFzcy1uYW1lJzoge1xuICBcdFx0cGF0dGVybjogLyhcXGJjbGFzc1xccyspXFx3Ky9pLFxuICBcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdH0sXG4gIFx0J2RlY29yYXRvcic6IHtcbiAgXHRcdHBhdHRlcm46IC8oXlxccyopQFxcdysoPzpcXC5cXHcrKSovaW0sXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0YWxpYXM6IFsnYW5ub3RhdGlvbicsICdwdW5jdHVhdGlvbiddLFxuICBcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG4gIFx0XHR9XG4gIFx0fSxcbiAgXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YXN8YXNzZXJ0fGFzeW5jfGF3YWl0fGJyZWFrfGNsYXNzfGNvbnRpbnVlfGRlZnxkZWx8ZWxpZnxlbHNlfGV4Y2VwdHxleGVjfGZpbmFsbHl8Zm9yfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpc3xsYW1iZGF8bm9ubG9jYWx8bm90fG9yfHBhc3N8cHJpbnR8cmFpc2V8cmV0dXJufHRyeXx3aGlsZXx3aXRofHlpZWxkKVxcYi8sXG4gIFx0J2J1aWx0aW4nOiAvXFxiKD86X19pbXBvcnRfX3xhYnN8YWxsfGFueXxhcHBseXxhc2NpaXxiYXNlc3RyaW5nfGJpbnxib29sfGJ1ZmZlcnxieXRlYXJyYXl8Ynl0ZXN8Y2FsbGFibGV8Y2hyfGNsYXNzbWV0aG9kfGNtcHxjb2VyY2V8Y29tcGlsZXxjb21wbGV4fGRlbGF0dHJ8ZGljdHxkaXJ8ZGl2bW9kfGVudW1lcmF0ZXxldmFsfGV4ZWNmaWxlfGZpbGV8ZmlsdGVyfGZsb2F0fGZvcm1hdHxmcm96ZW5zZXR8Z2V0YXR0cnxnbG9iYWxzfGhhc2F0dHJ8aGFzaHxoZWxwfGhleHxpZHxpbnB1dHxpbnR8aW50ZXJufGlzaW5zdGFuY2V8aXNzdWJjbGFzc3xpdGVyfGxlbnxsaXN0fGxvY2Fsc3xsb25nfG1hcHxtYXh8bWVtb3J5dmlld3xtaW58bmV4dHxvYmplY3R8b2N0fG9wZW58b3JkfHBvd3xwcm9wZXJ0eXxyYW5nZXxyYXdfaW5wdXR8cmVkdWNlfHJlbG9hZHxyZXByfHJldmVyc2VkfHJvdW5kfHNldHxzZXRhdHRyfHNsaWNlfHNvcnRlZHxzdGF0aWNtZXRob2R8c3RyfHN1bXxzdXBlcnx0dXBsZXx0eXBlfHVuaWNocnx1bmljb2RlfHZhcnN8eHJhbmdlfHppcClcXGIvLFxuICBcdCdib29sZWFuJzogL1xcYig/OlRydWV8RmFsc2V8Tm9uZSlcXGIvLFxuICBcdCdudW1iZXInOiAvKD86XFxiKD89XFxkKXxcXEIoPz1cXC4pKSg/OjBbYm9dKT8oPzooPzpcXGR8MHhbXFxkYS1mXSlbXFxkYS1mXSpcXC4/XFxkKnxcXC5cXGQrKSg/OmVbKy1dP1xcZCspP2o/XFxiL2ksXG4gIFx0J29wZXJhdG9yJzogL1stKyU9XT0/fCE9fFxcKlxcKj89P3xcXC9cXC8/PT98PFs8PT5dP3w+Wz0+XT98WyZ8Xn5dLyxcbiAgXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG4gIH07XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLnB5dGhvblsnc3RyaW5nLWludGVycG9sYXRpb24nXS5pbnNpZGVbJ2ludGVycG9sYXRpb24nXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5weXRob247XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcblxuICBQcmlzbS5sYW5ndWFnZXMuY2xpa2UgPSB7XG4gIFx0J2NvbW1lbnQnOiBbXG4gIFx0XHR7XG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHR9LFxuICBcdFx0e1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRncmVlZHk6IHRydWVcbiAgXHRcdH1cbiAgXHRdLFxuICBcdCdzdHJpbmcnOiB7XG4gIFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuICBcdFx0Z3JlZWR5OiB0cnVlXG4gIFx0fSxcbiAgXHQnY2xhc3MtbmFtZSc6IHtcbiAgXHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8aW50ZXJmYWNlfGV4dGVuZHN8aW1wbGVtZW50c3x0cmFpdHxpbnN0YW5jZW9mfG5ldylcXHMrfFxcYmNhdGNoXFxzK1xcKClbXFx3LlxcXFxdKy9pLFxuICBcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdGluc2lkZToge1xuICBcdFx0XHQncHVuY3R1YXRpb24nOiAvWy5cXFxcXS9cbiAgXHRcdH1cbiAgXHR9LFxuICBcdCdrZXl3b3JkJzogL1xcYig/OmlmfGVsc2V8d2hpbGV8ZG98Zm9yfHJldHVybnxpbnxpbnN0YW5jZW9mfGZ1bmN0aW9ufG5ld3x0cnl8dGhyb3d8Y2F0Y2h8ZmluYWxseXxudWxsfGJyZWFrfGNvbnRpbnVlKVxcYi8sXG4gIFx0J2Jvb2xlYW4nOiAvXFxiKD86dHJ1ZXxmYWxzZSlcXGIvLFxuICBcdCdmdW5jdGlvbic6IC9cXHcrKD89XFwoKS8sXG4gIFx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrXFwuP1xcZCp8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcbiAgXHQnb3BlcmF0b3InOiAvWzw+XT0/fFshPV09Pz0/fC0tP3xcXCtcXCs/fCYmP3xcXHxcXHw/fFs/Ki9+XiVdLyxcbiAgXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG4gIH07XG5cbiAgUHJpc20ubGFuZ3VhZ2VzLmx1YSA9IHtcbiAgXHQnY29tbWVudCc6IC9eIyEuK3wtLSg/OlxcWyg9KilcXFtbXFxzXFxTXSo/XFxdXFwxXFxdfC4qKS9tLFxuICBcdC8vIFxceiBtYXkgYmUgdXNlZCB0byBza2lwIHRoZSBmb2xsb3dpbmcgc3BhY2VcbiAgXHQnc3RyaW5nJzoge1xuICBcdFx0cGF0dGVybjogLyhbXCInXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxceig/OlxcclxcbnxcXHMpfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcXDF8XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDJcXF0vLFxuICBcdFx0Z3JlZWR5OiB0cnVlXG4gIFx0fSxcbiAgXHQnbnVtYmVyJzogL1xcYjB4W2EtZlxcZF0rXFwuP1thLWZcXGRdKig/OnBbKy1dP1xcZCspP1xcYnxcXGJcXGQrKD86XFwuXFxCfFxcLj9cXGQqKD86ZVsrLV0/XFxkKyk/XFxiKXxcXEJcXC5cXGQrKD86ZVsrLV0/XFxkKyk/XFxiL2ksXG4gIFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmYWxzZXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbnxsb2NhbHxuaWx8bm90fG9yfHJlcGVhdHxyZXR1cm58dGhlbnx0cnVlfHVudGlsfHdoaWxlKVxcYi8sXG4gIFx0J2Z1bmN0aW9uJzogLyg/IVxcZClcXHcrKD89XFxzKig/Olsoe10pKS8sXG4gIFx0J29wZXJhdG9yJzogW1xuICBcdFx0L1stKyolXiZ8I118XFwvXFwvP3w8Wzw9XT98Pls+PV0/fFs9fl09Py8sXG4gIFx0XHR7XG4gIFx0XHRcdC8vIE1hdGNoIFwiLi5cIiBidXQgZG9uJ3QgYnJlYWsgXCIuLi5cIlxuICBcdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlcXC5cXC4oPyFcXC4pLyxcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdFx0fVxuICBcdF0sXG4gIFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9LDtdfFxcLit8OisvXG4gIH07XG5cbiAgKGZ1bmN0aW9uKFByaXNtKSB7XG4gIFx0Ly8gJCBzZXQgfCBncmVwICdeW0EtWl1bXls6c3BhY2U6XV0qPScgfCBjdXQgLWQ9IC1mMSB8IHRyICdcXG4nICd8J1xuICBcdC8vICsgTENfQUxMLCBSQU5ET00sIFJFUExZLCBTRUNPTkRTLlxuICBcdC8vICsgbWFrZSBzdXJlIFBTMS4uNCBhcmUgaGVyZSBhcyB0aGV5IGFyZSBub3QgYWx3YXlzIHNldCxcbiAgXHQvLyAtIHNvbWUgdXNlbGVzcyB0aGluZ3MuXG4gIFx0dmFyIGVudlZhcnMgPSAnXFxcXGIoPzpCQVNIfEJBU0hPUFRTfEJBU0hfQUxJQVNFU3xCQVNIX0FSR0N8QkFTSF9BUkdWfEJBU0hfQ01EU3xCQVNIX0NPTVBMRVRJT05fQ09NUEFUX0RJUnxCQVNIX0xJTkVOT3xCQVNIX1JFTUFUQ0h8QkFTSF9TT1VSQ0V8QkFTSF9WRVJTSU5GT3xCQVNIX1ZFUlNJT058Q09MT1JURVJNfENPTFVNTlN8Q09NUF9XT1JEQlJFQUtTfERCVVNfU0VTU0lPTl9CVVNfQUREUkVTU3xERUZBVUxUU19QQVRIfERFU0tUT1BfU0VTU0lPTnxESVJTVEFDS3xESVNQTEFZfEVVSUR8R0RNU0VTU0lPTnxHRE1fTEFOR3xHTk9NRV9LRVlSSU5HX0NPTlRST0x8R05PTUVfS0VZUklOR19QSUR8R1BHX0FHRU5UX0lORk98R1JPVVBTfEhJU1RDT05UUk9MfEhJU1RGSUxFfEhJU1RGSUxFU0laRXxISVNUU0laRXxIT01FfEhPU1ROQU1FfEhPU1RUWVBFfElGU3xJTlNUQU5DRXxKT0J8TEFOR3xMQU5HVUFHRXxMQ19BRERSRVNTfExDX0FMTHxMQ19JREVOVElGSUNBVElPTnxMQ19NRUFTVVJFTUVOVHxMQ19NT05FVEFSWXxMQ19OQU1FfExDX05VTUVSSUN8TENfUEFQRVJ8TENfVEVMRVBIT05FfExDX1RJTUV8TEVTU0NMT1NFfExFU1NPUEVOfExJTkVTfExPR05BTUV8TFNfQ09MT1JTfE1BQ0hUWVBFfE1BSUxDSEVDS3xNQU5EQVRPUllfUEFUSHxOT19BVF9CUklER0V8T0xEUFdEfE9QVEVSUnxPUFRJTkR8T1JCSVRfU09DS0VURElSfE9TVFlQRXxQQVBFUlNJWkV8UEFUSHxQSVBFU1RBVFVTfFBQSUR8UFMxfFBTMnxQUzN8UFM0fFBXRHxSQU5ET018UkVQTFl8U0VDT05EU3xTRUxJTlVYX0lOSVR8U0VTU0lPTnxTRVNTSU9OVFlQRXxTRVNTSU9OX01BTkFHRVJ8U0hFTEx8U0hFTExPUFRTfFNITFZMfFNTSF9BVVRIX1NPQ0t8VEVSTXxVSUR8VVBTVEFSVF9FVkVOVFN8VVBTVEFSVF9JTlNUQU5DRXxVUFNUQVJUX0pPQnxVUFNUQVJUX1NFU1NJT058VVNFUnxXSU5ET1dJRHxYQVVUSE9SSVRZfFhER19DT05GSUdfRElSU3xYREdfQ1VSUkVOVF9ERVNLVE9QfFhER19EQVRBX0RJUlN8WERHX0dSRUVURVJfREFUQV9ESVJ8WERHX01FTlVfUFJFRklYfFhER19SVU5USU1FX0RJUnxYREdfU0VBVHxYREdfU0VBVF9QQVRIfFhER19TRVNTSU9OX0RFU0tUT1B8WERHX1NFU1NJT05fSUR8WERHX1NFU1NJT05fUEFUSHxYREdfU0VTU0lPTl9UWVBFfFhER19WVE5SfFhNT0RJRklFUlMpXFxcXGInO1xuICBcdHZhciBpbnNpZGVTdHJpbmcgPSB7XG4gIFx0XHQnZW52aXJvbm1lbnQnOiB7XG4gIFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcIlxcXFwkXCIgKyBlbnZWYXJzKSxcbiAgXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcbiAgXHRcdH0sXG4gIFx0XHQndmFyaWFibGUnOiBbXG4gIFx0XHRcdC8vIFswXTogQXJpdGhtZXRpYyBFbnZpcm9ubWVudFxuICBcdFx0XHR7XG4gIFx0XHRcdFx0cGF0dGVybjogL1xcJD9cXChcXChbXFxzXFxTXSs/XFwpXFwpLyxcbiAgXHRcdFx0XHRncmVlZHk6IHRydWUsXG4gIFx0XHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhICQgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIGhpZ2hsaWdodCAkKCggYW5kICkpIGFzIHZhcmlhYmxlXG4gIFx0XHRcdFx0XHQndmFyaWFibGUnOiBbXG4gIFx0XHRcdFx0XHRcdHtcbiAgXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXChcXChbXFxzXFxTXSspXFwpXFwpLyxcbiAgXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHRcdFx0XHRcdH0sXG4gIFx0XHRcdFx0XHRcdC9eXFwkXFwoXFwoL1xuICBcdFx0XHRcdFx0XSxcbiAgXHRcdFx0XHRcdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXStcXGJ8KD86XFxiXFxkK1xcLj9cXGQqfFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/LyxcbiAgXHRcdFx0XHRcdC8vIE9wZXJhdG9ycyBhY2NvcmRpbmcgdG8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9iYXNocmVmLmh0bWwjU2hlbGwtQXJpdGhtZXRpY1xuICBcdFx0XHRcdFx0J29wZXJhdG9yJzogLy0tP3wtPXxcXCtcXCs/fFxcKz18IT0/fH58XFwqXFwqP3xcXCo9fFxcLz0/fCU9P3w8PD0/fD4+PT98PD0/fD49P3w9PT98JiY/fCY9fFxcXj0/fFxcfFxcfD98XFx8PXxcXD98Oi8sXG4gIFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBubyAkIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBoaWdobGlnaHQgKCggYW5kICkpIGFzIHB1bmN0dWF0aW9uXG4gIFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwoXFwoP3xcXClcXCk/fCx8Oy9cbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH0sXG4gIFx0XHRcdC8vIFsxXTogQ29tbWFuZCBTdWJzdGl0dXRpb25cbiAgXHRcdFx0e1xuICBcdFx0XHRcdHBhdHRlcm46IC9cXCRcXCgoPzpcXChbXildK1xcKXxbXigpXSkrXFwpfGBbXmBdK2AvLFxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9eXFwkXFwofF5gfFxcKSR8YCQvXG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9LFxuICBcdFx0XHQvLyBbMl06IEJyYWNlIGV4cGFuc2lvblxuICBcdFx0XHR7XG4gIFx0XHRcdFx0cGF0dGVybjogL1xcJFxce1tefV0rXFx9LyxcbiAgXHRcdFx0XHRncmVlZHk6IHRydWUsXG4gIFx0XHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvOlstPT8rXT98WyFcXC9dfCMjP3wlJT98XFxeXFxeP3wsLD8vLFxuICBcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dLyxcbiAgXHRcdFx0XHRcdCdlbnZpcm9ubWVudCc6IHtcbiAgXHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFwiKFxcXFx7KVwiICsgZW52VmFycyksXG4gIFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG4gIFx0XHRcdFx0XHR9XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9LFxuICBcdFx0XHQvXFwkKD86XFx3K3xbIz8qIUAkXSkvXG4gIFx0XHRdLFxuICBcdFx0Ly8gRXNjYXBlIHNlcXVlbmNlcyBmcm9tIGVjaG8gYW5kIHByaW50ZidzIG1hbnVhbHMsIGFuZCBlc2NhcGVkIHF1b3Rlcy5cbiAgXHRcdCdlbnRpdHknOiAvXFxcXCg/OlthYmNlRWZucnR2XFxcXFwiXXxPP1swLTddezEsM318eFswLTlhLWZBLUZdezEsMn18dVswLTlhLWZBLUZdezR9fFVbMC05YS1mQS1GXXs4fSkvXG4gIFx0fTtcblxuICBcdFByaXNtLmxhbmd1YWdlcy5iYXNoID0ge1xuICBcdFx0J3NoZWJhbmcnOiB7XG4gIFx0XHRcdHBhdHRlcm46IC9eIyFcXHMqXFwvLiovLFxuICBcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcbiAgXHRcdH0sXG4gIFx0XHQnY29tbWVudCc6IHtcbiAgXHRcdFx0cGF0dGVybjogLyhefFteXCJ7XFxcXCRdKSMuKi8sXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHRcdH0sXG4gIFx0XHQnZnVuY3Rpb24tbmFtZSc6IFtcbiAgXHRcdFx0Ly8gYSkgZnVuY3Rpb24gZm9vIHtcbiAgXHRcdFx0Ly8gYikgZm9vKCkge1xuICBcdFx0XHQvLyBjKSBmdW5jdGlvbiBmb28oKSB7XG4gIFx0XHRcdC8vIGJ1dCBub3Qg4oCcZm9vIHvigJ1cbiAgXHRcdFx0e1xuICBcdFx0XHRcdC8vIGEpIGFuZCBjKVxuICBcdFx0XHRcdHBhdHRlcm46IC8oXFxiZnVuY3Rpb25cXHMrKVxcdysoPz0oPzpcXHMqXFwoPzpcXHMqXFwpKT9cXHMqXFx7KS8sXG4gIFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuICBcdFx0XHR9LFxuICBcdFx0XHR7XG4gIFx0XHRcdFx0Ly8gYilcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFx3Kyg/PVxccypcXChcXHMqXFwpXFxzKlxceykvLFxuICBcdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG4gIFx0XHRcdH1cbiAgXHRcdF0sXG4gIFx0XHQvLyBIaWdobGlnaHQgdmFyaWFibGUgbmFtZXMgYXMgdmFyaWFibGVzIGluIGZvciBhbmQgc2VsZWN0IGJlZ2lubmluZ3MuXG4gIFx0XHQnZm9yLW9yLXNlbGVjdCc6IHtcbiAgXHRcdFx0cGF0dGVybjogLyhcXGIoPzpmb3J8c2VsZWN0KVxccyspXFx3Kyg/PVxccytpblxccykvLFxuICBcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdFx0fSxcbiAgXHRcdC8vIEhpZ2hsaWdodCB2YXJpYWJsZSBuYW1lcyBhcyB2YXJpYWJsZXMgaW4gdGhlIGxlZnQtaGFuZCBwYXJ0XG4gIFx0XHQvLyBvZiBhc3NpZ25tZW50cyAo4oCcPeKAnSBhbmQg4oCcKz3igJ0pLlxuICBcdFx0J2Fzc2lnbi1sZWZ0Jzoge1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKClcXHcrKD89XFwrPz0pLyxcbiAgXHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0J2Vudmlyb25tZW50Jzoge1xuICBcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFwiKF58W1xcXFxzO3wmXXxbPD5dXFxcXCgpXCIgKyBlbnZWYXJzKSxcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fSxcbiAgXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHRcdH0sXG4gIFx0XHQnc3RyaW5nJzogW1xuICBcdFx0XHQvLyBTdXBwb3J0IGZvciBIZXJlLWRvY3VtZW50cyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZXJlX2RvY3VtZW50XG4gIFx0XHRcdHtcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W148XSk8PC0/XFxzKikoXFx3Kz8pXFxzKig/Olxccj9cXG58XFxyKVtcXHNcXFNdKj8oPzpcXHI/XFxufFxccilcXDIvLFxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuICBcdFx0XHRcdGluc2lkZTogaW5zaWRlU3RyaW5nXG4gIFx0XHRcdH0sXG4gIFx0XHRcdC8vIEhlcmUtZG9jdW1lbnQgd2l0aCBxdW90ZXMgYXJvdW5kIHRoZSB0YWdcbiAgXHRcdFx0Ly8g4oaSIE5vIGV4cGFuc2lvbiAoc28gbm8g4oCcaW5zaWRl4oCdKS5cbiAgXHRcdFx0e1xuICBcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXjxdKTw8LT9cXHMqKShbXCInXSkoXFx3KylcXDJcXHMqKD86XFxyP1xcbnxcXHIpW1xcc1xcU10qPyg/Olxccj9cXG58XFxyKVxcMy8sXG4gIFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdFx0XHRncmVlZHk6IHRydWVcbiAgXHRcdFx0fSxcbiAgXHRcdFx0Ly8g4oCcTm9ybWFs4oCdIHN0cmluZ1xuICBcdFx0XHR7XG4gIFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0oPzpcXFxcXFxcXCkqKShbXCInXSkoPzpcXFxcW1xcc1xcU118XFwkXFwoW14pXStcXCl8YFteYF0rYHwoPyFcXDIpW15cXFxcXSkqXFwyLyxcbiAgXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdFx0XHRpbnNpZGU6IGluc2lkZVN0cmluZ1xuICBcdFx0XHR9XG4gIFx0XHRdLFxuICBcdFx0J2Vudmlyb25tZW50Jzoge1xuICBcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXCJcXFxcJD9cIiArIGVudlZhcnMpLFxuICBcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuICBcdFx0fSxcbiAgXHRcdCd2YXJpYWJsZSc6IGluc2lkZVN0cmluZy52YXJpYWJsZSxcbiAgXHRcdCdmdW5jdGlvbic6IHtcbiAgXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpKD86YWRkfGFwcm9wb3N8YXB0fGFwdGl0dWRlfGFwdC1jYWNoZXxhcHQtZ2V0fGFzcGVsbHxhdXRvbXlzcWxiYWNrdXB8YXdrfGJhc2VuYW1lfGJhc2h8YmN8YmNvbnNvbGV8Ymd8YnppcDJ8Y2FsfGNhdHxjZmRpc2t8Y2hncnB8Y2hrY29uZmlnfGNobW9kfGNob3dufGNocm9vdHxja3N1bXxjbGVhcnxjbXB8Y29sdW1ufGNvbW18Y3B8Y3Jvbnxjcm9udGFifGNzcGxpdHxjdXJsfGN1dHxkYXRlfGRjfGRkfGRkcmVzY3VlfGRlYm9vdHN0cmFwfGRmfGRpZmZ8ZGlmZjN8ZGlnfGRpcnxkaXJjb2xvcnN8ZGlybmFtZXxkaXJzfGRtZXNnfGR1fGVncmVwfGVqZWN0fGVudnxldGh0b29sfGV4cGFuZHxleHBlY3R8ZXhwcnxmZGZvcm1hdHxmZGlza3xmZ3xmZ3JlcHxmaWxlfGZpbmR8Zm10fGZvbGR8Zm9ybWF0fGZyZWV8ZnNja3xmdHB8ZnVzZXJ8Z2F3a3xnaXR8Z3BhcnRlZHxncmVwfGdyb3VwYWRkfGdyb3VwZGVsfGdyb3VwbW9kfGdyb3Vwc3xncnViLW1rY29uZmlnfGd6aXB8aGFsdHxoZWFkfGhnfGhpc3Rvcnl8aG9zdHxob3N0bmFtZXxodG9wfGljb252fGlkfGlmY29uZmlnfGlmZG93bnxpZnVwfGltcG9ydHxpbnN0YWxsfGlwfGpvYnN8am9pbnxraWxsfGtpbGxhbGx8bGVzc3xsaW5rfGxufGxvY2F0ZXxsb2duYW1lfGxvZ3JvdGF0ZXxsb29rfGxwY3xscHJ8bHByaW50fGxwcmludGR8bHByaW50cXxscHJtfGxzfGxzb2Z8bHlueHxtYWtlfG1hbnxtY3xtZGFkbXxta2NvbmZpZ3xta2Rpcnxta2UyZnN8bWtmaWZvfG1rZnN8bWtpc29mc3xta25vZHxta3N3YXB8bW12fG1vcmV8bW9zdHxtb3VudHxtdG9vbHN8bXRyfG11dHR8bXZ8bmFub3xuY3xuZXRzdGF0fG5pY2V8bmx8bm9odXB8bm90aWZ5LXNlbmR8bnBtfG5zbG9va3VwfG9wfG9wZW58cGFydGVkfHBhc3N3ZHxwYXN0ZXxwYXRoY2hrfHBpbmd8cGtpbGx8cG5wbXxwb3BkfHByfHByaW50Y2FwfHByaW50ZW52fHBzfHB1c2hkfHB2fHF1b3RhfHF1b3RhY2hlY2t8cXVvdGFjdGx8cmFtfHJhcnxyY3B8cmVib290fHJlbXN5bmN8cmVuYW1lfHJlbmljZXxyZXZ8cm18cm1kaXJ8cnBtfHJzeW5jfHNjcHxzY3JlZW58c2RpZmZ8c2VkfHNlbmRtYWlsfHNlcXxzZXJ2aWNlfHNmdHB8c2h8c2hlbGxjaGVja3xzaHVmfHNodXRkb3dufHNsZWVwfHNsb2NhdGV8c29ydHxzcGxpdHxzc2h8c3RhdHxzdHJhY2V8c3V8c3Vkb3xzdW18c3VzcGVuZHxzd2Fwb258c3luY3x0YWN8dGFpbHx0YXJ8dGVlfHRpbWV8dGltZW91dHx0b3B8dG91Y2h8dHJ8dHJhY2Vyb3V0ZXx0c29ydHx0dHl8dW1vdW50fHVuYW1lfHVuZXhwYW5kfHVuaXF8dW5pdHN8dW5yYXJ8dW5zaGFyfHVuemlwfHVwZGF0ZS1ncnVifHVwdGltZXx1c2VyYWRkfHVzZXJkZWx8dXNlcm1vZHx1c2Vyc3x1dWRlY29kZXx1dWVuY29kZXx2fHZkaXJ8dml8dmltfHZpcnNofHZtc3RhdHx3YWl0fHdhdGNofHdjfHdnZXR8d2hlcmVpc3x3aGljaHx3aG98d2hvYW1pfHdyaXRlfHhhcmdzfHhkZy1vcGVufHlhcm58eWVzfHplbml0eXx6aXB8enNofHp5cHBlcikoPz0kfFspXFxzO3wmXSkvLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHR9LFxuICBcdFx0J2tleXdvcmQnOiB7XG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmlmfHRoZW58ZWxzZXxlbGlmfGZpfGZvcnx3aGlsZXxpbnxjYXNlfGVzYWN8ZnVuY3Rpb258c2VsZWN0fGRvfGRvbmV8dW50aWwpKD89JHxbKVxcczt8Jl0pLyxcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdFx0fSxcbiAgXHRcdC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NoZWxsLUJ1aWx0aW4tQ29tbWFuZHMuaHRtbFxuICBcdFx0J2J1aWx0aW4nOiB7XG4gIFx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OlxcLnw6fGJyZWFrfGNkfGNvbnRpbnVlfGV2YWx8ZXhlY3xleGl0fGV4cG9ydHxnZXRvcHRzfGhhc2h8cHdkfHJlYWRvbmx5fHJldHVybnxzaGlmdHx0ZXN0fHRpbWVzfHRyYXB8dW1hc2t8dW5zZXR8YWxpYXN8YmluZHxidWlsdGlufGNhbGxlcnxjb21tYW5kfGRlY2xhcmV8ZWNob3xlbmFibGV8aGVscHxsZXR8bG9jYWx8bG9nb3V0fG1hcGZpbGV8cHJpbnRmfHJlYWR8cmVhZGFycmF5fHNvdXJjZXx0eXBlfHR5cGVzZXR8dWxpbWl0fHVuYWxpYXN8c2V0fHNob3B0KSg/PSR8WylcXHM7fCZdKS8sXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdC8vIEFsaWFzIGFkZGVkIHRvIG1ha2UgdGhvc2UgZWFzaWVyIHRvIGRpc3Rpbmd1aXNoIGZyb20gc3RyaW5ncy5cbiAgXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuICBcdFx0fSxcbiAgXHRcdCdib29sZWFuJzoge1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKCkoPzp0cnVlfGZhbHNlKSg/PSR8WylcXHM7fCZdKS8sXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHRcdH0sXG4gIFx0XHQnZmlsZS1kZXNjcmlwdG9yJzoge1xuICBcdFx0XHRwYXR0ZXJuOiAvXFxCJlxcZFxcYi8sXG4gIFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuICBcdFx0fSxcbiAgXHRcdCdvcGVyYXRvcic6IHtcbiAgXHRcdFx0Ly8gTG90cyBvZiByZWRpcmVjdGlvbnMgaGVyZSwgYnV0IG5vdCBqdXN0IHRoYXQuXG4gIFx0XHRcdHBhdHRlcm46IC9cXGQ/PD58PlxcfHxcXCs9fD09P3whPT98PX58PDxbPC1dP3xbJlxcZF0/Pj58XFxkP1s8Pl0mP3wmWz4mXT98XFx8WyZ8XT98PD0/fD49Py8sXG4gIFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdCdmaWxlLWRlc2NyaXB0b3InOiB7XG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcZC8sXG4gIFx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH0sXG4gIFx0XHQncHVuY3R1YXRpb24nOiAvXFwkP1xcKFxcKD98XFwpXFwpP3xcXC5cXC58W3t9W1xcXTtcXFxcXS8sXG4gIFx0XHQnbnVtYmVyJzoge1xuICBcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OlsxLTldXFxkKnwwKSg/OlsuLF1cXGQrKT9cXGIvLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHR9XG4gIFx0fTtcblxuICBcdC8qIFBhdHRlcm5zIGluIGNvbW1hbmQgc3Vic3RpdHV0aW9uLiAqL1xuICBcdHZhciB0b0JlQ29waWVkID0gW1xuICBcdFx0J2NvbW1lbnQnLFxuICBcdFx0J2Z1bmN0aW9uLW5hbWUnLFxuICBcdFx0J2Zvci1vci1zZWxlY3QnLFxuICBcdFx0J2Fzc2lnbi1sZWZ0JyxcbiAgXHRcdCdzdHJpbmcnLFxuICBcdFx0J2Vudmlyb25tZW50JyxcbiAgXHRcdCdmdW5jdGlvbicsXG4gIFx0XHQna2V5d29yZCcsXG4gIFx0XHQnYnVpbHRpbicsXG4gIFx0XHQnYm9vbGVhbicsXG4gIFx0XHQnZmlsZS1kZXNjcmlwdG9yJyxcbiAgXHRcdCdvcGVyYXRvcicsXG4gIFx0XHQncHVuY3R1YXRpb24nLFxuICBcdFx0J251bWJlcidcbiAgXHRdO1xuICBcdHZhciBpbnNpZGUgPSBpbnNpZGVTdHJpbmcudmFyaWFibGVbMV0uaW5zaWRlO1xuICBcdGZvcih2YXIgaSA9IDA7IGkgPCB0b0JlQ29waWVkLmxlbmd0aDsgaSsrKSB7XG4gIFx0XHRpbnNpZGVbdG9CZUNvcGllZFtpXV0gPSBQcmlzbS5sYW5ndWFnZXMuYmFzaFt0b0JlQ29waWVkW2ldXTtcbiAgXHR9XG5cbiAgXHRQcmlzbS5sYW5ndWFnZXMuc2hlbGwgPSBQcmlzbS5sYW5ndWFnZXMuYmFzaDtcbiAgfSkoUHJpc20pO1xuXG4gIFByaXNtLmxhbmd1YWdlcy5nbyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuICBcdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrfGNhc2V8Y2hhbnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRlZmVyfGVsc2V8ZmFsbHRocm91Z2h8Zm9yfGZ1bmN8Z28oPzp0byk/fGlmfGltcG9ydHxpbnRlcmZhY2V8bWFwfHBhY2thZ2V8cmFuZ2V8cmV0dXJufHNlbGVjdHxzdHJ1Y3R8c3dpdGNofHR5cGV8dmFyKVxcYi8sXG4gIFx0J2J1aWx0aW4nOiAvXFxiKD86Ym9vbHxieXRlfGNvbXBsZXgoPzo2NHwxMjgpfGVycm9yfGZsb2F0KD86MzJ8NjQpfHJ1bmV8c3RyaW5nfHU/aW50KD86OHwxNnwzMnw2NCk/fHVpbnRwdHJ8YXBwZW5kfGNhcHxjbG9zZXxjb21wbGV4fGNvcHl8ZGVsZXRlfGltYWd8bGVufG1ha2V8bmV3fHBhbmljfHByaW50KD86bG4pP3xyZWFsfHJlY292ZXIpXFxiLyxcbiAgXHQnYm9vbGVhbic6IC9cXGIoPzpffGlvdGF8bmlsfHRydWV8ZmFsc2UpXFxiLyxcbiAgXHQnb3BlcmF0b3InOiAvWypcXC8lXiE9XT0/fFxcK1s9K10/fC1bPS1dP3xcXHxbPXxdP3wmKD86PXwmfFxcXj0/KT98Pig/Oj49P3w9KT98PCg/Ojw9P3w9fC0pP3w6PXxcXC5cXC5cXC4vLFxuICBcdCdudW1iZXInOiAvKD86XFxiMHhbYS1mXFxkXSt8KD86XFxiXFxkK1xcLj9cXGQqfFxcQlxcLlxcZCspKD86ZVstK10/XFxkKyk/KWk/L2ksXG4gIFx0J3N0cmluZyc6IHtcbiAgXHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcbiAgXHRcdGdyZWVkeTogdHJ1ZVxuICBcdH1cbiAgfSk7XG4gIGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuZ29bJ2NsYXNzLW5hbWUnXTtcblxuICAoZnVuY3Rpb24gKFByaXNtKSB7XG5cbiAgXHQvLyBBbGxvdyBvbmx5IG9uZSBsaW5lIGJyZWFrXG4gIFx0dmFyIGlubmVyID0gLyg/OlxcXFwufFteXFxcXFxcblxccl18KD86XFxufFxcclxcbj8pKD8hXFxufFxcclxcbj8pKS8uc291cmNlO1xuXG4gIFx0LyoqXG4gIFx0ICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBib2xkIG9yIGl0YWxpYyBwYXR0ZXJuLlxuICBcdCAqXG4gIFx0ICogVGhpcyBhbHNvIGFkZHMgYSBsb29rYmVoaW5kIGdyb3VwIHRvIHRoZSBnaXZlbiBwYXR0ZXJuIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGlzIG5vdCBiYWNrc2xhc2gtZXNjYXBlZC5cbiAgXHQgKlxuICBcdCAqIF9Ob3RlOl8gS2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBhZGRzIGEgY2FwdHVyaW5nIGdyb3VwLlxuICBcdCAqXG4gIFx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXJBbHRlcm5hdGl2ZSBXaGV0aGVyIHRvIGFsc28gYWRkIGFuIGFsdGVybmF0aXZlIHdoZXJlIGFsbCBgX2BzIGFyZSByZXBsYWNlZCB3aXRoIGAqYHMuXG4gIFx0ICogQHJldHVybnMge1JlZ0V4cH1cbiAgXHQgKi9cbiAgXHRmdW5jdGlvbiBjcmVhdGVJbmxpbmUocGF0dGVybiwgc3RhckFsdGVybmF0aXZlKSB7XG4gIFx0XHRwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC88aW5uZXI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyOyB9KTtcbiAgXHRcdGlmIChzdGFyQWx0ZXJuYXRpdmUpIHtcbiAgXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4gKyAnfCcgKyBwYXR0ZXJuLnJlcGxhY2UoL18vZywgJ1xcXFwqJyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gUmVnRXhwKC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKikvLnNvdXJjZSArICcoPzonICsgcGF0dGVybiArICcpJyk7XG4gIFx0fVxuXG5cbiAgXHR2YXIgdGFibGVDZWxsID0gLyg/OlxcXFwufGBgLis/YGB8YFteYFxcclxcbl0rYHxbXlxcXFx8XFxyXFxuYF0pKy8uc291cmNlO1xuICBcdHZhciB0YWJsZVJvdyA9IC9cXHw/X18oPzpcXHxfXykrXFx8Pyg/Oig/OlxcbnxcXHJcXG4/KXwkKS8uc291cmNlLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhYmxlQ2VsbDsgfSk7XG4gIFx0dmFyIHRhYmxlTGluZSA9IC9cXHw/WyBcXHRdKjo/LXszLH06P1sgXFx0XSooPzpcXHxbIFxcdF0qOj8tezMsfTo/WyBcXHRdKikrXFx8Pyg/OlxcbnxcXHJcXG4/KS8uc291cmNlO1xuXG5cbiAgXHRQcmlzbS5sYW5ndWFnZXMubWFya2Rvd24gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7fSk7XG4gIFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya2Rvd24nLCAncHJvbG9nJywge1xuICBcdFx0J2Jsb2NrcXVvdGUnOiB7XG4gIFx0XHRcdC8vID4gLi4uXG4gIFx0XHRcdHBhdHRlcm46IC9ePig/OltcXHQgXSo+KSovbSxcbiAgXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcbiAgXHRcdH0sXG4gIFx0XHQndGFibGUnOiB7XG4gIFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyB0YWJsZVJvdyArIHRhYmxlTGluZSArICcoPzonICsgdGFibGVSb3cgKyAnKSonLCAnbScpLFxuICBcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHQndGFibGUtZGF0YS1yb3dzJzoge1xuICBcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKCcgKyB0YWJsZVJvdyArIHRhYmxlTGluZSArICcpKD86JyArIHRhYmxlUm93ICsgJykqJCcpLFxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdFx0XHQndGFibGUtZGF0YSc6IHtcbiAgXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVDZWxsKSxcbiAgXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blxuICBcdFx0XHRcdFx0XHR9LFxuICBcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdH0sXG4gIFx0XHRcdFx0J3RhYmxlLWxpbmUnOiB7XG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oJyArIHRhYmxlUm93ICsgJyknICsgdGFibGVMaW5lICsgJyQnKSxcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfHw6Py17Myx9Oj8vXG4gIFx0XHRcdFx0XHR9XG4gIFx0XHRcdFx0fSxcbiAgXHRcdFx0XHQndGFibGUtaGVhZGVyLXJvdyc6IHtcbiAgXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyB0YWJsZVJvdyArICckJyksXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHRcdFx0J3RhYmxlLWhlYWRlcic6IHtcbiAgXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVDZWxsKSxcbiAgXHRcdFx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG4gIFx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25cbiAgXHRcdFx0XHRcdFx0fSxcbiAgXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cbiAgXHRcdFx0XHRcdH1cbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH0sXG4gIFx0XHQnY29kZSc6IFtcbiAgXHRcdFx0e1xuICBcdFx0XHRcdC8vIFByZWZpeGVkIGJ5IDQgc3BhY2VzIG9yIDEgdGFiIGFuZCBwcmVjZWRlZCBieSBhbiBlbXB0eSBsaW5lXG4gIFx0XHRcdFx0cGF0dGVybjogLygoPzpefFxcbilbIFxcdF0qXFxufCg/Ol58XFxyXFxuPylbIFxcdF0qXFxyXFxuPykoPzogezR9fFxcdCkuKyg/Oig/OlxcbnxcXHJcXG4/KSg/OiB7NH18XFx0KS4rKSovLFxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuICBcdFx0XHR9LFxuICBcdFx0XHR7XG4gIFx0XHRcdFx0Ly8gYGNvZGVgXG4gIFx0XHRcdFx0Ly8gYGBjb2RlYGBcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvYGAuKz9gYHxgW15gXFxyXFxuXStgLyxcbiAgXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG4gIFx0XHRcdH0sXG4gIFx0XHRcdHtcbiAgXHRcdFx0XHQvLyBgYGBvcHRpb25hbCBsYW5ndWFnZVxuICBcdFx0XHRcdC8vIGNvZGUgYmxvY2tcbiAgXHRcdFx0XHQvLyBgYGBcbiAgXHRcdFx0XHRwYXR0ZXJuOiAvXmBgYFtcXHNcXFNdKj9eYGBgJC9tLFxuICBcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHRcdCdjb2RlLWJsb2NrJzoge1xuICBcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihgYGAuKig/OlxcbnxcXHJcXG4/KSlbXFxzXFxTXSs/KD89KD86XFxufFxcclxcbj8pXmBgYCQpL20sXG4gIFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcbiAgXHRcdFx0XHRcdH0sXG4gIFx0XHRcdFx0XHQnY29kZS1sYW5ndWFnZSc6IHtcbiAgXHRcdFx0XHRcdFx0cGF0dGVybjogL14oYGBgKS4rLyxcbiAgXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuICBcdFx0XHRcdFx0fSxcbiAgXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9gYGAvXG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHRdLFxuICBcdFx0J3RpdGxlJzogW1xuICBcdFx0XHR7XG4gIFx0XHRcdFx0Ly8gdGl0bGUgMVxuICBcdFx0XHRcdC8vID09PT09PT1cblxuICBcdFx0XHRcdC8vIHRpdGxlIDJcbiAgXHRcdFx0XHQvLyAtLS0tLS0tXG4gIFx0XHRcdFx0cGF0dGVybjogL1xcUy4qKD86XFxufFxcclxcbj8pKD86PT0rfC0tKykoPz1bIFxcdF0qJCkvbSxcbiAgXHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG4gIFx0XHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0XHRwdW5jdHVhdGlvbjogLz09KyR8LS0rJC9cbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH0sXG4gIFx0XHRcdHtcbiAgXHRcdFx0XHQvLyAjIHRpdGxlIDFcbiAgXHRcdFx0XHQvLyAjIyMjIyMgdGl0bGUgNlxuICBcdFx0XHRcdHBhdHRlcm46IC8oXlxccyopIysuKy9tLFxuICBcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxuICBcdFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdFx0cHVuY3R1YXRpb246IC9eIyt8IyskL1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0XSxcbiAgXHRcdCdocic6IHtcbiAgXHRcdFx0Ly8gKioqXG4gIFx0XHRcdC8vIC0tLVxuICBcdFx0XHQvLyAqICogKlxuICBcdFx0XHQvLyAtLS0tLS0tLS0tLVxuICBcdFx0XHRwYXR0ZXJuOiAvKF5cXHMqKShbKi1dKSg/OltcXHQgXSpcXDIpezIsfSg/PVxccyokKS9tLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuICBcdFx0fSxcbiAgXHRcdCdsaXN0Jzoge1xuICBcdFx0XHQvLyAqIGl0ZW1cbiAgXHRcdFx0Ly8gKyBpdGVtXG4gIFx0XHRcdC8vIC0gaXRlbVxuICBcdFx0XHQvLyAxLiBpdGVtXG4gIFx0XHRcdHBhdHRlcm46IC8oXlxccyopKD86WyorLV18XFxkK1xcLikoPz1bXFx0IF0uKS9tLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuICBcdFx0fSxcbiAgXHRcdCd1cmwtcmVmZXJlbmNlJzoge1xuICBcdFx0XHQvLyBbaWRdOiBodHRwOi8vZXhhbXBsZS5jb20gXCJPcHRpb25hbCB0aXRsZVwiXG4gIFx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSAnT3B0aW9uYWwgdGl0bGUnXG4gIFx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSAoT3B0aW9uYWwgdGl0bGUpXG4gIFx0XHRcdC8vIFtpZF06IDxodHRwOi8vZXhhbXBsZS5jb20+IFwiT3B0aW9uYWwgdGl0bGVcIlxuICBcdFx0XHRwYXR0ZXJuOiAvIT9cXFtbXlxcXV0rXFxdOltcXHQgXSsoPzpcXFMrfDwoPzpcXFxcLnxbXj5cXFxcXSkrPikoPzpbXFx0IF0rKD86XCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwifCcoPzpcXFxcLnxbXidcXFxcXSkqJ3xcXCgoPzpcXFxcLnxbXilcXFxcXSkqXFwpKSk/LyxcbiAgXHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0J3ZhcmlhYmxlJzoge1xuICBcdFx0XHRcdFx0cGF0dGVybjogL14oIT9cXFspW15cXF1dKy8sXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHRcdFx0fSxcbiAgXHRcdFx0XHQnc3RyaW5nJzogLyg/OlwiKD86XFxcXC58W15cIlxcXFxdKSpcInwnKD86XFxcXC58W14nXFxcXF0pKid8XFwoKD86XFxcXC58W14pXFxcXF0pKlxcKSkkLyxcbiAgXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXltcXFtcXF0hOl18Wzw+XS9cbiAgXHRcdFx0fSxcbiAgXHRcdFx0YWxpYXM6ICd1cmwnXG4gIFx0XHR9LFxuICBcdFx0J2JvbGQnOiB7XG4gIFx0XHRcdC8vICoqc3Ryb25nKipcbiAgXHRcdFx0Ly8gX19zdHJvbmdfX1xuXG4gIFx0XHRcdC8vIGFsbG93IG9uZSBuZXN0ZWQgaW5zdGFuY2Ugb2YgaXRhbGljIHRleHQgdXNpbmcgdGhlIHNhbWUgZGVsaW1pdGVyXG4gIFx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvX18oPzooPyFfKTxpbm5lcj58Xyg/Oig/IV8pPGlubmVyPikrXykrX18vLnNvdXJjZSwgdHJ1ZSksXG4gIFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdGdyZWVkeTogdHJ1ZSxcbiAgXHRcdFx0aW5zaWRlOiB7XG4gIFx0XHRcdFx0J2NvbnRlbnQnOiB7XG4gIFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4uLilbXFxzXFxTXSsoPz0uLiQpLyxcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuICBcdFx0XHRcdH0sXG4gIFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKlxcKnxfXy9cbiAgXHRcdFx0fVxuICBcdFx0fSxcbiAgXHRcdCdpdGFsaWMnOiB7XG4gIFx0XHRcdC8vICplbSpcbiAgXHRcdFx0Ly8gX2VtX1xuXG4gIFx0XHRcdC8vIGFsbG93IG9uZSBuZXN0ZWQgaW5zdGFuY2Ugb2YgYm9sZCB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxuICBcdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoL18oPzooPyFfKTxpbm5lcj58X18oPzooPyFfKTxpbm5lcj4pK19fKStfLy5zb3VyY2UsIHRydWUpLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRncmVlZHk6IHRydWUsXG4gIFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdCdjb250ZW50Jzoge1xuICBcdFx0XHRcdFx0cGF0dGVybjogLyheLilbXFxzXFxTXSsoPz0uJCkvLFxuICBcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XG4gIFx0XHRcdFx0fSxcbiAgXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWypfXS9cbiAgXHRcdFx0fVxuICBcdFx0fSxcbiAgXHRcdCdzdHJpa2UnOiB7XG4gIFx0XHRcdC8vIH5+c3RyaWtlIHRocm91Z2h+flxuICBcdFx0XHQvLyB+c3RyaWtlflxuICBcdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoLyh+fj8pKD86KD8hfik8aW5uZXI+KSs/XFwyLy5zb3VyY2UsIGZhbHNlKSxcbiAgXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcbiAgXHRcdFx0Z3JlZWR5OiB0cnVlLFxuICBcdFx0XHRpbnNpZGU6IHtcbiAgXHRcdFx0XHQnY29udGVudCc6IHtcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXn5+PylbXFxzXFxTXSsoPz1cXDEkKS8sXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcbiAgXHRcdFx0XHR9LFxuICBcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9+fj8vXG4gIFx0XHRcdH1cbiAgXHRcdH0sXG4gIFx0XHQndXJsJzoge1xuICBcdFx0XHQvLyBbZXhhbXBsZV0oaHR0cDovL2V4YW1wbGUuY29tIFwiT3B0aW9uYWwgdGl0bGVcIilcbiAgXHRcdFx0Ly8gW2V4YW1wbGVdW2lkXVxuICBcdFx0XHQvLyBbZXhhbXBsZV0gW2lkXVxuICBcdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoLyE/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSg/OlxcKFteXFxzKV0rKD86W1xcdCBdK1wiKD86XFxcXC58W15cIlxcXFxdKSpcIik/XFwpfCA/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSkvLnNvdXJjZSwgZmFsc2UpLFxuICBcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuICBcdFx0XHRncmVlZHk6IHRydWUsXG4gIFx0XHRcdGluc2lkZToge1xuICBcdFx0XHRcdCd2YXJpYWJsZSc6IHtcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxbKVteXFxdXSsoPz1cXF0kKS8sXG4gIFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0XHRcdFx0fSxcbiAgXHRcdFx0XHQnY29udGVudCc6IHtcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC8oXiE/XFxbKVteXFxdXSsoPz1cXF0pLyxcbiAgXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG4gIFx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuICBcdFx0XHRcdH0sXG4gIFx0XHRcdFx0J3N0cmluZyc6IHtcbiAgXHRcdFx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXCJcXFxcXSkqXCIoPz1cXCkkKS9cbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9KTtcblxuICBcdFsndXJsJywgJ2JvbGQnLCAnaXRhbGljJywgJ3N0cmlrZSddLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG4gIFx0XHRbJ3VybCcsICdib2xkJywgJ2l0YWxpYycsICdzdHJpa2UnXS5mb3JFYWNoKGZ1bmN0aW9uIChpbnNpZGUpIHtcbiAgXHRcdFx0aWYgKHRva2VuICE9PSBpbnNpZGUpIHtcbiAgXHRcdFx0XHRQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25bdG9rZW5dLmluc2lkZS5jb250ZW50Lmluc2lkZVtpbnNpZGVdID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duW2luc2lkZV07XG4gIFx0XHRcdH1cbiAgXHRcdH0pO1xuICBcdH0pO1xuXG4gIFx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcbiAgXHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09ICdtYXJrZG93bicgJiYgZW52Lmxhbmd1YWdlICE9PSAnbWQnKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0ZnVuY3Rpb24gd2Fsa1Rva2Vucyh0b2tlbnMpIHtcbiAgXHRcdFx0aWYgKCF0b2tlbnMgfHwgdHlwZW9mIHRva2VucyA9PT0gJ3N0cmluZycpIHtcbiAgXHRcdFx0XHRyZXR1cm47XG4gIFx0XHRcdH1cblxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRva2Vucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgXHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgXHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ2NvZGUnKSB7XG4gIFx0XHRcdFx0XHR3YWxrVG9rZW5zKHRva2VuLmNvbnRlbnQpO1xuICBcdFx0XHRcdFx0Y29udGludWU7XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0LypcbiAgXHRcdFx0XHQgKiBBZGQgdGhlIGNvcnJlY3QgYGxhbmd1YWdlLXh4eHhgIGNsYXNzIHRvIHRoaXMgY29kZSBibG9jay4gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGBjb2RlLWxhbmd1YWdlYCB0b2tlblxuICBcdFx0XHRcdCAqIGlzIG9wdGlvbmFsLiBCdXQgdGhlIGdyYW1tYXIgaXMgZGVmaW5lZCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGNhc2Ugd2UgaGF2ZSB0byBoYW5kbGU6XG4gIFx0XHRcdFx0ICpcbiAgXHRcdFx0XHQgKiB0b2tlbi5jb250ZW50ID0gW1xuICBcdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cInB1bmN0dWF0aW9uXCI+YGBgPC9zcGFuPixcbiAgXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJjb2RlLWxhbmd1YWdlXCI+eHh4eDwvc3Bhbj4sXG4gIFx0XHRcdFx0ICogICAgICdcXG4nLCAvLyBleGFjdGx5IG9uZSBuZXcgbGluZXMgKFxcciBvciBcXG4gb3IgXFxyXFxuKVxuICBcdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cImNvZGUtYmxvY2tcIj4uLi48L3NwYW4+LFxuICBcdFx0XHRcdCAqICAgICAnXFxuJywgLy8gZXhhY3RseSBvbmUgbmV3IGxpbmVzIGFnYWluXG4gIFx0XHRcdFx0ICogICAgIDxzcGFuIGNsYXNzPVwicHVuY3R1YXRpb25cIj5gYGA8L3NwYW4+XG4gIFx0XHRcdFx0ICogXTtcbiAgXHRcdFx0XHQgKi9cblxuICBcdFx0XHRcdHZhciBjb2RlTGFuZyA9IHRva2VuLmNvbnRlbnRbMV07XG4gIFx0XHRcdFx0dmFyIGNvZGVCbG9jayA9IHRva2VuLmNvbnRlbnRbM107XG5cbiAgXHRcdFx0XHRpZiAoY29kZUxhbmcgJiYgY29kZUJsb2NrICYmXG4gIFx0XHRcdFx0XHRjb2RlTGFuZy50eXBlID09PSAnY29kZS1sYW5ndWFnZScgJiYgY29kZUJsb2NrLnR5cGUgPT09ICdjb2RlLWJsb2NrJyAmJlxuICBcdFx0XHRcdFx0dHlwZW9mIGNvZGVMYW5nLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cbiAgXHRcdFx0XHRcdC8vIHRoaXMgbWlnaHQgYmUgYSBsYW5ndWFnZSB0aGF0IFByaXNtIGRvZXMgbm90IHN1cHBvcnRcblxuICBcdFx0XHRcdFx0Ly8gZG8gc29tZSByZXBsYWNlbWVudHMgdG8gc3VwcG9ydCBDKyssIEMjLCBhbmQgRiNcbiAgXHRcdFx0XHRcdHZhciBsYW5nID0gY29kZUxhbmcuY29udGVudC5yZXBsYWNlKC9cXGIjL2csICdzaGFycCcpLnJlcGxhY2UoL1xcYlxcK1xcKy9nLCAncHAnKTtcbiAgXHRcdFx0XHRcdC8vIG9ubHkgdXNlIHRoZSBmaXJzdCB3b3JkXG4gIFx0XHRcdFx0XHRsYW5nID0gKC9bYS16XVtcXHctXSovaS5leGVjKGxhbmcpIHx8IFsnJ10pWzBdLnRvTG93ZXJDYXNlKCk7XG4gIFx0XHRcdFx0XHR2YXIgYWxpYXMgPSAnbGFuZ3VhZ2UtJyArIGxhbmc7XG5cbiAgXHRcdFx0XHRcdC8vIGFkZCBhbGlhc1xuICBcdFx0XHRcdFx0aWYgKCFjb2RlQmxvY2suYWxpYXMpIHtcbiAgXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzID0gW2FsaWFzXTtcbiAgXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvZGVCbG9jay5hbGlhcyA9PT0gJ3N0cmluZycpIHtcbiAgXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzID0gW2NvZGVCbG9jay5hbGlhcywgYWxpYXNdO1xuICBcdFx0XHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzLnB1c2goYWxpYXMpO1xuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuICBcdH0pO1xuXG4gIFx0UHJpc20uaG9va3MuYWRkKCd3cmFwJywgZnVuY3Rpb24gKGVudikge1xuICBcdFx0aWYgKGVudi50eXBlICE9PSAnY29kZS1ibG9jaycpIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgY29kZUxhbmcgPSAnJztcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsID0gZW52LmNsYXNzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gIFx0XHRcdHZhciBjbHMgPSBlbnYuY2xhc3Nlc1tpXTtcbiAgXHRcdFx0dmFyIG1hdGNoID0gL2xhbmd1YWdlLSguKykvLmV4ZWMoY2xzKTtcbiAgXHRcdFx0aWYgKG1hdGNoKSB7XG4gIFx0XHRcdFx0Y29kZUxhbmcgPSBtYXRjaFsxXTtcbiAgXHRcdFx0XHRicmVhaztcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tjb2RlTGFuZ107XG5cbiAgXHRcdGlmICghZ3JhbW1hcikge1xuICBcdFx0XHRpZiAoY29kZUxhbmcgJiYgY29kZUxhbmcgIT09ICdub25lJyAmJiBQcmlzbS5wbHVnaW5zLmF1dG9sb2FkZXIpIHtcbiAgXHRcdFx0XHR2YXIgaWQgPSAnbWQtJyArIG5ldyBEYXRlKCkudmFsdWVPZigpICsgJy0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWUxNik7XG4gIFx0XHRcdFx0ZW52LmF0dHJpYnV0ZXNbJ2lkJ10gPSBpZDtcblxuICBcdFx0XHRcdFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlci5sb2FkTGFuZ3VhZ2VzKGNvZGVMYW5nLCBmdW5jdGlvbiAoKSB7XG4gIFx0XHRcdFx0XHR2YXIgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBcdFx0XHRcdFx0aWYgKGVsZSkge1xuICBcdFx0XHRcdFx0XHRlbGUuaW5uZXJIVE1MID0gUHJpc20uaGlnaGxpZ2h0KGVsZS50ZXh0Q29udGVudCwgUHJpc20ubGFuZ3VhZ2VzW2NvZGVMYW5nXSwgY29kZUxhbmcpO1xuICBcdFx0XHRcdFx0fVxuICBcdFx0XHRcdH0pO1xuICBcdFx0XHR9XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHQvLyByZXZlcnNlIFByaXNtLnV0aWwuZW5jb2RlXG4gIFx0XHRcdHZhciBjb2RlID0gZW52LmNvbnRlbnQucmVwbGFjZSgvJmx0Oy9nLCAnPCcpLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XG5cbiAgXHRcdFx0ZW52LmNvbnRlbnQgPSBQcmlzbS5oaWdobGlnaHQoY29kZSwgZ3JhbW1hciwgY29kZUxhbmcpO1xuICBcdFx0fVxuICBcdH0pO1xuXG4gIFx0UHJpc20ubGFuZ3VhZ2VzLm1kID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duO1xuXG4gIH0oUHJpc20pKTtcblxuICBQcmlzbS5sYW5ndWFnZXMuanVsaWE9IHtcbiAgXHQnY29tbWVudCc6IHtcbiAgXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG4gIFx0XHRsb29rYmVoaW5kOiB0cnVlXG4gIFx0fSxcbiAgXHQnc3RyaW5nJzogLyhcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMi8sXG4gIFx0J2tleXdvcmQnIDogL1xcYig/OmFic3RyYWN0fGJhcmVtb2R1bGV8YmVnaW58Yml0c3R5cGV8YnJlYWt8Y2F0Y2h8Y2NhbGx8Y29uc3R8Y29udGludWV8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGV4cG9ydHxmaW5hbGx5fGZvcnxmdW5jdGlvbnxnbG9iYWx8aWZ8aW1tdXRhYmxlfGltcG9ydHxpbXBvcnRhbGx8aW58bGV0fGxvY2FsfG1hY3JvfG1vZHVsZXxwcmludHxwcmludGxufHF1b3RlfHJldHVybnxzdHJ1Y3R8dHJ5fHR5cGV8dHlwZWFsaWFzfHVzaW5nfHdoaWxlKVxcYi8sXG4gIFx0J2Jvb2xlYW4nIDogL1xcYig/OnRydWV8ZmFsc2UpXFxiLyxcbiAgXHQnbnVtYmVyJyA6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib3hdKT8oPzpbXFxkYS1mXStcXC4/XFxkKnxcXC5cXGQrKSg/OltlZnBdWystXT9cXGQrKT9qPy9pLFxuICBcdCdvcGVyYXRvcic6IC9bLSsqXiXDtyYkXFxcXF09P3xcXC9bXFwvPV0/fCE9Pz0/fFxcfFs9Pl0/fDwoPzo8PT98Wz06XSk/fD4oPzo9fD4+Pz0/KT98PT0/PT98W37iiaDiiaTiiaVdLyxcbiAgXHQncHVuY3R1YXRpb24nIDogL1t7fVtcXF07KCksLjpdLyxcbiAgXHQnY29uc3RhbnQnOiAvXFxiKD86KD86TmFOfEluZikoPzoxNnwzMnw2NCk/KVxcYi9cbiAgfTtcblxuICB2YXIgY3NzID0gXCIvKipcXG4gKiBwcmlzbS5qcyBkZWZhdWx0IHRoZW1lIGZvciBKYXZhU2NyaXB0LCBDU1MgYW5kIEhUTUxcXG4gKiBCYXNlZCBvbiBkYWJibGV0IChodHRwOi8vZGFiYmxldC5jb20pXFxuICogQGF1dGhvciBMZWEgVmVyb3VcXG4gKi9cXG5cXG5jb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0sXFxucHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcblxcdGNvbG9yOiBibGFjaztcXG5cXHRiYWNrZ3JvdW5kOiBub25lO1xcblxcdHRleHQtc2hhZG93OiAwIDFweCB3aGl0ZTtcXG5cXHRmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgJ0FuZGFsZSBNb25vJywgJ1VidW50dSBNb25vJywgbW9ub3NwYWNlO1xcblxcdGZvbnQtc2l6ZTogMWVtO1xcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxuXFx0d2hpdGUtc3BhY2U6IHByZTtcXG5cXHR3b3JkLXNwYWNpbmc6IG5vcm1hbDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxuXFx0d29yZC13cmFwOiBub3JtYWw7XFxuXFx0bGluZS1oZWlnaHQ6IDEuNTtcXG5cXG5cXHQtbW96LXRhYi1zaXplOiA0O1xcblxcdC1vLXRhYi1zaXplOiA0O1xcblxcdHRhYi1zaXplOiA0O1xcblxcblxcdC13ZWJraXQtaHlwaGVuczogbm9uZTtcXG5cXHQtbW96LWh5cGhlbnM6IG5vbmU7XFxuXFx0LW1zLWh5cGhlbnM6IG5vbmU7XFxuXFx0aHlwaGVuczogbm9uZTtcXG59XFxuXFxucHJlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06Oi1tb3otc2VsZWN0aW9uLCBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6Oi1tb3otc2VsZWN0aW9uLFxcbmNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6LW1vei1zZWxlY3Rpb24sIGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6Oi1tb3otc2VsZWN0aW9uIHtcXG5cXHR0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHRiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbn1cXG5cXG5wcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXTo6c2VsZWN0aW9uLCBwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSA6OnNlbGVjdGlvbixcXG5jb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl06OnNlbGVjdGlvbiwgY29kZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIDo6c2VsZWN0aW9uIHtcXG5cXHR0ZXh0LXNoYWRvdzogbm9uZTtcXG5cXHRiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbn1cXG5cXG5AbWVkaWEgcHJpbnQge1xcblxcdGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXG5cXHRwcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0XFx0dGV4dC1zaGFkb3c6IG5vbmU7XFxuXFx0fVxcbn1cXG5cXG4vKiBDb2RlIGJsb2NrcyAqL1xcbnByZVtjbGFzcyo9XFxcImxhbmd1YWdlLVxcXCJdIHtcXG5cXHRwYWRkaW5nOiAxZW07XFxuXFx0bWFyZ2luOiAuNWVtIDA7XFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxufVxcblxcbjpub3QocHJlKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSxcXG5wcmVbY2xhc3MqPVxcXCJsYW5ndWFnZS1cXFwiXSB7XFxuXFx0YmFja2dyb3VuZDogI2Y1ZjJmMDtcXG59XFxuXFxuLyogSW5saW5lIGNvZGUgKi9cXG46bm90KHByZSkgPiBjb2RlW2NsYXNzKj1cXFwibGFuZ3VhZ2UtXFxcIl0ge1xcblxcdHBhZGRpbmc6IC4xZW07XFxuXFx0Ym9yZGVyLXJhZGl1czogLjNlbTtcXG5cXHR3aGl0ZS1zcGFjZTogbm9ybWFsO1xcbn1cXG5cXG4udG9rZW4uY29tbWVudCxcXG4udG9rZW4ucHJvbG9nLFxcbi50b2tlbi5kb2N0eXBlLFxcbi50b2tlbi5jZGF0YSB7XFxuXFx0Y29sb3I6IHNsYXRlZ3JheTtcXG59XFxuXFxuLnRva2VuLnB1bmN0dWF0aW9uIHtcXG5cXHRjb2xvcjogIzk5OTtcXG59XFxuXFxuLnRva2VuLm5hbWVzcGFjZSB7XFxuXFx0b3BhY2l0eTogLjc7XFxufVxcblxcbi50b2tlbi5wcm9wZXJ0eSxcXG4udG9rZW4udGFnLFxcbi50b2tlbi5ib29sZWFuLFxcbi50b2tlbi5udW1iZXIsXFxuLnRva2VuLmNvbnN0YW50LFxcbi50b2tlbi5zeW1ib2wsXFxuLnRva2VuLmRlbGV0ZWQge1xcblxcdGNvbG9yOiAjOTA1O1xcbn1cXG5cXG4udG9rZW4uc2VsZWN0b3IsXFxuLnRva2VuLmF0dHItbmFtZSxcXG4udG9rZW4uc3RyaW5nLFxcbi50b2tlbi5jaGFyLFxcbi50b2tlbi5idWlsdGluLFxcbi50b2tlbi5pbnNlcnRlZCB7XFxuXFx0Y29sb3I6ICM2OTA7XFxufVxcblxcbi50b2tlbi5vcGVyYXRvcixcXG4udG9rZW4uZW50aXR5LFxcbi50b2tlbi51cmwsXFxuLmxhbmd1YWdlLWNzcyAudG9rZW4uc3RyaW5nLFxcbi5zdHlsZSAudG9rZW4uc3RyaW5nIHtcXG5cXHRjb2xvcjogIzlhNmUzYTtcXG5cXHRiYWNrZ3JvdW5kOiBoc2xhKDAsIDAlLCAxMDAlLCAuNSk7XFxufVxcblxcbi50b2tlbi5hdHJ1bGUsXFxuLnRva2VuLmF0dHItdmFsdWUsXFxuLnRva2VuLmtleXdvcmQge1xcblxcdGNvbG9yOiAjMDdhO1xcbn1cXG5cXG4udG9rZW4uZnVuY3Rpb24sXFxuLnRva2VuLmNsYXNzLW5hbWUge1xcblxcdGNvbG9yOiAjREQ0QTY4O1xcbn1cXG5cXG4udG9rZW4ucmVnZXgsXFxuLnRva2VuLmltcG9ydGFudCxcXG4udG9rZW4udmFyaWFibGUge1xcblxcdGNvbG9yOiAjZTkwO1xcbn1cXG5cXG4udG9rZW4uaW1wb3J0YW50LFxcbi50b2tlbi5ib2xkIHtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnRva2VuLml0YWxpYyB7XFxuXFx0Zm9udC1zdHlsZTogaXRhbGljO1xcbn1cXG5cXG4udG9rZW4uZW50aXR5IHtcXG5cXHRjdXJzb3I6IGhlbHA7XFxufVxcblwiO1xuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjb25zdCBUJDQgPSBUZW1wbGF0ZSgnZC1jb2RlJywgYFxuPHN0eWxlPlxuXG5jb2RlIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBwYWRkaW5nOiA0cHggN3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbnByZSBjb2RlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAuMSk7XG4gIHBhZGRpbmc6IDAgMCAwIDM2cHg7XG59XG5cbiR7Y3NzfVxuPC9zdHlsZT5cblxuPGNvZGUgaWQ9XCJjb2RlLWNvbnRhaW5lclwiPjwvY29kZT5cblxuYCk7XG5cbiAgY2xhc3MgQ29kZSBleHRlbmRzIE11dGF0aW5nKFQkNChIVE1MRWxlbWVudCkpIHtcblxuICAgIHJlbmRlckNvbnRlbnQoKSB7XG5cbiAgICAgIC8vIGNoZWNrIGlmIGxhbmd1YWdlIGNhbiBiZSBoaWdobGlnaHRlZFxuICAgICAgdGhpcy5sYW5ndWFnZU5hbWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgnbGFuZ3VhZ2UnKTtcbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZU5hbWUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdZb3UgbmVlZCB0byBwcm92aWRlIGEgbGFuZ3VhZ2UgYXR0cmlidXRlIHRvIHlvdXIgPGQtY29kZT4gYmxvY2sgdG8gbGV0IHVzIGtub3cgaG93IHRvIGhpZ2hsaWdodCB5b3VyIGNvZGU7IGUuZy46XFxuIDxkLWNvZGUgbGFuZ3VhZ2U9XCJweXRob25cIj56ZXJvcyA9IG5wLnplcm9zKHNoYXBlKTwvZC1jb2RlPi4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBwcmlzbS5sYW5ndWFnZXNbdGhpcy5sYW5ndWFnZU5hbWVdO1xuICAgICAgaWYgKGxhbmd1YWdlID09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc3RpbGwgZG9lcyBub3QgeWV0IHN1cHBvcnQgaGlnaGxpZ2h0aW5nIHlvdXIgY29kZSBibG9jayBpbiBcIiR7dGhpcy5sYW5ndWFnZU5hbWV9Jy5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgY29udGVudCA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgICBjb25zdCBjb2RlVGFnID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNjb2RlLWNvbnRhaW5lcicpO1xuXG4gICAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoJ2Jsb2NrJykpIHtcbiAgICAgICAgLy8gbm9ybWFsaXplIHRoZSB0YWIgaW5kZW50c1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9cXG4vLCAnJyk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBjb250ZW50Lm1hdGNoKC9cXHMqLyk7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxuJyArIHRhYnMsICdnJyksICdcXG4nKTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQudHJpbSgpO1xuICAgICAgICAvLyB3cmFwIGNvZGUgYmxvY2sgaW4gcHJlIHRhZyBpZiBuZWVkZWRcbiAgICAgICAgaWYgKGNvZGVUYWcucGFyZW50Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICBjb25zdCBwcmVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucmVtb3ZlQ2hpbGQoY29kZVRhZyk7XG4gICAgICAgICAgcHJlVGFnLmFwcGVuZENoaWxkKGNvZGVUYWcpO1xuICAgICAgICAgIHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChwcmVUYWcpO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgY29kZVRhZy5jbGFzc05hbWUgPSBgbGFuZ3VhZ2UtJHt0aGlzLmxhbmd1YWdlTmFtZX1gO1xuICAgICAgY29kZVRhZy5pbm5lckhUTUwgPSBwcmlzbS5oaWdobGlnaHQoY29udGVudCwgbGFuZ3VhZ2UpO1xuICAgIH1cblxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuXG4gIGNvbnN0IFQkNSA9IFRlbXBsYXRlKCdkLWZvb3Rub3RlJywgYFxuPHN0eWxlPlxuXG5kLW1hdGhbYmxvY2tdIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0IHtcblxufVxuXG5zdXAge1xuICBsaW5lLWhlaWdodDogMWVtO1xuICBmb250LXNpemU6IDAuNzVlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0uNWVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbnNwYW4ge1xuICBjb2xvcjogaHNsYSgyMDYsIDkwJSwgMjAlLCAwLjcpO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5mb290bm90ZS1jb250YWluZXIge1xuICBwYWRkaW5nOiAxMHB4O1xufVxuXG48L3N0eWxlPlxuXG48ZC1ob3Zlci1ib3g+XG4gIDxkaXYgY2xhc3M9XCJmb290bm90ZS1jb250YWluZXJcIj5cbiAgICA8c2xvdCBpZD1cInNsb3RcIj48L3Nsb3Q+XG4gIDwvZGl2PlxuPC9kLWhvdmVyLWJveD5cblxuPHN1cD5cbiAgPHNwYW4gaWQ9XCJmbi1cIiBkYXRhLWhvdmVyLXJlZj1cIlwiPjwvc3Bhbj5cbjwvc3VwPlxuXG5gKTtcblxuICBjbGFzcyBGb290bm90ZSBleHRlbmRzIFQkNShIVE1MRWxlbWVudCkge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuXG4gICAgICBjb25zdCBvcHRpb25zID0ge2NoaWxkTGlzdDogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSwgc3VidHJlZTogdHJ1ZX07XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMubm90aWZ5KTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgbm90aWZ5KCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgZGV0YWlsOiB0aGlzLCBidWJibGVzOiB0cnVlIH07XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25Gb290bm90ZUNoYW5nZWQnLCBvcHRpb25zKTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgLy8gbGlzdGVuIGFuZCBub3RpZnkgYWJvdXQgY2hhbmdlcyB0byBzbG90dGVkIGNvbnRlbnRcbiAgICAgIC8vIGNvbnN0IHNsb3QgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3Nsb3QnKTtcbiAgICAgIC8vIGNvbnNvbGUud2FybihzbG90LnRleHRDb250ZW50KTtcbiAgICAgIC8vIHNsb3QuYWRkRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMubm90aWZ5KTtcbiAgICAgIHRoaXMuaG92ZXJCb3ggPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignZC1ob3Zlci1ib3gnKTtcbiAgICAgIHdpbmRvdy5jdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnZC1ob3Zlci1ib3gnKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5ob3ZlckJveC5saXN0ZW4odGhpcyk7XG4gICAgICB9KTtcbiAgICAgIC8vIGNyZWF0ZSBudW1lcmljIElEXG4gICAgICBGb290bm90ZS5jdXJyZW50Rm9vdG5vdGVJZCArPSAxO1xuICAgICAgY29uc3QgSWRTdHJpbmcgPSBGb290bm90ZS5jdXJyZW50Rm9vdG5vdGVJZC50b1N0cmluZygpO1xuICAgICAgdGhpcy5yb290Lmhvc3QuaWQgPSAnZC1mb290bm90ZS0nICsgSWRTdHJpbmc7XG5cbiAgICAgIC8vIHNldCB1cCBoaWRkZW4gaG92ZXIgYm94XG4gICAgICBjb25zdCBpZCA9ICdkdC1mbi1ob3Zlci1ib3gtJyArIElkU3RyaW5nO1xuICAgICAgdGhpcy5ob3ZlckJveC5pZCA9IGlkO1xuXG4gICAgICAvLyBzZXQgdXAgdmlzaWJsZSBmb290bm90ZSBtYXJrZXJcbiAgICAgIGNvbnN0IHNwYW4gPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignI2ZuLScpO1xuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2ZuLScgKyBJZFN0cmluZyk7XG4gICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1ob3Zlci1yZWYnLCBpZCk7XG4gICAgICBzcGFuLnRleHRDb250ZW50ID0gSWRTdHJpbmc7XG4gICAgfVxuXG4gIH1cblxuICBGb290bm90ZS5jdXJyZW50Rm9vdG5vdGVJZCA9IDA7XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuXG4gIGNvbnN0IFQkNiA9IFRlbXBsYXRlKCdkLWZvb3Rub3RlLWxpc3QnLCBgXG48c3R5bGU+XG5cbmQtZm9vdG5vdGUtbGlzdCB7XG4gIGNvbnRhaW46IGxheW91dCBzdHlsZTtcbn1cblxuZC1mb290bm90ZS1saXN0ID4gKiB7XG4gIGdyaWQtY29sdW1uOiB0ZXh0O1xufVxuXG5kLWZvb3Rub3RlLWxpc3QgYS5mb290bm90ZS1iYWNrbGluayB7XG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuMyk7XG4gIHBhZGRpbmctbGVmdDogMC41ZW07XG59XG5cbjwvc3R5bGU+XG5cbjxoMz5Gb290bm90ZXM8L2gzPlxuPG9sPjwvb2w+XG5gLCBmYWxzZSk7XG5cbiAgY2xhc3MgRm9vdG5vdGVMaXN0IGV4dGVuZHMgVCQ2KEhUTUxFbGVtZW50KSB7XG5cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cbiAgICAgIHRoaXMubGlzdCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCdvbCcpO1xuICAgICAgLy8gZm9vdG5vdGVzIGxpc3QgaXMgaW5pdGlhbGx5IGhpZGRlblxuICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAvLyBsb29rIHRocm91Z2ggZG9jdW1lbnQgYW5kIHJlZ2lzdGVyIGV4aXN0aW5nIGZvb3Rub3Rlc1xuICAgICAgLy8gU3RvcmUuc3Vic2NyaWJlVG8oJ2Zvb3Rub3RlcycsIChmb290bm90ZSkgPT4ge1xuICAgICAgLy8gICB0aGlzLnJlbmRlckZvb3Rub3RlKGZvb3Rub3RlKTtcbiAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8gYWNjZXB0IGluZGl2aWR1YWwgZm9vdG5vdGVzP1xuICAgIHNldCBmb290bm90ZXMoZm9vdG5vdGVzKSB7XG4gICAgICB0aGlzLmxpc3QuaW5uZXJIVE1MID0gJyc7XG4gICAgICBpZiAoZm9vdG5vdGVzLmxlbmd0aCkge1xuICAgICAgICAvLyBlbnN1cmUgZm9vdG5vdGUgbGlzdCBpcyB2aXNpYmxlXG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cbiAgICAgICAgZm9yIChjb25zdCBmb290bm90ZSBvZiBmb290bm90ZXMpIHtcbiAgICAgICAgICAvLyBjb25zdHJ1Y3QgYW5kIGFwcGVuZCBsaXN0IGl0ZW0gdG8gc2hvdyBmb290bm90ZVxuICAgICAgICAgIGNvbnN0IGxpc3RJdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgICBsaXN0SXRlbS5pZCA9IGZvb3Rub3RlLmlkICsgJy1saXN0aW5nJztcbiAgICAgICAgICBsaXN0SXRlbS5pbm5lckhUTUwgPSBmb290bm90ZS5pbm5lckhUTUw7XG5cbiAgICAgICAgICBjb25zdCBiYWNrbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICBiYWNrbGluay5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2Zvb3Rub3RlLWJhY2tsaW5rJyk7XG4gICAgICAgICAgYmFja2xpbmsudGV4dENvbnRlbnQgPSAnW+KGqV0nO1xuICAgICAgICAgIGJhY2tsaW5rLmhyZWYgPSAnIycgKyBmb290bm90ZS5pZDtcblxuICAgICAgICAgIGxpc3RJdGVtLmFwcGVuZENoaWxkKGJhY2tsaW5rKTtcbiAgICAgICAgICB0aGlzLmxpc3QuYXBwZW5kQ2hpbGQobGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbnN1cmUgZm9vdG5vdGUgbGlzdCBpcyBpbnZpc2libGVcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgY29uc3QgVCQ3ID0gVGVtcGxhdGUoJ2QtaG92ZXItYm94JywgYFxuPHN0eWxlPlxuXG46aG9zdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGxlZnQ6IDBweDtcbiAgei1pbmRleDogMTAwMDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWxcbn1cblxuLmNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDcwNHB4O1xuICBtYXgtd2lkdGg6IDEwMHZ3O1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLnBhbmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuOTUpO1xuICBib3gtc2hhZG93OiAwIDAgN3B4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xuICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpO1xufVxuXG48L3N0eWxlPlxuXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJwYW5lbFwiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgPC9kaXY+XG48L2Rpdj5cbmApO1xuXG4gIGNsYXNzIEhvdmVyQm94IGV4dGVuZHMgVCQ3KEhUTUxFbGVtZW50KSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cbiAgICB9XG5cbiAgICBsaXN0ZW4oZWxlbWVudCkge1xuICAgICAgLy8gY29uc29sZS5sb2coZWxlbWVudClcbiAgICAgIHRoaXMuYmluZERpdkV2ZW50cyh0aGlzKTtcbiAgICAgIHRoaXMuYmluZFRyaWdnZXJFdmVudHMoZWxlbWVudCk7XG4gICAgICAvLyB0aGlzLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgfVxuXG4gICAgYmluZERpdkV2ZW50cyhlbGVtZW50KSB7XG4gICAgICAvLyBGb3IgbWljZSwgc2FtZSBiZWhhdmlvciBhcyBob3ZlcmluZyBvbiBsaW5rc1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB0aGlzLnNob3dBdE5vZGUoZWxlbWVudCk7XG4gICAgICAgIHRoaXMuc3RvcFRpbWVvdXQoKTtcbiAgICAgIH0pO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5leHRlbmRUaW1lb3V0KDUwMCk7XG4gICAgICB9KTtcbiAgICAgIC8vIERvbid0IHRyaWdnZXIgYm9keSB0b3VjaHN0YXJ0IGV2ZW50IHdoZW4gdG91Y2hpbmcgd2l0aGluIGJveFxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSwge3Bhc3NpdmU6IHRydWV9KTtcbiAgICAgIC8vIENsb3NlIGJveCB3aGVuIHRvdWNoaW5nIG91dHNpZGUgYm94XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfSwge3Bhc3NpdmU6IHRydWV9KTtcbiAgICB9XG5cbiAgICBiaW5kVHJpZ2dlckV2ZW50cyhub2RlKSB7XG4gICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLnNob3dBdE5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wVGltZW91dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXh0ZW5kVGltZW91dCgzMDApO1xuICAgICAgfSk7XG5cbiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93QXROb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvbid0IHRyaWdnZXIgYm9keSB0b3VjaHN0YXJ0IGV2ZW50IHdoZW4gdG91Y2hpbmcgbGlua1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0sIHtwYXNzaXZlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgc2hvdyhwb3NpdGlvbikge1xuICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAvLyAxMHB4IGV4dHJhIG9mZnNldCBmcm9tIGVsZW1lbnRcbiAgICAgIHRoaXMuc3R5bGUudG9wID0gTWF0aC5yb3VuZChwb3NpdGlvblsxXSArIDEwKSArICdweCc7XG4gICAgfVxuXG4gICAgc2hvd0F0Tm9kZShub2RlKSB7XG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvb2Zmc2V0VG9wXG4gICAgICBjb25zdCBiYm94ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuc2hvdyhbbm9kZS5vZmZzZXRMZWZ0ICsgYmJveC53aWR0aCwgbm9kZS5vZmZzZXRUb3AgKyBiYm94LmhlaWdodF0pO1xuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuc3RvcFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBzdG9wVGltZW91dCgpIHtcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXh0ZW5kVGltZW91dCh0aW1lKSB7XG4gICAgICB0aGlzLnN0b3BUaW1lb3V0KCk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9LCB0aW1lKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcbiAgLy9cbiAgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgLy9cbiAgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAgLy9cbiAgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4gIGNsYXNzIFRpdGxlIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgIHN0YXRpYyBnZXQgaXMoKSB7IHJldHVybiAnZC10aXRsZSc7IH1cbiAgfVxuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjb25zdCBUJDggPSBUZW1wbGF0ZSgnZC1yZWZlcmVuY2VzJywgYFxuPHN0eWxlPlxuZC1yZWZlcmVuY2VzIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG48L3N0eWxlPlxuYCwgZmFsc2UpO1xuXG4gIGNsYXNzIFJlZmVyZW5jZXMgZXh0ZW5kcyBUJDgoSFRNTEVsZW1lbnQpIHtcblxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuICAvL1xuICAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAvL1xuICAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAvL1xuICAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbiAgY2xhc3MgVE9DIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkLXRvYyc7IH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmdldEF0dHJpYnV0ZSgncHJlcmVuZGVyZWQnKSkge1xuICAgICAgICB3aW5kb3cub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFydGljbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkLWFydGljbGUnKTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5ncyA9IGFydGljbGUucXVlcnlTZWxlY3RvckFsbCgnaDIsIGgzJyk7XG4gICAgICAgICAgcmVuZGVyVE9DKHRoaXMsIGhlYWRpbmdzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlclRPQyhlbGVtZW50LCBoZWFkaW5ncykge1xuXG4gICAgbGV0IFRvQyA9YFxuICA8c3R5bGU+XG5cbiAgZC10b2Mge1xuICAgIGNvbnRhaW46IGxheW91dCBzdHlsZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuXG4gIGQtdG9jIHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cblxuICBkLXRvYyB1bCA+IHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gIH1cblxuICBkLXRvYyBhIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gIDwvc3R5bGU+XG4gIDxuYXYgcm9sZT1cIm5hdmlnYXRpb25cIiBjbGFzcz1cInRhYmxlLW9mLWNvbnRlbnRzXCI+PC9uYXY+XG4gIDxoMj5UYWJsZSBvZiBjb250ZW50czwvaDI+XG4gIDx1bD5gO1xuXG4gICAgZm9yIChjb25zdCBlbCBvZiBoZWFkaW5ncykge1xuICAgICAgLy8gc2hvdWxkIGVsZW1lbnQgYmUgaW5jbHVkZWQgaW4gVE9DP1xuICAgICAgY29uc3QgaXNJblRpdGxlID0gZWwucGFyZW50RWxlbWVudC50YWdOYW1lID09ICdELVRJVExFJztcbiAgICAgIGNvbnN0IGlzRXhjZXB0aW9uID0gZWwuZ2V0QXR0cmlidXRlKCduby10b2MnKTtcbiAgICAgIGlmIChpc0luVGl0bGUgfHwgaXNFeGNlcHRpb24pIGNvbnRpbnVlO1xuICAgICAgLy8gY3JlYXRlIFRPQyBlbnRyeVxuICAgICAgY29uc3QgdGl0bGUgPSBlbC50ZXh0Q29udGVudDtcbiAgICAgIGNvbnN0IGxpbmsgPSAnIycgKyBlbC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG5cbiAgICAgIGxldCBuZXdMaW5lID0gJzxsaT4nICsgJzxhIGhyZWY9XCInICsgbGluayArICdcIj4nICsgdGl0bGUgKyAnPC9hPicgKyAnPC9saT4nO1xuICAgICAgaWYgKGVsLnRhZ05hbWUgPT0gJ0gzJykge1xuICAgICAgICBuZXdMaW5lID0gJzx1bD4nICsgbmV3TGluZSArICc8L3VsPic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdMaW5lICs9ICc8YnI+JztcbiAgICAgIH1cbiAgICAgIFRvQyArPSBuZXdMaW5lO1xuXG4gICAgfVxuXG4gICAgVG9DICs9ICc8L3VsPjwvbmF2Pic7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBUb0M7XG4gIH1cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG4gIC8vXG4gIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIC8vXG4gIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gIC8vXG4gIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuICAvLyBGaWd1cmVcbiAgLy9cbiAgLy8gZC1maWd1cmUgcHJvdmlkZXMgYSBzdGF0ZS1tYWNoaW5lIG9mIHZpc2liaWxpdHkgZXZlbnRzOlxuICAvL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGwgb3V0IG9mIHZpZXdcbiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0rXG4gIC8vICAgKmRvIHdvcmsgaGVyZSogICAgICAgIHwgICAgICAgICAgICAgICAgfFxuICAvLyArLS0tLS0tLS0tLS0tLS0tLSsgICAgKy0rLS0tLS0tLS0tKyAgICArLXYtLS0tLS0tLS0rXG4gIC8vIHwgcmVhZHkgICAgICAgICAgKy0tLS0+IG9uc2NyZWVuICB8ICAgIHwgb2Zmc2NyZWVuIHxcbiAgLy8gKy0tLS0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS1eLSsgICAgKy0tLS0tLS0tLSstK1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfFxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tK1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGwgaW50byB2aWV3XG4gIC8vXG5cbiAgY2xhc3MgRmlndXJlIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkLWZpZ3VyZSc7IH1cblxuICAgIHN0YXRpYyBnZXQgcmVhZHlRdWV1ZSgpIHtcbiAgICAgIGlmICghRmlndXJlLl9yZWFkeVF1ZXVlKSB7XG4gICAgICAgIEZpZ3VyZS5fcmVhZHlRdWV1ZSA9IFtdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEZpZ3VyZS5fcmVhZHlRdWV1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYWRkVG9SZWFkeVF1ZXVlKGZpZ3VyZSkge1xuICAgICAgaWYgKEZpZ3VyZS5yZWFkeVF1ZXVlLmluZGV4T2YoZmlndXJlKSA9PT0gLTEpIHtcbiAgICAgICAgRmlndXJlLnJlYWR5UXVldWUucHVzaChmaWd1cmUpO1xuICAgICAgICBGaWd1cmUucnVuUmVhZHlRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBydW5SZWFkeVF1ZXVlKCkge1xuICAgICAgLy8gY29uc29sZS5sb2coXCJDaGVja2luZyB0byBydW4gcmVhZHlRdWV1ZSwgbGVuZ3RoOiBcIiArIEZpZ3VyZS5yZWFkeVF1ZXVlLmxlbmd0aCArIFwiLCBzY3JvbGxpbmc6IFwiICsgRmlndXJlLmlzU2Nyb2xsaW5nKTtcbiAgICAgIC8vIGlmIChGaWd1cmUuaXNTY3JvbGxpbmcpIHJldHVybjtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUnVubmluZyByZWFkeSBRdWV1ZVwiKTtcbiAgICAgIGNvbnN0IGZpZ3VyZSA9IEZpZ3VyZS5yZWFkeVF1ZXVlXG4gICAgICAgIC5zb3J0KChhLGIpID0+IGEuX3NlZW5PblNjcmVlbiAtIGIuX3NlZW5PblNjcmVlbiApXG4gICAgICAgIC5maWx0ZXIoKGZpZ3VyZSkgPT4gIWZpZ3VyZS5fcmVhZHkpXG4gICAgICAgIC5wb3AoKTtcbiAgICAgIGlmIChmaWd1cmUpIHtcbiAgICAgICAgZmlndXJlLnJlYWR5KCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShGaWd1cmUucnVuUmVhZHlRdWV1ZSk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICAvLyBkZWJ1Z2dlclxuICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuX29uc2NyZWVuID0gZmFsc2U7XG4gICAgICB0aGlzLl9vZmZzY3JlZW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgdGhpcy5sb2Fkc1doaWxlU2Nyb2xsaW5nID0gdGhpcy5oYXNBdHRyaWJ1dGUoJ2xvYWRzV2hpbGVTY3JvbGxpbmcnKTtcbiAgICAgIEZpZ3VyZS5tYXJnaW5PYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xuICAgICAgRmlndXJlLmRpcmVjdE9ic2VydmVyLm9ic2VydmUodGhpcyk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBGaWd1cmUubWFyZ2luT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMpO1xuICAgICAgRmlndXJlLmRpcmVjdE9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBXZSB1c2UgdHdvIHNlcGFyYXRlIG9ic2VydmVyczpcbiAgICAvLyBPbmUgd2l0aCBhbiBleHRyYSAxMDAwcHggbWFyZ2luIHRvIHdhcm4gaWYgdGhlIHZpZXdwb2ludCBnZXRzIGNsb3NlLFxuICAgIC8vIEFuZCBvbmUgZm9yIHRoZSBhY3R1YWwgb24vb2ZmIHNjcmVlbiBldmVudHNcblxuICAgIHN0YXRpYyBnZXQgbWFyZ2luT2JzZXJ2ZXIoKSB7XG4gICAgICBpZiAoIUZpZ3VyZS5fbWFyZ2luT2JzZXJ2ZXIpIHtcbiAgICAgICAgLy8gaWYgKCEoJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpKSB7XG4gICAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdubyBpbnRlcnNjZXRpb25vYmJzZXJ2ZXIhJyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IE1hdGguZmxvb3IoMiAqIHZpZXdwb3J0SGVpZ2h0KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtyb290TWFyZ2luOiBtYXJnaW4gKyAncHggMHB4ICcgKyBtYXJnaW4gKyAncHggMHB4JywgdGhyZXNob2xkOiAwLjAxfTtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBGaWd1cmUuZGlkT2JzZXJ2ZU1hcmdpbkludGVyc2VjdGlvbjtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgICAgICBGaWd1cmUuX21hcmdpbk9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gRmlndXJlLl9tYXJnaW5PYnNlcnZlcjtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlkT2JzZXJ2ZU1hcmdpbkludGVyc2VjdGlvbihlbnRyaWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgZmlndXJlID0gZW50cnkudGFyZ2V0O1xuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgJiYgIWZpZ3VyZS5fcmVhZHkpIHtcbiAgICAgICAgICBGaWd1cmUuYWRkVG9SZWFkeVF1ZXVlKGZpZ3VyZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IGRpcmVjdE9ic2VydmVyKCkge1xuICAgICAgaWYgKCFGaWd1cmUuX2RpcmVjdE9ic2VydmVyKSB7XG4gICAgICAgIEZpZ3VyZS5fZGlyZWN0T2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgICAgRmlndXJlLmRpZE9ic2VydmVEaXJlY3RJbnRlcnNlY3Rpb24sIHtcbiAgICAgICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLCB0aHJlc2hvbGQ6IFswLCAxLjBdLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBGaWd1cmUuX2RpcmVjdE9ic2VydmVyO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaWRPYnNlcnZlRGlyZWN0SW50ZXJzZWN0aW9uKGVudHJpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBmaWd1cmUgPSBlbnRyeS50YXJnZXQ7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIGZpZ3VyZS5fc2Vlbk9uU2NyZWVuID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAvLyBpZiAoIWZpZ3VyZS5fcmVhZHkpIHsgZmlndXJlLnJlYWR5KCk7IH1cbiAgICAgICAgICBpZiAoZmlndXJlLl9vZmZzY3JlZW4pIHsgZmlndXJlLm9uc2NyZWVuKCk7IH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlndXJlLl9vbnNjcmVlbikgeyBmaWd1cmUub2Zmc2NyZWVuKCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgdGhhdCByZWdpc3RlcmVkIGxhdGUsIHRvbzpcblxuICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgICAgc3VwZXIuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIC8vIGlmIHdlIGhhZCBhbHJlYWR5IGRpc3BhdGNoZWQgc29tZXRoaW5nIHdoaWxlIHByZXN1bWluZ2x5IG5vIG9uZSB3YXMgbGlzdGVuaW5nLCB3ZSBkbyBzbyBhZ2FpblxuICAgICAgLy8gZGVidWdnZXJcbiAgICAgIGlmIChldmVudE5hbWUgPT09ICdyZWFkeScpIHtcbiAgICAgICAgaWYgKEZpZ3VyZS5yZWFkeVF1ZXVlLmluZGV4T2YodGhpcykgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTtcbiAgICAgICAgICBGaWd1cmUucnVuUmVhZHlRdWV1ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnROYW1lID09PSAnb25zY3JlZW4nKSB7XG4gICAgICAgIHRoaXMub25zY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDdXN0b20gRXZlbnRzXG5cbiAgICByZWFkeSgpIHtcbiAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICB0aGlzLl9yZWFkeSA9IHRydWU7XG4gICAgICBGaWd1cmUubWFyZ2luT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMpO1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlYWR5Jyk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uc2NyZWVuKCkge1xuICAgICAgdGhpcy5fb25zY3JlZW4gPSB0cnVlO1xuICAgICAgdGhpcy5fb2Zmc2NyZWVuID0gZmFsc2U7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb25zY3JlZW4nKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgb2Zmc2NyZWVuKCkge1xuICAgICAgdGhpcy5fb25zY3JlZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuX29mZnNjcmVlbiA9IHRydWU7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnb2Zmc2NyZWVuJyk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICB9XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICBGaWd1cmUuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICBsZXQgdGltZW91dDtcbiAgICBjb25zdCByZXNldFRpbWVyID0gKCkgPT4ge1xuICAgICAgRmlndXJlLmlzU2Nyb2xsaW5nID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgRmlndXJlLmlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgIEZpZ3VyZS5ydW5SZWFkeVF1ZXVlKCk7XG4gICAgICB9LCA1MDApO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHJlc2V0VGltZXIsIHRydWUpO1xuXG4gIH1cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgLy8gVGhpcyBvdmVybGF5IGlzIG5vdCBzZWN1cmUuXG4gIC8vIEl0IGlzIG9ubHkgbWVhbnQgYXMgYSBzb2NpYWwgZGV0ZXJyZW50LlxuXG4gIGNvbnN0IHByb2R1Y3Rpb25Ib3N0bmFtZSA9ICdkaXN0aWxsLnB1Yic7XG4gIGNvbnN0IFQkOSA9IFRlbXBsYXRlKCdkLWludGVyc3RpdGlhbCcsIGBcbjxzdHlsZT5cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG5cbiAgb3BhY2l0eTogMTtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDcgLyogTWF4SW50MzIgKi9cblxufVxuXG4uY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDQyMHB4O1xuICBwYWRkaW5nOiAyZW07XG59XG5cbmgxIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogaHNsKDAsMTAwJSw0MCUpO1xuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1jb2xvcjogaHNsKDAsMTAwJSw0MCUpO1xuICBtYXJnaW4tYm90dG9tOiAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjVlbTtcbn1cblxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgLW1vei1ib3gtc2hhZG93OiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IG5vbmU7XG4gIC1tb3otYm9yZGVyLXJhZGl1czogbm9uZTtcbiAgLW1zLWJvcmRlci1yYWRpdXM6IG5vbmU7XG4gIC1vLWJvcmRlci1yYWRpdXM6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG5cbiAgZm9udC1zaXplOiAxOHB4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICB3aWR0aDogMjUlO1xuICBwYWRkaW5nOiAxMHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDJweCAjOTk5O1xuICB0cmFuc2l0aW9uOiBib3JkZXIgLjNzO1xufVxuXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIl06Zm9jdXMge1xuICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzMzMztcbn1cblxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLndyb25nIHtcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMnB4IGhzbCgwLDEwMCUsNDAlKTtcbn1cblxucCBzbWFsbCB7XG4gIGNvbG9yOiAjODg4O1xufVxuXG4ubG9nbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiAxLjVlbTtcbiAgbWFyZ2luLWJvdHRvbTogM2VtO1xufVxuXG4ubG9nbyBzdmcge1xuICB3aWR0aDogMzZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDZweDtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5sb2dvIHN2ZyBwYXRoIHtcbiAgZmlsbDogbm9uZTtcbiAgc3Ryb2tlOiBibGFjaztcbiAgc3Ryb2tlLXdpZHRoOiAycHg7XG59XG5cbjwvc3R5bGU+XG5cbjxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICA8aDE+VGhpcyBhcnRpY2xlIGlzIGluIHJldmlldy48L2gxPlxuICAgIDxwPkRvIG5vdCBzaGFyZSB0aGlzIFVSTCBvciB0aGUgY29udGVudHMgb2YgdGhpcyBhcnRpY2xlLiBUaGFuayB5b3UhPC9wPlxuICAgIDxpbnB1dCBpZD1cImludGVyc3RpdGlhbC1wYXNzd29yZC1pbnB1dFwiIHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIGF1dG9mb2N1cy8+XG4gICAgPHA+PHNtYWxsPkVudGVyIHRoZSBwYXNzd29yZCB3ZSBzaGFyZWQgd2l0aCB5b3UgYXMgcGFydCBvZiB0aGUgcmV2aWV3IHByb2Nlc3MgdG8gdmlldyB0aGUgYXJ0aWNsZS48L3NtYWxsPjwvcD5cbiAgPC9kaXY+XG48L2Rpdj5cbmApO1xuXG4gIGNsYXNzIEludGVyc3RpdGlhbCBleHRlbmRzIFQkOShIVE1MRWxlbWVudCkge1xuXG4gICAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRSZW1vdmVTZWxmKCkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFzc3dvcmRJbnB1dCA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKCcjaW50ZXJzdGl0aWFsLXBhc3N3b3JkLWlucHV0Jyk7XG4gICAgICAgIHBhc3N3b3JkSW5wdXQub25pbnB1dCA9IChldmVudCkgPT4gdGhpcy5wYXNzd29yZENoYW5nZWQoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhc3N3b3JkQ2hhbmdlZChldmVudCkge1xuICAgICAgY29uc3QgZW50ZXJlZCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGlmIChlbnRlcmVkID09PSB0aGlzLnBhc3N3b3JkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDb3JyZWN0IHBhc3N3b3JkIGVudGVyZWQuJyk7XG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgaWYgKHR5cGVvZihTdG9yYWdlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnU2F2ZWQgdGhhdCBjb3JyZWN0IHBhc3N3b3JkIHdhcyBlbnRlcmVkLicpO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSWRlbnRpZmllcigpLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2hvdWxkUmVtb3ZlU2VsZigpIHtcbiAgICAgIC8vIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGluIHByb2R1Y3Rpb25cbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBwcm9kdWN0aW9uSG9zdG5hbWUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnRlcnN0aXRpYWwgZm91bmQgb24gcHJvZHVjdGlvbiwgaGlkaW5nIGl0LicpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gc2hvdWxkIG9ubHkgaGF2ZSB0byBlbnRlciBwYXNzd29yZCBvbmNlXG4gICAgICBpZiAodHlwZW9mKFN0b3JhZ2UpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VJZGVudGlmaWVyKCkpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnTG9hZGVkIHRoYXQgY29ycmVjdCBwYXNzd29yZCB3YXMgZW50ZXJlZCBiZWZvcmU7IHNraXBwaW5nIGludGVyc3RpdGlhbC4nKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlLCBsZWF2ZSB2aXNpYmxlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlSWRlbnRpZmllcigpIHtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXN0aWxsLWRyYWZ0cyc7XG4gICAgICBjb25zdCBzdWZmaXggPSAnaW50ZXJzdGl0aWFsLXBhc3N3b3JkLWNvcnJlY3QnO1xuICAgICAgcmV0dXJuIHByZWZpeCArICh3aW5kb3cgPyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgOiAnLScpICsgc3VmZml4XG4gICAgfVxuXG4gIH1cblxuICBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpc2VjdG9yKGNvbXBhcmUpIHtcbiAgICBpZiAoY29tcGFyZS5sZW5ndGggPT09IDEpIGNvbXBhcmUgPSBhc2NlbmRpbmdDb21wYXJhdG9yKGNvbXBhcmUpO1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsbztcbiAgICAgIH0sXG4gICAgICByaWdodDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcbiAgICAgICAgICBlbHNlIGxvID0gbWlkICsgMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG87XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoZikge1xuICAgIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgICByZXR1cm4gYXNjZW5kaW5nKGYoZCksIHgpO1xuICAgIH07XG4gIH1cblxuICB2YXIgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbiAgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuXG4gIGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICB2YXIgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIHZhciByZXZlcnNlLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4sXG4gICAgICAgIHRpY2tzLFxuICAgICAgICBzdGVwO1xuXG4gICAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gICAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gICAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcbiAgICBpZiAoKHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkpID09PSAwIHx8ICFpc0Zpbml0ZShzdGVwKSkgcmV0dXJuIFtdO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAvIHN0ZXApO1xuICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAvIHN0ZXApO1xuICAgICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAoc3RhcnQgKyBpKSAqIHN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wICogc3RlcCk7XG4gICAgICB0aWNrcyA9IG5ldyBBcnJheShuID0gTWF0aC5jZWlsKHN0YXJ0IC0gc3RvcCArIDEpKTtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgICB9XG5cbiAgICBpZiAocmV2ZXJzZSkgdGlja3MucmV2ZXJzZSgpO1xuXG4gICAgcmV0dXJuIHRpY2tzO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcCkgLyBNYXRoLkxOMTApLFxuICAgICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICAgIHJldHVybiBwb3dlciA+PSAwXG4gICAgICAgID8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSkgKiBNYXRoLnBvdygxMCwgcG93ZXIpXG4gICAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgICBzdGVwMSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXAwKSAvIE1hdGguTE4xMCkpLFxuICAgICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gICAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTUpIHN0ZXAxICo9IDU7XG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gICAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB0aGlzLnJhbmdlKHJhbmdlKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07XG4gICAgcmV0dXJuIHByb3RvdHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbG9yKCkge31cblxuICB2YXIgZGFya2VyID0gMC43O1xuICB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG4gIHZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICAgIHJlTiA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgICByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVJLCByZUksIHJlSV0gKyBcIlxcXFwpJFwiKSxcbiAgICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbiAgdmFyIG5hbWVkID0ge1xuICAgIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gICAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgICBhcXVhOiAweDAwZmZmZixcbiAgICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgICBhenVyZTogMHhmMGZmZmYsXG4gICAgYmVpZ2U6IDB4ZjVmNWRjLFxuICAgIGJpc3F1ZTogMHhmZmU0YzQsXG4gICAgYmxhY2s6IDB4MDAwMDAwLFxuICAgIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgICBibHVlOiAweDAwMDBmZixcbiAgICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgICBicm93bjogMHhhNTJhMmEsXG4gICAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICAgIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICAgIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gICAgY29yYWw6IDB4ZmY3ZjUwLFxuICAgIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gICAgY3JpbXNvbjogMHhkYzE0M2MsXG4gICAgY3lhbjogMHgwMGZmZmYsXG4gICAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICAgIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgICBkYXJrZ3JheTogMHhhOWE5YTksXG4gICAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgICBkYXJrZ3JleTogMHhhOWE5YTksXG4gICAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gICAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICAgIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICAgIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICAgIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICAgIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICAgIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gICAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gICAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gICAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gICAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gICAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gICAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICAgIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICAgIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gICAgZnVjaHNpYTogMHhmZjAwZmYsXG4gICAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgICBnb2xkOiAweGZmZDcwMCxcbiAgICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICAgIGdyYXk6IDB4ODA4MDgwLFxuICAgIGdyZWVuOiAweDAwODAwMCxcbiAgICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gICAgZ3JleTogMHg4MDgwODAsXG4gICAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICAgIGhvdHBpbms6IDB4ZmY2OWI0LFxuICAgIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gICAgaW5kaWdvOiAweDRiMDA4MixcbiAgICBpdm9yeTogMHhmZmZmZjAsXG4gICAga2hha2k6IDB4ZjBlNjhjLFxuICAgIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICAgIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gICAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICAgIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICAgIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gICAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gICAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gICAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gICAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICAgIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gICAgbGltZTogMHgwMGZmMDAsXG4gICAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgICBsaW5lbjogMHhmYWYwZTYsXG4gICAgbWFnZW50YTogMHhmZjAwZmYsXG4gICAgbWFyb29uOiAweDgwMDAwMCxcbiAgICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICAgIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gICAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gICAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICAgIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gICAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gICAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICAgIG5hdnk6IDB4MDAwMDgwLFxuICAgIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICAgIG9saXZlOiAweDgwODAwMCxcbiAgICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICAgIG9yYW5nZTogMHhmZmE1MDAsXG4gICAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICAgIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICAgIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gICAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gICAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gICAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gICAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgICBwZXJ1OiAweGNkODUzZixcbiAgICBwaW5rOiAweGZmYzBjYixcbiAgICBwbHVtOiAweGRkYTBkZCxcbiAgICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgICBwdXJwbGU6IDB4ODAwMDgwLFxuICAgIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICAgIHJlZDogMHhmZjAwMDAsXG4gICAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICAgIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgICBzYWxtb246IDB4ZmE4MDcyLFxuICAgIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICAgIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gICAgc2llbm5hOiAweGEwNTIyZCxcbiAgICBzaWx2ZXI6IDB4YzBjMGMwLFxuICAgIHNreWJsdWU6IDB4ODdjZWViLFxuICAgIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gICAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICAgIHNub3c6IDB4ZmZmYWZhLFxuICAgIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICAgIHRhbjogMHhkMmI0OGMsXG4gICAgdGVhbDogMHgwMDgwODAsXG4gICAgdGhpc3RsZTogMHhkOGJmZDgsXG4gICAgdG9tYXRvOiAweGZmNjM0NyxcbiAgICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICAgIHZpb2xldDogMHhlZTgyZWUsXG4gICAgd2hlYXQ6IDB4ZjVkZWIzLFxuICAgIHdoaXRlOiAweGZmZmZmZixcbiAgICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICAgIHllbGxvd2dyZWVuOiAweDlhY2QzMlxuICB9O1xuXG4gIGRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsIHRoaXMsIGNoYW5uZWxzKTtcbiAgICB9LFxuICAgIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gICAgfSxcbiAgICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgICBmb3JtYXRIZXg6IGNvbG9yX2Zvcm1hdEhleCxcbiAgICBmb3JtYXRIc2w6IGNvbG9yX2Zvcm1hdEhzbCxcbiAgICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgICB0b1N0cmluZzogY29sb3JfZm9ybWF0UmdiXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICAgIHZhciBtLCBsO1xuICAgIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgICAgOiBsID09PSA4ID8gcmdiYShtID4+IDI0ICYgMHhmZiwgbSA+PiAxNiAmIDB4ZmYsIG0gPj4gOCAmIDB4ZmYsIChtICYgMHhmZikgLyAweGZmKSAvLyAjZmYwMDAwMDBcbiAgICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgICAgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcmdibihuKSB7XG4gICAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICAgIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICAgIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICAgIG8gPSBvLnJnYigpO1xuICAgIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG4gIH1cblxuICBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgICB0aGlzLnIgPSArcjtcbiAgICB0aGlzLmcgPSArZztcbiAgICB0aGlzLmIgPSArYjtcbiAgICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbiAgfVxuXG4gIGRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gICAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gICAgfSxcbiAgICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgICB9LFxuICAgIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoLTAuNSA8PSB0aGlzLnIgJiYgdGhpcy5yIDwgMjU1LjUpXG4gICAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAgICYmICgtMC41IDw9IHRoaXMuYiAmJiB0aGlzLmIgPCAyNTUuNSlcbiAgICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICAgIH0sXG4gICAgaGV4OiByZ2JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICAgIGZvcm1hdEhleDogcmdiX2Zvcm1hdEhleCxcbiAgICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gICAgdG9TdHJpbmc6IHJnYl9mb3JtYXRSZ2JcbiAgfSkpO1xuXG4gIGZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgaGV4KHRoaXMucikgKyBoZXgodGhpcy5nKSArIGhleCh0aGlzLmIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICAgIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gICAgcmV0dXJuICh2YWx1ZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIHZhbHVlLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICAgIGlmIChhIDw9IDApIGggPSBzID0gbCA9IE5hTjtcbiAgICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gICAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgYSk7XG4gIH1cblxuICBmdW5jdGlvbiBoc2xDb252ZXJ0KG8pIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gICAgaWYgKCFvKSByZXR1cm4gbmV3IEhzbDtcbiAgICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gICAgbyA9IG8ucmdiKCk7XG4gICAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgICAgaCA9IE5hTixcbiAgICAgICAgcyA9IG1heCAtIG1pbixcbiAgICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgICBpZiAocykge1xuICAgICAgaWYgKHIgPT09IG1heCkgaCA9IChnIC0gYikgLyBzICsgKGcgPCBiKSAqIDY7XG4gICAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgICBzIC89IGwgPCAwLjUgPyBtYXggKyBtaW4gOiAyIC0gbWF4IC0gbWluO1xuICAgICAgaCAqPSA2MDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IGwgPiAwICYmIGwgPCAxID8gMCA6IGg7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG4gIH1cblxuICBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgICB0aGlzLmggPSAraDtcbiAgICB0aGlzLnMgPSArcztcbiAgICB0aGlzLmwgPSArbDtcbiAgICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbiAgfVxuXG4gIGRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gICAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICAgIH0sXG4gICAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICAgIH0sXG4gICAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgICAgdGhpcy5vcGFjaXR5XG4gICAgICApO1xuICAgIH0sXG4gICAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICAgIH0sXG4gICAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgICAgcmV0dXJuIChhID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCIpXG4gICAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICAgKyAodGhpcy5zIHx8IDApICogMTAwICsgXCIlLCBcIlxuICAgICAgICAgICsgKHRoaXMubCB8fCAwKSAqIDEwMCArIFwiJVwiXG4gICAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgICB9XG4gIH0pKTtcblxuICAvKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG4gIGZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gICAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICAgIDogbTEpICogMjU1O1xuICB9XG5cbiAgdmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xuICB2YXIgcmFkMmRlZyA9IDE4MCAvIE1hdGguUEk7XG5cbiAgLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuICB2YXIgSyA9IDE4LFxuICAgICAgWG4gPSAwLjk2NDIyLFxuICAgICAgWW4gPSAxLFxuICAgICAgWm4gPSAwLjgyNTIxLFxuICAgICAgdDAgPSA0IC8gMjksXG4gICAgICB0MSA9IDYgLyAyOSxcbiAgICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuICBmdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgICBpZiAobyBpbnN0YW5jZW9mIEhjbCkgcmV0dXJuIGhjbDJsYWIobyk7XG4gICAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICAgIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgICAgZyA9IHJnYjJscmdiKG8uZyksXG4gICAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxuICAgICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgICBpZiAociA9PT0gZyAmJiBnID09PSBiKSB4ID0geiA9IHk7IGVsc2Uge1xuICAgICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XG4gICAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gICAgdGhpcy5sID0gK2w7XG4gICAgdGhpcy5hID0gK2E7XG4gICAgdGhpcy5iID0gK2I7XG4gICAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG4gIH1cblxuICBkZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICAgIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gICAgfSxcbiAgICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgICB9LFxuICAgIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgeSA9ICh0aGlzLmwgKyAxNikgLyAxMTYsXG4gICAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgICB6ID0gaXNOYU4odGhpcy5iKSA/IHkgOiB5IC0gdGhpcy5iIC8gMjAwO1xuICAgICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgICB6ID0gWm4gKiBsYWIyeHl6KHopO1xuICAgICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgICBscmdiMnJnYigtMC45Nzg3Njg0ICogeCArIDEuOTE2MTQxNSAqIHkgKyAwLjAzMzQ1NDAgKiB6KSxcbiAgICAgICAgbHJnYjJyZ2IoIDAuMDcxOTQ1MyAqIHggLSAwLjIyODk5MTQgKiB5ICsgMS40MDUyNDI3ICogeiksXG4gICAgICAgIHRoaXMub3BhY2l0eVxuICAgICAgKTtcbiAgICB9XG4gIH0pKTtcblxuICBmdW5jdGlvbiB4eXoybGFiKHQpIHtcbiAgICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG4gIH1cblxuICBmdW5jdGlvbiBsYWIyeHl6KHQpIHtcbiAgICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxyZ2IycmdiKHgpIHtcbiAgICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJnYjJscmdiKHgpIHtcbiAgICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhjbENvbnZlcnQobykge1xuICAgIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICAgIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgICBpZiAoby5hID09PSAwICYmIG8uYiA9PT0gMCkgcmV0dXJuIG5ldyBIY2woTmFOLCAwIDwgby5sICYmIG8ubCA8IDEwMCA/IDAgOiBOYU4sIG8ubCwgby5vcGFjaXR5KTtcbiAgICB2YXIgaCA9IE1hdGguYXRhbjIoby5iLCBvLmEpICogcmFkMmRlZztcbiAgICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gICAgdGhpcy5oID0gK2g7XG4gICAgdGhpcy5jID0gK2M7XG4gICAgdGhpcy5sID0gK2w7XG4gICAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG4gIH1cblxuICBmdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgICBpZiAoaXNOYU4oby5oKSkgcmV0dXJuIG5ldyBMYWIoby5sLCAwLCAwLCBvLm9wYWNpdHkpO1xuICAgIHZhciBoID0gby5oICogZGVnMnJhZDtcbiAgICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbiAgfVxuXG4gIGRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gICAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgICB9LFxuICAgIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICAgIH0sXG4gICAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBoY2wybGFiKHRoaXMpLnJnYigpO1xuICAgIH1cbiAgfSkpO1xuXG4gIHZhciBBID0gLTAuMTQ4NjEsXG4gICAgICBCID0gKzEuNzgyNzcsXG4gICAgICBDID0gLTAuMjkyMjcsXG4gICAgICBEID0gLTAuOTA2NDksXG4gICAgICBFID0gKzEuOTcyOTQsXG4gICAgICBFRCA9IEUgKiBELFxuICAgICAgRUIgPSBFICogQixcbiAgICAgIEJDX0RBID0gQiAqIEMgLSBEICogQTtcblxuICBmdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgICBpZiAobyBpbnN0YW5jZW9mIEN1YmVoZWxpeCkgcmV0dXJuIG5ldyBDdWJlaGVsaXgoby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gICAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgICBibCA9IGIgLSBsLFxuICAgICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgICBoID0gcyA/IE1hdGguYXRhbjIoaywgYmwpICogcmFkMmRlZyAtIDEyMCA6IE5hTjtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gICAgdGhpcy5oID0gK2g7XG4gICAgdGhpcy5zID0gK3M7XG4gICAgdGhpcy5sID0gK2w7XG4gICAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG4gIH1cblxuICBkZWZpbmUoQ3ViZWhlbGl4LCBjdWJlaGVsaXgsIGV4dGVuZChDb2xvciwge1xuICAgIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgICB9LFxuICAgIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgICB9LFxuICAgIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICAgIGwgPSArdGhpcy5sLFxuICAgICAgICAgIGEgPSBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyAqIGwgKiAoMSAtIGwpLFxuICAgICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgICBzaW5oID0gTWF0aC5zaW4oaCk7XG4gICAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgICAgMjU1ICogKGwgKyBhICogKEMgKiBjb3NoICsgRCAqIHNpbmgpKSxcbiAgICAgICAgMjU1ICogKGwgKyBhICogKEUgKiBjb3NoKSksXG4gICAgICAgIHRoaXMub3BhY2l0eVxuICAgICAgKTtcbiAgICB9XG4gIH0pKTtcblxuICBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBhICsgdCAqIGQ7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gICAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICAgIHZhciBkID0gYiAtIGE7XG4gICAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfVxuXG4gIHZhciByZ2IkMSA9IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gICAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgICBmdW5jdGlvbiByZ2IkMShzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IHJnYihzdGFydCkpLnIsIChlbmQgPSByZ2IoZW5kKSkuciksXG4gICAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZ2IkMS5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gICAgcmV0dXJuIHJnYiQxO1xuICB9KSgxKTtcblxuICBmdW5jdGlvbiBudW1iZXJBcnJheShhLCBiKSB7XG4gICAgaWYgKCFiKSBiID0gW107XG4gICAgdmFyIG4gPSBhID8gTWF0aC5taW4oYi5sZW5ndGgsIGEubGVuZ3RoKSA6IDAsXG4gICAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICAgIGk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgICAgcmV0dXJuIGM7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXkoeCkge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJpY0FycmF5KGEsIGIpIHtcbiAgICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgICAgeCA9IG5ldyBBcnJheShuYSksXG4gICAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSBpbnRlcnBvbGF0ZShhW2ldLCBiW2ldKTtcbiAgICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcbiAgICAgIHJldHVybiBjO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkYXRlKGEsIGIpIHtcbiAgICB2YXIgZCA9IG5ldyBEYXRlO1xuICAgIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIoYSwgYikge1xuICAgIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9iamVjdChhLCBiKSB7XG4gICAgdmFyIGkgPSB7fSxcbiAgICAgICAgYyA9IHt9LFxuICAgICAgICBrO1xuXG4gICAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gICAgZm9yIChrIGluIGIpIHtcbiAgICAgIGlmIChrIGluIGEpIHtcbiAgICAgICAgaVtrXSA9IGludGVycG9sYXRlKGFba10sIGJba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY1trXSA9IGJba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICAgIHJldHVybiBjO1xuICAgIH07XG4gIH1cblxuICB2YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbiAgZnVuY3Rpb24gemVybyhiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZShiKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5nKGEsIGIpIHtcbiAgICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gICAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICAgIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gICAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICAgIH1cbiAgICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgICAgcS5wdXNoKHtpOiBpLCB4OiBpbnRlcnBvbGF0ZU51bWJlcihhbSwgYm0pfSk7XG4gICAgICB9XG4gICAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICAgIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgICA/IG9uZShxWzBdLngpXG4gICAgICAgIDogemVybyhiKSlcbiAgICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludGVycG9sYXRlKGEsIGIpIHtcbiAgICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICAgIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IkMSkgOiBzdHJpbmcpXG4gICAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiJDFcbiAgICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgICAgOiBpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXlcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XG4gICAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgICAgOiBpbnRlcnBvbGF0ZU51bWJlcikoYSwgYik7XG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnBvbGF0ZVJvdW5kKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKiAoMSAtIHQpICsgYiAqIHQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdGFudCQxKHgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICByZXR1cm4gK3g7XG4gIH1cblxuICB2YXIgdW5pdCA9IFswLCAxXTtcblxuICBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICAgIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgICA6IGNvbnN0YW50JDEoaXNOYU4oYikgPyBOYU4gOiAwLjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XG4gICAgdmFyIHQ7XG4gICAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICAgIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG4gIH1cblxuICAvLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbiAgLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuICBmdW5jdGlvbiBiaW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICAgIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gICAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgICBlbHNlIGQwID0gbm9ybWFsaXplKGQwLCBkMSksIHIwID0gaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICAgIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICAgIGkgPSAtMTtcblxuICAgIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICAgIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKCsraSA8IGopIHtcbiAgICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICAgIHJbaV0gPSBpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgICAgdmFyIGkgPSBiaXNlY3RSaWdodChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldFxuICAgICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgICBpbnRlcnBvbGF0ZSQxID0gaW50ZXJwb2xhdGUsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICAgIHVua25vd24sXG4gICAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICAgIHBpZWNld2lzZSxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBpbnB1dDtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCk7XG4gICAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xuICAgICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIHJldHVybiBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSQxKSkpKHRyYW5zZm9ybShjbGFtcCh4KSkpO1xuICAgIH1cblxuICAgIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBjbGFtcCh1bnRyYW5zZm9ybSgoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4ubWFwKHRyYW5zZm9ybSksIGludGVycG9sYXRlTnVtYmVyKSkpKHkpKSk7XG4gICAgfTtcblxuICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IEFycmF5LmZyb20oXywgbnVtYmVyKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gcmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBpbnRlcnBvbGF0ZSQxID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgICB9O1xuXG4gICAgc2NhbGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSQxID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlJDE7XG4gICAgfTtcblxuICAgIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICAgIHRyYW5zZm9ybSA9IHQsIHVudHJhbnNmb3JtID0gdTtcbiAgICAgIHJldHVybiByZXNjYWxlKCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVyKCkoaWRlbnRpdHksIGlkZW50aXR5KTtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbiAgLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4gIC8vIEZvciBleGFtcGxlLCBmb3JtYXREZWNpbWFsKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuICBmdW5jdGlvbiBmb3JtYXREZWNpbWFsKHgsIHApIHtcbiAgICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gICAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAgIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gICAgcmV0dXJuIFtcbiAgICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgICAreC5zbGljZShpICsgMSlcbiAgICBdO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwb25lbnQoeCkge1xuICAgIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbChNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0R3JvdXAoZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICAgIHZhciBpID0gdmFsdWUubGVuZ3RoLFxuICAgICAgICAgIHQgPSBbXSxcbiAgICAgICAgICBqID0gMCxcbiAgICAgICAgICBnID0gZ3JvdXBpbmdbMF0sXG4gICAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xuICAgICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXROdW1lcmFscyhudW1lcmFscykge1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvLyBbW2ZpbGxdYWxpZ25dW3NpZ25dW3N5bWJvbF1bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW35dW3R5cGVdXG4gIHZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcblxuICBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gICAgaWYgKCEobWF0Y2ggPSByZS5leGVjKHNwZWNpZmllcikpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZvcm1hdDogXCIgKyBzcGVjaWZpZXIpO1xuICAgIHZhciBtYXRjaDtcbiAgICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgICBmaWxsOiBtYXRjaFsxXSxcbiAgICAgIGFsaWduOiBtYXRjaFsyXSxcbiAgICAgIHNpZ246IG1hdGNoWzNdLFxuICAgICAgc3ltYm9sOiBtYXRjaFs0XSxcbiAgICAgIHplcm86IG1hdGNoWzVdLFxuICAgICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgICAgY29tbWE6IG1hdGNoWzddLFxuICAgICAgcHJlY2lzaW9uOiBtYXRjaFs4XSAmJiBtYXRjaFs4XS5zbGljZSgxKSxcbiAgICAgIHRyaW06IG1hdGNoWzldLFxuICAgICAgdHlwZTogbWF0Y2hbMTBdXG4gICAgfSk7XG4gIH1cblxuICBmb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG4gIGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgICB0aGlzLmZpbGwgPSBzcGVjaWZpZXIuZmlsbCA9PT0gdW5kZWZpbmVkID8gXCIgXCIgOiBzcGVjaWZpZXIuZmlsbCArIFwiXCI7XG4gICAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xuICAgIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgICB0aGlzLnN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIuc3ltYm9sICsgXCJcIjtcbiAgICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xuICAgIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gICAgdGhpcy5jb21tYSA9ICEhc3BlY2lmaWVyLmNvbW1hO1xuICAgIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XG4gICAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgICB0aGlzLnR5cGUgPSBzcGVjaWZpZXIudHlwZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci50eXBlICsgXCJcIjtcbiAgfVxuXG4gIEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5maWxsXG4gICAgICAgICsgdGhpcy5hbGlnblxuICAgICAgICArIHRoaXMuc2lnblxuICAgICAgICArIHRoaXMuc3ltYm9sXG4gICAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICAgKyAodGhpcy5jb21tYSA/IFwiLFwiIDogXCJcIilcbiAgICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICAgKyB0aGlzLnR5cGU7XG4gIH07XG5cbiAgLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG4gIGZ1bmN0aW9uIGZvcm1hdFRyaW0ocykge1xuICAgIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN3aXRjaCAoc1tpXSkge1xuICAgICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG4gIH1cblxuICB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4QXV0byh4LCBwKSB7XG4gICAgdmFyIGQgPSBmb3JtYXREZWNpbWFsKHgsIHApO1xuICAgIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICAgIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICAgIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3VuZGVkKHgsIHApIHtcbiAgICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gICAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gICAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICAgIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxuICAgICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG4gIH1cblxuICB2YXIgZm9ybWF0VHlwZXMgPSB7XG4gICAgXCIlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuICh4ICogMTAwKS50b0ZpeGVkKHApOyB9LFxuICAgIFwiYlwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpOyB9LFxuICAgIFwiY1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiB4ICsgXCJcIjsgfSxcbiAgICBcImRcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxMCk7IH0sXG4gICAgXCJlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9FeHBvbmVudGlhbChwKTsgfSxcbiAgICBcImZcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0ZpeGVkKHApOyB9LFxuICAgIFwiZ1wiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvUHJlY2lzaW9uKHApOyB9LFxuICAgIFwib1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpOyB9LFxuICAgIFwicFwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApOyB9LFxuICAgIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICAgIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICAgIFwiWFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOyB9LFxuICAgIFwieFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KTsgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGlkZW50aXR5JDEoeCkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgdmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbiAgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICAgIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyA9PT0gdW5kZWZpbmVkIHx8IGxvY2FsZS50aG91c2FuZHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5JDEgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgICAgY3VycmVuY3lQcmVmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMF0gKyBcIlwiLFxuICAgICAgICBjdXJyZW5jeVN1ZmZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVsxXSArIFwiXCIsXG4gICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICAgIG51bWVyYWxzID0gbG9jYWxlLm51bWVyYWxzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSQxIDogZm9ybWF0TnVtZXJhbHMobWFwLmNhbGwobG9jYWxlLm51bWVyYWxzLCBTdHJpbmcpKSxcbiAgICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwiLVwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcbiAgICAgICAgbmFuID0gbG9jYWxlLm5hbiA9PT0gdW5kZWZpbmVkID8gXCJOYU5cIiA6IGxvY2FsZS5uYW4gKyBcIlwiO1xuXG4gICAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXG4gICAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXG4gICAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxuICAgICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxuICAgICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVByZWZpeCA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XG4gICAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXG4gICAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsXG4gICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxuICAgICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XG5cbiAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcblxuICAgICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxuICAgICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICAgIH07XG4gIH1cblxuICB2YXIgbG9jYWxlO1xuICB2YXIgZm9ybWF0O1xuICB2YXIgZm9ybWF0UHJlZml4O1xuXG4gIGRlZmF1bHRMb2NhbGUoe1xuICAgIGRlY2ltYWw6IFwiLlwiLFxuICAgIHRob3VzYW5kczogXCIsXCIsXG4gICAgZ3JvdXBpbmc6IFszXSxcbiAgICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXSxcbiAgICBtaW51czogXCItXCJcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICAgIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gICAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgICByZXR1cm4gbG9jYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlY2lzaW9uRml4ZWQoc3RlcCkge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVjaXNpb25Sb3VuZChzdGVwLCBtYXgpIHtcbiAgICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoc3RhcnQsIHN0b3AsIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICAgIHByZWNpc2lvbjtcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xuICAgIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XG4gICAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgY2FzZSBcIlwiOlxuICAgICAgY2FzZSBcImVcIjpcbiAgICAgIGNhc2UgXCJnXCI6XG4gICAgICBjYXNlIFwicFwiOlxuICAgICAgY2FzZSBcInJcIjoge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImZcIjpcbiAgICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZWFyaXNoKHNjYWxlKSB7XG4gICAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICAgIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgICAgcmV0dXJuIHRpY2tGb3JtYXQoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCwgc3BlY2lmaWVyKTtcbiAgICB9O1xuXG4gICAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgICBpMCA9IDAsXG4gICAgICAgICAgaTEgPSBkLmxlbmd0aCAtIDEsXG4gICAgICAgICAgc3RhcnQgPSBkW2kwXSxcbiAgICAgICAgICBzdG9wID0gZFtpMV0sXG4gICAgICAgICAgc3RlcDtcblxuICAgICAgaWYgKHN0b3AgPCBzdGFydCkge1xuICAgICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgICAgfVxuXG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuXG4gICAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgICAgc3RhcnQgPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgICAgZFtpMF0gPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBkW2kxXSA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICAgIGRbaTBdID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgICBkW2kxXSA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgZG9tYWluKGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2NhbGU7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVhciQxKCkge1xuICAgIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIkMSgpKTtcbiAgICB9O1xuXG4gICAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG4gIH1cblxuICB2YXIgdDAkMSA9IG5ldyBEYXRlLFxuICAgICAgdDEkMSA9IG5ldyBEYXRlO1xuXG4gIGZ1bmN0aW9uIG5ld0ludGVydmFsKGZsb29yaSwgb2Zmc2V0aSwgY291bnQsIGZpZWxkKSB7XG5cbiAgICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICAgIH1cblxuICAgIGludGVydmFsLmZsb29yID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwucm91bmQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgICBkMSA9IGludGVydmFsLmNlaWwoZGF0ZSk7XG4gICAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwub2Zmc2V0ID0gZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5yYW5nZSA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBbXSwgcHJldmlvdXM7XG4gICAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgaWYgKCEoc3RhcnQgPCBzdG9wKSB8fCAhKHN0ZXAgPiAwKSkgcmV0dXJuIHJhbmdlOyAvLyBhbHNvIGhhbmRsZXMgSW52YWxpZCBEYXRlXG4gICAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgICAgd2hpbGUgKHByZXZpb3VzIDwgc3RhcnQgJiYgc3RhcnQgPCBzdG9wKTtcbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9O1xuXG4gICAgaW50ZXJ2YWwuZmlsdGVyID0gZnVuY3Rpb24odGVzdCkge1xuICAgICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKG9mZnNldGkoZGF0ZSwgLTEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgICB0MCQxLnNldFRpbWUoK3N0YXJ0KSwgdDEkMS5zZXRUaW1lKCtlbmQpO1xuICAgICAgICBmbG9vcmkodDAkMSksIGZsb29yaSh0MSQxKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAkMSwgdDEkMSkpO1xuICAgICAgfTtcblxuICAgICAgaW50ZXJ2YWwuZXZlcnkgPSBmdW5jdGlvbihzdGVwKSB7XG4gICAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgICByZXR1cm4gIWlzRmluaXRlKHN0ZXApIHx8ICEoc3RlcCA+IDApID8gbnVsbFxuICAgICAgICAgICAgOiAhKHN0ZXAgPiAxKSA/IGludGVydmFsXG4gICAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24oZCkgeyByZXR1cm4gZmllbGQoZCkgJSBzdGVwID09PSAwOyB9XG4gICAgICAgICAgICAgICAgOiBmdW5jdGlvbihkKSB7IHJldHVybiBpbnRlcnZhbC5jb3VudCgwLCBkKSAlIHN0ZXAgPT09IDA7IH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJ2YWw7XG4gIH1cblxuICB2YXIgbWlsbGlzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAvLyBub29wXG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBlbmQgLSBzdGFydDtcbiAgfSk7XG5cbiAgLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxuICBtaWxsaXNlY29uZC5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gTWF0aC5mbG9vcihrKTtcbiAgICBpZiAoIWlzRmluaXRlKGspIHx8ICEoayA+IDApKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoZGF0ZSAvIGspICogayk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICAgIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgZHVyYXRpb25TZWNvbmQgPSAxZTM7XG4gIHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcbiAgdmFyIGR1cmF0aW9uSG91ciA9IDM2ZTU7XG4gIHZhciBkdXJhdGlvbkRheSA9IDg2NGU1O1xuICB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xuXG4gIHZhciBzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xuICB9LCBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xuICB9KTtcblxuICB2YXIgbWludXRlID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQpO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH0pO1xuXG4gIHZhciBob3VyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG4gIH0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuICB9KTtcblxuICB2YXIgZGF5ID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5O1xuICB9LCBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpIC0gMTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gd2Vla2RheShpKSB7XG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpICsgNyAtIGkpICUgNyk7XG4gICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbiAgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG4gIHZhciB0dWVzZGF5ID0gd2Vla2RheSgyKTtcbiAgdmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG4gIHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG4gIHZhciBmcmlkYXkgPSB3ZWVrZGF5KDUpO1xuICB2YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG4gIHZhciBtb250aCA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG4gIH0pO1xuXG4gIHZhciB5ZWFyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xuICB9LCBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgfSk7XG5cbiAgLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxuICB5ZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICAgIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgICAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHV0Y01pbnV0ZSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbiAgfSk7XG5cbiAgdmFyIHV0Y0hvdXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldFVUQ0hvdXJzKCk7XG4gIH0pO1xuXG4gIHZhciB1dGNEYXkgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gICAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgdXRjU3VuZGF5ID0gdXRjV2Vla2RheSgwKTtcbiAgdmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG4gIHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbiAgdmFyIHV0Y1dlZG5lc2RheSA9IHV0Y1dlZWtkYXkoMyk7XG4gIHZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG4gIHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuICB2YXIgdXRjU2F0dXJkYXkgPSB1dGNXZWVrZGF5KDYpO1xuXG4gIHZhciB1dGNNb250aCA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZW5kLmdldFVUQ01vbnRoKCkgLSBzdGFydC5nZXRVVENNb250aCgpICsgKGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKSkgKiAxMjtcbiAgfSwgZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldFVUQ01vbnRoKCk7XG4gIH0pO1xuXG4gIHZhciB1dGNZZWFyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xuICB9LCBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgfSk7XG5cbiAgLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxuICB1dGNZZWFyLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICAgIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgICAgZGF0ZS5zZXRVVENNb250aCgwLCAxKTtcbiAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKyBzdGVwICogayk7XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICAgIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXdEYXRlKHksIG0sIGQpIHtcbiAgICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TG9jYWxlJDEobG9jYWxlKSB7XG4gICAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICAgIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gICAgdmFyIGZvcm1hdHMgPSB7XG4gICAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICAgIFwiY1wiOiBudWxsLFxuICAgICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxuICAgICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxuICAgICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxuICAgICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcbiAgICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcbiAgICAgIFwieFwiOiBudWxsLFxuICAgICAgXCJYXCI6IG51bGwsXG4gICAgICBcInlcIjogZm9ybWF0WWVhcixcbiAgICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gICAgfTtcblxuICAgIHZhciB1dGNGb3JtYXRzID0ge1xuICAgICAgXCJhXCI6IGZvcm1hdFVUQ1Nob3J0V2Vla2RheSxcbiAgICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgICBcIkJcIjogZm9ybWF0VVRDTW9udGgsXG4gICAgICBcImNcIjogbnVsbCxcbiAgICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgICAgXCJlXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgICAgXCJVXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXksXG4gICAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgICAgXCJXXCI6IGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXksXG4gICAgICBcInhcIjogbnVsbCxcbiAgICAgIFwiWFwiOiBudWxsLFxuICAgICAgXCJ5XCI6IGZvcm1hdFVUQ1llYXIsXG4gICAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICAgIH07XG5cbiAgICB2YXIgcGFyc2VzID0ge1xuICAgICAgXCJhXCI6IHBhcnNlU2hvcnRXZWVrZGF5LFxuICAgICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgICBcIkJcIjogcGFyc2VNb250aCxcbiAgICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICAgIFwiZVwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgICBcImpcIjogcGFyc2VEYXlPZlllYXIsXG4gICAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICAgIFwiTVwiOiBwYXJzZU1pbnV0ZXMsXG4gICAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgICBcInFcIjogcGFyc2VRdWFydGVyLFxuICAgICAgXCJRXCI6IHBhcnNlVW5peFRpbWVzdGFtcCxcbiAgICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICAgIFwidVwiOiBwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgICAgXCJWXCI6IHBhcnNlV2Vla051bWJlcklTTyxcbiAgICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgICAgXCJ4XCI6IHBhcnNlTG9jYWxlRGF0ZSxcbiAgICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgICAgXCJZXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgICB9O1xuXG4gICAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICAgIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gICAgZm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCBmb3JtYXRzKTtcbiAgICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICAgIHV0Y0Zvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgdXRjRm9ybWF0cyk7XG4gICAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgICBqID0gMCxcbiAgICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgICAgYyxcbiAgICAgICAgICAgIHBhZCxcbiAgICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgICAgaWYgKChwYWQgPSBwYWRzW2MgPSBzcGVjaWZpZXIuY2hhckF0KCsraSldKSAhPSBudWxsKSBjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpO1xuICAgICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgICAgc3RyaW5nLnB1c2goYyk7XG4gICAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgdmFyIGQgPSBuZXdEYXRlKDE5MDAsIHVuZGVmaW5lZCwgMSksXG4gICAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgICB3ZWVrLCBkYXkkMTtcbiAgICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgLy8gSWYgYSBVTklYIHRpbWVzdGFtcCBpcyBzcGVjaWZpZWQsIHJldHVybiBpdC5cbiAgICAgICAgaWYgKFwiUVwiIGluIGQpIHJldHVybiBuZXcgRGF0ZShkLlEpO1xuICAgICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgICAvLyBJZiB0aGlzIGlzIHV0Y1BhcnNlLCBuZXZlciB1c2UgdGhlIGxvY2FsIHRpbWV6b25lLlxuICAgICAgICBpZiAoWiAmJiAhKFwiWlwiIGluIGQpKSBkLlogPSAwO1xuXG4gICAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xuXG4gICAgICAgIC8vIElmIHRoZSBtb250aCB3YXMgbm90IHNwZWNpZmllZCwgaW5oZXJpdCBmcm9tIHRoZSBxdWFydGVyLlxuICAgICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgICAgaWYgKFwiVlwiIGluIGQpIHtcbiAgICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSQxID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICAgIHdlZWsgPSBkYXkkMSA+IDQgfHwgZGF5JDEgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICAgIHdlZWsgPSB1dGNEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgZC5kID0gd2Vlay5nZXRVVENEYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrID0gbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSQxID0gd2Vlay5nZXREYXkoKTtcbiAgICAgICAgICAgIHdlZWsgPSBkYXkkMSA+IDQgfHwgZGF5JDEgPT09IDAgPyBtb25kYXkuY2VpbCh3ZWVrKSA6IG1vbmRheSh3ZWVrKTtcbiAgICAgICAgICAgIHdlZWsgPSBkYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgICAgZC55ID0gd2Vlay5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgZC5tID0gd2Vlay5nZXRNb250aCgpO1xuICAgICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgICAgZGF5JDEgPSBcIlpcIiBpbiBkID8gdXRjRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldFVUQ0RheSgpIDogbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0RGF5KCk7XG4gICAgICAgICAgZC5tID0gMDtcbiAgICAgICAgICBkLmQgPSBcIldcIiBpbiBkID8gKGQudyArIDYpICUgNyArIGQuVyAqIDcgLSAoZGF5JDEgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSQxICsgNikgJSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgICByZXR1cm4gbG9jYWxEYXRlKGQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFyc2U7XG5cbiAgICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgICBpZiAoaiA+PSBtKSByZXR1cm4gLTE7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJBdChpKyspO1xuICAgICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5nLmNoYXJDb2RlQXQoaisrKSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gajtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcbiAgICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgICByZXR1cm4gbiA/IChkLncgPSB3ZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xuICAgICAgcmV0dXJuIDEgKyB+fihkLmdldE1vbnRoKCkgLyAzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcbiAgICAgIHJldHVybiAxICsgfn4oZC5nZXRVVENNb250aCgpIC8gMyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgICByZXR1cm4gZjtcbiAgICAgIH0sXG4gICAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGZhbHNlKTtcbiAgICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH0sXG4gICAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9LFxuICAgICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCB0cnVlKTtcbiAgICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIHBhZHMgPSB7XCItXCI6IFwiXCIsIFwiX1wiOiBcIiBcIiwgXCIwXCI6IFwiMFwifSxcbiAgICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgICByZXF1b3RlUmUgPSAvW1xcXFxeJCorP3xbXFxdKCkue31dL2c7XG5cbiAgZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICAgIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVvdGUocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gICAgdmFyIG1hcCA9IHt9LCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gICAgcmV0dXJuIG4gPyAoZC51ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla051bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla051bWJlcklTTyhkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5WID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRnVsbFllYXIoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICAgIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICAgIHJldHVybiBuID8gKGQueSA9ICtuWzBdICsgKCtuWzBdID4gNjggPyAxOTAwIDogMjAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IC9eKFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgICByZXR1cm4gbiA/IChkLlogPSBuWzFdID8gMCA6IC0oblsyXSArIChuWzNdIHx8IFwiMDBcIikpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVF1YXJ0ZXIoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICAgIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRGF5T2ZZZWFyKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICAgIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICAgIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICAgIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgICByZXR1cm4gbiA/IChkLkwgPSBNYXRoLmZsb29yKG5bMF0gLyAxMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMaXRlcmFsUGVyY2VudChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICAgIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVVuaXhUaW1lc3RhbXAoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5zID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICAgIHJldHVybiBwYWQoZC5nZXREYXRlKCksIHAsIDIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSwgcCwgMik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICAgIHJldHVybiBwYWQoZC5nZXRIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKDEgKyBkYXkuY291bnQoeWVhcihkKSwgZCksIHAsIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcbiAgICByZXR1cm4gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gICAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICAgIHZhciBkYXkgPSBkLmdldERheSgpO1xuICAgIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gICAgcmV0dXJuIHBhZChzdW5kYXkuY291bnQoeWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICAgIHZhciBkYXkgPSBkLmdldERheSgpO1xuICAgIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRodXJzZGF5KGQpIDogdGh1cnNkYXkuY2VpbChkKTtcbiAgICByZXR1cm4gcGFkKHRodXJzZGF5LmNvdW50KHllYXIoZCksIGQpICsgKHllYXIoZCkuZ2V0RGF5KCkgPT09IDQpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICAgIHJldHVybiBkLmdldERheSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gICAgcmV0dXJuIHBhZChtb25kYXkuY291bnQoeWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFllYXIoZCwgcCkge1xuICAgIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFpvbmUoZCkge1xuICAgIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICAgICsgcGFkKHogLyA2MCB8IDAsIFwiMFwiLCAyKVxuICAgICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mTW9udGgoZCwgcCkge1xuICAgIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDSG91cjI0KGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENIb3VyMTIoZCwgcCkge1xuICAgIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZZZWFyKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTWljcm9zZWNvbmRzKGQsIHApIHtcbiAgICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoTnVtYmVyKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTWludXRlcyhkLCBwKSB7XG4gICAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTZWNvbmRzKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICAgIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICAgIHJldHVybiBkb3cgPT09IDAgPyA3IDogZG93O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gICAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xuICAgIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICAgIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHV0Y1RodXJzZGF5KGQpIDogdXRjVGh1cnNkYXkuY2VpbChkKTtcbiAgICByZXR1cm4gcGFkKHV0Y1RodXJzZGF5LmNvdW50KHV0Y1llYXIoZCksIGQpICsgKHV0Y1llYXIoZCkuZ2V0VVRDRGF5KCkgPT09IDQpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICAgIHJldHVybiBkLmdldFVUQ0RheSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gICAgcmV0dXJuIHBhZCh1dGNNb25kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICAgIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gICAgcmV0dXJuIFwiKzAwMDBcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICAgIHJldHVybiBcIiVcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXAoZCkge1xuICAgIHJldHVybiArZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzKGQpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xuICB9XG5cbiAgdmFyIGxvY2FsZSQxO1xuICB2YXIgdGltZUZvcm1hdDtcbiAgdmFyIHRpbWVQYXJzZTtcbiAgdmFyIHV0Y0Zvcm1hdDtcbiAgdmFyIHV0Y1BhcnNlO1xuXG4gIGRlZmF1bHRMb2NhbGUkMSh7XG4gICAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gICAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gICAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICAgIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICAgIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICAgIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gICAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxuICB9KTtcblxuICBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlJDEoZGVmaW5pdGlvbikge1xuICAgIGxvY2FsZSQxID0gZm9ybWF0TG9jYWxlJDEoZGVmaW5pdGlvbik7XG4gICAgdGltZUZvcm1hdCA9IGxvY2FsZSQxLmZvcm1hdDtcbiAgICB0aW1lUGFyc2UgPSBsb2NhbGUkMS5wYXJzZTtcbiAgICB1dGNGb3JtYXQgPSBsb2NhbGUkMS51dGNGb3JtYXQ7XG4gICAgdXRjUGFyc2UgPSBsb2NhbGUkMS51dGNQYXJzZTtcbiAgICByZXR1cm4gbG9jYWxlJDE7XG4gIH1cblxuICB2YXIgaXNvU3BlY2lmaWVyID0gXCIlWS0lbS0lZFQlSDolTTolUy4lTFpcIjtcblxuICBmdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICB2YXIgZm9ybWF0SXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcbiAgICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgICA6IHV0Y0Zvcm1hdChpc29TcGVjaWZpZXIpO1xuXG4gIGZ1bmN0aW9uIHBhcnNlSXNvTmF0aXZlKHN0cmluZykge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoc3RyaW5nKTtcbiAgICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbiAgfVxuXG4gIHZhciBwYXJzZUlzbyA9ICtuZXcgRGF0ZShcIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWlwiKVxuICAgICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgICAgOiB1dGNQYXJzZShpc29TcGVjaWZpZXIpO1xuXG4gIHZhciBub29wID0ge3ZhbHVlOiBmdW5jdGlvbigpIHt9fTtcblxuICBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICAgIF9bdF0gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgICB0aGlzLl8gPSBfO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICAgIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gICAgfSk7XG4gIH1cblxuICBEaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICAgIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICAgIHQsXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgICB9LFxuICAgIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuICB2YXIgbmFtZXNwYWNlcyA9IHtcbiAgICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4aHRtbDogeGh0bWwsXG4gICAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG4gIH07XG5cbiAgZnVuY3Rpb24gbmFtZXNwYWNlKG5hbWUpIHtcbiAgICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9yKG5hbWUpIHtcbiAgICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gICAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiBub25lKCkge31cblxuICBmdW5jdGlvbiBzZWxlY3RvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Qoc2VsZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9yQWxsKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3RBbGwoc2VsZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoZXIoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2ZpbHRlcihtYXRjaCkge1xuICAgIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwYXJzZSh1cGRhdGUpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VudGVyKCkge1xuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICAgIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICAgIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xuICB9XG5cbiAgRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gICAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY29uc3RhbnQkMih4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG5cbiAgZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAgIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAgIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gICAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gICAgdmFyIGksXG4gICAgICAgIG5vZGUsXG4gICAgICAgIG5vZGVCeUtleVZhbHVlID0ge30sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICAgIGtleVZhbHVlO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gICAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICAgIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgICBpZiAoa2V5VmFsdWUgaW4gbm9kZUJ5S2V5VmFsdWUpIHtcbiAgICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAgIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdKSB7XG4gICAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgICBub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZV0gPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gICAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVzW2ldXSA9PT0gbm9kZSkpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2RhdGEodmFsdWUsIGtleSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XG4gICAgICB0aGlzLmVhY2goZnVuY3Rpb24oZCkgeyBkYXRhWysral0gPSBkOyB9KTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCQyKHZhbHVlKTtcblxuICAgIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgICAgZGF0YSA9IHZhbHVlLmNhbGwocGFyZW50LCBwYXJlbnQgJiYgcGFyZW50Ll9fZGF0YV9fLCBqLCBwYXJlbnRzKSxcbiAgICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gICAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgICByZXR1cm4gdXBkYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2V4aXQoKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2pvaW4ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICAgIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xuICAgIGVudGVyID0gdHlwZW9mIG9uZW50ZXIgPT09IFwiZnVuY3Rpb25cIiA/IG9uZW50ZXIoZW50ZXIpIDogZW50ZXIuYXBwZW5kKG9uZW50ZXIgKyBcIlwiKTtcbiAgICBpZiAob251cGRhdGUgIT0gbnVsbCkgdXBkYXRlID0gb251cGRhdGUodXBkYXRlKTtcbiAgICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICAgIHJldHVybiBlbnRlciAmJiB1cGRhdGUgPyBlbnRlci5tZXJnZSh1cGRhdGUpLm9yZGVyKCkgOiB1cGRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbWVyZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9vcmRlcigpIHtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xuICAgICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc29ydChjb21wYXJlKSB7XG4gICAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nJDE7XG5cbiAgICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBhc2NlbmRpbmckMShhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2NhbGwoKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICAgIGFyZ3VtZW50c1swXSA9IHRoaXM7XG4gICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9ub2RlcygpIHtcbiAgICB2YXIgbm9kZXMgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBpID0gLTE7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyBub2Rlc1srK2ldID0gdGhpczsgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX25vZGUoKSB7XG5cbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zaXplKCkge1xuICAgIHZhciBzaXplID0gMDtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7ICsrc2l6ZTsgfSk7XG4gICAgcmV0dXJuIHNpemU7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZW1wdHkoKSB7XG4gICAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9lYWNoKGNhbGxiYWNrKSB7XG5cbiAgICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHYpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fYXR0cihuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUoKTtcbiAgICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgICAgOiBub2RlLmdldEF0dHJpYnV0ZShmdWxsbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWZhdWx0Vmlldyhub2RlKSB7XG4gICAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc3R5bGUobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3Byb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG4gIH1cblxuICBmdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICAgIHRoaXMuX25vZGUgPSBub2RlO1xuICAgIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xuICB9XG5cbiAgQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jbGFzc2VkKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl90ZXh0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gICAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2h0bWwodmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhaXNlKCkge1xuICAgIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fcmFpc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBsb3dlcigpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2xvd2VyKCkge1xuICAgIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2FwcGVuZChuYW1lKSB7XG4gICAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25faW5zZXJ0KG5hbWUsIGJlZm9yZSkge1xuICAgIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3JlbW92ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICAgIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lKGRlZXApIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9kYXR1bSh2YWx1ZSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xuICB9XG5cbiAgdmFyIGZpbHRlckV2ZW50cyA9IHt9O1xuXG4gIHZhciBldmVudCA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICAgIGZpbHRlckV2ZW50cyA9IHttb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLCBtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCJ9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbHRlckNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKSB7XG4gICAgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICBpZiAoIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRoaXMgJiYgIShyZWxhdGVkLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpICYgOCkpKSB7XG4gICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICAgIHJldHVybiBmdW5jdGlvbihldmVudDEpIHtcbiAgICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICAgIGV2ZW50ID0gZXZlbnQxO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXZlbnQgPSBldmVudDA7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzJDEodHlwZW5hbWVzKSB7XG4gICAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvbiA9IHRoaXMuX19vbjtcbiAgICAgIGlmICghb24pIHJldHVybjtcbiAgICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5jYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvblsrK2ldID0gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcbiAgICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gb25BZGQodHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gICAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQsIGksIGdyb3VwKSB7XG4gICAgICB2YXIgb24gPSB0aGlzLl9fb24sIG8sIGxpc3RlbmVyID0gd3JhcCh2YWx1ZSwgaSwgZ3JvdXApO1xuICAgICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgICBpZiAoKG8gPSBvbltqXSkudHlwZSA9PT0gdHlwZW5hbWUudHlwZSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgICAgby52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgICAgaWYgKCFvbikgdGhpcy5fX29uID0gW29dO1xuICAgICAgZWxzZSBvbi5wdXNoKG8pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fb24odHlwZW5hbWUsIHZhbHVlLCBjYXB0dXJlKSB7XG4gICAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzJDEodHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgICBpZiAoY2FwdHVyZSA9PSBudWxsKSBjYXB0dXJlID0gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIGNhcHR1cmUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgICB2YXIgZXZlbnQwID0gZXZlbnQ7XG4gICAgZXZlbnQxLnNvdXJjZUV2ZW50ID0gZXZlbnQ7XG4gICAgZXZlbnQgPSBldmVudDE7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXZlbnQgPSBldmVudDA7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICAgIGV2ZW50ID0gd2luZG93LkN1c3RvbUV2ZW50O1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgICBlbHNlIGV2ZW50LmluaXRFdmVudCh0eXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoRnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZGlzcGF0Y2godHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gZGlzcGF0Y2hGdW5jdGlvblxuICAgICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xuICB9XG5cbiAgdmFyIHJvb3QgPSBbbnVsbF07XG5cbiAgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICAgIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbiAgfVxuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gICAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICAgIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcbiAgICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gICAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gICAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcbiAgICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgICBqb2luOiBzZWxlY3Rpb25fam9pbixcbiAgICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICAgIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gICAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gICAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gICAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICAgIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICAgIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICAgIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gICAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICAgIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gICAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICAgIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gICAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICAgIG9uOiBzZWxlY3Rpb25fb24sXG4gICAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaFxuICB9O1xuXG4gIGZ1bmN0aW9uIHNlbGVjdChzZWxlY3Rvcikge1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gc291cmNlRXZlbnQoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBldmVudCwgc291cmNlO1xuICAgIHdoaWxlIChzb3VyY2UgPSBjdXJyZW50LnNvdXJjZUV2ZW50KSBjdXJyZW50ID0gc291cmNlO1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gcG9pbnQobm9kZSwgZXZlbnQpIHtcbiAgICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcblxuICAgIGlmIChzdmcuY3JlYXRlU1ZHUG9pbnQpIHtcbiAgICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgICAgcG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obm9kZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpO1xuICAgICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgICB9XG5cbiAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZShub2RlKSB7XG4gICAgdmFyIGV2ZW50ID0gc291cmNlRXZlbnQoKTtcbiAgICBpZiAoZXZlbnQuY2hhbmdlZFRvdWNoZXMpIGV2ZW50ID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgcmV0dXJuIHBvaW50KG5vZGUsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoKG5vZGUsIHRvdWNoZXMsIGlkZW50aWZpZXIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIGlkZW50aWZpZXIgPSB0b3VjaGVzLCB0b3VjaGVzID0gc291cmNlRXZlbnQoKS5jaGFuZ2VkVG91Y2hlcztcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdG91Y2hlcyA/IHRvdWNoZXMubGVuZ3RoIDogMCwgdG91Y2g7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodG91Y2ggPSB0b3VjaGVzW2ldKS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBwb2ludChub2RlLCB0b3VjaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKCkge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ldmVudCgpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9kcmFnKHZpZXcpIHtcbiAgICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgICBpZiAoXCJvbnNlbGVjdHN0YXJ0XCIgaW4gcm9vdCkge1xuICAgICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBub2V2ZW50LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdC5fX25vc2VsZWN0ID0gcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0O1xuICAgICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gXCJub25lXCI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gICAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gICAgaWYgKG5vY2xpY2spIHtcbiAgICAgIHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbm9ldmVudCwgdHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG51bGwpOyB9LCAwKTtcbiAgICB9XG4gICAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IHJvb3QuX19ub3NlbGVjdDtcbiAgICAgIGRlbGV0ZSByb290Ll9fbm9zZWxlY3Q7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29uc3RhbnQkMyh4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIERyYWdFdmVudCh0YXJnZXQsIHR5cGUsIHN1YmplY3QsIGlkLCBhY3RpdmUsIHgsIHksIGR4LCBkeSwgZGlzcGF0Y2gpIHtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3ViamVjdCA9IHN1YmplY3Q7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gaWQ7XG4gICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMuZHggPSBkeDtcbiAgICB0aGlzLmR5ID0gZHk7XG4gICAgdGhpcy5fID0gZGlzcGF0Y2g7XG4gIH1cblxuICBEcmFnRXZlbnQucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5fLm9uLmFwcGx5KHRoaXMuXywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IHRoaXMuXyA/IHRoaXMgOiB2YWx1ZTtcbiAgfTtcblxuICAvLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbiAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmJ1dHRvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRDb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRTdWJqZWN0KGQpIHtcbiAgICByZXR1cm4gZCA9PSBudWxsID8ge3g6IGV2ZW50LngsIHk6IGV2ZW50Lnl9IDogZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYWcoKSB7XG4gICAgdmFyIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICAgIGNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIsXG4gICAgICAgIHN1YmplY3QgPSBkZWZhdWx0U3ViamVjdCxcbiAgICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgICAgZ2VzdHVyZXMgPSB7fSxcbiAgICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImRyYWdcIiwgXCJlbmRcIiksXG4gICAgICAgIGFjdGl2ZSA9IDAsXG4gICAgICAgIG1vdXNlZG93bngsXG4gICAgICAgIG1vdXNlZG93bnksXG4gICAgICAgIG1vdXNlbW92aW5nLFxuICAgICAgICB0b3VjaGVuZGluZyxcbiAgICAgICAgY2xpY2tEaXN0YW5jZTIgPSAwO1xuXG4gICAgZnVuY3Rpb24gZHJhZyhzZWxlY3Rpb24pIHtcbiAgICAgIHNlbGVjdGlvblxuICAgICAgICAgIC5vbihcIm1vdXNlZG93bi5kcmFnXCIsIG1vdXNlZG93bmVkKVxuICAgICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAgIC5vbihcInRvdWNobW92ZS5kcmFnXCIsIHRvdWNobW92ZWQpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxuICAgICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91c2Vkb3duZWQoKSB7XG4gICAgICBpZiAodG91Y2hlbmRpbmcgfHwgIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG4gICAgICB2YXIgZ2VzdHVyZSA9IGJlZm9yZXN0YXJ0KFwibW91c2VcIiwgY29udGFpbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIG1vdXNlLCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKCFnZXN0dXJlKSByZXR1cm47XG4gICAgICBzZWxlY3QoZXZlbnQudmlldykub24oXCJtb3VzZW1vdmUuZHJhZ1wiLCBtb3VzZW1vdmVkLCB0cnVlKS5vbihcIm1vdXNldXAuZHJhZ1wiLCBtb3VzZXVwcGVkLCB0cnVlKTtcbiAgICAgIG5vZHJhZyhldmVudC52aWV3KTtcbiAgICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICAgIG1vdXNlbW92aW5nID0gZmFsc2U7XG4gICAgICBtb3VzZWRvd254ID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIG1vdXNlZG93bnkgPSBldmVudC5jbGllbnRZO1xuICAgICAgZ2VzdHVyZShcInN0YXJ0XCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdXNlbW92ZWQoKSB7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBpZiAoIW1vdXNlbW92aW5nKSB7XG4gICAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSBtb3VzZWRvd254LCBkeSA9IGV2ZW50LmNsaWVudFkgLSBtb3VzZWRvd255O1xuICAgICAgICBtb3VzZW1vdmluZyA9IGR4ICogZHggKyBkeSAqIGR5ID4gY2xpY2tEaXN0YW5jZTI7XG4gICAgICB9XG4gICAgICBnZXN0dXJlcy5tb3VzZShcImRyYWdcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW91c2V1cHBlZCgpIHtcbiAgICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZ1wiLCBudWxsKTtcbiAgICAgIHllc2RyYWcoZXZlbnQudmlldywgbW91c2Vtb3ZpbmcpO1xuICAgICAgbm9ldmVudCgpO1xuICAgICAgZ2VzdHVyZXMubW91c2UoXCJlbmRcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKCkge1xuICAgICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgICBjID0gY29udGFpbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmIChnZXN0dXJlID0gYmVmb3Jlc3RhcnQodG91Y2hlc1tpXS5pZGVudGlmaWVyLCBjLCB0b3VjaCwgdGhpcywgYXJndW1lbnRzKSkge1xuICAgICAgICAgIG5vcHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBnZXN0dXJlKFwic3RhcnRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b3VjaG1vdmVkKCkge1xuICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICAgICAgbm9ldmVudCgpO1xuICAgICAgICAgIGdlc3R1cmUoXCJkcmFnXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG91Y2hlbmRlZCgpIHtcbiAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZ2VzdHVyZShcImVuZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJlZm9yZXN0YXJ0KGlkLCBjb250YWluZXIsIHBvaW50LCB0aGF0LCBhcmdzKSB7XG4gICAgICB2YXIgcCA9IHBvaW50KGNvbnRhaW5lciwgaWQpLCBzLCBkeCwgZHksXG4gICAgICAgICAgc3VibGlzdGVuZXJzID0gbGlzdGVuZXJzLmNvcHkoKTtcblxuICAgICAgaWYgKCFjdXN0b21FdmVudChuZXcgRHJhZ0V2ZW50KGRyYWcsIFwiYmVmb3Jlc3RhcnRcIiwgcywgaWQsIGFjdGl2ZSwgcFswXSwgcFsxXSwgMCwgMCwgc3VibGlzdGVuZXJzKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgoZXZlbnQuc3ViamVjdCA9IHMgPSBzdWJqZWN0LmFwcGx5KHRoYXQsIGFyZ3MpKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGR4ID0gcy54IC0gcFswXSB8fCAwO1xuICAgICAgICBkeSA9IHMueSAtIHBbMV0gfHwgMDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KSkgcmV0dXJuO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZ2VzdHVyZSh0eXBlKSB7XG4gICAgICAgIHZhciBwMCA9IHAsIG47XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJzdGFydFwiOiBnZXN0dXJlc1tpZF0gPSBnZXN0dXJlLCBuID0gYWN0aXZlKys7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJlbmRcIjogZGVsZXRlIGdlc3R1cmVzW2lkXSwgLS1hY3RpdmU7IC8vIG5vYnJlYWtcbiAgICAgICAgICBjYXNlIFwiZHJhZ1wiOiBwID0gcG9pbnQoY29udGFpbmVyLCBpZCksIG4gPSBhY3RpdmU7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGN1c3RvbUV2ZW50KG5ldyBEcmFnRXZlbnQoZHJhZywgdHlwZSwgcywgaWQsIG4sIHBbMF0gKyBkeCwgcFsxXSArIGR5LCBwWzBdIC0gcDBbMF0sIHBbMV0gLSBwMFsxXSwgc3VibGlzdGVuZXJzKSwgc3VibGlzdGVuZXJzLmFwcGx5LCBzdWJsaXN0ZW5lcnMsIFt0eXBlLCB0aGF0LCBhcmdzXSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGRyYWcuZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZmlsdGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCQzKCEhXyksIGRyYWcpIDogZmlsdGVyO1xuICAgIH07XG5cbiAgICBkcmFnLmNvbnRhaW5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNvbnRhaW5lciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQkMyhfKSwgZHJhZykgOiBjb250YWluZXI7XG4gICAgfTtcblxuICAgIGRyYWcuc3ViamVjdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN1YmplY3QgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50JDMoXyksIGRyYWcpIDogc3ViamVjdDtcbiAgICB9O1xuXG4gICAgZHJhZy50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50JDMoISFfKSwgZHJhZykgOiB0b3VjaGFibGU7XG4gICAgfTtcblxuICAgIGRyYWcub24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGRyYWcgOiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgZHJhZy5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xpY2tEaXN0YW5jZTIgPSAoXyA9ICtfKSAqIF8sIGRyYWcpIDogTWF0aC5zcXJ0KGNsaWNrRGlzdGFuY2UyKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRyYWc7XG4gIH1cblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgY29uc3QgVCRhID0gVGVtcGxhdGUoJ2Qtc2xpZGVyJywgYFxuPHN0eWxlPlxuICA6aG9zdCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuXG4gIDpob3N0KDpmb2N1cykge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuYmFja2dyb3VuZCB7XG4gICAgcGFkZGluZzogOXB4IDA7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC50cmFjayB7XG4gICAgaGVpZ2h0OiAzcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbGEoMCwgMCUsIDAlLCAwLjIpO1xuICB9XG5cbiAgLnRyYWNrLWZpbGwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDlweDtcbiAgICBoZWlnaHQ6IDNweDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0LCAxMDAlLCA1MCUpO1xuICB9XG5cbiAgLmtub2ItY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxMHB4O1xuICB9XG5cbiAgLmtub2Ige1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC02cHg7XG4gICAgbGVmdDogLTZweDtcbiAgICB3aWR0aDogMTNweDtcbiAgICBoZWlnaHQ6IDEzcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDI0LCAxMDAlLCA1MCUpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07XG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7XG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XG4gIH1cbiAgLm1vdXNlZG93biAua25vYiB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpO1xuICB9XG5cbiAgLmtub2ItaGlnaGxpZ2h0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtNnB4O1xuICAgIGxlZnQ6IC02cHg7XG4gICAgd2lkdGg6IDEzcHg7XG4gICAgaGVpZ2h0OiAxM3B4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IGhzbGEoMCwgMCUsIDAlLCAwLjEpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07XG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xOHM7XG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XG4gIH1cblxuICAuZm9jdXMgLmtub2ItaGlnaGxpZ2h0IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDIpO1xuICB9XG5cbiAgLnRpY2tzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxNnB4O1xuICAgIGhlaWdodDogNHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgLnRpY2tzIC50aWNrIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgaHNsYSgwLCAwJSwgMCUsIDAuMik7XG4gIH1cblxuPC9zdHlsZT5cblxuICA8ZGl2IGNsYXNzPSdiYWNrZ3JvdW5kJz5cbiAgICA8ZGl2IGNsYXNzPSd0cmFjayc+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0ndHJhY2stZmlsbCc+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0na25vYi1jb250YWluZXInPlxuICAgICAgPGRpdiBjbGFzcz0na25vYi1oaWdobGlnaHQnPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0na25vYic+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0ndGlja3MnPjwvZGl2PlxuICA8L2Rpdj5cbmApO1xuXG4gIC8vIEFSSUFcbiAgLy8gSWYgdGhlIHNsaWRlciBoYXMgYSB2aXNpYmxlIGxhYmVsLCBpdCBpcyByZWZlcmVuY2VkIGJ5IGFyaWEtbGFiZWxsZWRieSBvbiB0aGUgc2xpZGVyIGVsZW1lbnQuIE90aGVyd2lzZSwgdGhlIHNsaWRlciBlbGVtZW50IGhhcyBhIGxhYmVsIHByb3ZpZGVkIGJ5IGFyaWEtbGFiZWwuXG4gIC8vIElmIHRoZSBzbGlkZXIgaXMgdmVydGljYWxseSBvcmllbnRlZCwgaXQgaGFzIGFyaWEtb3JpZW50YXRpb24gc2V0IHRvIHZlcnRpY2FsLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBhcmlhLW9yaWVudGF0aW9uIGZvciBhIHNsaWRlciBpcyBob3Jpem9udGFsLlxuXG4gIGNvbnN0IGtleUNvZGVzID0ge1xuICAgIGxlZnQ6IDM3LFxuICAgIHVwOiAzOCxcbiAgICByaWdodDogMzksXG4gICAgZG93bjogNDAsXG4gICAgcGFnZVVwOiAzMyxcbiAgICBwYWdlRG93bjogMzQsXG4gICAgZW5kOiAzNSxcbiAgICBob21lOiAzNlxuICB9O1xuXG4gIGNsYXNzIFNsaWRlciBleHRlbmRzIFQkYShIVE1MRWxlbWVudCkge1xuXG5cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3NsaWRlcicpO1xuICAgICAgLy8gTWFrZXMgdGhlIGVsZW1lbnQgdGFiLWFibGUuXG4gICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7IHRoaXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApOyB9XG5cbiAgICAgIC8vIEtlZXBzIHRyYWNrIG9mIGtleWJvYXJkIHZzLiBtb3VzZSBpbnRlcmFjdGlvbnMgZm9yIGZvY3VzIHJpbmdzXG4gICAgICB0aGlzLm1vdXNlRXZlbnQgPSBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlcyB0byBzaGFkb3cgRE9NIGVsZW1lbnRzXG4gICAgICB0aGlzLmtub2IgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLmtub2ItY29udGFpbmVyJyk7XG4gICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLmJhY2tncm91bmQnKTtcbiAgICAgIHRoaXMudHJhY2tGaWxsID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy50cmFjay1maWxsJyk7XG4gICAgICB0aGlzLnRyYWNrID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3IoJy50cmFjaycpO1xuXG4gICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgYXR0cmlidXRlc1xuICAgICAgdGhpcy5taW4gPSB0aGlzLm1pbiA/IHRoaXMubWluIDogMDtcbiAgICAgIHRoaXMubWF4ID0gdGhpcy5tYXggPyB0aGlzLm1heCA6IDEwMDtcbiAgICAgIHRoaXMuc2NhbGUgPSBsaW5lYXIkMSgpLmRvbWFpbihbdGhpcy5taW4sIHRoaXMubWF4XSkucmFuZ2UoWzAsIDFdKS5jbGFtcCh0cnVlKTtcblxuICAgICAgdGhpcy5vcmlnaW4gPSB0aGlzLm9yaWdpbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5vcmlnaW4gOiB0aGlzLm1pbjtcbiAgICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCA/IHRoaXMuc3RlcCA6IDE7XG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IDApO1xuXG4gICAgICB0aGlzLnRpY2tzID0gdGhpcy50aWNrcyA/IHRoaXMudGlja3MgOiBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyVGlja3MoKTtcblxuICAgICAgdGhpcy5kcmFnID0gZHJhZygpXG4gICAgICAgIC5jb250YWluZXIodGhpcy5iYWNrZ3JvdW5kKVxuICAgICAgICAub24oJ3N0YXJ0JywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubW91c2VFdmVudCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmNsYXNzTGlzdC5hZGQoJ21vdXNlZG93bicpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgIHRoaXMuZHJhZ1VwZGF0ZSgpO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ2RyYWcnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kcmFnVXBkYXRlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubW91c2VFdmVudCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QucmVtb3ZlKCdtb3VzZWRvd24nKTtcbiAgICAgICAgICB0aGlzLmRyYWdVcGRhdGUoKTtcbiAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZSAhPT0gdGhpcy52YWx1ZSkgdGhpcy5kaXNwYXRjaENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuZHJhZyhzZWxlY3QodGhpcy5iYWNrZ3JvdW5kKSk7XG5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsICgpID0+IHtcbiAgICAgICAgaWYoIXRoaXMubW91c2VFdmVudCkge1xuICAgICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKCdmb2N1cycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cycpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bik7XG5cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtyZXR1cm4gWydtaW4nLCAnbWF4JywgJ3ZhbHVlJywgJ3N0ZXAnLCAndGlja3MnLCAnb3JpZ2luJywgJ3RpY2tWYWx1ZXMnLCAndGlja0xhYmVscyddOyB9XG5cbiAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ciwgb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoaXNOYU4obmV3VmFsdWUpIHx8IG5ld1ZhbHVlID09PSB1bmRlZmluZWQgfHwgbmV3VmFsdWUgPT09IG51bGwpIHJldHVybjtcbiAgICAgIGlmIChhdHRyID09ICdtaW4nKSB7XG4gICAgICAgIHRoaXMubWluID0gK25ld1ZhbHVlO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1pbicsIHRoaXMubWluKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyID09ICdtYXgnKSB7XG4gICAgICAgIHRoaXMubWF4ID0gK25ld1ZhbHVlO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIHRoaXMubWF4KTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyID09ICd2YWx1ZScpIHtcbiAgICAgICAgdGhpcy51cGRhdGUoK25ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyID09ICdvcmlnaW4nKSB7XG4gICAgICAgIHRoaXMub3JpZ2luID0gK25ld1ZhbHVlO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyID09ICdzdGVwJykge1xuICAgICAgICBpZiAobmV3VmFsdWUgPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdGVwID0gK25ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYXR0ciA9PSAndGlja3MnKSB7XG4gICAgICAgIHRoaXMudGlja3MgPSAobmV3VmFsdWUgPT09ICcnID8gdHJ1ZSA6IG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIHRoaXMuY2hhbmdlVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbGV0IHN0b3BQcm9wYWdhdGlvbiA9IGZhbHNlO1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIGtleUNvZGVzLmxlZnQ6XG4gICAgICBjYXNlIGtleUNvZGVzLmRvd246XG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMudmFsdWUgLSB0aGlzLnN0ZXApO1xuICAgICAgICBzdG9wUHJvcGFnYXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Uga2V5Q29kZXMucmlnaHQ6XG4gICAgICBjYXNlIGtleUNvZGVzLnVwOlxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnZhbHVlICsgdGhpcy5zdGVwKTtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGtleUNvZGVzLnBhZ2VVcDpcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy52YWx1ZSArIHRoaXMuc3RlcCAqIDEwKTtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2Uga2V5Q29kZXMucGFnZURvd246XG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMudmFsdWUgKyB0aGlzLnN0ZXAgKiAxMCk7XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBrZXlDb2Rlcy5ob21lOlxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLm1pbik7XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBrZXlDb2Rlcy5lbmQ6XG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMubWF4KTtcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKCdmb2N1cycpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlVmFsdWUgIT09IHRoaXMudmFsdWUpIHRoaXMuZGlzcGF0Y2hDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZVZhbHVlUmFuZ2UobWluLCBtYXgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4obWF4LCB2YWx1ZSksIG1pbik7XG4gICAgfVxuXG4gICAgcXVhbnRpemVWYWx1ZSh2YWx1ZSwgc3RlcCkge1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXA7XG4gICAgfVxuXG4gICAgZHJhZ1VwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IGJib3ggPSB0aGlzLmJhY2tncm91bmQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB4ID0gZXZlbnQueDtcbiAgICAgIGNvbnN0IHdpZHRoID0gYmJveC53aWR0aDtcbiAgICAgIHRoaXMudXBkYXRlKHRoaXMuc2NhbGUuaW52ZXJ0KHggLyB3aWR0aCkpO1xuICAgIH1cblxuICAgIHVwZGF0ZSh2YWx1ZSkge1xuICAgICAgbGV0IHYgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnN0ZXAgIT09ICdhbnknKSB7XG4gICAgICAgIHYgPSB0aGlzLnF1YW50aXplVmFsdWUodmFsdWUsIHRoaXMuc3RlcCk7XG4gICAgICB9XG4gICAgICB2ID0gdGhpcy52YWxpZGF0ZVZhbHVlUmFuZ2UodGhpcy5taW4sIHRoaXMubWF4LCB2KTtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLmtub2Iuc3R5bGUubGVmdCA9IHRoaXMuc2NhbGUodikgKiAxMDAgKyAnJSc7XG4gICAgICAgIHRoaXMudHJhY2tGaWxsLnN0eWxlLndpZHRoID0gdGhpcy5zY2FsZSh0aGlzLm1pbiArIE1hdGguYWJzKHYgLSB0aGlzLm9yaWdpbikpICogMTAwICsgJyUnO1xuICAgICAgICB0aGlzLnRyYWNrRmlsbC5zdHlsZS5sZWZ0ID0gdGhpcy5zY2FsZShNYXRoLm1pbih2LCB0aGlzLm9yaWdpbikpICogMTAwICsgJyUnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHYpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHY7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hJbnB1dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoZXMgb25seSBvbiBhIGNvbW1pdHRlZCBjaGFuZ2UgKGJhc2ljYWxseSBvbmx5IG9uIG1vdXNldXApLlxuICAgIGRpc3BhdGNoQ2hhbmdlKCkge1xuICAgICAgY29uc3QgZSA9IG5ldyBFdmVudCgnY2hhbmdlJyk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZSwge30pO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoZXMgb24gZWFjaCB2YWx1ZSBjaGFuZ2UuXG4gICAgZGlzcGF0Y2hJbnB1dCgpIHtcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXZlbnQoJ2lucHV0Jyk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZSwge30pO1xuICAgIH1cblxuICAgIHJlbmRlclRpY2tzKCkge1xuICAgICAgY29uc3QgdGlja3NDb250YWluZXIgPSB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcignLnRpY2tzJyk7XG4gICAgICBpZiAodGhpcy50aWNrcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHRpY2tEYXRhID0gW107XG4gICAgICAgIGlmICh0aGlzLnRpY2tzID4gMCkge1xuICAgICAgICAgIHRpY2tEYXRhID0gdGhpcy5zY2FsZS50aWNrcyh0aGlzLnRpY2tzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0ZXAgPT09ICdhbnknKSB7XG4gICAgICAgICAgdGlja0RhdGEgPSB0aGlzLnNjYWxlLnRpY2tzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGlja0RhdGEgPSByYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXggKyAxZS02LCB0aGlzLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHRpY2tEYXRhLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgY29uc3QgdGljayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIHRpY2suY2xhc3NMaXN0LmFkZCgndGljaycpO1xuICAgICAgICAgIHRpY2suc3R5bGUubGVmdCA9IHRoaXMuc2NhbGUoZCkgKiAxMDAgKyAnJSc7XG4gICAgICAgICAgdGlja3NDb250YWluZXIuYXBwZW5kQ2hpbGQodGljayk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGlja3NDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbG9nbyA9IFwiPHN2ZyB2aWV3Qm94PVxcXCItNjA3IDQxOSA2NCA2NFxcXCI+XFxuICA8cGF0aCBkPVxcXCJNLTU3My40LDQ3OC45Yy04LDAtMTQuNi02LjQtMTQuNi0xNC41czE0LjYtMjUuOSwxNC42LTQwLjhjMCwxNC45LDE0LjYsMzIuOCwxNC42LDQwLjhTLTU2NS40LDQ3OC45LTU3My40LDQ3OC45elxcXCIvPlxcbjwvc3ZnPlxcblwiO1xuXG4gIGNvbnN0IGhlYWRlclRlbXBsYXRlID0gYFxuPHN0eWxlPlxuZGlzdGlsbC1oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogNjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDIwMCwgNjAlLCAxNSUpO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgei1pbmRleDogMjtcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuZGlzdGlsbC1oZWFkZXIgLmNvbnRlbnQge1xuICBoZWlnaHQ6IDcwcHg7XG4gIGdyaWQtY29sdW1uOiBwYWdlO1xufVxuZGlzdGlsbC1oZWFkZXIgYSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgaGVpZ2h0OiA2MHB4O1xuICBsaW5lLWhlaWdodDogNjBweDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICBwYWRkaW5nOiAyMnB4IDA7XG59XG5kaXN0aWxsLWhlYWRlciBhOmhvdmVyIHtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSk7XG59XG5kaXN0aWxsLWhlYWRlciBzdmcge1xuICB3aWR0aDogMjRweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDRweDtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG59XG5AbWVkaWEobWluLXdpZHRoOiAxMDgwcHgpIHtcbiAgZGlzdGlsbC1oZWFkZXIge1xuICAgIGhlaWdodDogNzBweDtcbiAgfVxuICBkaXN0aWxsLWhlYWRlciBhIHtcbiAgICBoZWlnaHQ6IDcwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDcwcHg7XG4gICAgcGFkZGluZzogMjhweCAwO1xuICB9XG4gIGRpc3RpbGwtaGVhZGVyIC5sb2dvIHtcbiAgfVxufVxuZGlzdGlsbC1oZWFkZXIgc3ZnIHBhdGgge1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgc3Ryb2tlLXdpZHRoOiAzcHg7XG59XG5kaXN0aWxsLWhlYWRlciAubG9nbyB7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbn1cbmRpc3RpbGwtaGVhZGVyIC5uYXYge1xuICBmbG9hdDogcmlnaHQ7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5kaXN0aWxsLWhlYWRlciAubmF2IGEge1xuICBmb250LXNpemU6IDEycHg7XG4gIG1hcmdpbi1sZWZ0OiAyNHB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuPC9zdHlsZT5cbjxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gIDxhIGhyZWY9XCIvXCIgY2xhc3M9XCJsb2dvXCI+XG4gICAgJHtsb2dvfVxuICAgIERpc3RpbGxcbiAgPC9hPlxuICA8bmF2IGNsYXNzPVwibmF2XCI+XG4gICAgPGEgaHJlZj1cIi9hYm91dC9cIj5BYm91dDwvYT5cbiAgICA8YSBocmVmPVwiL3ByaXplL1wiPlByaXplPC9hPlxuICAgIDxhIGhyZWY9XCIvam91cm5hbC9cIj5TdWJtaXQ8L2E+XG4gIDwvbmF2PlxuPC9kaXY+XG5gO1xuXG4gIC8vIENvcHlyaWdodCAyMDE4IFRoZSBEaXN0aWxsIFRlbXBsYXRlIEF1dGhvcnNcblxuICBjb25zdCBUJGIgPSBUZW1wbGF0ZSgnZGlzdGlsbC1oZWFkZXInLCBoZWFkZXJUZW1wbGF0ZSwgZmFsc2UpO1xuXG4gIGNsYXNzIERpc3RpbGxIZWFkZXIgZXh0ZW5kcyBUJGIoSFRNTEVsZW1lbnQpIHtcblxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuXG4gIGNvbnN0IHN0eWxlcyQyID0gYFxuPHN0eWxlPlxuICBkaXN0aWxsLWFwcGVuZGl4IHtcbiAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7XG4gIH1cblxuICBkaXN0aWxsLWFwcGVuZGl4IC5jaXRhdGlvbiB7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNXB4O1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIHBhZGRpbmctbGVmdDogMThweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTtcbiAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGNvbG9yOiByZ2JhKDE1MCwgMTUwLCAxNTAsIDEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luLXRvcDogLTEycHg7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgfVxuXG4gIGRpc3RpbGwtYXBwZW5kaXggPiAqIHtcbiAgICBncmlkLWNvbHVtbjogdGV4dDtcbiAgfVxuPC9zdHlsZT5cbmA7XG5cbiAgZnVuY3Rpb24gYXBwZW5kaXhUZW1wbGF0ZShmcm9udE1hdHRlcikge1xuICAgIGxldCBodG1sID0gc3R5bGVzJDI7XG5cbiAgICBpZiAodHlwZW9mIGZyb250TWF0dGVyLmdpdGh1YlVybCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGh0bWwgKz0gYFxuICAgIDxoMyBpZD1cInVwZGF0ZXMtYW5kLWNvcnJlY3Rpb25zXCI+VXBkYXRlcyBhbmQgQ29ycmVjdGlvbnM8L2gzPlxuICAgIDxwPmA7XG4gICAgICBpZiAoZnJvbnRNYXR0ZXIuZ2l0aHViQ29tcGFyZVVwZGF0ZXNVcmwpIHtcbiAgICAgICAgaHRtbCArPSBgPGEgaHJlZj1cIiR7ZnJvbnRNYXR0ZXIuZ2l0aHViQ29tcGFyZVVwZGF0ZXNVcmx9XCI+VmlldyBhbGwgY2hhbmdlczwvYT4gdG8gdGhpcyBhcnRpY2xlIHNpbmNlIGl0IHdhcyBmaXJzdCBwdWJsaXNoZWQuYDtcbiAgICAgIH1cbiAgICAgIGh0bWwgKz0gYFxuICAgIElmIHlvdSBzZWUgbWlzdGFrZXMgb3Igd2FudCB0byBzdWdnZXN0IGNoYW5nZXMsIHBsZWFzZSA8YSBocmVmPVwiJHtmcm9udE1hdHRlci5naXRodWJVcmwgKyAnL2lzc3Vlcy9uZXcnfVwiPmNyZWF0ZSBhbiBpc3N1ZSBvbiBHaXRIdWI8L2E+LiA8L3A+XG4gICAgYDtcbiAgICB9XG5cbiAgICBjb25zdCBqb3VybmFsID0gZnJvbnRNYXR0ZXIuam91cm5hbDtcbiAgICBpZiAodHlwZW9mIGpvdXJuYWwgIT09ICd1bmRlZmluZWQnICYmIGpvdXJuYWwudGl0bGUgPT09ICdEaXN0aWxsJykge1xuICAgICAgaHRtbCArPSBgXG4gICAgPGgzIGlkPVwicmV1c2VcIj5SZXVzZTwvaDM+XG4gICAgPHA+RGlhZ3JhbXMgYW5kIHRleHQgYXJlIGxpY2Vuc2VkIHVuZGVyIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gPGEgaHJlZj1cImh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvXCI+Q0MtQlkgNC4wPC9hPiB3aXRoIHRoZSA8YSBjbGFzcz1cImdpdGh1YlwiIGhyZWY9XCIke2Zyb250TWF0dGVyLmdpdGh1YlVybH1cIj5zb3VyY2UgYXZhaWxhYmxlIG9uIEdpdEh1YjwvYT4sIHVubGVzcyBub3RlZCBvdGhlcndpc2UuIFRoZSBmaWd1cmVzIHRoYXQgaGF2ZSBiZWVuIHJldXNlZCBmcm9tIG90aGVyIHNvdXJjZXMgZG9u4oCZdCBmYWxsIHVuZGVyIHRoaXMgbGljZW5zZSBhbmQgY2FuIGJlIHJlY29nbml6ZWQgYnkgYSBub3RlIGluIHRoZWlyIGNhcHRpb246IOKAnEZpZ3VyZSBmcm9tIOKApuKAnS48L3A+XG4gICAgYDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZyb250TWF0dGVyLnB1Ymxpc2hlZERhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBodG1sICs9IGBcbiAgICA8aDMgaWQ9XCJjaXRhdGlvblwiPkNpdGF0aW9uPC9oMz5cbiAgICA8cD5Gb3IgYXR0cmlidXRpb24gaW4gYWNhZGVtaWMgY29udGV4dHMsIHBsZWFzZSBjaXRlIHRoaXMgd29yayBhczwvcD5cbiAgICA8cHJlIGNsYXNzPVwiY2l0YXRpb24gc2hvcnRcIj4ke2Zyb250TWF0dGVyLmNvbmNhdGVuYXRlZEF1dGhvcnN9LCBcIiR7ZnJvbnRNYXR0ZXIudGl0bGV9XCIsIERpc3RpbGwsICR7ZnJvbnRNYXR0ZXIucHVibGlzaGVkWWVhcn0uPC9wcmU+XG4gICAgPHA+QmliVGVYIGNpdGF0aW9uPC9wPlxuICAgIDxwcmUgY2xhc3M9XCJjaXRhdGlvbiBsb25nXCI+JHtzZXJpYWxpemVGcm9udG1hdHRlclRvQmlidGV4KGZyb250TWF0dGVyKX08L3ByZT5cbiAgICBgO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xhc3MgRGlzdGlsbEFwcGVuZGl4IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuXG4gICAgc3RhdGljIGdldCBpcygpIHsgcmV0dXJuICdkaXN0aWxsLWFwcGVuZGl4JzsgfVxuXG4gICAgc2V0IGZyb250TWF0dGVyKGZyb250TWF0dGVyKSB7XG4gICAgICB0aGlzLmlubmVySFRNTCA9IGFwcGVuZGl4VGVtcGxhdGUoZnJvbnRNYXR0ZXIpO1xuICAgIH1cblxuICB9XG5cbiAgY29uc3QgZm9vdGVyVGVtcGxhdGUgPSBgXG48c3R5bGU+XG5cbjpob3N0IHtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgcGFkZGluZzogMnJlbSAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMTgwLCA1JSwgMTUlKTsgLypoc2woMjAwLCA2MCUsIDE1JSk7Ki9cbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29udGFpbjogY29udGVudDtcbn1cblxuLmZvb3Rlci1jb250YWluZXIgLmxvZ28gc3ZnIHtcbiAgd2lkdGg6IDI0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiA0cHg7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xufVxuXG4uZm9vdGVyLWNvbnRhaW5lciAubG9nbyBzdmcgcGF0aCB7XG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICBzdHJva2Utd2lkdGg6IDNweDtcbn1cblxuLmZvb3Rlci1jb250YWluZXIgLmxvZ28ge1xuICBmb250LXNpemU6IDE3cHg7XG4gIGZvbnQtd2VpZ2h0OiAyMDA7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XG59XG5cbi5mb290ZXItY29udGFpbmVyIHtcbiAgZ3JpZC1jb2x1bW46IHRleHQ7XG59XG5cbi5mb290ZXItY29udGFpbmVyIC5uYXYge1xuICBmb250LXNpemU6IDAuOWVtO1xuICBtYXJnaW4tdG9wOiAxLjVlbTtcbn1cblxuLmZvb3Rlci1jb250YWluZXIgLm5hdiBhIHtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuPC9zdHlsZT5cblxuPGRpdiBjbGFzcz0nZm9vdGVyLWNvbnRhaW5lcic+XG5cbiAgPGEgaHJlZj1cIi9cIiBjbGFzcz1cImxvZ29cIj5cbiAgICAke2xvZ299XG4gICAgRGlzdGlsbFxuICA8L2E+IGlzIGRlZGljYXRlZCB0byBjbGVhciBleHBsYW5hdGlvbnMgb2YgbWFjaGluZSBsZWFybmluZ1xuXG4gIDxkaXYgY2xhc3M9XCJuYXZcIj5cbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi9hYm91dC9cIj5BYm91dDwvYT5cbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi9qb3VybmFsL1wiPlN1Ym1pdDwvYT5cbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi9wcml6ZS9cIj5Qcml6ZTwvYT5cbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9kaXN0aWxsLnB1Yi9hcmNoaXZlL1wiPkFyY2hpdmU8L2E+XG4gICAgPGEgaHJlZj1cImh0dHBzOi8vZGlzdGlsbC5wdWIvcnNzLnhtbFwiPlJTUzwvYT5cbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2Rpc3RpbGxwdWJcIj5HaXRIdWI8L2E+XG4gICAgPGEgaHJlZj1cImh0dHBzOi8vdHdpdHRlci5jb20vZGlzdGlsbHB1YlwiPlR3aXR0ZXI8L2E+XG4gICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IElTU04gMjQ3Ni0wNzU3XG4gIDwvZGl2PlxuXG48L2Rpdj5cblxuYDtcblxuICAvLyBDb3B5cmlnaHQgMjAxOCBUaGUgRGlzdGlsbCBUZW1wbGF0ZSBBdXRob3JzXG5cbiAgY29uc3QgVCRjID0gVGVtcGxhdGUoJ2Rpc3RpbGwtZm9vdGVyJywgZm9vdGVyVGVtcGxhdGUpO1xuXG4gIGNsYXNzIERpc3RpbGxGb290ZXIgZXh0ZW5kcyBUJGMoSFRNTEVsZW1lbnQpIHtcblxuICB9XG5cbiAgLy8gQ29weXJpZ2h0IDIwMTggVGhlIERpc3RpbGwgVGVtcGxhdGUgQXV0aG9yc1xuXG4gIGxldCB0ZW1wbGF0ZUlzTG9hZGluZyA9IGZhbHNlO1xuICBsZXQgcnVubGV2ZWwgPSAwO1xuICBjb25zdCBpbml0aWFsaXplID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHdpbmRvdy5kaXN0aWxsLnJ1bmxldmVsIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5zdWZmaWNpZW50IFJ1bmxldmVsIGZvciBEaXN0aWxsIFRlbXBsYXRlIVwiKTtcbiAgICB9XG5cbiAgICAvKiAxLiBGbGFnIHRoYXQgd2UncmUgYmVpbmcgbG9hZGVkICovXG4gICAgaWYgKFwiZGlzdGlsbFwiIGluIHdpbmRvdyAmJiB3aW5kb3cuZGlzdGlsbC50ZW1wbGF0ZUlzTG9hZGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlJ1bmxldmVsIDE6IERpc3RpbGwgVGVtcGxhdGUgaXMgZ2V0dGluZyBsb2FkZWQgbW9yZSB0aGFuIG9uY2UsIGFib3J0aW5nIVwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZGlzdGlsbC50ZW1wbGF0ZUlzTG9hZGluZyA9IHRydWU7XG4gICAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMTogRGlzdGlsbCBUZW1wbGF0ZSBoYXMgc3RhcnRlZCBsb2FkaW5nLlwiKTtcbiAgICB9XG5cbiAgICAvKiAyLiBBZGQgc3R5bGVzIGlmIHRoZXkgd2VyZW4ndCBhZGRlZCBkdXJpbmcgcHJlcmVuZGVyaW5nICovXG4gICAgbWFrZVN0eWxlVGFnKGRvY3VtZW50KTtcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMTogU3RhdGljIERpc3RpbGwgc3R5bGVzIGhhdmUgYmVlbiBhZGRlZC5cIik7XG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDEtPjIuXCIpO1xuICAgIHdpbmRvdy5kaXN0aWxsLnJ1bmxldmVsICs9IDE7XG5cbiAgICAvKiAzLiBSZWdpc3RlciBDb250cm9sbGVyIGxpc3RlbmVyIGZ1bmN0aW9ucyAqL1xuICAgIC8qIE5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgY29tcG9uZW50cyB0byB0aGVpciBjb25uZWN0ZWQgY2FsbGJhY2tzIGhhdmUgYSBjb250cm9sbGVyIHRvIHRhbGsgdG8uICovXG4gICAgZm9yIChjb25zdCBbZnVuY3Rpb25OYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoQ29udHJvbGxlci5saXN0ZW5lcnMpKSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSdW5sZXZlbCAyOiBDb250cm9sbGVyIGxpc3RlbmVycyBuZWVkIHRvIGJlIGZ1bmN0aW9ucyFcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUuZGVidWcoXCJSdW5sZXZlbCAyOiBXZSBjYW4gbm93IGxpc3RlbiB0byBjb250cm9sbGVyIGV2ZW50cy5cIik7XG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDItPjMuXCIpO1xuICAgIHdpbmRvdy5kaXN0aWxsLnJ1bmxldmVsICs9IDE7XG5cbiAgICAvKiA0LiBSZWdpc3RlciBjb21wb25lbnRzICovXG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtcbiAgICAgIEFic3RyYWN0LCBBcHBlbmRpeCwgQXJ0aWNsZSwgQmlibGlvZ3JhcGh5LCBCeWxpbmUsIENpdGUsIENpdGF0aW9uTGlzdCwgQ29kZSxcbiAgICAgIEZvb3Rub3RlLCBGb290bm90ZUxpc3QsIEZyb250TWF0dGVyJDEsIEhvdmVyQm94LCBUaXRsZSwgRE1hdGgsIFJlZmVyZW5jZXMsIFRPQywgRmlndXJlLFxuICAgICAgU2xpZGVyLCBJbnRlcnN0aXRpYWxcbiAgICBdO1xuXG4gICAgY29uc3QgZGlzdGlsbENvbXBvbmVudHMgPSBbRGlzdGlsbEhlYWRlciwgRGlzdGlsbEFwcGVuZGl4LCBEaXN0aWxsRm9vdGVyXTtcblxuICAgIGlmICh3aW5kb3cuZGlzdGlsbC5ydW5sZXZlbCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkluc3VmZmljaWVudCBSdW5sZXZlbCBmb3IgYWRkaW5nIGN1c3RvbSBlbGVtZW50cyFcIik7XG4gICAgfVxuICAgIGNvbnN0IGFsbENvbXBvbmVudHMgPSBjb21wb25lbnRzLmNvbmNhdChkaXN0aWxsQ29tcG9uZW50cyk7XG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgYWxsQ29tcG9uZW50cykge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDI6IFJlZ2lzdGVyaW5nIGN1c3RvbSBlbGVtZW50OiBcIiArIGNvbXBvbmVudC5pcyk7XG4gICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoY29tcG9uZW50LmlzLCBjb21wb25lbnQpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICBcIlJ1bmxldmVsIDM6IERpc3RpbGwgVGVtcGxhdGUgZmluaXNoZWQgcmVnaXN0ZXJpbmcgY3VzdG9tIGVsZW1lbnRzLlwiXG4gICAgKTtcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMy0+NC5cIik7XG4gICAgd2luZG93LmRpc3RpbGwucnVubGV2ZWwgKz0gMTtcblxuICAgIC8vIElmIHRlbXBsYXRlIHdhcyBhZGRlZCBhZnRlciBET01Db250ZW50TG9hZGVkIHdlIG1heSBoYXZlIG1pc3NlZCB0aGF0IGV2ZW50LlxuICAgIC8vIENvbnRyb2xsZXIgd2lsbCBjaGVjayBmb3IgdGhhdCBjYXNlLCBzbyB0cmlnZ2VyIHRoZSBldmVudCBleHBsaWNpdGx5OlxuICAgIGlmIChkb21Db250ZW50TG9hZGVkKCkpIHtcbiAgICAgIENvbnRyb2xsZXIubGlzdGVuZXJzLkRPTUNvbnRlbnRMb2FkZWQoKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgNDogRGlzdGlsbCBUZW1wbGF0ZSBpbml0aWFsaXNhdGlvbiBjb21wbGV0ZS5cIik7XG4gICAgd2luZG93LmRpc3RpbGwudGVtcGxhdGVJc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB3aW5kb3cuZGlzdGlsbC50ZW1wbGF0ZUhhc0xvYWRlZCA9IHRydWU7XG4gIH07XG5cbiAgd2luZG93LmRpc3RpbGwgPSB7IHJ1bmxldmVsLCBpbml0aWFsaXplLCB0ZW1wbGF0ZUlzTG9hZGluZyB9O1xuXG4gIC8qIDAuIENoZWNrIGJyb3dzZXIgZmVhdHVyZSBzdXBwb3J0OyBzeW5jaHJvbm91c2x5IHBvbHlmaWxsIGlmIG5lZWRlZCAqL1xuICBpZiAoUG9seWZpbGxzLmJyb3dzZXJTdXBwb3J0c0FsbEZlYXR1cmVzKCkpIHtcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMDogTm8gbmVlZCBmb3IgcG9seWZpbGxzLlwiKTtcbiAgICBjb25zb2xlLmRlYnVnKFwiUnVubGV2ZWwgMC0+MS5cIik7XG4gICAgd2luZG93LmRpc3RpbGwucnVubGV2ZWwgKz0gMTtcbiAgICB3aW5kb3cuZGlzdGlsbC5pbml0aWFsaXplKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5kZWJ1ZyhcIlJ1bmxldmVsIDA6IERpc3RpbGwgVGVtcGxhdGUgaXMgbG9hZGluZyBwb2x5ZmlsbHMuXCIpO1xuICAgIFBvbHlmaWxscy5sb2FkKHdpbmRvdy5kaXN0aWxsLmluaXRpYWxpemUpO1xuICB9XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10ZW1wbGF0ZS52Mi5qcy5tYXBcbiJdLCJuYW1lcyI6WyJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiZGF5cyIsIm1vbnRocyIsInplcm9QYWQiLCJuIiwiUkZDIiwiZGF0ZSIsImRheSIsImdldERheSIsInN1YnN0cmluZyIsInBhZGRlZERhdGUiLCJnZXREYXRlIiwibW9udGgiLCJnZXRNb250aCIsInllYXIiLCJnZXRGdWxsWWVhciIsInRvU3RyaW5nIiwiaG91cnMiLCJnZXRVVENIb3VycyIsIm1pbnV0ZXMiLCJnZXRVVENNaW51dGVzIiwic2Vjb25kcyIsImdldFVUQ1NlY29uZHMiLCJjb25jYXQiLCJvYmplY3RGcm9tTWFwIiwibWFwIiwib2JqZWN0IiwiQXJyYXkiLCJmcm9tIiwicmVkdWNlIiwiX3JlZiIsIl9yZWYyIiwiX3NsaWNlZFRvQXJyYXkiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsIm1hcEZyb21PYmplY3QiLCJNYXAiLCJwcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwic2V0IiwiQXV0aG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwibmFtZSIsImF1dGhvciIsInBlcnNvbmFsVVJMIiwiYXV0aG9yVVJMIiwiYWZmaWxpYXRpb24iLCJhZmZpbGlhdGlvblVSTCIsImFmZmlsaWF0aW9ucyIsIl9jcmVhdGVDbGFzcyIsImdldCIsIm5hbWVzIiwic3BsaXQiLCJzbGljZSIsImxlbmd0aCIsImpvaW4iLCJtZXJnZUZyb21ZTUxGcm9udG1hdHRlciIsInRhcmdldCIsInNvdXJjZSIsInRpdGxlIiwicHVibGlzaGVkIiwiRGF0ZSIsInB1Ymxpc2hlZERhdGUiLCJjb25zdHJ1Y3RvciIsIlN0cmluZyIsImNvbnNvbGUiLCJlcnJvciIsImRlc2NyaXB0aW9uIiwiYXV0aG9ycyIsImF1dGhvck9iamVjdCIsImthdGV4IiwicGFzc3dvcmQiLCJkb2kiLCJGcm9udE1hdHRlciIsImJpYmxpb2dyYXBoeSIsImJpYmxpb2dyYXBoeVBhcnNlZCIsImNpdGF0aW9ucyIsImNpdGF0aW9uc0NvbGxlY3RlZCIsImpvdXJuYWwiLCJ1bmRlZmluZWQiLCJfdXJsIiwiZGlzdGlsbFBhdGgiLCJ1cmwiLCJnaXRodWJQYXRoIiwiX3ByZXZpZXdVUkwiLCJ1cGRhdGVkRGF0ZSIsInRvSVNPU3RyaW5nIiwidm9sdW1lIiwicHVibGlzaGVkWWVhciIsIkVycm9yIiwibGFzdE5hbWUiLCJmaXJzdE5hbWUiLCJzbHVnIiwidG9Mb3dlckNhc2UiLCJfdGhpcyIsImNpdGF0aW9uS2V5IiwiZW50cnkiLCJfYmlibGlvZ3JhcGh5IiwiX3R5cGVvZiIsImFzc2lnblRvT2JqZWN0IiwiYmlibGlvZ3JhcGh5RW50cmllcyIsImdpdGh1YlVybCIsInByZXZpZXdVUkwiLCJpc3N1ZSIsInB1Ymxpc2hlZERhdGVSRkMiLCJwdWJsaXNoZWRNb250aCIsInB1Ymxpc2hlZERheSIsInB1Ymxpc2hlZE1vbnRoUGFkZGVkIiwicHVibGlzaGVkRGF5UGFkZGVkIiwidXBkYXRlZERhdGVSRkMiLCJjb25jYXRlbmF0ZWRBdXRob3JzIiwiYmlidGV4QXV0aG9ycyIsImZyb21PYmplY3QiLCJmcm9udE1hdHRlciIsIk11dGF0aW5nIiwic3VwZXJjbGFzcyIsIl9zdXBlcmNsYXNzIiwiX2NsYXNzIiwiX3RoaXMyIiwiX2NhbGxTdXBlciIsIm9wdGlvbnMiLCJjaGlsZExpc3QiLCJjaGFyYWN0ZXJEYXRhIiwic3VidHJlZSIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJJZlBvc3NpYmxlIiwib2JzZXJ2ZSIsIl9pbmhlcml0cyIsImNvbm5lY3RlZENhbGxiYWNrIiwiX2dldCIsIl9nZXRQcm90b3R5cGVPZiIsInByb3RvdHlwZSIsImNhbGwiLCJ0ZXh0Q29udGVudCIsInJvb3QiLCJyZW5kZXJDb250ZW50IiwiVGVtcGxhdGUiLCJ0ZW1wbGF0ZVN0cmluZyIsInVzZVNoYWRvdyIsImFyZ3VtZW50cyIsInRlbXBsYXRlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwid2luZG93IiwiU2hhZHlDU1MiLCJwcmVwYXJlVGVtcGxhdGUiLCJfc3VwZXJjbGFzczIiLCJfY2xhc3MyIiwiX3RoaXMzIiwiY2xvbmUiLCJpbXBvcnROb2RlIiwiY29udGVudCIsImF0dGFjaFNoYWRvdyIsIm1vZGUiLCJzaGFkb3dSb290IiwiYXBwZW5kQ2hpbGQiLCJoYXNBdHRyaWJ1dGUiLCJzdHlsZUVsZW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiJCIsInF1ZXJ5IiwicXVlcnlTZWxlY3RvciIsIiQkIiwicXVlcnlTZWxlY3RvckFsbCIsIm1hdGgiLCJmaW5kRW5kT2ZNYXRoIiwiZGVsaW1pdGVyIiwidGV4dCIsInN0YXJ0SW5kZXgiLCJpbmRleCIsImJyYWNlTGV2ZWwiLCJkZWxpbUxlbmd0aCIsImNoYXJhY3RlciIsInNwbGl0QXREZWxpbWl0ZXJzIiwic3RhcnREYXRhIiwibGVmdERlbGltIiwicmlnaHREZWxpbSIsImRpc3BsYXkiLCJmaW5hbERhdGEiLCJpIiwidHlwZSIsImRhdGEiLCJsb29raW5nRm9yTGVmdCIsImN1cnJJbmRleCIsIm5leHRJbmRleCIsImluZGV4T2YiLCJwdXNoIiwicmF3RGF0YSIsInNwbGl0V2l0aERlbGltaXRlcnMiLCJkZWxpbWl0ZXJzIiwibGVmdCIsInJpZ2h0IiwicmVuZGVyTWF0aEluVGV4dCIsIm9wdGlvbnNDb3B5IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY3JlYXRlVGV4dE5vZGUiLCJ0YWciLCJkaXNwbGF5TW9kZSIsInNldEF0dHJpYnV0ZSIsImUiLCJQYXJzZUVycm9yIiwiZXJyb3JDYWxsYmFjayIsInJlbmRlckVsZW0iLCJlbGVtIiwiY2hpbGROb2RlcyIsImNoaWxkTm9kZSIsIm5vZGVUeXBlIiwibWlnaHRIYXZlTWF0aCIsImZyYWciLCJyZXBsYWNlQ2hpbGQiLCJzaG91bGRSZW5kZXIiLCJpZ25vcmVkVGFncyIsIm5vZGVOYW1lIiwiZGVmYXVsdEF1dG9SZW5kZXJPcHRpb25zIiwibXNnIiwiZXJyIiwicmVuZGVyTWF0aEluRWxlbWVudCIsImRlbGltaXRlclN0cmluZ3MiLCJmbGF0TWFwIiwiZCIsInNvbWUiLCJrYXRleEpTVVJMIiwia2F0ZXhDU1NUYWciLCJUIiwiRE1hdGgiLCJfTXV0YXRpbmciLCJsb2NhbE9wdGlvbnMiLCJrYXRleE9wdGlvbnMiLCJrYXRleEFkZGVkIiwiYWRkS2F0ZXgiLCJjb250YWluZXIiLCJyZW5kZXIiLCJfa2F0ZXhPcHRpb25zIiwia2F0ZXhMb2FkZWRDYWxsYmFjayIsIm1hdGhUYWdzIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJkb25lIiwibWF0aFRhZyIsImYiLCJib2R5IiwiaGVhZCIsImluc2VydEFkamFjZW50SFRNTCIsInNjcmlwdFRhZyIsInNyYyIsImFzeW5jIiwib25sb2FkIiwiY3Jvc3NvcmlnaW4iLCJIVE1MRWxlbWVudCIsImlubGluZU1hdGhSZW5kZXJlZCIsImNvbGxlY3RfY2l0YXRpb25zIiwiZG9tIiwiU2V0IiwiY2l0ZVRhZ3MiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwia2V5U3RyaW5nIiwiZ2V0QXR0cmlidXRlIiwia2V5cyIsImsiLCJ0cmltIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImFkZCIsIl90b0NvbnN1bWFibGVBcnJheSIsImF1dGhvcl9zdHJpbmciLCJlbnQiLCJzZXAiLCJmaW5hbFNlcCIsIm5hbWVfc3RyaW5ncyIsImxhc3QiLCJmaXJzdHMiLCJpbml0aWFscyIsInJlcGxhY2UiLCJzdHIiLCJ2ZW51ZV9zdHJpbmciLCJjaXRlIiwiYm9va3RpdGxlIiwibnVtYmVyIiwicGFnZXMiLCJwdWJsaXNoZXIiLCJsaW5rX3N0cmluZyIsImFyeGl2X21hdGNoIiwiZXhlYyIsImxhYmVsIiwiZG9pX3N0cmluZyIsIm5ld19saW5lIiwidGl0bGVfc3RyaW5nIiwiYmlibGlvZ3JhcGh5X2NpdGUiLCJmYW5jeSIsImhvdmVyX2NpdGUiLCJhX3N0ciIsInZfc3RyIiwiTWF0aCIsIm1pbiIsImRvbUNvbnRlbnRMb2FkZWQiLCJyZWFkeVN0YXRlIiwiX21vdmVMZWdhY3lBZmZpbGlhdGlvbkZvcm1hdEludG9BcnJheSIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJoYXNPbGRTdHlsZSIsIkJvb2xlYW4iLCJoYXNOZXdTdHlsZSIsIndhcm4iLCJuZXdBZmZpbGlhdGlvbiIsInBhcnNlRnJvbnRtYXR0ZXIiLCJlbGVtZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJGcm9udE1hdHRlciQxIiwiX0hUTUxFbGVtZW50IiwiX3RoaXM0IiwiZW50cmllcyIsIl9pdGVyYXRvcjUiLCJfc3RlcDUiLCJub3RpZnkiLCJkZXRhaWwiLCJidWJibGVzIiwiZXZlbnQiLCJDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCJfd3JhcE5hdGl2ZVN1cGVyIiwib3B0aW9uYWxDb21wb25lbnRzIiwiYXJ0aWNsZSIsImJ5bGluZSIsImgxIiwiaGFzUGFzc3dvcmQiLCJpbnRlcnN0aXRpYWwiLCJpbkJyb3dzZXIiLCJvbkxvY2FsaG9zdCIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJpbmNsdWRlcyIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsImFwcGVuZGl4IiwiZm9vdG5vdGVMaXN0IiwiY2l0YXRpb25MaXN0IiwiQ29udHJvbGxlciIsIndhaXRpbmdPbiIsImxpc3RlbmVycyIsIm9uQ2l0ZUtleUNyZWF0ZWQiLCJfZXZlbnQkZGV0YWlsIiwiY2l0ZVRhZyIsIm51bWJlcnMiLCJvbkNpdGVLZXlDaGFuZ2VkIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIndhaXRpbmdDYWxsYmFjayIsImNpdGF0aW9uTGlzdFRhZyIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJsb2ciLCJvbkNpdGVLZXlSZW1vdmVkIiwib25CaWJsaW9ncmFwaHlDaGFuZ2VkIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsImRlYnVnIiwib25Gb290bm90ZUNoYW5nZWQiLCJmb290bm90ZXNMaXN0IiwiZm9vdG5vdGVzIiwib25Gcm9udE1hdHRlckNoYW5nZWQiLCJwcmVyZW5kZXJlZCIsIkRPTUNvbnRlbnRMb2FkZWQiLCJsb2FkZWQiLCJmcm9udE1hdHRlclRhZyIsIl9pdGVyYXRvcjkiLCJfc3RlcDkiLCJfaXRlcmF0b3IxMCIsIl9zdGVwMTAiLCJiYXNlIiwibGF5b3V0IiwicHJpbnQiLCJzdHlsZXMiLCJtYWtlU3R5bGVUYWciLCJzdHlsZVRhZ0lkIiwicHJlcmVuZGVyZWRUYWciLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlVGFnIiwiaWQiLCJjc3NUZXh0VGFnIiwiZmlyc3RTY3JpcHRUYWciLCJhZGRQb2x5ZmlsbCIsInBvbHlmaWxsIiwicG9seWZpbGxMb2FkZWRDYWxsYmFjayIsInNjcmlwdCIsIm9uZXJyb3IiLCJwb2x5ZmlsbHMiLCJzdXBwb3J0IiwiRWxlbWVudCIsIlBvbHlmaWxscyIsImJyb3dzZXJTdXBwb3J0c0FsbEZlYXR1cmVzIiwiZXZlcnkiLCJwb2x5IiwibG9hZCIsImNhbGxiYWNrIiwicG9seWZpbGxMb2FkZWQiLCJuZWVkZWRQb2x5ZmlsbHMiLCJkaXN0aWxsUnVubGV2ZWwiLCJfaXRlcmF0b3IxMSIsIl9zdGVwMTEiLCJfbmVlZGVkUG9seWZpbGxzIiwiZmlsdGVyIiwic2VsZWN0b3IiLCJUJDEiLCJBYnN0cmFjdCIsIl9UJCIsIlQkMiIsIkFwcGVuZGl4IiwiX1QkMiIsImlzT25seVdoaXRlc3BhY2UiLCJBcnRpY2xlIiwiX0hUTUxFbGVtZW50MiIsIl90aGlzNSIsIm11dGF0aW9ucyIsIl9pdGVyYXRvcjEyIiwiX3N0ZXAxMiIsIm11dGF0aW9uIiwiX2l0ZXJhdG9yMTMiLCJhZGRlZE5vZGVzIiwiX3N0ZXAxMyIsImFkZGVkTm9kZSIsIm5vZGVWYWx1ZSIsInRlc3QiLCJ3cmFwcGVyIiwicGFyZW50Tm9kZSIsImNvbW1vbmpzR2xvYmFsIiwiZ2xvYmFsVGhpcyIsImdsb2JhbCIsInNlbGYiLCJjcmVhdGVDb21tb25qc01vZHVsZSIsImZuIiwibW9kdWxlIiwiZXhwb3J0cyIsImJpYnRleFBhcnNlIiwiQmlidGV4UGFyc2VyIiwibm90S2V5IiwicG9zIiwiaW5wdXQiLCJjdXJyZW50RW50cnkiLCJzZXRJbnB1dCIsInQiLCJnZXRFbnRyaWVzIiwiaXNXaGl0ZXNwYWNlIiwibWF0Y2giLCJjYW5Db21tZW50T3V0Iiwic2tpcFdoaXRlc3BhY2UiLCJ0cnlNYXRjaCIsIm1hdGNoQXQiLCJ2YWx1ZV9icmFjZXMiLCJicmFjZWNvdW50Iiwic3RhcnQiLCJlc2NhcGVkIiwiZW5kIiwidmFsdWVfY29tbWVudCIsImJyY2t0Q250IiwidmFsdWVfcXVvdGVzIiwic2luZ2xlX3ZhbHVlIiwidmFsdWVzIiwia2V5X2VxdWFsc192YWx1ZSIsInZhbCIsImtleV92YWx1ZV9saXN0Iiwia3YiLCJlbnRyeV9ib2R5IiwiZGlyZWN0aXZlIiwicHJlYW1ibGUiLCJjb21tZW50IiwiYmlidGV4Iiwic3RyaW5nIiwidG9KU09OIiwiYiIsInRvQmlidGV4IiwianNvbiIsIm91dCIsImVudHJ5VHlwZSIsImVudHJ5VGFncyIsInRhZ3MiLCJqZHgiLCJub3JtYWxpemVUYWciLCJmdWxsIiwieCIsImNoYXIiLCJwYXJzZUJpYnRleCIsInBhcnNlZEVudHJpZXMiLCJfaXRlcmF0b3IxNCIsIl9zdGVwMTQiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsInNlcmlhbGl6ZUZyb250bWF0dGVyVG9CaWJ0ZXgiLCJCaWJsaW9ncmFwaHkiLCJfSFRNTEVsZW1lbnQzIiwiX3RoaXM2IiwiX2l0ZXJhdG9yMTUiLCJfc3RlcDE1IiwicGFyc2VJZlBvc3NpYmxlIiwiX3RoaXM3IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibmV3QmlidGV4IiwicmVjZWl2ZWRCaWJ0ZXgiLCJyZXNwb25zZSIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIsIm9sZFZhbHVlIiwibmV3VmFsdWUiLCJfdGhpczgiLCJvUmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsImJ5bGluZVRlbXBsYXRlIiwiQnlsaW5lIiwiX0hUTUxFbGVtZW50NCIsIlQkMyIsIkNpdGUiLCJfVCQzIiwiX3RoaXM5IiwiX251bWJlcnMiLCJfZW50cmllcyIsIl90aGlzMTAiLCJvdXRlclNwYW4iLCJpbm5lclNwYW4iLCJob3ZlckJveCIsImN1c3RvbUVsZW1lbnRzIiwid2hlbkRlZmluZWQiLCJ0aGVuIiwibGlzdGVuIiwiZGlzcGxheU51bWJlcnMiLCJkaXNwbGF5RW50cmllcyIsImV2ZW50TmFtZSIsInJlc3VsdCIsIm51bWJlclN0cmluZ3MiLCJodG1sIiwic3R5bGVzJDEiLCJyZW5kZXJDaXRhdGlvbkxpc3QiLCJzaXplIiwic3R5bGUiLCJsaXN0Iiwic3R5bGVzVGFnIiwiaGVhZGluZyIsImNsYXNzTmFtZSIsIl9pdGVyYXRvcjE2IiwiX3N0ZXAxNiIsIl9zdGVwMTYkdmFsdWUiLCJsaXN0SXRlbSIsIkNpdGF0aW9uTGlzdCIsIl9IVE1MRWxlbWVudDUiLCJwcmlzbSIsIl9zZWxmIiwiV29ya2VyR2xvYmFsU2NvcGUiLCJQcmlzbSIsImxhbmciLCJ1bmlxdWVJZCIsIl8iLCJtYW51YWwiLCJkaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXIiLCJ1dGlsIiwiZW5jb2RlIiwidG9rZW5zIiwiVG9rZW4iLCJhbGlhcyIsImlzQXJyYXkiLCJvIiwib2JqSWQiLCJvYmoiLCJkZWZpbmVQcm9wZXJ0eSIsImRlZXBDbG9uZSIsInZpc2l0ZWQiLCJmb3JFYWNoIiwidiIsImdldExhbmd1YWdlIiwiY3VycmVudFNjcmlwdCIsInN0YWNrIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGFuZ3VhZ2VzIiwiZXh0ZW5kIiwicmVkZWYiLCJpbnNpZGUiLCJiZWZvcmUiLCJpbnNlcnQiLCJncmFtbWFyIiwicmV0IiwidG9rZW4iLCJuZXdUb2tlbiIsIm9sZCIsIkRGUyIsInByb3BlcnR5VHlwZSIsInBsdWdpbnMiLCJoaWdobGlnaHRBbGwiLCJoaWdobGlnaHRBbGxVbmRlciIsImVudiIsImhvb2tzIiwicnVuIiwiZWxlbWVudHMiLCJhcHBseSIsImhpZ2hsaWdodEVsZW1lbnQiLCJsYW5ndWFnZSIsInBhcmVudCIsImNvZGUiLCJpbnNlcnRIaWdobGlnaHRlZENvZGUiLCJoaWdobGlnaHRlZENvZGUiLCJXb3JrZXIiLCJ3b3JrZXIiLCJmaWxlbmFtZSIsIm9ubWVzc2FnZSIsImV2dCIsInBvc3RNZXNzYWdlIiwic3RyaW5naWZ5IiwiaW1tZWRpYXRlQ2xvc2UiLCJoaWdobGlnaHQiLCJ0b2tlbml6ZSIsInJlc3QiLCJ0b2tlbkxpc3QiLCJMaW5rZWRMaXN0IiwiYWRkQWZ0ZXIiLCJtYXRjaEdyYW1tYXIiLCJ0b0FycmF5IiwiYWxsIiwiY2FsbGJhY2tzIiwibWF0Y2hlZFN0ciIsImdyZWVkeSIsImNsYXNzZXMiLCJhdHRyaWJ1dGVzIiwiYWxpYXNlcyIsInN0YXJ0Tm9kZSIsInN0YXJ0UG9zIiwib25lc2hvdCIsInBhdHRlcm5zIiwiaiIsInBhdHRlcm4iLCJsb29rYmVoaW5kIiwibG9va2JlaGluZExlbmd0aCIsImZsYWdzIiwiUmVnRXhwIiwiY3VycmVudE5vZGUiLCJuZXh0IiwidGFpbCIsInJlbW92ZUNvdW50IiwicHJldiIsImxhc3RJbmRleCIsInRvIiwicCIsImFmdGVyIiwicmVtb3ZlRnJvbSIsInJlbW92ZVJhbmdlIiwid3JhcHBlZCIsIm5vZGUiLCJuZXdOb2RlIiwiY291bnQiLCJhcnJheSIsImFkZEV2ZW50TGlzdGVuZXIiLCJtZXNzYWdlIiwiY2xvc2UiLCJoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2siLCJkZWZlciIsInNldFRpbWVvdXQiLCJtYXJrdXAiLCJhZGRJbmxpbmVkIiwidGFnTmFtZSIsImluY2x1ZGVkQ2RhdGFJbnNpZGUiLCJkZWYiLCJ4bWwiLCJtYXRobWwiLCJzdmciLCJjc3MiLCJjbGlrZSIsImphdmFzY3JpcHQiLCJqcyIsImZpbGVIaWdobGlnaHQiLCJFeHRlbnNpb25zIiwicHJlIiwiZXh0ZW5zaW9uIiwieGhyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwic3RhdHVzIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsInB5dGhvbiIsInB5IiwibHVhIiwiZW52VmFycyIsImluc2lkZVN0cmluZyIsImJhc2giLCJ2YXJpYWJsZSIsInRvQmVDb3BpZWQiLCJzaGVsbCIsImdvIiwiaW5uZXIiLCJjcmVhdGVJbmxpbmUiLCJzdGFyQWx0ZXJuYXRpdmUiLCJ0YWJsZUNlbGwiLCJ0YWJsZVJvdyIsInRhYmxlTGluZSIsIm1hcmtkb3duIiwicHVuY3R1YXRpb24iLCJ3YWxrVG9rZW5zIiwibCIsImNvZGVMYW5nIiwiY29kZUJsb2NrIiwiY2xzIiwiYXV0b2xvYWRlciIsInZhbHVlT2YiLCJmbG9vciIsInJhbmRvbSIsImxvYWRMYW5ndWFnZXMiLCJlbGUiLCJtZCIsImp1bGlhIiwiVCQ0IiwiQ29kZSIsIl9NdXRhdGluZzIiLCJsYW5ndWFnZU5hbWUiLCJjb2RlVGFnIiwidGFicyIsIlNoYWRvd1Jvb3QiLCJwcmVUYWciLCJUJDUiLCJGb290bm90ZSIsIl9UJDQiLCJfdGhpczExIiwiX3RoaXMxMiIsImN1cnJlbnRGb290bm90ZUlkIiwiSWRTdHJpbmciLCJob3N0Iiwic3BhbiIsIlQkNiIsIkZvb3Rub3RlTGlzdCIsIl9UJDUiLCJfaXRlcmF0b3IxNyIsIl9zdGVwMTciLCJmb290bm90ZSIsImJhY2tsaW5rIiwiaHJlZiIsIlQkNyIsIkhvdmVyQm94IiwiX1QkNiIsImJpbmREaXZFdmVudHMiLCJiaW5kVHJpZ2dlckV2ZW50cyIsIl90aGlzMTMiLCJ2aXNpYmxlIiwic2hvd0F0Tm9kZSIsInN0b3BUaW1lb3V0IiwiZXh0ZW5kVGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsInBhc3NpdmUiLCJoaWRlIiwiX3RoaXMxNCIsInNob3ciLCJwb3NpdGlvbiIsInRvcCIsInJvdW5kIiwiYmJveCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIm9mZnNldExlZnQiLCJ3aWR0aCIsIm9mZnNldFRvcCIsImhlaWdodCIsInRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJ0aW1lIiwiX3RoaXMxNSIsIlRpdGxlIiwiX0hUTUxFbGVtZW50NiIsIlQkOCIsIlJlZmVyZW5jZXMiLCJfVCQ3IiwiVE9DIiwiX0hUTUxFbGVtZW50NyIsIl90aGlzMTYiLCJoZWFkaW5ncyIsInJlbmRlclRPQyIsIlRvQyIsIl9pdGVyYXRvcjE4IiwiX3N0ZXAxOCIsImVsIiwiaXNJblRpdGxlIiwiaXNFeGNlcHRpb24iLCJsaW5rIiwibmV3TGluZSIsIkZpZ3VyZSIsIl9IVE1MRWxlbWVudDgiLCJfdGhpczE3IiwiX3JlYWR5IiwiX29uc2NyZWVuIiwiX29mZnNjcmVlbiIsImxvYWRzV2hpbGVTY3JvbGxpbmciLCJtYXJnaW5PYnNlcnZlciIsImRpcmVjdE9ic2VydmVyIiwiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCJ1bm9ic2VydmUiLCJyZWFkeVF1ZXVlIiwicnVuUmVhZHlRdWV1ZSIsIm9uc2NyZWVuIiwicmVhZHkiLCJvZmZzY3JlZW4iLCJfcmVhZHlRdWV1ZSIsImFkZFRvUmVhZHlRdWV1ZSIsImZpZ3VyZSIsInNvcnQiLCJhIiwiX3NlZW5PblNjcmVlbiIsInBvcCIsIl9tYXJnaW5PYnNlcnZlciIsInZpZXdwb3J0SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJtYXJnaW4iLCJyb290TWFyZ2luIiwidGhyZXNob2xkIiwiZGlkT2JzZXJ2ZU1hcmdpbkludGVyc2VjdGlvbiIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiX2l0ZXJhdG9yMTkiLCJfc3RlcDE5IiwiaXNJbnRlcnNlY3RpbmciLCJfZGlyZWN0T2JzZXJ2ZXIiLCJkaWRPYnNlcnZlRGlyZWN0SW50ZXJzZWN0aW9uIiwiX2l0ZXJhdG9yMjAiLCJfc3RlcDIwIiwiaXNTY3JvbGxpbmciLCJyZXNldFRpbWVyIiwicHJvZHVjdGlvbkhvc3RuYW1lIiwiVCQ5IiwiSW50ZXJzdGl0aWFsIiwiX1QkOCIsIl90aGlzMTgiLCJzaG91bGRSZW1vdmVTZWxmIiwicGFzc3dvcmRJbnB1dCIsIm9uaW5wdXQiLCJwYXNzd29yZENoYW5nZWQiLCJlbnRlcmVkIiwiU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJsb2NhbFN0b3JhZ2VJZGVudGlmaWVyIiwiZ2V0SXRlbSIsInByZWZpeCIsInN1ZmZpeCIsInBhdGhuYW1lIiwiYXNjZW5kaW5nIiwiTmFOIiwiYmlzZWN0b3IiLCJjb21wYXJlIiwiYXNjZW5kaW5nQ29tcGFyYXRvciIsImxvIiwiaGkiLCJtaWQiLCJhc2NlbmRpbmdCaXNlY3QiLCJiaXNlY3RSaWdodCIsInJhbmdlIiwic3RvcCIsInN0ZXAiLCJtYXgiLCJjZWlsIiwiZTEwIiwic3FydCIsImU1IiwiZTIiLCJ0aWNrcyIsInJldmVyc2UiLCJ0aWNrSW5jcmVtZW50IiwiaXNGaW5pdGUiLCJwb3dlciIsIkxOMTAiLCJwb3ciLCJ0aWNrU3RlcCIsInN0ZXAwIiwiYWJzIiwic3RlcDEiLCJpbml0UmFuZ2UiLCJkb21haW4iLCJkZWZpbml0aW9uIiwiY3JlYXRlIiwiQ29sb3IiLCJkYXJrZXIiLCJicmlnaHRlciIsInJlSSIsInJlTiIsInJlUCIsInJlSGV4IiwicmVSZ2JJbnRlZ2VyIiwicmVSZ2JQZXJjZW50IiwicmVSZ2JhSW50ZWdlciIsInJlUmdiYVBlcmNlbnQiLCJyZUhzbFBlcmNlbnQiLCJyZUhzbGFQZXJjZW50IiwibmFtZWQiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImNvbG9yIiwiY29weSIsImNoYW5uZWxzIiwiZGlzcGxheWFibGUiLCJyZ2IiLCJoZXgiLCJjb2xvcl9mb3JtYXRIZXgiLCJmb3JtYXRIZXgiLCJmb3JtYXRIc2wiLCJjb2xvcl9mb3JtYXRIc2wiLCJmb3JtYXRSZ2IiLCJjb2xvcl9mb3JtYXRSZ2IiLCJoc2xDb252ZXJ0IiwiZm9ybWF0IiwibSIsInBhcnNlSW50IiwicmdibiIsIlJnYiIsInJnYmEiLCJoc2xhIiwiciIsImciLCJyZ2JDb252ZXJ0Iiwib3BhY2l0eSIsInJnYl9mb3JtYXRIZXgiLCJyZ2JfZm9ybWF0UmdiIiwiaXNOYU4iLCJoIiwiSHNsIiwiaHNsIiwibTIiLCJtMSIsImhzbDJyZ2IiLCJkZWcycmFkIiwiUEkiLCJyYWQyZGVnIiwiSyIsIlhuIiwiWW4iLCJabiIsInQwIiwidDEiLCJ0MiIsInQzIiwibGFiQ29udmVydCIsIkxhYiIsIkhjbCIsImhjbDJsYWIiLCJyZ2IybHJnYiIsInkiLCJ4eXoybGFiIiwieiIsImxhYiIsImxhYjJ4eXoiLCJscmdiMnJnYiIsImhjbENvbnZlcnQiLCJjIiwiYXRhbjIiLCJoY2wiLCJjb3MiLCJzaW4iLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkVEIiwiRUIiLCJCQ19EQSIsImN1YmVoZWxpeENvbnZlcnQiLCJDdWJlaGVsaXgiLCJibCIsImN1YmVoZWxpeCIsImNvc2giLCJzaW5oIiwiY29uc3RhbnQiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImdhbW1hIiwibm9nYW1tYSIsInJnYiQxIiwicmdiR2FtbWEiLCJudW1iZXJBcnJheSIsImlzTnVtYmVyQXJyYXkiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsIkRhdGFWaWV3IiwiZ2VuZXJpY0FycmF5IiwibmIiLCJuYSIsImludGVycG9sYXRlIiwic2V0VGltZSIsImludGVycG9sYXRlTnVtYmVyIiwicmVBIiwicmVCIiwiemVybyIsIm9uZSIsImJpIiwiYW0iLCJibSIsImJzIiwicSIsImludGVycG9sYXRlUm91bmQiLCJjb25zdGFudCQxIiwidW5pdCIsImlkZW50aXR5Iiwibm9ybWFsaXplIiwiY2xhbXBlciIsImJpbWFwIiwiZDAiLCJkMSIsInIwIiwicjEiLCJwb2x5bWFwIiwiY2xhbXAiLCJ1bmtub3duIiwidHJhbnNmb3JtZXIiLCJpbnRlcnBvbGF0ZSQxIiwidHJhbnNmb3JtIiwidW50cmFuc2Zvcm0iLCJwaWVjZXdpc2UiLCJvdXRwdXQiLCJyZXNjYWxlIiwic2NhbGUiLCJpbnZlcnQiLCJyYW5nZVJvdW5kIiwidSIsImNvbnRpbnVvdXMiLCJmb3JtYXREZWNpbWFsIiwidG9FeHBvbmVudGlhbCIsImNvZWZmaWNpZW50IiwiZXhwb25lbnQiLCJmb3JtYXRHcm91cCIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiZm9ybWF0TnVtZXJhbHMiLCJudW1lcmFscyIsInJlIiwiZm9ybWF0U3BlY2lmaWVyIiwic3BlY2lmaWVyIiwiRm9ybWF0U3BlY2lmaWVyIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsImNvbW1hIiwicHJlY2lzaW9uIiwiZm9ybWF0VHJpbSIsImkwIiwiaTEiLCJwcmVmaXhFeHBvbmVudCIsImZvcm1hdFByZWZpeEF1dG8iLCJmb3JtYXRSb3VuZGVkIiwiZm9ybWF0VHlwZXMiLCJ0b0ZpeGVkIiwidG9QcmVjaXNpb24iLCJYIiwidG9VcHBlckNhc2UiLCJpZGVudGl0eSQxIiwicHJlZml4ZXMiLCJmb3JtYXRMb2NhbGUiLCJsb2NhbGUiLCJncm91cCIsIk51bWJlciIsImN1cnJlbmN5UHJlZml4IiwiY3VycmVuY3kiLCJjdXJyZW5jeVN1ZmZpeCIsImRlY2ltYWwiLCJwZXJjZW50IiwibWludXMiLCJuYW4iLCJuZXdGb3JtYXQiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsImNoYXJDb2RlQXQiLCJJbmZpbml0eSIsInBhZGRpbmciLCJmb3JtYXRQcmVmaXgiLCJkZWZhdWx0TG9jYWxlIiwicHJlY2lzaW9uRml4ZWQiLCJwcmVjaXNpb25QcmVmaXgiLCJwcmVjaXNpb25Sb3VuZCIsInRpY2tGb3JtYXQiLCJsaW5lYXJpc2giLCJuaWNlIiwibGluZWFyJDEiLCJ0MCQxIiwidDEkMSIsIm5ld0ludGVydmFsIiwiZmxvb3JpIiwib2Zmc2V0aSIsImZpZWxkIiwiaW50ZXJ2YWwiLCJvZmZzZXQiLCJwcmV2aW91cyIsIm1pbGxpc2Vjb25kIiwiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwic2Vjb25kIiwiZ2V0TWlsbGlzZWNvbmRzIiwibWludXRlIiwiZ2V0U2Vjb25kcyIsImdldE1pbnV0ZXMiLCJob3VyIiwiZ2V0SG91cnMiLCJzZXRIb3VycyIsInNldERhdGUiLCJnZXRUaW1lem9uZU9mZnNldCIsIndlZWtkYXkiLCJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSIsInNldE1vbnRoIiwic2V0RnVsbFllYXIiLCJ1dGNNaW51dGUiLCJzZXRVVENTZWNvbmRzIiwidXRjSG91ciIsInNldFVUQ01pbnV0ZXMiLCJ1dGNEYXkiLCJzZXRVVENIb3VycyIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwidXRjV2Vla2RheSIsImdldFVUQ0RheSIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsInV0Y1R1ZXNkYXkiLCJ1dGNXZWRuZXNkYXkiLCJ1dGNUaHVyc2RheSIsInV0Y0ZyaWRheSIsInV0Y1NhdHVyZGF5IiwidXRjTW9udGgiLCJzZXRVVENNb250aCIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJ1dGNZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJsb2NhbERhdGUiLCJIIiwiTSIsIlMiLCJMIiwidXRjRGF0ZSIsIlVUQyIsIm5ld0RhdGUiLCJmb3JtYXRMb2NhbGUkMSIsImxvY2FsZV9kYXRlVGltZSIsImRhdGVUaW1lIiwibG9jYWxlX2RhdGUiLCJsb2NhbGVfdGltZSIsImxvY2FsZV9wZXJpb2RzIiwicGVyaW9kcyIsImxvY2FsZV93ZWVrZGF5cyIsImxvY2FsZV9zaG9ydFdlZWtkYXlzIiwic2hvcnREYXlzIiwibG9jYWxlX21vbnRocyIsImxvY2FsZV9zaG9ydE1vbnRocyIsInNob3J0TW9udGhzIiwicGVyaW9kUmUiLCJmb3JtYXRSZSIsInBlcmlvZExvb2t1cCIsImZvcm1hdExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiZm9ybWF0U2hvcnRXZWVrZGF5IiwiZm9ybWF0V2Vla2RheSIsImZvcm1hdFNob3J0TW9udGgiLCJmb3JtYXRNb250aCIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRQZXJpb2QiLCJmb3JtYXRRdWFydGVyIiwiZm9ybWF0VW5peFRpbWVzdGFtcCIsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIiwiZm9ybWF0U2Vjb25kcyIsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5IiwiZm9ybWF0V2Vla051bWJlcklTTyIsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdEZ1bGxZZWFyIiwiZm9ybWF0Wm9uZSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwidXRjRm9ybWF0cyIsImZvcm1hdFVUQ1Nob3J0V2Vla2RheSIsImZvcm1hdFVUQ1dlZWtkYXkiLCJmb3JtYXRVVENTaG9ydE1vbnRoIiwiZm9ybWF0VVRDTW9udGgiLCJmb3JtYXRVVENEYXlPZk1vbnRoIiwiZm9ybWF0VVRDTWljcm9zZWNvbmRzIiwiZm9ybWF0VVRDSG91cjI0IiwiZm9ybWF0VVRDSG91cjEyIiwiZm9ybWF0VVRDRGF5T2ZZZWFyIiwiZm9ybWF0VVRDTWlsbGlzZWNvbmRzIiwiZm9ybWF0VVRDTW9udGhOdW1iZXIiLCJmb3JtYXRVVENNaW51dGVzIiwiZm9ybWF0VVRDUGVyaW9kIiwiZm9ybWF0VVRDUXVhcnRlciIsImZvcm1hdFVUQ1NlY29uZHMiLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtOdW1iZXJJU08iLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5IiwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIsImZvcm1hdFVUQ1llYXIiLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ1pvbmUiLCJwYXJzZXMiLCJwYXJzZVNob3J0V2Vla2RheSIsInBhcnNlV2Vla2RheSIsInBhcnNlU2hvcnRNb250aCIsInBhcnNlTW9udGgiLCJwYXJzZUxvY2FsZURhdGVUaW1lIiwicGFyc2VEYXlPZk1vbnRoIiwicGFyc2VNaWNyb3NlY29uZHMiLCJwYXJzZUhvdXIyNCIsInBhcnNlRGF5T2ZZZWFyIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1vbnRoTnVtYmVyIiwicGFyc2VNaW51dGVzIiwicGFyc2VQZXJpb2QiLCJwYXJzZVF1YXJ0ZXIiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5IiwicGFyc2VXZWVrTnVtYmVyU3VuZGF5IiwicGFyc2VXZWVrTnVtYmVySVNPIiwicGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5IiwicGFyc2VXZWVrTnVtYmVyTW9uZGF5IiwicGFyc2VMb2NhbGVEYXRlIiwicGFyc2VMb2NhbGVUaW1lIiwicGFyc2VZZWFyIiwicGFyc2VGdWxsWWVhciIsInBhcnNlWm9uZSIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYWQiLCJwYWRzIiwiY2hhckF0IiwibmV3UGFyc2UiLCJaIiwicGFyc2VTcGVjaWZpZXIiLCJ3ZWVrIiwiZGF5JDEiLCJRIiwiViIsInciLCJXIiwiVSIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJyZXF1b3RlIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZG93IiwibG9jYWxlJDEiLCJ0aW1lRm9ybWF0IiwidGltZVBhcnNlIiwiZGVmYXVsdExvY2FsZSQxIiwiaXNvU3BlY2lmaWVyIiwiZm9ybWF0SXNvTmF0aXZlIiwiZm9ybWF0SXNvIiwicGFyc2VJc29OYXRpdmUiLCJwYXJzZUlzbyIsIm5vb3AiLCJkaXNwYXRjaCIsIkRpc3BhdGNoIiwicGFyc2VUeXBlbmFtZXMiLCJ0eXBlbmFtZXMiLCJ0eXBlcyIsIm9uIiwidHlwZW5hbWUiLCJ0aGF0IiwiYXJncyIsInhodG1sIiwibmFtZXNwYWNlcyIsInhsaW5rIiwieG1sbnMiLCJuYW1lc3BhY2UiLCJzcGFjZSIsImxvY2FsIiwiY3JlYXRvckluaGVyaXQiLCJvd25lckRvY3VtZW50IiwidXJpIiwibmFtZXNwYWNlVVJJIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRvckZpeGVkIiwiZnVsbG5hbWUiLCJjcmVhdG9yIiwibm9uZSIsInNlbGVjdGlvbl9zZWxlY3QiLCJzZWxlY3QiLCJncm91cHMiLCJfZ3JvdXBzIiwic3ViZ3JvdXBzIiwic3ViZ3JvdXAiLCJzdWJub2RlIiwiX19kYXRhX18iLCJTZWxlY3Rpb24iLCJfcGFyZW50cyIsImVtcHR5Iiwic2VsZWN0b3JBbGwiLCJzZWxlY3Rpb25fc2VsZWN0QWxsIiwicGFyZW50cyIsIm1hdGNoZXIiLCJtYXRjaGVzIiwic2VsZWN0aW9uX2ZpbHRlciIsInNwYXJzZSIsInVwZGF0ZSIsInNlbGVjdGlvbl9lbnRlciIsIl9lbnRlciIsIkVudGVyTm9kZSIsImRhdHVtIiwiX25leHQiLCJfcGFyZW50IiwiY2hpbGQiLCJjb25zdGFudCQyIiwia2V5UHJlZml4IiwiYmluZEluZGV4IiwiZW50ZXIiLCJleGl0IiwiZ3JvdXBMZW5ndGgiLCJkYXRhTGVuZ3RoIiwiYmluZEtleSIsIm5vZGVCeUtleVZhbHVlIiwia2V5VmFsdWVzIiwia2V5VmFsdWUiLCJzZWxlY3Rpb25fZGF0YSIsImVhY2giLCJiaW5kIiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwiZXhpdEdyb3VwIiwiX2V4aXQiLCJzZWxlY3Rpb25fZXhpdCIsInNlbGVjdGlvbl9qb2luIiwib25lbnRlciIsIm9udXBkYXRlIiwib25leGl0IiwiYXBwZW5kIiwicmVtb3ZlIiwibWVyZ2UiLCJvcmRlciIsInNlbGVjdGlvbl9tZXJnZSIsInNlbGVjdGlvbiIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtZXJnZXMiLCJncm91cDAiLCJncm91cDEiLCJzZWxlY3Rpb25fb3JkZXIiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsInNlbGVjdGlvbl9zb3J0IiwiYXNjZW5kaW5nJDEiLCJjb21wYXJlTm9kZSIsInNvcnRncm91cHMiLCJzb3J0Z3JvdXAiLCJzZWxlY3Rpb25fY2FsbCIsInNlbGVjdGlvbl9ub2RlcyIsIm5vZGVzIiwic2VsZWN0aW9uX25vZGUiLCJzZWxlY3Rpb25fc2l6ZSIsInNlbGVjdGlvbl9lbXB0eSIsInNlbGVjdGlvbl9lYWNoIiwiYXR0clJlbW92ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImF0dHJSZW1vdmVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiYXR0ckNvbnN0YW50IiwiYXR0ckNvbnN0YW50TlMiLCJzZXRBdHRyaWJ1dGVOUyIsImF0dHJGdW5jdGlvbiIsImF0dHJGdW5jdGlvbk5TIiwic2VsZWN0aW9uX2F0dHIiLCJnZXRBdHRyaWJ1dGVOUyIsImRlZmF1bHRWaWV3Iiwic3R5bGVSZW1vdmUiLCJyZW1vdmVQcm9wZXJ0eSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInNldFByb3BlcnR5Iiwic3R5bGVGdW5jdGlvbiIsInNlbGVjdGlvbl9zdHlsZSIsInN0eWxlVmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInByb3BlcnR5UmVtb3ZlIiwicHJvcGVydHlDb25zdGFudCIsInByb3BlcnR5RnVuY3Rpb24iLCJzZWxlY3Rpb25fcHJvcGVydHkiLCJjbGFzc0FycmF5IiwiY2xhc3NMaXN0IiwiQ2xhc3NMaXN0IiwiX25vZGUiLCJfbmFtZXMiLCJzcGxpY2UiLCJjb250YWlucyIsImNsYXNzZWRBZGQiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJzZWxlY3Rpb25fY2xhc3NlZCIsInRleHRSZW1vdmUiLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJzZWxlY3Rpb25fdGV4dCIsImh0bWxSZW1vdmUiLCJodG1sQ29uc3RhbnQiLCJodG1sRnVuY3Rpb24iLCJzZWxlY3Rpb25faHRtbCIsInJhaXNlIiwibmV4dFNpYmxpbmciLCJzZWxlY3Rpb25fcmFpc2UiLCJsb3dlciIsInByZXZpb3VzU2libGluZyIsInNlbGVjdGlvbl9sb3dlciIsInNlbGVjdGlvbl9hcHBlbmQiLCJjb25zdGFudE51bGwiLCJzZWxlY3Rpb25faW5zZXJ0Iiwic2VsZWN0aW9uX3JlbW92ZSIsInNlbGVjdGlvbl9jbG9uZVNoYWxsb3ciLCJjbG9uZU5vZGUiLCJzZWxlY3Rpb25fY2xvbmVEZWVwIiwic2VsZWN0aW9uX2Nsb25lIiwiZGVlcCIsInNlbGVjdGlvbl9kYXR1bSIsImZpbHRlckV2ZW50cyIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiZmlsdGVyQ29udGV4dExpc3RlbmVyIiwibGlzdGVuZXIiLCJjb250ZXh0TGlzdGVuZXIiLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImV2ZW50MSIsImV2ZW50MCIsInBhcnNlVHlwZW5hbWVzJDEiLCJvblJlbW92ZSIsIl9fb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2FwdHVyZSIsIm9uQWRkIiwid3JhcCIsInNlbGVjdGlvbl9vbiIsImN1c3RvbUV2ZW50Iiwic291cmNlRXZlbnQiLCJwYXJhbXMiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImNhbmNlbGFibGUiLCJkaXNwYXRjaENvbnN0YW50IiwiZGlzcGF0Y2hGdW5jdGlvbiIsInNlbGVjdGlvbl9kaXNwYXRjaCIsInNlbGVjdEFsbCIsImF0dHIiLCJjbGFzc2VkIiwiY3VycmVudCIsInBvaW50Iiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJyZWN0IiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsIm1vdXNlIiwiY2hhbmdlZFRvdWNoZXMiLCJ0b3VjaCIsInRvdWNoZXMiLCJpZGVudGlmaWVyIiwibm9wcm9wYWdhdGlvbiIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsIm5vZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm5vZHJhZyIsInZpZXciLCJfX25vc2VsZWN0IiwiTW96VXNlclNlbGVjdCIsInllc2RyYWciLCJub2NsaWNrIiwiY29uc3RhbnQkMyIsIkRyYWdFdmVudCIsInN1YmplY3QiLCJhY3RpdmUiLCJkeCIsImR5IiwiZGVmYXVsdEZpbHRlciIsImN0cmxLZXkiLCJidXR0b24iLCJkZWZhdWx0Q29udGFpbmVyIiwiZGVmYXVsdFN1YmplY3QiLCJkZWZhdWx0VG91Y2hhYmxlIiwibmF2aWdhdG9yIiwibWF4VG91Y2hQb2ludHMiLCJkcmFnIiwidG91Y2hhYmxlIiwiZ2VzdHVyZXMiLCJtb3VzZWRvd254IiwibW91c2Vkb3dueSIsIm1vdXNlbW92aW5nIiwidG91Y2hlbmRpbmciLCJjbGlja0Rpc3RhbmNlMiIsIm1vdXNlZG93bmVkIiwidG91Y2hzdGFydGVkIiwidG91Y2htb3ZlZCIsInRvdWNoZW5kZWQiLCJnZXN0dXJlIiwiYmVmb3Jlc3RhcnQiLCJtb3VzZW1vdmVkIiwibW91c2V1cHBlZCIsInN1Ymxpc3RlbmVycyIsInAwIiwiY2xpY2tEaXN0YW5jZSIsIlQkYSIsImtleUNvZGVzIiwidXAiLCJkb3duIiwicGFnZVVwIiwicGFnZURvd24iLCJob21lIiwiU2xpZGVyIiwiX1QkYSIsIl90aGlzMTkiLCJjb25uZWN0ZWQiLCJtb3VzZUV2ZW50Iiwia25vYiIsImJhY2tncm91bmQiLCJ0cmFja0ZpbGwiLCJ0cmFjayIsIm9yaWdpbiIsInJlbmRlclRpY2tzIiwiY2hhbmdlVmFsdWUiLCJkcmFnVXBkYXRlIiwiZGlzcGF0Y2hDaGFuZ2UiLCJvbktleURvd24iLCJrZXlDb2RlIiwidmFsaWRhdGVWYWx1ZVJhbmdlIiwicXVhbnRpemVWYWx1ZSIsImRpc3BhdGNoSW5wdXQiLCJFdmVudCIsIl90aGlzMjAiLCJ0aWNrc0NvbnRhaW5lciIsInRpY2tEYXRhIiwidGljayIsImxvZ28iLCJoZWFkZXJUZW1wbGF0ZSIsIlQkYiIsIkRpc3RpbGxIZWFkZXIiLCJfVCRiIiwic3R5bGVzJDIiLCJhcHBlbmRpeFRlbXBsYXRlIiwiZ2l0aHViQ29tcGFyZVVwZGF0ZXNVcmwiLCJEaXN0aWxsQXBwZW5kaXgiLCJfSFRNTEVsZW1lbnQ5IiwiZm9vdGVyVGVtcGxhdGUiLCJUJGMiLCJEaXN0aWxsRm9vdGVyIiwiX1QkYyIsInRlbXBsYXRlSXNMb2FkaW5nIiwicnVubGV2ZWwiLCJpbml0aWFsaXplIiwiZGlzdGlsbCIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiZnVuY3Rpb25OYW1lIiwiY29tcG9uZW50cyIsImRpc3RpbGxDb21wb25lbnRzIiwiYWxsQ29tcG9uZW50cyIsIl9pdGVyYXRvcjIxIiwiX3N0ZXAyMSIsImNvbXBvbmVudCIsImlzIiwidGVtcGxhdGVIYXNMb2FkZWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/distill.js\n"); /***/ }), /***/ "./src/index.js": /*!**********************!*\ !*** ./src/index.js ***! \**********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _distill__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./distill */ \"./src/distill.js\");\n/* harmony import */ var _distill__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_distill__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.css */ \"./src/style.css\");\n/* harmony import */ var _clusters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clusters */ \"./src/clusters.js\");\n/* harmony import */ var _plotting__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./plotting */ \"./src/plotting.js\");\n\n\n\n\nconsole.log(\"Hello\");\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n console.log(\"DOMContentLoaded\");\n (0,_clusters__WEBPACK_IMPORTED_MODULE_2__.plotClusters)();\n (0,_plotting__WEBPACK_IMPORTED_MODULE_3__.init_ablation_plot)();\n}, {\n once: true\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWtCO0FBQ0U7QUFDcUI7QUFDTTtBQUMvQ0UsT0FBTyxDQUFDQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBR3BCQyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFlBQU07RUFDaERILE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0VBQy9CSCx1REFBWSxDQUFDLENBQUM7RUFDZEMsNkRBQWtCLENBQUMsQ0FBQztBQUN4QixDQUFDLEVBQUU7RUFBRUssSUFBSSxFQUFFO0FBQUssQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvZ3Bvc3QvLi9zcmMvaW5kZXguanM/YjYzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuL2Rpc3RpbGxcIlxuaW1wb3J0IFwiLi9zdHlsZS5jc3NcIlxuaW1wb3J0IHsgcGxvdENsdXN0ZXJzIH0gZnJvbSAnLi9jbHVzdGVycydcbmltcG9ydCB7IGluaXRfYWJsYXRpb25fcGxvdCB9IGZyb20gJy4vcGxvdHRpbmcnXG5jb25zb2xlLmxvZyhcIkhlbGxvXCIpO1xuXG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIkRPTUNvbnRlbnRMb2FkZWRcIik7XG4gICAgcGxvdENsdXN0ZXJzKCk7XG4gICAgaW5pdF9hYmxhdGlvbl9wbG90KCk7XG59LCB7IG9uY2U6IHRydWUgfSk7Il0sIm5hbWVzIjpbInBsb3RDbHVzdGVycyIsImluaXRfYWJsYXRpb25fcGxvdCIsImNvbnNvbGUiLCJsb2ciLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbmNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/index.js\n"); /***/ }), /***/ "./src/plotting.js": /*!*************************!*\ !*** ./src/plotting.js ***! \*************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ init_ablation_plot: () => (/* binding */ init_ablation_plot)\n/* harmony export */ });\n/* harmony import */ var _colors_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colors.mjs */ \"./src/colors.mjs\");\n/* harmony import */ var plotly_js_dist_plotly_basic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! plotly.js/dist/plotly-basic */ \"./node_modules/plotly.js/dist/plotly-basic.js\");\n/* harmony import */ var plotly_js_dist_plotly_basic__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(plotly_js_dist_plotly_basic__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\nvar DATA_FOLDER = \"assets/data/plots\";\nvar LINE_SETTINGS = {\n width: 2.5,\n type: \"scatter\",\n mode: \"lines\"\n};\nvar BAR_SETTINGS = {\n width: 0.5,\n type: \"bar\",\n opacity: 0.9,\n marker: {\n line: {\n width: 1.0\n }\n }\n};\nvar TASK_ID_TO_NAME = {\n // Ablations\n agg_score: \"Aggregate Score\",\n \"commonsense_qa/acc_norm\": \"Commonsense QA\",\n \"hellaswag/acc_norm\": \"HellaSwag\",\n \"openbookqa/acc_norm\": \"OpenBook QA\",\n \"piqa/acc_norm\": \"PIQA\",\n \"siqa/acc_norm\": \"Social IQA\",\n \"winogrande/acc_norm\": \"WinoGrande\",\n \"arc/acc_norm\": \"ARC\",\n \"mmlu/acc_norm\": \"MMLU\",\n // Stats\n \"lines_ended_with_punct\": \"Lines Ended With Punctuation\",\n \"lines_chars\": \"Lines Chars\",\n \"short_lines\": \"Short Lines\"\n};\nvar DATASET_ID_TO_NAME = _defineProperty(_defineProperty({\n pii_removed: \"Fineweb\",\n allenai_c4_en: \"C4\",\n \"tiiuae_falcon-refinedweb_data\": \"RefinedWeb\",\n \"red-pajama-v2_jsonl-deduplicated-extract\": \"RedPajamaV2\",\n \"dolma-sample\": \"Dolma1.6\",\n dedup_minhash_independent_output: \"Independent Dedup MinHash\",\n \"dedup_minhash_CC-MAIN-2013-48_output\": \"Full MinHash CC-MAIN-2013-48\",\n \"dedup_minhash_independent_output_CC-MAIN-2013-48\": \"Independent MinHash CC-MAIN-2013-48\",\n \"ind_minhash-CC-MAIN-2019-18\": \"Independent MinHash CC-MAIN-2019-18\",\n \"wet-extraction-2019-18\": \"WET Extraction 2019-18\"\n}, \"dedup_minhash_CC-MAIN-2013-48_output\", \"Full MinHash CC-MAIN-2013-48\"), \"dedup_minhash_independent_output_CC-MAIN-2013-48\", \"Independent MinHash CC-MAIN-2013-48\");\nvar DEFAULT_SETTINGS = {\n slider: {\n max: 30,\n min: 0,\n \"default\": 0\n },\n defaultMetric: \"agg_score\",\n type: \"line\"\n};\nvar DEFAULT_LAYOUT = {\n font: {\n family: \"apple-system, Arial, sans-serif\"\n },\n title: {\n text: \"Plot Title\",\n font: {\n size: 19,\n family: \"apple-system, Arial, sans-serif\"\n }\n },\n xaxis: {\n title: {\n text: \"Training tokens (billions)\",\n font: {\n size: 15,\n family: \"apple-system, Arial, sans-serif\"\n }\n },\n tickfont: {\n size: 14,\n family: \"apple-system, Arial, sans-serif\"\n },\n showgrid: false,\n mirror: true,\n ticks: \"outside\",\n showline: true\n },\n yaxis: {\n title: {\n text: \"Agg Score\",\n font: {\n size: 15,\n family: \"apple-system, Arial, sans-serif\"\n },\n standoff: 10\n },\n showgrid: false,\n mirror: true,\n ticks: \"outside\",\n showline: true,\n tickfont: {\n size: 14,\n family: \"apple-system, Arial, sans-serif\"\n }\n },\n legend: {\n orientation: \"v\",\n xanchor: \"right\",\n yanchor: \"bottom\",\n x: 1,\n y: 0,\n font: {\n size: 14,\n family: \"apple-system, Arial, sans-serif\"\n },\n bgcolor: \"rgba(0,0,0,0)\"\n },\n margin: {\n t: 30,\n b: 50\n },\n height: 400\n};\nvar getAutoRange = function getAutoRange(traces) {\n var minX = Math.min.apply(Math, _toConsumableArray(traces.flatMap(function (trace) {\n return trace.x;\n })));\n var maxX = Math.max.apply(Math, _toConsumableArray(traces.flatMap(function (trace) {\n return trace.x;\n })));\n return [minX * 0.95, maxX * 1.05];\n};\nvar createAblationPlottingElements = function createAblationPlottingElements(plotElement, indexMapping, settings) {\n var plot = document.createElement(\"figure\");\n var controls = document.createElement(\"div\");\n plot.classList.add(\"plotly\");\n controls.classList.add(\"plotly_controls\");\n plotElement.appendChild(plot);\n plotElement.appendChild(controls);\n var metricOptions = Object.keys(indexMapping).filter(function (metric) {\n return metric in TASK_ID_TO_NAME;\n });\n // Dropdown\n var dropdown = undefined;\n console.log(metricOptions);\n if (metricOptions.length > 1) {\n var dropdownLabel = document.createElement(\"label\");\n dropdownLabel.textContent = \"Metric:\";\n dropdown = document.createElement(\"select\");\n dropdown.innerHTML = metricOptions.map(function (option) {\n return \"\");\n }).join(\"\");\n dropdown.value = settings.defaultMetric;\n var dropdownContainer = document.createElement(\"div\");\n dropdownContainer.classList.add(\"plotly_input_container\");\n dropdownContainer.appendChild(dropdownLabel);\n dropdownContainer.appendChild(dropdown);\n controls.appendChild(dropdownContainer);\n }\n var slider = undefined;\n if (settings.slider !== null) {\n var sliderLabel = document.createElement(\"label\");\n sliderLabel.textContent = \"Rolling window:\";\n slider = document.createElement(\"input\");\n slider.type = \"range\";\n slider.min = settings.slider.min;\n slider.max = settings.slider.max;\n slider.value = settings.slider[\"default\"];\n\n // current value\n var sliderValue = document.createElement(\"span\");\n sliderValue.textContent = slider.value;\n slider.addEventListener(\"input\", function () {\n sliderValue.textContent = slider.value;\n });\n var sliderInputContainer = document.createElement(\"div\");\n sliderInputContainer.classList.add(\"plotly_slider\");\n sliderInputContainer.appendChild(slider);\n sliderInputContainer.appendChild(sliderValue);\n var sliderContainer = document.createElement(\"div\");\n sliderContainer.classList.add(\"plotly_input_container\");\n sliderContainer.appendChild(sliderLabel);\n sliderContainer.appendChild(sliderInputContainer);\n controls.appendChild(sliderContainer);\n }\n return {\n dropdown: dropdown,\n slider: slider,\n plot: plot\n };\n};\nvar rollingWindow = function rollingWindow(data, windowSize) {\n if (windowSize === 0) {\n return data;\n }\n var rollingData = [];\n\n // Start at halfWindowSize to ensure we can get a full window\n for (var i = windowSize; i < data.length; i++) {\n var windowStart = i - windowSize;\n var windowEnd = i;\n var windowData = data.slice(windowStart, windowEnd);\n var windowAverage = windowData.reduce(function (acc, value) {\n return acc + value;\n }, 0) / windowData.length;\n rollingData.push(windowAverage);\n }\n return rollingData;\n};\nvar init_ablation_plot = function init_ablation_plot() {\n var plotElements = document.querySelectorAll('[id^=\"plot-\"]');\n plotElements.forEach( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(plotElement) {\n var plotName, indexData, settings, indexMapping, _createAblationPlotti, dropdown, slider, plot, timeoutId, updatePlot, _updatePlot;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n _updatePlot = function _updatePlot3() {\n _updatePlot = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(dropdown, slider) {\n var _dropdown$value, _slider$value, _metricData$traces$me, _metricData$traces, _metricData$data;\n var metricName, sliderValue, metricData, traces, _iterator, _step, _ref2, _traceData$label, _step$value, index, _step$value$, key, traceData, y, x, plotSettings, trace, width, layout;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n metricName = (_dropdown$value = dropdown === null || dropdown === void 0 ? void 0 : dropdown.value) !== null && _dropdown$value !== void 0 ? _dropdown$value : settings.defaultMetric;\n sliderValue = parseInt((_slider$value = slider === null || slider === void 0 ? void 0 : slider.value) !== null && _slider$value !== void 0 ? _slider$value : 0);\n console.log(plotName);\n console.log(metricName);\n console.log(indexMapping);\n _context.next = 7;\n return fetch(\"\".concat(DATA_FOLDER, \"/\").concat(plotName, \"/\").concat(indexMapping[metricName][\"file\"])).then(function (response) {\n return response.json();\n });\n case 7:\n metricData = _context.sent;\n traces = (_metricData$traces$me = metricData === null || metricData === void 0 || (_metricData$traces = metricData.traces) === null || _metricData$traces === void 0 ? void 0 : _metricData$traces[metricName]) !== null && _metricData$traces$me !== void 0 ? _metricData$traces$me : [];\n _iterator = _createForOfIteratorHelper(Object.entries((_metricData$data = metricData === null || metricData === void 0 ? void 0 : metricData.data) !== null && _metricData$data !== void 0 ? _metricData$data : []).entries());\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _step$value = _slicedToArray(_step.value, 2), index = _step$value[0], _step$value$ = _slicedToArray(_step$value[1], 2), key = _step$value$[0], traceData = _step$value$[1];\n y = rollingWindow(traceData.y, sliderValue);\n x = traceData.x.slice(0, y.length);\n plotSettings = settings.type === \"bar\" ? BAR_SETTINGS : LINE_SETTINGS;\n trace = _objectSpread({\n x: x,\n y: y,\n name: (_ref2 = (_traceData$label = traceData.label) !== null && _traceData$label !== void 0 ? _traceData$label : DATASET_ID_TO_NAME[key]) !== null && _ref2 !== void 0 ? _ref2 : key,\n marker: {\n color: (0,_colors_mjs__WEBPACK_IMPORTED_MODULE_0__.getColor)(index)\n },\n line: {\n color: (0,_colors_mjs__WEBPACK_IMPORTED_MODULE_0__.getColor)(index)\n }\n }, plotSettings);\n traces.push(trace);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n console.log(traces);\n width = plot.parentElement.offsetWidth;\n layout = lodash__WEBPACK_IMPORTED_MODULE_2___default().merge({}, DEFAULT_LAYOUT, {\n width: width,\n yaxis: {\n title: {\n text: TASK_ID_TO_NAME[metricName]\n }\n },\n xaxis: {\n range: settings.autoSetXRange ? getAutoRange(traces) : undefined\n }\n }, metricData.layout);\n plotly_js_dist_plotly_basic__WEBPACK_IMPORTED_MODULE_1___default().react(plot, traces, layout);\n window.addEventListener(\"resize\", function () {\n // If the window size is smaller than 768, we don't care as it's not shown\n if (window.innerWidth < 768) {\n return;\n }\n plotly_js_dist_plotly_basic__WEBPACK_IMPORTED_MODULE_1___default().relayout(plot, {\n width: plot.parentElement.offsetWidth\n });\n });\n case 16:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _updatePlot.apply(this, arguments);\n };\n updatePlot = function _updatePlot2(_x2, _x3) {\n return _updatePlot.apply(this, arguments);\n };\n plotName = plotElement.id.replace(\"plot-\", \"\");\n _context2.next = 5;\n return fetch(\"\".concat(DATA_FOLDER, \"/\").concat(plotName, \"/index.json\")).then(function (response) {\n return response.json();\n });\n case 5:\n indexData = _context2.sent;\n settings = lodash__WEBPACK_IMPORTED_MODULE_2___default().merge({}, DEFAULT_SETTINGS, indexData.settings);\n indexMapping = indexData.files;\n _createAblationPlotti = createAblationPlottingElements(plotElement, indexMapping, settings), dropdown = _createAblationPlotti.dropdown, slider = _createAblationPlotti.slider, plot = _createAblationPlotti.plot;\n plot.id = \"graph-\".concat(plotName);\n if (dropdown !== undefined) {\n dropdown.addEventListener(\"change\", function () {\n return updatePlot(dropdown, slider);\n });\n }\n // Debounce the slider\n if (slider !== undefined) {\n slider.addEventListener(\"input\", function () {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(function () {\n updatePlot(dropdown, slider);\n }, 500);\n });\n }\n // Shared plot\n plotly_js_dist_plotly_basic__WEBPACK_IMPORTED_MODULE_1___default().newPlot(plot, []);\n\n // Initial plot\n updatePlot(dropdown, slider);\n case 14:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QSxDQUFBaEksS0FBQSxPQUFBRSxTQUFBO0lBQUE7RUFBQSxJQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2Jsb2dwb3N0Ly4vc3JjL3Bsb3R0aW5nLmpzPzMwZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q29sb3IgfSBmcm9tIFwiLi9jb2xvcnMubWpzXCJcbmltcG9ydCBQbG90bHkgZnJvbSBcInBsb3RseS5qcy9kaXN0L3Bsb3RseS1iYXNpY1wiXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCJcblxuY29uc3QgREFUQV9GT0xERVIgPSBcImFzc2V0cy9kYXRhL3Bsb3RzXCJcblxuXG5jb25zdCBMSU5FX1NFVFRJTkdTID0ge1xuICAgIHdpZHRoOiAyLjUsXG4gICAgdHlwZTogXCJzY2F0dGVyXCIsXG4gICAgbW9kZTogXCJsaW5lc1wiLFxufVxuY29uc3QgQkFSX1NFVFRJTkdTID0ge1xuICAgIHdpZHRoOiAwLjUsXG4gICAgdHlwZTogXCJiYXJcIixcbiAgICBvcGFjaXR5OiAwLjksXG4gICAgbWFya2VyOiB7XG4gICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAxLjBcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgVEFTS19JRF9UT19OQU1FID0ge1xuICAgIC8vIEFibGF0aW9uc1xuICAgIGFnZ19zY29yZTogXCJBZ2dyZWdhdGUgU2NvcmVcIixcbiAgICBcImNvbW1vbnNlbnNlX3FhL2FjY19ub3JtXCI6IFwiQ29tbW9uc2Vuc2UgUUFcIixcbiAgICBcImhlbGxhc3dhZy9hY2Nfbm9ybVwiOiBcIkhlbGxhU3dhZ1wiLFxuICAgIFwib3BlbmJvb2txYS9hY2Nfbm9ybVwiOiBcIk9wZW5Cb29rIFFBXCIsXG4gICAgXCJwaXFhL2FjY19ub3JtXCI6IFwiUElRQVwiLFxuICAgIFwic2lxYS9hY2Nfbm9ybVwiOiBcIlNvY2lhbCBJUUFcIixcbiAgICBcIndpbm9ncmFuZGUvYWNjX25vcm1cIjogXCJXaW5vR3JhbmRlXCIsXG4gICAgXCJhcmMvYWNjX25vcm1cIjogXCJBUkNcIixcbiAgICBcIm1tbHUvYWNjX25vcm1cIjogXCJNTUxVXCIsXG5cbiAgICAvLyBTdGF0c1xuICAgIFwibGluZXNfZW5kZWRfd2l0aF9wdW5jdFwiOiBcIkxpbmVzIEVuZGVkIFdpdGggUHVuY3R1YXRpb25cIixcbiAgICBcImxpbmVzX2NoYXJzXCI6IFwiTGluZXMgQ2hhcnNcIixcbiAgICBcInNob3J0X2xpbmVzXCI6IFwiU2hvcnQgTGluZXNcIixcbn07XG5cbmNvbnN0IERBVEFTRVRfSURfVE9fTkFNRSA9IHtcbiAgICBwaWlfcmVtb3ZlZDogXCJGaW5ld2ViXCIsXG4gICAgYWxsZW5haV9jNF9lbjogXCJDNFwiLFxuICAgIFwidGlpdWFlX2ZhbGNvbi1yZWZpbmVkd2ViX2RhdGFcIjogXCJSZWZpbmVkV2ViXCIsXG4gICAgXCJyZWQtcGFqYW1hLXYyX2pzb25sLWRlZHVwbGljYXRlZC1leHRyYWN0XCI6IFwiUmVkUGFqYW1hVjJcIixcbiAgICBcImRvbG1hLXNhbXBsZVwiOiBcIkRvbG1hMS42XCIsXG4gICAgZGVkdXBfbWluaGFzaF9pbmRlcGVuZGVudF9vdXRwdXQ6IFwiSW5kZXBlbmRlbnQgRGVkdXAgTWluSGFzaFwiLFxuICAgIFwiZGVkdXBfbWluaGFzaF9DQy1NQUlOLTIwMTMtNDhfb3V0cHV0XCI6IFwiRnVsbCBNaW5IYXNoIENDLU1BSU4tMjAxMy00OFwiLFxuICAgIFwiZGVkdXBfbWluaGFzaF9pbmRlcGVuZGVudF9vdXRwdXRfQ0MtTUFJTi0yMDEzLTQ4XCI6IFwiSW5kZXBlbmRlbnQgTWluSGFzaCBDQy1NQUlOLTIwMTMtNDhcIixcbiAgICBcImluZF9taW5oYXNoLUNDLU1BSU4tMjAxOS0xOFwiOiBcIkluZGVwZW5kZW50IE1pbkhhc2ggQ0MtTUFJTi0yMDE5LTE4XCIsXG4gICAgXCJ3ZXQtZXh0cmFjdGlvbi0yMDE5LTE4XCI6IFwiV0VUIEV4dHJhY3Rpb24gMjAxOS0xOFwiLFxuICAgIFwiZGVkdXBfbWluaGFzaF9DQy1NQUlOLTIwMTMtNDhfb3V0cHV0XCI6IFwiRnVsbCBNaW5IYXNoIENDLU1BSU4tMjAxMy00OFwiLFxuICAgIFwiZGVkdXBfbWluaGFzaF9pbmRlcGVuZGVudF9vdXRwdXRfQ0MtTUFJTi0yMDEzLTQ4XCI6IFwiSW5kZXBlbmRlbnQgTWluSGFzaCBDQy1NQUlOLTIwMTMtNDhcIixcblxufTtcblxuY29uc3QgREVGQVVMVF9TRVRUSU5HUyA9IHtcbiAgICBzbGlkZXI6IHtcbiAgICAgICAgbWF4OiAzMCxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBkZWZhdWx0OiAwLFxuICAgIH0sXG4gICAgZGVmYXVsdE1ldHJpYzogXCJhZ2dfc2NvcmVcIixcbiAgICB0eXBlOiBcImxpbmVcIlxufTtcblxuY29uc3QgREVGQVVMVF9MQVlPVVQgPSB7XG4gICAgZm9udDoge1xuICAgICAgICBmYW1pbHk6IFwiYXBwbGUtc3lzdGVtLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICAgIH0sXG4gICAgdGl0bGU6IHtcbiAgICAgICAgdGV4dDogXCJQbG90IFRpdGxlXCIsXG4gICAgICAgIGZvbnQ6IHtcbiAgICAgICAgICAgIHNpemU6IDE5LFxuICAgICAgICAgICAgZmFtaWx5OiBcImFwcGxlLXN5c3RlbSwgQXJpYWwsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHhheGlzOiB7XG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0ZXh0OiBcIlRyYWluaW5nIHRva2VucyAoYmlsbGlvbnMpXCIsXG4gICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgICAgc2l6ZTogMTUsXG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcImFwcGxlLXN5c3RlbSwgQXJpYWwsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRpY2tmb250OiB7XG4gICAgICAgICAgICBzaXplOiAxNCxcbiAgICAgICAgICAgIGZhbWlseTogXCJhcHBsZS1zeXN0ZW0sIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dncmlkOiBmYWxzZSxcbiAgICAgICAgbWlycm9yOiB0cnVlLFxuICAgICAgICB0aWNrczogXCJvdXRzaWRlXCIsXG4gICAgICAgIHNob3dsaW5lOiB0cnVlLFxuICAgIH0sXG4gICAgeWF4aXM6IHtcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHRleHQ6IFwiQWdnIFNjb3JlXCIsXG4gICAgICAgICAgICBmb250OiB7XG4gICAgICAgICAgICAgICAgc2l6ZTogMTUsXG4gICAgICAgICAgICAgICAgZmFtaWx5OiBcImFwcGxlLXN5c3RlbSwgQXJpYWwsIHNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFuZG9mZjogMTAsXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dncmlkOiBmYWxzZSxcbiAgICAgICAgbWlycm9yOiB0cnVlLFxuICAgICAgICB0aWNrczogXCJvdXRzaWRlXCIsXG4gICAgICAgIHNob3dsaW5lOiB0cnVlLFxuICAgICAgICB0aWNrZm9udDoge1xuICAgICAgICAgICAgc2l6ZTogMTQsXG4gICAgICAgICAgICBmYW1pbHk6IFwiYXBwbGUtc3lzdGVtLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgbGVnZW5kOiB7XG4gICAgICAgIG9yaWVudGF0aW9uOiBcInZcIixcbiAgICAgICAgeGFuY2hvcjogXCJyaWdodFwiLFxuICAgICAgICB5YW5jaG9yOiBcImJvdHRvbVwiLFxuICAgICAgICB4OiAxLFxuICAgICAgICB5OiAwLFxuICAgICAgICBmb250OiB7XG4gICAgICAgICAgICBzaXplOiAxNCxcbiAgICAgICAgICAgIGZhbWlseTogXCJhcHBsZS1zeXN0ZW0sIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJnY29sb3I6IFwicmdiYSgwLDAsMCwwKVwiLFxuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICAgIHQ6IDMwLFxuICAgICAgICBiOiA1MCxcbiAgICB9LFxuICAgIGhlaWdodDogNDAwLFxufTtcblxuY29uc3QgZ2V0QXV0b1JhbmdlID0gKHRyYWNlcykgPT4ge1xuICAgIGxldCBtaW5YID0gTWF0aC5taW4oLi4udHJhY2VzLmZsYXRNYXAoKHRyYWNlKSA9PiB0cmFjZS54KSk7XG4gICAgbGV0IG1heFggPSBNYXRoLm1heCguLi50cmFjZXMuZmxhdE1hcCgodHJhY2UpID0+IHRyYWNlLngpKTtcbiAgICByZXR1cm4gW21pblggKiAwLjk1LCBtYXhYICogMS4wNV07XG59O1xuXG5cbmNvbnN0IGNyZWF0ZUFibGF0aW9uUGxvdHRpbmdFbGVtZW50cyA9IChcbiAgICBwbG90RWxlbWVudCxcbiAgICBpbmRleE1hcHBpbmcsXG4gICAgc2V0dGluZ3NcbikgPT4ge1xuICAgIGNvbnN0IHBsb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmlndXJlXCIpO1xuICAgIGNvbnN0IGNvbnRyb2xzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBwbG90LmNsYXNzTGlzdC5hZGQoXCJwbG90bHlcIik7XG4gICAgY29udHJvbHMuY2xhc3NMaXN0LmFkZChcInBsb3RseV9jb250cm9sc1wiKTtcbiAgICBwbG90RWxlbWVudC5hcHBlbmRDaGlsZChwbG90KTtcbiAgICBwbG90RWxlbWVudC5hcHBlbmRDaGlsZChjb250cm9scyk7XG5cbiAgICBjb25zdCBtZXRyaWNPcHRpb25zID0gT2JqZWN0LmtleXMoaW5kZXhNYXBwaW5nKS5maWx0ZXIoXG4gICAgICAgIChtZXRyaWMpID0+IG1ldHJpYyBpbiBUQVNLX0lEX1RPX05BTUVcbiAgICApO1xuICAgIC8vIERyb3Bkb3duXG4gICAgbGV0IGRyb3Bkb3duID0gdW5kZWZpbmVkXG4gICAgY29uc29sZS5sb2cobWV0cmljT3B0aW9ucylcbiAgICBpZiAobWV0cmljT3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIik7XG4gICAgICAgIGRyb3Bkb3duTGFiZWwudGV4dENvbnRlbnQgPSBcIk1ldHJpYzpcIjtcbiAgICAgICAgZHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgICAgICBkcm9wZG93bi5pbm5lckhUTUwgPSBtZXRyaWNPcHRpb25zXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgIGA8b3B0aW9uIHZhbHVlPVwiJHtvcHRpb259XCI+JHtUQVNLX0lEX1RPX05BTUVbb3B0aW9uXX08L29wdGlvbj5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgICAgZHJvcGRvd24udmFsdWUgPSBzZXR0aW5ncy5kZWZhdWx0TWV0cmljO1xuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZHJvcGRvd25Db250YWluZXIuY2xhc3NMaXN0LmFkZChcInBsb3RseV9pbnB1dF9jb250YWluZXJcIik7XG4gICAgICAgIGRyb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKGRyb3Bkb3duTGFiZWwpO1xuICAgICAgICBkcm9wZG93bkNvbnRhaW5lci5hcHBlbmRDaGlsZChkcm9wZG93bik7XG4gICAgICAgIGNvbnRyb2xzLmFwcGVuZENoaWxkKGRyb3Bkb3duQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBsZXQgc2xpZGVyID0gdW5kZWZpbmVkO1xuICAgIGlmIChzZXR0aW5ncy5zbGlkZXIgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc2xpZGVyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIik7XG4gICAgICAgIHNsaWRlckxhYmVsLnRleHRDb250ZW50ID0gXCJSb2xsaW5nIHdpbmRvdzpcIjtcbiAgICAgICAgc2xpZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICBzbGlkZXIudHlwZSA9IFwicmFuZ2VcIjtcbiAgICAgICAgc2xpZGVyLm1pbiA9IHNldHRpbmdzLnNsaWRlci5taW47XG4gICAgICAgIHNsaWRlci5tYXggPSBzZXR0aW5ncy5zbGlkZXIubWF4O1xuICAgICAgICBzbGlkZXIudmFsdWUgPSBzZXR0aW5ncy5zbGlkZXIuZGVmYXVsdDtcblxuICAgICAgICAvLyBjdXJyZW50IHZhbHVlXG4gICAgICAgIGNvbnN0IHNsaWRlclZhbHVlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgIHNsaWRlclZhbHVlLnRleHRDb250ZW50ID0gc2xpZGVyLnZhbHVlO1xuICAgICAgICBzbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsICgpID0+IHtcbiAgICAgICAgICAgIHNsaWRlclZhbHVlLnRleHRDb250ZW50ID0gc2xpZGVyLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2xpZGVySW5wdXRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBzbGlkZXJJbnB1dENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwicGxvdGx5X3NsaWRlclwiKTtcbiAgICAgICAgc2xpZGVySW5wdXRDb250YWluZXIuYXBwZW5kQ2hpbGQoc2xpZGVyKTtcbiAgICAgICAgc2xpZGVySW5wdXRDb250YWluZXIuYXBwZW5kQ2hpbGQoc2xpZGVyVmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IHNsaWRlckNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHNsaWRlckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwicGxvdGx5X2lucHV0X2NvbnRhaW5lclwiKTtcblxuICAgICAgICBzbGlkZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2xpZGVyTGFiZWwpO1xuICAgICAgICBzbGlkZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2xpZGVySW5wdXRDb250YWluZXIpO1xuICAgICAgICBjb250cm9scy5hcHBlbmRDaGlsZChzbGlkZXJDb250YWluZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRyb3Bkb3duLCBzbGlkZXIsIHBsb3QgfTtcbn07XG5cbmNvbnN0IHJvbGxpbmdXaW5kb3cgPSBmdW5jdGlvbiAoZGF0YSwgd2luZG93U2l6ZSkge1xuICAgIGlmICh3aW5kb3dTaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCByb2xsaW5nRGF0YSA9IFtdO1xuXG4gICAgLy8gU3RhcnQgYXQgaGFsZldpbmRvd1NpemUgdG8gZW5zdXJlIHdlIGNhbiBnZXQgYSBmdWxsIHdpbmRvd1xuICAgIGZvciAobGV0IGkgPSB3aW5kb3dTaXplOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB3aW5kb3dTdGFydCA9IGkgLSB3aW5kb3dTaXplO1xuICAgICAgICBjb25zdCB3aW5kb3dFbmQgPSBpO1xuICAgICAgICBjb25zdCB3aW5kb3dEYXRhID0gZGF0YS5zbGljZSh3aW5kb3dTdGFydCwgd2luZG93RW5kKTtcblxuICAgICAgICBjb25zdCB3aW5kb3dBdmVyYWdlID1cbiAgICAgICAgICAgIHdpbmRvd0RhdGEucmVkdWNlKChhY2MsIHZhbHVlKSA9PiBhY2MgKyB2YWx1ZSwgMCkgL1xuICAgICAgICAgICAgd2luZG93RGF0YS5sZW5ndGg7XG4gICAgICAgIHJvbGxpbmdEYXRhLnB1c2god2luZG93QXZlcmFnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvbGxpbmdEYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRfYWJsYXRpb25fcGxvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbG90RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwicGxvdC1cIl0nKTtcbiAgICBwbG90RWxlbWVudHMuZm9yRWFjaChhc3luYyAocGxvdEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgcGxvdE5hbWUgPSBwbG90RWxlbWVudC5pZC5yZXBsYWNlKFwicGxvdC1cIiwgXCJcIik7XG4gICAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IGZldGNoKGAke0RBVEFfRk9MREVSfS8ke3Bsb3ROYW1lfS9pbmRleC5qc29uYCkudGhlbihcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gXy5tZXJnZSh7fSwgREVGQVVMVF9TRVRUSU5HUywgaW5kZXhEYXRhLnNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgaW5kZXhNYXBwaW5nID0gaW5kZXhEYXRhLmZpbGVzO1xuICAgICAgICBjb25zdCB7IGRyb3Bkb3duLCBzbGlkZXIsIHBsb3QgfSA9IGNyZWF0ZUFibGF0aW9uUGxvdHRpbmdFbGVtZW50cyhcbiAgICAgICAgICAgIHBsb3RFbGVtZW50LFxuICAgICAgICAgICAgaW5kZXhNYXBwaW5nLFxuICAgICAgICAgICAgc2V0dGluZ3NcbiAgICAgICAgKTtcbiAgICAgICAgcGxvdC5pZCA9IGBncmFwaC0ke3Bsb3ROYW1lfWA7XG4gICAgICAgIGlmIChkcm9wZG93biAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHVwZGF0ZVBsb3QoZHJvcGRvd24sIHNsaWRlcikpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0aW1lb3V0SWQ7XG4gICAgICAgIC8vIERlYm91bmNlIHRoZSBzbGlkZXJcbiAgICAgICAgaWYgKHNsaWRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUGxvdChkcm9wZG93biwgc2xpZGVyKTtcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2hhcmVkIHBsb3RcbiAgICAgICAgUGxvdGx5Lm5ld1Bsb3QocGxvdCwgW10pO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBsb3QoZHJvcGRvd24sIHNsaWRlcikge1xuICAgICAgICAgICAgY29uc3QgbWV0cmljTmFtZSA9IGRyb3Bkb3duPy52YWx1ZSA/PyBzZXR0aW5ncy5kZWZhdWx0TWV0cmljO1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVyVmFsdWUgPSBwYXJzZUludChzbGlkZXI/LnZhbHVlID8/IDApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGxvdE5hbWUpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtZXRyaWNOYW1lKVxuICAgICAgICAgICAgY29uc29sZS5sb2coaW5kZXhNYXBwaW5nKVxuICAgICAgICAgICAgY29uc3QgbWV0cmljRGF0YSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgICAgICAgIGAke0RBVEFfRk9MREVSfS8ke3Bsb3ROYW1lfS8ke2luZGV4TWFwcGluZ1ttZXRyaWNOYW1lXVtcImZpbGVcIl19YFxuICAgICAgICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNlcyA9IG1ldHJpY0RhdGE/LnRyYWNlcz8uW21ldHJpY05hbWVdID8/IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIFtrZXksIHRyYWNlRGF0YV1dIG9mIE9iamVjdC5lbnRyaWVzKG1ldHJpY0RhdGE/LmRhdGEgPz8gW10pLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSByb2xsaW5nV2luZG93KHRyYWNlRGF0YS55LCBzbGlkZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRyYWNlRGF0YS54LnNsaWNlKDAsIHkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwbG90U2V0dGluZ3MgPSBzZXR0aW5ncy50eXBlID09PSBcImJhclwiID8gQkFSX1NFVFRJTkdTIDogTElORV9TRVRUSU5HUztcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdHJhY2VEYXRhLmxhYmVsID8/IERBVEFTRVRfSURfVE9fTkFNRVtrZXldID8/IGtleSxcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZ2V0Q29sb3IoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZ2V0Q29sb3IoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAuLi5wbG90U2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0cmFjZXMpXG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHBsb3QucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IF8ubWVyZ2UoXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgREVGQVVMVF9MQVlPVVQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHlheGlzOiB7IHRpdGxlOiB7IHRleHQ6IFRBU0tfSURfVE9fTkFNRVttZXRyaWNOYW1lXSB9IH0sXG4gICAgICAgICAgICAgICAgICAgIHhheGlzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogc2V0dGluZ3MuYXV0b1NldFhSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0QXV0b1JhbmdlKHRyYWNlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldHJpY0RhdGEubGF5b3V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgUGxvdGx5LnJlYWN0KHBsb3QsIHRyYWNlcywgbGF5b3V0KTtcblxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSB3aW5kb3cgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gNzY4LCB3ZSBkb24ndCBjYXJlIGFzIGl0J3Mgbm90IHNob3duXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgUGxvdGx5LnJlbGF5b3V0KHBsb3QsIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHBsb3QucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluaXRpYWwgcGxvdFxuICAgICAgICB1cGRhdGVQbG90KGRyb3Bkb3duLCBzbGlkZXIpO1xuICAgIH0pO1xufTsiXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIlN5bWJvbCIsImEiLCJpdGVyYXRvciIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIkFycmF5IiwiaXNBcnJheSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX24iLCJGIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwiZnJvbSIsInRlc3QiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiZ2V0Q29sb3IiLCJQbG90bHkiLCJfIiwiREFUQV9GT0xERVIiLCJMSU5FX1NFVFRJTkdTIiwid2lkdGgiLCJtb2RlIiwiQkFSX1NFVFRJTkdTIiwib3BhY2l0eSIsIm1hcmtlciIsImxpbmUiLCJUQVNLX0lEX1RPX05BTUUiLCJhZ2dfc2NvcmUiLCJEQVRBU0VUX0lEX1RPX05BTUUiLCJwaWlfcmVtb3ZlZCIsImFsbGVuYWlfYzRfZW4iLCJkZWR1cF9taW5oYXNoX2luZGVwZW5kZW50X291dHB1dCIsIkRFRkFVTFRfU0VUVElOR1MiLCJzbGlkZXIiLCJtYXgiLCJtaW4iLCJkZWZhdWx0TWV0cmljIiwiREVGQVVMVF9MQVlPVVQiLCJmb250IiwiZmFtaWx5IiwidGl0bGUiLCJ0ZXh0Iiwic2l6ZSIsInhheGlzIiwidGlja2ZvbnQiLCJzaG93Z3JpZCIsIm1pcnJvciIsInRpY2tzIiwic2hvd2xpbmUiLCJ5YXhpcyIsInN0YW5kb2ZmIiwibGVnZW5kIiwib3JpZW50YXRpb24iLCJ4YW5jaG9yIiwieWFuY2hvciIsIngiLCJiZ2NvbG9yIiwibWFyZ2luIiwiYiIsImhlaWdodCIsImdldEF1dG9SYW5nZSIsInRyYWNlcyIsIm1pblgiLCJNYXRoIiwiZmxhdE1hcCIsInRyYWNlIiwibWF4WCIsImNyZWF0ZUFibGF0aW9uUGxvdHRpbmdFbGVtZW50cyIsInBsb3RFbGVtZW50IiwiaW5kZXhNYXBwaW5nIiwic2V0dGluZ3MiLCJwbG90IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29udHJvbHMiLCJjbGFzc0xpc3QiLCJhZGQiLCJhcHBlbmRDaGlsZCIsIm1ldHJpY09wdGlvbnMiLCJtZXRyaWMiLCJkcm9wZG93biIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJsb2ciLCJkcm9wZG93bkxhYmVsIiwidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJtYXAiLCJvcHRpb24iLCJjb25jYXQiLCJqb2luIiwiZHJvcGRvd25Db250YWluZXIiLCJzbGlkZXJMYWJlbCIsInNsaWRlclZhbHVlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNsaWRlcklucHV0Q29udGFpbmVyIiwic2xpZGVyQ29udGFpbmVyIiwicm9sbGluZ1dpbmRvdyIsImRhdGEiLCJ3aW5kb3dTaXplIiwicm9sbGluZ0RhdGEiLCJ3aW5kb3dTdGFydCIsIndpbmRvd0VuZCIsIndpbmRvd0RhdGEiLCJ3aW5kb3dBdmVyYWdlIiwicmVkdWNlIiwiYWNjIiwiaW5pdF9hYmxhdGlvbl9wbG90IiwicGxvdEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIl9yZWYiLCJfY2FsbGVlMiIsInBsb3ROYW1lIiwiaW5kZXhEYXRhIiwiX2NyZWF0ZUFibGF0aW9uUGxvdHRpIiwidGltZW91dElkIiwidXBkYXRlUGxvdCIsIl91cGRhdGVQbG90IiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX3VwZGF0ZVBsb3QzIiwiX2NhbGxlZSIsIl9kcm9wZG93biR2YWx1ZSIsIl9zbGlkZXIkdmFsdWUiLCJfbWV0cmljRGF0YSR0cmFjZXMkbWUiLCJfbWV0cmljRGF0YSR0cmFjZXMiLCJfbWV0cmljRGF0YSRkYXRhIiwibWV0cmljTmFtZSIsIm1ldHJpY0RhdGEiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9yZWYyIiwiX3RyYWNlRGF0YSRsYWJlbCIsIl9zdGVwJHZhbHVlIiwiaW5kZXgiLCJfc3RlcCR2YWx1ZSQiLCJrZXkiLCJ0cmFjZURhdGEiLCJwbG90U2V0dGluZ3MiLCJsYXlvdXQiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicGFyc2VJbnQiLCJmZXRjaCIsInJlc3BvbnNlIiwianNvbiIsImVudHJpZXMiLCJsYWJlbCIsImNvbG9yIiwiZXJyIiwicGFyZW50RWxlbWVudCIsIm9mZnNldFdpZHRoIiwibWVyZ2UiLCJyYW5nZSIsImF1dG9TZXRYUmFuZ2UiLCJyZWFjdCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJyZWxheW91dCIsIl91cGRhdGVQbG90MiIsIl94MiIsIl94MyIsImlkIiwicmVwbGFjZSIsImZpbGVzIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsIm5ld1Bsb3QiLCJfeCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/plotting.js\n"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js!./src/style.css": /*!*************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./src/style.css ***! \*************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* style.css */\n/* Define colors */\n:root {\n --distill-gray: rgb(107, 114, 128);\n --distill-gray-light: rgb(185, 185, 185);\n --distill-gray-lighter: rgb(228, 228, 228);\n --distill-gray-lightest: rgb(245, 245, 245);\n --distill-blue: #007BFF;\n}\n\n/* Container for the controls */\n[id^=\"plot-\"] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 15px; /* Adjust the gap between controls as needed */\n}\n[id^=\"plot-\"] figure {\n margin-bottom: 0px;\n margin-top: 0px;\n padding: 0px;\n}\n\n.plotly_controls {\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: center;\n align-items: flex-start;\n gap: 30px;\n}\n\n\n.plotly_input_container {\n display: flex;\n align-items: center;\n flex-direction: column;\n gap: 10px;\n}\n\n/* Style for the select dropdown */\n.plotly_input_container > select {\n padding: 2px 4px;\n /* border: 1px solid #ccc; */\n line-height: 1.5em;\n text-align: center;\n border-radius: 4px;\n font-size: 12px;\n background-color: var(--distill-gray-lightest);\n outline: none;\n}\n\n/* Style for the range input */\n\n.plotly_slider {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.plotly_slider > input[type=\"range\"] {\n -webkit-appearance: none;\n height: 2px;\n background: var(--distill-gray-light);\n border-radius: 5px;\n outline: none;\n}\n\n.plotly_slider > span {\n font-size: 14px;\n line-height: 1.6em;\n min-width: 16px;\n}\n\n.plotly_slider > input[type=\"range\"]::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--distill-blue);\n cursor: pointer;\n}\n\n.plotly_slider > input[type=\"range\"]::-moz-range-thumb {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--distill-blue);\n cursor: pointer;\n}\n\n/* Style for the labels */\n.plotly_input_container > label {\n font-size: 14px;\n font-weight: bold;\n}\n\n.main-plot-container {\n margin-top: 21px;\n margin-bottom: 35px;\n}\n\n.main-plot-container > figure {\n display: block !important;\n /* Let this be handled by graph-container */\n margin-bottom: 0px;\n margin-top: 0px;\n}\n.main-plot-container > div {\n display: none !important;\n}\n\n\n@media (min-width: 768px) {\n .main-plot-container > figure {\n display: none !important;\n }\n .main-plot-container > div {\n display: flex !important;\n }\n}\n\nd-byline .byline {\n grid-template-columns: 1fr;\n grid-column: text;\n font-size: 0.9rem;\n line-height: 1.8em;\n}\n\n@media (min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 5fr 1fr 1fr;\n }\n}\n\n#title-plot {\n margin-top: 0px;\n}\n\nd-contents > nav a.active {\n text-decoration: underline;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/style.css\"],\"names\":[],\"mappings\":\"AAAA,cAAc;AACd,kBAAkB;AAClB;IACI,kCAAkC;IAClC,wCAAwC;IACxC,0CAA0C;IAC1C,2CAA2C;IAC3C,uBAAuB;AAC3B;;AAEA,+BAA+B;AAC/B;IACI,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,SAAS,EAAE,8CAA8C;AAC7D;AACA;IACI,kBAAkB;IAClB,eAAe;IACf,YAAY;AAChB;;AAEA;IACI,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,uBAAuB;IACvB,uBAAuB;IACvB,SAAS;AACb;;;AAGA;IACI,aAAa;IACb,mBAAmB;IACnB,sBAAsB;IACtB,SAAS;AACb;;AAEA,kCAAkC;AAClC;IACI,gBAAgB;IAChB,4BAA4B;IAC5B,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,8CAA8C;IAC9C,aAAa;AACjB;;AAEA,8BAA8B;;AAE9B;IACI,aAAa;IACb,mBAAmB;IACnB,SAAS;AACb;;AAEA;IACI,wBAAwB;IACxB,WAAW;IACX,qCAAqC;IACrC,kBAAkB;IAClB,aAAa;AACjB;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,wBAAwB;IACxB,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,+BAA+B;IAC/B,eAAe;AACnB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,+BAA+B;IAC/B,eAAe;AACnB;;AAEA,yBAAyB;AACzB;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,gBAAgB;IAChB,mBAAmB;AACvB;;AAEA;IACI,yBAAyB;IACzB,2CAA2C;IAC3C,kBAAkB;IAClB,eAAe;AACnB;AACA;IACI,wBAAwB;AAC5B;;;AAGA;IACI;QACI,wBAAwB;IAC5B;IACA;QACI,wBAAwB;IAC5B;AACJ;;AAEA;EACE,0BAA0B;EAC1B,iBAAiB;EACjB,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE;IACE,kCAAkC;EACpC;AACF;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,0BAA0B;AAC9B\",\"sourcesContent\":[\"/* style.css */\\n/* Define colors */\\n:root {\\n --distill-gray: rgb(107, 114, 128);\\n --distill-gray-light: rgb(185, 185, 185);\\n --distill-gray-lighter: rgb(228, 228, 228);\\n --distill-gray-lightest: rgb(245, 245, 245);\\n --distill-blue: #007BFF;\\n}\\n\\n/* Container for the controls */\\n[id^=\\\"plot-\\\"] {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 15px; /* Adjust the gap between controls as needed */\\n}\\n[id^=\\\"plot-\\\"] figure {\\n margin-bottom: 0px;\\n margin-top: 0px;\\n padding: 0px;\\n}\\n\\n.plotly_controls {\\n display: flex;\\n flex-wrap: wrap;\\n flex-direction: row;\\n justify-content: center;\\n align-items: flex-start;\\n gap: 30px;\\n}\\n\\n\\n.plotly_input_container {\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n gap: 10px;\\n}\\n\\n/* Style for the select dropdown */\\n.plotly_input_container > select {\\n padding: 2px 4px;\\n /* border: 1px solid #ccc; */\\n line-height: 1.5em;\\n text-align: center;\\n border-radius: 4px;\\n font-size: 12px;\\n background-color: var(--distill-gray-lightest);\\n outline: none;\\n}\\n\\n/* Style for the range input */\\n\\n.plotly_slider {\\n display: flex;\\n align-items: center;\\n gap: 10px;\\n}\\n\\n.plotly_slider > input[type=\\\"range\\\"] {\\n -webkit-appearance: none;\\n height: 2px;\\n background: var(--distill-gray-light);\\n border-radius: 5px;\\n outline: none;\\n}\\n\\n.plotly_slider > span {\\n font-size: 14px;\\n line-height: 1.6em;\\n min-width: 16px;\\n}\\n\\n.plotly_slider > input[type=\\\"range\\\"]::-webkit-slider-thumb {\\n -webkit-appearance: none;\\n appearance: none;\\n width: 18px;\\n height: 18px;\\n border-radius: 50%;\\n background: var(--distill-blue);\\n cursor: pointer;\\n}\\n\\n.plotly_slider > input[type=\\\"range\\\"]::-moz-range-thumb {\\n width: 18px;\\n height: 18px;\\n border-radius: 50%;\\n background: var(--distill-blue);\\n cursor: pointer;\\n}\\n\\n/* Style for the labels */\\n.plotly_input_container > label {\\n font-size: 14px;\\n font-weight: bold;\\n}\\n\\n.main-plot-container {\\n margin-top: 21px;\\n margin-bottom: 35px;\\n}\\n\\n.main-plot-container > figure {\\n display: block !important;\\n /* Let this be handled by graph-container */\\n margin-bottom: 0px;\\n margin-top: 0px;\\n}\\n.main-plot-container > div {\\n display: none !important;\\n}\\n\\n\\n@media (min-width: 768px) {\\n .main-plot-container > figure {\\n display: none !important;\\n }\\n .main-plot-container > div {\\n display: flex !important;\\n }\\n}\\n\\nd-byline .byline {\\n grid-template-columns: 1fr;\\n grid-column: text;\\n font-size: 0.9rem;\\n line-height: 1.8em;\\n}\\n\\n@media (min-width: 768px) {\\n d-byline .byline {\\n grid-template-columns: 5fr 1fr 1fr;\\n }\\n}\\n\\n#title-plot {\\n margin-top: 0px;\\n}\\n\\nd-contents > nav a.active {\\n text-decoration: underline;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9zdHlsZS5jc3MiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUMwRztBQUNqQjtBQUN6Riw4QkFBOEIsbUZBQTJCLENBQUMsNEZBQXFDO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsT0FBTyxxRkFBcUYsWUFBWSxNQUFNLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLFlBQVksTUFBTSxVQUFVLFlBQVksYUFBYSx1QkFBdUIsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxNQUFNLFlBQVksTUFBTSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLFdBQVcsT0FBTyxhQUFhLE1BQU0sVUFBVSxZQUFZLFdBQVcsTUFBTSxLQUFLLFlBQVksV0FBVyxZQUFZLGFBQWEsV0FBVyxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsV0FBVyxPQUFPLFlBQVksTUFBTSxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxRQUFRLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxVQUFVLE9BQU8sS0FBSyxZQUFZLHVFQUF1RSx5Q0FBeUMsK0NBQStDLGlEQUFpRCxrREFBa0QsOEJBQThCLEdBQUcsdURBQXVELG9CQUFvQiw2QkFBNkIsMEJBQTBCLGlCQUFpQixrREFBa0QsMEJBQTBCLHlCQUF5QixzQkFBc0IsbUJBQW1CLEdBQUcsc0JBQXNCLG9CQUFvQixzQkFBc0IsMEJBQTBCLDhCQUE4Qiw4QkFBOEIsZ0JBQWdCLEdBQUcsK0JBQStCLG9CQUFvQiwwQkFBMEIsNkJBQTZCLGdCQUFnQixHQUFHLDJFQUEyRSx1QkFBdUIsaUNBQWlDLDJCQUEyQix5QkFBeUIseUJBQXlCLHNCQUFzQixxREFBcUQsb0JBQW9CLEdBQUcsdURBQXVELG9CQUFvQiwwQkFBMEIsZ0JBQWdCLEdBQUcsNENBQTRDLCtCQUErQixrQkFBa0IsNENBQTRDLHlCQUF5QixvQkFBb0IsR0FBRywyQkFBMkIsc0JBQXNCLHlCQUF5QixzQkFBc0IsR0FBRyxrRUFBa0UsK0JBQStCLHVCQUF1QixrQkFBa0IsbUJBQW1CLHlCQUF5QixzQ0FBc0Msc0JBQXNCLEdBQUcsOERBQThELGtCQUFrQixtQkFBbUIseUJBQXlCLHNDQUFzQyxzQkFBc0IsR0FBRyxpRUFBaUUsc0JBQXNCLHdCQUF3QixHQUFHLDBCQUEwQix1QkFBdUIsMEJBQTBCLEdBQUcsbUNBQW1DLGdDQUFnQywyRUFBMkUsc0JBQXNCLEdBQUcsOEJBQThCLCtCQUErQixHQUFHLGlDQUFpQyxxQ0FBcUMsbUNBQW1DLE9BQU8sa0NBQWtDLG1DQUFtQyxPQUFPLEdBQUcsc0JBQXNCLCtCQUErQixzQkFBc0Isc0JBQXNCLHVCQUF1QixHQUFHLCtCQUErQixzQkFBc0IseUNBQXlDLEtBQUssR0FBRyxpQkFBaUIsc0JBQXNCLEdBQUcsK0JBQStCLGlDQUFpQyxHQUFHLG1CQUFtQjtBQUM5cEk7QUFDQSxpRUFBZSx1QkFBdUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2Jsb2dwb3N0Ly4vc3JjL3N0eWxlLmNzcz8yN2E0Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAvKiBzdHlsZS5jc3MgKi9cbi8qIERlZmluZSBjb2xvcnMgKi9cbjpyb290IHtcbiAgICAtLWRpc3RpbGwtZ3JheTogcmdiKDEwNywgMTE0LCAxMjgpO1xuICAgIC0tZGlzdGlsbC1ncmF5LWxpZ2h0OiByZ2IoMTg1LCAxODUsIDE4NSk7XG4gICAgLS1kaXN0aWxsLWdyYXktbGlnaHRlcjogcmdiKDIyOCwgMjI4LCAyMjgpO1xuICAgIC0tZGlzdGlsbC1ncmF5LWxpZ2h0ZXN0OiByZ2IoMjQ1LCAyNDUsIDI0NSk7XG4gICAgLS1kaXN0aWxsLWJsdWU6ICMwMDdCRkY7XG59XG5cbi8qIENvbnRhaW5lciBmb3IgdGhlIGNvbnRyb2xzICovXG5baWRePVwicGxvdC1cIl0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTVweDsgLyogQWRqdXN0IHRoZSBnYXAgYmV0d2VlbiBjb250cm9scyBhcyBuZWVkZWQgKi9cbn1cbltpZF49XCJwbG90LVwiXSBmaWd1cmUge1xuICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICBtYXJnaW4tdG9wOiAwcHg7XG4gICAgcGFkZGluZzogMHB4O1xufVxuXG4ucGxvdGx5X2NvbnRyb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogMzBweDtcbn1cblxuXG4ucGxvdGx5X2lucHV0X2NvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAxMHB4O1xufVxuXG4vKiBTdHlsZSBmb3IgdGhlIHNlbGVjdCBkcm9wZG93biAqL1xuLnBsb3RseV9pbnB1dF9jb250YWluZXIgPiBzZWxlY3Qge1xuICAgIHBhZGRpbmc6IDJweCA0cHg7XG4gICAgLyogYm9yZGVyOiAxcHggc29saWQgI2NjYzsgKi9cbiAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGlzdGlsbC1ncmF5LWxpZ2h0ZXN0KTtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG4vKiBTdHlsZSBmb3IgdGhlIHJhbmdlIGlucHV0ICovXG5cbi5wbG90bHlfc2xpZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMHB4O1xufVxuXG4ucGxvdGx5X3NsaWRlciA+IGlucHV0W3R5cGU9XCJyYW5nZVwiXSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIGhlaWdodDogMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWRpc3RpbGwtZ3JheS1saWdodCk7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5cbi5wbG90bHlfc2xpZGVyID4gc3BhbiB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjZlbTtcbiAgICBtaW4td2lkdGg6IDE2cHg7XG59XG5cbi5wbG90bHlfc2xpZGVyID4gaW5wdXRbdHlwZT1cInJhbmdlXCJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXN0aWxsLWJsdWUpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnBsb3RseV9zbGlkZXIgPiBpbnB1dFt0eXBlPVwicmFuZ2VcIl06Oi1tb3otcmFuZ2UtdGh1bWIge1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tZGlzdGlsbC1ibHVlKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi8qIFN0eWxlIGZvciB0aGUgbGFiZWxzICovXG4ucGxvdGx5X2lucHV0X2NvbnRhaW5lciA+IGxhYmVsIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5tYWluLXBsb3QtY29udGFpbmVyIHtcbiAgICBtYXJnaW4tdG9wOiAyMXB4O1xuICAgIG1hcmdpbi1ib3R0b206IDM1cHg7XG59XG5cbi5tYWluLXBsb3QtY29udGFpbmVyID4gZmlndXJlIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIC8qIExldCB0aGlzIGJlIGhhbmRsZWQgYnkgZ3JhcGgtY29udGFpbmVyICovXG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICAgIG1hcmdpbi10b3A6IDBweDtcbn1cbi5tYWluLXBsb3QtY29udGFpbmVyID4gZGl2IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgLm1haW4tcGxvdC1jb250YWluZXIgPiBmaWd1cmUge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5tYWluLXBsb3QtY29udGFpbmVyID4gZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuZC1ieWxpbmUgLmJ5bGluZSB7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICBncmlkLWNvbHVtbjogdGV4dDtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjhlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIGQtYnlsaW5lIC5ieWxpbmUge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNWZyIDFmciAxZnI7XG4gIH1cbn1cblxuI3RpdGxlLXBsb3Qge1xuICAgIG1hcmdpbi10b3A6IDBweDtcbn1cblxuZC1jb250ZW50cyA+IG5hdiBhLmFjdGl2ZSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59YCwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvc3R5bGUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLGNBQWM7QUFDZCxrQkFBa0I7QUFDbEI7SUFDSSxrQ0FBa0M7SUFDbEMsd0NBQXdDO0lBQ3hDLDBDQUEwQztJQUMxQywyQ0FBMkM7SUFDM0MsdUJBQXVCO0FBQzNCOztBQUVBLCtCQUErQjtBQUMvQjtJQUNJLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLFNBQVMsRUFBRSw4Q0FBOEM7QUFDN0Q7QUFDQTtJQUNJLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsWUFBWTtBQUNoQjs7QUFFQTtJQUNJLGFBQWE7SUFDYixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIsU0FBUztBQUNiOzs7QUFHQTtJQUNJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLFNBQVM7QUFDYjs7QUFFQSxrQ0FBa0M7QUFDbEM7SUFDSSxnQkFBZ0I7SUFDaEIsNEJBQTRCO0lBQzVCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZiw4Q0FBOEM7SUFDOUMsYUFBYTtBQUNqQjs7QUFFQSw4QkFBOEI7O0FBRTlCO0lBQ0ksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixTQUFTO0FBQ2I7O0FBRUE7SUFDSSx3QkFBd0I7SUFDeEIsV0FBVztJQUNYLHFDQUFxQztJQUNyQyxrQkFBa0I7SUFDbEIsYUFBYTtBQUNqQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsZUFBZTtBQUNuQjs7QUFFQTtJQUNJLHdCQUF3QjtJQUN4QixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsK0JBQStCO0lBQy9CLGVBQWU7QUFDbkI7O0FBRUE7SUFDSSxXQUFXO0lBQ1gsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQiwrQkFBK0I7SUFDL0IsZUFBZTtBQUNuQjs7QUFFQSx5QkFBeUI7QUFDekI7SUFDSSxlQUFlO0lBQ2YsaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLG1CQUFtQjtBQUN2Qjs7QUFFQTtJQUNJLHlCQUF5QjtJQUN6QiwyQ0FBMkM7SUFDM0Msa0JBQWtCO0lBQ2xCLGVBQWU7QUFDbkI7QUFDQTtJQUNJLHdCQUF3QjtBQUM1Qjs7O0FBR0E7SUFDSTtRQUNJLHdCQUF3QjtJQUM1QjtJQUNBO1FBQ0ksd0JBQXdCO0lBQzVCO0FBQ0o7O0FBRUE7RUFDRSwwQkFBMEI7RUFDMUIsaUJBQWlCO0VBQ2pCLGlCQUFpQjtFQUNqQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRTtJQUNFLGtDQUFrQztFQUNwQztBQUNGOztBQUVBO0lBQ0ksZUFBZTtBQUNuQjs7QUFFQTtJQUNJLDBCQUEwQjtBQUM5QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiBzdHlsZS5jc3MgKi9cXG4vKiBEZWZpbmUgY29sb3JzICovXFxuOnJvb3Qge1xcbiAgICAtLWRpc3RpbGwtZ3JheTogcmdiKDEwNywgMTE0LCAxMjgpO1xcbiAgICAtLWRpc3RpbGwtZ3JheS1saWdodDogcmdiKDE4NSwgMTg1LCAxODUpO1xcbiAgICAtLWRpc3RpbGwtZ3JheS1saWdodGVyOiByZ2IoMjI4LCAyMjgsIDIyOCk7XFxuICAgIC0tZGlzdGlsbC1ncmF5LWxpZ2h0ZXN0OiByZ2IoMjQ1LCAyNDUsIDI0NSk7XFxuICAgIC0tZGlzdGlsbC1ibHVlOiAjMDA3QkZGO1xcbn1cXG5cXG4vKiBDb250YWluZXIgZm9yIHRoZSBjb250cm9scyAqL1xcbltpZF49XFxcInBsb3QtXFxcIl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDE1cHg7IC8qIEFkanVzdCB0aGUgZ2FwIGJldHdlZW4gY29udHJvbHMgYXMgbmVlZGVkICovXFxufVxcbltpZF49XFxcInBsb3QtXFxcIl0gZmlndXJlIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xcbiAgICBtYXJnaW4tdG9wOiAwcHg7XFxuICAgIHBhZGRpbmc6IDBweDtcXG59XFxuXFxuLnBsb3RseV9jb250cm9scyB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBnYXA6IDMwcHg7XFxufVxcblxcblxcbi5wbG90bHlfaW5wdXRfY29udGFpbmVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgZ2FwOiAxMHB4O1xcbn1cXG5cXG4vKiBTdHlsZSBmb3IgdGhlIHNlbGVjdCBkcm9wZG93biAqL1xcbi5wbG90bHlfaW5wdXRfY29udGFpbmVyID4gc2VsZWN0IHtcXG4gICAgcGFkZGluZzogMnB4IDRweDtcXG4gICAgLyogYm9yZGVyOiAxcHggc29saWQgI2NjYzsgKi9cXG4gICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgZm9udC1zaXplOiAxMnB4O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kaXN0aWxsLWdyYXktbGlnaHRlc3QpO1xcbiAgICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4vKiBTdHlsZSBmb3IgdGhlIHJhbmdlIGlucHV0ICovXFxuXFxuLnBsb3RseV9zbGlkZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDEwcHg7XFxufVxcblxcbi5wbG90bHlfc2xpZGVyID4gaW5wdXRbdHlwZT1cXFwicmFuZ2VcXFwiXSB7XFxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgaGVpZ2h0OiAycHg7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWRpc3RpbGwtZ3JheS1saWdodCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gICAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnBsb3RseV9zbGlkZXIgPiBzcGFuIHtcXG4gICAgZm9udC1zaXplOiAxNHB4O1xcbiAgICBsaW5lLWhlaWdodDogMS42ZW07XFxuICAgIG1pbi13aWR0aDogMTZweDtcXG59XFxuXFxuLnBsb3RseV9zbGlkZXIgPiBpbnB1dFt0eXBlPVxcXCJyYW5nZVxcXCJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7XFxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXN0aWxsLWJsdWUpO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5wbG90bHlfc2xpZGVyID4gaW5wdXRbdHlwZT1cXFwicmFuZ2VcXFwiXTo6LW1vei1yYW5nZS10aHVtYiB7XFxuICAgIHdpZHRoOiAxOHB4O1xcbiAgICBoZWlnaHQ6IDE4cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tZGlzdGlsbC1ibHVlKTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4vKiBTdHlsZSBmb3IgdGhlIGxhYmVscyAqL1xcbi5wbG90bHlfaW5wdXRfY29udGFpbmVyID4gbGFiZWwge1xcbiAgICBmb250LXNpemU6IDE0cHg7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4ubWFpbi1wbG90LWNvbnRhaW5lciB7XFxuICAgIG1hcmdpbi10b3A6IDIxcHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDM1cHg7XFxufVxcblxcbi5tYWluLXBsb3QtY29udGFpbmVyID4gZmlndXJlIHtcXG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcXG4gICAgLyogTGV0IHRoaXMgYmUgaGFuZGxlZCBieSBncmFwaC1jb250YWluZXIgKi9cXG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xcbiAgICBtYXJnaW4tdG9wOiAwcHg7XFxufVxcbi5tYWluLXBsb3QtY29udGFpbmVyID4gZGl2IHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG5cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gICAgLm1haW4tcGxvdC1jb250YWluZXIgPiBmaWd1cmUge1xcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICB9XFxuICAgIC5tYWluLXBsb3QtY29udGFpbmVyID4gZGl2IHtcXG4gICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcXG4gICAgfVxcbn1cXG5cXG5kLWJ5bGluZSAuYnlsaW5lIHtcXG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xcbiAgZ3JpZC1jb2x1bW46IHRleHQ7XFxuICBmb250LXNpemU6IDAuOXJlbTtcXG4gIGxpbmUtaGVpZ2h0OiAxLjhlbTtcXG59XFxuXFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICBkLWJ5bGluZSAuYnlsaW5lIHtcXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA1ZnIgMWZyIDFmcjtcXG4gIH1cXG59XFxuXFxuI3RpdGxlLXBsb3Qge1xcbiAgICBtYXJnaW4tdG9wOiAwcHg7XFxufVxcblxcbmQtY29udGVudHMgPiBuYXYgYS5hY3RpdmUge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./src/style.css\n"); /***/ }), /***/ "./node_modules/css-loader/dist/runtime/api.js": /*!*****************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/api.js ***! \*****************************************************/ /***/ ((module) => { "use strict"; eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0EscUZBQXFGO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHFCQUFxQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzRkFBc0YscUJBQXFCO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixpREFBaUQscUJBQXFCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzREFBc0QscUJBQXFCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ncG9zdC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n"); /***/ }), /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js": /*!************************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! \************************************************************/ /***/ ((module) => { "use strict"; eval("\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2Jsb2dwb3N0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/sourceMaps.js\n"); /***/ }), /***/ "./node_modules/lodash/lodash.js": /*!***************************************!*\ !*** ./node_modules/lodash/lodash.js ***! \***************************************/ /***/ (function(module, exports, __webpack_require__) { eval("/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash
' + func(text) + '
';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles
'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '