diff --git a/.gitignore b/.gitignore index 40b878d..bb6de05 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ + node_modules/ \ No newline at end of file diff --git a/esbuild.config.mjs b/esbuild.config.mjs index b13282b..63408f3 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -1,6 +1,11 @@ import esbuild from "esbuild"; import process from "process"; import builtins from "builtin-modules"; +import dotenv from "dotenv"; +dotenv.config(); +import fs from "fs"; +import path from "path"; + const banner = `/* @@ -11,6 +16,24 @@ if you want to view the source, please visit the github repository of this plugi const prod = (process.argv[2] === "production"); +// const copy_to_plugins = { +// name: 'copy_to_plugins', +// setup(build) { +// build.onEnd(() => { +// const plugin_path = path.join(process.env.OBSIDIAN_PLUGINS_PATH, "smart-connections-graph-view"); + +// if (!fs.existsSync(plugin_path)) { +// fs.mkdirSync(plugin_path); +// } + +// fs.copyFileSync("./main.js", path.join(plugin_path, "main.js")); +// fs.copyFileSync("./manifest.json", path.join(plugin_path, "manifest.json")); +// fs.copyFileSync("./styles.css", path.join(plugin_path, "styles.css")); + +// console.log("Plugin built and copied to obsidian plugins folder"); +// }); +// } +// }; const context = await esbuild.context({ banner: { js: banner, @@ -31,18 +54,21 @@ const context = await esbuild.context({ "@lezer/common", "@lezer/highlight", "@lezer/lr", - ...builtins], + ...builtins + ], format: "cjs", target: "es2018", logLevel: "info", sourcemap: prod ? false : "inline", treeShaking: true, outfile: "main.js", + plugins: [ + // copy_to_plugins + ] }); - -if (prod) { +if(!prod) await context.watch(); +else { await context.rebuild(); process.exit(0); -} else { - await context.watch(); -} \ No newline at end of file +} + diff --git a/main.js b/main.js index d459bc2..c42c92d 100644 --- a/main.js +++ b/main.js @@ -2189,7 +2189,7 @@ var require_bootstrap_bundle_min = __commonJS({ // main.ts var main_exports = {}; __export(main_exports, { - default: () => MyPlugin + default: () => ScGraphView }); module.exports = __toCommonJS(main_exports); var import_obsidian = require("obsidian"); @@ -6851,13 +6851,13 @@ var MyItemView = class extends import_obsidian.ItemView { this.isHovering = false; } getViewType() { - return "My Item View"; + return "Smart Graph View"; } getDisplayText() { - return "My Item View"; + return "Smart Graph View"; } getIcon() { - return "dice"; + return "git-fork"; } // Function to update node appearance based on selection and highlight state updateNodeAppearance() { @@ -6923,7 +6923,6 @@ var MyItemView = class extends import_obsidian.ItemView { } // Helper function to truncate labels, extract filenames or parts after hashtags, and remove brackets formatLabel(path, truncate = true) { - console.log("formatting: ", truncate); if (truncate) { if (path.includes("#")) { const parts = path.split("#"); @@ -7314,7 +7313,6 @@ var MyItemView = class extends import_obsidian.ItemView { } } that.unhighlightNode(); - console.log("selecting node", d.selected); select_default2(this).attr("stroke", d.selected ? "blanchedalmond" : "transparent").attr("stroke-width", d.selected ? 1.5 : 0.3); svgGroup.select(`text[data-id='${d.id}']`).transition().duration(250).attr("y", d.y); }), @@ -7803,18 +7801,18 @@ var MyItemView = class extends import_obsidian.ItemView { }, 1e3); } }; -var MyPlugin = class extends import_obsidian.Plugin { +var ScGraphView = class extends import_obsidian.Plugin { async onload() { await this.loadSettings(); - this.registerView("My Item View", (leaf) => new MyItemView(leaf)); - this.registerHoverLinkSource("D3", { - display: "D3 Hover Link Source", + this.registerView("Smart Graph View", (leaf) => new MyItemView(leaf)); + this.registerHoverLinkSource("Smart Graph", { + display: "Smart Graph Hover Link Source", defaultMod: true }); - const ribbonIconEl = this.addRibbonIcon("dice", "Smart Graph", (evt) => { + const ribbonIconEl = this.addRibbonIcon("git-fork", "Smart Graph", (evt) => { let leaf = this.app.workspace.getLeaf(true); leaf.setViewState({ - type: "My Item View", + type: "Smart Graph View", active: true }); }); @@ -7827,18 +7825,7 @@ var MyPlugin = class extends import_obsidian.Plugin { callback: () => { let leaf = this.app.workspace.getLeaf(true); leaf.setViewState({ - type: "My Item View", - active: true - }); - } - }); - this.addCommand({ - id: "sample-editor-command", - name: "Sample editor command", - callback: () => { - let leaf = this.app.workspace.getLeaf(true); - leaf.setViewState({ - type: "My Item View", + type: "Smart Graph View", active: true }); } @@ -7849,16 +7836,13 @@ var MyPlugin = class extends import_obsidian.Plugin { callback: () => { let leaf = this.app.workspace.getLeaf(true); leaf.setViewState({ - type: "My Item View", + type: "Smart Graph View", active: true }); } }); - this.addSettingTab(new SampleSettingTab(this.app, this)); this.registerDomEvent(document, "click", (evt) => { - console.log("click", evt); }); - this.registerInterval(window.setInterval(() => console.log("setInterval"), 5 * 60 * 1e3)); } onunload() { } @@ -7869,20 +7853,6 @@ var MyPlugin = class extends import_obsidian.Plugin { await this.saveData(this.settings); } }; -var SampleSettingTab = class extends import_obsidian.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - const { containerEl } = this; - containerEl.empty(); - new import_obsidian.Setting(containerEl).setName("Setting #1").setDesc("It's a secret").addText((text) => text.setPlaceholder("Enter your secret... This will change everything").setValue(this.plugin.settings.mySetting).onChange(async (value) => { - this.plugin.settings.mySetting = value; - await this.plugin.saveSettings(); - })); - } -}; /*! Bundled license information: bootstrap/dist/js/bootstrap.bundle.min.js: @@ -7892,4 +7862,4 @@ bootstrap/dist/js/bootstrap.bundle.min.js: * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL2RhdGEuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vZXZlbnQtaGFuZGxlci5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vbWFuaXB1bGF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYmFzZS1jb21wb25lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL3NlbGVjdG9yLWVuZ2luZS5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYWxlcnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYnV0dG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc3dpcGUuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvY2Fyb3VzZWwuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvY29sbGFwc2UuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXItbGl0ZS5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2Ryb3Bkb3duLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvYmFja2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9mb2N1c3RyYXAuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9zY3JvbGxiYXIuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvbW9kYWwuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvb2ZmY2FudmFzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc2FuaXRpemVyLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvdGVtcGxhdGUtZmFjdG9yeS5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90b29sdGlwLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3BvcG92ZXIuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvc2Nyb2xsc3B5LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3RhYi5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90b2FzdC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2luZGV4LnVtZC5qcyIsICJtYWluLnRzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGVzY2VuZGluZy5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiLCAibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIsICJub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9kcmFnLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3pvb20uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2VWYXJ5aW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NlbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2FkZC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2NvdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2V4dGVudC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcm9vdC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3NpemUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3Zpc2l0QWZ0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy94LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWR0cmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb2xsaWRlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGluay5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2xjZy5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL3NpbXVsYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9tYW55Qm9keS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIsICJub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL25vZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3pvb20uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudClcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpXG4gIH0sXG5cbiAgZ2V0KGVsZW1lbnQsIGtleSkge1xuICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KVxuXG4gICAgLy8gZnJlZSB1cCBlbGVtZW50IHJlZmVyZW5jZXMgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBsZWZ0IGZvciBhbiBlbGVtZW50XG4gICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpXG4gICAgfVxuICB9XG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvaW5kZXguanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBNQVhfVUlEID0gMV8wMDBfMDAwXG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDBcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnXG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YClcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWBcbiAgfVxuXG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQgeyB0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcblxuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbilcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpXG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdXG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdXG5cbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUlxufVxuXG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSlcbn1cblxuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbMF1cbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJ1xufVxuXG5jb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3RcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJ1xuICAvLyBIYW5kbGUgYGRldGFpbHNgIGVsZW1lbnQgYXMgaXRzIGNvbnRlbnQgbWF5IGZhbHNpZSBhcHBlYXIgdmlzaWJsZSB3aGVuIGl0IGlzIGNsb3NlZFxuICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJylcblxuICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZVxuICB9XG5cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5JylcbiAgICBpZiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnBhcmVudE5vZGUgIT09IGNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudElzVmlzaWJsZVxufVxuXG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkXG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSdcbn1cblxuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGxcbiAgfVxuXG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG59XG5cbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5qUXVlcnlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXVxuXG5jb25zdCBvbkRPTUNvbnRlbnRMb2FkZWQgPSBjYWxsYmFjayA9PiB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgIGlmICghRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCdcblxuY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FXG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdXG4gICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpblxuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gICAgICAgIHJldHVybiBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5jb25zdCBleGVjdXRlID0gKHBvc3NpYmxlQ2FsbGJhY2ssIGFyZ3MgPSBbXSwgZGVmYXVsdFZhbHVlID0gcG9zc2libGVDYWxsYmFjaykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlXG59XG5cbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1XG4gIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmdcblxuICBsZXQgY2FsbGVkID0gZmFsc2VcblxuICBjb25zdCBoYW5kbGVyID0gKHsgdGFyZ2V0IH0pID0+IHtcbiAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudClcbiAgICB9XG4gIH0sIGVtdWxhdGVkRHVyYXRpb24pXG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aFxuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudClcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAvLyBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdXG4gIH1cblxuICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xXG5cbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXVxufVxuXG5leHBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGV4ZWN1dGUsXG4gIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sXG4gIGZpbmRTaGFkb3dSb290LFxuICBnZXRFbGVtZW50LFxuICBnZXRqUXVlcnksXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCxcbiAgZ2V0VUlELFxuICBpc0Rpc2FibGVkLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIG5vb3AsXG4gIG9uRE9NQ29udGVudExvYWRlZCxcbiAgcGFyc2VTZWxlY3RvcixcbiAgcmVmbG93LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCxcbiAgdG9UeXBlXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZ2V0alF1ZXJ5IH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi9cbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qL1xuY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskL1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxXG5jb25zdCBjdXN0b21FdmVudHMgPSB7XG4gIG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxuICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG59XG5cbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoW1xuICAnY2xpY2snLFxuICAnZGJsY2xpY2snLFxuICAnbW91c2V1cCcsXG4gICdtb3VzZWRvd24nLFxuICAnY29udGV4dG1lbnUnLFxuICAnbW91c2V3aGVlbCcsXG4gICdET01Nb3VzZVNjcm9sbCcsXG4gICdtb3VzZW92ZXInLFxuICAnbW91c2VvdXQnLFxuICAnbW91c2Vtb3ZlJyxcbiAgJ3NlbGVjdHN0YXJ0JyxcbiAgJ3NlbGVjdGVuZCcsXG4gICdrZXlkb3duJyxcbiAgJ2tleXByZXNzJyxcbiAgJ2tleXVwJyxcbiAgJ29yaWVudGF0aW9uY2hhbmdlJyxcbiAgJ3RvdWNoc3RhcnQnLFxuICAndG91Y2htb3ZlJyxcbiAgJ3RvdWNoZW5kJyxcbiAgJ3RvdWNoY2FuY2VsJyxcbiAgJ3BvaW50ZXJkb3duJyxcbiAgJ3BvaW50ZXJtb3ZlJyxcbiAgJ3BvaW50ZXJ1cCcsXG4gICdwb2ludGVybGVhdmUnLFxuICAncG9pbnRlcmNhbmNlbCcsXG4gICdnZXN0dXJlc3RhcnQnLFxuICAnZ2VzdHVyZWNoYW5nZScsXG4gICdnZXN0dXJlZW5kJyxcbiAgJ2ZvY3VzJyxcbiAgJ2JsdXInLFxuICAnY2hhbmdlJyxcbiAgJ3Jlc2V0JyxcbiAgJ3NlbGVjdCcsXG4gICdzdWJtaXQnLFxuICAnZm9jdXNpbicsXG4gICdmb2N1c291dCcsXG4gICdsb2FkJyxcbiAgJ3VubG9hZCcsXG4gICdiZWZvcmV1bmxvYWQnLFxuICAncmVzaXplJyxcbiAgJ21vdmUnLFxuICAnRE9NQ29udGVudExvYWRlZCcsXG4gICdyZWFkeXN0YXRlY2hhbmdlJyxcbiAgJ2Vycm9yJyxcbiAgJ2Fib3J0JyxcbiAgJ3Njcm9sbCdcbl0pXG5cbi8qKlxuICogUHJpdmF0ZSBtZXRob2RzXG4gKi9cblxuZnVuY3Rpb24gbWFrZUV2ZW50VWlkKGVsZW1lbnQsIHVpZCkge1xuICByZXR1cm4gKHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCkgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudClcblxuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkXG4gIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fVxuXG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF1cbn1cblxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGh5ZHJhdGVPYmooZXZlbnQsIHsgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnQgfSlcblxuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbilcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcblxuICAgIGZvciAobGV0IHsgdGFyZ2V0IH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHsgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldCB9KVxuXG4gICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoZXZlbnRzLCBjYWxsYWJsZSwgZGVsZWdhdGlvblNlbGVjdG9yID0gbnVsbCkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhldmVudHMpXG4gICAgLmZpbmQoZXZlbnQgPT4gZXZlbnQuY2FsbGFibGUgPT09IGNhbGxhYmxlICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZydcbiAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gIGNvbnN0IGNhbGxhYmxlID0gaXNEZWxlZ2F0ZWQgPyBkZWxlZ2F0aW9uRnVuY3Rpb24gOiAoaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpXG5cbiAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudFxuICB9XG5cbiAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF1cbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKVxuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGFibGUgPSB3cmFwRnVuY3Rpb24oY2FsbGFibGUpXG4gIH1cblxuICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpXG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pXG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpXG5cbiAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiA9IHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmICYmIG9uZU9mZlxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSlcbiAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/XG4gICAgYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDpcbiAgICBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKVxuXG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGxcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZVxuICBmbi5vbmVPZmYgPSBvbmVPZmZcbiAgZm4udWlkRXZlbnQgPSB1aWRcbiAgaGFuZGxlcnNbdWlkXSA9IGZuXG5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKVxufVxuXG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKVxuXG4gIGlmICghZm4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpXG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuXG4gIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICBpZiAoaGFuZGxlcktleS5pbmNsdWRlcyhuYW1lc3BhY2UpKSB7XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKVxuICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudFxufVxuXG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKVxuICB9LFxuXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKVxuICB9LFxuXG4gIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KVxuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge31cbiAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleUhhbmRsZXJzLCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJylcblxuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudFxuXG4gICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbFxuICAgIGxldCBidWJibGVzID0gdHJ1ZVxuICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWVcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlXG5cbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKVxuXG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpXG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICAgIH1cblxuICAgIGNvbnN0IGV2dCA9IGh5ZHJhdGVPYmoobmV3IEV2ZW50KGV2ZW50LCB7IGJ1YmJsZXMsIGNhbmNlbGFibGU6IHRydWUgfSksIGFyZ3MpXG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfVxuXG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2dFxuICB9XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRIYW5kbGVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKC9bQS1aXS9nLCBjaHIgPT4gYC0ke2Noci50b0xvd2VyQ2FzZSgpfWApXG59XG5cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSlcbiAgfSxcblxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9XG4gICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSlcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpXG4gICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpXG4gICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSlcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlc1xuICB9LFxuXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaXB1bGF0b3JcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IHsgaXNFbGVtZW50LCB0b1R5cGUgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge30gLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gIH1cblxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKVxuXG4gICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IERhdGEgZnJvbSAnLi9kb20vZGF0YS5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi91dGlsL2NvbmZpZy5qcydcbmltcG9ydCB7IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sIGdldEVsZW1lbnQgfSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjMuMydcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKClcblxuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG5cbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSlcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBfcXVldWVDYWxsYmFjayhjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCA9IHRydWUpIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKVxuICB9XG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YFxuICB9XG5cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWBcbiAgfVxuXG4gIHN0YXRpYyBldmVudE5hbWUobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VDb21wb25lbnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGlzRGlzYWJsZWQsIGlzVmlzaWJsZSwgcGFyc2VTZWxlY3RvciB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnXG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgKCFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YFxuICAgIH1cblxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBwYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGxcbn1cblxuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpXG4gIH0sXG5cbiAgZmluZE9uZShzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpXG4gIH0sXG5cbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSlcbiAgfSxcblxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdXG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpXG5cbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgIHBhcmVudHMucHVzaChhbmNlc3RvcilcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzXG4gIH0sXG5cbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c11cbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG4gIC8vIFRPRE86IHRoaXMgaXMgbm93IHVudXNlZDsgcmVtb3ZlIGxhdGVyIGFsb25nIHdpdGggcHJldigpXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nXG5cbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXh0XVxuICAgICAgfVxuXG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBmb2N1c2FibGVDaGlsZHJlbihlbGVtZW50KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IFtcbiAgICAgICdhJyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICd0ZXh0YXJlYScsXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdbdGFiaW5kZXhdJyxcbiAgICAgICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICBdLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywnKVxuXG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpXG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpIDogbnVsbFxuICB9LFxuXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW11cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvckVuZ2luZVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgeyBpc0Rpc2FibGVkIH0gZnJvbSAnLi9pbmRleC5qcydcblxuY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWBcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgIGluc3RhbmNlW21ldGhvZF0oKVxuICB9KVxufVxuXG5leHBvcnQge1xuICBlbmFibGVEaXNtaXNzVHJpZ2dlclxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzJ1xuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luIH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnYWxlcnQnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKVxuXG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRClcbiAgICB0aGlzLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2J1dHRvbidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmJ1dHRvbidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSkpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbilcblxuICBkYXRhLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pXG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvblxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5pbXBvcnQgeyBleGVjdXRlIH0gZnJvbSAnLi9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3N3aXBlJ1xuY29uc3QgRVZFTlRfS0VZID0gJy5icy5zd2lwZSdcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWBcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCdcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJ1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fZGVsdGFYID0gMFxuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuICAgIHRoaXMuX2luaXRFdmVudHMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYXG4gICAgfVxuICB9XG5cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWFxuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKClcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjaylcbiAgfVxuXG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgP1xuICAgICAgMCA6XG4gICAgICBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVhcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYXG5cbiAgICB0aGlzLl9kZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKVxuICB9XG5cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpcGVcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50LmpzJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIHJlZmxvdyxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmRcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuaW1wb3J0IFN3aXBlIGZyb20gJy4vdXRpbC9zd2lwZS5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Nhcm91c2VsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY2Fyb3VzZWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0J1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnXG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwIC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnXG5jb25zdCBPUkRFUl9QUkVWID0gJ3ByZXYnXG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0J1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0J1xuXG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV04gPSBga2V5ZG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9FTkQgPSAnY2Fyb3VzZWwtaXRlbS1lbmQnXG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnXG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0J1xuY29uc3QgQ0xBU1NfTkFNRV9QUkVWID0gJ2Nhcm91c2VsLWl0ZW0tcHJldidcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSBTRUxFQ1RPUl9BQ1RJVkUgKyBTRUxFQ1RPUl9JVEVNXG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnXG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nXG5cbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWV06IERJUkVDVElPTl9SSUdIVCxcbiAgW0FSUk9XX1JJR0hUX0tFWV06IERJUkVDVElPTl9MRUZUXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGludGVydmFsOiA1MDAwLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHJpZGU6IGZhbHNlLFxuICB0b3VjaDogdHJ1ZSxcbiAgd3JhcDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJywgLy8gVE9ETzp2NiByZW1vdmUgYm9vbGVhbiBzdXBwb3J0XG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHJpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgdG91Y2g6ICdib29sZWFuJyxcbiAgd3JhcDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGxcblxuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcblxuICAgIGlmICh0aGlzLl9jb25maWcucmlkZSA9PT0gQ0xBU1NfTkFNRV9DQVJPVVNFTCkge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpXG4gIH1cblxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRklYTUUgVE9ETyB1c2UgYGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZWBcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGlzVmlzaWJsZSh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdGhpcy5uZXh0KClcbiAgICB9XG4gIH1cblxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKVxuICB9XG5cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpXG4gICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwoKVxuXG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpXG4gIH1cblxuICBfbWF5YmVFbmFibGVDeWNsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yaWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMuY3ljbGUoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY3ljbGUoKVxuICB9XG5cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKClcbiAgICBpZiAoaW5kZXggPiBpdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWXG5cbiAgICB0aGlzLl9zbGlkZShvcmRlciwgaXRlbXNbaW5kZXhdKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fc3dpcGVIZWxwZXIpIHtcbiAgICAgIHRoaXMuX3N3aXBlSGVscGVyLmRpc3Bvc2UoKVxuICAgIH1cblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuZGVmYXVsdEludGVydmFsID0gY29uZmlnLmludGVydmFsXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiwgKCkgPT4gdGhpcy5wYXVzZSgpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUsICgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGZvciAoY29uc3QgaW1nIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGVuZENhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSAhPT0gJ2hvdmVyJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKVxuICAgIH1cblxuICAgIGNvbnN0IHN3aXBlQ29uZmlnID0ge1xuICAgICAgbGVmdENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9MRUZUKSksXG4gICAgICByaWdodENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9SSUdIVCkpLFxuICAgICAgZW5kQ2FsbGJhY2s6IGVuZENhbGxCYWNrXG4gICAgfVxuXG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBuZXcgU3dpcGUodGhpcy5fZWxlbWVudCwgc3dpcGVDb25maWcpXG4gIH1cblxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudClcbiAgfVxuXG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxuXG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JylcblxuICAgIGNvbnN0IG5ld0FjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYFtkYXRhLWJzLXNsaWRlLXRvPVwiJHtpbmRleH1cIl1gLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgIGlmIChuZXdBY3RpdmVJbmRpY2F0b3IpIHtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApXG5cbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbFxuICB9XG5cbiAgX3NsaWRlKG9yZGVyLCBlbGVtZW50ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9nZXRBY3RpdmUoKVxuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApXG5cbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpXG5cbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKVxuXG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAvLyBUT0RPOiBjaGFuZ2UgdGVzdHMgdGhhdCB1c2UgZW1wdHkgZGl2cyB0byBhdm9pZCB0aGlzIGNoZWNrXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKVxuICAgIHRoaXMucGF1c2UoKVxuXG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudEluZGV4KVxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudFxuXG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkRcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVlxuXG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSlcblxuICAgIHJlZmxvdyhuZXh0RWxlbWVudClcblxuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKVxuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFLCBvcmRlckNsYXNzTmFtZSwgZGlyZWN0aW9uYWxDbGFzc05hbWUpXG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG5cbiAgICAgIHRyaWdnZXJFdmVudChFVkVOVF9TTElEKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpXG4gIH1cblxuICBfZ2V0QWN0aXZlKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICB9XG5cbiAgX2dldEl0ZW1zKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU0sIHRoaXMuX2VsZW1lbnQpXG4gIH1cblxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVFxuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVZcbiAgfVxuXG4gIF9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlRcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcbiAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJylcblxuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpXG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUodGhpcywgJ3NsaWRlJykgPT09ICduZXh0Jykge1xuICAgIGNhcm91c2VsLm5leHQoKVxuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNhcm91c2VsLnByZXYoKVxuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKVxuXG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY2Fyb3VzZWxzKSB7XG4gICAgQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpXG5cbmV4cG9ydCBkZWZhdWx0IENhcm91c2VsXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjb2xsYXBzZSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNvbGxhcHNlJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCdcbmNvbnN0IENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOID0gYDpzY29wZSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfWBcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJ1xuXG5jb25zdCBXSURUSCA9ICd3aWR0aCdcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIHBhcmVudDogbnVsbCxcbiAgdG9nZ2xlOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW11cblxuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChjb25zdCBlbGVtIG9mIHRvZ2dsZUxpc3QpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JFbmdpbmUuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKVxuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpXG4gICAgICAgIC5maWx0ZXIoZm91bmRFbGVtZW50ID0+IGZvdW5kRWxlbWVudCA9PT0gdGhpcy5fZWxlbWVudClcblxuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdGhpcy5faXNTaG93bigpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlQ2hpbGRyZW4gPSBbXVxuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUylcbiAgICAgICAgLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC5tYXAoZWxlbWVudCA9PiBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHsgdG9nZ2xlOiBmYWxzZSB9KSlcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2hpbGRyZW4ubGVuZ3RoICYmIGFjdGl2ZUNoaWxkcmVuWzBdLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWN0aXZlSW5zdGFuY2Ugb2YgYWN0aXZlQ2hpbGRyZW4pIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlLmhpZGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMFxuXG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSlcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcbiAgICB9XG5cbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWBcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGBcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YFxuXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdGhpcy5fdHJpZ2dlckFycmF5KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0cmlnZ2VyKVxuXG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJydcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpIC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudClcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFRcbiAgfVxuXG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KVxuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSlcbiAgfVxuXG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0NPTExBUFNFRCwgIWlzT3BlbilcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fVxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgIF9jb25maWcudG9nZ2xlID0gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCAoZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5nZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKHRoaXMpKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7IHRvZ2dsZTogZmFsc2UgfSkudG9nZ2xlKClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3IuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBleGVjdXRlLFxuICBnZXRFbGVtZW50LFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNFbGVtZW50LFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICBub29wXG59IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Ryb3Bkb3duJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMiAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSID0gJ2Ryb3B1cC1jZW50ZXInXG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04gPSBgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX0uJHtDTEFTU19OQU1FX1NIT1d9YFxuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IFNFTEVDVE9SX05BVkJBUiA9ICcubmF2YmFyJ1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdidcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5cbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvQ2xvc2U6IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBvZmZzZXQ6IFswLCAyXSxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlIC8vIGRyb3Bkb3duIHdyYXBwZXJcbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgdGhpcy5fbWVudSA9IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KVxuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCByZWxhdGVkVGFyZ2V0KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF0aGlzLl9wYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJylcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmXG4gICAgICB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYClcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlXG4gICAgfVxuXG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKClcbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZylcbiAgfVxuXG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fcGFyZW50XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUF9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1RPUENFTlRFUlxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUlxuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJ1xuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT01cbiAgfVxuXG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVIpICE9PSBudWxsXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKSAvLyBUT0RPOiB2NiByZW1vdmVcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9XG4gIH1cblxuICBfc2VsZWN0TWVudUl0ZW0oeyBrZXksIHRhcmdldCB9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMsIHRoaXMuX21lbnUpLmZpbHRlcihlbGVtZW50ID0+IGlzVmlzaWJsZShlbGVtZW50KSlcblxuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBpZiB0YXJnZXQgaXNuJ3QgaW5jbHVkZWQgaW4gaXRlbXMgKGUuZy4gd2hlbiBleHBhbmRpbmcgdGhlIGRyb3Bkb3duKVxuICAgIC8vIGFsbG93IGN5Y2xpbmcgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gY2FzZSBrZXkgZXF1YWxzIEFSUk9XX1VQX0tFWVxuICAgIGdldE5leHRBY3RpdmVFbGVtZW50KGl0ZW1zLCB0YXJnZXQsIGtleSA9PT0gQVJST1dfRE9XTl9LRVksICFpdGVtcy5pbmNsdWRlcyh0YXJnZXQpKS5mb2N1cygpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10oKVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgY2xlYXJNZW51cyhldmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IFJJR0hUX01PVVNFX0JVVFRPTiB8fCAoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgIT09IFRBQl9LRVkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcGVuVG9nZ2xlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04pXG5cbiAgICBmb3IgKGNvbnN0IHRvZ2dsZSBvZiBvcGVuVG9nZ2xlcykge1xuICAgICAgY29uc3QgY29udGV4dCA9IERyb3Bkb3duLmdldEluc3RhbmNlKHRvZ2dsZSlcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKVxuICAgICAgY29uc3QgaXNNZW51VGFyZ2V0ID0gY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX21lbnUpXG4gICAgICBpZiAoXG4gICAgICAgIGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fFxuICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScgJiYgIWlzTWVudVRhcmdldCkgfHxcbiAgICAgICAgKGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdvdXRzaWRlJyAmJiBpc01lbnVUYXJnZXQpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgaWYgKGNvbnRleHQuX21lbnUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAoKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ID09PSBUQUJfS0VZKSB8fCAvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7IHJlbGF0ZWRUYXJnZXQ6IGNvbnRleHQuX2VsZW1lbnQgfVxuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudFxuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldClcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGFuIFVQIHwgRE9XTiB8IEVTQ0FQRSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhICYmIGlmIGtleSBpcyBvdGhlciB0aGFuIEVTQ0FQRSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG5cbiAgICBjb25zdCBpc0lucHV0ID0gL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSlcbiAgICBjb25zdCBpc0VzY2FwZUV2ZW50ID0gZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZXG4gICAgY29uc3QgaXNVcE9yRG93bkV2ZW50ID0gW0FSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSlcblxuICAgIGlmICghaXNVcE9yRG93bkV2ZW50ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNJbnB1dCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIGNvbnN0IGdldFRvZ2dsZUJ1dHRvbiA9IHRoaXMubWF0Y2hlcyhTRUxFQ1RPUl9EQVRBX1RPR0dMRSkgP1xuICAgICAgdGhpcyA6XG4gICAgICAoU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSlbMF0gfHxcbiAgICAgICAgU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSlbMF0gfHxcbiAgICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZXZlbnQuZGVsZWdhdGVUYXJnZXQucGFyZW50Tm9kZSkpXG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UoZ2V0VG9nZ2xlQnV0dG9uKVxuXG4gICAgaWYgKGlzVXBPckRvd25FdmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGluc3RhbmNlLnNob3coKVxuICAgICAgaW5zdGFuY2UuX3NlbGVjdE1lbnVJdGVtKGV2ZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLl9pc1Nob3duKCkpIHsgLy8gZWxzZSBpcyBlc2NhcGUgYW5kIHdlIGNoZWNrIGlmIGl0IGlzIHNob3duXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaW5zdGFuY2UuaGlkZSgpXG4gICAgICBnZXRUb2dnbGVCdXR0b24uZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9NRU5VLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cylcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bilcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25cbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vY29uZmlnLmpzJ1xuaW1wb3J0IHtcbiAgZXhlY3V0ZSwgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiwgZ2V0RWxlbWVudCwgcmVmbG93XG59IGZyb20gJy4vaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdiYWNrZHJvcCdcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBFVkVOVF9NT1VTRURPV04gPSBgbW91c2Vkb3duLmJzLiR7TkFNRX1gXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgY2xpY2tDYWxsYmFjazogbnVsbCxcbiAgaXNBbmltYXRlZDogZmFsc2UsXG4gIGlzVmlzaWJsZTogdHJ1ZSwgLy8gaWYgZmFsc2UsIHdlIHVzZSB0aGUgYmFja2Ryb3AgaGVscGVyIHdpdGhvdXQgYWRkaW5nIGFueSBlbGVtZW50IHRvIHRoZSBkb21cbiAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgcm9vdEVsZW1lbnQ6ICcoZWxlbWVudHxzdHJpbmcpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQoKVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKVxuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KGVsZW1lbnQpXG4gICAgfVxuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKClcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgfSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTilcblxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKClcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2VcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50XG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudClcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpXG4gICAgdGhpcy5fY29uZmlnLnJvb3RFbGVtZW50LmFwcGVuZChlbGVtZW50KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjaylcbiAgICB9KVxuXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWVcbiAgfVxuXG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpIC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpXG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7IHRyYXBFbGVtZW50IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudClcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Njcm9sbEJhci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuLi9kb20vbWFuaXB1bGF0b3IuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJy4vaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJ1xuY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnXG5jb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnXG5jb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0J1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpXG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aClcbiAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKVxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aClcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTilcbiAgfVxuXG4gIGlzT3ZlcmZsb3dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDBcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rpc2FibGVPdmVyRmxvdygpIHtcbiAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICB9XG5cbiAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpXG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KVxuICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KVxuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGApXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spXG4gIH1cblxuICBfc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpXG4gICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KVxuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcGVydHkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpXG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIHZhbHVlKVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKVxuICB9XG5cbiAgX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIGNhbGxCYWNrKSB7XG4gICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGNhbGxCYWNrKHNlbClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsQmFySGVscGVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wLmpzJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcydcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi91dGlsL2ZvY3VzdHJhcC5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbiwgaXNSVEwsIGlzVmlzaWJsZSwgcmVmbG93XG59IGZyb20gJy4vdXRpbC9pbmRleC5qcydcbmltcG9ydCBTY3JvbGxCYXJIZWxwZXIgZnJvbSAnLi91dGlsL3Njcm9sbGJhci5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ21vZGFsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMubW9kYWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTID0gYG1vdXNlZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3BlbidcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnXG5cbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm1vZGFsLnNob3cnXG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZydcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGZvY3VzOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgZm9jdXM6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKClcblxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIHRoaXMuX3Njcm9sbEJhci5oaWRlKClcblxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pXG5cbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygoKSA9PiB0aGlzLl9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSlcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2hpZGVNb2RhbCgpLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9LRVkpXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX0tFWSlcblxuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgaGFuZGxlVXBkYXRlKCkge1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSwgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlLFxuICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgfSlcbiAgfVxuXG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSlcbiAgfVxuXG4gIF9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSB7XG4gICAgLy8gdHJ5IHRvIGFwcGVuZCBkeW5hbWljIG1vZGFsXG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpXG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDBcbiAgICB9XG5cbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIHRoaXMuX2lzQW5pbWF0ZWQoKSlcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICB9KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgLy8gYSBiYWQgdHJpY2sgdG8gc2VncmVnYXRlIGNsaWNrcyB0aGF0IG1heSBzdGFydCBpbnNpZGUgZGlhbG9nIGJ1dCBlbmQgb3V0c2lkZSwgYW5kIGF2b2lkIGxpc3RlbiB0byBzY3JvbGxiYXIgY2xpY2tzXG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgfHwgdGhpcy5fZWxlbWVudCAhPT0gZXZlbnQyLnRhcmdldCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuXG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKVxuICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpXG4gICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH0pXG4gIH1cblxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICB9XG5cbiAgX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1lcbiAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICBpZiAoaW5pdGlhbE92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TVEFUSUMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJ1xuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQylcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NUQVRJQylcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IGluaXRpYWxPdmVyZmxvd1lcbiAgICAgIH0sIHRoaXMuX2RpYWxvZylcbiAgICB9LCB0aGlzLl9kaWFsb2cpXG5cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgKi9cblxuICBfYWRqdXN0RGlhbG9nKCkge1xuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKClcbiAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMFxuXG4gICAgaWYgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0J1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG5cbiAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdSaWdodCcgOiAncGFkZGluZ0xlZnQnXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJ1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJydcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVywgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGFsIHRvZ2dsZXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUilcbiAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuXG4gIGRhdGEudG9nZ2xlKHRoaXMpXG59KVxuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihNb2RhbClcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpXG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4vdXRpbC9iYWNrZHJvcC5qcydcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGlzRGlzYWJsZWQsXG4gIGlzVmlzaWJsZVxufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXIuanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdvZmZjYW52YXMnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5vZmZjYW52YXMnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9ISURJTkcgPSAnaGlkaW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9CQUNLRFJPUCA9ICdvZmZjYW52YXMtYmFja2Ryb3AnXG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5vZmZjYW52YXMuc2hvdydcblxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBzY3JvbGw6IGZhbHNlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzY3JvbGw6ICdib29sZWFuJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBPZmZjYW52YXMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKVxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywgeyByZWxhdGVkVGFyZ2V0IH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygpXG5cbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5oaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCB8fCB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwgeyByZWxhdGVkVGFyZ2V0IH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJRElORylcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKClcblxuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XLCBDTEFTU19OQU1FX0hJRElORylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5yZXNldCgpXG4gICAgICB9XG5cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbGJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICBjb25zdCBjbGlja0NhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH1cblxuICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZVxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKVxuXG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBjbGFzc05hbWU6IENMQVNTX05BTUVfQkFDS0RST1AsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBpc0FuaW1hdGVkOiB0cnVlLFxuICAgICAgcm9vdEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgIGNsaWNrQ2FsbGJhY2s6IGlzVmlzaWJsZSA/IGNsaWNrQ2FsbGJhY2sgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSlcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpXG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG4gIGRhdGEudG9nZ2xlKHRoaXMpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KClcbiAgfVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKVxuICAgIH1cbiAgfVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8vIGpzLWRvY3Mtc3RhcnQgYWxsb3ctbGlzdFxuY29uc3QgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0QWxsb3dsaXN0ID0ge1xuICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICBhOiBbJ3RhcmdldCcsICdocmVmJywgJ3RpdGxlJywgJ3JlbCddLFxuICBhcmVhOiBbXSxcbiAgYjogW10sXG4gIGJyOiBbXSxcbiAgY29sOiBbXSxcbiAgY29kZTogW10sXG4gIGRkOiBbXSxcbiAgZGl2OiBbXSxcbiAgZGw6IFtdLFxuICBkdDogW10sXG4gIGVtOiBbXSxcbiAgaHI6IFtdLFxuICBoMTogW10sXG4gIGgyOiBbXSxcbiAgaDM6IFtdLFxuICBoNDogW10sXG4gIGg1OiBbXSxcbiAgaDY6IFtdLFxuICBpOiBbXSxcbiAgaW1nOiBbJ3NyYycsICdzcmNzZXQnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICBsaTogW10sXG4gIG9sOiBbXSxcbiAgcDogW10sXG4gIHByZTogW10sXG4gIHM6IFtdLFxuICBzbWFsbDogW10sXG4gIHNwYW46IFtdLFxuICBzdWI6IFtdLFxuICBzdXA6IFtdLFxuICBzdHJvbmc6IFtdLFxuICB1OiBbXSxcbiAgdWw6IFtdXG59XG4vLyBqcy1kb2NzLWVuZCBhbGxvdy1saXN0XG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFtcbiAgJ2JhY2tncm91bmQnLFxuICAnY2l0ZScsXG4gICdocmVmJyxcbiAgJ2l0ZW10eXBlJyxcbiAgJ2xvbmdkZXNjJyxcbiAgJ3Bvc3RlcicsXG4gICdzcmMnLFxuICAneGxpbms6aHJlZidcbl0pXG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBVUkxzIHRoYXQgYXJlIHNhZmUgd3J0LiBYU1MgaW4gVVJMIG5hdmlnYXRpb25cbiAqIGNvbnRleHRzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xNS4yLjgvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHMjTDM4XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvaVxuXG5jb25zdCBhbGxvd2VkQXR0cmlidXRlID0gKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpID0+IHtcbiAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgaWYgKHVyaUF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKVxuICAgIC5zb21lKHJlZ2V4ID0+IHJlZ2V4LnRlc3QoYXR0cmlidXRlTmFtZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgYWxsb3dMaXN0LCBzYW5pdGl6ZUZ1bmN0aW9uKSB7XG4gIGlmICghdW5zYWZlSHRtbC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zYWZlSHRtbFxuICB9XG5cbiAgaWYgKHNhbml0aXplRnVuY3Rpb24gJiYgdHlwZW9mIHNhbml0aXplRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2FuaXRpemVGdW5jdGlvbih1bnNhZmVIdG1sKVxuICB9XG5cbiAgY29uc3QgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKVxuICBjb25zdCBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKVxuICBjb25zdCBlbGVtZW50cyA9IFtdLmNvbmNhdCguLi5jcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpXG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgZWxlbWVudE5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmICghT2JqZWN0LmtleXMoYWxsb3dMaXN0KS5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlKClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpXG4gICAgY29uc3QgYWxsb3dlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQoYWxsb3dMaXN0WycqJ10gfHwgW10sIGFsbG93TGlzdFtlbGVtZW50TmFtZV0gfHwgW10pXG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVMaXN0KSB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUxcbn1cbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC90ZW1wbGF0ZS1mYWN0b3J5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vY29uZmlnLmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCwgc2FuaXRpemVIdG1sIH0gZnJvbSAnLi9zYW5pdGl6ZXIuanMnXG5pbXBvcnQgeyBleGVjdXRlLCBnZXRFbGVtZW50LCBpc0VsZW1lbnQgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnVGVtcGxhdGVGYWN0b3J5J1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGNvbnRlbnQ6IHt9LCAvLyB7IHNlbGVjdG9yIDogdGV4dCAsICBzZWxlY3RvcjIgOiB0ZXh0MiAsIH1cbiAgZXh0cmFDbGFzczogJycsXG4gIGh0bWw6IGZhbHNlLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2Pidcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGNvbnRlbnQ6ICdvYmplY3QnLFxuICBleHRyYUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZydcbn1cblxuY29uc3QgRGVmYXVsdENvbnRlbnRUeXBlID0ge1xuICBlbnRyeTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbnxudWxsKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xlbGVtZW50KSdcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGVtcGxhdGVGYWN0b3J5IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpXG4gICAgICAubWFwKGNvbmZpZyA9PiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb25maWcpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICB9XG5cbiAgaGFzQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50KCkubGVuZ3RoID4gMFxuICB9XG5cbiAgY2hhbmdlQ29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbnRlbnQpXG4gICAgdGhpcy5fY29uZmlnLmNvbnRlbnQgPSB7IC4uLnRoaXMuX2NvbmZpZy5jb250ZW50LCAuLi5jb250ZW50IH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgdG9IdG1sKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGVtcGxhdGVXcmFwcGVyLmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUodGhpcy5fY29uZmlnLnRlbXBsYXRlKVxuXG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIHRleHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KSkge1xuICAgICAgdGhpcy5fc2V0Q29udGVudCh0ZW1wbGF0ZVdyYXBwZXIsIHRleHQsIHNlbGVjdG9yKVxuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVXcmFwcGVyLmNoaWxkcmVuWzBdXG4gICAgY29uc3QgZXh0cmFDbGFzcyA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5leHRyYUNsYXNzKVxuXG4gICAgaWYgKGV4dHJhQ2xhc3MpIHtcbiAgICAgIHRlbXBsYXRlLmNsYXNzTGlzdC5hZGQoLi4uZXh0cmFDbGFzcy5zcGxpdCgnICcpKVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZykge1xuICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb25maWcuY29udGVudClcbiAgfVxuXG4gIF9jaGVja0NvbnRlbnQoYXJnKSB7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGFyZykpIHtcbiAgICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoeyBzZWxlY3RvciwgZW50cnk6IGNvbnRlbnQgfSwgRGVmYXVsdENvbnRlbnRUeXBlKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRDb250ZW50KHRlbXBsYXRlLCBjb250ZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIHRlbXBsYXRlKVxuXG4gICAgaWYgKCF0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnRlbnQgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KVxuXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQucmVtb3ZlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0VsZW1lbnQoY29udGVudCkpIHtcbiAgICAgIHRoaXMuX3B1dEVsZW1lbnRJblRlbXBsYXRlKGdldEVsZW1lbnQoY29udGVudCksIHRlbXBsYXRlRWxlbWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUoY29udGVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnRcbiAgfVxuXG4gIF9tYXliZVNhbml0aXplKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2FuaXRpemUgPyBzYW5pdGl6ZUh0bWwoYXJnLCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbikgOiBhcmdcbiAgfVxuXG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzXSlcbiAgfVxuXG4gIF9wdXRFbGVtZW50SW5UZW1wbGF0ZShlbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSAnJ1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmFwcGVuZChlbGVtZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlRmFjdG9yeVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b29sdGlwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvci5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbiwgZXhlY3V0ZSwgZmluZFNoYWRvd1Jvb3QsIGdldEVsZW1lbnQsIGdldFVJRCwgaXNSVEwsIG5vb3Bcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCB9IGZyb20gJy4vdXRpbC9zYW5pdGl6ZXIuanMnXG5pbXBvcnQgVGVtcGxhdGVGYWN0b3J5IGZyb20gJy4vdXRpbC90ZW1wbGF0ZS1mYWN0b3J5LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9vbHRpcCdcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKVxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfTU9EQUwgPSAnbW9kYWwnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiA9ICcudG9vbHRpcC1pbm5lcidcbmNvbnN0IFNFTEVDVE9SX01PREFMID0gYC4ke0NMQVNTX05BTUVfTU9EQUx9YFxuXG5jb25zdCBFVkVOVF9NT0RBTF9ISURFID0gJ2hpZGUuYnMubW9kYWwnXG5cbmNvbnN0IFRSSUdHRVJfSE9WRVIgPSAnaG92ZXInXG5jb25zdCBUUklHR0VSX0ZPQ1VTID0gJ2ZvY3VzJ1xuY29uc3QgVFJJR0dFUl9DTElDSyA9ICdjbGljaydcbmNvbnN0IFRSSUdHRVJfTUFOVUFMID0gJ21hbnVhbCdcblxuY29uc3QgRVZFTlRfSElERSA9ICdoaWRlJ1xuY29uc3QgRVZFTlRfSElEREVOID0gJ2hpZGRlbidcbmNvbnN0IEVWRU5UX1NIT1cgPSAnc2hvdydcbmNvbnN0IEVWRU5UX1NIT1dOID0gJ3Nob3duJ1xuY29uc3QgRVZFTlRfSU5TRVJURUQgPSAnaW5zZXJ0ZWQnXG5jb25zdCBFVkVOVF9DTElDSyA9ICdjbGljaydcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSAnZm9jdXNpbidcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gJ2ZvY3Vzb3V0J1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiA9ICdtb3VzZWVudGVyJ1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSA9ICdtb3VzZWxlYXZlJ1xuXG5jb25zdCBBdHRhY2htZW50TWFwID0ge1xuICBBVVRPOiAnYXV0bycsXG4gIFRPUDogJ3RvcCcsXG4gIFJJR0hUOiBpc1JUTCgpID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgQk9UVE9NOiAnYm90dG9tJyxcbiAgTEVGVDogaXNSVEwoKSA/ICdyaWdodCcgOiAnbGVmdCdcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBhbmltYXRpb246IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBkZWxheTogMCxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLFxuICBodG1sOiBmYWxzZSxcbiAgb2Zmc2V0OiBbMCwgNl0sXG4gIHBsYWNlbWVudDogJ3RvcCcsXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicsXG4gIHRpdGxlOiAnJyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gIGN1c3RvbUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogJ2FycmF5JyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBsYWNlbWVudDogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gIHRpdGxlOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKScsXG4gIHRyaWdnZXI6ICdzdHJpbmcnXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJylcbiAgICB9XG5cbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICAgIHRoaXMuX3RpbWVvdXQgPSAwXG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fVxuICAgIHRoaXMuX3BvcHBlciA9IG51bGxcbiAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBudWxsXG4gICAgdGhpcy5fbmV3Q29udGVudCA9IG51bGxcblxuICAgIC8vIFByb3RlY3RlZFxuICAgIHRoaXMudGlwID0gbnVsbFxuXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLl9maXhUaXRsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZVxuICB9XG5cbiAgdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkXG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGlja1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2xlYXZlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VudGVyKClcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpXG5cbiAgICBpZiAodGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSlcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJylcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLl9pc1dpdGhDb250ZW50KCkgJiYgdGhpcy5faXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPVykpXG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgaXNJblRoZURvbSA9IChzaGFkb3dSb290IHx8IHRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFRPRE86IHY2IHJlbW92ZSB0aGlzIG9yIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXAuZ2V0QXR0cmlidXRlKCdpZCcpKVxuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpXG4gICAgfVxuXG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcClcblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTikpXG5cbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlYXZlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElERSkpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KClcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGwgLy8gaXQgaXMgYSB0cmljayB0byBzdXBwb3J0IG1hbnVhbCB0cmlnZ2VyaW5nXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4pKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpXG4gIH1cblxuICBfZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudCB8fCB0aGlzLl9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aXBcbiAgfVxuXG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKClcblxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGNoZWNrIGluIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFLCBDTEFTU19OQU1FX1NIT1cpXG4gICAgLy8gVE9ETzogdjYgdGhlIGZvbGxvd2luZyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBDU1Mgb25seVxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKGBicy0ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXV0b2ApXG5cbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKClcblxuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRpcFxuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICAgIHRoaXMuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3RvcnlcbiAgfVxuXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9UT09MVElQX0lOTkVSXTogdGhpcy5fZ2V0VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgKHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IGV4ZWN1dGUodGhpcy5fY29uZmlnLnBsYWNlbWVudCwgW3RoaXMsIHRpcCwgdGhpcy5fZWxlbWVudF0pXG4gICAgY29uc3QgYXR0YWNobWVudCA9IEF0dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldXG4gICAgcmV0dXJuIFBvcHBlci5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkpXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXMuX2VsZW1lbnRdKVxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmVTZXRQbGFjZW1lbnQnLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgICBmbjogZGF0YSA9PiB7XG4gICAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgICB0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdkYXRhLXBvcHBlci1wbGFjZW1lbnQnLCBkYXRhLnN0YXRlLnBsYWNlbWVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9XG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKVxuXG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0spLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KVxuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKClcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOKVxuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFTEVBVkUpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVClcblxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IHRydWVcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpXG4gICAgICAgIH0pXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPVxuICAgICAgICAgICAgY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxuXG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuICB9XG5cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcblxuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSkgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKVxuICB9XG5cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG5cbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93KClcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdylcbiAgfVxuXG4gIF9sZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKVxuICB9XG5cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG4gIH1cblxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKVxuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKVxuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcilcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25maWcuc2VsZWN0b3IgPSBmYWxzZVxuICAgIGNvbmZpZy50cmlnZ2VyID0gJ21hbnVhbCdcblxuICAgIC8vIEluIHRoZSBmdXR1cmUgY2FuIGJlIHJlcGxhY2VkIHdpdGg6XG4gICAgLy8gY29uc3Qga2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpLmZpbHRlcihlbnRyeSA9PiB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZW50cnlbMF1dICE9PSB0aGlzLl9jb25maWdbZW50cnlbMF1dKVxuICAgIC8vIGBPYmplY3QuZnJvbUVudHJpZXMoa2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMpYFxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9kaXNwb3NlUG9wcGVyKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpXG4gICAgICB0aGlzLnRpcCA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb29sdGlwLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAuanMnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdwb3BvdmVyJ1xuXG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInXG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgK1xuICAgICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICtcbiAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2NsaWNrJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKVxuXG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLCBnZXRFbGVtZW50LCBpc0Rpc2FibGVkLCBpc1Zpc2libGVcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnc2Nyb2xsc3B5J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX0FDVElWQVRFID0gYGFjdGl2YXRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0sgPSBgY2xpY2ske0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nXG5jb25zdCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MgPSAnW2hyZWZdJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgb2Zmc2V0OiBudWxsLCAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLCAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fcm9vdEVsZW1lbnQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnQpLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnID8gbnVsbCA6IHRoaXMuX2VsZW1lbnRcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsXG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhID0ge1xuICAgICAgdmlzaWJsZUVudHJ5VG9wOiAwLFxuICAgICAgcGFyZW50U2Nyb2xsVG9wOiAwXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaCgpIC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKClcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHlcblxuICAgIC8vIFRPRE86IHY2IE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFVzZSByb290TWFyZ2luIG9ubHlcbiAgICBjb25maWcucm9vdE1hcmdpbiA9IGNvbmZpZy5vZmZzZXQgPyBgJHtjb25maWcub2Zmc2V0fXB4IDBweCAtMzAlYCA6IGNvbmZpZy5yb290TWFyZ2luXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNtb290aFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSylcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSywgU0VMRUNUT1JfVEFSR0VUX0xJTktTLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQoZXZlbnQudGFyZ2V0Lmhhc2gpXG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG9ic2VydmFibGVTZWN0aW9uLm9mZnNldFRvcCAtIHRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wXG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7IHRvcDogaGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSwgb3B0aW9ucylcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKVxuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3BcbiAgICAgIHRoaXMuX3Byb2Nlc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50U2Nyb2xsVG9wID0gKHRoaXMuX3Jvb3RFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3BcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcFxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKVxuXG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldClcblxuICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIHRhcmdldExpbmtzKSB7XG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcyBhbiBpZCBhbmQgaXMgbm90IGRpc2FibGVkXG4gICAgICBpZiAoIWFuY2hvci5oYXNoIHx8IGlzRGlzYWJsZWQoYW5jaG9yKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgdGhpcy5fZWxlbWVudClcblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIG9ic2VydmFibGVTZWN0aW9uIGV4aXN0cyAmIGlzIHZpc2libGVcbiAgICAgIGlmIChpc1Zpc2libGUob2JzZXJ2YWJsZVNlY3Rpb24pKSB7XG4gICAgICAgIHRoaXMuX3RhcmdldExpbmtzLnNldChkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCBhbmNob3IpXG4gICAgICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5zZXQoYW5jaG9yLmhhc2gsIG9ic2VydmFibGVTZWN0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9wcm9jZXNzKHRhcmdldCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgPT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0aGlzLl9jb25maWcudGFyZ2V0KVxuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IHRhcmdldFxuICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpXG5cbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9BQ1RJVkFURSwgeyByZWxhdGVkVGFyZ2V0OiB0YXJnZXQgfSlcbiAgfVxuXG4gIF9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KSB7XG4gICAgLy8gQWN0aXZhdGUgZHJvcGRvd24gcGFyZW50c1xuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCB0YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTikpXG4gICAgICAgIC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsaXN0R3JvdXAgb2YgU2VsZWN0b3JFbmdpbmUucGFyZW50cyh0YXJnZXQsIFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKSkge1xuICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX0xJTktfSVRFTVMpKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfY2xlYXJBY3RpdmVDbGFzcyhwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcblxuICAgIGNvbnN0IGFjdGl2ZU5vZGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChgJHtTRUxFQ1RPUl9UQVJHRVRfTElOS1N9LiR7Q0xBU1NfTkFNRV9BQ1RJVkV9YCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhY3RpdmVOb2Rlcykge1xuICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10oKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBzcHkgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSkpIHtcbiAgICBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZShzcHkpXG4gIH1cbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSlcblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsU3B5XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luLCBnZXROZXh0QWN0aXZlRWxlbWVudCwgaXNEaXNhYmxlZCB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RhYidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnXG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCdcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgSE9NRV9LRVkgPSAnSG9tZSdcbmNvbnN0IEVORF9LRVkgPSAnRW5kJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nXG5cbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSBgOm5vdCgke1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0pYFxuXG5jb25zdCBTRUxFQ1RPUl9UQUJfUEFORUwgPSAnLmxpc3QtZ3JvdXAsIC5uYXYsIFtyb2xlPVwidGFibGlzdFwiXSdcbmNvbnN0IFNFTEVDVE9SX09VVEVSID0gJy5uYXYtaXRlbSwgLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0lOTkVSID0gYC5uYXYtbGluayR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIC5saXN0LWdyb3VwLWl0ZW0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCBbcm9sZT1cInRhYlwiXSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX1gXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nIC8vIFRPRE86IGNvdWxkIG9ubHkgYmUgYHRhYmAgaW4gdjZcbmNvbnN0IFNFTEVDVE9SX0lOTkVSX0VMRU0gPSBgJHtTRUxFQ1RPUl9JTk5FUn0sICR7U0VMRUNUT1JfREFUQV9UT0dHTEV9YFxuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUgPSBgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdYFxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIHN1cGVyKGVsZW1lbnQpXG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX1RBQl9QQU5FTClcblxuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICAgIC8vIFRPRE86IHNob3VsZCB0aHJvdyBleGNlcHRpb24gaW4gdjZcbiAgICAgIC8vIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZWxlbWVudC5vdXRlckhUTUx9IGhhcyBub3QgYSB2YWxpZCBwYXJlbnQgJHtTRUxFQ1RPUl9JTk5FUl9FTEVNfWApXG4gICAgfVxuXG4gICAgLy8gU2V0IHVwIGluaXRpYWwgYXJpYSBhdHRyaWJ1dGVzXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXModGhpcy5fcGFyZW50LCB0aGlzLl9nZXRDaGlsZHJlbigpKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04sIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkgeyAvLyBTaG93cyB0aGlzIGVsZW0gYW5kIGRlYWN0aXZhdGUgdGhlIGFjdGl2ZSBzaWJsaW5nIGlmIGV4aXN0c1xuICAgIGNvbnN0IGlubmVyRWxlbSA9IHRoaXMuX2VsZW1lbnRcbiAgICBpZiAodGhpcy5fZWxlbUlzQWN0aXZlKGlubmVyRWxlbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNlYXJjaCBmb3IgYWN0aXZlIHRhYiBvbiBzYW1lIHBhcmVudCB0byBkZWFjdGl2YXRlIGl0XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbSgpXG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBhY3RpdmUgP1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoYWN0aXZlLCBFVkVOVF9ISURFLCB7IHJlbGF0ZWRUYXJnZXQ6IGlubmVyRWxlbSB9KSA6XG4gICAgICBudWxsXG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcihpbm5lckVsZW0sIEVWRU5UX1NIT1csIHsgcmVsYXRlZFRhcmdldDogYWN0aXZlIH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgKGhpZGVFdmVudCAmJiBoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2RlYWN0aXZhdGUoYWN0aXZlLCBpbm5lckVsZW0pXG4gICAgdGhpcy5fYWN0aXZhdGUoaW5uZXJFbGVtLCBhY3RpdmUpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9hY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgdGhpcy5fYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSkgLy8gU2VhcmNoIGFuZCBhY3RpdmF0ZS9zaG93IHRoZSBwcm9wZXIgc2VjdGlvblxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpXG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCB0cnVlKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfU0hPV04sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSlcbiAgfVxuXG4gIF9kZWFjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgZWxlbWVudC5ibHVyKClcblxuICAgIHRoaXMuX2RlYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSkgLy8gU2VhcmNoIGFuZCBkZWFjdGl2YXRlIHRoZSBzaG93biBzZWN0aW9uIHRvb1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKVxuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgZmFsc2UpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9ISURERU4sIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW0gfSlcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoIShbQVJST1dfTEVGVF9LRVksIEFSUk9XX1JJR0hUX0tFWSwgQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWSwgSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKS8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKVxuICAgIGxldCBuZXh0QWN0aXZlRWxlbWVudFxuXG4gICAgaWYgKFtIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBjaGlsZHJlbltldmVudC5rZXkgPT09IEhPTUVfS0VZID8gMCA6IGNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpXG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGdldE5leHRBY3RpdmVFbGVtZW50KGNoaWxkcmVuLCBldmVudC50YXJnZXQsIGlzTmV4dCwgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KVxuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRDaGlsZHJlbigpIHsgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudClcbiAgfVxuXG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbFxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhwYXJlbnQsICdyb2xlJywgJ3RhYmxpc3QnKVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZClcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZClcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoY2hpbGQpXG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpXG5cbiAgICBpZiAob3V0ZXJFbGVtICE9PSBjaGlsZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMob3V0ZXJFbGVtLCAncm9sZScsICdwcmVzZW50YXRpb24nKVxuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKVxuICAgIH1cblxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKVxuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKVxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpXG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpXG5cbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAke2NoaWxkLmlkfWApXG4gICAgfVxuICB9XG5cbiAgX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIG9wZW4pIHtcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoZWxlbWVudClcbiAgICBpZiAoIW91dGVyRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfRFJPUERPV04pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0b2dnbGUgPSAoc2VsZWN0b3IsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIG91dGVyRWxlbSlcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIG9wZW4pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX01FTlUsIENMQVNTX05BTUVfU0hPVylcbiAgICBvdXRlckVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgb3BlbilcbiAgfVxuXG4gIF9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIF9lbGVtSXNBY3RpdmUoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0FDVElWRSlcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIGlubmVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtbGluaylcbiAgX2dldElubmVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhTRUxFQ1RPUl9JTk5FUl9FTEVNKSA/IGVsZW0gOiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lOTkVSX0VMRU0sIGVsZW0pXG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBvdXRlciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWl0ZW0pXG4gIF9nZXRPdXRlckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsb3Nlc3QoU0VMRUNUT1JfT1VURVIpIHx8IGVsZW1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykuc2hvdygpXG59KVxuXG4vKipcbiAqIEluaXRpYWxpemUgb24gZm9jdXNcbiAqL1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUpKSB7XG4gICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudClcbiAgfVxufSlcbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYilcblxuZXhwb3J0IGRlZmF1bHQgVGFiXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIHJlZmxvdyB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RvYXN0J1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9hc3QnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuXG5jb25zdCBFVkVOVF9NT1VTRU9WRVIgPSBgbW91c2VvdmVyJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VPVVQgPSBgbW91c2VvdXQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9GT0NVU09VVCA9IGBmb2N1c291dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX0hJREUgPSAnaGlkZScgLy8gQGRlcHJlY2F0ZWQgLSBrZXB0IGhlcmUgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnXG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYXV0b2hpZGU6ICdib29sZWFuJyxcbiAgZGVsYXk6ICdudW1iZXInXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYXV0b2hpZGU6IHRydWUsXG4gIGRlbGF5OiA1MDAwXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pXG5cbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfU0hPV0lORylcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSkgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcsIENMQVNTX05BTUVfU0hPVylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG5cbiAgICBpZiAodGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBpc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX21heWJlU2NoZWR1bGVIaWRlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmF1dG9oaWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiB8fCB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheSlcbiAgfVxuXG4gIF9vbkludGVyYWN0aW9uKGV2ZW50LCBpc0ludGVyYWN0aW5nKSB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAgY2FzZSAnbW91c2VvdXQnOiB7XG4gICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOiB7XG4gICAgICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldFxuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICB9XG5cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpXG4gIH1cblxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKFRvYXN0KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdClcblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgaW5kZXgudW1kLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEFsZXJ0IGZyb20gJy4vc3JjL2FsZXJ0LmpzJ1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuL3NyYy9idXR0b24uanMnXG5pbXBvcnQgQ2Fyb3VzZWwgZnJvbSAnLi9zcmMvY2Fyb3VzZWwuanMnXG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi9zcmMvY29sbGFwc2UuanMnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9zcmMvZHJvcGRvd24uanMnXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9zcmMvbW9kYWwuanMnXG5pbXBvcnQgT2ZmY2FudmFzIGZyb20gJy4vc3JjL29mZmNhbnZhcy5qcydcbmltcG9ydCBQb3BvdmVyIGZyb20gJy4vc3JjL3BvcG92ZXIuanMnXG5pbXBvcnQgU2Nyb2xsU3B5IGZyb20gJy4vc3JjL3Njcm9sbHNweS5qcydcbmltcG9ydCBUYWIgZnJvbSAnLi9zcmMvdGFiLmpzJ1xuaW1wb3J0IFRvYXN0IGZyb20gJy4vc3JjL3RvYXN0LmpzJ1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnLi9zcmMvdG9vbHRpcC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBBbGVydCxcbiAgQnV0dG9uLFxuICBDYXJvdXNlbCxcbiAgQ29sbGFwc2UsXG4gIERyb3Bkb3duLFxuICBNb2RhbCxcbiAgT2ZmY2FudmFzLFxuICBQb3BvdmVyLFxuICBTY3JvbGxTcHksXG4gIFRhYixcbiAgVG9hc3QsXG4gIFRvb2x0aXBcbn1cbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZywgSXRlbVZpZXcsIFdvcmtzcGFjZUxlYWYsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyc7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzJztcblxuaW50ZXJmYWNlIE15UGx1Z2luU2V0dGluZ3Mge1xuICAgIG15U2V0dGluZzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBNeVBsdWdpblNldHRpbmdzID0ge1xuICAgIG15U2V0dGluZzogJ2RlZmF1bHQnXG59XG5cbmNvbnN0IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUyA6IGFueSA9IHtcblx0c2NvcmVUaHJlc2hvbGQ6IDAuOCxcblx0bm9kZVNpemU6IDMsXG5cdGxpbmtUaGlja25lc3M6IDAuMyxcblx0cmVwZWxGb3JjZTogNDAwLFxuXHRsaW5rRm9yY2U6IDAuNCxcblx0bGlua0Rpc3RhbmNlOiA3MCxcblx0Y2VudGVyRm9yY2U6IDAuNDBcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBTbWFydFNlYXJjaDogYW55O1xuICAgIH1cbn1cblxuY2xhc3MgTXlJdGVtVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcblxuXHRjdXJyZW50Tm90ZUtleTogc3RyaW5nOyAvLyBEZWZpbmUgdGhlIGN1cnJlbnROb3RlS2V5IHByb3BlcnR5XG5cdGNlbnRyYWxOb3RlOiBhbnk7XG5cdGNlbnRyYWxOb2RlOiBhbnk7XG5cdGNvbm5lY3Rpb25UeXBlID0gJ2Jsb2NrJztcbiAgICBpc0hvdmVyaW5nOiBib29sZWFuOyAvLyBBZGQgYSBmbGFnIHRvIHRyYWNrIGhvdmVyIHN0YXRlXG5cdHJlbGV2YW5jZVNjb3JlVGhyZXNob2xkID0gMC44O1xuXHRzZXR0aW5nc0luc3RhbnRpYXRlZCA9IGZhbHNlO1xuXHRub2RlU2l6ZSA9IDM7XG5cdGxpbmtUaGlja25lc3MgPSAwLjM7XG5cdHJlcGVsRm9yY2UgPSA0MDA7XG5cdGxpbmtGb3JjZSA9IDAuNDtcblx0bGlua0Rpc3RhbmNlID0gNzA7XG5cdGNlbnRlckZvcmNlID0gMC40MDtcblx0dGV4dEZhZGVUaHJlc2hvbGQgPSAxLjE7XG5cdG1pblNjb3JlID0gMTtcblx0bWF4U2NvcmUgPSAwO1xuXHRtaW5Ob2RlU2l6ZSA9IDM7XG5cdG1heE5vZGVTaXplID0gNjtcblx0bWluTGlua1RoaWNrbmVzcyA9IDAuMztcblx0bWF4TGlua1RoaWNrbmVzcyA9IDQ7XG5cdG5vZGVTZWxlY3Rpb24gOiBhbnk7XG5cdGxpbmtTZWxlY3Rpb24gOiBhbnk7XG5cdGxpbmtMYWJlbFNlbGVjdGlvbiA6IGFueTtcblx0bGFiZWxTZWxlY3Rpb24gOiBhbnk7XG5cdHVwZGF0aW5nVmlzdWFsaXphdGlvbjogYm9vbGVhbjsgLy8gQWRkIHRoaXMgZmxhZ1xuXHRpc0N0cmxQcmVzc2VkID0gZmFsc2U7XG5cdGlzQWx0UHJlc3NlZCA9IGZhbHNlO1xuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0aXNDaGFuZ2luZ0Nvbm5lY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBzZWxlY3Rpb25Cb3g6IGFueTtcblx0dmFsaWRhdGVkTGlua3MgOiBhbnk7XG5cdG1heExhYmVsQ2hhcmFjdGVycyA9IDE4OyAvLyBBZGQgbWF4IGxhYmVsIGNoYXJhY3RlcnMgcHJvcGVydHlcblx0bGlua0xhYmVsU2l6ZSA9IDc7IC8vIEFkZCBsaW5rIGxhYmVsIHNpemUgcHJvcGVydHlcblx0bm9kZUxhYmVsU2l6ZSA9IDc7IC8vIEFkZCBub2RlIGxhYmVsIHNpemUgcHJvcGVydHlcblx0XG5cdC8vIHNlbGVjdGlvbiBib3ggb3JpZ2luIHBvaW50XG5cdHN0YXJ0WCA9IDA7XG5cdHN0YXJ0WSA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmKSB7XG4gICAgICAgIHN1cGVyKGxlYWYpO1xuXHRcdHRoaXMuY3VycmVudE5vdGVLZXkgPSAnJztcblx0XHR0aGlzLmlzSG92ZXJpbmcgPSBmYWxzZTsgXG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiTXkgSXRlbSBWaWV3XCI7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiTXkgSXRlbSBWaWV3XCI7XG4gICAgfVxuXG4gICAgZ2V0SWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJkaWNlXCI7XG4gICAgfVxuXG5cdC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSBub2RlIGFwcGVhcmFuY2UgYmFzZWQgb24gc2VsZWN0aW9uIGFuZCBoaWdobGlnaHQgc3RhdGVcblx0dXBkYXRlTm9kZUFwcGVhcmFuY2UoKSB7XG5cdFx0dGhpcy5ub2RlU2VsZWN0aW9uLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG5cdFx0XHQuYXR0cignZmlsbCcsIChkOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGQuaWQgPT09IHRoaXMuY2VudHJhbE5vZGUuaWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyM3Yzg1OTQnO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGQuaGlnaGxpZ2h0ZWQgJiYgIWQuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyNkNDZlYmUnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBkLmdyb3VwID09PSAnbm90ZScgPyAnIzdjODU5NCcgOiAnIzkyNmVjOSc7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuYXR0cignc3Ryb2tlJywgKGQ6IGFueSkgPT4gZC5zZWxlY3RlZCA/ICdibGFuY2hlZGFsbW9uZCcgOiAndHJhbnNwYXJlbnQnKVxuXHRcdFx0LmF0dHIoJ3N0cm9rZS13aWR0aCcsIChkOiBhbnkpID0+IHsgKGQuc2VsZWN0ZWQgJiYgIXRoaXMuaXNIb3ZlcmluZykgPyAxLjU6IDAuMyB9KVxuXHRcdFx0LmF0dHIoJ29wYWNpdHknLCAoZDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChkLmlkID09PSB0aGlzLmNlbnRyYWxOb2RlLmlkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZC5oaWdobGlnaHRlZCkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaXNIb3ZlcmluZykge1xuXHRcdFx0XHRcdHJldHVybiAwLjE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cdFxuICAgIC8vIEZ1bmN0aW9uIHRvIHRvZ2dsZSBub2RlIHNlbGVjdGlvblxuICAgIHRvZ2dsZU5vZGVTZWxlY3Rpb24obm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZVNlbGVjdGlvbi5kYXRhKCkuZmluZCgoZDogYW55KSA9PiBkLmlkID09PSBub2RlSWQpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9ICFub2RlLnNlbGVjdGVkO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cdCAvLyBDbGVhciBhbGwgc2VsZWN0aW9uc1xuXHQgY2xlYXJTZWxlY3Rpb25zKCkge1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uZWFjaCgoZDogYW55KSA9PiBkLnNlbGVjdGVkID0gZmFsc2UpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vZGVBcHBlYXJhbmNlKCk7XG4gICAgfVxuXG5cdGhpZ2hsaWdodE5vZGUobm9kZTogYW55KSB7XG5cdFx0dGhpcy5ub2RlU2VsZWN0aW9uLmVhY2goKGQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGQuaWQgIT09IHRoaXMuY2VudHJhbE5vZGUuaWQpIHtcblx0XHRcdFx0ZC5oaWdobGlnaHRlZCA9IChkLmlkID09PSBub2RlLmlkIHx8IHRoaXMudmFsaWRhdGVkTGlua3Muc29tZSgobGluazogYW55KSA9PlxuXHRcdFx0XHRcdChsaW5rLnNvdXJjZS5pZCA9PT0gbm9kZS5pZCAmJiBsaW5rLnRhcmdldC5pZCA9PT0gZC5pZCkgfHxcblx0XHRcdFx0XHQobGluay50YXJnZXQuaWQgPT09IG5vZGUuaWQgJiYgbGluay5zb3VyY2UuaWQgPT09IGQuaWQpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuXHRcblx0XHR0aGlzLmxpbmtTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMClcblx0XHRcdC5hdHRyKCdvcGFjaXR5JywgKGQ6IGFueSkgPT4gKGQuc291cmNlLmlkID09PSBub2RlLmlkIHx8IGQudGFyZ2V0LmlkID09PSBub2RlLmlkKSA/IDEgOiAwLjEpO1xuXHRcblx0XHR0aGlzLmxhYmVsU2VsZWN0aW9uLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG5cdFx0XHQuYXR0cignb3BhY2l0eScsIChkOiBhbnkpID0+XG5cdFx0XHRcdChkLmlkID09PSBub2RlLmlkIHx8IHRoaXMudmFsaWRhdGVkTGlua3Muc29tZSgobGluazogYW55KSA9PlxuXHRcdFx0XHRcdChsaW5rLnNvdXJjZS5pZCA9PT0gbm9kZS5pZCAmJiBsaW5rLnRhcmdldC5pZCA9PT0gZC5pZCkpKSA/IDEgOiAwLjEpXG5cdFx0XHQudGV4dCgoZDogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdkOiAnLCBkLmlkID09PSBub2RlLmlkKTtcblx0XHRcdFx0cmV0dXJuIGQuaWQgPT09IG5vZGUuaWQgPyB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSwgZmFsc2UpIDogdGhpcy5mb3JtYXRMYWJlbChkLm5hbWUsIHRydWUpO1xuXHRcdFx0fSk7IC8vIFNob3cgZnVsbCBsYWJlbCBvbmx5IGZvciB0aGUgaGlnaGxpZ2h0ZWQgbm9kZVx0XG5cdFxuXHRcdHRoaXMubGlua0xhYmVsU2VsZWN0aW9uLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG5cdFx0XHQuYXR0cignb3BhY2l0eScsIChkOiBhbnkpID0+IChkLnNvdXJjZS5pZCA9PT0gbm9kZS5pZCB8fCBkLnRhcmdldC5pZCA9PT0gbm9kZS5pZCkgPyAxIDogMCk7XG5cdH1cblx0XG5cdFxuXHRcblx0dW5oaWdobGlnaHROb2RlKCkge1xuXHRcdHRoaXMubm9kZVNlbGVjdGlvbi5lYWNoKChkOiBhbnkpID0+IHtcblx0XHRcdGlmIChkLmlkICE9PSB0aGlzLmNlbnRyYWxOb2RlLmlkKSB7XG4gICAgICAgICAgICBcdGQuaGlnaGxpZ2h0ZWQgPSBmYWxzZTtcbiAgICAgICAgXHR9XG5cdFx0fSk7XG5cdFx0dGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuXHRcblx0XHR0aGlzLmxpbmtTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuYXR0cignb3BhY2l0eScsIDEpO1xuXHRcdHRoaXMubGFiZWxTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuYXR0cignb3BhY2l0eScsIDEpXG4gICAgICAgIC50ZXh0KChkOiBhbnkpID0+IHRoaXMuZm9ybWF0TGFiZWwoZC5uYW1lLCB0cnVlKSk7IC8vIFJldmVydCB0byB0cnVuY2F0ZWQgbGFiZWxcblx0XHR0aGlzLmxpbmtMYWJlbFNlbGVjdGlvbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5hdHRyKCdvcGFjaXR5JywgMCk7XG5cdFx0XG5cdH1cblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdHJ1bmNhdGUgbGFiZWxzLCBleHRyYWN0IGZpbGVuYW1lcyBvciBwYXJ0cyBhZnRlciBoYXNodGFncywgYW5kIHJlbW92ZSBicmFja2V0c1xuXHRmb3JtYXRMYWJlbChwYXRoOiBzdHJpbmcsIHRydW5jYXRlOiBib29sZWFuID0gdHJ1ZSkge1xuXHRcdGNvbnNvbGUubG9nKCdmb3JtYXR0aW5nOiAnLCB0cnVuY2F0ZSk7XG5cdFx0aWYgKHRydW5jYXRlKSB7XG5cdFx0XHRpZiAocGF0aC5pbmNsdWRlcygnIycpKSB7XG5cdFx0XHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnIycpO1xuXHRcdFx0XHRwYXRoID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07IC8vIFRha2UgdGhlIGxhc3QgcGFydCBhZnRlciBzcGxpdHRpbmcgYnkgJyMnXG5cdFx0XHRcdGNvbnN0IGNsZWFuZWRQYXRoID0gcGF0aC5yZXBsYWNlKC9bXFxbXFxdXS9nLCAnJyk7IC8vIFJlbW92ZSBicmFja2V0c1xuXHRcdFx0XHRyZXR1cm4gY2xlYW5lZFBhdGgubGVuZ3RoID4gdGhpcy5tYXhMYWJlbENoYXJhY3RlcnMgPyBjbGVhbmVkUGF0aC5zbGljZSgwLCB0aGlzLm1heExhYmVsQ2hhcmFjdGVycykgKyAnLi4uJyA6IGNsZWFuZWRQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmlsZW5hbWUgPSBwYXRoLnNwbGl0KCcvJykucG9wKCk7XG5cdFx0XHRcdGlmIChmaWxlbmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IGNsZWFuZWRGaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoL1tcXFtcXF1dL2csICcnKTsgLy8gUmVtb3ZlIGJyYWNrZXRzXG5cdFx0XHRcdFx0cmV0dXJuIGNsZWFuZWRGaWxlbmFtZS5sZW5ndGggPiB0aGlzLm1heExhYmVsQ2hhcmFjdGVycyA/IGNsZWFuZWRGaWxlbmFtZS5zbGljZSgwLCB0aGlzLm1heExhYmVsQ2hhcmFjdGVycykgKyAnLi4uJyA6IGNsZWFuZWRGaWxlbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJyMnKTtcblx0XHRcdFx0cGF0aCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOyAvLyBUYWtlIHRoZSBsYXN0IHBhcnQgYWZ0ZXIgc3BsaXR0aW5nIGJ5ICcjJ1xuXHRcdFx0XHRjb25zdCBjbGVhbmVkUGF0aCA9IHBhdGgucmVwbGFjZSgvW1xcW1xcXV0vZywgJycpOyAvLyBSZW1vdmUgYnJhY1xuXHRcdFx0cmV0dXJuIGNsZWFuZWRQYXRoOyAvLyBSZW1vdmUgYnJhY2tldHMgd2l0aG91dCB0cnVuY2F0aW5nXG5cdFx0fVxuXHRcdHJldHVybiAnJztcblx0fTtcblx0XG5cdFxuXG5cdGFzeW5jIG9uT3BlbigpIHtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFxuXHRcdFx0Ly8gVG8gYmUgdXNlZCBmb3IgZnVuY3Rpb25zIHRoYXQgZG9udCBoYXZlIHRoaXMgaW4gdGhlIHNjb3BlXG5cdFx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cdFx0XG5cdFx0XHRjb25zdCBzbWFydE5vdGVzICA9IHdpbmRvdy5TbWFydFNlYXJjaC5tYWluLmVudi5zbWFydF9ub3Rlcy5pdGVtcztcblx0XHRcblx0XHRcdGlmIChPYmplY3Qua2V5cyhzbWFydE5vdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJObyBzbWFydCBub3RlcyBmb3VuZC5cIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcblx0XHRcdGNvbnNvbGUubG9nKCdTbWFydE5vdGVzOicsIHNtYXJ0Tm90ZXMpO1xuXHRcdFxuXHRcdFx0bGV0IG5vZGVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IGxpbmtzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbm5lY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XG5cdFx0XG5cdFx0XHRmdW5jdGlvbiB2YWxpZGF0ZUdyYXBoRGF0YShub2RlczogYW55W10sIGxpbmtzOiBhbnlbXSk6IGJvb2xlYW4ge1xuXHRcdFx0XHRjb25zdCBub2RlSWRzID0gbmV3IFNldChub2Rlcy5tYXAobm9kZSA9PiBub2RlLmlkKSk7XG5cdFx0XHRcdGxldCBpc1ZhbGlkID0gdHJ1ZTtcblx0XHRcblx0XHRcdFx0bGlua3MuZm9yRWFjaCgobGluaywgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRpZiAoIW5vZGVJZHMuaGFzKGxpbmsuc291cmNlKSkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgTGluayBhdCBpbmRleCAke2luZGV4fSBoYXMgYW4gaW52YWxpZCBzb3VyY2U6ICR7bGluay5zb3VyY2V9YCk7XG5cdFx0XHRcdFx0XHRpc1ZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghbm9kZUlkcy5oYXMobGluay50YXJnZXQpKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBMaW5rIGF0IGluZGV4ICR7aW5kZXh9IGhhcyBhbiBpbnZhbGlkIHRhcmdldDogJHtsaW5rLnRhcmdldH1gKTtcblx0XHRcdFx0XHRcdGlzVmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFxuXHRcdFx0XHRub2Rlcy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdGlmICghbm9kZS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSB8fCAhbm9kZS5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpIHx8ICFub2RlLmhhc093blByb3BlcnR5KCdncm91cCcpKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBOb2RlIGF0IGluZGV4ICR7aW5kZXh9IGlzIG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydGllczogJHtKU09OLnN0cmluZ2lmeShub2RlKX1gKTtcblx0XHRcdFx0XHRcdGlzVmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFxuXHRcdFx0XHRyZXR1cm4gaXNWYWxpZDtcblx0XHRcdH1cblx0XHRcblx0XHRcdGNvbnN0IHVwZGF0ZUNvbm5lY3Rpb25zID0gKCkgPT4ge1xuXG5cdFx0XHRcdC8vIFJlc2V0IFZhcmlhYmxlc1xuXHRcdFx0XHRub2RlcyA9IFtdO1xuXHRcdFx0XHRsaW5rcyA9IFtdO1xuXHRcdFx0XHRjb25uZWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR0aGlzLm1pblNjb3JlID0gMTtcblx0XHRcdFx0dGhpcy5tYXhTY29yZSA9IDA7XG5cdFx0XG5cdFx0XHRcdC8vIERvbnQgYm90aGVyIGV4ZWN1dGluZyBpZiB3ZSBkb24ndCBoYXZlIGEgbm90ZSB0byBmaW5kIGNvbm5lY3Rpb25zIGZvclxuXHRcdFx0XHRpZiAoIXRoaXMuY3VycmVudE5vdGVLZXkpIHJldHVybjtcblx0XHRcblx0XHRcdFx0dGhpcy5jZW50cmFsTm90ZSA9IHNtYXJ0Tm90ZXNbdGhpcy5jdXJyZW50Tm90ZUtleV07XG5cdFx0XHRcdGNvbnN0IG5vdGVDb25uZWN0aW9ucyA9IHRoaXMuY2VudHJhbE5vdGUuZmluZF9jb25uZWN0aW9ucygpLmZpbHRlcihcblx0XHRcdFx0XHQoY29ubmVjdGlvbjogYW55KSA9PiBjb25uZWN0aW9uLnNjb3JlID49IHRoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGQpOyBcblxuXHRcdFx0XHRjb25zb2xlLmxvZygnY2VudHJhbCBub3RlOiAnLCB0aGlzLmNlbnRyYWxOb3RlKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ25vdGUgY29ubmVjdGlvbnM6ICcsIHRoaXMuY2VudHJhbE5vdGUuZmluZF9jb25uZWN0aW9ucygpKTtcblxuXHRcdFx0XHQvLyBBZGQgdGhlIG5vdGUgbm9kZSBpdHNlbGZcblx0XHRcdFx0aWYgKHRoaXMuY2VudHJhbE5vdGUua2V5ICYmIHRoaXMuY2VudHJhbE5vdGUua2V5LnRyaW0oKSAhPT0gJycgJiYgIW5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSB0aGlzLmNlbnRyYWxOb3RlLmtleSkpIHtcblx0XHRcdFx0XHRub2Rlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiB0aGlzLmNlbnRyYWxOb3RlLmtleSxcblx0XHRcdFx0XHRcdG5hbWU6IHRoaXMuY2VudHJhbE5vdGUua2V5LFxuXHRcdFx0XHRcdFx0Z3JvdXA6ICdub3RlJyxcblx0XHRcdFx0XHRcdHg6IE1hdGgucmFuZG9tKCkgKiAxMDAwLFxuXHRcdFx0XHRcdFx0eTogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG5cdFx0XHRcdFx0XHRmeDogbnVsbCxcblx0XHRcdFx0XHRcdGZ5OiBudWxsLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IGZhbHNlLCAvLyBBZGQgc2VsZWN0ZWQgcHJvcGVydHlcblx0XHRcdFx0XHRcdGhpZ2hsaWdodGVkIDogZmFsc2VcblxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gQXNzaWduIGNlbnRyYWwgbm9kZSAtIDFzdCBlbGVtZW50IGluIHRoZSBhcnJheSBzbyBmYXJcblx0XHRcdFx0XHR0aGlzLmNlbnRyYWxOb2RlID0gbm9kZXNbMF07IFxuXG5cdFx0XHRcdH1cblx0XHRcblx0XHRcdFx0Ly8gRmlsdGVyIGNvbm5lY3Rpb25zIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjb25uZWN0aW9uIHR5cGVcblx0XHRcdFx0Y29uc3QgZmlsdGVyZWRDb25uZWN0aW9ucyA9IG5vdGVDb25uZWN0aW9ucy5maWx0ZXIoKGNvbm5lY3Rpb246IGFueSkgPT4gY29ubmVjdGlvbi5fX3Byb3RvX18uY29uc3RydWN0b3IubmFtZSA9PT0gKHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdibG9jaycgPyAnU21hcnRCbG9jaycgOiAnU21hcnROb3RlJykpO1x0XHRcblx0XHRcdFx0Ly8gQWRkaW5nIGNvbm5lY3Rpb25zIGZyb20gYmxvY2tDb25uZWN0aW9uc1xuXG5cdFx0XHRcdGZpbHRlcmVkQ29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubmVjdGlvbjogYW55LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5kYXRhICYmIGNvbm5lY3Rpb24uZGF0YS5rZXkgJiYgY29ubmVjdGlvbi5kYXRhLmtleS50cmltKCkgIT09ICcnKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb25uZWN0aW9uSWQgPSBjb25uZWN0aW9uLmRhdGEua2V5O1xuXHRcdFxuXHRcdFx0XHRcdFx0aWYgKCFub2Rlcy5zb21lKG5vZGUgPT4gbm9kZS5pZCA9PT0gY29ubmVjdGlvbklkKSkge1xuXHRcdFx0XHRcdFx0XHRub2Rlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRpZDogY29ubmVjdGlvbklkLFxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IGNvbm5lY3Rpb25JZCxcblx0XHRcdFx0XHRcdFx0XHRncm91cDogJ2Jsb2NrJyxcblx0XHRcdFx0XHRcdFx0XHR4OiBNYXRoLnJhbmRvbSgpICogMTAwMCxcblx0XHRcdFx0XHRcdFx0XHR5OiBNYXRoLnJhbmRvbSgpICogMTAwMCxcblx0XHRcdFx0XHRcdFx0XHRmeDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRmeTogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZDogZmFsc2UsIC8vIEFkZCBzZWxlY3RlZCBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHRcdGhpZ2hsaWdodGVkIDogZmFsc2Vcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XG5cdFx0XHRcdFx0XHRsaW5rcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c291cmNlOiB0aGlzLmNlbnRyYWxOb3RlLmtleSxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBjb25uZWN0aW9uSWQsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBjb25uZWN0aW9uLnNjb3JlIHx8IDAgIC8vIEVuc3VyZSBzY29yZSBpcyBkZWZpbmVkXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcblx0XHRcdFx0XHRcdGNvbm5lY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRzb3VyY2U6IHRoaXMuY2VudHJhbE5vdGUua2V5LFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IGNvbm5lY3Rpb25JZCxcblx0XHRcdFx0XHRcdFx0c2NvcmU6IGNvbm5lY3Rpb24uc2NvcmUgfHwgMCAgLy8gRW5zdXJlIHNjb3JlIGlzIGRlZmluZWRcblx0XHRcdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0XHRcdGlmKChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uc2NvcmUpID4gdGhpcy5tYXhTY29yZSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm1heFNjb3JlID0gY29ubmVjdGlvbi5zY29yZTtcblx0XHRcdFx0XHRcdH1cblx0XG5cdFx0XHRcdFx0XHRpZigoY29ubmVjdGlvbiAmJiBjb25uZWN0aW9uLnNjb3JlKSA8IHRoaXMubWluU2NvcmUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5taW5TY29yZSA9IGNvbm5lY3Rpb24uc2NvcmU7XG5cdFx0XHRcdFx0XHR9XG5cdFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFNraXBwaW5nIGludmFsaWQgY29ubmVjdGlvbiBhdCBpbmRleCAke2luZGV4fTpgLCBjb25uZWN0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFxuXHRcdFx0XHQvLyBUT0RPOjogUmVtb3ZlIGV2ZW50dWFsbHksIGJ1dCBrZWVwIGZvciBub3cganVzdCBpbiBjYXNlIHdlIHdhbnQgdGhpcyBmb3Igc29tZSByZWFzb25cblx0XHRcdFx0Ly8gQWRkaW5nIFNtYXJ0IEJsb2NrcyBmcm9tIHRoZSBub3RlIGl0c2VsZlxuXHRcdFx0XHQvLyBjb25zdCBzbWFydEJsb2NrcyA9IG5vdGUuYmxvY2tzO1xuXHRcdFx0XHQvLyBzbWFydEJsb2Nrcy5mb3JFYWNoKChibG9jazogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFx0aWYgKGJsb2NrLmtleSAmJiBibG9jay5rZXkudHJpbSgpICE9PSAnJyAmJiAhbm9kZXMuc29tZShub2RlID0+IG5vZGUuaWQgPT09IGJsb2NrLmtleSkpIHtcblx0XHRcdFx0Ly8gXHRcdG5vZGVzLnB1c2goe1xuXHRcdFx0XHQvLyBcdFx0XHRpZDogYmxvY2sua2V5LFxuXHRcdFx0XHQvLyBcdFx0XHRuYW1lOiBibG9jay5rZXksXG5cdFx0XHRcdC8vIFx0XHRcdGdyb3VwOiAnYmxvY2snLFxuXHRcdFx0XHQvLyBcdFx0XHR4OiBNYXRoLnJhbmRvbSgpICogMTAwMCxcblx0XHRcdFx0Ly8gXHRcdFx0eTogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG5cdFx0XHRcdC8vIFx0XHRcdGZ4OiBudWxsLFxuXHRcdFx0XHQvLyBcdFx0XHRmeTogbnVsbFxuXHRcdFx0XHQvLyBcdFx0fSk7XG5cdFx0XHRcdC8vIFx0fVxuXHRcdFxuXHRcdFx0XHQvLyBcdGxpbmtzLnB1c2goe1xuXHRcdFx0XHQvLyBcdFx0c291cmNlOiBub3RlLmtleSxcblx0XHRcdFx0Ly8gXHRcdHRhcmdldDogYmxvY2sua2V5LFxuXHRcdFx0XHQvLyBcdFx0dmFsdWU6IDAuOTUgIC8vIEVuc3VyZSBzY29yZSBpcyBkZWZpbmVkXG5cdFx0XHRcdC8vIFx0fSk7XG5cdFx0XG5cdFx0XHRcdC8vIFx0Y29ubmVjdGlvbnMucHVzaCh7XG5cdFx0XHRcdC8vIFx0XHRzb3VyY2U6IG5vdGUua2V5LFxuXHRcdFx0XHQvLyBcdFx0dGFyZ2V0OiBibG9jay5rZXksXG5cdFx0XHRcdC8vIFx0XHRzY29yZTogMC45NSAgLy8gRW5zdXJlIHNjb3JlIGlzIGRlZmluZWRcblx0XHRcdFx0Ly8gXHR9KTtcblx0XG5cdFx0XHRcdC8vIFx0aWYoKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5zY29yZSkgPiB0aGlzLm1heFNjb3JlKSB7XG5cdFx0XHRcdC8vIFx0XHR0aGlzLm1heFNjb3JlID0gY29ubmVjdGlvbi5zY29yZTtcblx0XHRcdFx0Ly8gXHR9XG5cdFxuXHRcdFx0XHQvLyB9KTtcblx0XHRcblx0XHRcdFx0Y29uc29sZS5sb2coJ05vZGVzIGFmdGVyIHVwZGF0ZUNvbm5lY3Rpb25zOicsIG5vZGVzKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ0xpbmtzIGFmdGVyIHVwZGF0ZUNvbm5lY3Rpb25zOicsIGxpbmtzKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ0Nvbm5lY3Rpb25zIGFmdGVyIHVwZGF0ZUNvbm5lY3Rpb25zOicsIGNvbm5lY3Rpb25zKTtcblx0XHRcblx0XHRcdFx0Y29uc3QgaXNWYWxpZCA9IHZhbGlkYXRlR3JhcGhEYXRhKG5vZGVzLCBsaW5rcyk7XG5cdFx0XHRcdGlmICghaXNWYWxpZCkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0dyYXBoIGRhdGEgdmFsaWRhdGlvbiBmYWlsZWQuJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ0dyYXBoIGRhdGEgdmFsaWRhdGlvbiBwYXNzZWQuJyk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XG5cdFx0XHQvLyBEZWZpbmUgdGhlIGRpbWVuc2lvbnMgZm9yIHRoZSBTVkdcblx0XHRcdGNvbnN0IHdpZHRoID0gdGhpcy5jb250ZW50RWwuY2xpZW50V2lkdGg7XG5cdFx0XHRjb25zdCBoZWlnaHQgPSB0aGlzLmNvbnRlbnRFbC5jbGllbnRIZWlnaHQ7XG5cdFx0XG5cdFx0XHRjb25zdCBzdmcgPSBkMy5zZWxlY3QodGhpcy5jb250ZW50RWwpXG5cdFx0XHRcdC5hcHBlbmQoJ3N2ZycpXG5cdFx0XHRcdC5hdHRyKCd3aWR0aCcsICcxMDAlJylcblx0XHRcdFx0LmF0dHIoJ2hlaWdodCcsICc5OCUnKVxuXHRcdFx0XHQuYXR0cigndmlld0JveCcsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YClcblx0XHRcdFx0LmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpXG5cdFx0XHRcdC5jYWxsKGQzLnpvb20oKVxuXHRcdFx0XHRcdC5zY2FsZUV4dGVudChbMC4xLCAxMF0pXG5cdFx0XHRcdFx0Lm9uKCd6b29tJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRzdmdHcm91cC5hdHRyKCd0cmFuc2Zvcm0nLCBldmVudC50cmFuc2Zvcm0pO1xuXHRcdFx0XHRcdFx0dXBkYXRlTGFiZWxPcGFjaXR5KGV2ZW50LnRyYW5zZm9ybS5rKTtcblx0XHRcdFx0XHR9KSk7XG5cdFx0XHRcdFxuXHRcdFx0Y29uc3Qgc3ZnR3JvdXAgPSBzdmcuYXBwZW5kKCdnJyk7XG5cdFx0XHRcblx0XHRcdGNvbnN0IHN0YXJ0Qm94U2VsZWN0aW9uID0gKGV2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmlzQ3RybFByZXNzZWQpIHJldHVybjtcblx0XHRcdFxuXHRcdFx0XHR0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuXHRcdFx0XHRjb25zdCBbeCwgeV0gPSBkMy5wb2ludGVyKGV2ZW50KTtcblx0XHRcdFxuXHRcdFx0XHRjb25zdCB0cmFuc2Zvcm0gPSBkMy56b29tVHJhbnNmb3JtKHN2Zy5ub2RlKCkgYXMgRWxlbWVudCk7XG5cdFx0XHRcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25Cb3ggPSBzdmcuYXBwZW5kKCdyZWN0Jylcblx0XHRcdFx0XHQuYXR0cignY2xhc3MnLCAnc2VsZWN0aW9uLWJveCcpXG5cdFx0XHRcdFx0LmF0dHIoJ3gnLCB4KVxuXHRcdFx0XHRcdC5hdHRyKCd5JywgeSlcblx0XHRcdFx0XHQuYXR0cignd2lkdGgnLCAwKVxuXHRcdFx0XHRcdC5hdHRyKCdoZWlnaHQnLCAwKVxuXHRcdFx0XHRcdC5hdHRyKCdzdHJva2UnLCAnIzAwZicpXG5cdFx0XHRcdFx0LmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEpXG5cdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCAncmdiYSgwLCAwLCAyNTUsIDAuMyknKTsgLy8gU2VtaS10cmFuc3BhcmVudCBmaWxsXG5cdFx0XHRcblx0XHRcdFx0Ly8gU3RvcmUgdGhlIGluaXRpYWwgY2xpY2sgcG9pbnQgYWRqdXN0ZWQgYnkgem9vbSBhbmQgcGFuXG5cdFx0XHRcdHRoaXMuc3RhcnRYID0geDtcblx0XHRcdFx0dGhpcy5zdGFydFkgPSB5O1xuXHRcdFx0fTtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdXBkYXRlQm94U2VsZWN0aW9uID0gKGV2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblx0XHRcdFxuXHRcdFx0XHRjb25zdCBbeCwgeV0gPSBkMy5wb2ludGVyKGV2ZW50KTtcblx0XHRcdFxuXHRcdFx0XHRjb25zdCB0cmFuc2Zvcm0gPSBkMy56b29tVHJhbnNmb3JtKHN2Zy5ub2RlKCkgYXMgRWxlbWVudCk7XG5cdFx0XHRcblx0XHRcdFx0Y29uc3QgbmV3V2lkdGggPSB4IC0gdGhpcy5zdGFydFg7XG5cdFx0XHRcdGNvbnN0IG5ld0hlaWdodCA9IHkgLSB0aGlzLnN0YXJ0WTtcblx0XHRcdFxuXHRcdFx0XHR0aGlzLnNlbGVjdGlvbkJveFxuXHRcdFx0XHRcdC5hdHRyKCd3aWR0aCcsIE1hdGguYWJzKG5ld1dpZHRoKSlcblx0XHRcdFx0XHQuYXR0cignaGVpZ2h0JywgTWF0aC5hYnMobmV3SGVpZ2h0KSlcblx0XHRcdFx0XHQuYXR0cigneCcsIE1hdGgubWluKHgsIHRoaXMuc3RhcnRYKSlcblx0XHRcdFx0XHQuYXR0cigneScsIE1hdGgubWluKHksIHRoaXMuc3RhcnRZKSk7XG5cdFx0XHRcblx0XHRcdFx0Y29uc3QgZW5kWCA9IHRoaXMuc3RhcnRYICsgbmV3V2lkdGg7XG5cdFx0XHRcdGNvbnN0IGVuZFkgPSB0aGlzLnN0YXJ0WSArIG5ld0hlaWdodDtcblx0XHRcdFxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNvb3JkaW5hdGVzIGFjY291bnQgZm9yIGRyYWcgZGlyZWN0aW9uXG5cdFx0XHRcdGNvbnN0IHRyYW5zZm9ybWVkU3RhcnRYID0gTWF0aC5taW4odGhpcy5zdGFydFgsIGVuZFgpO1xuXHRcdFx0XHRjb25zdCB0cmFuc2Zvcm1lZFN0YXJ0WSA9IE1hdGgubWluKHRoaXMuc3RhcnRZLCBlbmRZKTtcblx0XHRcdFx0Y29uc3QgdHJhbnNmb3JtZWRFbmRYID0gTWF0aC5tYXgodGhpcy5zdGFydFgsIGVuZFgpO1xuXHRcdFx0XHRjb25zdCB0cmFuc2Zvcm1lZEVuZFkgPSBNYXRoLm1heCh0aGlzLnN0YXJ0WSwgZW5kWSk7XG5cdFx0XHRcblx0XHRcdFx0Ly8gQWRqdXN0IHRoZSBjb29yZGluYXRlcyBmb3Igem9vbSBhbmQgcGFuXG5cdFx0XHRcdGNvbnN0IHpvb21lZFN0YXJ0WCA9ICh0cmFuc2Zvcm1lZFN0YXJ0WCAtIHRyYW5zZm9ybS54KSAvIHRyYW5zZm9ybS5rO1xuXHRcdFx0XHRjb25zdCB6b29tZWRTdGFydFkgPSAodHJhbnNmb3JtZWRTdGFydFkgLSB0cmFuc2Zvcm0ueSkgLyB0cmFuc2Zvcm0uaztcblx0XHRcdFx0Y29uc3Qgem9vbWVkRW5kWCA9ICh0cmFuc2Zvcm1lZEVuZFggLSB0cmFuc2Zvcm0ueCkgLyB0cmFuc2Zvcm0uaztcblx0XHRcdFx0Y29uc3Qgem9vbWVkRW5kWSA9ICh0cmFuc2Zvcm1lZEVuZFkgLSB0cmFuc2Zvcm0ueSkgLyB0cmFuc2Zvcm0uaztcblx0XHRcdFxuXHRcdFx0XHR0aGlzLm5vZGVTZWxlY3Rpb24uZWFjaCgoZDogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgbm9kZVggPSBkLng7XG5cdFx0XHRcdFx0Y29uc3Qgbm9kZVkgPSBkLnk7XG5cdFx0XHRcdFx0aWYgKG5vZGVYID49IHpvb21lZFN0YXJ0WCAmJiBub2RlWCA8PSB6b29tZWRFbmRYICYmIG5vZGVZID49IHpvb21lZFN0YXJ0WSAmJiBub2RlWSA8PSB6b29tZWRFbmRZKSB7XG5cdFx0XHRcdFx0XHRkLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZC5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcblx0XHRcdFx0dGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuXHRcdFx0fTtcblx0XHRcdFxuXHRcdFx0Y29uc3QgZW5kQm94U2VsZWN0aW9uID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuaXNEcmFnZ2luZykgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0XHRcdFxuXHRcdFx0XHR0aGlzLnNlbGVjdGlvbkJveC5yZW1vdmUoKTtcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdFxuXHRcdFx0Ly8gQXR0YWNoIG1vdXNlIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgU1ZHXG5cdFx0XHRzdmcub24oJ21vdXNlZG93bicsIChldmVudDogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghZXZlbnQuY3RybEtleSkge1xuXHRcdFx0XHRcdHRoaXMuY2xlYXJTZWxlY3Rpb25zKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RhcnRCb3hTZWxlY3Rpb24oZXZlbnQpO1xuXHRcdFx0fSkub24oJ21vdXNlbW92ZScsIHVwZGF0ZUJveFNlbGVjdGlvbilcblx0XHRcdC5vbignbW91c2V1cCcsIGVuZEJveFNlbGVjdGlvbilcblx0XHRcdC5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHR0aGF0LmNsZWFyU2VsZWN0aW9ucygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdFx0XHRcblxuXHRcdFx0Ly8gTGlzdGVuIGZvciBBbHQvT3B0aW9uIGtleSBwcmVzcyBmb3IgaW5kaXZpZHVhbCBub2RlIHNlbGVjdGlvblxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQWx0JyB8fCBldmVudC5rZXkgPT09ICdBbHRHcmFwaCcpIHtcblx0XHRcdFx0XHR0aGlzLmlzQWx0UHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQWx0JyB8fCBldmVudC5rZXkgPT09ICdBbHRHcmFwaCcpIHtcblx0XHRcdFx0XHR0aGlzLmlzQWx0UHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXG5cdFx0XHQvLyBMaXN0ZW4gZm9yIGNvbnRyb2wga2V5IHByZXNzXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5rZXkgPT09ICdDb250cm9sJykge1xuXHRcdFx0XHRcdHRoaXMuaXNDdHJsUHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0c3ZnLnN0eWxlKCdjdXJzb3InLCAnY3Jvc3NoYWlyJyk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5rZXkgPT09ICdDb250cm9sJykge1xuXHRcdFx0XHRcdHRoaXMuaXNDdHJsUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdHN2Zy5zdHlsZSgnY3Vyc29yJywgJ2RlZmF1bHQnKTtcblxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdFxuXHRcblx0XHRcdGNvbnN0IHVwZGF0ZUxhYmVsT3BhY2l0eSA9ICh6b29tTGV2ZWw6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBtYXhPcGFjaXR5ID0gMTsgLy8gTWF4aW11bSBvcGFjaXR5XG5cdFx0XHRcdGNvbnN0IG1pbk9wYWNpdHkgPSAwOyAvLyBNaW5pbXVtIG9wYWNpdHlcblx0XHRcdFx0Y29uc3QgbWluWm9vbSA9IDAuMTsgLy8gTWluaW11bSB6b29tIGxldmVsIHdoZXJlIG9wYWNpdHkgaXMgMFxuXHRcdFx0XHRjb25zdCBtYXhab29tID0gdGhpcy50ZXh0RmFkZVRocmVzaG9sZDsgLy8gVXNlIHRoZSB0ZXh0IGZhZGUgdGhyZXNob2xkIHZhbHVlXG5cdFx0XHRcblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBuZXcgb3BhY2l0eSBiYXNlZCBvbiB0aGUgem9vbSBsZXZlbFxuXHRcdFx0XHRsZXQgbmV3T3BhY2l0eSA9ICh6b29tTGV2ZWwgLSBtaW5ab29tKSAvIChtYXhab29tIC0gbWluWm9vbSk7XG5cdFxuXHRcdFx0XHQgIC8vIEVuc3VyZSBsYWJlbHMgYmVjb21lIGludmlzaWJsZSBhdCBsb3dlciB6b29tIGxldmVsc1xuXHRcdFx0XHRpZiAoem9vbUxldmVsIDw9IG1pblpvb20pIHtcblx0XHRcdFx0XHRuZXdPcGFjaXR5ID0gbWluT3BhY2l0eTtcblx0XHRcdFx0fSBlbHNlIGlmICh6b29tTGV2ZWwgPj0gbWF4Wm9vbSkge1xuXHRcdFx0XHRcdG5ld09wYWNpdHkgPSBtYXhPcGFjaXR5O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgbmV3IG9wYWNpdHkgYmFzZWQgb24gdGhlIHpvb20gbGV2ZWxcblx0XHRcdFx0XHRuZXdPcGFjaXR5ID0gKHpvb21MZXZlbCAtIG1pblpvb20pIC8gKG1heFpvb20gLSBtaW5ab29tKTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gQ2xhbXAgdGhlIG9wYWNpdHkgYmV0d2VlbiAwIGFuZCAxXG5cdFx0XHRcdG5ld09wYWNpdHkgPSBNYXRoLm1heChtaW5PcGFjaXR5LCBNYXRoLm1pbihtYXhPcGFjaXR5LCBuZXdPcGFjaXR5KSk7XG5cdFxuXHRcdFx0XHQvLyBEZWJ1ZyBzdGF0ZW1lbnRzXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKGBab29tIExldmVsOiAke3pvb21MZXZlbH0sIE5ldyBPcGFjaXR5OiAke25ld09wYWNpdHl9LCBGYWRlIFRocmVzaG9sZDogJHt0aGlzLnRleHRGYWRlVGhyZXNob2xkfWApO1xuXHRcblx0XHRcdFxuXHRcdFx0XHRzdmdHcm91cC5zZWxlY3RBbGwoJy5sYWJlbCcpXG5cdFx0XHRcdFx0LnRyYW5zaXRpb24oKVxuXHRcdFx0XHRcdC5kdXJhdGlvbigzMDApXG5cdFx0XHRcdFx0LmF0dHIoJ29wYWNpdHknLCBuZXdPcGFjaXR5KTtcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdC8vIEZ1bmN0aW9uIHRvIG5vcm1hbGl6ZSByZWxldmFuY2Ugc2NvcmUgYW5kIGludmVyc2UgaXQgdG8gaGF2ZSBsaW5rcyB3aXRoIGhpZ2hlciBzY29yZXMgY2xvc2VyIHRvIHRoZSBjZW50cmFsIG5vZGVcblx0XHRcdGZ1bmN0aW9uIGludmVyc2VOb3JtYWxpemUodmFsdWUgOiBudW1iZXIpIHtcblx0XHRcdFx0cmV0dXJuIDEgLSAoKHZhbHVlIC0gdGhhdC5taW5TY29yZSkgLyAodGhhdC5tYXhTY29yZSAtIHRoYXQubWluU2NvcmUpKTtcblx0XHRcdH1cdFx0XG5cdFxuXHRcdFx0Y29uc3Qgc2ltdWxhdGlvbiA9IGQzLmZvcmNlU2ltdWxhdGlvbigpXG5cdFx0XHQuZm9yY2UoJ2NlbnRlcicsIG51bGwpIC8vIFJlbW92ZSB0aGUgZGVmYXVsdCBjZW50ZXIgZm9yY2Vcblx0XHRcdC5mb3JjZSgnY2hhcmdlJywgZDMuZm9yY2VNYW55Qm9keSgpLnN0cmVuZ3RoKC1ERUZBVUxUX05FVFdPUktfU0VUVElOR1MucmVwZWxGb3JjZSkpIC8vIE5vdGUgdGhlIG5lZ2F0aXZlIHZhbHVlIGZvciByZXB1bHNpb25cblx0XHRcdC5mb3JjZSgnbGluaycsIGQzLmZvcmNlTGluaygpLmlkKChkOiBhbnkpID0+IGQuaWQpLmRpc3RhbmNlKChkOiBhbnkpID0+IDUwICsgKGludmVyc2VOb3JtYWxpemUoZC5zY29yZSkgKiAxMDApKS5zdHJlbmd0aCgxKSlcblx0XHRcdC5mb3JjZSgnY29sbGlkZScsIGQzLmZvcmNlQ29sbGlkZSgpLnJhZGl1cyhERUZBVUxUX05FVFdPUktfU0VUVElOR1Mubm9kZVNpemUgKyAzKS5zdHJlbmd0aCgwLjcpKSAvLyBBZGp1c3QgcmFkaXVzIGJhc2VkIG9uIG5vZGUgc2l6ZVxuXHRcdFxuXHRcdFx0dXBkYXRlQ29ubmVjdGlvbnMoKTtcblx0XHRcblx0XHRcdGxldCBsaW5rID0gc3ZnR3JvdXAuYXBwZW5kKCdnJylcblx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ2xpbmtzJylcblx0XHRcdFx0LnNlbGVjdEFsbCgnbGluZScpXG5cdFx0XHRcdC5kYXRhKGxpbmtzKVxuXHRcdFx0XHQuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKVxuXHRcdFx0XHQuYXR0cignc3Ryb2tlJywgJ2JsdWUnKVxuXHRcdFx0XHQuYXR0cignc3Ryb2tlLXdpZHRoJywgMilcblx0XHRcdFx0LmF0dHIoJ3N0cm9rZS1vcGFjaXR5JywgMSk7XG5cdFx0XG5cdFx0XHRsZXQgbm9kZSA9IHN2Z0dyb3VwLmFwcGVuZCgnZycpXG5cdFx0XHRcdC5hdHRyKCdjbGFzcycsICdub2RlcycpXG5cdFx0XHRcdC5zZWxlY3RBbGwoJ2NpcmNsZScpXG5cdFx0XHRcdC5kYXRhKG5vZGVzKVxuXHRcdFx0XHQuZW50ZXIoKS5hcHBlbmQoJ2NpcmNsZScpXG5cdFx0XHRcdC5hdHRyKCdyJywgMjApXG5cdFx0XHRcdC5hdHRyKCdmaWxsJywgJ2JsdWUnKVxuXHRcdFx0XHQuY2FsbChkMy5kcmFnKClcblx0XHRcdFx0XHQub24oJ3N0YXJ0JywgKGV2ZW50LCBkOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGlmICghZXZlbnQuYWN0aXZlKSBzaW11bGF0aW9uLmFscGhhVGFyZ2V0KDAuMykucmVzdGFydCgpO1xuXHRcdFx0XHRcdFx0ZC5meCA9IGQueDtcblx0XHRcdFx0XHRcdGQuZnkgPSBkLnk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ2RyYWcnLCAoZXZlbnQsIGQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0ZC5meCA9IGV2ZW50Lng7XG5cdFx0XHRcdFx0XHRkLmZ5ID0gZXZlbnQueTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5vbignZW5kJywgKGV2ZW50LCBkOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGlmICghZXZlbnQuYWN0aXZlKSBzaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuXHRcdFx0XHRcdH0pKTtcblx0XHRcblx0XHRcdGxldCBub2RlTGFiZWxzID0gc3ZnR3JvdXAuYXBwZW5kKCdnJylcblx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ2xhYmVscycpXG5cdFx0XHRcdC5zZWxlY3RBbGwoJ3RleHQnKVxuXHRcdFx0XHQuZGF0YShub2Rlcylcblx0XHRcdFx0LmVudGVyKCkuYXBwZW5kKCd0ZXh0Jylcblx0XHRcdFx0LmF0dHIoJ2R4JywgMTIpXG5cdFx0XHRcdC5hdHRyKCdkeScsICcuMzVlbScpXG5cdFx0XHRcdC50ZXh0KChkOiBhbnkpID0+IGQubmFtZSk7XG5cdFx0XG5cdFx0XHRjb25zdCB0b29sdGlwID0gZDMuc2VsZWN0KHRoaXMuY29udGVudEVsKVxuXHRcdFx0XHQuYXBwZW5kKCdkaXYnKVxuXHRcdFx0XHQuYXR0cignY2xhc3MnLCAndG9vbHRpcCcpXG5cdFx0XHRcdC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxuXHRcdFx0XHQuc3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJylcblx0XHRcdFx0LnN0eWxlKCdiYWNrZ3JvdW5kJywgJyMzMzMnKSAvLyBVcGRhdGVkIGJhY2tncm91bmQgY29sb3Jcblx0XHRcdFx0LnN0eWxlKCdjb2xvcicsICcjZmZmJykgLy8gVXBkYXRlZCB0ZXh0IGNvbG9yXG5cdFx0XHRcdC5zdHlsZSgncGFkZGluZycsICc1cHgnKVxuXHRcdFx0XHQuc3R5bGUoJ2JvcmRlcicsICcxcHggc29saWQgIzQ0NCcpIC8vIFVwZGF0ZWQgYm9yZGVyIGNvbG9yXG5cdFx0XHRcdC5zdHlsZSgnYm9yZGVyLXJhZGl1cycsICc1cHgnKTtcblx0XG5cdFx0XHQvLyBUT0RPOjogVW5jb21tZW50IGJhY2sgaW4gd2hlbiB3YW50IHRvIHN0YXJ0IG9uIHRvb2x0b3AgZnVuYyBmb3IgbGlua1xuXHRcdFx0Ly8gQWRkIHRvb2x0aXAgZXZlbnQgbGlzdGVuZXJzIHRvIGxpbmtzXG5cdFx0XHQvLyBsaW5rLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihldmVudCwgZCkge1xuXG5cdFx0XHQvLyBcdHRvb2x0aXAudGV4dChgcmVsZXZhbmNlOiAke2Quc2NvcmV0b0ZpeGVkKDMpfWApXG5cdFx0XHQvLyAuc3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHRcblx0XHRcdC8vIH0pLm9uKCdtb3VzZW1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXG5cdFx0XHQvLyBcdGNvbnN0IFt4LCB5XSA9IGQzLnBvaW50ZXIoZXZlbnQpO1xuXHRcdFx0Ly8gXHR0b29sdGlwLnN0eWxlKCd0b3AnLCBgJHt5ICsgMTB9cHhgKVxuXHRcdFx0Ly8gXHRcdC5zdHlsZSgnbGVmdCcsIGAke3ggKyAxMH1weGApO1xuXG5cdFx0XHQvLyB9KS5vbignbW91c2VvdXQnLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gXHR0b29sdGlwLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXG5cdFx0XHQvLyB9KTtcblx0XHRcdFxuXHRcdFx0Ly8gVE9ETzo6IFVuY29tbWVudCBiYWNrIGluIHdoZW4gd2FudCB0byBzdGFydCBvbiB0b29sdG9wIGZ1bmMgZm9yIG5vZGVcblx0XHRcdC8vIG5vZGUub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKGV2ZW50LCBkOiBhbnkpIHtcblx0XHRcdC8vIFx0dG9vbHRpcC50ZXh0KGQubmFtZSlcblx0XHRcdC8vIFx0XHQuc3R5bGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0Ly8gfSkub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHQvLyBcdGNvbnN0IFt4LCB5XSA9IGQzLnBvaW50ZXIoZXZlbnQpO1xuXHRcdFx0Ly8gXHR0b29sdGlwLnN0eWxlKCd0b3AnLCBgJHt5ICsgMTB9cHhgKVxuXHRcdFx0Ly8gXHRcdC5zdHlsZSgnbGVmdCcsIGAke3ggKyAxMH1weGApO1xuXHRcdFx0Ly8gfSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBcdHRvb2x0aXAuc3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHQvLyB9KTtcblx0XG5cdFx0XHQvLyBGdW5jaXRpb24gdG8gY2VudGVyIHRoZSBuZXR3b3JrIG9uIHVwZGF0ZVxuXHRcdFx0Y29uc3QgY2VudGVyTmV0d29yayA9ICgpID0+IHtcblx0XHRcdFx0c2ltdWxhdGlvblxuXHRcdFx0XHRcdC5mb3JjZSgnY2VudGVyJywgZDMuZm9yY2VDZW50ZXIod2lkdGggLyAyLCBoZWlnaHQgLyAyKSlcblx0XHRcdFx0XHQuYWxwaGEoMC4zKVxuXHRcdFx0XHRcdC5yZXN0YXJ0KCk7XG5cdFx0XHR9O1xuXHRcblx0XHRcdFxuXG5cdFx0XHQvLyBGdW5jdGlvbiB0byByZXJlbmRlciB2aXN1YWxpemF0aW9uIHdpdGggbW9zdCB1cCB0byBkYXRlIHNldHRpbmdzXG5cdFx0XHRjb25zdCB1cGRhdGVWaXN1YWxpemF0aW9uID0gKG5ld1Njb3JlVGhyZXNob2xkPzogbnVtYmVyKSA9PiB7XG5cblx0XHRcdFx0Ly8gV2UgZG9udCB3YW50IHJhcGlkIGNhbGxzIGlmIGl0cyBhbHJlYWR5IHVwZGF0aW5nIHVubGVzcyB3ZSBhcmUgY2hhbmdpbmcgdGhlIG5ldHdvcmsgdmlhIGNvbm5lY3Rpb24gdHlwZVxuXHRcdFx0XHRpZiAodGhpcy51cGRhdGluZ1Zpc3VhbGl6YXRpb24gJiYgIXRoaXMuaXNDaGFuZ2luZ0Nvbm5lY3Rpb25UeXBlKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ1VwZGF0ZSBhbHJlYWR5IGluIHByb2dyZXNzLiBTa2lwcGluZy4uLicpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdVcGRhdGUgbm90IGluIHByb2dyZXNzIC4gU2tpcHBpbmcuLi4nKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5pc0NoYW5naW5nQ29ubmVjdGlvblR5cGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAobmV3U2NvcmVUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGQgPSBuZXdTY29yZVRocmVzaG9sZDtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0dXBkYXRlQ29ubmVjdGlvbnMoKTtcblx0XHRcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ0Nvbm5lY3Rpb25zIGJlZm9yZSBmaWx0ZXJpbmc6JywgY29ubmVjdGlvbnMpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZENvbm5lY3Rpb25zID0gY29ubmVjdGlvbnMuZmlsdGVyKChjb25uZWN0aW9uOiBhbnkpID0+IGNvbm5lY3Rpb24uc2NvcmUgPj0gdGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZCk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdGaWx0ZXJlZCBDb25uZWN0aW9uczonLCBmaWx0ZXJlZENvbm5lY3Rpb25zKTtcblx0XHRcblx0XHRcdFx0bGV0IHZpc2libGVOb2RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdFx0XHRmaWx0ZXJlZENvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcblx0XHRcdFx0XHR2aXNpYmxlTm9kZXMuYWRkKGNvbm5lY3Rpb24uc291cmNlKTtcblx0XHRcdFx0XHR2aXNpYmxlTm9kZXMuYWRkKGNvbm5lY3Rpb24udGFyZ2V0KTtcblx0XHRcdFx0fSk7XG5cdFx0XG5cdFx0XHRcdGNvbnN0IG5vZGVzRGF0YSA9IEFycmF5LmZyb20odmlzaWJsZU5vZGVzKS5tYXAoaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG5vZGUgPSBub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpO1xuXHRcdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhgTm9kZSBkYXRhIGZvciBpZCAke2lkfTpgLCBub2RlKTtcblx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYE5vZGUgZGF0YSBtaXNzaW5nIGZvciBpZCAke2lkfWApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5maWx0ZXIoQm9vbGVhbik7XG5cdFx0XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdWaXNpYmxlIE5vZGVzOicsIG5vZGVzRGF0YSk7XG5cdFx0XG5cdFx0XHRcdHRoaXMudmFsaWRhdGVkTGlua3MgPSBmaWx0ZXJlZENvbm5lY3Rpb25zLmZpbHRlcigobGluaykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNvdXJjZU5vZGUgPSBub2Rlc0RhdGEuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGxpbmsuc291cmNlKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXROb2RlID0gbm9kZXNEYXRhLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBsaW5rLnRhcmdldCk7XG5cdFx0XG5cdFx0XHRcdFx0aWYgKCFzb3VyY2VOb2RlIHx8ICF0YXJnZXROb2RlKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBJbnZhbGlkIGxpbmsgZm91bmQ6ICR7bGluay5zb3VyY2V9IC0+ICR7bGluay50YXJnZXR9YCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcblx0XHRcdFx0Y29uc29sZS5sb2coJ1ZhbGlkYXRlZCBMaW5rczonLCB0aGlzLnZhbGlkYXRlZExpbmtzKTtcblx0XG5cdFx0XHRcdC8vIFNhZmVndWFyZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Bcblx0XHRcdFx0aWYgKG5vZGVzRGF0YS5sZW5ndGggPT09IDAgfHwgdGhpcy52YWxpZGF0ZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ05vIG5vZGVzIG9yIGxpbmtzIHRvIGRpc3BsYXkgYWZ0ZXIgZmlsdGVyaW5nLiBBYm9ydGluZyB1cGRhdGUuJyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XHRcdFxuXHRcdFx0XHRcblx0XHRcdFx0Ly9UT0RPOjogRm9yIG5vdywgc2VwYXJhdGUgY2VudHJhbCBub2RlIGFuZCBvdGhlciBub2RlIHNpemVzIHVudGlsIHdlIGRvIGEgbm9kZSBzaXplIGJ5IGZlYXR1cmVcblx0XHRcdFx0Y29uc3QgbWFpbk5vZGVTaXplID0gdGhpcy5tYXhOb2RlU2l6ZTtcblx0XHRcdFx0Y29uc3Qgb3RoZXJOb2RlU2l6ZSA9IHRoaXMubWluTm9kZVNpemU7XG5cdFxuXHRcdFx0XHQvLyBNb3ZlIGZvcmNlcyB0b3dhcmRzIGNlbnRyYWwgbm9kZVxuXHRcdFx0XHRpZiAodGhpcy5jZW50cmFsTm9kZSkge1xuXHRcdFx0XHRcdHRoaXMuY2VudHJhbE5vZGUuZnggPSB3aWR0aCAvIDI7XG5cdFx0XHRcdFx0dGhpcy5jZW50cmFsTm9kZS5meSA9IGhlaWdodCAvIDI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBFbnN1cmUgbGFzdGluZyBqaXR0ZXJpbmcgb2YgdGhlIG5vZGVzIGRvZXNuJ3QgaGFwcGVuLCBzbyBzdG9wIGFmdGVyIDIgc2Vjb25kc1xuXHRcdFx0XHRjb25zdCB1cGRhdGVGb3JjZXMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYSgwLjMpLnJlc3RhcnQoKTsgLy8gUmVzdGFydCB0aGUgc2ltdWxhdGlvbiB3aXRoIGluaXRpYWwgYWxwaGFcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRpbmdWaXN1YWxpemF0aW9uID0gZmFsc2U7IC8vIFJlc2V0IHRoZSBmbGFnIGFmdGVyIHN0b3BwaW5nIHNpbXVsYXRpb25cblx0XHRcdFx0XHRcdHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMCkuc3RvcCgpOyAvLyBTdG9wIHRoZSBzaW11bGF0aW9uIGFmdGVyIDIgc2Vjb25kc1xuXHRcdFx0XHRcdH0sIDIwMDApOyBcblx0XHRcdFx0fTtcblx0XHRcblx0XHRcdFx0dGhpcy5ub2RlU2VsZWN0aW9uID0gc3ZnR3JvdXAuc2VsZWN0KCdnLm5vZGVzJykuc2VsZWN0QWxsKCdjaXJjbGUnKVxuXHRcdFx0XHRcdC5kYXRhKG5vZGVzRGF0YSwgKGQ6IGFueSkgPT4gZC5pZClcblx0XHRcdFx0XHQuam9pbihcblx0XHRcdFx0XHRcdGVudGVyID0+IGVudGVyLmFwcGVuZCgnY2lyY2xlJylcblx0XHRcdFx0XHRcdC5hdHRyKCdjbGFzcycsICdub2RlJylcblx0XHRcdFx0XHRcdC5hdHRyKCdyJywgZCA9PiBkLmlkID09PSB0aGlzLmNlbnRyYWxOb2RlLmlkID8gdGhpcy5ub2RlU2l6ZSArIDIgOiB0aGlzLm5vZGVTaXplKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCBkID0+IChkLmdyb3VwID09PSAnbm90ZScgPyAnIzdjODU5NCcgOiAnIzkyNmVjOScpKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ3N0cm9rZScsIGQgPT4geyByZXR1cm4gZC5zZWxlY3RlZCA/ICdibGFuY2hlZGFsbW9uZCcgOiAndHJhbnNwYXJlbnQnfSlcblx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utd2lkdGgnLCBkID0+IGQuc2VsZWN0ZWQgPyAxLjUgOiAwLjMpXG5cdFx0XHRcdFx0XHQuYXR0cignb3BhY2l0eScsIDEpXG5cdFx0XHRcdFx0XHQuYXR0cignY3Vyc29yJywgJ2dyYWInKVxuXHRcdFx0XHRcdFx0LmNhbGwoZDMuZHJhZygpXG5cdFx0XHRcdFx0XHRcdC5vbignc3RhcnQnLCBmdW5jdGlvbihldmVudCwgZDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFldmVudC5hY3RpdmUpIHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3RvcmUgaW5pdGlhbCBwb3NpdGlvbnMgb2Ygc2VsZWN0ZWQgbm9kZXNcblx0XHRcdFx0XHRcdFx0XHRkLmluaXRpYWxYID0gZC54O1xuXHRcdFx0XHRcdFx0XHRcdGQuaW5pdGlhbFkgPSBkLnk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGQuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoYXQubm9kZVNlbGVjdGlvbi5lYWNoKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5vZGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLmluaXRpYWxYID0gbm9kZS54O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuaW5pdGlhbFkgPSBub2RlLnk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0Lm9uKCdkcmFnJywgZnVuY3Rpb24oZXZlbnQsIGQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGR4ID0gZXZlbnQueCAtIGQuaW5pdGlhbFg7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZHkgPSBldmVudC55IC0gZC5pbml0aWFsWTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZC5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhhdC5ub2RlU2VsZWN0aW9uLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobm9kZS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZnggPSBub2RlLmluaXRpYWxYICsgZHg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5meSA9IG5vZGUuaW5pdGlhbFkgKyBkeTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGQuZnggPSBldmVudC54O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZC5meSA9IGV2ZW50Lnk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQub24oJ2VuZCcsIGZ1bmN0aW9uKGV2ZW50LCBkOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWV2ZW50LmFjdGl2ZSkgc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZC5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhhdC5ub2RlU2VsZWN0aW9uLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobm9kZS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZnggPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZnkgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZC5meCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHRkLmZ5ID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQgOiBhbnksIGQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0aWYgKCF0aGF0LmlzQWx0UHJlc3NlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoYXQuY2xlYXJTZWxlY3Rpb25zKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZC5zZWxlY3RlZCA9ICFkLnNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0XHR0aGF0LnVwZGF0ZU5vZGVBcHBlYXJhbmNlKCk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihldmVudCA6IGFueSwgZDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQuaXNIb3ZlcmluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGlmICghZC5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChkLmlkICE9PSB0aGF0LmNlbnRyYWxOb2RlLmlkICYmICFkLmhpZ2hsaWdodGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuYXR0cignZmlsbCcsICcjZDQ2ZWJlJyk7IC8vIEFuaW1hdGUgZmlsbCBjb2xvciB0byAjZDQ2ZWJlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhhdC5oaWdobGlnaHROb2RlKGQpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRkMy5zZWxlY3QodGhpcykuYXR0cignc3Ryb2tlJywgZC5zZWxlY3RlZCA/ICdibGFuY2hlZGFsbW9uZCcgOiAnI2ZmZicpLmF0dHIoJ3N0cm9rZS13aWR0aCcsIGQuc2VsZWN0ZWQgPyAxLjUgOiAwLjMpOyAvLyBDaGFuZ2Ugc3Ryb2tlIGNvbG9yIHRvIHdoaXRlIG9uIGhvdmVyXG5cdFx0XHRcdFx0XHRcdHN2Z0dyb3VwLnNlbGVjdChgdGV4dFtkYXRhLWlkPScke2QuaWR9J11gKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjUwKS5hdHRyKCd5JywgZC55ICsgNCk7IC8vIEFuaW1hdGUgbGFiZWwgZG93biAxMCBwaXhlbHNcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHRoYXQuYXBwLndvcmtzcGFjZS50cmlnZ2VyKFwiaG92ZXItbGlua1wiLCB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdFx0c291cmNlOiAnRDMnLFxuXHRcdFx0XHRcdFx0XHRcdGhvdmVyUGFyZW50OiB0aGlzLnBhcmVudEVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0RWw6IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0bGlua3RleHQ6IGQuaWQsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oZXZlbnQgOiBhbnksIGQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHR0aGF0LmlzSG92ZXJpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYgKCFkLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGQuaWQgIT09IHRoYXQuY2VudHJhbE5vZGUuaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGQzLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5hdHRyKCdmaWxsJywgZC5ncm91cCA9PT0gJ25vdGUnID8gJyM3Yzg1OTQnIDogJyM5MjZlYzknKTsgLy8gQW5pbWF0ZSBmaWxsIGNvbG9yIGJhY2sgdG8gb3JpZ2luYWxcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhhdC51bmhpZ2hsaWdodE5vZGUoKTtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ3NlbGVjdGluZyBub2RlJywgZC5zZWxlY3RlZCk7XG5cdFx0XHRcdFx0XHRcdGQzLnNlbGVjdCh0aGlzKS5hdHRyKCdzdHJva2UnLCBkLnNlbGVjdGVkID8gJ2JsYW5jaGVkYWxtb25kJyA6ICd0cmFuc3BhcmVudCcpLmF0dHIoJ3N0cm9rZS13aWR0aCcsIGQuc2VsZWN0ZWQgPyAxLjUgOiAwLjMpOyAvLyBDaGFuZ2Ugc3Ryb2tlIGNvbG9yIGJhY2sgdG8gbGVzcyB2aXNpYmxlIG9uIG1vdXNlIG91dFxuXHRcdFx0XHRcdFx0XHRzdmdHcm91cC5zZWxlY3QoYHRleHRbZGF0YS1pZD0nJHtkLmlkfSddYCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDI1MCkuYXR0cigneScsIGQueSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHVwZGF0ZSA9PiB1cGRhdGVcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ3InLCBkID0+IGQuaWQgPT09IHRoaXMuY2VudHJhbE5vZGUuaWQgPyB0aGlzLm5vZGVTaXplICsgMiA6IHRoaXMubm9kZVNpemUpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdmaWxsJywgZCA9PiBkLnNlbGVjdGVkID8gJyNmM2VlNWQnIDogKGQuZ3JvdXAgPT09ICdub3RlJyA/ICcjN2M4NTk0JyA6ICcjOTI2ZWM5JykpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2UnLCBkID0+IGQuc2VsZWN0ZWQgPyAnI2JsYW5jaGVkYWxtb25kJyA6IChkLmdyb3VwID09PSAnbm90ZScgPyAnIzdjODU5NCcgOiAnIzkyNmVjOScpKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignc3Ryb2tlLXdpZHRoJywgZCA9PiBkLnNlbGVjdGVkID8gMS41IDogMC4zKSxcblx0XHRcdFx0XHRcdGV4aXQgPT4gZXhpdC5yZW1vdmUoKVxuXHRcdFx0XHRcdCk7XG5cblx0XG5cdFx0XHRcdHRoaXMubGlua1NlbGVjdGlvbiA9IHN2Z0dyb3VwLnNlbGVjdCgnZy5saW5rcycpLnNlbGVjdEFsbCgnbGluZScpXG5cdFx0XHRcdFx0LmRhdGEodGhpcy52YWxpZGF0ZWRMaW5rcywgKGQ6IGFueSkgPT4gYCR7ZC5zb3VyY2V9LSR7ZC50YXJnZXR9YClcblx0XHRcdFx0XHQuam9pbihcblx0XHRcdFx0XHRcdGVudGVyID0+IGVudGVyLmFwcGVuZCgnbGluZScpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdjbGFzcycsICdsaW5rJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ3N0cm9rZScsICcjNGM3Nzg3JykgLy8gQWRqdXN0ZWQgY29sb3IgdG8gbWF0Y2ggdGhlIGJsdWUgaHVlXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utd2lkdGgnLChkOiBhbnkpID0+IGQzLnNjYWxlTGluZWFyKClcblx0XHRcdFx0XHRcdFx0LmRvbWFpbihbdGhpcy5taW5TY29yZSwgdGhpcy5tYXhTY29yZV0pIC8vIEVuc3VyZSB0aGlzIGRvbWFpbiBtYXRjaGVzIHlvdXIgc2NvcmUgcmFuZ2Vcblx0XHRcdFx0XHRcdFx0LnJhbmdlKFt0aGlzLm1pbkxpbmtUaGlja25lc3MsIHRoaXMubWF4TGlua1RoaWNrbmVzc10pKGQuc2NvcmUpKSAvLyBUaGlubmVyIHN0cm9rZSB3aWR0aFxuXHRcdFx0XHRcdFx0XHQuYXR0cignc3Ryb2tlLW9wYWNpdHknLCAxKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignb3BhY2l0eScsIDEpXG5cdFx0XHRcdFx0XHRcdC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZXZlbnQsIGQgOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBMZWFjaW5nIGhlcmUgZm9yIHdoZW4gd2UgdXNlIGhvdmVyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc3QgW3gsIHldID0gZDMucG9pbnRlcihldmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdG9vbHRpcC50ZXh0KGBTaWduZmljYW5jZTogJHtkLnNjb3JlLnRvRml4ZWQoMyl9YClcblx0XHRcdFx0XHRcdFx0XHQvLyBcdC5zdHlsZSgndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0XHRcdH0pLm9uKCdtb3VzZW1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnN0IFt4LCB5XSA9IGQzLnBvaW50ZXIoZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIHRvb2x0aXAuc3R5bGUoJ3RvcCcsIGAke3kgKyAxMH1weGApXG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHQuc3R5bGUoJ2xlZnQnLCBgJHt4fXB4YCk7XG5cdFx0XHRcdFx0XHRcdH0pLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIHRvb2x0aXAuc3R5bGUoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dXBkYXRlID0+IHVwZGF0ZVxuXHRcdFx0XHRcdFx0XHQuYXR0cignc3Ryb2tlJywgJyM0Yzc3ODcnKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignc3Ryb2tlLXdpZHRoJywoZDogYW55KSA9PiBkMy5zY2FsZUxpbmVhcigpXG5cdFx0XHRcdFx0XHRcdC5kb21haW4oW3RoaXMubWluU2NvcmUsIHRoaXMubWF4U2NvcmVdKSAvLyBFbnN1cmUgdGhpcyBkb21haW4gbWF0Y2hlcyB5b3VyIHNjb3JlIHJhbmdlXG5cdFx0XHRcdFx0XHRcdC5yYW5nZShbdGhpcy5taW5MaW5rVGhpY2tuZXNzLCB0aGlzLm1heExpbmtUaGlja25lc3NdKShkLnNjb3JlKSksXG5cdFx0XHRcdFx0XHRcdC8vIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZXZlbnQsIGQgOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gfSkub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGV2ZW50LCBkIDphbnkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gXHQvLyBDYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwIHJlbGF0aXZlIHRvIHRoZSBTVkcgY29vcmRpbmF0ZSBzeXN0ZW1cblx0XHRcdFx0XHRcdFx0Ly8gfSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0dG9vbHRpcC5zdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0XHRcdFx0XHRcdGV4aXQgPT4gZXhpdC5yZW1vdmUoKVxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR0aGlzLmxpbmtMYWJlbFNlbGVjdGlvbiA9IHN2Z0dyb3VwLmFwcGVuZCgnZycpXG5cdFx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ2xpbmstbGFiZWxzJylcblx0XHRcdFx0XHQuc2VsZWN0QWxsKCd0ZXh0Jylcblx0XHRcdFx0XHQuZGF0YSh0aGlzLnZhbGlkYXRlZExpbmtzLCAoZDogYW55KSA9PiBgJHtkLnNvdXJjZS5pZH0tJHtkLnRhcmdldC5pZH1gKVxuXHRcdFx0XHRcdC5qb2luKFxuXHRcdFx0XHRcdFx0ZW50ZXIgPT4gZW50ZXIuYXBwZW5kKCd0ZXh0Jylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ2xpbmstbGFiZWwnKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZm9udC1zaXplJywgdGhpcy5saW5rTGFiZWxTaXplKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZmlsbCcsICcjYmJiJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ29wYWNpdHknLCAwKVxuXHRcdFx0XHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiAoZC5zY29yZSAqIDEwMCkudG9GaXhlZCgxKSksXG5cdFx0XHRcdFx0XHR1cGRhdGUgPT4gdXBkYXRlLnRleHQoKGQ6IGFueSkgPT4gKGQuc2NvcmUgKiAxMDApLnRvRml4ZWQoMSkpLFxuXHRcdFx0XHRcdFx0ZXhpdCA9PiBleGl0LnJlbW92ZSgpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XG5cdFx0XG5cdFx0XHRcdHRoaXMubGFiZWxTZWxlY3Rpb24gPSBzdmdHcm91cC5zZWxlY3QoJ2cubGFiZWxzJykuc2VsZWN0QWxsKCd0ZXh0Jylcblx0XHRcdFx0XHQuZGF0YShub2Rlc0RhdGEsIChkOiBhbnkpID0+IGQuaWQpXG5cdFx0XHRcdFx0LmpvaW4oXG5cdFx0XHRcdFx0XHRlbnRlciA9PiBlbnRlci5hcHBlbmQoJ3RleHQnKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignY2xhc3MnLCAnbGFiZWwnKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZHgnLCAwKSAvLyBDZW50ZXJlZCBob3Jpem9udGFsbHlcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2ZvbnQtc2l6ZScsIHRoaXMubm9kZUxhYmVsU2l6ZSlcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2R5JywgMTIpIC8vIFBvc2l0aW9uZWQgcmlnaHQgdW5kZXJuZWF0aFxuXHRcdFx0XHRcdFx0XHQuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJykgLy8gQ2VudGVyIGFsaWduIHRleHRcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCAnI2JiYicpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdvcGFjaXR5JywgMSkgLy8gU2V0IGluaXRpYWwgb3BhY2l0eVxuXHRcdFx0XHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSkpLFxuXHRcdFx0XHRcdFx0dXBkYXRlID0+IHVwZGF0ZVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZHgnLCAwKSAvLyBDZW50ZXJlZCBob3Jpem9udGFsbHlcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2R5JywgMTIpIC8vIFBvc2l0aW9uZWQgcmlnaHQgdW5kZXJuZWF0aFxuXHRcdFx0XHRcdFx0XHQuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJykgLy8gQ2VudGVyIGFsaWduIHRleHRcblx0XHRcdFx0XHRcdFx0LnRleHQoKGQ6IGFueSkgPT4gdGhpcy5mb3JtYXRMYWJlbChkLm5hbWUpKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZmlsbCcsICcjYmJiJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2ZvbnQtc2l6ZScsIDQpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdvcGFjaXR5JywgMSksIC8vIEVuc3VyZSB1cGRhdGVkIG9wYWNpdHkgaXMgMVxuXHRcdFx0XHRcdFx0ZXhpdCA9PiBleGl0LnJlbW92ZSgpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gZC54KVxuXHRcdFx0XHRcdC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gZC55KTtcblx0XG5cdFx0XHRcdHNpbXVsYXRpb24ubm9kZXMobm9kZXNEYXRhKTtcblx0XHRcdFx0KHNpbXVsYXRpb24uZm9yY2UoJ2xpbmsnKSBhcyBhbnkpLmxpbmtzKHRoaXMudmFsaWRhdGVkTGlua3MpO1xuXHRcblx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYSgwLjMpLmFscGhhVGFyZ2V0KDAuMDUpLnJlc3RhcnQoKTtcblxuXHRcdFx0XHR1cGRhdGVGb3JjZXMoKTtcblxuXHRcdFx0XHRzaW11bGF0aW9uLm9uKCd0aWNrJywgKCkgPT4ge1xuXHRcdFxuXHRcdFx0XHRcdHRoaXMubm9kZVNlbGVjdGlvblxuXHRcdFx0XHRcdFx0LmF0dHIoJ2N4JywgKGQ6IGFueSkgPT4gZC54KVxuXHRcdFx0XHRcdFx0LmF0dHIoJ2N5JywgKGQ6IGFueSkgPT4gZC55KTtcblx0XG5cdFx0XHRcdFx0dGhpcy5saW5rU2VsZWN0aW9uXG5cdFx0XHRcdFx0XHQuYXR0cigneDEnLCAoZDogYW55KSA9PiBkLnNvdXJjZS54KVxuXHRcdFx0XHRcdFx0LmF0dHIoJ3kxJywgKGQ6IGFueSkgPT4gZC5zb3VyY2UueSlcblx0XHRcdFx0XHRcdC5hdHRyKCd4MicsIChkOiBhbnkpID0+IGQudGFyZ2V0LngpXG5cdFx0XHRcdFx0XHQuYXR0cigneTInLCAoZDogYW55KSA9PiBkLnRhcmdldC55KTtcblxuXHRcdFx0XHRcdHRoaXMubGlua0xhYmVsU2VsZWN0aW9uXG5cdFx0XHRcdFx0LmF0dHIoJ3gnLCAoZDogYW55KSA9PiAoZC5zb3VyY2UueCArIGQudGFyZ2V0LngpIC8gMilcblx0XHRcdFx0XHQuYXR0cigneScsIChkOiBhbnkpID0+IChkLnNvdXJjZS55ICsgZC50YXJnZXQueSkgLyAyKTsgLy8gUG9zaXRpb24gYXQgdGhlIG1pZHBvaW50IG9mIHRoZSBsaW5rXHRcdFx0XHRcblx0XG5cdFx0XHRcdFx0c3ZnR3JvdXAuc2VsZWN0KCdnLmxhYmVscycpLnNlbGVjdEFsbCgndGV4dCcpXG5cdFx0XHRcdFx0XHQuZGF0YShub2Rlc0RhdGEsIChkOiBhbnkpID0+IGQuaWQpXG5cdFx0XHRcdFx0XHQuam9pbihcblx0XHRcdFx0XHRcdFx0ZW50ZXIgPT4gZW50ZXIuYXBwZW5kKCd0ZXh0Jylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignY2xhc3MnLCAnbGFiZWwnKVxuXHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdkeCcsIDEyKVxuXHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdkeScsICcuMzVlbScpXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCAnI2JiYicpXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2RhdGEtaWQnLCBkID0+IGQuaWQpXG5cdFx0XHRcdFx0XHRcdFx0LnRleHQoKGQ6IGFueSkgPT4gdGhpcy5mb3JtYXRMYWJlbChkLm5hbWUsIHRydWUpKSwgLy8gU2V0IGluaXRpYWwgbGFiZWwgd2l0aCB0cnVuY2F0aW9uXG5cdFx0XHRcdFx0XHRcdHVwZGF0ZSA9PiB1cGRhdGVcblx0XHRcdFx0XHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSwgdHJ1ZSkpIC8vIEVuc3VyZSB1cGRhdGVkIGxhYmVsIGlzIHRydW5jYXRlZFxuXHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdmaWxsJywgJyNiYmInKVxuXHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdkYXRhLWlkJywgZCA9PiBkLmlkKSxcblx0XHRcdFx0XHRcdFx0ZXhpdCA9PiBleGl0LnJlbW92ZSgpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQuYXR0cigneCcsIChkOiBhbnkpID0+IGQueClcblx0XHRcdFx0XHRcdC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gZC55KTsgLy8gUG9zaXRpb24gbGFiZWwgYmVsb3cgdGhlIG5vZGVcblx0XG5cdFx0XHRcdFx0XHQvLyBVcGRhdGUgbGFiZWwgb3BhY2l0eSBiYXNlZCBvbiBpbml0aWFsIHpvb20gbGV2ZWxcblx0XHRcdFx0XHRcdHVwZGF0ZUxhYmVsT3BhY2l0eShkMy56b29tVHJhbnNmb3JtKHN2Zy5ub2RlKCkgYXMgRWxlbWVudCkuayk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMudXBkYXRpbmdWaXN1YWxpemF0aW9uID0gdHJ1ZTsgLy8gU2V0IHRoZSBmbGFnIHRvIHRydWVcblx0XG5cdFx0XHRcblx0XHRcdH07XG5cdFxuXHRcblx0XHRcdGlmICghdGhpcy5zZXR0aW5nc0luc3RhbnRpYXRlZCkge1xuXHRcblx0XHRcdFx0Ly8gRW5zdXJlIHRoYXQgdGhlIHNldHRpbmdzIG1lbnUgYW5kIGl0cyBlbGVtZW50cyBhcmUgb25seSBjcmVhdGVkIG9uY2Vcblx0XHRcdFx0aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXR0aW5ncy1pY29uJykpIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInNjb3JlIHNldHRpbmdzIGV4aXN0XCIpO1xuXHRcdFx0XHRcdC8vIElmIHNldHRpbmdzIG1lbnUgaXMgYWxyZWFkeSBzZXQgdXAsIHNraXAgc2V0dXBcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJzY29yZSBkb2VzbnRcIilcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBzZXR0aW5ncyBpY29uXG5cdFx0XHRcdGNvbnN0IHNldHRpbmdzSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0XHRzZXR0aW5nc0ljb24uaW5uZXJIVE1MID0gJyYjOTg4MTsnOyAvLyBVbmljb2RlIGZvciBnZWFyIGljb25cblx0XHRcdFx0c2V0dGluZ3NJY29uLmNsYXNzTGlzdC5hZGQoJ3NldHRpbmdzLWljb24nKTtcblx0XHRcdFx0dGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQoc2V0dGluZ3NJY29uKTtcblx0XG5cdFx0XHRcdC8vIFNWRyBpY29uIGZvciBkcm9wZG93biBhcnJvd1xuXHRcdFx0XHRjb25zdCBkcm9wZG93bkFycm93ID0gYFxuXHRcdFx0XHQ8c3ZnIGNsYXNzPVwiZHJvcGRvd24taW5kaWNhdG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XG5cdFx0XHRcdFx0PHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDh6XCIvPlxuXHRcdFx0XHQ8L3N2Zz5gO1xuXHRcblx0XHRcdFx0Y29uc3QgcmlnaHRBcnJvdyA9IGBcblx0XHRcdFx0PHN2ZyBjbGFzcz1cImRyb3Bkb3duLWluZGljYXRvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuXHRcdFx0XHQ8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjY0NiAxLjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMSAwIC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDgtLjcwOEwxMC4yOTMgOCA0LjY0NiAyLjM1NGEuNS41IDAgMCAxIDAtLjcwOHpcIi8+XG5cdFx0XHRcdDwvc3ZnPmA7XG5cdFxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGRyb3Bkb3duIG1lbnVcblx0XHRcdFx0Y29uc3QgZHJvcGRvd25NZW51ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdGRyb3Bkb3duTWVudS5jbGFzc0xpc3QuYWRkKCdkcm9wZG93bi1tZW51Jyk7XG5cdFx0XHRcdGRyb3Bkb3duTWVudS5pbm5lckhUTUwgPSBgXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1lbnUtaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvblwiIGlkPVwicmVmcmVzaC1pY29uXCI+JiM4NjM1OzwvZGl2PiA8IS0tIFVuaWNvZGUgZm9yIHJlZnJlc2ggaWNvbiAtLT5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpY29uXCIgaWQ9XCJjbG9zZS1pY29uXCI+JiMxMDAwNTs8L2Rpdj4gPCEtLSBVbmljb2RlIGZvciBYIChjbG9zZSkgaWNvbiAtLT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYXJyb3ctaWNvblwiPiR7cmlnaHRBcnJvd308L3NwYW4+RmlsdGVyc1xuXHRcdFx0XHRcdFx0PC9kaXY+XHRcdFx0XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWNvbnRlbnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgaWQ9XCJzY29yZVRocmVzaG9sZExhYmVsXCIgZm9yPVwic2NvcmVUaHJlc2hvbGRcIj5NaW4gUmVsZXZhbmNlOiAke3RoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGQgKiAxMDB9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJzY29yZVRocmVzaG9sZFwiIGNsYXNzPVwic2xpZGVyXCIgbmFtZT1cInNjb3JlVGhyZXNob2xkXCIgbWluPVwiMFwiIG1heD1cIjAuOTlcIiB2YWx1ZT1cIiR7dGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZH1cIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwic2V0dGluZ3MtaXRlbS1jb250ZW50LWxhYmVsXCI+Q29ubmVjdGlvbiBUeXBlOjwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJyYWRpby1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImNvbm5lY3Rpb25UeXBlXCIgdmFsdWU9XCJibG9ja1wiICR7dGhpcy5jb25uZWN0aW9uVHlwZSA9PT0gJ2Jsb2NrJyA/ICdjaGVja2VkJyA6ICcnfT4gQmxvY2tcblx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY29ubmVjdGlvblR5cGVcIiB2YWx1ZT1cIm5vdGVcIiAke3RoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub3RlJyA/ICdjaGVja2VkJyA6ICcnfT4gTm90ZVxuXHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PCEtLVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taXRlbVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJhcnJvdy1pY29uXCI+JHtyaWdodEFycm93fTwvc3Bhbj5Hcm91cHNcblx0XHRcdFx0XHRcdDwvZGl2Plx0XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWNvbnRlbnRcIj5cblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZ3JvdXAxXCIgbmFtZT1cImdyb3VwMVwiIGNoZWNrZWQ+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJncm91cDFcIj5Hcm91cCAxPC9sYWJlbD48YnI+XG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImdyb3VwMlwiIG5hbWU9XCJncm91cDJcIiBjaGVja2VkPlxuXHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiZ3JvdXAyXCI+R3JvdXAgMjwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4gXG5cdFx0XHRcdFx0LS0hPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taXRlbVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJhcnJvdy1pY29uXCI+JHtyaWdodEFycm93fTwvc3Bhbj5EaXNwbGF5XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cdFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1jb250ZW50XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwiZmFkZVRocmVzaG9sZExhYmVsXCIgZm9yPVwiZmFkZVRocmVzaG9sZFwiPiBUZXh0IEZhZGUgVGhyZXNob2xkOiAke3RoaXMudGV4dEZhZGVUaHJlc2hvbGR9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJmYWRlVGhyZXNob2xkXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwiZmFkZVRocmVzaG9sZFwiIG1pbj1cIjAuMVwiIG1heD1cIjEwXCIgdmFsdWU9XCIxLjJcIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgaWQ9XCJub2RlU2l6ZUxhYmVsXCIgZm9yPVwibm9kZVNpemVcIj5Ob2RlIFNpemU6ICR7dGhpcy5ub2RlU2l6ZX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cIm5vZGVTaXplXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibm9kZVNpemVcIiBtaW49XCIxXCIgbWF4PVwiMTVcIiB2YWx1ZT1cIiR7dGhpcy5ub2RlU2l6ZX1cIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgaWQ9XCJtYXhMYWJlbENoYXJhY3RlcnNMYWJlbFwiIGZvcj1cIm1heExhYmVsQ2hhcmFjdGVyc1wiPk1heCBMYWJlbCBDaGFyYWN0ZXJzOiAke3RoaXMubWF4TGFiZWxDaGFyYWN0ZXJzfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwibWF4TGFiZWxDaGFyYWN0ZXJzXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibWF4TGFiZWxDaGFyYWN0ZXJzXCIgbWluPVwiMVwiIG1heD1cIjUwXCIgdmFsdWU9XCIke3RoaXMubWF4TGFiZWxDaGFyYWN0ZXJzfVwiIHN0ZXA9XCIxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cImxpbmtMYWJlbFNpemVMYWJlbFwiIGZvcj1cImxpbmtMYWJlbFNpemVcIj5MaW5rIExhYmVsIFNpemU6ICR7dGhpcy5saW5rTGFiZWxTaXplfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwibGlua0xhYmVsU2l6ZVwiIGNsYXNzPVwic2xpZGVyXCIgbmFtZT1cImxpbmtMYWJlbFNpemVcIiBtaW49XCIxXCIgbWF4PVwiMTVcIiB2YWx1ZT1cIiR7dGhpcy5saW5rTGFiZWxTaXplfVwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cIm5vZGVMYWJlbFNpemVMYWJlbFwiIGZvcj1cIm5vZGVMYWJlbFNpemVcIj5Ob2RlIExhYmVsIFNpemU6ICR7dGhpcy5ub2RlTGFiZWxTaXplfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwibm9kZUxhYmVsU2l6ZVwiIGNsYXNzPVwic2xpZGVyXCIgbmFtZT1cIm5vZGVMYWJlbFNpemVcIiBtaW49XCIxXCIgbWF4PVwiMjZcIiB2YWx1ZT1cIiR7dGhpcy5ub2RlTGFiZWxTaXplfVwiIHN0ZXA9XCIxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cIm1pbkxpbmtUaGlja25lc3NMYWJlbFwiIGZvcj1cIm1pbkxpbmtUaGlja25lc3NcIj5NaW4gTGluayBUaGlja25lc3M6ICR7dGhpcy5taW5MaW5rVGhpY2tuZXNzfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwibWluTGlua1RoaWNrbmVzc1wiIGNsYXNzPVwic2xpZGVyXCIgbmFtZT1cIm1pbkxpbmtUaGlja25lc3NcIiBtaW49XCIwLjFcIiBtYXg9XCIxMFwiIHZhbHVlPVwiJHt0aGlzLm1pbkxpbmtUaGlja25lc3N9XCIgc3RlcD1cIjAuMDFcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibWF4TGlua1RoaWNrbmVzc0xhYmVsXCIgZm9yPVwibWF4TGlua1RoaWNrbmVzc1wiPk1heCBMaW5rIFRoaWNrbmVzczogJHt0aGlzLm1heExpbmtUaGlja25lc3N9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJtYXhMaW5rVGhpY2tuZXNzXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibWF4TGlua1RoaWNrbmVzc1wiIG1pbj1cIjAuMVwiIG1heD1cIjEwXCIgdmFsdWU9XCIke3RoaXMubWF4TGlua1RoaWNrbmVzc31cIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cImxpbmVUaGlja25lc3NMYWJlbFwiIGZvcj1cImxpbmVUaGlja25lc3NcIj5MaW5lIFRoaWNrbmVzczogJHt0aGlzLmxpbmtUaGlja25lc3N9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJsaW5lVGhpY2tuZXNzXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibGluZVRoaWNrbmVzc1wiICBtaW49XCIwLjFcIiBtYXg9XCI1XCIgdmFsdWU9XCIke3RoaXMubGlua1RoaWNrbmVzc31cIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj4gLS0hPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImFycm93LWljb25cIj4ke3JpZ2h0QXJyb3d9PC9zcGFuPkZvcmNlc1xuXHRcdFx0XHRcdFx0PC9kaXY+XHRcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tY29udGVudFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJjZW50ZXJGb3JjZVwiIGlkPVwiY2VudGVyRm9yY2VMYWJlbFwiPkNlbnRlciBGb3JjZTogJHt0aGlzLmNlbnRlckZvcmNlfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwiY2VudGVyRm9yY2VcIiBuYW1lPVwiY2VudGVyRm9yY2VcIiBjbGFzcz1cInNsaWRlclwiIG1pbj1cIjBcIiBtYXg9XCIxXCIgdmFsdWU9XCIke3RoaXMuY2VudGVyRm9yY2V9XCIgc3RlcD1cIjAuMDFcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cInJlcGVsRm9yY2VcIiBpZD1cInJlcGVsRm9yY2VMYWJlbFwiPlJlcGVsIEZvcmNlOiAgJHt0aGlzLnJlcGVsRm9yY2V9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJyZXBlbEZvcmNlXCIgbmFtZT1cInJlcGVsRm9yY2VcIiBjbGFzcz1cInNsaWRlclwiIG1pbj1cIjBcIiBtYXg9XCIxNTAwXCIgdmFsdWU9XCIke3RoaXMucmVwZWxGb3JjZX1cIiBzdGVwPVwiMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwibGlua0ZvcmNlXCIgaWQ9XCJsaW5rRm9yY2VMYWJlbFwiPkxpbmsgRm9yY2U6ICAke3RoaXMubGlua0ZvcmNlfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwibGlua0ZvcmNlXCIgbmFtZT1cImxpbmtGb3JjZVwiIGNsYXNzPVwic2xpZGVyXCIgbWluPVwiMFwiIG1heD1cIjFcIiB2YWx1ZT1cIiAke3RoaXMubGlua0ZvcmNlfVwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJsaW5rRGlzdGFuY2VcIiBpZD1cImxpbmtEaXN0YW5jZUxhYmVsXCI+TGluayBEaXN0YW5jZTogICR7dGhpcy5saW5rRGlzdGFuY2V9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJsaW5rRGlzdGFuY2VcIiBuYW1lPVwibGlua0Rpc3RhbmNlXCIgY2xhc3M9XCJzbGlkZXJcIiBtaW49XCIxMFwiIG1heD1cIjIwMFwiIHZhbHVlPVwiJHt0aGlzLmxpbmtEaXN0YW5jZX1cIiBzdGVwPVwiMVwiPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdGA7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0dGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQoZHJvcGRvd25NZW51KTtcblx0XG5cdFx0XHRcdC8vIFRvZ2dsZSBkcm9wZG93biBtZW51IHZpc2liaWxpdHkgb24gc2V0dGluZ3MgaWNvbiBjbGlja1xuXHRcdFx0XHRzZXR0aW5nc0ljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0ZHJvcGRvd25NZW51LmNsYXNzTGlzdC50b2dnbGUoJ29wZW4nKTtcblx0XHRcdFx0fSk7XG5cdFxuXHRcdFx0XHQvLyBUb2dnbGUgYWNjb3JkaW9uIGNvbnRlbnQgdmlzaWJpbGl0eSBhbmQgYXJyb3cgaWNvbiBvbiBoZWFkZXIgY2xpY2tcblx0XHRcdFx0Y29uc3QgYWNjb3JkaW9uSGVhZGVycyA9IGRyb3Bkb3duTWVudS5xdWVyeVNlbGVjdG9yQWxsKCcuYWNjb3JkaW9uLWhlYWRlcicpO1xuXHRcdFx0XHRhY2NvcmRpb25IZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcblx0XHRcdFx0XHRoZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZW50ID0gaGVhZGVyLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0XHRcdGNvbnN0IGFycm93SWNvbiA9IGhlYWRlci5xdWVyeVNlbGVjdG9yKCcuYXJyb3ctaWNvbicpO1xuXHRcblx0XHRcdFx0XHRcdGlmIChjb250ZW50ICYmIGFycm93SWNvbikgeyAvLyBBZGQgbnVsbCBjaGVjayBmb3IgYXJyb3dJY29uXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycpO1xuXHRcdFx0XHRcdFx0XHRpZiAoY29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3Nob3cnKSkge1xuXHRcdFx0XHRcdFx0XHRcdGFycm93SWNvbi5pbm5lckhUTUwgPSBkcm9wZG93bkFycm93O1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFycm93SWNvbi5pbm5lckhUTUwgPSByaWdodEFycm93O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0Ly8gTm93IHF1ZXJ5IHRoZSBET00gZm9yIHRoZSBzbGlkZXIgYW5kIGxhYmVsXG5cdFx0XHRcdGNvbnN0IHNjb3JlVGhyZXNob2xkU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlVGhyZXNob2xkJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3Qgc2NvcmVUaHJlc2hvbGRMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY29yZS10aHJlc2hvbGQtbGFiZWwnKTtcblx0XHRcdFx0Y29uc3Qgbm9kZVNpemVTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm9kZVNpemUnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBub2RlU2l6ZUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vZGVTaXplTGFiZWwnKTtcblx0XHRcdFx0Y29uc3QgbGluZVRoaWNrbmVzc1NsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5lVGhpY2tuZXNzJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgbGluZVRoaWNrbmVzc0xhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmVUaGlja25lc3NMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBjZW50ZXJGb3JjZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZW50ZXJGb3JjZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IGNlbnRlckZvcmNlTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2VudGVyRm9yY2VMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCByZXBlbEZvcmNlU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcGVsRm9yY2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCByZXBlbEZvcmNlTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVwZWxGb3JjZUxhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IGxpbmtGb3JjZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rRm9yY2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBsaW5rRm9yY2VMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rRm9yY2VMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBsaW5rRGlzdGFuY2VTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlua0Rpc3RhbmNlJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgbGlua0Rpc3RhbmNlTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlua0Rpc3RhbmNlTGFiZWwnKTtcblx0XHRcdFx0Y29uc3QgZmFkZVRocmVzaG9sZFNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWRlVGhyZXNob2xkJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgZmFkZVRocmVzaG9sZExhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhZGVUaHJlc2hvbGRMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBtaW5MaW5rVGhpY2tuZXNzU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbkxpbmtUaGlja25lc3MnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBtaW5MaW5rVGhpY2tuZXNzTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWluTGlua1RoaWNrbmVzc0xhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IG1heExpbmtUaGlja25lc3NTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWF4TGlua1RoaWNrbmVzcycpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IG1heExpbmtUaGlja25lc3NMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXhMaW5rVGhpY2tuZXNzTGFiZWwnKTtcblx0XHRcdFx0Y29uc3QgY29ubmVjdGlvblR5cGVSYWRpb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPVwiY29ubmVjdGlvblR5cGVcIl0nKTtcblx0XHRcdFx0Y29uc3QgbWF4TGFiZWxDaGFyYWN0ZXJzU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21heExhYmVsQ2hhcmFjdGVycycpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IG1heExhYmVsQ2hhcmFjdGVyc0xhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21heExhYmVsQ2hhcmFjdGVyc0xhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IGxpbmtMYWJlbFNpemVTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlua0xhYmVsU2l6ZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IGxpbmtMYWJlbFNpemVMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rTGFiZWxTaXplTGFiZWwnKTtcblx0XHRcdFx0Y29uc3Qgbm9kZUxhYmVsU2l6ZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub2RlTGFiZWxTaXplJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3Qgbm9kZUxhYmVsU2l6ZUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vZGVMYWJlbFNpemVMYWJlbCcpO1xuXG5cdFx0XHRcdGlmIChtYXhMYWJlbENoYXJhY3RlcnNTbGlkZXIpIHtcblx0XHRcdFx0XHRtYXhMYWJlbENoYXJhY3RlcnNTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld01heExhYmVsQ2hhcmFjdGVycyA9IHBhcnNlSW50KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsIDEwKTtcblx0XHRcdFx0XHRcdGlmIChtYXhMYWJlbENoYXJhY3RlcnNMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRtYXhMYWJlbENoYXJhY3RlcnNMYWJlbC50ZXh0Q29udGVudCA9IGBNYXggTGFiZWwgQ2hhcmFjdGVyczogJHtuZXdNYXhMYWJlbENoYXJhY3RlcnN9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMubWF4TGFiZWxDaGFyYWN0ZXJzID0gbmV3TWF4TGFiZWxDaGFyYWN0ZXJzO1xuXHRcdFx0XHRcdFx0dXBkYXRlTm9kZUxhYmVscygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGxpbmtMYWJlbFNpemVTbGlkZXIpIHtcblx0XHRcdFx0XHRsaW5rTGFiZWxTaXplU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdMaW5rTGFiZWxTaXplID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChsaW5rTGFiZWxTaXplTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0bGlua0xhYmVsU2l6ZUxhYmVsLnRleHRDb250ZW50ID0gYExpbmsgTGFiZWwgU2l6ZTogJHtuZXdMaW5rTGFiZWxTaXplfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLmxpbmtMYWJlbFNpemUgPSBuZXdMaW5rTGFiZWxTaXplO1xuXHRcdFx0XHRcdFx0dXBkYXRlTGlua0xhYmVsU2l6ZXMoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChub2RlTGFiZWxTaXplU2xpZGVyKSB7XG5cdFx0XHRcdFx0bm9kZUxhYmVsU2l6ZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3Tm9kZUxhYmVsU2l6ZSA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRpZiAobm9kZUxhYmVsU2l6ZUxhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGVMYWJlbFNpemVMYWJlbC50ZXh0Q29udGVudCA9IGBOb2RlIExhYmVsIFNpemU6ICR7bmV3Tm9kZUxhYmVsU2l6ZX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5ub2RlTGFiZWxTaXplID0gbmV3Tm9kZUxhYmVsU2l6ZTtcblx0XHRcdFx0XHRcdHVwZGF0ZU5vZGVMYWJlbFNpemVzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdC8vIEV2ZW50IGxpc3RlbmVyIGZvciBDb25uZWN0aW9uIFR5cGUgUmFkaW9zIHNsaWRlclxuXHRcdFx0XHRpZiAoY29ubmVjdGlvblR5cGVSYWRpb3MpIHtcblx0XHRcdFx0XHRjb25uZWN0aW9uVHlwZVJhZGlvcy5mb3JFYWNoKHJhZGlvID0+IHtcblx0XHRcdFx0XHRcdHJhZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbm5lY3Rpb25UeXBlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblx0XHRcdFx0XHRcdFx0dGhpcy5pc0NoYW5naW5nQ29ubmVjdGlvblR5cGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR1cGRhdGVWaXN1YWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVx0XG5cblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIE1pbiBMaW5rIFRoaWNrbmVzcyBzbGlkZXJcblx0XHRcdFx0aWYgKG1pbkxpbmtUaGlja25lc3NTbGlkZXIpIHtcblx0XHRcdFx0XHRtaW5MaW5rVGhpY2tuZXNzU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdNaW5MaW5rVGhpY2tuZXNzID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChtaW5MaW5rVGhpY2tuZXNzTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0bWluTGlua1RoaWNrbmVzc0xhYmVsLnRleHRDb250ZW50ID0gYE1pbiBMaW5rIFRoaWNrbmVzczogJHtuZXdNaW5MaW5rVGhpY2tuZXNzfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLm1pbkxpbmtUaGlja25lc3MgPSBuZXdNaW5MaW5rVGhpY2tuZXNzO1xuXHRcdFx0XHRcdFx0dXBkYXRlTGlua1RoaWNrbmVzcygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgTWF4IExpbmsgVGhpY2tuZXNzIHNsaWRlclxuXHRcdFx0XHRpZiAobWF4TGlua1RoaWNrbmVzc1NsaWRlcikge1xuXHRcdFx0XHRcdG1heExpbmtUaGlja25lc3NTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld01heExpbmtUaGlja25lc3MgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKG1heExpbmtUaGlja25lc3NMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRtYXhMaW5rVGhpY2tuZXNzTGFiZWwudGV4dENvbnRlbnQgPSBgTWF4IExpbmsgVGhpY2tuZXNzOiAke25ld01heExpbmtUaGlja25lc3N9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMubWF4TGlua1RoaWNrbmVzcyA9IG5ld01heExpbmtUaGlja25lc3M7XG5cdFx0XHRcdFx0XHR1cGRhdGVMaW5rVGhpY2tuZXNzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdC8vIEV2ZW50IGxpc3RlbmVyIGZvciBUZXh0IEZhZGUgVGhyZXNob2xkIHNsaWRlclxuXHRcdFx0XHRpZiAoZmFkZVRocmVzaG9sZFNsaWRlcikge1xuXHRcdFx0XHRcdGZhZGVUaHJlc2hvbGRTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0ZhZGVUaHJlc2hvbGQgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGZhZGVUaHJlc2hvbGRMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRmYWRlVGhyZXNob2xkTGFiZWwudGV4dENvbnRlbnQgPSBgRmFkZSBUaHJlc2hvbGQ6ICR7bmV3RmFkZVRocmVzaG9sZH1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy50ZXh0RmFkZVRocmVzaG9sZCA9IG5ld0ZhZGVUaHJlc2hvbGQ7XG5cdFx0XHRcdFx0XHQvLyBVcGRhdGUgdGhlIGxhYmVsIG9wYWNpdHkgaW1tZWRpYXRlbHkgdG8gcmVmbGVjdCB0aGUgbmV3IHRocmVzaG9sZFxuXHRcdFx0XHRcdFx0dXBkYXRlTGFiZWxPcGFjaXR5KGQzLnpvb21UcmFuc2Zvcm0oc3ZnLm5vZGUoKSBhcyBFbGVtZW50KS5rKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIENlbnRlciBGb3JjZSBzbGlkZXJcblx0XHRcdFx0aWYgKGNlbnRlckZvcmNlU2xpZGVyKSB7XG5cdFx0XHRcdFx0Y2VudGVyRm9yY2VTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0NlbnRlckZvcmNlID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChjZW50ZXJGb3JjZUxhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdGNlbnRlckZvcmNlTGFiZWwudGV4dENvbnRlbnQgPSBgQ2VudGVyIEZvcmNlOiAke25ld0NlbnRlckZvcmNlfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR1cGRhdGVDZW50ZXJGb3JjZShuZXdDZW50ZXJGb3JjZSk7XG5cdFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgUmVwZWwgRm9yY2Ugc2xpZGVyXG5cdFx0XHRcdGlmIChyZXBlbEZvcmNlU2xpZGVyKSB7XG5cdFx0XHRcdFx0cmVwZWxGb3JjZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3UmVwZWxGb3JjZSA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRpZiAocmVwZWxGb3JjZUxhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdHJlcGVsRm9yY2VMYWJlbC50ZXh0Q29udGVudCA9IGBSZXBlbCBGb3JjZTogJHtuZXdSZXBlbEZvcmNlfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR1cGRhdGVSZXBlbEZvcmNlKG5ld1JlcGVsRm9yY2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgTGluayBGb3JjZSBzbGlkZXJcblx0XHRcdFx0aWYgKGxpbmtGb3JjZVNsaWRlcikge1xuXHRcdFx0XHRcdGxpbmtGb3JjZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3TGlua0ZvcmNlID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChsaW5rRm9yY2VMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRsaW5rRm9yY2VMYWJlbC50ZXh0Q29udGVudCA9IGBMaW5rIEZvcmNlOiAke25ld0xpbmtGb3JjZX1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dXBkYXRlTGlua0ZvcmNlKG5ld0xpbmtGb3JjZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdC8vIEV2ZW50IGxpc3RlbmVyIGZvciBMaW5rIERpc3RhbmNlIHNsaWRlclxuXHRcdFx0XHRpZiAobGlua0Rpc3RhbmNlU2xpZGVyKSB7XG5cdFx0XHRcdFx0bGlua0Rpc3RhbmNlU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdMaW5rRGlzdGFuY2UgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGxpbmtEaXN0YW5jZUxhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdGxpbmtEaXN0YW5jZUxhYmVsLnRleHRDb250ZW50ID0gYExpbmsgRGlzdGFuY2U6ICR7bmV3TGlua0Rpc3RhbmNlfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR1cGRhdGVMaW5rRGlzdGFuY2UobmV3TGlua0Rpc3RhbmNlKTtcblx0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byB1cGRhdGUgY2VudGVyIGZvcmNlIGJhc2VkIG9uIHRoZSBzbGlkZXIgdmFsdWVcblx0XHRcdFx0Y29uc3QgdXBkYXRlQ2VudGVyRm9yY2UgPSAobmV3Q2VudGVyRm9yY2U6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdHNpbXVsYXRpb24uZm9yY2UoJ2NlbnRlcicsIG51bGwpOyAvLyBSZW1vdmUgdGhlIGV4aXN0aW5nIGNlbnRlciBmb3JjZVxuXHRcdFx0XHRcdHNpbXVsYXRpb24uZm9yY2UoJ2NlbnRlcicsIGQzLmZvcmNlQ2VudGVyKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMikuc3RyZW5ndGgobmV3Q2VudGVyRm9yY2UpKTsgLy8gQWRkIHRoZSBuZXcgY2VudGVyIGZvcmNlXG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwLjMpLnJlc3RhcnQoKTtcblx0XHRcdFx0XHR1cGRhdGVGb3JjZXMoKTtcblx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byB1cGRhdGUgcmVwZWwgZm9yY2UgYmFzZWQgb24gdGhlIHNsaWRlciB2YWx1ZVxuXHRcdFx0XHRjb25zdCB1cGRhdGVSZXBlbEZvcmNlID0gKG5ld1JlcGVsRm9yY2U6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdChzaW11bGF0aW9uLmZvcmNlKCdjaGFyZ2UnKSBhcyBhbnkpLnN0cmVuZ3RoKC1uZXdSZXBlbEZvcmNlKTtcblx0XHRcdFx0XHRzaW11bGF0aW9uLmFscGhhVGFyZ2V0KDAuMykucmVzdGFydCgpO1xuXHRcdFx0XHRcdHVwZGF0ZUZvcmNlcygpO1xuXHRcblx0XHRcdFx0fTtcblx0XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZUxpbmtUaGlja25lc3MgPSAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbGlua1N0cm9rZVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxuXHRcdFx0XHRcdFx0LmRvbWFpbihbdGhpcy5taW5TY29yZSwgdGhpcy5tYXhTY29yZV0pIC8vIFVwZGF0ZSB0aGlzIHRvIG1hdGNoIHlvdXIgc2NvcmUgcmFuZ2Vcblx0XHRcdFx0XHRcdC5yYW5nZShbdGhpcy5taW5MaW5rVGhpY2tuZXNzLCB0aGlzLm1heExpbmtUaGlja25lc3NdKTtcblx0XHRcdFx0XG5cdFx0XHRcdFx0dGhpcy5saW5rU2VsZWN0aW9uLmF0dHIoJ3N0cm9rZS13aWR0aCcsIChkOiBhbnkpID0+IGxpbmtTdHJva2VTY2FsZShkLnNjb3JlKSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdFxuXHRcblx0XHRcdFx0Ly8gRnVuY3Rpb24gdG8gdXBkYXRlIGxpbmsgZm9yY2UgYmFzZWQgb24gdGhlIHNsaWRlciB2YWx1ZVxuXHRcdFx0XHRjb25zdCB1cGRhdGVMaW5rRm9yY2UgPSAobmV3TGlua0ZvcmNlOiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRzaW11bGF0aW9uLmZvcmNlKCdsaW5rJywgbnVsbCk7IC8vIFJlbW92ZSB0aGUgZXhpc3RpbmcgbGluayBmb3JjZVxuXHRcdFx0XHRcdHNpbXVsYXRpb24uZm9yY2UoJ2xpbmsnLCBkMy5mb3JjZUxpbmsodGhpcy52YWxpZGF0ZWRMaW5rcykuaWQoKGQ6IGFueSkgPT4gZC5pZCkuc3RyZW5ndGgobmV3TGlua0ZvcmNlKS5kaXN0YW5jZSh0aGlzLmxpbmtEaXN0YW5jZSkpOyAvLyBBZGQgdGhlIG5ldyBsaW5rIGZvcmNlXG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwLjMpLnJlc3RhcnQoKTsgLy8gU21vb3RobHkgYWRqdXN0IHdpdGhvdXQgYSBmdWxsIHJlc3RhcnRcblx0XHRcdFx0XHR1cGRhdGVGb3JjZXMoKTtcblx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byB1cGRhdGUgbGluayBkaXN0YW5jZSBiYXNlZCBvbiB0aGUgc2xpZGVyIHZhbHVlXG5cdFx0XHRcdGNvbnN0IHVwZGF0ZUxpbmtEaXN0YW5jZSA9IChuZXdMaW5rRGlzdGFuY2U6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdHNpbXVsYXRpb24uZm9yY2UoJ2xpbmsnLCBudWxsKTsgLy8gUmVtb3ZlIHRoZSBleGlzdGluZyBsaW5rIGZvcmNlXG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5mb3JjZSgnbGluaycsIGQzLmZvcmNlTGluayh0aGlzLnZhbGlkYXRlZExpbmtzKS5pZCgoZDogYW55KSA9PiBkLmlkKS5kaXN0YW5jZShuZXdMaW5rRGlzdGFuY2UpLnN0cmVuZ3RoKHRoaXMubGlua0ZvcmNlKSk7IC8vIEFkZCB0aGUgbmV3IGxpbmsgZm9yY2Ugd2l0aCB0aGUgY3VycmVudCBkaXN0YW5jZVxuXHRcdFx0XHRcdHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7IC8vIFNtb290aGx5IGFkanVzdCB3aXRob3V0IGEgZnVsbCByZXN0YXJ0XG5cdFx0XHRcdFx0dXBkYXRlRm9yY2VzKCk7XG5cdFxuXHRcdFx0XHR9O1xuXHRcblx0XHRcdFx0Ly8gRnVuY3Rpb24gdG8gZW5zdXJlIG5ldHdvcmsgc3RvcHMgaW4gY2FzZSBub2RlcyBnZXQgaml0dGVyeVxuXHRcdFx0XHRjb25zdCB1cGRhdGVGb3JjZXMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYSgwLjMpLnJlc3RhcnQoKTsgLy8gUmVzdGFydCB0aGUgc2ltdWxhdGlvbiB3aXRoIGluaXRpYWwgYWxwaGFcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMCkuc3RvcCgpOyAvLyBTdG9wIHRoZSBzaW11bGF0aW9uIGFmdGVyIDUgc2Vjb25kc1xuXHRcdFx0XHRcdH0sIDIwMDApOyBcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSBub2RlIHNpemVzIGJhc2VkIG9uIHRoZSBzbGlkZXIgdmFsdWVcblx0XHRcdFx0Y29uc3QgdXBkYXRlTm9kZVNpemVzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubm9kZVNlbGVjdGlvbi5hdHRyKCdyJywgKGQ6IGFueSkgPT4gZC5pZCA9PT0gdGhpcy5jZW50cmFsTm9kZS5pZCA/IHRoaXMubm9kZVNpemUgKyAzIDogdGhpcy5ub2RlU2l6ZSk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdFxuXHRcdFx0XHRjb25zdCB1cGRhdGVOb2RlTGFiZWxzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFiZWxTZWxlY3Rpb25cblx0XHRcdFx0XHRcdC5hdHRyKCdmb250LXNpemUnLCB0aGlzLm5vZGVMYWJlbFNpemUpIC8vIFVwZGF0ZSBmb250IHNpemUgZm9yIG5vZGUgbGFiZWxzXG5cdFx0XHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSwgdHJ1ZSkpOyAvLyBVcGRhdGUgdGV4dCBiYXNlZCBvbiBtYXggbGFiZWwgY2hhcmFjdGVyc1xuXHRcdFx0XHR9O1xuXHRcdFxuXHRcdFx0XHRjb25zdCB1cGRhdGVMaW5rTGFiZWxTaXplcyA9ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmxpbmtMYWJlbFNlbGVjdGlvbi5hdHRyKCdmb250LXNpemUnLCB0aGlzLmxpbmtMYWJlbFNpemUpOyAvLyBVcGRhdGUgZm9udCBzaXplIGZvciBsaW5rIGxhYmVsc1xuXHRcdFx0XHR9O1xuXHRcdFxuXHRcdFx0XHRjb25zdCB1cGRhdGVOb2RlTGFiZWxTaXplcyA9ICgpID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZygndXBkYXRpbmcgbm9kZSBsYWJlbHMnLCB0aGlzLm5vZGVMYWJlbFNpemUpO1xuXHRcdFx0XHRcdHRoaXMubGFiZWxTZWxlY3Rpb24uYXR0cignZm9udC1zaXplJywgdGhpcy5ub2RlTGFiZWxTaXplKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gRnVuY3Rpb24gdG8gZGVib3VuY2UgY2FsbHMgdG8gdXBkYXRlVmlzdWFsaXphdGlvblxuXHRcdFx0XHRmdW5jdGlvbiBkZWJvdW5jZShmdW5jOiBGdW5jdGlvbiwgd2FpdDogbnVtYmVyKSB7XG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRcdFx0XHRcdHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpLCB3YWl0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFxuXHRcblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIFNjb3JlIFRocmVzaG9sZCBzbGlkZXJcblx0XHRcdFx0aWYgKHNjb3JlVGhyZXNob2xkU2xpZGVyICAmJiAhdGhpcy5zZXR0aW5nc0luc3RhbnRpYXRlZCkge1xuXHRcdFx0XHRcdC8vIEltbWVkaWF0ZSB1cGRhdGUgb2YgbGFiZWwgdGV4dFxuXHRcdFx0XHRcdHNjb3JlVGhyZXNob2xkU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdTY29yZVRocmVzaG9sZCA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRpZiAoc2NvcmVUaHJlc2hvbGRMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRzY29yZVRocmVzaG9sZExhYmVsLnRleHRDb250ZW50ID0gYE1pbiBSZWxldmFuY2U6ICR7bmV3U2NvcmVUaHJlc2hvbGR9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XG5cdFx0XHRcdFx0Ly8gRGVib3VuY2VkIHVwZGF0ZVZpc3VhbGl6YXRpb24gZnVuY3Rpb25cblx0XHRcdFx0XHRjb25zdCBkZWJvdW5jZWRVcGRhdGVWaXN1YWxpemF0aW9uID0gZGVib3VuY2UoKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3U2NvcmVUaHJlc2hvbGQgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0dXBkYXRlVmlzdWFsaXphdGlvbihuZXdTY29yZVRocmVzaG9sZCk7XG5cdFx0XHRcdFx0fSwgNTAwKTsgLy8gQWRqdXN0IHRoZSBkZWxheSAoNTAwbXMpIGFzIG5lZWRlZFxuXHRcblx0XHRcdFx0XHRzY29yZVRocmVzaG9sZFNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGRlYm91bmNlZFVwZGF0ZVZpc3VhbGl6YXRpb24pO1xuXHRcblx0XHRcdFx0XHR0aGlzLnNldHRpbmdzSW5zdGFudGlhdGVkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIE5vZGUgU2l6ZSBzbGlkZXJcblx0XHRcdFx0aWYgKG5vZGVTaXplU2xpZGVyKSB7XG5cdFx0XHRcdFx0bm9kZVNpemVTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld05vZGVTaXplID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChub2RlU2l6ZUxhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGVTaXplTGFiZWwudGV4dENvbnRlbnQgPSBgTm9kZSBTaXplOiAke25ld05vZGVTaXplfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLm5vZGVTaXplID0gbmV3Tm9kZVNpemU7XG5cdFx0XHRcdFx0XHR1cGRhdGVOb2RlU2l6ZXMoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIExpbmsgVGhpY2tuZXNzIHNsaWRlclxuXHRcdFx0XHRpZiAobGluZVRoaWNrbmVzc1NsaWRlcikge1xuXHRcdFx0XHRcdGxpbmVUaGlja25lc3NTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdsaW5lIHRoaWNraW5nJyk7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdMaW5lVGhpY2tuZXNzID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMubGlua1RoaWNrbmVzcyA9IG5ld0xpbmVUaGlja25lc3M7XG5cdFx0XHRcdFx0XHRpZiAobGluZVRoaWNrbmVzc0xhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdGxpbmVUaGlja25lc3NMYWJlbC50ZXh0Q29udGVudCA9IGBMaW5lIFRoaWNrbmVzczogJHtuZXdMaW5lVGhpY2tuZXNzfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR1cGRhdGVMaW5rVGhpY2tuZXNzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdC8vIENsb3NlIGRyb3Bkb3duIG1lbnUgb24gWCBpY29uIGNsaWNrXG5cdFx0XHRcdGNvbnN0IGNsb3NlSWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9zZS1pY29uJyk7XG5cdFx0XHRcdGlmIChjbG9zZUljb24pIHtcblx0XHRcdFx0XHRjbG9zZUljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnQ2xvc2UgaWNvbiBDTElDS0VEJyk7XG5cdFxuXHRcdFx0XHRcdFx0ZHJvcGRvd25NZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gUmVmcmVzaCBmdW5jdGlvbmFsaXR5IGZvciByZWZyZXNoIGljb24gY2xpY2sgKG9wdGlvbmFsLCBpbXBsZW1lbnQgYXMgbmVlZGVkKVxuXHRcdFx0XHRjb25zdCByZWZyZXNoSWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWZyZXNoLWljb24nKTtcblx0XHRcdFx0aWYgKHJlZnJlc2hJY29uKSB7XG5cdFx0XHRcdFx0cmVmcmVzaEljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZygnUmVmcmVzaCBpY29uIGNsaWNrZWQnKTtcblx0XHRcdFx0XHRcdHJlc2V0VG9EZWZhdWx0KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byByZXNldCBhbGwgdmFyaWFibGVzIHRvIGRlZmF1bHQgdXNpbmcgdGhlIGdsb2JhbCBkZWZhdWx0IGNvbnN0YW50XG5cdFx0XHRcdGNvbnN0IHJlc2V0VG9EZWZhdWx0ID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGQgPSBERUZBVUxUX05FVFdPUktfU0VUVElOR1Muc2NvcmVUaHJlc2hvbGQ7XG5cdFx0XHRcdFx0dGhpcy5ub2RlU2l6ZSA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5ub2RlU2l6ZTtcblx0XHRcdFx0XHR0aGlzLmxpbmtUaGlja25lc3MgPSBERUZBVUxUX05FVFdPUktfU0VUVElOR1MubGlua1RoaWNrbmVzcztcblx0XHRcdFx0XHR0aGlzLnJlcGVsRm9yY2UgPSBERUZBVUxUX05FVFdPUktfU0VUVElOR1MucmVwZWxGb3JjZTtcblx0XHRcdFx0XHR0aGlzLmxpbmtGb3JjZSA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5saW5rRm9yY2U7XG5cdFx0XHRcdFx0dGhpcy5saW5rRGlzdGFuY2UgPSBERUZBVUxUX05FVFdPUktfU0VUVElOR1MubGlua0Rpc3RhbmNlO1xuXHRcdFx0XHRcdHRoaXMuY2VudGVyRm9yY2UgPSBERUZBVUxUX05FVFdPUktfU0VUVElOR1MuY2VudGVyRm9yY2U7XG5cdFxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBzbGlkZXIgdmFsdWVzXG5cdFx0XHRcdFx0aWYgKHNjb3JlVGhyZXNob2xkU2xpZGVyKSBzY29yZVRocmVzaG9sZFNsaWRlci52YWx1ZSA9IGAke3RoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGR9YDtcblx0XHRcdFx0XHRpZiAoc2NvcmVUaHJlc2hvbGRMYWJlbCkgc2NvcmVUaHJlc2hvbGRMYWJlbC50ZXh0Q29udGVudCA9IGByZWxldmFuY2UgVGhyZXNob2xkOiAke3RoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGR9YDtcblx0XHRcdFx0XHRpZiAobm9kZVNpemVTbGlkZXIpIG5vZGVTaXplU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5ub2RlU2l6ZX1gO1xuXHRcdFx0XHRcdGlmIChub2RlU2l6ZUxhYmVsKSBub2RlU2l6ZUxhYmVsLnRleHRDb250ZW50ID0gYE5vZGUgU2l6ZTogJHt0aGlzLm5vZGVTaXplfWA7XG5cdFx0XHRcdFx0aWYgKGxpbmVUaGlja25lc3NTbGlkZXIpIGxpbmVUaGlja25lc3NTbGlkZXIudmFsdWUgPSBgJHt0aGlzLmxpbmtUaGlja25lc3N9YDtcblx0XHRcdFx0XHRpZiAobGluZVRoaWNrbmVzc0xhYmVsKSBsaW5lVGhpY2tuZXNzTGFiZWwudGV4dENvbnRlbnQgPSBgTGluZSBUaGlja25lc3M6ICR7dGhpcy5saW5rVGhpY2tuZXNzfWA7XG5cdFx0XHRcdFx0aWYgKGNlbnRlckZvcmNlU2xpZGVyKSBjZW50ZXJGb3JjZVNsaWRlci52YWx1ZSA9IGAke3RoaXMuY2VudGVyRm9yY2V9YDtcblx0XHRcdFx0XHRpZiAoY2VudGVyRm9yY2VMYWJlbCkgY2VudGVyRm9yY2VMYWJlbC50ZXh0Q29udGVudCA9IGBDZW50ZXIgRm9yY2U6ICR7dGhpcy5jZW50ZXJGb3JjZX1gO1xuXHRcdFx0XHRcdGlmIChyZXBlbEZvcmNlU2xpZGVyKSByZXBlbEZvcmNlU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5yZXBlbEZvcmNlfWA7XG5cdFx0XHRcdFx0aWYgKHJlcGVsRm9yY2VMYWJlbCkgcmVwZWxGb3JjZUxhYmVsLnRleHRDb250ZW50ID0gYFJlcGVsIEZvcmNlOiAke3RoaXMucmVwZWxGb3JjZX1gO1xuXHRcdFx0XHRcdGlmIChsaW5rRm9yY2VTbGlkZXIpIGxpbmtGb3JjZVNsaWRlci52YWx1ZSA9IGAke3RoaXMubGlua0ZvcmNlfWA7XG5cdFx0XHRcdFx0aWYgKGxpbmtGb3JjZUxhYmVsKSBsaW5rRm9yY2VMYWJlbC50ZXh0Q29udGVudCA9IGBMaW5rIEZvcmNlOiAke3RoaXMubGlua0ZvcmNlfWA7XG5cdFx0XHRcdFx0aWYgKGxpbmtEaXN0YW5jZVNsaWRlcikgbGlua0Rpc3RhbmNlU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5saW5rRGlzdGFuY2V9YDtcblx0XHRcdFx0XHRpZiAobGlua0Rpc3RhbmNlTGFiZWwpIGxpbmtEaXN0YW5jZUxhYmVsLnRleHRDb250ZW50ID0gYExpbmsgRGlzdGFuY2U6ICR7dGhpcy5saW5rRGlzdGFuY2V9YDtcblx0XHRcdFx0XHRpZiAoZmFkZVRocmVzaG9sZFNsaWRlcikgZmFkZVRocmVzaG9sZFNsaWRlci52YWx1ZSA9IGAke3RoaXMudGV4dEZhZGVUaHJlc2hvbGR9YDtcblx0XHRcdFx0XHRpZiAoZmFkZVRocmVzaG9sZExhYmVsKSBmYWRlVGhyZXNob2xkTGFiZWwudGV4dENvbnRlbnQgPSBgRmFkZSBUaHJlc2hvbGQ6ICR7dGhpcy50ZXh0RmFkZVRocmVzaG9sZH1gO1xuXHRcdFx0XHRcdGlmIChtaW5MaW5rVGhpY2tuZXNzU2xpZGVyKSBtaW5MaW5rVGhpY2tuZXNzU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5taW5MaW5rVGhpY2tuZXNzfWA7XG5cdFx0XHRcdFx0aWYgKG1pbkxpbmtUaGlja25lc3NMYWJlbCkgbWluTGlua1RoaWNrbmVzc0xhYmVsLnRleHRDb250ZW50ID0gYE1pbiBMaW5rIFRoaWNrbmVzczogJHt0aGlzLm1pbkxpbmtUaGlja25lc3N9YDtcblx0XHRcdFx0XHRpZiAobWF4TGlua1RoaWNrbmVzc1NsaWRlcikgbWF4TGlua1RoaWNrbmVzc1NsaWRlci52YWx1ZSA9IGAke3RoaXMubWF4TGlua1RoaWNrbmVzc31gO1xuXHRcdFx0XHRcdGlmIChtYXhMaW5rVGhpY2tuZXNzTGFiZWwpIG1heExpbmtUaGlja25lc3NMYWJlbC50ZXh0Q29udGVudCA9IGBNYXggTGluayBUaGlja25lc3M6ICR7dGhpcy5tYXhMaW5rVGhpY2tuZXNzfWA7XG5cblx0XHRcdFx0XHQvLyBSZWFwcGx5IHNldHRpbmdzXG5cdFx0XHRcdFx0dXBkYXRlTm9kZVNpemVzKCk7XG5cdFx0XHRcdFx0dXBkYXRlTGlua1RoaWNrbmVzcygpO1xuXHRcblx0XHRcdFx0XHQvLyBVcGRhdGUgdGhlIHNpbXVsYXRpb24gZm9yY2VzXG5cdFx0XHRcdFx0c2ltdWxhdGlvblxuXHRcdFx0XHRcdFx0LmZvcmNlKCdjZW50ZXInLCBkMy5mb3JjZUNlbnRlcih3aWR0aCAvIDIsIGhlaWdodCAvIDIpLnN0cmVuZ3RoKHRoaXMuY2VudGVyRm9yY2UpKVxuXHRcdFx0XHRcdFx0LmZvcmNlKCdjaGFyZ2UnLCBkMy5mb3JjZU1hbnlCb2R5KCkuc3RyZW5ndGgoLXRoaXMucmVwZWxGb3JjZSkpXG5cdFx0XHRcdFx0XHQuZm9yY2UoJ2xpbmsnLCBkMy5mb3JjZUxpbmsoKS5pZCgoZDogYW55KSA9PiBkLmlkKS5zdHJlbmd0aCh0aGlzLmxpbmtGb3JjZSkuZGlzdGFuY2UodGhpcy5saW5rRGlzdGFuY2UpKTtcblx0XG5cdFx0XHRcdFx0Ly8gUmVzdGFydCB0aGUgc2ltdWxhdGlvbiB3aXRoIHRoZSBuZXcgc2V0dGluZ3Ncblx0XHRcdFx0XHRzaW11bGF0aW9uLmFscGhhKDAuMykuYWxwaGFUYXJnZXQoMCkucmVzdGFydCgpO1xuXHRcdFx0XHRcdHVwZGF0ZVZpc3VhbGl6YXRpb24odGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZCk7XG5cdFx0XHRcdH07XG5cdFxuXHRcblx0XHRcdHRoaXMuc2V0dGluZ3NJbnN0YW50aWF0ZWQgPSB0cnVlO1xuXHRcblx0XHR9XG5cdFxuXHRcdFx0Ly8gV2F0Y2ggZm9yIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnRseSB2aWV3ZWQgbm90ZVxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlLW9wZW4nLCAoZmlsZSkgPT4ge1xuXHRcdFx0XHRpZiAoZmlsZSAmJiAodGhpcy5jdXJyZW50Tm90ZUtleSAhPT0gZmlsZS5wYXRoKSAmJiAhdGhpcy5pc0hvdmVyaW5nKSB7XG5cdFx0XHRcdFx0Ly8gaWYgKCF0aGlzLnVwZGF0aW5nVmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRcdFx0dGhpcy5jdXJyZW50Tm90ZUtleSA9IGZpbGUucGF0aDtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdDdXJyZW50IE5vdGUgS2V5OicsIHRoaXMuY3VycmVudE5vdGVLZXkpO1xuXHRcdFx0XHRcdFx0dXBkYXRlVmlzdWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdC8vIH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XG5cdFx0XHQvLyBJbml0aWFsIGNhbGwgdG8gY3JlYXRlIHRoZSB2aXN1YWxpemF0aW9uXG5cdFx0XHR1cGRhdGVWaXN1YWxpemF0aW9uKCk7XG5cdFxuXHRcdH0sIDEwMDApO1xuXG5cdH1cblxufVxuXG4vKlxuXHRNYWluIENvbG9yc1xuXHRNZW51IHRleHQ6ICNhM2FlY2Jcblx0SG92ZXJlZE92ZXJOb2RlOiAjZDQ2ZWJlXG5cdE5vcm1hbE5vZGU6ICM5MjZlYzlcblx0Y2VudHJhbE5vZGU6ICM3Yzg1OTRcblx0TGluazogIzRjNzc4N1xuXHRTbGlkZXJLbm9iOiAjZjNlZTVkXG4qL1xuXHRcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXlQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIHNldHRpbmdzOiBNeVBsdWdpblNldHRpbmdzO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBuZXcgdmlld1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlldyhcIk15IEl0ZW0gVmlld1wiLCAobGVhZjogV29ya3NwYWNlTGVhZikgPT4gbmV3IE15SXRlbVZpZXcobGVhZikpO1xuXG5cdFx0IC8vIFJlZ2lzdGVyIGhvdmVyIGxpbmsgc291cmNlXG5cdFx0IHRoaXMucmVnaXN0ZXJIb3ZlckxpbmtTb3VyY2UoJ0QzJywge1xuXHRcdFx0ZGlzcGxheTogJ0QzIEhvdmVyIExpbmsgU291cmNlJyxcblx0XHRcdGRlZmF1bHRNb2Q6IHRydWVcblx0XHR9KTtcblxuICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gaWNvbiBpbiB0aGUgbGVmdCByaWJib24uXG4gICAgICAgIGNvbnN0IHJpYmJvbkljb25FbCA9IHRoaXMuYWRkUmliYm9uSWNvbignZGljZScsICdTbWFydCBHcmFwaCcsIChldnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgaWNvbi5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBsZWFmIGluIHRoZSBjdXJyZW50IHdvcmtzcGFjZVxuICAgICAgICAgICAgbGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZih0cnVlKTtcbiAgICBcbiAgICAgICAgICAgIC8vIFNldCB0aGUgbmV3IGxlYWYncyB2aWV3IHRvIHlvdXIgY3VzdG9tIHZpZXdcbiAgICAgICAgICAgIGxlYWYuc2V0Vmlld1N0YXRlKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIk15IEl0ZW0gVmlld1wiLFxuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAvLyBQZXJmb3JtIGFkZGl0aW9uYWwgdGhpbmdzIHdpdGggdGhlIHJpYmJvblxuICAgICAgICByaWJib25JY29uRWwuYWRkQ2xhc3MoJ215LXBsdWdpbi1yaWJib24tY2xhc3MnKTtcblxuICAgICAgICAvLyBUaGlzIGFkZHMgYSBzdGF0dXMgYmFyIGl0ZW0gdG8gdGhlIGJvdHRvbSBvZiB0aGUgYXBwLiBEb2VzIG5vdCB3b3JrIG9uIG1vYmlsZSBhcHBzLlxuICAgICAgICBjb25zdCBzdGF0dXNCYXJJdGVtRWwgPSB0aGlzLmFkZFN0YXR1c0Jhckl0ZW0oKTtcbiAgICAgICAgc3RhdHVzQmFySXRlbUVsLnNldFRleHQoJ1N0YXR1cyBCYXIgVGV4dCcpO1xuXG4gICAgICAgIC8vIFRoaXMgYWRkcyBhIHNpbXBsZSBjb21tYW5kIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBhbnl3aGVyZVxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6ICdvcGVuLXNhbXBsZS1tb2RhbC1zaW1wbGUnLFxuICAgICAgICAgICAgbmFtZTogJ09wZW4gc2FtcGxlIG1vZGFsIChzaW1wbGUpJyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxlYWYgaW4gdGhlIGN1cnJlbnQgd29ya3NwYWNlXG4gICAgICAgICAgICAgICAgbGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZih0cnVlKTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBuZXcgbGVhZidzIHZpZXcgdG8geW91ciBjdXN0b20gdmlld1xuICAgICAgICAgICAgICAgIGxlYWYuc2V0Vmlld1N0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJNeSBJdGVtIFZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhpcyBhZGRzIGFuIGVkaXRvciBjb21tYW5kIHRoYXQgY2FuIHBlcmZvcm0gc29tZSBvcGVyYXRpb24gb24gdGhlIGN1cnJlbnQgZWRpdG9yIGluc3RhbmNlXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ3NhbXBsZS1lZGl0b3ItY29tbWFuZCcsXG4gICAgICAgICAgICBuYW1lOiAnU2FtcGxlIGVkaXRvciBjb21tYW5kJyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxlYWYgaW4gdGhlIGN1cnJlbnQgd29ya3NwYWNlXG4gICAgICAgICAgICAgICAgbGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZih0cnVlKTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBuZXcgbGVhZidzIHZpZXcgdG8geW91ciBjdXN0b20gdmlld1xuICAgICAgICAgICAgICAgIGxlYWYuc2V0Vmlld1N0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJNeSBJdGVtIFZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUaGlzIGFkZHMgYSBjb21wbGV4IGNvbW1hbmQgdGhhdCBjYW4gY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwIGFsbG93cyBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmRcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgICAgICAgIGlkOiAnb3Blbi1zYW1wbGUtbW9kYWwtY29tcGxleCcsXG4gICAgICAgICAgICBuYW1lOiAnT3BlbiBzYW1wbGUgbW9kYWwgKGNvbXBsZXgpJyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxlYWYgaW4gdGhlIGN1cnJlbnQgd29ya3NwYWNlXG4gICAgICAgICAgICAgICAgbGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZih0cnVlKTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBuZXcgbGVhZidzIHZpZXcgdG8geW91ciBjdXN0b20gdmlld1xuICAgICAgICAgICAgICAgIGxlYWYuc2V0Vmlld1N0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJNeSBJdGVtIFZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUaGlzIGFkZHMgYSBzZXR0aW5ncyB0YWIgc28gdGhlIHVzZXIgY2FuIGNvbmZpZ3VyZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIHBsdWdpblxuICAgICAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IFNhbXBsZVNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcblxuICAgICAgICAvLyBJZiB0aGUgcGx1Z2luIGhvb2tzIHVwIGFueSBnbG9iYWwgRE9NIGV2ZW50cyAob24gcGFydHMgb2YgdGhlIGFwcCB0aGF0IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgcGx1Z2luKVxuICAgICAgICAvLyBVc2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyIHdoZW4gdGhpcyBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJEb21FdmVudChkb2N1bWVudCwgJ2NsaWNrJywgKGV2dDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsaWNrJywgZXZ0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV2hlbiByZWdpc3RlcmluZyBpbnRlcnZhbHMsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJJbnRlcnZhbCh3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gY29uc29sZS5sb2coJ3NldEludGVydmFsJyksIDUgKiA2MCAqIDEwMDApKTtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHt9XG5cbiAgICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG59XG5cbmNsYXNzIFNhbXBsZVNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgICBwbHVnaW46IE15UGx1Z2luO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTXlQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7Y29udGFpbmVyRWx9ID0gdGhpcztcblxuICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoJ1NldHRpbmcgIzEnKVxuICAgICAgICAgICAgLnNldERlc2MoJ0l0XFwncyBhIHNlY3JldCcpXG4gICAgICAgICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHRcbiAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgc2VjcmV0Li4uIFRoaXMgd2lsbCBjaGFuZ2UgZXZlcnl0aGluZycpXG4gICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm15U2V0dGluZylcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm15U2V0dGluZyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOXG4gICAgOiBiIDwgYSA/IC0xXG4gICAgOiBiID4gYSA/IDFcbiAgICA6IGIgPj0gYSA/IDBcbiAgICA6IE5hTjtcbn1cbiIsICJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGRlc2NlbmRpbmcgZnJvbSBcIi4vZGVzY2VuZGluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaXNlY3RvcihmKSB7XG4gIGxldCBjb21wYXJlMSwgY29tcGFyZTIsIGRlbHRhO1xuXG4gIC8vIElmIGFuIGFjY2Vzc29yIGlzIHNwZWNpZmllZCwgcHJvbW90ZSBpdCB0byBhIGNvbXBhcmF0b3IuIEluIHRoaXMgY2FzZSB3ZVxuICAvLyBjYW4gdGVzdCB3aGV0aGVyIHRoZSBzZWFyY2ggdmFsdWUgaXMgKHNlbGYtKSBjb21wYXJhYmxlLiBXZSBjYW5cdTIwMTl0IGRvIHRoaXNcbiAgLy8gZm9yIGEgY29tcGFyYXRvciAoZXhjZXB0IGZvciBzcGVjaWZpYywga25vd24gY29tcGFyYXRvcnMpIGJlY2F1c2Ugd2UgY2FuXHUyMDE5dFxuICAvLyB0ZWxsIGlmIHRoZSBjb21wYXJhdG9yIGlzIHN5bW1ldHJpYywgYW5kIGFuIGFzeW1tZXRyaWMgY29tcGFyYXRvciBjYW5cdTIwMTl0IGJlXG4gIC8vIHVzZWQgdG8gdGVzdCB3aGV0aGVyIGEgc2luZ2xlIHZhbHVlIGlzIGNvbXBhcmFibGUuXG4gIGlmIChmLmxlbmd0aCAhPT0gMikge1xuICAgIGNvbXBhcmUxID0gYXNjZW5kaW5nO1xuICAgIGNvbXBhcmUyID0gKGQsIHgpID0+IGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgICBkZWx0YSA9IChkLCB4KSA9PiBmKGQpIC0geDtcbiAgfSBlbHNlIHtcbiAgICBjb21wYXJlMSA9IGYgPT09IGFzY2VuZGluZyB8fCBmID09PSBkZXNjZW5kaW5nID8gZiA6IHplcm87XG4gICAgY29tcGFyZTIgPSBmO1xuICAgIGRlbHRhID0gZjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8gPSAwLCBoaSA9IGEubGVuZ3RoKSB7XG4gICAgaWYgKGxvIDwgaGkpIHtcbiAgICAgIGlmIChjb21wYXJlMSh4LCB4KSAhPT0gMCkgcmV0dXJuIGhpO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICAgIGlmIChjb21wYXJlMihhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8PSAwKSBsbyA9IG1pZCArIDE7XG4gICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICB9IHdoaWxlIChsbyA8IGhpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudGVyKGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGNvbnN0IGkgPSBsZWZ0KGEsIHgsIGxvLCBoaSAtIDEpO1xuICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpO1xuICB9XG5cbiAgcmV0dXJuIHtsZWZ0LCBjZW50ZXIsIHJpZ2h0fTtcbn1cblxuZnVuY3Rpb24gemVybygpIHtcbiAgcmV0dXJuIDA7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBiaXNlY3RvciBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxuY29uc3QgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbmV4cG9ydCBjb25zdCBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCBjb25zdCBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgY29uc3QgYmlzZWN0Q2VudGVyID0gYmlzZWN0b3IobnVtYmVyKS5jZW50ZXI7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsICJjb25zdCBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZnVuY3Rpb24gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIGNvbnN0IHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKHN0ZXApKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlciksXG4gICAgICBmYWN0b3IgPSBlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDE7XG4gIGxldCBpMSwgaTIsIGluYztcbiAgaWYgKHBvd2VyIDwgMCkge1xuICAgIGluYyA9IE1hdGgucG93KDEwLCAtcG93ZXIpIC8gZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAqIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgKiBpbmMpO1xuICAgIGlmIChpMSAvIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAvIGluYyA+IHN0b3ApIC0taTI7XG4gICAgaW5jID0gLWluYztcbiAgfSBlbHNlIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgcG93ZXIpICogZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAvIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgLyBpbmMpO1xuICAgIGlmIChpMSAqIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAqIGluYyA+IHN0b3ApIC0taTI7XG4gIH1cbiAgaWYgKGkyIDwgaTEgJiYgMC41IDw9IGNvdW50ICYmIGNvdW50IDwgMikgcmV0dXJuIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCAqIDIpO1xuICByZXR1cm4gW2kxLCBpMiwgaW5jXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoIShjb3VudCA+IDApKSByZXR1cm4gW107XG4gIGlmIChzdGFydCA9PT0gc3RvcCkgcmV0dXJuIFtzdGFydF07XG4gIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQsIFtpMSwgaTIsIGluY10gPSByZXZlcnNlID8gdGlja1NwZWMoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gIGlmICghKGkyID49IGkxKSkgcmV0dXJuIFtdO1xuICBjb25zdCBuID0gaTIgLSBpMSArIDEsIHRpY2tzID0gbmV3IEFycmF5KG4pO1xuICBpZiAocmV2ZXJzZSkge1xuICAgIGlmIChpbmMgPCAwKSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAvIC1pbmM7XG4gICAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAqIGluYztcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgKiBpbmM7XG4gIH1cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBpbmMgPSByZXZlcnNlID8gdGlja0luY3JlbWVudChzdG9wLCBzdGFydCwgY291bnQpIDogdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICByZXR1cm4gKHJldmVyc2UgPyAtMSA6IDEpICogKGluYyA8IDAgPyAxIC8gLWluYyA6IGluYyk7XG59XG4iLCAidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCAiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwgImltcG9ydCBuYW1lc3BhY2VzIGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICBpZiAoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsIGkpKSAhPT0gXCJ4bWxuc1wiKSBuYW1lID0gbmFtZS5zbGljZShpICsgMSk7XG4gIHJldHVybiBuYW1lc3BhY2VzLmhhc093blByb3BlcnR5KHByZWZpeCkgPyB7c3BhY2U6IG5hbWVzcGFjZXNbcHJlZml4XSwgbG9jYWw6IG5hbWV9IDogbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbn1cbiIsICJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZS5qc1wiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIiwgImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsICJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCAiLy8gR2l2ZW4gc29tZXRoaW5nIGFycmF5IGxpa2UgKG9yIG51bGwpLCByZXR1cm5zIHNvbWV0aGluZyB0aGF0IGlzIHN0cmljdGx5IGFuXG4vLyBhcnJheS4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGFycmF5LWxpa2Ugb2JqZWN0cyBwYXNzZWQgdG8gZDMuc2VsZWN0QWxsXG4vLyBvciBzZWxlY3Rpb24uc2VsZWN0QWxsIGFyZSBjb252ZXJ0ZWQgaW50byBwcm9wZXIgYXJyYXlzIHdoZW4gY3JlYXRpbmcgYVxuLy8gc2VsZWN0aW9uOyB3ZSBkb25cdTIwMTl0IGV2ZXIgd2FudCB0byBjcmVhdGUgYSBzZWxlY3Rpb24gYmFja2VkIGJ5IGEgbGl2ZVxuLy8gSFRNTENvbGxlY3Rpb24gb3IgTm9kZUxpc3QuIEhvd2V2ZXIsIG5vdGUgdGhhdCBzZWxlY3Rpb24uc2VsZWN0QWxsIHdpbGwgdXNlIGFcbi8vIHN0YXRpYyBOb2RlTGlzdCBhcyBhIGdyb3VwLCBzaW5jZSBpdCBzYWZlbHkgZGVyaXZlZCBmcm9tIHF1ZXJ5U2VsZWN0b3JBbGwuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcnJheSh4KSB7XG4gIHJldHVybiB4ID09IG51bGwgPyBbXSA6IEFycmF5LmlzQXJyYXkoeCkgPyB4IDogQXJyYXkuZnJvbSh4KTtcbn1cbiIsICJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4uL2FycmF5LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3JBbGwgZnJvbSBcIi4uL3NlbGVjdG9yQWxsLmpzXCI7XG5cbmZ1bmN0aW9uIGFycmF5QWxsKHNlbGVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGFycmF5KHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ID09PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IGFycmF5QWxsKHNlbGVjdCk7XG4gIGVsc2Ugc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZE1hdGNoZXIoc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuIiwgImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwgImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmlsdGVyID0gQXJyYXkucHJvdG90eXBlLmZpbHRlcjtcblxuZnVuY3Rpb24gY2hpbGRyZW4oKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbkZpbHRlcihtYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMuY2hpbGRyZW4sIG1hdGNoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0QWxsKG1hdGNoID09IG51bGwgPyBjaGlsZHJlblxuICAgICAgOiBjaGlsZHJlbkZpbHRlcih0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLCAiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9uXHUyMDE5dCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc25cdTIwMTl0IHdvcnJpZWQgYWJvdXQgXHUyMDFDbGl2ZVx1MjAxRCBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb25cdTIwMTl0OyB3ZVx1MjAxOWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwgImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2V4aXQgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvbmVudGVyLCBvbnVwZGF0ZSwgb25leGl0KSB7XG4gIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xuICBpZiAodHlwZW9mIG9uZW50ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGVudGVyID0gb25lbnRlcihlbnRlcik7XG4gICAgaWYgKGVudGVyKSBlbnRlciA9IGVudGVyLnNlbGVjdGlvbigpO1xuICB9IGVsc2Uge1xuICAgIGVudGVyID0gZW50ZXIuYXBwZW5kKG9uZW50ZXIgKyBcIlwiKTtcbiAgfVxuICBpZiAob251cGRhdGUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZSA9IG9udXBkYXRlKHVwZGF0ZSk7XG4gICAgaWYgKHVwZGF0ZSkgdXBkYXRlID0gdXBkYXRlLnNlbGVjdGlvbigpO1xuICB9XG4gIGlmIChvbmV4aXQgPT0gbnVsbCkgZXhpdC5yZW1vdmUoKTsgZWxzZSBvbmV4aXQoZXhpdCk7XG4gIHJldHVybiBlbnRlciAmJiB1cGRhdGUgPyBlbnRlci5tZXJnZSh1cGRhdGUpLm9yZGVyKCkgOiB1cGRhdGU7XG59XG4iLCAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xuICAgICAgICBuZXh0ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29tcGFyZSkge1xuICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgZnVuY3Rpb24gY29tcGFyZU5vZGUoYSwgYikge1xuICAgIHJldHVybiBhICYmIGIgPyBjb21wYXJlKGEuX19kYXRhX18sIGIuX19kYXRhX18pIDogIWEgLSAhYjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHNvcnRncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHNvcnRncm91cCA9IHNvcnRncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNvcnRncm91cFtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvcnRncm91cC5zb3J0KGNvbXBhcmVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsICJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwgImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwgImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwgImZ1bmN0aW9uIHRleHRSZW1vdmUoKSB7XG4gIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gdGV4dFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gdGV4dEZ1bmN0aW9uXG4gICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7XG59XG4iLCAiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCAiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsICJmdW5jdGlvbiBsb3dlcigpIHtcbiAgaWYgKHRoaXMucHJldmlvdXNTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsIHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xufVxuIiwgImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsICJmdW5jdGlvbiByZW1vdmUoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmVtb3ZlKTtcbn1cbiIsICJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCAiZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQsIHRoaXMuX19kYXRhX18pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgIGlmICghb24pIHJldHVybjtcbiAgICBmb3IgKHZhciBqID0gMCwgaSA9IC0xLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5vcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25BZGQodHlwZW5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb24sIG8sIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKHZhbHVlKTtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAoKG8gPSBvbltqXSkudHlwZSA9PT0gdHlwZW5hbWUudHlwZSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciA9IGxpc3RlbmVyLCBvLm9wdGlvbnMgPSBvcHRpb25zKTtcbiAgICAgICAgby52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlbmFtZS50eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgbyA9IHt0eXBlOiB0eXBlbmFtZS50eXBlLCBuYW1lOiB0eXBlbmFtZS5uYW1lLCB2YWx1ZTogdmFsdWUsIGxpc3RlbmVyOiBsaXN0ZW5lciwgb3B0aW9uczogb3B0aW9uc307XG4gICAgaWYgKCFvbikgdGhpcy5fX29uID0gW29dO1xuICAgIGVsc2Ugb24ucHVzaChvKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZW5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB0eXBlbmFtZXMgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIpLCBpLCBuID0gdHlwZW5hbWVzLmxlbmd0aCwgdDtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgb24gPSB0aGlzLm5vZGUoKS5fX29uO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKHQgPSB0eXBlbmFtZXNbaV0pLnR5cGUgPT09IG8udHlwZSAmJiB0Lm5hbWUgPT09IG8ubmFtZSkge1xuICAgICAgICAgIHJldHVybiBvLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIG9uID0gdmFsdWUgPyBvbkFkZCA6IG9uUmVtb3ZlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgb3B0aW9ucykpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qKCkge1xuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgeWllbGQgbm9kZTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgc2VsZWN0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RDaGlsZCBmcm9tIFwiLi9zZWxlY3RDaGlsZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbiBmcm9tIFwiLi9zZWxlY3RDaGlsZHJlbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdGEgZnJvbSBcIi4vZGF0YS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbnRlciBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9leGl0IGZyb20gXCIuL2V4aXQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fam9pbiBmcm9tIFwiLi9qb2luLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXMuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Nsb25lIGZyb20gXCIuL2Nsb25lLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2l0ZXJhdG9yIGZyb20gXCIuL2l0ZXJhdG9yLmpzXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX3NlbGVjdGlvbigpIHtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblNlbGVjdGlvbi5wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICBzZWxlY3Q6IHNlbGVjdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogc2VsZWN0aW9uX3NlbGVjdEFsbCxcbiAgc2VsZWN0Q2hpbGQ6IHNlbGVjdGlvbl9zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbixcbiAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICBkYXRhOiBzZWxlY3Rpb25fZGF0YSxcbiAgZW50ZXI6IHNlbGVjdGlvbl9lbnRlcixcbiAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gIGpvaW46IHNlbGVjdGlvbl9qb2luLFxuICBtZXJnZTogc2VsZWN0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHNlbGVjdGlvbl9zZWxlY3Rpb24sXG4gIG9yZGVyOiBzZWxlY3Rpb25fb3JkZXIsXG4gIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICBjYWxsOiBzZWxlY3Rpb25fY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX2VtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgYXR0cjogc2VsZWN0aW9uX2F0dHIsXG4gIHN0eWxlOiBzZWxlY3Rpb25fc3R5bGUsXG4gIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gIGNsYXNzZWQ6IHNlbGVjdGlvbl9jbGFzc2VkLFxuICB0ZXh0OiBzZWxlY3Rpb25fdGV4dCxcbiAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gIHJhaXNlOiBzZWxlY3Rpb25fcmFpc2UsXG4gIGxvd2VyOiBzZWxlY3Rpb25fbG93ZXIsXG4gIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgaW5zZXJ0OiBzZWxlY3Rpb25faW5zZXJ0LFxuICByZW1vdmU6IHNlbGVjdGlvbl9yZW1vdmUsXG4gIGNsb25lOiBzZWxlY3Rpb25fY2xvbmUsXG4gIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gIG9uOiBzZWxlY3Rpb25fb24sXG4gIGRpc3BhdGNoOiBzZWxlY3Rpb25fZGlzcGF0Y2gsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25faXRlcmF0b3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdGlvbjtcbiIsICJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgbGV0IHNvdXJjZUV2ZW50O1xuICB3aGlsZSAoc291cmNlRXZlbnQgPSBldmVudC5zb3VyY2VFdmVudCkgZXZlbnQgPSBzb3VyY2VFdmVudDtcbiAgcmV0dXJuIGV2ZW50O1xufVxuIiwgImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCwgbm9kZSkge1xuICBldmVudCA9IHNvdXJjZUV2ZW50KGV2ZW50KTtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgbm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmIChub2RlKSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG4gICAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgICBwb2ludC54ID0gZXZlbnQuY2xpZW50WCwgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICAgIH1cbiAgICBpZiAobm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2V2ZW50LnBhZ2VYLCBldmVudC5wYWdlWV07XG59XG4iLCAiLy8gVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbm9ldmVudCB0byBlbnN1cmUgdGhhdCB3ZSBjYW5cbi8vIHByZXZlbnREZWZhdWx0IG9uIHRoZSBldmVudC5cbmV4cG9ydCBjb25zdCBub25wYXNzaXZlID0ge3Bhc3NpdmU6IGZhbHNlfTtcbmV4cG9ydCBjb25zdCBub25wYXNzaXZlY2FwdHVyZSA9IHtjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZX07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cbiIsICJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZXZlbnQsIHtub25wYXNzaXZlY2FwdHVyZX0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2aWV3KSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBub2V2ZW50LCBub25wYXNzaXZlY2FwdHVyZSk7XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBub2V2ZW50LCBub25wYXNzaXZlY2FwdHVyZSk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5fX25vc2VsZWN0ID0gcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0O1xuICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IFwibm9uZVwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5ZXNkcmFnKHZpZXcsIG5vY2xpY2spIHtcbiAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG51bGwpO1xuICBpZiAobm9jbGljaykge1xuICAgIHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbm9ldmVudCwgbm9ucGFzc2l2ZWNhcHR1cmUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGVjdGlvbi5vbihcImNsaWNrLmRyYWdcIiwgbnVsbCk7IH0sIDApO1xuICB9XG4gIGlmIChcIm9uc2VsZWN0c3RhcnRcIiBpbiByb290KSB7XG4gICAgc2VsZWN0aW9uLm9uKFwic2VsZWN0c3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSByb290Ll9fbm9zZWxlY3Q7XG4gICAgZGVsZXRlIHJvb3QuX19ub3NlbGVjdDtcbiAgfVxufVxuIiwgImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEcmFnRXZlbnQodHlwZSwge1xuICBzb3VyY2VFdmVudCxcbiAgc3ViamVjdCxcbiAgdGFyZ2V0LFxuICBpZGVudGlmaWVyLFxuICBhY3RpdmUsXG4gIHgsIHksIGR4LCBkeSxcbiAgZGlzcGF0Y2hcbn0pIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgIHR5cGU6IHt2YWx1ZTogdHlwZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBzb3VyY2VFdmVudDoge3ZhbHVlOiBzb3VyY2VFdmVudCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBzdWJqZWN0OiB7dmFsdWU6IHN1YmplY3QsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgdGFyZ2V0OiB7dmFsdWU6IHRhcmdldCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBpZGVudGlmaWVyOiB7dmFsdWU6IGlkZW50aWZpZXIsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgYWN0aXZlOiB7dmFsdWU6IGFjdGl2ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICB4OiB7dmFsdWU6IHgsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgeToge3ZhbHVlOiB5LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIGR4OiB7dmFsdWU6IGR4LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIGR5OiB7dmFsdWU6IGR5LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIF86IHt2YWx1ZTogZGlzcGF0Y2h9XG4gIH0pO1xufVxuXG5EcmFnRXZlbnQucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciB2YWx1ZSA9IHRoaXMuXy5vbi5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7XG4gIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5fID8gdGhpcyA6IHZhbHVlO1xufTtcbiIsICJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7c2VsZWN0LCBwb2ludGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgbm9kcmFnLCB7eWVzZHJhZ30gZnJvbSBcIi4vbm9kcmFnLmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vbnBhc3NpdmUsIG5vbnBhc3NpdmVjYXB0dXJlLCBub3Byb3BhZ2F0aW9ufSBmcm9tIFwiLi9ub2V2ZW50LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBEcmFnRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKGV2ZW50KSB7XG4gIHJldHVybiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29udGFpbmVyKCkge1xuICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0U3ViamVjdChldmVudCwgZCkge1xuICByZXR1cm4gZCA9PSBudWxsID8ge3g6IGV2ZW50LngsIHk6IGV2ZW50Lnl9IDogZDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgY29udGFpbmVyID0gZGVmYXVsdENvbnRhaW5lcixcbiAgICAgIHN1YmplY3QgPSBkZWZhdWx0U3ViamVjdCxcbiAgICAgIHRvdWNoYWJsZSA9IGRlZmF1bHRUb3VjaGFibGUsXG4gICAgICBnZXN0dXJlcyA9IHt9LFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImRyYWdcIiwgXCJlbmRcIiksXG4gICAgICBhY3RpdmUgPSAwLFxuICAgICAgbW91c2Vkb3dueCxcbiAgICAgIG1vdXNlZG93bnksXG4gICAgICBtb3VzZW1vdmluZyxcbiAgICAgIHRvdWNoZW5kaW5nLFxuICAgICAgY2xpY2tEaXN0YW5jZTIgPSAwO1xuXG4gIGZ1bmN0aW9uIGRyYWcoc2VsZWN0aW9uKSB7XG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5kcmFnXCIsIG1vdXNlZG93bmVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuZHJhZ1wiLCB0b3VjaHN0YXJ0ZWQpXG4gICAgICAgIC5vbihcInRvdWNobW92ZS5kcmFnXCIsIHRvdWNobW92ZWQsIG5vbnBhc3NpdmUpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZ1wiLCB0b3VjaGVuZGVkKVxuICAgICAgICAuc3R5bGUoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZWRvd25lZChldmVudCwgZCkge1xuICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmNhbGwodGhpcywgZXZlbnQsIGQpKSByZXR1cm47XG4gICAgdmFyIGdlc3R1cmUgPSBiZWZvcmVzdGFydCh0aGlzLCBjb250YWluZXIuY2FsbCh0aGlzLCBldmVudCwgZCksIGV2ZW50LCBkLCBcIm1vdXNlXCIpO1xuICAgIGlmICghZ2VzdHVyZSkgcmV0dXJuO1xuICAgIHNlbGVjdChldmVudC52aWV3KVxuICAgICAgLm9uKFwibW91c2Vtb3ZlLmRyYWdcIiwgbW91c2Vtb3ZlZCwgbm9ucGFzc2l2ZWNhcHR1cmUpXG4gICAgICAub24oXCJtb3VzZXVwLmRyYWdcIiwgbW91c2V1cHBlZCwgbm9ucGFzc2l2ZWNhcHR1cmUpO1xuICAgIG5vZHJhZyhldmVudC52aWV3KTtcbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBtb3VzZW1vdmluZyA9IGZhbHNlO1xuICAgIG1vdXNlZG93bnggPSBldmVudC5jbGllbnRYO1xuICAgIG1vdXNlZG93bnkgPSBldmVudC5jbGllbnRZO1xuICAgIGdlc3R1cmUoXCJzdGFydFwiLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZW1vdmVkKGV2ZW50KSB7XG4gICAgbm9ldmVudChldmVudCk7XG4gICAgaWYgKCFtb3VzZW1vdmluZykge1xuICAgICAgdmFyIGR4ID0gZXZlbnQuY2xpZW50WCAtIG1vdXNlZG93bngsIGR5ID0gZXZlbnQuY2xpZW50WSAtIG1vdXNlZG93bnk7XG4gICAgICBtb3VzZW1vdmluZyA9IGR4ICogZHggKyBkeSAqIGR5ID4gY2xpY2tEaXN0YW5jZTI7XG4gICAgfVxuICAgIGdlc3R1cmVzLm1vdXNlKFwiZHJhZ1wiLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZXVwcGVkKGV2ZW50KSB7XG4gICAgc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnXCIsIG51bGwpO1xuICAgIHllc2RyYWcoZXZlbnQudmlldywgbW91c2Vtb3ZpbmcpO1xuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGdlc3R1cmVzLm1vdXNlKFwiZW5kXCIsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZChldmVudCwgZCkge1xuICAgIGlmICghZmlsdGVyLmNhbGwodGhpcywgZXZlbnQsIGQpKSByZXR1cm47XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgYyA9IGNvbnRhaW5lci5jYWxsKHRoaXMsIGV2ZW50LCBkKSxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBiZWZvcmVzdGFydCh0aGlzLCBjLCBldmVudCwgZCwgdG91Y2hlc1tpXS5pZGVudGlmaWVyLCB0b3VjaGVzW2ldKSkge1xuICAgICAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICAgICAgZ2VzdHVyZShcInN0YXJ0XCIsIGV2ZW50LCB0b3VjaGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCBnZXN0dXJlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKGdlc3R1cmUgPSBnZXN0dXJlc1t0b3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgICBnZXN0dXJlKFwiZHJhZ1wiLCBldmVudCwgdG91Y2hlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hlbmRlZChldmVudCkge1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcblxuICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChnZXN0dXJlID0gZ2VzdHVyZXNbdG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICAgICAgZ2VzdHVyZShcImVuZFwiLCBldmVudCwgdG91Y2hlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmVmb3Jlc3RhcnQodGhhdCwgY29udGFpbmVyLCBldmVudCwgZCwgaWRlbnRpZmllciwgdG91Y2gpIHtcbiAgICB2YXIgZGlzcGF0Y2ggPSBsaXN0ZW5lcnMuY29weSgpLFxuICAgICAgICBwID0gcG9pbnRlcih0b3VjaCB8fCBldmVudCwgY29udGFpbmVyKSwgZHgsIGR5LFxuICAgICAgICBzO1xuXG4gICAgaWYgKChzID0gc3ViamVjdC5jYWxsKHRoYXQsIG5ldyBEcmFnRXZlbnQoXCJiZWZvcmVzdGFydFwiLCB7XG4gICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcbiAgICAgICAgdGFyZ2V0OiBkcmFnLFxuICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICBhY3RpdmUsXG4gICAgICAgIHg6IHBbMF0sXG4gICAgICAgIHk6IHBbMV0sXG4gICAgICAgIGR4OiAwLFxuICAgICAgICBkeTogMCxcbiAgICAgICAgZGlzcGF0Y2hcbiAgICAgIH0pLCBkKSkgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgZHggPSBzLnggLSBwWzBdIHx8IDA7XG4gICAgZHkgPSBzLnkgLSBwWzFdIHx8IDA7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZ2VzdHVyZSh0eXBlLCBldmVudCwgdG91Y2gpIHtcbiAgICAgIHZhciBwMCA9IHAsIG47XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6IGdlc3R1cmVzW2lkZW50aWZpZXJdID0gZ2VzdHVyZSwgbiA9IGFjdGl2ZSsrOyBicmVhaztcbiAgICAgICAgY2FzZSBcImVuZFwiOiBkZWxldGUgZ2VzdHVyZXNbaWRlbnRpZmllcl0sIC0tYWN0aXZlOyAvLyBmYWxscyB0aHJvdWdoXG4gICAgICAgIGNhc2UgXCJkcmFnXCI6IHAgPSBwb2ludGVyKHRvdWNoIHx8IGV2ZW50LCBjb250YWluZXIpLCBuID0gYWN0aXZlOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGRpc3BhdGNoLmNhbGwoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRoYXQsXG4gICAgICAgIG5ldyBEcmFnRXZlbnQodHlwZSwge1xuICAgICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcbiAgICAgICAgICBzdWJqZWN0OiBzLFxuICAgICAgICAgIHRhcmdldDogZHJhZyxcbiAgICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICAgIGFjdGl2ZTogbixcbiAgICAgICAgICB4OiBwWzBdICsgZHgsXG4gICAgICAgICAgeTogcFsxXSArIGR5LFxuICAgICAgICAgIGR4OiBwWzBdIC0gcDBbMF0sXG4gICAgICAgICAgZHk6IHBbMV0gLSBwMFsxXSxcbiAgICAgICAgICBkaXNwYXRjaFxuICAgICAgICB9KSxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgZHJhZy5maWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZmlsdGVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBkcmFnKSA6IGZpbHRlcjtcbiAgfTtcblxuICBkcmFnLmNvbnRhaW5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb250YWluZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBkcmFnKSA6IGNvbnRhaW5lcjtcbiAgfTtcblxuICBkcmFnLnN1YmplY3QgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3ViamVjdCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGRyYWcpIDogc3ViamVjdDtcbiAgfTtcblxuICBkcmFnLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGRyYWcpIDogdG91Y2hhYmxlO1xuICB9O1xuXG4gIGRyYWcub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gZHJhZyA6IHZhbHVlO1xuICB9O1xuXG4gIGRyYWcuY2xpY2tEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGlja0Rpc3RhbmNlMiA9IChfID0gK18pICogXywgZHJhZykgOiBNYXRoLnNxcnQoY2xpY2tEaXN0YW5jZTIpO1xuICB9O1xuXG4gIHJldHVybiBkcmFnO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwgImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX1cXFxcKSRgKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsYVxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCk7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHkoY2hhbm5lbHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcywgY2hhbm5lbHMpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IGNvbG9yX2Zvcm1hdEhleDgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgUmdiKGNsYW1waSh0aGlzLnIpLCBjbGFtcGkodGhpcy5nKSwgY2xhbXBpKHRoaXMuYiksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiByZ2JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxufSkpO1xuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9JHtoZXgoKGlzTmFOKHRoaXMub3BhY2l0eSkgPyAxIDogdGhpcy5vcGFjaXR5KSAqIDI1NSl9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICByZXR1cm4gYCR7YSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwifSR7Y2xhbXBpKHRoaXMucil9LCAke2NsYW1waSh0aGlzLmcpfSwgJHtjbGFtcGkodGhpcy5iKX0ke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcGEob3BhY2l0eSkge1xuICByZXR1cm4gaXNOYU4ob3BhY2l0eSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgb3BhY2l0eSkpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGkodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBjbGFtcGkodmFsdWUpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IEhzbChjbGFtcGgodGhpcy5oKSwgY2xhbXB0KHRoaXMucyksIGNsYW1wdCh0aGlzLmwpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2woKSB7XG4gICAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICAgIHJldHVybiBgJHthID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCJ9JHtjbGFtcGgodGhpcy5oKX0sICR7Y2xhbXB0KHRoaXMucykgKiAxMDB9JSwgJHtjbGFtcHQodGhpcy5sKSAqIDEwMH0lJHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBjbGFtcGgodmFsdWUpIHtcbiAgdmFsdWUgPSAodmFsdWUgfHwgMCkgJSAzNjA7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyB2YWx1ZSArIDM2MCA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjbGFtcHQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlIHx8IDApKTtcbn1cblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCAiaW1wb3J0IHtiYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoKCh0ICU9IDEpIDwgMCA/ICsrdCA6IHQpICogbiksXG4gICAgICAgIHYwID0gdmFsdWVzWyhpICsgbiAtIDEpICUgbl0sXG4gICAgICAgIHYxID0gdmFsdWVzW2kgJSBuXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbKGkgKyAxKSAlIG5dLFxuICAgICAgICB2MyA9IHZhbHVlc1soaSArIDIpICUgbl07XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsICJpbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHVlKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdhbW1hKHkpIHtcbiAgcmV0dXJuICh5ID0gK3kpID09PSAxID8gbm9nYW1tYSA6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGEgPyBleHBvbmVudGlhbChhLCBiLCB5KSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub2dhbW1hKGEsIGIpIHtcbiAgdmFyIGQgPSBiIC0gYTtcbiAgcmV0dXJuIGQgPyBsaW5lYXIoYSwgZCkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbn1cbiIsICJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwgImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICogKDEgLSB0KSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwgImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwgImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCAiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKiAoMSAtIHQpICsgYiAqIHQpO1xuICB9O1xufVxuIiwgInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwgImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlLmpzXCI7XG5cbnZhciBzdmdOb2RlO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGNvbnN0IG0gPSBuZXcgKHR5cGVvZiBET01NYXRyaXggPT09IFwiZnVuY3Rpb25cIiA/IERPTU1hdHJpeCA6IFdlYktpdENTU01hdHJpeCkodmFsdWUgKyBcIlwiKTtcbiAgcmV0dXJuIG0uaXNJZGVudGl0eSA/IGlkZW50aXR5IDogZGVjb21wb3NlKG0uYSwgbS5iLCBtLmMsIG0uZCwgbS5lLCBtLmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsICJpbXBvcnQgbnVtYmVyIGZyb20gXCIuLi9udW1iZXIuanNcIjtcbmltcG9ydCB7cGFyc2VDc3MsIHBhcnNlU3ZnfSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZUNzcywgXCJweCwgXCIsIFwicHgpXCIsIFwiZGVnKVwiKTtcbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZVN2ZywgXCIsIFwiLCBcIilcIiwgXCIpXCIpO1xuIiwgInZhciBlcHNpbG9uMiA9IDFlLTEyO1xuXG5mdW5jdGlvbiBjb3NoKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSArIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHNpbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoeCkpIC0gMSAvIHgpIC8gMjtcbn1cblxuZnVuY3Rpb24gdGFuaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCgyICogeCkpIC0gMSkgLyAoeCArIDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gem9vbVJobyhyaG8sIHJobzIsIHJobzQpIHtcblxuICAvLyBwMCA9IFt1eDAsIHV5MCwgdzBdXG4gIC8vIHAxID0gW3V4MSwgdXkxLCB3MV1cbiAgZnVuY3Rpb24gem9vbShwMCwgcDEpIHtcbiAgICB2YXIgdXgwID0gcDBbMF0sIHV5MCA9IHAwWzFdLCB3MCA9IHAwWzJdLFxuICAgICAgICB1eDEgPSBwMVswXSwgdXkxID0gcDFbMV0sIHcxID0gcDFbMl0sXG4gICAgICAgIGR4ID0gdXgxIC0gdXgwLFxuICAgICAgICBkeSA9IHV5MSAtIHV5MCxcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeSxcbiAgICAgICAgaSxcbiAgICAgICAgUztcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdTAgXHUyMjQ1IHUxLlxuICAgIGlmIChkMiA8IGVwc2lsb24yKSB7XG4gICAgICBTID0gTWF0aC5sb2codzEgLyB3MCkgLyByaG87XG4gICAgICBpID0gZnVuY3Rpb24odCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHV4MCArIHQgKiBkeCxcbiAgICAgICAgICB1eTAgKyB0ICogZHksXG4gICAgICAgICAgdzAgKiBNYXRoLmV4cChyaG8gKiB0ICogUylcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZW5lcmFsIGNhc2UuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgZDEgPSBNYXRoLnNxcnQoZDIpLFxuICAgICAgICAgIGIwID0gKHcxICogdzEgLSB3MCAqIHcwICsgcmhvNCAqIGQyKSAvICgyICogdzAgKiByaG8yICogZDEpLFxuICAgICAgICAgIGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gcmhvNCAqIGQyKSAvICgyICogdzEgKiByaG8yICogZDEpLFxuICAgICAgICAgIHIwID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKSxcbiAgICAgICAgICByMSA9IE1hdGgubG9nKE1hdGguc3FydChiMSAqIGIxICsgMSkgLSBiMSk7XG4gICAgICBTID0gKHIxIC0gcjApIC8gcmhvO1xuICAgICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgdmFyIHMgPSB0ICogUyxcbiAgICAgICAgICAgIGNvc2hyMCA9IGNvc2gocjApLFxuICAgICAgICAgICAgdSA9IHcwIC8gKHJobzIgKiBkMSkgKiAoY29zaHIwICogdGFuaChyaG8gKiBzICsgcjApIC0gc2luaChyMCkpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHV4MCArIHUgKiBkeCxcbiAgICAgICAgICB1eTAgKyB1ICogZHksXG4gICAgICAgICAgdzAgKiBjb3NocjAgLyBjb3NoKHJobyAqIHMgKyByMClcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpLmR1cmF0aW9uID0gUyAqIDEwMDAgKiByaG8gLyBNYXRoLlNRUlQyO1xuXG4gICAgcmV0dXJuIGk7XG4gIH1cblxuICB6b29tLnJobyA9IGZ1bmN0aW9uKF8pIHtcbiAgICB2YXIgXzEgPSBNYXRoLm1heCgxZS0zLCArXyksIF8yID0gXzEgKiBfMSwgXzQgPSBfMiAqIF8yO1xuICAgIHJldHVybiB6b29tUmhvKF8xLCBfMiwgXzQpO1xuICB9O1xuXG4gIHJldHVybiB6b29tO1xufSkoTWF0aC5TUVJUMiwgMiwgNCk7XG4iLCAidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdlXHUyMDE5dmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlblx1MjAxOXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RpbWVyfSBmcm9tIFwiLi90aW1lci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIGRlbGF5ID0gZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXk7XG4gIHQucmVzdGFydChlbGFwc2VkID0+IHtcbiAgICB0LnN0b3AoKTtcbiAgICBjYWxsYmFjayhlbGFwc2VkICsgZGVsYXkpO1xuICB9LCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuIiwgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwgImltcG9ydCB7U1RBUlRJTkcsIEVORElORywgRU5ERUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICBzY2hlZHVsZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGVtcHR5ID0gdHJ1ZSxcbiAgICAgIGk7XG5cbiAgaWYgKCFzY2hlZHVsZXMpIHJldHVybjtcblxuICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuXG4gIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICBpZiAoKHNjaGVkdWxlID0gc2NoZWR1bGVzW2ldKS5uYW1lICE9PSBuYW1lKSB7IGVtcHR5ID0gZmFsc2U7IGNvbnRpbnVlOyB9XG4gICAgYWN0aXZlID0gc2NoZWR1bGUuc3RhdGUgPiBTVEFSVElORyAmJiBzY2hlZHVsZS5zdGF0ZSA8IEVORElORztcbiAgICBzY2hlZHVsZS5zdGF0ZSA9IEVOREVEO1xuICAgIHNjaGVkdWxlLnRpbWVyLnN0b3AoKTtcbiAgICBzY2hlZHVsZS5vbi5jYWxsKGFjdGl2ZSA/IFwiaW50ZXJydXB0XCIgOiBcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsICJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdlXHUyMDE5cmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZVx1MjAxOXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiIsICJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsICJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtU3ZnIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIjtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKSwgaSA9IGZ1bGxuYW1lID09PSBcInRyYW5zZm9ybVwiID8gaW50ZXJwb2xhdGVUcmFuc2Zvcm0gOiBpbnRlcnBvbGF0ZTtcbiAgcmV0dXJuIHRoaXMuYXR0clR3ZWVuKG5hbWUsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKShmdWxsbmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcImF0dHIuXCIgKyBuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHZhbHVlID09IG51bGwgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKShmdWxsbmFtZSlcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKGZ1bGxuYW1lLCBpLCB2YWx1ZSkpO1xufVxuIiwgImltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCAiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwgImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGR1cmF0aW9uRnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGR1cmF0aW9uQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkdXJhdGlvbkZ1bmN0aW9uXG4gICAgICAgICAgOiBkdXJhdGlvbkNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kdXJhdGlvbjtcbn1cbiIsICJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsICJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZVZhcnlpbmcoaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiB2ICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMuZWFjaChlYXNlVmFyeWluZyh0aGlzLl9pZCwgdmFsdWUpKTtcbn1cbiIsICJpbXBvcnQge21hdGNoZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsICJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsICJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZVx1MjAxOXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCAiZnVuY3Rpb24gcmVtb3ZlRnVuY3Rpb24oaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLl9fdHJhbnNpdGlvbikgaWYgKCtpICE9PSBpZCkgcmV0dXJuO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm9uKFwiZW5kLnJlbW92ZVwiLCByZW1vdmVGdW5jdGlvbih0aGlzLl9pZCkpO1xufVxuIiwgImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG52YXIgU2VsZWN0aW9uID0gc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2dyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCAiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZU51bGwobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICBzdHJpbmcxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgc3RyaW5nMTAgPSBzdHJpbmcxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSxcbiAgICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSBzdHJpbmcxID0gdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlTWF5YmVSZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIG9uMCwgb24xLCBsaXN0ZW5lcjAsIGtleSA9IFwic3R5bGUuXCIgKyBuYW1lLCBldmVudCA9IFwiZW5kLlwiICsga2V5LCByZW1vdmU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uLFxuICAgICAgICBsaXN0ZW5lciA9IHNjaGVkdWxlLnZhbHVlW2tleV0gPT0gbnVsbCA/IHJlbW92ZSB8fCAocmVtb3ZlID0gc3R5bGVSZW1vdmUobmFtZSkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZVx1MjAxOXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wIHx8IGxpc3RlbmVyMCAhPT0gbGlzdGVuZXIpIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24oZXZlbnQsIGxpc3RlbmVyMCA9IGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVOdWxsKG5hbWUsIGkpKVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmUobmFtZSkpXG4gICAgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKSlcbiAgICAgIC5lYWNoKHN0eWxlTWF5YmVSZW1vdmUodGhpcy5faWQsIG5hbWUpKVxuICAgIDogdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSksIHByaW9yaXR5KVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgbnVsbCk7XG59XG4iLCAiZnVuY3Rpb24gc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaS5jYWxsKHRoaXMsIHQpLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciB0LCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdCA9IChpMCA9IGkpICYmIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwgImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsICJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iLCAiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCAiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2VcdTIwMTlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlbGVjdGlvbiB3YXMgZW1wdHksIHJlc29sdmUgZW5kIGltbWVkaWF0ZWx5XG4gICAgaWYgKHNpemUgPT09IDApIHJlc29sdmUoKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXkuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nIGZyb20gXCIuL2Vhc2VWYXJ5aW5nLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZVR3ZWVuIGZyb20gXCIuL3N0eWxlVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dFR3ZWVuIGZyb20gXCIuL3RleHRUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90d2VlbiBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZW5kIGZyb20gXCIuL2VuZC5qc1wiO1xuXG52YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnNpdGlvbihncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIHRoaXMuX25hbWUgPSBuYW1lO1xuICB0aGlzLl9pZCA9IGlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdGlvbigpLnRyYW5zaXRpb24obmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5cbnZhciBzZWxlY3Rpb25fcHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZTtcblxuVHJhbnNpdGlvbi5wcm90b3R5cGUgPSB0cmFuc2l0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zaXRpb24sXG4gIHNlbGVjdDogdHJhbnNpdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogdHJhbnNpdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZHJlbixcbiAgZmlsdGVyOiB0cmFuc2l0aW9uX2ZpbHRlcixcbiAgbWVyZ2U6IHRyYW5zaXRpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogdHJhbnNpdGlvbl9zZWxlY3Rpb24sXG4gIHRyYW5zaXRpb246IHRyYW5zaXRpb25fdHJhbnNpdGlvbixcbiAgY2FsbDogc2VsZWN0aW9uX3Byb3RvdHlwZS5jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlcyxcbiAgbm9kZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fcHJvdG90eXBlLmVtcHR5LFxuICBlYWNoOiBzZWxlY3Rpb25fcHJvdG90eXBlLmVhY2gsXG4gIG9uOiB0cmFuc2l0aW9uX29uLFxuICBhdHRyOiB0cmFuc2l0aW9uX2F0dHIsXG4gIGF0dHJUd2VlbjogdHJhbnNpdGlvbl9hdHRyVHdlZW4sXG4gIHN0eWxlOiB0cmFuc2l0aW9uX3N0eWxlLFxuICBzdHlsZVR3ZWVuOiB0cmFuc2l0aW9uX3N0eWxlVHdlZW4sXG4gIHRleHQ6IHRyYW5zaXRpb25fdGV4dCxcbiAgdGV4dFR3ZWVuOiB0cmFuc2l0aW9uX3RleHRUd2VlbixcbiAgcmVtb3ZlOiB0cmFuc2l0aW9uX3JlbW92ZSxcbiAgdHdlZW46IHRyYW5zaXRpb25fdHdlZW4sXG4gIGRlbGF5OiB0cmFuc2l0aW9uX2RlbGF5LFxuICBkdXJhdGlvbjogdHJhbnNpdGlvbl9kdXJhdGlvbixcbiAgZWFzZTogdHJhbnNpdGlvbl9lYXNlLFxuICBlYXNlVmFyeWluZzogdHJhbnNpdGlvbl9lYXNlVmFyeWluZyxcbiAgZW5kOiB0cmFuc2l0aW9uX2VuZCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXVxufTtcbiIsICJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsICJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2lkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsICJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7cG9pbnRlciwgc2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IEJydXNoRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG52YXIgTU9ERV9EUkFHID0ge25hbWU6IFwiZHJhZ1wifSxcbiAgICBNT0RFX1NQQUNFID0ge25hbWU6IFwic3BhY2VcIn0sXG4gICAgTU9ERV9IQU5ETEUgPSB7bmFtZTogXCJoYW5kbGVcIn0sXG4gICAgTU9ERV9DRU5URVIgPSB7bmFtZTogXCJjZW50ZXJcIn07XG5cbmNvbnN0IHthYnMsIG1heCwgbWlufSA9IE1hdGg7XG5cbmZ1bmN0aW9uIG51bWJlcjEoZSkge1xuICByZXR1cm4gWytlWzBdLCArZVsxXV07XG59XG5cbmZ1bmN0aW9uIG51bWJlcjIoZSkge1xuICByZXR1cm4gW251bWJlcjEoZVswXSksIG51bWJlcjEoZVsxXSldO1xufVxuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcIndcIiwgXCJlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiBbWyt4WzBdLCBlWzBdWzFdXSwgWyt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgPT0gbnVsbCA/IG51bGwgOiBbW2VbMF1bMF0sICt5WzBdXSwgW2VbMV1bMF0sICt5WzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVsxXSwgeHlbMV1bMV1dOyB9XG59O1xuXG52YXIgWFkgPSB7XG4gIG5hbWU6IFwieHlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcIndcIiwgXCJlXCIsIFwic1wiLCBcIm53XCIsIFwibmVcIiwgXCJzd1wiLCBcInNlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSA9PSBudWxsID8gbnVsbCA6IG51bWJlcjIoeHkpOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIFx1MjAxQ19fYnJ1c2hcdTIwMUQgcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uLCBldmVudCkge1xuICAgIGlmIChncm91cC50d2Vlbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydChldmVudCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKGV2ZW50KTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KGV2ZW50KS5icnVzaChldmVudCkuZW5kKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCwgZXZlbnQpIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB2YXIgZW1pdCA9IHRoYXQuX19icnVzaC5lbWl0dGVyO1xuICAgIHJldHVybiBlbWl0ICYmICghY2xlYW4gfHwgIWVtaXQuY2xlYW4pID8gZW1pdCA6IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5jbGVhbiA9IGNsZWFuO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIGVsc2UgdGhpcy5lbWl0KFwiYnJ1c2hcIiwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbihldmVudCwgbW9kZSkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCBtb2RlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgQnJ1c2hFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHRhcmdldDogYnJ1c2gsXG4gICAgICAgICAgc2VsZWN0aW9uOiBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIGRpc3BhdGNoOiBsaXN0ZW5lcnNcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoZXZlbnQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50cyA9IEFycmF5LmZyb20oZXZlbnQudG91Y2hlcyB8fCBbZXZlbnRdLCB0ID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gdC5pZGVudGlmaWVyO1xuICAgICAgICAgIHQgPSBwb2ludGVyKHQsIHRoYXQpO1xuICAgICAgICAgIHQucG9pbnQwID0gdC5zbGljZSgpO1xuICAgICAgICAgIHQuaWRlbnRpZmllciA9IGk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pO1xuXG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHZhciBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMsIHRydWUpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIGlmIChzZWxlY3Rpb24pIG1vdmluZyA9IHRydWU7XG4gICAgICBjb25zdCBwdHMgPSBbcG9pbnRzWzBdLCBwb2ludHNbMV0gfHwgcG9pbnRzWzBdXTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtbXG4gICAgICAgICAgdzAgPSBkaW0gPT09IFkgPyBXIDogbWluKHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBuMCA9IGRpbSA9PT0gWCA/IE4gOiBtaW4ocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF0sIFtcbiAgICAgICAgICBlMCA9IGRpbSA9PT0gWSA/IEUgOiBtYXgocHRzWzBdWzBdLCBwdHNbMV1bMF0pLFxuICAgICAgICAgIHMwID0gZGltID09PSBYID8gUyA6IG1heChwdHNbMF1bMV0sIHB0c1sxXVsxXSlcbiAgICAgICAgXV07XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpIG1vdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3MCA9IHNlbGVjdGlvblswXVswXTtcbiAgICAgIG4wID0gc2VsZWN0aW9uWzBdWzFdO1xuICAgICAgZTAgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBzMCA9IHNlbGVjdGlvblsxXVsxXTtcbiAgICB9XG5cbiAgICB3MSA9IHcwO1xuICAgIG4xID0gbjA7XG4gICAgZTEgPSBlMDtcbiAgICBzMSA9IHMwO1xuXG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoYXQpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgdmFyIG92ZXJsYXkgPSBncm91cC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcblxuICAgIGlmIChldmVudC50b3VjaGVzKSB7XG4gICAgICBlbWl0Lm1vdmVkID0gbW92ZWQ7XG4gICAgICBlbWl0LmVuZGVkID0gZW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAgICAgLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNldXAuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgICAgaWYgKGtleXMpIHZpZXdcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydChldmVudCwgbW9kZS5uYW1lKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgfHwgW2V2ZW50XSkge1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcG9pbnRzKVxuICAgICAgICAgIGlmIChkLmlkZW50aWZpZXIgPT09IHAuaWRlbnRpZmllcikgZC5jdXIgPSBwb2ludGVyKHAsIHRoYXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNoaWZ0aW5nICYmICFsb2NrWCAmJiAhbG9ja1kgJiYgcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgaWYgKGFicyhwb2ludC5jdXJbMF0gLSBwb2ludFswXSkgPiBhYnMocG9pbnQuY3VyWzFdIC0gcG9pbnRbMV0pKVxuICAgICAgICAgIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxvY2tYID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKVxuICAgICAgICBpZiAocG9pbnQuY3VyKSBwb2ludFswXSA9IHBvaW50LmN1clswXSwgcG9pbnRbMV0gPSBwb2ludC5jdXJbMV07XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBtb3ZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXSwgcG9pbnQwID0gcG9pbnQucG9pbnQwO1xuICAgICAgdmFyIHQ7XG5cbiAgICAgIGR4ID0gcG9pbnRbMF0gLSBwb2ludDBbMF07XG4gICAgICBkeSA9IHBvaW50WzFdIC0gcG9pbnQwWzFdO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBNT0RFX1NQQUNFOlxuICAgICAgICBjYXNlIE1PREVfRFJBRzoge1xuICAgICAgICAgIGlmIChzaWduWCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChwb2ludHNbMV0pIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHBvaW50c1swXVswXSkpLCBlMSA9IG1heChXLCBtaW4oRSwgcG9pbnRzWzFdWzBdKSksIHNpZ25YID0gMTtcbiAgICAgICAgICAgIGlmIChzaWduWSkgbjEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1swXVsxXSkpLCBzMSA9IG1heChOLCBtaW4oUywgcG9pbnRzWzFdWzFdKSksIHNpZ25ZID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gbWF4KFcgLSBlMCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBtYXgoTiAtIG4wLCBtaW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWSA+IDApIGR5ID0gbWF4KE4gLSBzMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE1PREVfQ0VOVEVSOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSB3MSA9IG1heChXLCBtaW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gbWF4KFcsIG1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBuMCAtIGR5ICogc2lnblkpKSwgczEgPSBtYXgoTiwgbWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaChldmVudCwgbW9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRlZChldmVudCkge1xuICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKGV2ZW50LCBtb2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBub2Rlcywgc3RyZW5ndGggPSAxO1xuXG4gIGlmICh4ID09IG51bGwpIHggPSAwO1xuICBpZiAoeSA9PSBudWxsKSB5ID0gMDtcblxuICBmdW5jdGlvbiBmb3JjZSgpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgc3ggPSAwLFxuICAgICAgICBzeSA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIHN4ICs9IG5vZGUueCwgc3kgKz0gbm9kZS55O1xuICAgIH1cblxuICAgIGZvciAoc3ggPSAoc3ggLyBuIC0geCkgKiBzdHJlbmd0aCwgc3kgPSAoc3kgLyBuIC0geSkgKiBzdHJlbmd0aCwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS54IC09IHN4LCBub2RlLnkgLT0gc3k7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gIH07XG5cbiAgZm9yY2UueCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4ID0gK18sIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgZm9yY2UueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gK18sIGZvcmNlKSA6IHk7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSArXywgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgY29uc3QgeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCksXG4gICAgICB5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKTtcbiAgcmV0dXJuIGFkZCh0aGlzLmNvdmVyKHgsIHkpLCB4LCB5LCBkKTtcbn1cblxuZnVuY3Rpb24gYWRkKHRyZWUsIHgsIHksIGQpIHtcbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gdHJlZTsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0cmVlLl9yb290LFxuICAgICAgbGVhZiA9IHtkYXRhOiBkfSxcbiAgICAgIHgwID0gdHJlZS5feDAsXG4gICAgICB5MCA9IHRyZWUuX3kwLFxuICAgICAgeDEgPSB0cmVlLl94MSxcbiAgICAgIHkxID0gdHJlZS5feTEsXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgeHAsXG4gICAgICB5cCxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBGaW5kIHRoZSBleGlzdGluZyBsZWFmIGZvciB0aGUgbmV3IHBvaW50LCBvciBhZGQgaXQuXG4gIHdoaWxlIChub2RlLmxlbmd0aCkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmIChwYXJlbnQgPSBub2RlLCAhKG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xuICB9XG5cbiAgLy8gSXMgdGhlIG5ldyBwb2ludCBpcyBleGFjdGx5IGNvaW5jaWRlbnQgd2l0aCB0aGUgZXhpc3RpbmcgcG9pbnQ/XG4gIHhwID0gK3RyZWUuX3guY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICB5cCA9ICt0cmVlLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgaWYgKHggPT09IHhwICYmIHkgPT09IHlwKSByZXR1cm4gbGVhZi5uZXh0ID0gbm9kZSwgcGFyZW50ID8gcGFyZW50W2ldID0gbGVhZiA6IHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIE90aGVyd2lzZSwgc3BsaXQgdGhlIGxlYWYgbm9kZSB1bnRpbCB0aGUgb2xkIGFuZCBuZXcgcG9pbnQgYXJlIHNlcGFyYXRlZC5cbiAgZG8ge1xuICAgIHBhcmVudCA9IHBhcmVudCA/IHBhcmVudFtpXSA9IG5ldyBBcnJheSg0KSA6IHRyZWUuX3Jvb3QgPSBuZXcgQXJyYXkoNCk7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gIH0gd2hpbGUgKChpID0gYm90dG9tIDw8IDEgfCByaWdodCkgPT09IChqID0gKHlwID49IHltKSA8PCAxIHwgKHhwID49IHhtKSkpO1xuICByZXR1cm4gcGFyZW50W2pdID0gbm9kZSwgcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEFsbChkYXRhKSB7XG4gIHZhciBkLCBpLCBuID0gZGF0YS5sZW5ndGgsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHh6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeXogPSBuZXcgQXJyYXkobiksXG4gICAgICB4MCA9IEluZmluaXR5LFxuICAgICAgeTAgPSBJbmZpbml0eSxcbiAgICAgIHgxID0gLUluZmluaXR5LFxuICAgICAgeTEgPSAtSW5maW5pdHk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9pbnRzIGFuZCB0aGVpciBleHRlbnQuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCA9IGRhdGFbaV0pKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIGNvbnRpbnVlO1xuICAgIHh6W2ldID0geDtcbiAgICB5eltpXSA9IHk7XG4gICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgIGlmICh4ID4geDEpIHgxID0geDtcbiAgICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZSBubyAodmFsaWQpIHBvaW50cywgYWJvcnQuXG4gIGlmICh4MCA+IHgxIHx8IHkwID4geTEpIHJldHVybiB0aGlzO1xuXG4gIC8vIEV4cGFuZCB0aGUgdHJlZSB0byBjb3ZlciB0aGUgbmV3IHBvaW50cy5cbiAgdGhpcy5jb3Zlcih4MCwgeTApLmNvdmVyKHgxLCB5MSk7XG5cbiAgLy8gQWRkIHRoZSBuZXcgcG9pbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgYWRkKHRoaXMsIHh6W2ldLCB5eltpXSwgZGF0YVtpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIGlmIChpc05hTih4ID0gK3gpIHx8IGlzTmFOKHkgPSAreSkpIHJldHVybiB0aGlzOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MTtcblxuICAvLyBJZiB0aGUgcXVhZHRyZWUgaGFzIG5vIGV4dGVudCwgaW5pdGlhbGl6ZSB0aGVtLlxuICAvLyBJbnRlZ2VyIGV4dGVudCBhcmUgbmVjZXNzYXJ5IHNvIHRoYXQgaWYgd2UgbGF0ZXIgZG91YmxlIHRoZSBleHRlbnQsXG4gIC8vIHRoZSBleGlzdGluZyBxdWFkcmFudCBib3VuZGFyaWVzIGRvblx1MjAxOXQgY2hhbmdlIGR1ZSB0byBmbG9hdGluZyBwb2ludCBlcnJvciFcbiAgaWYgKGlzTmFOKHgwKSkge1xuICAgIHgxID0gKHgwID0gTWF0aC5mbG9vcih4KSkgKyAxO1xuICAgIHkxID0gKHkwID0gTWF0aC5mbG9vcih5KSkgKyAxO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBkb3VibGUgcmVwZWF0ZWRseSB0byBjb3Zlci5cbiAgZWxzZSB7XG4gICAgdmFyIHogPSB4MSAtIHgwIHx8IDEsXG4gICAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIGk7XG5cbiAgICB3aGlsZSAoeDAgPiB4IHx8IHggPj0geDEgfHwgeTAgPiB5IHx8IHkgPj0geTEpIHtcbiAgICAgIGkgPSAoeSA8IHkwKSA8PCAxIHwgKHggPCB4MCk7XG4gICAgICBwYXJlbnQgPSBuZXcgQXJyYXkoNCksIHBhcmVudFtpXSA9IG5vZGUsIG5vZGUgPSBwYXJlbnQsIHogKj0gMjtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIDA6IHgxID0geDAgKyB6LCB5MSA9IHkwICsgejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogeDAgPSB4MSAtIHosIHkxID0geTAgKyB6OyBicmVhaztcbiAgICAgICAgY2FzZSAyOiB4MSA9IHgwICsgeiwgeTAgPSB5MSAtIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHgwID0geDEgLSB6LCB5MCA9IHkxIC0gejsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jvb3QgJiYgdGhpcy5fcm9vdC5sZW5ndGgpIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRhID0gW107XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvIGRhdGEucHVzaChub2RlLmRhdGEpOyB3aGlsZSAobm9kZSA9IG5vZGUubmV4dClcbiAgfSk7XG4gIHJldHVybiBkYXRhO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5jb3ZlcigrX1swXVswXSwgK19bMF1bMV0pLmNvdmVyKCtfWzFdWzBdLCArX1sxXVsxXSlcbiAgICAgIDogaXNOYU4odGhpcy5feDApID8gdW5kZWZpbmVkIDogW1t0aGlzLl94MCwgdGhpcy5feTBdLCBbdGhpcy5feDEsIHRoaXMuX3kxXV07XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5ub2RlID0gbm9kZTtcbiAgdGhpcy54MCA9IHgwO1xuICB0aGlzLnkwID0geTA7XG4gIHRoaXMueDEgPSB4MTtcbiAgdGhpcy55MSA9IHkxO1xufVxuIiwgImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gIHZhciBkYXRhLFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSxcbiAgICAgIHkxLFxuICAgICAgeDIsXG4gICAgICB5MixcbiAgICAgIHgzID0gdGhpcy5feDEsXG4gICAgICB5MyA9IHRoaXMuX3kxLFxuICAgICAgcXVhZHMgPSBbXSxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgcSxcbiAgICAgIGk7XG5cbiAgaWYgKG5vZGUpIHF1YWRzLnB1c2gobmV3IFF1YWQobm9kZSwgeDAsIHkwLCB4MywgeTMpKTtcbiAgaWYgKHJhZGl1cyA9PSBudWxsKSByYWRpdXMgPSBJbmZpbml0eTtcbiAgZWxzZSB7XG4gICAgeDAgPSB4IC0gcmFkaXVzLCB5MCA9IHkgLSByYWRpdXM7XG4gICAgeDMgPSB4ICsgcmFkaXVzLCB5MyA9IHkgKyByYWRpdXM7XG4gICAgcmFkaXVzICo9IHJhZGl1cztcbiAgfVxuXG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcblxuICAgIC8vIFN0b3Agc2VhcmNoaW5nIGlmIHRoaXMgcXVhZHJhbnQgY2FuXHUyMDE5dCBjb250YWluIGEgY2xvc2VyIG5vZGUuXG4gICAgaWYgKCEobm9kZSA9IHEubm9kZSlcbiAgICAgICAgfHwgKHgxID0gcS54MCkgPiB4M1xuICAgICAgICB8fCAoeTEgPSBxLnkwKSA+IHkzXG4gICAgICAgIHx8ICh4MiA9IHEueDEpIDwgeDBcbiAgICAgICAgfHwgKHkyID0gcS55MSkgPCB5MCkgY29udGludWU7XG5cbiAgICAvLyBCaXNlY3QgdGhlIGN1cnJlbnQgcXVhZHJhbnQuXG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgeG0gPSAoeDEgKyB4MikgLyAyLFxuICAgICAgICAgIHltID0gKHkxICsgeTIpIC8gMjtcblxuICAgICAgcXVhZHMucHVzaChcbiAgICAgICAgbmV3IFF1YWQobm9kZVszXSwgeG0sIHltLCB4MiwgeTIpLFxuICAgICAgICBuZXcgUXVhZChub2RlWzJdLCB4MSwgeW0sIHhtLCB5MiksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMV0sIHhtLCB5MSwgeDIsIHltKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVswXSwgeDEsIHkxLCB4bSwgeW0pXG4gICAgICApO1xuXG4gICAgICAvLyBWaXNpdCB0aGUgY2xvc2VzdCBxdWFkcmFudCBmaXJzdC5cbiAgICAgIGlmIChpID0gKHkgPj0geW0pIDw8IDEgfCAoeCA+PSB4bSkpIHtcbiAgICAgICAgcSA9IHF1YWRzW3F1YWRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBxdWFkc1txdWFkcy5sZW5ndGggLSAxXSA9IHF1YWRzW3F1YWRzLmxlbmd0aCAtIDEgLSBpXTtcbiAgICAgICAgcXVhZHNbcXVhZHMubGVuZ3RoIC0gMSAtIGldID0gcTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWaXNpdCB0aGlzIHBvaW50LiAoVmlzaXRpbmcgY29pbmNpZGVudCBwb2ludHMgaXNuXHUyMDE5dCBuZWNlc3NhcnkhKVxuICAgIGVsc2Uge1xuICAgICAgdmFyIGR4ID0geCAtICt0aGlzLl94LmNhbGwobnVsbCwgbm9kZS5kYXRhKSxcbiAgICAgICAgICBkeSA9IHkgLSArdGhpcy5feS5jYWxsKG51bGwsIG5vZGUuZGF0YSksXG4gICAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgIGlmIChkMiA8IHJhZGl1cykge1xuICAgICAgICB2YXIgZCA9IE1hdGguc3FydChyYWRpdXMgPSBkMik7XG4gICAgICAgIHgwID0geCAtIGQsIHkwID0geSAtIGQ7XG4gICAgICAgIHgzID0geCArIGQsIHkzID0geSArIGQ7XG4gICAgICAgIGRhdGEgPSBub2RlLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHJldGFpbmVyLFxuICAgICAgcHJldmlvdXMsXG4gICAgICBuZXh0LFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0aGlzO1xuXG4gIC8vIEZpbmQgdGhlIGxlYWYgbm9kZSBmb3IgdGhlIHBvaW50LlxuICAvLyBXaGlsZSBkZXNjZW5kaW5nLCBhbHNvIHJldGFpbiB0aGUgZGVlcGVzdCBwYXJlbnQgd2l0aCBhIG5vbi1yZW1vdmVkIHNpYmxpbmcuXG4gIGlmIChub2RlLmxlbmd0aCkgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAoIShwYXJlbnQgPSBub2RlLCBub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBicmVhaztcbiAgICBpZiAocGFyZW50WyhpICsgMSkgJiAzXSB8fCBwYXJlbnRbKGkgKyAyKSAmIDNdIHx8IHBhcmVudFsoaSArIDMpICYgM10pIHJldGFpbmVyID0gcGFyZW50LCBqID0gaTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHBvaW50IHRvIHJlbW92ZS5cbiAgd2hpbGUgKG5vZGUuZGF0YSAhPT0gZCkgaWYgKCEocHJldmlvdXMgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0KSkgcmV0dXJuIHRoaXM7XG4gIGlmIChuZXh0ID0gbm9kZS5uZXh0KSBkZWxldGUgbm9kZS5uZXh0O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2luY2lkZW50IHBvaW50cywgcmVtb3ZlIGp1c3QgdGhlIHBvaW50LlxuICBpZiAocHJldmlvdXMpIHJldHVybiAobmV4dCA/IHByZXZpb3VzLm5leHQgPSBuZXh0IDogZGVsZXRlIHByZXZpb3VzLm5leHQpLCB0aGlzO1xuXG4gIC8vIElmIHRoaXMgaXMgdGhlIHJvb3QgcG9pbnQsIHJlbW92ZSBpdC5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiB0aGlzLl9yb290ID0gbmV4dCwgdGhpcztcblxuICAvLyBSZW1vdmUgdGhpcyBsZWFmLlxuICBuZXh0ID8gcGFyZW50W2ldID0gbmV4dCA6IGRlbGV0ZSBwYXJlbnRbaV07XG5cbiAgLy8gSWYgdGhlIHBhcmVudCBub3cgY29udGFpbnMgZXhhY3RseSBvbmUgbGVhZiwgY29sbGFwc2Ugc3VwZXJmbHVvdXMgcGFyZW50cy5cbiAgaWYgKChub2RlID0gcGFyZW50WzBdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzNdKVxuICAgICAgJiYgbm9kZSA9PT0gKHBhcmVudFszXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFswXSlcbiAgICAgICYmICFub2RlLmxlbmd0aCkge1xuICAgIGlmIChyZXRhaW5lcikgcmV0YWluZXJbal0gPSBub2RlO1xuICAgIGVsc2UgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbChkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHRoaXMucmVtb3ZlKGRhdGFbaV0pO1xuICByZXR1cm4gdGhpcztcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gMDtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gKytzaXplOyB3aGlsZSAobm9kZSA9IG5vZGUubmV4dClcbiAgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwgImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIHEsIG5vZGUgPSB0aGlzLl9yb290LCBjaGlsZCwgeDAsIHkwLCB4MSwgeTE7XG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICBpZiAoIWNhbGxiYWNrKG5vZGUgPSBxLm5vZGUsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSkgJiYgbm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwgImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIG5leHQgPSBbXSwgcTtcbiAgaWYgKHRoaXMuX3Jvb3QpIHF1YWRzLnB1c2gobmV3IFF1YWQodGhpcy5fcm9vdCwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpKTtcbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuICAgIHZhciBub2RlID0gcS5ub2RlO1xuICAgIGlmIChub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIGNoaWxkLCB4MCA9IHEueDAsIHkwID0gcS55MCwgeDEgPSBxLngxLCB5MSA9IHEueTEsIHhtID0gKHgwICsgeDEpIC8gMiwgeW0gPSAoeTAgKyB5MSkgLyAyO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVswXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHkwLCB4bSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMV0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5MCwgeDEsIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVszXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHltLCB4MSwgeTEpKTtcbiAgICB9XG4gICAgbmV4dC5wdXNoKHEpO1xuICB9XG4gIHdoaWxlIChxID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrKHEubm9kZSwgcS54MCwgcS55MCwgcS54MSwgcS55MSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRYKGQpIHtcbiAgcmV0dXJuIGRbMF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5feCA9IF8sIHRoaXMpIDogdGhpcy5feDtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFkoZCkge1xuICByZXR1cm4gZFsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl95ID0gXywgdGhpcykgOiB0aGlzLl95O1xufVxuIiwgImltcG9ydCB0cmVlX2FkZCwge2FkZEFsbCBhcyB0cmVlX2FkZEFsbH0gZnJvbSBcIi4vYWRkLmpzXCI7XG5pbXBvcnQgdHJlZV9jb3ZlciBmcm9tIFwiLi9jb3Zlci5qc1wiO1xuaW1wb3J0IHRyZWVfZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgdHJlZV9leHRlbnQgZnJvbSBcIi4vZXh0ZW50LmpzXCI7XG5pbXBvcnQgdHJlZV9maW5kIGZyb20gXCIuL2ZpbmQuanNcIjtcbmltcG9ydCB0cmVlX3JlbW92ZSwge3JlbW92ZUFsbCBhcyB0cmVlX3JlbW92ZUFsbH0gZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJlZV9yb290IGZyb20gXCIuL3Jvb3QuanNcIjtcbmltcG9ydCB0cmVlX3NpemUgZnJvbSBcIi4vc2l6ZS5qc1wiO1xuaW1wb3J0IHRyZWVfdmlzaXQgZnJvbSBcIi4vdmlzaXQuanNcIjtcbmltcG9ydCB0cmVlX3Zpc2l0QWZ0ZXIgZnJvbSBcIi4vdmlzaXRBZnRlci5qc1wiO1xuaW1wb3J0IHRyZWVfeCwge2RlZmF1bHRYfSBmcm9tIFwiLi94LmpzXCI7XG5pbXBvcnQgdHJlZV95LCB7ZGVmYXVsdFl9IGZyb20gXCIuL3kuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZHRyZWUobm9kZXMsIHgsIHkpIHtcbiAgdmFyIHRyZWUgPSBuZXcgUXVhZHRyZWUoeCA9PSBudWxsID8gZGVmYXVsdFggOiB4LCB5ID09IG51bGwgPyBkZWZhdWx0WSA6IHksIE5hTiwgTmFOLCBOYU4sIE5hTik7XG4gIHJldHVybiBub2RlcyA9PSBudWxsID8gdHJlZSA6IHRyZWUuYWRkQWxsKG5vZGVzKTtcbn1cblxuZnVuY3Rpb24gUXVhZHRyZWUoeCwgeSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5feCA9IHg7XG4gIHRoaXMuX3kgPSB5O1xuICB0aGlzLl94MCA9IHgwO1xuICB0aGlzLl95MCA9IHkwO1xuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICB0aGlzLl9yb290ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBsZWFmX2NvcHkobGVhZikge1xuICB2YXIgY29weSA9IHtkYXRhOiBsZWFmLmRhdGF9LCBuZXh0ID0gY29weTtcbiAgd2hpbGUgKGxlYWYgPSBsZWFmLm5leHQpIG5leHQgPSBuZXh0Lm5leHQgPSB7ZGF0YTogbGVhZi5kYXRhfTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbnZhciB0cmVlUHJvdG8gPSBxdWFkdHJlZS5wcm90b3R5cGUgPSBRdWFkdHJlZS5wcm90b3R5cGU7XG5cbnRyZWVQcm90by5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb3B5ID0gbmV3IFF1YWR0cmVlKHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgbm9kZXMsXG4gICAgICBjaGlsZDtcblxuICBpZiAoIW5vZGUpIHJldHVybiBjb3B5O1xuXG4gIGlmICghbm9kZS5sZW5ndGgpIHJldHVybiBjb3B5Ll9yb290ID0gbGVhZl9jb3B5KG5vZGUpLCBjb3B5O1xuXG4gIG5vZGVzID0gW3tzb3VyY2U6IG5vZGUsIHRhcmdldDogY29weS5fcm9vdCA9IG5ldyBBcnJheSg0KX1dO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGUuc291cmNlW2ldKSB7XG4gICAgICAgIGlmIChjaGlsZC5sZW5ndGgpIG5vZGVzLnB1c2goe3NvdXJjZTogY2hpbGQsIHRhcmdldDogbm9kZS50YXJnZXRbaV0gPSBuZXcgQXJyYXkoNCl9KTtcbiAgICAgICAgZWxzZSBub2RlLnRhcmdldFtpXSA9IGxlYWZfY29weShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuXG50cmVlUHJvdG8uYWRkID0gdHJlZV9hZGQ7XG50cmVlUHJvdG8uYWRkQWxsID0gdHJlZV9hZGRBbGw7XG50cmVlUHJvdG8uY292ZXIgPSB0cmVlX2NvdmVyO1xudHJlZVByb3RvLmRhdGEgPSB0cmVlX2RhdGE7XG50cmVlUHJvdG8uZXh0ZW50ID0gdHJlZV9leHRlbnQ7XG50cmVlUHJvdG8uZmluZCA9IHRyZWVfZmluZDtcbnRyZWVQcm90by5yZW1vdmUgPSB0cmVlX3JlbW92ZTtcbnRyZWVQcm90by5yZW1vdmVBbGwgPSB0cmVlX3JlbW92ZUFsbDtcbnRyZWVQcm90by5yb290ID0gdHJlZV9yb290O1xudHJlZVByb3RvLnNpemUgPSB0cmVlX3NpemU7XG50cmVlUHJvdG8udmlzaXQgPSB0cmVlX3Zpc2l0O1xudHJlZVByb3RvLnZpc2l0QWZ0ZXIgPSB0cmVlX3Zpc2l0QWZ0ZXI7XG50cmVlUHJvdG8ueCA9IHRyZWVfeDtcbnRyZWVQcm90by55ID0gdHJlZV95O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhbmRvbSkge1xuICByZXR1cm4gKHJhbmRvbSgpIC0gMC41KSAqIDFlLTY7XG59XG4iLCAiaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBqaWdnbGUgZnJvbSBcIi4vamlnZ2xlLmpzXCI7XG5cbmZ1bmN0aW9uIHgoZCkge1xuICByZXR1cm4gZC54ICsgZC52eDtcbn1cblxuZnVuY3Rpb24geShkKSB7XG4gIHJldHVybiBkLnkgKyBkLnZ5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYWRpdXMpIHtcbiAgdmFyIG5vZGVzLFxuICAgICAgcmFkaWksXG4gICAgICByYW5kb20sXG4gICAgICBzdHJlbmd0aCA9IDEsXG4gICAgICBpdGVyYXRpb25zID0gMTtcblxuICBpZiAodHlwZW9mIHJhZGl1cyAhPT0gXCJmdW5jdGlvblwiKSByYWRpdXMgPSBjb25zdGFudChyYWRpdXMgPT0gbnVsbCA/IDEgOiArcmFkaXVzKTtcblxuICBmdW5jdGlvbiBmb3JjZSgpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgdHJlZSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgeGksXG4gICAgICAgIHlpLFxuICAgICAgICByaSxcbiAgICAgICAgcmkyO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIHRyZWUgPSBxdWFkdHJlZShub2RlcywgeCwgeSkudmlzaXRBZnRlcihwcmVwYXJlKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICByaSA9IHJhZGlpW25vZGUuaW5kZXhdLCByaTIgPSByaSAqIHJpO1xuICAgICAgICB4aSA9IG5vZGUueCArIG5vZGUudng7XG4gICAgICAgIHlpID0gbm9kZS55ICsgbm9kZS52eTtcbiAgICAgICAgdHJlZS52aXNpdChhcHBseSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHkocXVhZCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgICAgIHZhciBkYXRhID0gcXVhZC5kYXRhLCByaiA9IHF1YWQuciwgciA9IHJpICsgcmo7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5pbmRleCA+IG5vZGUuaW5kZXgpIHtcbiAgICAgICAgICB2YXIgeCA9IHhpIC0gZGF0YS54IC0gZGF0YS52eCxcbiAgICAgICAgICAgICAgeSA9IHlpIC0gZGF0YS55IC0gZGF0YS52eSxcbiAgICAgICAgICAgICAgbCA9IHggKiB4ICsgeSAqIHk7XG4gICAgICAgICAgaWYgKGwgPCByICogcikge1xuICAgICAgICAgICAgaWYgKHggPT09IDApIHggPSBqaWdnbGUocmFuZG9tKSwgbCArPSB4ICogeDtcbiAgICAgICAgICAgIGlmICh5ID09PSAwKSB5ID0gamlnZ2xlKHJhbmRvbSksIGwgKz0geSAqIHk7XG4gICAgICAgICAgICBsID0gKHIgLSAobCA9IE1hdGguc3FydChsKSkpIC8gbCAqIHN0cmVuZ3RoO1xuICAgICAgICAgICAgbm9kZS52eCArPSAoeCAqPSBsKSAqIChyID0gKHJqICo9IHJqKSAvIChyaTIgKyByaikpO1xuICAgICAgICAgICAgbm9kZS52eSArPSAoeSAqPSBsKSAqIHI7XG4gICAgICAgICAgICBkYXRhLnZ4IC09IHggKiAociA9IDEgLSByKTtcbiAgICAgICAgICAgIGRhdGEudnkgLT0geSAqIHI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4MCA+IHhpICsgciB8fCB4MSA8IHhpIC0gciB8fCB5MCA+IHlpICsgciB8fCB5MSA8IHlpIC0gcjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKHF1YWQpIHtcbiAgICBpZiAocXVhZC5kYXRhKSByZXR1cm4gcXVhZC5yID0gcmFkaWlbcXVhZC5kYXRhLmluZGV4XTtcbiAgICBmb3IgKHZhciBpID0gcXVhZC5yID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKHF1YWRbaV0gJiYgcXVhZFtpXS5yID4gcXVhZC5yKSB7XG4gICAgICAgIHF1YWQuciA9IHF1YWRbaV0ucjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcbiAgICByYWRpaSA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHJhZGlpW25vZGUuaW5kZXhdID0gK3JhZGl1cyhub2RlLCBpLCBub2Rlcyk7XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oX25vZGVzLCBfcmFuZG9tKSB7XG4gICAgbm9kZXMgPSBfbm9kZXM7XG4gICAgcmFuZG9tID0gX3JhbmRvbTtcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2UuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIGZvcmNlKSA6IGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSArXywgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UucmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhZGl1cyA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHJhZGl1cztcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCAiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZS5qc1wiO1xuXG5mdW5jdGlvbiBpbmRleChkKSB7XG4gIHJldHVybiBkLmluZGV4O1xufVxuXG5mdW5jdGlvbiBmaW5kKG5vZGVCeUlkLCBub2RlSWQpIHtcbiAgdmFyIG5vZGUgPSBub2RlQnlJZC5nZXQobm9kZUlkKTtcbiAgaWYgKCFub2RlKSB0aHJvdyBuZXcgRXJyb3IoXCJub2RlIG5vdCBmb3VuZDogXCIgKyBub2RlSWQpO1xuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obGlua3MpIHtcbiAgdmFyIGlkID0gaW5kZXgsXG4gICAgICBzdHJlbmd0aCA9IGRlZmF1bHRTdHJlbmd0aCxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlID0gY29uc3RhbnQoMzApLFxuICAgICAgZGlzdGFuY2VzLFxuICAgICAgbm9kZXMsXG4gICAgICBjb3VudCxcbiAgICAgIGJpYXMsXG4gICAgICByYW5kb20sXG4gICAgICBpdGVyYXRpb25zID0gMTtcblxuICBpZiAobGlua3MgPT0gbnVsbCkgbGlua3MgPSBbXTtcblxuICBmdW5jdGlvbiBkZWZhdWx0U3RyZW5ndGgobGluaykge1xuICAgIHJldHVybiAxIC8gTWF0aC5taW4oY291bnRbbGluay5zb3VyY2UuaW5kZXhdLCBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9yY2UoYWxwaGEpIHtcbiAgICBmb3IgKHZhciBrID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgayA8IGl0ZXJhdGlvbnM7ICsraykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxpbmssIHNvdXJjZSwgdGFyZ2V0LCB4LCB5LCBsLCBiOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rc1tpXSwgc291cmNlID0gbGluay5zb3VyY2UsIHRhcmdldCA9IGxpbmsudGFyZ2V0O1xuICAgICAgICB4ID0gdGFyZ2V0LnggKyB0YXJnZXQudnggLSBzb3VyY2UueCAtIHNvdXJjZS52eCB8fCBqaWdnbGUocmFuZG9tKTtcbiAgICAgICAgeSA9IHRhcmdldC55ICsgdGFyZ2V0LnZ5IC0gc291cmNlLnkgLSBzb3VyY2UudnkgfHwgamlnZ2xlKHJhbmRvbSk7XG4gICAgICAgIGwgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgIGwgPSAobCAtIGRpc3RhbmNlc1tpXSkgLyBsICogYWxwaGEgKiBzdHJlbmd0aHNbaV07XG4gICAgICAgIHggKj0gbCwgeSAqPSBsO1xuICAgICAgICB0YXJnZXQudnggLT0geCAqIChiID0gYmlhc1tpXSk7XG4gICAgICAgIHRhcmdldC52eSAtPSB5ICogYjtcbiAgICAgICAgc291cmNlLnZ4ICs9IHggKiAoYiA9IDEgLSBiKTtcbiAgICAgICAgc291cmNlLnZ5ICs9IHkgKiBiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuXG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG0gPSBsaW5rcy5sZW5ndGgsXG4gICAgICAgIG5vZGVCeUlkID0gbmV3IE1hcChub2Rlcy5tYXAoKGQsIGkpID0+IFtpZChkLCBpLCBub2RlcyksIGRdKSksXG4gICAgICAgIGxpbms7XG5cbiAgICBmb3IgKGkgPSAwLCBjb3VudCA9IG5ldyBBcnJheShuKTsgaSA8IG07ICsraSkge1xuICAgICAgbGluayA9IGxpbmtzW2ldLCBsaW5rLmluZGV4ID0gaTtcbiAgICAgIGlmICh0eXBlb2YgbGluay5zb3VyY2UgIT09IFwib2JqZWN0XCIpIGxpbmsuc291cmNlID0gZmluZChub2RlQnlJZCwgbGluay5zb3VyY2UpO1xuICAgICAgaWYgKHR5cGVvZiBsaW5rLnRhcmdldCAhPT0gXCJvYmplY3RcIikgbGluay50YXJnZXQgPSBmaW5kKG5vZGVCeUlkLCBsaW5rLnRhcmdldCk7XG4gICAgICBjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gPSAoY291bnRbbGluay5zb3VyY2UuaW5kZXhdIHx8IDApICsgMTtcbiAgICAgIGNvdW50W2xpbmsudGFyZ2V0LmluZGV4XSA9IChjb3VudFtsaW5rLnRhcmdldC5pbmRleF0gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGJpYXMgPSBuZXcgQXJyYXkobSk7IGkgPCBtOyArK2kpIHtcbiAgICAgIGxpbmsgPSBsaW5rc1tpXSwgYmlhc1tpXSA9IGNvdW50W2xpbmsuc291cmNlLmluZGV4XSAvIChjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gKyBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0pO1xuICAgIH1cblxuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShtKSwgaW5pdGlhbGl6ZVN0cmVuZ3RoKCk7XG4gICAgZGlzdGFuY2VzID0gbmV3IEFycmF5KG0pLCBpbml0aWFsaXplRGlzdGFuY2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVTdHJlbmd0aCgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgc3RyZW5ndGhzW2ldID0gK3N0cmVuZ3RoKGxpbmtzW2ldLCBpLCBsaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZURpc3RhbmNlKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcblxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbGlua3MubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBkaXN0YW5jZXNbaV0gPSArZGlzdGFuY2UobGlua3NbaV0sIGksIGxpbmtzKTtcbiAgICB9XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oX25vZGVzLCBfcmFuZG9tKSB7XG4gICAgbm9kZXMgPSBfbm9kZXM7XG4gICAgcmFuZG9tID0gX3JhbmRvbTtcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2UubGlua3MgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobGlua3MgPSBfLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IGxpbmtzO1xuICB9O1xuXG4gIGZvcmNlLmlkID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlkID0gXywgZm9yY2UpIDogaWQ7XG4gIH07XG5cbiAgZm9yY2UuaXRlcmF0aW9ucyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpdGVyYXRpb25zID0gK18sIGZvcmNlKSA6IGl0ZXJhdGlvbnM7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZVN0cmVuZ3RoKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemVEaXN0YW5jZSgpLCBmb3JjZSkgOiBkaXN0YW5jZTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCAiLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGluZWFyX2NvbmdydWVudGlhbF9nZW5lcmF0b3IjUGFyYW1ldGVyc19pbl9jb21tb25fdXNlXG5jb25zdCBhID0gMTY2NDUyNTtcbmNvbnN0IGMgPSAxMDEzOTA0MjIzO1xuY29uc3QgbSA9IDQyOTQ5NjcyOTY7IC8vIDJeMzJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzID0gMTtcbiAgcmV0dXJuICgpID0+IChzID0gKGEgKiBzICsgYykgJSBtKSAvIG07XG59XG4iLCAiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3RpbWVyfSBmcm9tIFwiZDMtdGltZXJcIjtcbmltcG9ydCBsY2cgZnJvbSBcIi4vbGNnLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55O1xufVxuXG52YXIgaW5pdGlhbFJhZGl1cyA9IDEwLFxuICAgIGluaXRpYWxBbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGVzKSB7XG4gIHZhciBzaW11bGF0aW9uLFxuICAgICAgYWxwaGEgPSAxLFxuICAgICAgYWxwaGFNaW4gPSAwLjAwMSxcbiAgICAgIGFscGhhRGVjYXkgPSAxIC0gTWF0aC5wb3coYWxwaGFNaW4sIDEgLyAzMDApLFxuICAgICAgYWxwaGFUYXJnZXQgPSAwLFxuICAgICAgdmVsb2NpdHlEZWNheSA9IDAuNixcbiAgICAgIGZvcmNlcyA9IG5ldyBNYXAoKSxcbiAgICAgIHN0ZXBwZXIgPSB0aW1lcihzdGVwKSxcbiAgICAgIGV2ZW50ID0gZGlzcGF0Y2goXCJ0aWNrXCIsIFwiZW5kXCIpLFxuICAgICAgcmFuZG9tID0gbGNnKCk7XG5cbiAgaWYgKG5vZGVzID09IG51bGwpIG5vZGVzID0gW107XG5cbiAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICB0aWNrKCk7XG4gICAgZXZlbnQuY2FsbChcInRpY2tcIiwgc2ltdWxhdGlvbik7XG4gICAgaWYgKGFscGhhIDwgYWxwaGFNaW4pIHtcbiAgICAgIHN0ZXBwZXIuc3RvcCgpO1xuICAgICAgZXZlbnQuY2FsbChcImVuZFwiLCBzaW11bGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGl0ZXJhdGlvbnMpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcblxuICAgIGlmIChpdGVyYXRpb25zID09PSB1bmRlZmluZWQpIGl0ZXJhdGlvbnMgPSAxO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGFscGhhICs9IChhbHBoYVRhcmdldCAtIGFscGhhKSAqIGFscGhhRGVjYXk7XG5cbiAgICAgIGZvcmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgICAgIGZvcmNlKGFscGhhKTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuZnggPT0gbnVsbCkgbm9kZS54ICs9IG5vZGUudnggKj0gdmVsb2NpdHlEZWNheTtcbiAgICAgICAgZWxzZSBub2RlLnggPSBub2RlLmZ4LCBub2RlLnZ4ID0gMDtcbiAgICAgICAgaWYgKG5vZGUuZnkgPT0gbnVsbCkgbm9kZS55ICs9IG5vZGUudnkgKj0gdmVsb2NpdHlEZWNheTtcbiAgICAgICAgZWxzZSBub2RlLnkgPSBub2RlLmZ5LCBub2RlLnZ5ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2ltdWxhdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVOb2RlcygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLmluZGV4ID0gaTtcbiAgICAgIGlmIChub2RlLmZ4ICE9IG51bGwpIG5vZGUueCA9IG5vZGUuZng7XG4gICAgICBpZiAobm9kZS5meSAhPSBudWxsKSBub2RlLnkgPSBub2RlLmZ5O1xuICAgICAgaWYgKGlzTmFOKG5vZGUueCkgfHwgaXNOYU4obm9kZS55KSkge1xuICAgICAgICB2YXIgcmFkaXVzID0gaW5pdGlhbFJhZGl1cyAqIE1hdGguc3FydCgwLjUgKyBpKSwgYW5nbGUgPSBpICogaW5pdGlhbEFuZ2xlO1xuICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIG5vZGUueSA9IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihub2RlLnZ4KSB8fCBpc05hTihub2RlLnZ5KSkge1xuICAgICAgICBub2RlLnZ4ID0gbm9kZS52eSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZUZvcmNlKGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlLmluaXRpYWxpemUpIGZvcmNlLmluaXRpYWxpemUobm9kZXMsIHJhbmRvbSk7XG4gICAgcmV0dXJuIGZvcmNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZU5vZGVzKCk7XG5cbiAgcmV0dXJuIHNpbXVsYXRpb24gPSB7XG4gICAgdGljazogdGljayxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXBwZXIucmVzdGFydChzdGVwKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5zdG9wKCksIHNpbXVsYXRpb247XG4gICAgfSxcblxuICAgIG5vZGVzOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlcyA9IF8sIGluaXRpYWxpemVOb2RlcygpLCBmb3JjZXMuZm9yRWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IG5vZGVzO1xuICAgIH0sXG5cbiAgICBhbHBoYTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYTtcbiAgICB9LFxuXG4gICAgYWxwaGFNaW46IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhTWluID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFNaW47XG4gICAgfSxcblxuICAgIGFscGhhRGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhRGVjYXkgPSArXywgc2ltdWxhdGlvbikgOiArYWxwaGFEZWNheTtcbiAgICB9LFxuXG4gICAgYWxwaGFUYXJnZXQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhVGFyZ2V0ID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFUYXJnZXQ7XG4gICAgfSxcblxuICAgIHZlbG9jaXR5RGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZlbG9jaXR5RGVjYXkgPSAxIC0gXywgc2ltdWxhdGlvbikgOiAxIC0gdmVsb2NpdHlEZWNheTtcbiAgICB9LFxuXG4gICAgcmFuZG9tU291cmNlOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5kb20gPSBfLCBmb3JjZXMuZm9yRWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IHJhbmRvbTtcbiAgICB9LFxuXG4gICAgZm9yY2U6IGZ1bmN0aW9uKG5hbWUsIF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICgoXyA9PSBudWxsID8gZm9yY2VzLmRlbGV0ZShuYW1lKSA6IGZvcmNlcy5zZXQobmFtZSwgaW5pdGlhbGl6ZUZvcmNlKF8pKSksIHNpbXVsYXRpb24pIDogZm9yY2VzLmdldChuYW1lKTtcbiAgICB9LFxuXG4gICAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBkeCxcbiAgICAgICAgICBkeSxcbiAgICAgICAgICBkMixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIGNsb3Nlc3Q7XG5cbiAgICAgIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gICAgICBlbHNlIHJhZGl1cyAqPSByYWRpdXM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBkeCA9IHggLSBub2RlLng7XG4gICAgICAgIGR5ID0geSAtIG5vZGUueTtcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgICAgaWYgKGQyIDwgcmFkaXVzKSBjbG9zZXN0ID0gbm9kZSwgcmFkaXVzID0gZDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKGV2ZW50Lm9uKG5hbWUsIF8pLCBzaW11bGF0aW9uKSA6IGV2ZW50Lm9uKG5hbWUpO1xuICAgIH1cbiAgfTtcbn1cbiIsICJpbXBvcnQge3F1YWR0cmVlfSBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGppZ2dsZSBmcm9tIFwiLi9qaWdnbGUuanNcIjtcbmltcG9ydCB7eCwgeX0gZnJvbSBcIi4vc2ltdWxhdGlvbi5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzLFxuICAgICAgbm9kZSxcbiAgICAgIHJhbmRvbSxcbiAgICAgIGFscGhhLFxuICAgICAgc3RyZW5ndGggPSBjb25zdGFudCgtMzApLFxuICAgICAgc3RyZW5ndGhzLFxuICAgICAgZGlzdGFuY2VNaW4yID0gMSxcbiAgICAgIGRpc3RhbmNlTWF4MiA9IEluZmluaXR5LFxuICAgICAgdGhldGEyID0gMC44MTtcblxuICBmdW5jdGlvbiBmb3JjZShfKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIHRyZWUgPSBxdWFkdHJlZShub2RlcywgeCwgeSkudmlzaXRBZnRlcihhY2N1bXVsYXRlKTtcbiAgICBmb3IgKGFscGhhID0gXywgaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgdHJlZS52aXNpdChhcHBseSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgbm9kZSA9IG5vZGVzW2ldLCBzdHJlbmd0aHNbbm9kZS5pbmRleF0gPSArc3RyZW5ndGgobm9kZSwgaSwgbm9kZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWNjdW11bGF0ZShxdWFkKSB7XG4gICAgdmFyIHN0cmVuZ3RoID0gMCwgcSwgYywgd2VpZ2h0ID0gMCwgeCwgeSwgaTtcblxuICAgIC8vIEZvciBpbnRlcm5hbCBub2RlcywgYWNjdW11bGF0ZSBmb3JjZXMgZnJvbSBjaGlsZCBxdWFkcmFudHMuXG4gICAgaWYgKHF1YWQubGVuZ3RoKSB7XG4gICAgICBmb3IgKHggPSB5ID0gaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgaWYgKChxID0gcXVhZFtpXSkgJiYgKGMgPSBNYXRoLmFicyhxLnZhbHVlKSkpIHtcbiAgICAgICAgICBzdHJlbmd0aCArPSBxLnZhbHVlLCB3ZWlnaHQgKz0gYywgeCArPSBjICogcS54LCB5ICs9IGMgKiBxLnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHF1YWQueCA9IHggLyB3ZWlnaHQ7XG4gICAgICBxdWFkLnkgPSB5IC8gd2VpZ2h0O1xuICAgIH1cblxuICAgIC8vIEZvciBsZWFmIG5vZGVzLCBhY2N1bXVsYXRlIGZvcmNlcyBmcm9tIGNvaW5jaWRlbnQgcXVhZHJhbnRzLlxuICAgIGVsc2Uge1xuICAgICAgcSA9IHF1YWQ7XG4gICAgICBxLnggPSBxLmRhdGEueDtcbiAgICAgIHEueSA9IHEuZGF0YS55O1xuICAgICAgZG8gc3RyZW5ndGggKz0gc3RyZW5ndGhzW3EuZGF0YS5pbmRleF07XG4gICAgICB3aGlsZSAocSA9IHEubmV4dCk7XG4gICAgfVxuXG4gICAgcXVhZC52YWx1ZSA9IHN0cmVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHkocXVhZCwgeDEsIF8sIHgyKSB7XG4gICAgaWYgKCFxdWFkLnZhbHVlKSByZXR1cm4gdHJ1ZTtcblxuICAgIHZhciB4ID0gcXVhZC54IC0gbm9kZS54LFxuICAgICAgICB5ID0gcXVhZC55IC0gbm9kZS55LFxuICAgICAgICB3ID0geDIgLSB4MSxcbiAgICAgICAgbCA9IHggKiB4ICsgeSAqIHk7XG5cbiAgICAvLyBBcHBseSB0aGUgQmFybmVzLUh1dCBhcHByb3hpbWF0aW9uIGlmIHBvc3NpYmxlLlxuICAgIC8vIExpbWl0IGZvcmNlcyBmb3IgdmVyeSBjbG9zZSBub2RlczsgcmFuZG9taXplIGRpcmVjdGlvbiBpZiBjb2luY2lkZW50LlxuICAgIGlmICh3ICogdyAvIHRoZXRhMiA8IGwpIHtcbiAgICAgIGlmIChsIDwgZGlzdGFuY2VNYXgyKSB7XG4gICAgICAgIGlmICh4ID09PSAwKSB4ID0gamlnZ2xlKHJhbmRvbSksIGwgKz0geCAqIHg7XG4gICAgICAgIGlmICh5ID09PSAwKSB5ID0gamlnZ2xlKHJhbmRvbSksIGwgKz0geSAqIHk7XG4gICAgICAgIGlmIChsIDwgZGlzdGFuY2VNaW4yKSBsID0gTWF0aC5zcXJ0KGRpc3RhbmNlTWluMiAqIGwpO1xuICAgICAgICBub2RlLnZ4ICs9IHggKiBxdWFkLnZhbHVlICogYWxwaGEgLyBsO1xuICAgICAgICBub2RlLnZ5ICs9IHkgKiBxdWFkLnZhbHVlICogYWxwaGEgLyBsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCBwcm9jZXNzIHBvaW50cyBkaXJlY3RseS5cbiAgICBlbHNlIGlmIChxdWFkLmxlbmd0aCB8fCBsID49IGRpc3RhbmNlTWF4MikgcmV0dXJuO1xuXG4gICAgLy8gTGltaXQgZm9yY2VzIGZvciB2ZXJ5IGNsb3NlIG5vZGVzOyByYW5kb21pemUgZGlyZWN0aW9uIGlmIGNvaW5jaWRlbnQuXG4gICAgaWYgKHF1YWQuZGF0YSAhPT0gbm9kZSB8fCBxdWFkLm5leHQpIHtcbiAgICAgIGlmICh4ID09PSAwKSB4ID0gamlnZ2xlKHJhbmRvbSksIGwgKz0geCAqIHg7XG4gICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZShyYW5kb20pLCBsICs9IHkgKiB5O1xuICAgICAgaWYgKGwgPCBkaXN0YW5jZU1pbjIpIGwgPSBNYXRoLnNxcnQoZGlzdGFuY2VNaW4yICogbCk7XG4gICAgfVxuXG4gICAgZG8gaWYgKHF1YWQuZGF0YSAhPT0gbm9kZSkge1xuICAgICAgdyA9IHN0cmVuZ3Roc1txdWFkLmRhdGEuaW5kZXhdICogYWxwaGEgLyBsO1xuICAgICAgbm9kZS52eCArPSB4ICogdztcbiAgICAgIG5vZGUudnkgKz0geSAqIHc7XG4gICAgfSB3aGlsZSAocXVhZCA9IHF1YWQubmV4dCk7XG4gIH1cblxuICBmb3JjZS5pbml0aWFsaXplID0gZnVuY3Rpb24oX25vZGVzLCBfcmFuZG9tKSB7XG4gICAgbm9kZXMgPSBfbm9kZXM7XG4gICAgcmFuZG9tID0gX3JhbmRvbTtcbiAgICBpbml0aWFsaXplKCk7XG4gIH07XG5cbiAgZm9yY2Uuc3RyZW5ndGggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RyZW5ndGggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5kaXN0YW5jZU1pbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkaXN0YW5jZU1pbjIgPSBfICogXywgZm9yY2UpIDogTWF0aC5zcXJ0KGRpc3RhbmNlTWluMik7XG4gIH07XG5cbiAgZm9yY2UuZGlzdGFuY2VNYXggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGlzdGFuY2VNYXgyID0gXyAqIF8sIGZvcmNlKSA6IE1hdGguc3FydChkaXN0YW5jZU1heDIpO1xuICB9O1xuXG4gIGZvcmNlLnRoZXRhID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoZXRhMiA9IF8gKiBfLCBmb3JjZSkgOiBNYXRoLnNxcnQodGhldGEyKTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIFx1MDBCMUluZmluaXR5XG4gIHZhciBpLCBjb2VmZmljaWVudCA9IHguc2xpY2UoMCwgaSk7XG5cbiAgLy8gVGhlIHN0cmluZyByZXR1cm5lZCBieSB0b0V4cG9uZW50aWFsIGVpdGhlciBoYXMgdGhlIGZvcm0gXFxkXFwuXFxkK2VbLStdXFxkK1xuICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICByZXR1cm4gW1xuICAgIGNvZWZmaWNpZW50Lmxlbmd0aCA+IDEgPyBjb2VmZmljaWVudFswXSArIGNvZWZmaWNpZW50LnNsaWNlKDIpIDogY29lZmZpY2llbnQsXG4gICAgK3guc2xpY2UoaSArIDEpXG4gIF07XG59XG4iLCAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCB3aWR0aCkge1xuICAgIHZhciBpID0gdmFsdWUubGVuZ3RoLFxuICAgICAgICB0ID0gW10sXG4gICAgICAgIGogPSAwLFxuICAgICAgICBnID0gZ3JvdXBpbmdbMF0sXG4gICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoaSA+IDAgJiYgZyA+IDApIHtcbiAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xuICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICBpZiAoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aCkgYnJlYWs7XG4gICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xuICAgIH1cblxuICAgIHJldHVybiB0LnJldmVyc2UoKS5qb2luKHRob3VzYW5kcyk7XG4gIH07XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obnVtZXJhbHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBudW1lcmFsc1sraV07XG4gICAgfSk7XG4gIH07XG59XG4iLCAiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsICIvLyBUcmltcyBpbnNpZ25pZmljYW50IHplcm9zLCBlLmcuLCByZXBsYWNlcyAxLjIwMDBrIHdpdGggMS4yay5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHMpIHtcbiAgb3V0OiBmb3IgKHZhciBuID0gcy5sZW5ndGgsIGkgPSAxLCBpMCA9IC0xLCBpMTsgaSA8IG47ICsraSkge1xuICAgIHN3aXRjaCAoc1tpXSkge1xuICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgY2FzZSBcIjBcIjogaWYgKGkwID09PSAwKSBpMCA9IGk7IGkxID0gaTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG59XG4iLCAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IHZhciBwcmVmaXhFeHBvbmVudDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbFBhcnRzKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG59XG4iLCAiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsICJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5pbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6ICh4LCBwKSA9PiAoeCAqIDEwMCkudG9GaXhlZChwKSxcbiAgXCJiXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpLFxuICBcImNcIjogKHgpID0+IHggKyBcIlwiLFxuICBcImRcIjogZm9ybWF0RGVjaW1hbCxcbiAgXCJlXCI6ICh4LCBwKSA9PiB4LnRvRXhwb25lbnRpYWwocCksXG4gIFwiZlwiOiAoeCwgcCkgPT4geC50b0ZpeGVkKHApLFxuICBcImdcIjogKHgsIHApID0+IHgudG9QcmVjaXNpb24ocCksXG4gIFwib1wiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KSxcbiAgXCJwXCI6ICh4LCBwKSA9PiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApLFxuICBcInJcIjogZm9ybWF0Um91bmRlZCxcbiAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gIFwiWFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxcbiAgXCJ4XCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KVxufTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuaW1wb3J0IGZvcm1hdEdyb3VwIGZyb20gXCIuL2Zvcm1hdEdyb3VwLmpzXCI7XG5pbXBvcnQgZm9ybWF0TnVtZXJhbHMgZnJvbSBcIi4vZm9ybWF0TnVtZXJhbHMuanNcIjtcbmltcG9ydCBmb3JtYXRTcGVjaWZpZXIgZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHJpbSBmcm9tIFwiLi9mb3JtYXRUcmltLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXMuanNcIjtcbmltcG9ydCB7cHJlZml4RXhwb25lbnR9IGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgbWFwID0gQXJyYXkucHJvdG90eXBlLm1hcCxcbiAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIlx1MDBCNVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIlx1MjIxMlwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcbiAgICAgIG5hbiA9IGxvY2FsZS5uYW4gPT09IHVuZGVmaW5lZCA/IFwiTmFOXCIgOiBsb2NhbGUubmFuICsgXCJcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lQcmVmaXggOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVN1ZmZpeCA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxuICAgICAgICB2YXIgdmFsdWVOZWdhdGl2ZSA9IHZhbHVlIDwgMCB8fCAxIC8gdmFsdWUgPCAwO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcblxuICAgICAgICAvLyBUcmltIGluc2lnbmlmaWNhbnQgemVyb3MuXG4gICAgICAgIGlmICh0cmltKSB2YWx1ZSA9IGZvcm1hdFRyaW0odmFsdWUpO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDAgJiYgc2lnbiAhPT0gXCIrXCIpIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9ICh0eXBlID09PSBcInNcIiA/IHByZWZpeGVzWzggKyBwcmVmaXhFeHBvbmVudCAvIDNdIDogXCJcIikgKyB2YWx1ZVN1ZmZpeCArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIgXHUyMDFDdmFsdWVcdTIwMUQgcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCBcdTIwMUNzdWZmaXhcdTIwMUQgcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iLCAiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgZm9ybWF0O1xuZXhwb3J0IHZhciBmb3JtYXRQcmVmaXg7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCAiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBpbml0UmFuZ2UoZG9tYWluLCByYW5nZSkge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5yYW5nZShkb21haW4pOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aGlzLnJhbmdlKHJhbmdlKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0SW50ZXJwb2xhdG9yKGRvbWFpbiwgaW50ZXJwb2xhdG9yKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB7XG4gICAgICBpZiAodHlwZW9mIGRvbWFpbiA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihkb21haW4pO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGRvbWFpbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhpcy5kb21haW4oZG9tYWluKTtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJwb2xhdG9yID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGludGVycG9sYXRvcik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwgImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGUgYXMgaW50ZXJwb2xhdGVWYWx1ZSwgaW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUm91bmR9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgdW5pdCA9IFswLCAxXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhLCBiKSB7XG4gIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cbiAgICAgIDogY29uc3RhbnQoaXNOYU4oYikgPyBOYU4gOiAwLjUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGVyKGEsIGIpIHtcbiAgdmFyIHQ7XG4gIGlmIChhID4gYikgdCA9IGEsIGEgPSBiLCBiID0gdDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgubWF4KGEsIE1hdGgubWluKGIsIHgpKTsgfTtcbn1cblxuLy8gbm9ybWFsaXplKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4vLyBpbnRlcnBvbGF0ZShhLCBiKSh0KSB0YWtlcyBhIHBhcmFtZXRlciB0IGluIFswLDFdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJhbmdlIHZhbHVlIHggaW4gW2EsYl0uXG5mdW5jdGlvbiBiaW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICBpZiAoZDEgPCBkMCkgZDAgPSBub3JtYWxpemUoZDEsIGQwKSwgcjAgPSBpbnRlcnBvbGF0ZShyMSwgcjApO1xuICBlbHNlIGQwID0gbm9ybWFsaXplKGQwLCBkMSksIHIwID0gaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbn1cblxuZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgaiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCkgLSAxLFxuICAgICAgZCA9IG5ldyBBcnJheShqKSxcbiAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICBpID0gLTE7XG5cbiAgLy8gUmV2ZXJzZSBkZXNjZW5kaW5nIGRvbWFpbnMuXG4gIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICBkb21haW4gPSBkb21haW4uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmFuZ2UgPSByYW5nZS5zbGljZSgpLnJldmVyc2UoKTtcbiAgfVxuXG4gIHdoaWxlICgrK2kgPCBqKSB7XG4gICAgZFtpXSA9IG5vcm1hbGl6ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xuICAgIHJbaV0gPSBpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGkgPSBiaXNlY3QoZG9tYWluLCB4LCAxLCBqKSAtIDE7XG4gICAgcmV0dXJuIHJbaV0oZFtpXSh4KSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgLmludGVycG9sYXRlKHNvdXJjZS5pbnRlcnBvbGF0ZSgpKVxuICAgICAgLmNsYW1wKHNvdXJjZS5jbGFtcCgpKVxuICAgICAgLnVua25vd24oc291cmNlLnVua25vd24oKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1lcigpIHtcbiAgdmFyIGRvbWFpbiA9IHVuaXQsXG4gICAgICByYW5nZSA9IHVuaXQsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlVmFsdWUsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICB1bnRyYW5zZm9ybSxcbiAgICAgIHVua25vd24sXG4gICAgICBjbGFtcCA9IGlkZW50aXR5LFxuICAgICAgcGllY2V3aXNlLFxuICAgICAgb3V0cHV0LFxuICAgICAgaW5wdXQ7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICB2YXIgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCk7XG4gICAgaWYgKGNsYW1wICE9PSBpZGVudGl0eSkgY2xhbXAgPSBjbGFtcGVyKGRvbWFpblswXSwgZG9tYWluW24gLSAxXSk7XG4gICAgcGllY2V3aXNlID0gbiA+IDIgPyBwb2x5bWFwIDogYmltYXA7XG4gICAgb3V0cHV0ID0gaW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICByZXR1cm4geCA9PSBudWxsIHx8IGlzTmFOKHggPSAreCkgPyB1bmtub3duIDogKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgcmFuZ2UsIGludGVycG9sYXRlKSkpKHRyYW5zZm9ybShjbGFtcCh4KSkpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBjbGFtcCh1bnRyYW5zZm9ybSgoaW5wdXQgfHwgKGlucHV0ID0gcGllY2V3aXNlKHJhbmdlLCBkb21haW4ubWFwKHRyYW5zZm9ybSksIGludGVycG9sYXRlTnVtYmVyKSkpKHkpKSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IEFycmF5LmZyb20oXywgbnVtYmVyKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gQXJyYXkuZnJvbShfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9IF8gPyB0cnVlIDogaWRlbnRpdHksIHJlc2NhbGUoKSkgOiBjbGFtcCAhPT0gaWRlbnRpdHk7XG4gIH07XG5cbiAgc2NhbGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdGUgPSBfLCByZXNjYWxlKCkpIDogaW50ZXJwb2xhdGU7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24odCwgdSkge1xuICAgIHRyYW5zZm9ybSA9IHQsIHVudHJhbnNmb3JtID0gdTtcbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250aW51b3VzKCkge1xuICByZXR1cm4gdHJhbnNmb3JtZXIoKShpZGVudGl0eSwgaWRlbnRpdHkpO1xufVxuIiwgImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrRm9ybWF0KHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsICJpbXBvcnQge3RpY2tzLCB0aWNrSW5jcmVtZW50fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tGb3JtYXQoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgdmFyIGkwID0gMDtcbiAgICB2YXIgaTEgPSBkLmxlbmd0aCAtIDE7XG4gICAgdmFyIHN0YXJ0ID0gZFtpMF07XG4gICAgdmFyIHN0b3AgPSBkW2kxXTtcbiAgICB2YXIgcHJlc3RlcDtcbiAgICB2YXIgc3RlcDtcbiAgICB2YXIgbWF4SXRlciA9IDEwO1xuXG4gICAgaWYgKHN0b3AgPCBzdGFydCkge1xuICAgICAgc3RlcCA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBzdGVwO1xuICAgICAgc3RlcCA9IGkwLCBpMCA9IGkxLCBpMSA9IHN0ZXA7XG4gICAgfVxuICAgIFxuICAgIHdoaWxlIChtYXhJdGVyLS0gPiAwKSB7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgICAgaWYgKHN0ZXAgPT09IHByZXN0ZXApIHtcbiAgICAgICAgZFtpMF0gPSBzdGFydFxuICAgICAgICBkW2kxXSA9IHN0b3BcbiAgICAgICAgcmV0dXJuIGRvbWFpbihkKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA+IDApIHtcbiAgICAgICAgc3RhcnQgPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmVzdGVwID0gc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGxpbmVhcigpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFpvb21FdmVudCh0eXBlLCB7XG4gIHNvdXJjZUV2ZW50LFxuICB0YXJnZXQsXG4gIHRyYW5zZm9ybSxcbiAgZGlzcGF0Y2hcbn0pIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgIHR5cGU6IHt2YWx1ZTogdHlwZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBzb3VyY2VFdmVudDoge3ZhbHVlOiBzb3VyY2VFdmVudCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICB0YXJnZXQ6IHt2YWx1ZTogdGFyZ2V0LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHRyYW5zZm9ybToge3ZhbHVlOiB0cmFuc2Zvcm0sIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgXzoge3ZhbHVlOiBkaXNwYXRjaH1cbiAgfSk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIFRyYW5zZm9ybShrLCB4LCB5KSB7XG4gIHRoaXMuayA9IGs7XG4gIHRoaXMueCA9IHg7XG4gIHRoaXMueSA9IHk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2Zvcm0sXG4gIHNjYWxlOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmsgKiBrLCB0aGlzLngsIHRoaXMueSk7XG4gIH0sXG4gIHRyYW5zbGF0ZTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB4ID09PSAwICYgeSA9PT0gMCA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuaywgdGhpcy54ICsgdGhpcy5rICogeCwgdGhpcy55ICsgdGhpcy5rICogeSk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbihwb2ludCkge1xuICAgIHJldHVybiBbcG9pbnRbMF0gKiB0aGlzLmsgKyB0aGlzLngsIHBvaW50WzFdICogdGhpcy5rICsgdGhpcy55XTtcbiAgfSxcbiAgYXBwbHlYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHggKiB0aGlzLmsgKyB0aGlzLng7XG4gIH0sXG4gIGFwcGx5WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5ICogdGhpcy5rICsgdGhpcy55O1xuICB9LFxuICBpbnZlcnQ6IGZ1bmN0aW9uKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIFsobG9jYXRpb25bMF0gLSB0aGlzLngpIC8gdGhpcy5rLCAobG9jYXRpb25bMV0gLSB0aGlzLnkpIC8gdGhpcy5rXTtcbiAgfSxcbiAgaW52ZXJ0WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMueCkgLyB0aGlzLms7XG4gIH0sXG4gIGludmVydFk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLnkpIC8gdGhpcy5rO1xuICB9LFxuICByZXNjYWxlWDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4LmNvcHkoKS5kb21haW4oeC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsIHRoaXMpLm1hcCh4LmludmVydCwgeCkpO1xuICB9LFxuICByZXNjYWxlWTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiB5LmNvcHkoKS5kb21haW4oeS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksIHRoaXMpLm1hcCh5LmludmVydCwgeSkpO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIikgc2NhbGUoXCIgKyB0aGlzLmsgKyBcIilcIjtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IG5ldyBUcmFuc2Zvcm0oMSwgMCwgMCk7XG5cbnRyYW5zZm9ybS5wcm90b3R5cGUgPSBUcmFuc2Zvcm0ucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0obm9kZSkge1xuICB3aGlsZSAoIW5vZGUuX196b29tKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuIGlkZW50aXR5O1xuICByZXR1cm4gbm9kZS5fX3pvb207XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIG5vcHJvcGFnYXRpb24oZXZlbnQpIHtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuIiwgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHtkcmFnRGlzYWJsZSwgZHJhZ0VuYWJsZX0gZnJvbSBcImQzLWRyYWdcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVab29tfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c2VsZWN0LCBwb2ludGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IFpvb21FdmVudCBmcm9tIFwiLi9ldmVudC5qc1wiO1xuaW1wb3J0IHtUcmFuc2Zvcm0sIGlkZW50aXR5fSBmcm9tIFwiLi90cmFuc2Zvcm0uanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbi8vIGV4Y2VwdCBmb3IgcGluY2gtdG8tem9vbSwgd2hpY2ggaXMgc2VudCBhcyBhIHdoZWVsK2N0cmxLZXkgZXZlbnRcbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICghZXZlbnQuY3RybEtleSB8fCBldmVudC50eXBlID09PSAnd2hlZWwnKSAmJiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RXh0ZW50KCkge1xuICB2YXIgZSA9IHRoaXM7XG4gIGlmIChlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkge1xuICAgIGUgPSBlLm93bmVyU1ZHRWxlbWVudCB8fCBlO1xuICAgIGlmIChlLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICAgIGUgPSBlLnZpZXdCb3guYmFzZVZhbDtcbiAgICAgIHJldHVybiBbW2UueCwgZS55XSwgW2UueCArIGUud2lkdGgsIGUueSArIGUuaGVpZ2h0XV07XG4gICAgfVxuICAgIHJldHVybiBbWzAsIDBdLCBbZS53aWR0aC5iYXNlVmFsLnZhbHVlLCBlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtlLmNsaWVudFdpZHRoLCBlLmNsaWVudEhlaWdodF1dO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VHJhbnNmb3JtKCkge1xuICByZXR1cm4gdGhpcy5fX3pvb20gfHwgaWRlbnRpdHk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRXaGVlbERlbHRhKGV2ZW50KSB7XG4gIHJldHVybiAtZXZlbnQuZGVsdGFZICogKGV2ZW50LmRlbHRhTW9kZSA9PT0gMSA/IDAuMDUgOiBldmVudC5kZWx0YU1vZGUgPyAxIDogMC4wMDIpICogKGV2ZW50LmN0cmxLZXkgPyAxMCA6IDEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzIHx8IChcIm9udG91Y2hzdGFydFwiIGluIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q29uc3RyYWluKHRyYW5zZm9ybSwgZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpIHtcbiAgdmFyIGR4MCA9IHRyYW5zZm9ybS5pbnZlcnRYKGV4dGVudFswXVswXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMF0sXG4gICAgICBkeDEgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMV1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzBdLFxuICAgICAgZHkwID0gdHJhbnNmb3JtLmludmVydFkoZXh0ZW50WzBdWzFdKSAtIHRyYW5zbGF0ZUV4dGVudFswXVsxXSxcbiAgICAgIGR5MSA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFsxXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMV1bMV07XG4gIHJldHVybiB0cmFuc2Zvcm0udHJhbnNsYXRlKFxuICAgIGR4MSA+IGR4MCA/IChkeDAgKyBkeDEpIC8gMiA6IE1hdGgubWluKDAsIGR4MCkgfHwgTWF0aC5tYXgoMCwgZHgxKSxcbiAgICBkeTEgPiBkeTAgPyAoZHkwICsgZHkxKSAvIDIgOiBNYXRoLm1pbigwLCBkeTApIHx8IE1hdGgubWF4KDAsIGR5MSlcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGNvbnN0cmFpbiA9IGRlZmF1bHRDb25zdHJhaW4sXG4gICAgICB3aGVlbERlbHRhID0gZGVmYXVsdFdoZWVsRGVsdGEsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgc2NhbGVFeHRlbnQgPSBbMCwgSW5maW5pdHldLFxuICAgICAgdHJhbnNsYXRlRXh0ZW50ID0gW1stSW5maW5pdHksIC1JbmZpbml0eV0sIFtJbmZpbml0eSwgSW5maW5pdHldXSxcbiAgICAgIGR1cmF0aW9uID0gMjUwLFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVpvb20sXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiem9vbVwiLCBcImVuZFwiKSxcbiAgICAgIHRvdWNoc3RhcnRpbmcsXG4gICAgICB0b3VjaGZpcnN0LFxuICAgICAgdG91Y2hlbmRpbmcsXG4gICAgICB0b3VjaERlbGF5ID0gNTAwLFxuICAgICAgd2hlZWxEZWxheSA9IDE1MCxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMCxcbiAgICAgIHRhcERpc3RhbmNlID0gMTA7XG5cbiAgZnVuY3Rpb24gem9vbShzZWxlY3Rpb24pIHtcbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pXG4gICAgICAgIC5vbihcIndoZWVsLnpvb21cIiwgd2hlZWxlZCwge3Bhc3NpdmU6IGZhbHNlfSlcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLnpvb21cIiwgbW91c2Vkb3duZWQpXG4gICAgICAgIC5vbihcImRibGNsaWNrLnpvb21cIiwgZGJsY2xpY2tlZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0Lnpvb21cIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuem9vbVwiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb21cIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIHpvb20udHJhbnNmb3JtID0gZnVuY3Rpb24oY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gY29sbGVjdGlvbi5zZWxlY3Rpb24gPyBjb2xsZWN0aW9uLnNlbGVjdGlvbigpIDogY29sbGVjdGlvbjtcbiAgICBzZWxlY3Rpb24ucHJvcGVydHkoXCJfX3pvb21cIiwgZGVmYXVsdFRyYW5zZm9ybSk7XG4gICAgaWYgKGNvbGxlY3Rpb24gIT09IHNlbGVjdGlvbikge1xuICAgICAgc2NoZWR1bGUoY29sbGVjdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgZ2VzdHVyZSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgLmV2ZW50KGV2ZW50KVxuICAgICAgICAgIC5zdGFydCgpXG4gICAgICAgICAgLnpvb20obnVsbCwgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0cmFuc2Zvcm0pXG4gICAgICAgICAgLmVuZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHpvb20uc2NhbGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgaywgcCwgZXZlbnQpIHtcbiAgICB6b29tLnNjYWxlVG8oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBrMCA9IHRoaXMuX196b29tLmssXG4gICAgICAgICAgazEgPSB0eXBlb2YgayA9PT0gXCJmdW5jdGlvblwiID8gay5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogaztcbiAgICAgIHJldHVybiBrMCAqIGsxO1xuICAgIH0sIHAsIGV2ZW50KTtcbiAgfTtcblxuICB6b29tLnNjYWxlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHAsIGV2ZW50KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgICBwMCA9IHAgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHAgPT09IFwiZnVuY3Rpb25cIiA/IHAuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHAsXG4gICAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBlLCB0cmFuc2xhdGVFeHRlbnQpO1xuICAgIH0sIHAsIGV2ZW50KTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUJ5ID0gZnVuY3Rpb24oc2VsZWN0aW9uLCB4LCB5LCBldmVudCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29uc3RyYWluKHRoaXMuX196b29tLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IHguYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB5XG4gICAgICApLCBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVUbyA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSwgcCwgZXZlbnQpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGUgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbihpZGVudGl0eS50cmFuc2xhdGUocDBbMF0sIHAwWzFdKS5zY2FsZSh0LmspLnRyYW5zbGF0ZShcbiAgICAgICAgdHlwZW9mIHggPT09IFwiZnVuY3Rpb25cIiA/IC14LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteCxcbiAgICAgICAgdHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIiA/IC15LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiAteVxuICAgICAgKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gc2NhbGUodHJhbnNmb3JtLCBrKSB7XG4gICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgaykpO1xuICAgIHJldHVybiBrID09PSB0cmFuc2Zvcm0uayA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0oaywgdHJhbnNmb3JtLngsIHRyYW5zZm9ybS55KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh0cmFuc2Zvcm0sIHAwLCBwMSkge1xuICAgIHZhciB4ID0gcDBbMF0gLSBwMVswXSAqIHRyYW5zZm9ybS5rLCB5ID0gcDBbMV0gLSBwMVsxXSAqIHRyYW5zZm9ybS5rO1xuICAgIHJldHVybiB4ID09PSB0cmFuc2Zvcm0ueCAmJiB5ID09PSB0cmFuc2Zvcm0ueSA/IHRyYW5zZm9ybSA6IG5ldyBUcmFuc2Zvcm0odHJhbnNmb3JtLmssIHgsIHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2VudHJvaWQoZXh0ZW50KSB7XG4gICAgcmV0dXJuIFsoK2V4dGVudFswXVswXSArICtleHRlbnRbMV1bMF0pIC8gMiwgKCtleHRlbnRbMF1bMV0gKyArZXh0ZW50WzFdWzFdKSAvIDJdO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUodHJhbnNpdGlvbiwgdHJhbnNmb3JtLCBwb2ludCwgZXZlbnQpIHtcbiAgICB0cmFuc2l0aW9uXG4gICAgICAgIC5vbihcInN0YXJ0Lnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5ldmVudChldmVudCkuc3RhcnQoKTsgfSlcbiAgICAgICAgLm9uKFwiaW50ZXJydXB0Lnpvb20gZW5kLnpvb21cIiwgZnVuY3Rpb24oKSB7IGdlc3R1cmUodGhpcywgYXJndW1lbnRzKS5ldmVudChldmVudCkuZW5kKCk7IH0pXG4gICAgICAgIC50d2VlbihcInpvb21cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICBnID0gZ2VzdHVyZSh0aGF0LCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgICAgICAgIGUgPSBleHRlbnQuYXBwbHkodGhhdCwgYXJncyksXG4gICAgICAgICAgICAgIHAgPSBwb2ludCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcG9pbnQgPT09IFwiZnVuY3Rpb25cIiA/IHBvaW50LmFwcGx5KHRoYXQsIGFyZ3MpIDogcG9pbnQsXG4gICAgICAgICAgICAgIHcgPSBNYXRoLm1heChlWzFdWzBdIC0gZVswXVswXSwgZVsxXVsxXSAtIGVbMF1bMV0pLFxuICAgICAgICAgICAgICBhID0gdGhhdC5fX3pvb20sXG4gICAgICAgICAgICAgIGIgPSB0eXBlb2YgdHJhbnNmb3JtID09PSBcImZ1bmN0aW9uXCIgPyB0cmFuc2Zvcm0uYXBwbHkodGhhdCwgYXJncykgOiB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShhLmludmVydChwKS5jb25jYXQodyAvIGEuayksIGIuaW52ZXJ0KHApLmNvbmNhdCh3IC8gYi5rKSk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgIGlmICh0ID09PSAxKSB0ID0gYjsgLy8gQXZvaWQgcm91bmRpbmcgZXJyb3Igb24gZW5kLlxuICAgICAgICAgICAgZWxzZSB7IHZhciBsID0gaSh0KSwgayA9IHcgLyBsWzJdOyB0ID0gbmV3IFRyYW5zZm9ybShrLCBwWzBdIC0gbFswXSAqIGssIHBbMV0gLSBsWzFdICogayk7IH1cbiAgICAgICAgICAgIGcuem9vbShudWxsLCB0KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlc3R1cmUodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICByZXR1cm4gKCFjbGVhbiAmJiB0aGF0Ll9fem9vbWluZykgfHwgbmV3IEdlc3R1cmUodGhhdCwgYXJncyk7XG4gIH1cblxuICBmdW5jdGlvbiBHZXN0dXJlKHRoYXQsIGFyZ3MpIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICAgIHRoaXMuc291cmNlRXZlbnQgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpO1xuICAgIHRoaXMudGFwcyA9IDA7XG4gIH1cblxuICBHZXN0dXJlLnByb3RvdHlwZSA9IHtcbiAgICBldmVudDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCkgdGhpcy5zb3VyY2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoKyt0aGlzLmFjdGl2ZSA9PT0gMSkge1xuICAgICAgICB0aGlzLnRoYXQuX196b29taW5nID0gdGhpcztcbiAgICAgICAgdGhpcy5lbWl0KFwic3RhcnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHpvb206IGZ1bmN0aW9uKGtleSwgdHJhbnNmb3JtKSB7XG4gICAgICBpZiAodGhpcy5tb3VzZSAmJiBrZXkgIT09IFwibW91c2VcIikgdGhpcy5tb3VzZVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy5tb3VzZVswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDAgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gwWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMFswXSk7XG4gICAgICBpZiAodGhpcy50b3VjaDEgJiYga2V5ICE9PSBcInRvdWNoXCIpIHRoaXMudG91Y2gxWzFdID0gdHJhbnNmb3JtLmludmVydCh0aGlzLnRvdWNoMVswXSk7XG4gICAgICB0aGlzLnRoYXQuX196b29tID0gdHJhbnNmb3JtO1xuICAgICAgdGhpcy5lbWl0KFwiem9vbVwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nO1xuICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgIHZhciBkID0gc2VsZWN0KHRoaXMudGhhdCkuZGF0dW0oKTtcbiAgICAgIGxpc3RlbmVycy5jYWxsKFxuICAgICAgICB0eXBlLFxuICAgICAgICB0aGlzLnRoYXQsXG4gICAgICAgIG5ldyBab29tRXZlbnQodHlwZSwge1xuICAgICAgICAgIHNvdXJjZUV2ZW50OiB0aGlzLnNvdXJjZUV2ZW50LFxuICAgICAgICAgIHRhcmdldDogem9vbSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHRyYW5zZm9ybTogdGhpcy50aGF0Ll9fem9vbSxcbiAgICAgICAgICBkaXNwYXRjaDogbGlzdGVuZXJzXG4gICAgICAgIH0pLFxuICAgICAgICBkXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB3aGVlbGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHQgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgayA9IE1hdGgubWF4KHNjYWxlRXh0ZW50WzBdLCBNYXRoLm1pbihzY2FsZUV4dGVudFsxXSwgdC5rICogTWF0aC5wb3coMiwgd2hlZWxEZWx0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSkpLFxuICAgICAgICBwID0gcG9pbnRlcihldmVudCk7XG5cbiAgICAvLyBJZiB0aGUgbW91c2UgaXMgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgYmVmb3JlLCByZXVzZSBpdC5cbiAgICAvLyBJZiB0aGVyZSB3ZXJlIHJlY2VudCB3aGVlbCBldmVudHMsIHJlc2V0IHRoZSB3aGVlbCBpZGxlIHRpbWVvdXQuXG4gICAgaWYgKGcud2hlZWwpIHtcbiAgICAgIGlmIChnLm1vdXNlWzBdWzBdICE9PSBwWzBdIHx8IGcubW91c2VbMF1bMV0gIT09IHBbMV0pIHtcbiAgICAgICAgZy5tb3VzZVsxXSA9IHQuaW52ZXJ0KGcubW91c2VbMF0gPSBwKTtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dChnLndoZWVsKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIHdoZWVsIGV2ZW50IHdvblx1MjAxOXQgdHJpZ2dlciBhIHRyYW5zZm9ybSBjaGFuZ2UsIGlnbm9yZSBpdC5cbiAgICBlbHNlIGlmICh0LmsgPT09IGspIHJldHVybjtcblxuICAgIC8vIE90aGVyd2lzZSwgY2FwdHVyZSB0aGUgbW91c2UgcG9pbnQgYW5kIGxvY2F0aW9uIGF0IHRoZSBzdGFydC5cbiAgICBlbHNlIHtcbiAgICAgIGcubW91c2UgPSBbcCwgdC5pbnZlcnQocCldO1xuICAgICAgaW50ZXJydXB0KHRoaXMpO1xuICAgICAgZy5zdGFydCgpO1xuICAgIH1cblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGcud2hlZWwgPSBzZXRUaW1lb3V0KHdoZWVsaWRsZWQsIHdoZWVsRGVsYXkpO1xuICAgIGcuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodCwgayksIGcubW91c2VbMF0sIGcubW91c2VbMV0pLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG5cbiAgICBmdW5jdGlvbiB3aGVlbGlkbGVkKCkge1xuICAgICAgZy53aGVlbCA9IG51bGw7XG4gICAgICBnLmVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlZG93bmVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nIHx8ICFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJncywgdHJ1ZSkuZXZlbnQoZXZlbnQpLFxuICAgICAgICB2ID0gc2VsZWN0KGV2ZW50LnZpZXcpLm9uKFwibW91c2Vtb3ZlLnpvb21cIiwgbW91c2Vtb3ZlZCwgdHJ1ZSkub24oXCJtb3VzZXVwLnpvb21cIiwgbW91c2V1cHBlZCwgdHJ1ZSksXG4gICAgICAgIHAgPSBwb2ludGVyKGV2ZW50LCBjdXJyZW50VGFyZ2V0KSxcbiAgICAgICAgeDAgPSBldmVudC5jbGllbnRYLFxuICAgICAgICB5MCA9IGV2ZW50LmNsaWVudFk7XG5cbiAgICBkcmFnRGlzYWJsZShldmVudC52aWV3KTtcbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBnLm1vdXNlID0gW3AsIHRoaXMuX196b29tLmludmVydChwKV07XG4gICAgaW50ZXJydXB0KHRoaXMpO1xuICAgIGcuc3RhcnQoKTtcblxuICAgIGZ1bmN0aW9uIG1vdXNlbW92ZWQoZXZlbnQpIHtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgaWYgKCFnLm1vdmVkKSB7XG4gICAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSB4MCwgZHkgPSBldmVudC5jbGllbnRZIC0geTA7XG4gICAgICAgIGcubW92ZWQgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgICAgfVxuICAgICAgZy5ldmVudChldmVudClcbiAgICAgICAuem9vbShcIm1vdXNlXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUoZy50aGF0Ll9fem9vbSwgZy5tb3VzZVswXSA9IHBvaW50ZXIoZXZlbnQsIGN1cnJlbnRUYXJnZXQpLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vdXNldXBwZWQoZXZlbnQpIHtcbiAgICAgIHYub24oXCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb21cIiwgbnVsbCk7XG4gICAgICBkcmFnRW5hYmxlKGV2ZW50LnZpZXcsIGcubW92ZWQpO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBnLmV2ZW50KGV2ZW50KS5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkYmxjbGlja2VkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0MCA9IHRoaXMuX196b29tLFxuICAgICAgICBwMCA9IHBvaW50ZXIoZXZlbnQuY2hhbmdlZFRvdWNoZXMgPyBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSA6IGV2ZW50LCB0aGlzKSxcbiAgICAgICAgcDEgPSB0MC5pbnZlcnQocDApLFxuICAgICAgICBrMSA9IHQwLmsgKiAoZXZlbnQuc2hpZnRLZXkgPyAwLjUgOiAyKSxcbiAgICAgICAgdDEgPSBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQwLCBrMSksIHAwLCBwMSksIGV4dGVudC5hcHBseSh0aGlzLCBhcmdzKSwgdHJhbnNsYXRlRXh0ZW50KTtcblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGlmIChkdXJhdGlvbiA+IDApIHNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pLmNhbGwoc2NoZWR1bGUsIHQxLCBwMCwgZXZlbnQpO1xuICAgIGVsc2Ugc2VsZWN0KHRoaXMpLmNhbGwoem9vbS50cmFuc2Zvcm0sIHQxLCBwMCwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hzdGFydGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQudG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLFxuICAgICAgICBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzLCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPT09IG4pLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgc3RhcnRlZCwgaSwgdCwgcDtcblxuICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gcG9pbnRlcih0LCB0aGlzKTtcbiAgICAgIHAgPSBbcCwgdGhpcy5fX3pvb20uaW52ZXJ0KHApLCB0LmlkZW50aWZpZXJdO1xuICAgICAgaWYgKCFnLnRvdWNoMCkgZy50b3VjaDAgPSBwLCBzdGFydGVkID0gdHJ1ZSwgZy50YXBzID0gMSArICEhdG91Y2hzdGFydGluZztcbiAgICAgIGVsc2UgaWYgKCFnLnRvdWNoMSAmJiBnLnRvdWNoMFsyXSAhPT0gcFsyXSkgZy50b3VjaDEgPSBwLCBnLnRhcHMgPSAwO1xuICAgIH1cblxuICAgIGlmICh0b3VjaHN0YXJ0aW5nKSB0b3VjaHN0YXJ0aW5nID0gY2xlYXJUaW1lb3V0KHRvdWNoc3RhcnRpbmcpO1xuXG4gICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgIGlmIChnLnRhcHMgPCAyKSB0b3VjaGZpcnN0ID0gcFswXSwgdG91Y2hzdGFydGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoc3RhcnRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0LCBwLCBsO1xuXG4gICAgbm9ldmVudChldmVudCk7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgdCA9IHRvdWNoZXNbaV0sIHAgPSBwb2ludGVyKHQsIHRoaXMpO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gwWzBdID0gcDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGcudG91Y2gxWzBdID0gcDtcbiAgICB9XG4gICAgdCA9IGcudGhhdC5fX3pvb207XG4gICAgaWYgKGcudG91Y2gxKSB7XG4gICAgICB2YXIgcDAgPSBnLnRvdWNoMFswXSwgbDAgPSBnLnRvdWNoMFsxXSxcbiAgICAgICAgICBwMSA9IGcudG91Y2gxWzBdLCBsMSA9IGcudG91Y2gxWzFdLFxuICAgICAgICAgIGRwID0gKGRwID0gcDFbMF0gLSBwMFswXSkgKiBkcCArIChkcCA9IHAxWzFdIC0gcDBbMV0pICogZHAsXG4gICAgICAgICAgZGwgPSAoZGwgPSBsMVswXSAtIGwwWzBdKSAqIGRsICsgKGRsID0gbDFbMV0gLSBsMFsxXSkgKiBkbDtcbiAgICAgIHQgPSBzY2FsZSh0LCBNYXRoLnNxcnQoZHAgLyBkbCkpO1xuICAgICAgcCA9IFsocDBbMF0gKyBwMVswXSkgLyAyLCAocDBbMV0gKyBwMVsxXSkgLyAyXTtcbiAgICAgIGwgPSBbKGwwWzBdICsgbDFbMF0pIC8gMiwgKGwwWzFdICsgbDFbMV0pIC8gMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGcudG91Y2gwKSBwID0gZy50b3VjaDBbMF0sIGwgPSBnLnRvdWNoMFsxXTtcbiAgICBlbHNlIHJldHVybjtcblxuICAgIGcuem9vbShcInRvdWNoXCIsIGNvbnN0cmFpbih0cmFuc2xhdGUodCwgcCwgbCksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuX196b29taW5nKSByZXR1cm47XG4gICAgdmFyIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3MpLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIHQ7XG5cbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIHRvdWNoRGVsYXkpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldO1xuICAgICAgaWYgKGcudG91Y2gwICYmIGcudG91Y2gwWzJdID09PSB0LmlkZW50aWZpZXIpIGRlbGV0ZSBnLnRvdWNoMDtcbiAgICAgIGVsc2UgaWYgKGcudG91Y2gxICYmIGcudG91Y2gxWzJdID09PSB0LmlkZW50aWZpZXIpIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICB9XG4gICAgaWYgKGcudG91Y2gxICYmICFnLnRvdWNoMCkgZy50b3VjaDAgPSBnLnRvdWNoMSwgZGVsZXRlIGcudG91Y2gxO1xuICAgIGlmIChnLnRvdWNoMCkgZy50b3VjaDBbMV0gPSB0aGlzLl9fem9vbS5pbnZlcnQoZy50b3VjaDBbMF0pO1xuICAgIGVsc2Uge1xuICAgICAgZy5lbmQoKTtcbiAgICAgIC8vIElmIHRoaXMgd2FzIGEgZGJsdGFwLCByZXJvdXRlIHRvIHRoZSAob3B0aW9uYWwpIGRibGNsaWNrLnpvb20gaGFuZGxlci5cbiAgICAgIGlmIChnLnRhcHMgPT09IDIpIHtcbiAgICAgICAgdCA9IHBvaW50ZXIodCwgdGhpcyk7XG4gICAgICAgIGlmIChNYXRoLmh5cG90KHRvdWNoZmlyc3RbMF0gLSB0WzBdLCB0b3VjaGZpcnN0WzFdIC0gdFsxXSkgPCB0YXBEaXN0YW5jZSkge1xuICAgICAgICAgIHZhciBwID0gc2VsZWN0KHRoaXMpLm9uKFwiZGJsY2xpY2suem9vbVwiKTtcbiAgICAgICAgICBpZiAocCkgcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgem9vbS53aGVlbERlbHRhID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHdoZWVsRGVsdGEgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgem9vbSkgOiB3aGVlbERlbHRhO1xuICB9O1xuXG4gIHpvb20uZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiBmaWx0ZXI7XG4gIH07XG5cbiAgem9vbS50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCB6b29tKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICB6b29tLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KFtbK19bMF1bMF0sICtfWzBdWzFdXSwgWytfWzFdWzBdLCArX1sxXVsxXV1dKSwgem9vbSkgOiBleHRlbnQ7XG4gIH07XG5cbiAgem9vbS5zY2FsZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZUV4dGVudFswXSA9ICtfWzBdLCBzY2FsZUV4dGVudFsxXSA9ICtfWzFdLCB6b29tKSA6IFtzY2FsZUV4dGVudFswXSwgc2NhbGVFeHRlbnRbMV1dO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlRXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRyYW5zbGF0ZUV4dGVudFswXVswXSA9ICtfWzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMF0gPSArX1sxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdID0gK19bMF1bMV0sIHRyYW5zbGF0ZUV4dGVudFsxXVsxXSA9ICtfWzFdWzFdLCB6b29tKSA6IFtbdHJhbnNsYXRlRXh0ZW50WzBdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMF1bMV1dLCBbdHJhbnNsYXRlRXh0ZW50WzFdWzBdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV1dXTtcbiAgfTtcblxuICB6b29tLmNvbnN0cmFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjb25zdHJhaW4gPSBfLCB6b29tKSA6IGNvbnN0cmFpbjtcbiAgfTtcblxuICB6b29tLmR1cmF0aW9uID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGR1cmF0aW9uID0gK18sIHpvb20pIDogZHVyYXRpb247XG4gIH07XG5cbiAgem9vbS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHpvb20pIDogaW50ZXJwb2xhdGU7XG4gIH07XG5cbiAgem9vbS5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyB6b29tIDogdmFsdWU7XG4gIH07XG5cbiAgem9vbS5jbGlja0Rpc3RhbmNlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsaWNrRGlzdGFuY2UyID0gKF8gPSArXykgKiBfLCB6b29tKSA6IE1hdGguc3FydChjbGlja0Rpc3RhbmNlMik7XG4gIH07XG5cbiAgem9vbS50YXBEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXBEaXN0YW5jZSA9ICtfLCB6b29tKSA6IHRhcERpc3RhbmNlO1xuICB9O1xuXG4gIHJldHVybiB6b29tO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBLFlBQU1BLElBQWEsb0JBQUlDLE9BRXZCQyxJQUFlLEVBQ2JDLElBQUlDLElBQVNDLElBQUtDLElBQUFBO0FBQ1hOLFVBQVdPLElBQUlILEVBQUFBLEtBQ2xCSixFQUFXRyxJQUFJQyxJQUFTLG9CQUFJSCxLQUFBQTtBQUc5QixjQUFNTyxLQUFjUixFQUFXUyxJQUFJTCxFQUFBQTtBQUk5QkksUUFBQUEsR0FBWUQsSUFBSUYsRUFBQUEsS0FBNkIsTUFBckJHLEdBQVlFLE9BTXpDRixHQUFZTCxJQUFJRSxJQUFLQyxFQUFBQSxJQUpuQkssUUFBUUMsTUFBTywrRUFBOEVDLE1BQU1DLEtBQUtOLEdBQVlPLEtBQUFBLENBQUFBLEVBQVEsQ0FBQSxJQUFBO01BQUEsR0FPaElOLEtBQUdBLENBQUNMLElBQVNDLE9BQ1BMLEVBQVdPLElBQUlILEVBQUFBLEtBQ1ZKLEVBQVdTLElBQUlMLEVBQUFBLEVBQVNLLElBQUlKLEVBQUFBLEtBRzlCLE1BR1RXLE9BQU9aLElBQVNDLElBQUFBO0FBQ2QsWUFBQSxDQUFLTCxFQUFXTyxJQUFJSCxFQUFBQTtBQUNsQjtBQUdGLGNBQU1JLEtBQWNSLEVBQVdTLElBQUlMLEVBQUFBO0FBRW5DSSxRQUFBQSxHQUFZUyxPQUFPWixFQUFBQSxHQUdNLE1BQXJCRyxHQUFZRSxRQUNkVixFQUFXaUIsT0FBT2IsRUFBQUE7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RUFDUCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxnQkFBZ0I7QUFBQSxFQUNoQixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixnQkFBZ0I7QUFBQSxFQUNoQixZQUFZO0FBQUEsRUFDWixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxzQkFBc0I7QUFBQSxFQUN0QixXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixrQkFBa0I7QUFBQSxFQUNsQixZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixLQUFLO0FBQUEsRUFDTCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixhQUFhO0FBQ2Y7QUFFQSxlQUFPLE9BQU8sT0FBTztBQUFBLEVBQ25CLEtBQUssVUFBVTtBQUNiLFdBQU8sT0FBTyxPQUFPLElBQUksS0FBSyxlQUFhLE1BQU0sUUFBUTtBQUFBLEVBQzNEO0FBQUEsRUFDQSxjQUFjO0FBQ1osV0FBTyxLQUFLLElBQUksRUFBRSxZQUFZO0FBQUEsRUFDaEM7QUFBQSxFQUNBLEtBQUs7QUFBQTtBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUNaLENBQUM7QUFFRCxTQUFTLGtCQUFrQjtBQUN6QixTQUFPLEtBQUssSUFBSSxFQUFFLFVBQVU7QUFDOUI7QUFFQSxTQUFTLG1CQUFtQjtBQUMxQixTQUFPLEtBQUssSUFBSSxFQUFFLFdBQVc7QUFDL0I7QUFFQSxTQUFTLGtCQUFrQjtBQUN6QixTQUFPLFdBQVcsSUFBSSxFQUFFLFVBQVU7QUFDcEM7QUFFQSxTQUFTLGtCQUFrQjtBQUN6QixTQUFPLEtBQUssSUFBSSxFQUFFLFVBQVU7QUFDOUI7QUFFZSxTQUFSLE1BQXVCQyxTQUFRO0FBQ3BDLE1BQUlDLElBQUc7QUFDUCxFQUFBRCxXQUFVQSxVQUFTLElBQUksS0FBSyxFQUFFLFlBQVk7QUFDMUMsVUFBUUMsS0FBSSxNQUFNLEtBQUtELE9BQU0sTUFBTSxJQUFJQyxHQUFFLENBQUMsRUFBRSxRQUFRQSxLQUFJLFNBQVNBLEdBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksS0FBS0EsRUFBQyxJQUN0RixNQUFNLElBQUksSUFBSSxJQUFLQSxNQUFLLElBQUksS0FBUUEsTUFBSyxJQUFJLEtBQVFBLE1BQUssSUFBSSxLQUFRQSxLQUFJLE1BQVNBLEtBQUksT0FBUSxJQUFNQSxLQUFJLElBQU0sQ0FBQyxJQUNoSCxNQUFNLElBQUksS0FBS0EsTUFBSyxLQUFLLEtBQU1BLE1BQUssS0FBSyxLQUFNQSxNQUFLLElBQUksTUFBT0EsS0FBSSxPQUFRLEdBQUksSUFDL0UsTUFBTSxJQUFJLEtBQU1BLE1BQUssS0FBSyxLQUFRQSxNQUFLLElBQUksS0FBUUEsTUFBSyxJQUFJLEtBQVFBLE1BQUssSUFBSSxLQUFRQSxNQUFLLElBQUksS0FBUUEsS0FBSSxPQUFVQSxLQUFJLE9BQVEsSUFBTUEsS0FBSSxNQUFRLEdBQUksSUFDdEosU0FDQ0EsS0FBSSxhQUFhLEtBQUtELE9BQU0sS0FBSyxJQUFJLElBQUlDLEdBQUUsQ0FBQyxHQUFHQSxHQUFFLENBQUMsR0FBR0EsR0FBRSxDQUFDLEdBQUcsQ0FBQyxLQUM1REEsS0FBSSxhQUFhLEtBQUtELE9BQU0sS0FBSyxJQUFJLElBQUlDLEdBQUUsQ0FBQyxJQUFJLE1BQU0sS0FBS0EsR0FBRSxDQUFDLElBQUksTUFBTSxLQUFLQSxHQUFFLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxLQUNoR0EsS0FBSSxjQUFjLEtBQUtELE9BQU0sS0FBSyxLQUFLQyxHQUFFLENBQUMsR0FBR0EsR0FBRSxDQUFDLEdBQUdBLEdBQUUsQ0FBQyxHQUFHQSxHQUFFLENBQUMsQ0FBQyxLQUM3REEsS0FBSSxjQUFjLEtBQUtELE9BQU0sS0FBSyxLQUFLQyxHQUFFLENBQUMsSUFBSSxNQUFNLEtBQUtBLEdBQUUsQ0FBQyxJQUFJLE1BQU0sS0FBS0EsR0FBRSxDQUFDLElBQUksTUFBTSxLQUFLQSxHQUFFLENBQUMsQ0FBQyxLQUNqR0EsS0FBSSxhQUFhLEtBQUtELE9BQU0sS0FBSyxLQUFLQyxH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U0FBUyxZQUFZO0FBQ2pDLFlBQU0sS0FBSyxPQUFPLGFBQWE7QUFBQSxJQUNuQyxDQUFDLENBQUM7QUFBQSxFQUNkO0FBQ0o7IiwKICAibmFtZXMiOiBbImVsZW1lbnRNYXAiLCAiTWFwIiwgIkRhdGEiLCAic2V0IiwgImVsZW1lbnQiLCAia2V5IiwgImluc3RhbmNlIiwgImhhcyIsICJpbnN0YW5jZU1hcCIsICJnZXQiLCAic2l6ZSIsICJjb25zb2xlIiwgImVycm9yIiwgIkFycmF5IiwgImZyb20iLCAia2V5cyIsICJyZW1vdmUiLCAiZGVsZXRlIiwgIlRSQU5TSVRJT05fRU5EIiwgInBhcnNlU2VsZWN0b3IiLCAic2VsZWN0b3IiLCAid2luZG93IiwgIkNTUyIsICJlc2NhcGUiLCAicmVwbGFjZSIsICJtYXRjaCIsICJpZCIsICJ0cmlnZ2VyVHJhbnNpdGlvbkVuZCIsICJkaXNwYXRjaEV2ZW50IiwgIkV2ZW50IiwgImlzRWxlbWVudCIsICJvYmplY3QiLCAianF1ZXJ5IiwgIm5vZGVUeXBlIiwgImdldEVsZW1lbnQiLCAibGVuZ3RoIiwgImRvY3VtZW50IiwgInF1ZXJ5U2VsZWN0b3IiLCAiaXNWaXNpYmxlIiwgImdldENsaWVudFJlY3RzIiwgImVsZW1lbnRJc1Zpc2libGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgImNsb3NlZERldGFpbHMiLCAiY2xvc2VzdCIsICJzdW1tYXJ5IiwgInBhcmVudE5vZGUiLCAiaXNEaXNhYmxlZCIsICJOb2RlIiwgIkVMRU1FTlRfTk9ERSIsICJjbGFzc0xpc3QiLCAiY29udGFpbnMiLCAiZGlzYWJsZWQiLCAiaGFzQXR0cmlidXRlIiwgImdldEF0dHJpYnV0ZSIsICJmaW5kU2hhZG93Um9vdCIsICJkb2N1bWVudEVsZW1lbnQiLCAiYXR0YWNoU2hhZG93IiwgImdldFJvb3ROb2RlIiwgInJvb3QiLCAiU2hhZG93Um9vdCIsICJub29wIiwgInJlZmxvdyIsICJvZmZzZXRIZWlnaHQiLCAiZ2V0alF1ZXJ5IiwgImpRdWVyeSIsICJib2R5IiwgIkRPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MiLCAiaXNSVEwiLCAiZGlyIiwgImRlZmluZUpRdWVyeVBsdWdpbiIsICJwbHVnaW4iLCAiY2FsbGJhY2siLCAiJCIsICJuYW1lIiwgIk5BTUUiLCAiSlFVRVJZX05PX0NPTkZMSUNUIiwgImZuIiwgImpRdWVyeUludGVyZmFjZSIsICJDb25zdHJ1Y3RvciIsICJub0NvbmZsaWN0IiwgInJlYWR5U3RhdGUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJwdXNoIiwgImV4ZWN1dGUiLCAicG9zc2libGVDYWxsYmFjayIsICJhcmdzIiwgImRlZmF1bHRWYWx1ZSIsICJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwgInRyYW5zaXRpb25FbGVtZW50IiwgIndhaXRGb3JUcmFuc2l0aW9uIiwgImVtdWxhdGVkRHVyYXRpb24iLCAidHJhbnNpdGlvbkR1cmF0aW9uIiwgInRyYW5zaXRpb25EZWxheSIsICJmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiIsICJOdW1iZXIiLCAicGFyc2VGbG9hdCIsICJmbG9hdFRyYW5zaXRpb25EZWxheSIsICJzcGxpdCIsICJjYWxsZWQiLCAiaGFuZGxlciIsICJ0YXJnZXQiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJzZXRUaW1lb3V0IiwgImdldE5leHRBY3RpdmVFbGVtZW50IiwgImxpc3QiLCAiYWN0aXZlRWxlbWVudCIsICJzaG91bGRHZXROZXh0IiwgImlzQ3ljbGVBbGxvd2VkIiwgImxpc3RMZW5ndGgiLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJNYXRoIiwgIm1heCIsICJtaW4iLCAibmFtZXNwYWNlUmVnZXgiLCAic3RyaXBOYW1lUmVnZXgiLCAic3RyaXBVaWRSZWdleCIsICJldmVudFJlZ2lzdHJ5IiwgInVpZEV2ZW50IiwgImN1c3RvbUV2ZW50cyIsICJtb3VzZWVudGVyIiwgIm1vdXNlbGVhdmUiLCAibmF0aXZlRXZlbnRzIiwgIlNldCIsICJtYWtlRXZlbnRVaWQiLCAidWlkIiwgImdldEVsZW1lbnRFdmVudHMiLCAiZmluZEhhbmRsZXIiLCAiZXZlbnRzIiwgImNhbGxhYmxlIiwgImRlbGVnYXRpb25TZWxlY3RvciIsICJPYmplY3QiLCAidmFsdWVzIiwgImZpbmQiLCAiZXZlbnQiLCAibm9ybWFsaXplUGFyYW1ldGVycyIsICJvcmlnaW5hbFR5cGVFdmVudCIsICJkZWxlZ2F0aW9uRnVuY3Rpb24iLCAiaXNEZWxlZ2F0ZWQiLCAidHlwZUV2ZW50IiwgImdldFR5cGVFdmVudCIsICJhZGRIYW5kbGVyIiwgIm9uZU9mZiIsICJ3cmFwRnVuY3Rpb24iLCAicmVsYXRlZFRhcmdldCIsICJkZWxlZ2F0ZVRhcmdldCIsICJjYWxsIiwgInRoaXMiLCAiaGFuZGxlcnMiLCAicHJldmlvdXNGdW5jdGlvbiIsICJkb21FbGVtZW50cyIsICJxdWVyeVNlbGVjdG9yQWxsIiwgImRvbUVsZW1lbnQiLCAiaHlkcmF0ZU9iaiIsICJFdmVudEhhbmRsZXIiLCAib2ZmIiwgInR5cGUiLCAiYXBwbHkiLCAicmVtb3ZlSGFuZGxlciIsICJCb29sZWFuIiwgInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsICJuYW1lc3BhY2UiLCAic3RvcmVFbGVtZW50RXZlbnQiLCAiaGFuZGxlcktleSIsICJlbnRyaWVzIiwgImluY2x1ZGVzIiwgIm9uIiwgIm9uZSIsICJpbk5hbWVzcGFjZSIsICJpc05hbWVzcGFjZSIsICJzdGFydHNXaXRoIiwgImVsZW1lbnRFdmVudCIsICJzbGljZSIsICJrZXlIYW5kbGVycyIsICJ0cmlnZ2VyIiwgImpRdWVyeUV2ZW50IiwgImJ1YmJsZXMiLCAibmF0aXZlRGlzcGF0Y2giLCAiZGVmYXVsdFByZXZlbnRlZCIsICJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsICJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsICJpc0RlZmF1bHRQcmV2ZW50ZWQiLCAiZXZ0IiwgImNhbmNlbGFibGUiLCAicHJldmVudERlZmF1bHQiLCAib2JqIiwgIm1ldGEiLCAidmFsdWUiLCAiX3VudXNlZCIsICJkZWZpbmVQcm9wZXJ0eSIsICJjb25maWd1cmFibGUiLCAibm9ybWFsaXplRGF0YSIsICJ0b1N0cmluZyIsICJKU09OIiwgInBhcnNlIiwgImRlY29kZVVSSUNvbXBvbmVudCIsICJub3JtYWxpemVEYXRhS2V5IiwgImNociIsICJ0b0xvd2VyQ2FzZSIsICJNYW5pcHVsYXRvciIsICJzZXREYXRhQXR0cmlidXRlIiwgInNldEF0dHJpYnV0ZSIsICJyZW1vdmVEYXRhQXR0cmlidXRlIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJnZXREYXRhQXR0cmlidXRlcyIsICJhdHRyaWJ1dGVzIiwgImJzS2V5cyIsICJkYXRhc2V0IiwgImZpbHRlciIsICJwdXJlS2V5IiwgImNoYXJBdCIsICJnZXREYXRhQXR0cmlidXRlIiwgIkNvbmZpZyIsICJEZWZhdWx0IiwgIkRlZmF1bHRUeXBlIiwgIkVycm9yIiwgIl9nZXRDb25maWciLCAiY29uZmlnIiwgIl9tZXJnZUNvbmZpZ09iaiIsICJfY29uZmlnQWZ0ZXJNZXJnZSIsICJfdHlwZUNoZWNrQ29uZmlnIiwgImpzb25Db25maWciLCAiY29uc3RydWN0b3IiLCAiY29uZmlnVHlwZXMiLCAicHJvcGVydHkiLCAiZXhwZWN0ZWRUeXBlcyIsICJ2YWx1ZVR5cGUiLCAicHJvdG90eXBlIiwgIlJlZ0V4cCIsICJ0ZXN0IiwgIlR5cGVFcnJvciIsICJ0b1VwcGVyQ2FzZSIsICJCYXNlQ29tcG9uZW50IiwgInN1cGVyIiwgIl9lbGVtZW50IiwgIl9jb25maWciLCAiREFUQV9LRVkiLCAiZGlzcG9zZSIsICJFVkVOVF9LRVkiLCAicHJvcGVydHlOYW1lIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiX3F1ZXVlQ2FsbGJhY2siLCAiaXNBbmltYXRlZCIsICJnZXRJbnN0YW5jZSIsICJWRVJTSU9OIiwgImdldFNlbGVjdG9yIiwgImhyZWZBdHRyaWJ1dGUiLCAidHJpbSIsICJtYXAiLCAic2VsIiwgImpvaW4iLCAiU2VsZWN0b3JFbmdpbmUiLCAiY29uY2F0IiwgIkVsZW1lbnQiLCAiZmluZE9uZSIsICJjaGlsZHJlbiIsICJjaGlsZCIsICJtYXRjaGVzIiwgInBhcmVudHMiLCAiYW5jZXN0b3IiLCAicHJldiIsICJwcmV2aW91cyIsICJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwgIm5leHQiLCAibmV4dEVsZW1lbnRTaWJsaW5nIiwgImZvY3VzYWJsZUNoaWxkcmVuIiwgImZvY3VzYWJsZXMiLCAiZWwiLCAiZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCIsICJnZXRFbGVtZW50RnJvbVNlbGVjdG9yIiwgImdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IiLCAiZW5hYmxlRGlzbWlzc1RyaWdnZXIiLCAiY29tcG9uZW50IiwgIm1ldGhvZCIsICJjbGlja0V2ZW50IiwgInRhZ05hbWUiLCAiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsICJFVkVOVF9DTE9TRSIsICJFVkVOVF9DTE9TRUQiLCAiQWxlcnQiLCAiY2xvc2UiLCAiX2Rlc3Ryb3lFbGVtZW50IiwgImVhY2giLCAiZGF0YSIsICJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsICJCdXR0b24iLCAidG9nZ2xlIiwgImJ1dHRvbiIsICJFVkVOVF9UT1VDSFNUQVJUIiwgIkVWRU5UX1RPVUNITU9WRSIsICJFVkVOVF9UT1VDSEVORCIsICJFVkVOVF9QT0lOVEVSRE9XTiIsICJFVkVOVF9QT0lOVEVSVVAiLCAiZW5kQ2FsbGJhY2siLCAibGVmdENhbGxiYWNrIiwgInJpZ2h0Q2FsbGJhY2siLCAiU3dpcGUiLCAiaXNTdXBwb3J0ZWQiLCAiX2RlbHRhWCIsICJfc3VwcG9ydFBvaW50ZXJFdmVudHMiLCAiUG9pbnRlckV2ZW50IiwgIl9pbml0RXZlbnRzIiwgIl9zdGFydCIsICJfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaCIsICJjbGllbnRYIiwgInRvdWNoZXMiLCAiX2VuZCIsICJfaGFuZGxlU3dpcGUiLCAiX21vdmUiLCAiYWJzRGVsdGFYIiwgImFicyIsICJkaXJlY3Rpb24iLCAiYWRkIiwgInBvaW50ZXJUeXBlIiwgIm5hdmlnYXRvciIsICJtYXhUb3VjaFBvaW50cyIsICJEQVRBX0FQSV9LRVkiLCAiT1JERVJfTkVYVCIsICJPUkRFUl9QUkVWIiwgIkRJUkVDVElPTl9MRUZUIiwgIkRJUkVDVElPTl9SSUdIVCIsICJFVkVOVF9TTElERSIsICJFVkVOVF9TTElEIiwgIkVWRU5UX0tFWURPV04iLCAiRVZFTlRfTU9VU0VFTlRFUiIsICJFVkVOVF9NT1VTRUxFQVZFIiwgIkVWRU5UX0RSQUdfU1RBUlQiLCAiRVZFTlRfTE9BRF9EQVRBX0FQSSIsICJFVkVOVF9DTElDS19EQVRBX0FQSSIsICJDTEFTU19OQU1FX0NBUk9VU0VMIiwgIkNMQVNTX05BTUVfQUNUSVZFIiwgIlNFTEVDVE9SX0FDVElWRSIsICJTRUxFQ1RPUl9JVEVNIiwgIlNFTEVDVE9SX0FDVElWRV9JVEVNIiwgIktFWV9UT19ESVJFQ1RJT04iLCAiQXJyb3dMZWZ0IiwgIkFycm93UmlnaHQiLCAiaW50ZXJ2YWwiLCAia2V5Ym9hcmQiLCAicGF1c2UiLCAicmlkZSIsICJ0b3VjaCIsICJ3cmFwIiwgIkNhcm91c2VsIiwgIl9pbnRlcnZhbCIsICJfYWN0aXZlRWxlbWVudCIsICJfaXNTbGlkaW5nIiwgInRvdWNoVGltZW91dCIsICJfc3dpcGVIZWxwZXIiLCAiX2luZGljYXRvcnNFbGVtZW50IiwgIl9hZGRFdmVudExpc3RlbmVycyIsICJjeWNsZSIsICJfc2xpZGUiLCAibmV4dFdoZW5WaXNpYmxlIiwgImhpZGRlbiIsICJfY2xlYXJJbnRlcnZhbCIsICJfdXBkYXRlSW50ZXJ2YWwiLCAic2V0SW50ZXJ2YWwiLCAiX21heWJlRW5hYmxlQ3ljbGUiLCAidG8iLCAiaXRlbXMiLCAiX2dldEl0ZW1zIiwgImFjdGl2ZUluZGV4IiwgIl9nZXRJdGVtSW5kZXgiLCAiX2dldEFjdGl2ZSIsICJvcmRlciIsICJkZWZhdWx0SW50ZXJ2YWwiLCAiX2tleWRvd24iLCAiX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMiLCAiaW1nIiwgInN3aXBlQ29uZmlnIiwgIl9kaXJlY3Rpb25Ub09yZGVyIiwgImVuZENhbGxCYWNrIiwgImNsZWFyVGltZW91dCIsICJfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCIsICJhY3RpdmVJbmRpY2F0b3IiLCAibmV3QWN0aXZlSW5kaWNhdG9yIiwgImVsZW1lbnRJbnRlcnZhbCIsICJwYXJzZUludCIsICJpc05leHQiLCAibmV4dEVsZW1lbnQiLCAibmV4dEVsZW1lbnRJbmRleCIsICJ0cmlnZ2VyRXZlbnQiLCAiZXZlbnROYW1lIiwgIl9vcmRlclRvRGlyZWN0aW9uIiwgImlzQ3ljbGluZyIsICJkaXJlY3Rpb25hbENsYXNzTmFtZSIsICJvcmRlckNsYXNzTmFtZSIsICJjb21wbGV0ZUNhbGxCYWNrIiwgIl9pc0FuaW1hdGVkIiwgImNsZWFySW50ZXJ2YWwiLCAiY2Fyb3VzZWwiLCAic2xpZGVJbmRleCIsICJjYXJvdXNlbHMiLCAiRVZFTlRfU0hPVyIsICJFVkVOVF9TSE9XTiIsICJFVkVOVF9ISURFIiwgIkVWRU5UX0hJRERFTiIsICJDTEFTU19OQU1FX1NIT1ciLCAiQ0xBU1NfTkFNRV9DT0xMQVBTRSIsICJDTEFTU19OQU1FX0NPTExBUFNJTkciLCAiQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4iLCAicGFyZW50IiwgIkNvbGxhcHNlIiwgIl9pc1RyYW5zaXRpb25pbmciLCAiX3RyaWdnZXJBcnJheSIsICJ0b2dnbGVMaXN0IiwgImVsZW0iLCAiZmlsdGVyRWxlbWVudCIsICJmb3VuZEVsZW1lbnQiLCAiX2luaXRpYWxpemVDaGlsZHJlbiIsICJfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzIiwgIl9pc1Nob3duIiwgImhpZGUiLCAic2hvdyIsICJhY3RpdmVDaGlsZHJlbiIsICJfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuIiwgImFjdGl2ZUluc3RhbmNlIiwgImRpbWVuc2lvbiIsICJfZ2V0RGltZW5zaW9uIiwgInN0eWxlIiwgInNjcm9sbFNpemUiLCAiY29tcGxldGUiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgInNlbGVjdGVkIiwgInRyaWdnZXJBcnJheSIsICJpc09wZW4iLCAidG9wIiwgImJvdHRvbSIsICJyaWdodCIsICJsZWZ0IiwgImF1dG8iLCAiYmFzZVBsYWNlbWVudHMiLCAic3RhcnQiLCAiZW5kIiwgImNsaXBwaW5nUGFyZW50cyIsICJ2aWV3cG9ydCIsICJwb3BwZXIiLCAicmVmZXJlbmNlIiwgInZhcmlhdGlvblBsYWNlbWVudHMiLCAicmVkdWNlIiwgImFjYyIsICJwbGFjZW1lbnQiLCAicGxhY2VtZW50cyIsICJiZWZvcmVSZWFkIiwgInJlYWQiLCAiYWZ0ZXJSZWFkIiwgImJlZm9yZU1haW4iLCAibWFpbiIsICJhZnRlck1haW4iLCAiYmVmb3JlV3JpdGUiLCAid3JpdGUiLCAiYWZ0ZXJXcml0ZSIsICJtb2RpZmllclBoYXNlcyIsICJnZXROb2RlTmFtZSIsICJub2RlTmFtZSIsICJnZXRXaW5kb3ciLCAibm9kZSIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgImlzSFRNTEVsZW1lbnQiLCAiSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgImFwcGx5U3R5bGVzJDEiLCAiZW5hYmxlZCIsICJwaGFzZSIsICJfcmVmIiwgInN0YXRlIiwgImVsZW1lbnRzIiwgImZvckVhY2giLCAic3R5bGVzIiwgImFzc2lnbiIsICJlZmZlY3QiLCAiX3JlZjIiLCAiaW5pdGlhbFN0eWxlcyIsICJwb3NpdGlvbiIsICJvcHRpb25zIiwgInN0cmF0ZWd5IiwgIm1hcmdpbiIsICJhcnJvdyIsICJoYXNPd25Qcm9wZXJ0eSIsICJhdHRyaWJ1dGUiLCAicmVxdWlyZXMiLCAiZ2V0QmFzZVBsYWNlbWVudCIsICJyb3VuZCIsICJnZXRVQVN0cmluZyIsICJ1YURhdGEiLCAidXNlckFnZW50RGF0YSIsICJicmFuZHMiLCAiaXNBcnJheSIsICJpdGVtIiwgImJyYW5kIiwgInZlcnNpb24iLCAidXNlckFnZW50IiwgImlzTGF5b3V0Vmlld3BvcnQiLCAiaW5jbHVkZVNjYWxlIiwgImlzRml4ZWRTdHJhdGVneSIsICJjbGllbnRSZWN0IiwgInNjYWxlWCIsICJzY2FsZVkiLCAib2Zmc2V0V2lkdGgiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInZpc3VhbFZpZXdwb3J0IiwgImFkZFZpc3VhbE9mZnNldHMiLCAieCIsICJvZmZzZXRMZWZ0IiwgInkiLCAib2Zmc2V0VG9wIiwgImdldExheW91dFJlY3QiLCAicm9vdE5vZGUiLCAiaXNTYW1lTm9kZSIsICJob3N0IiwgImlzVGFibGVFbGVtZW50IiwgImdldERvY3VtZW50RWxlbWVudCIsICJnZXRQYXJlbnROb2RlIiwgImFzc2lnbmVkU2xvdCIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgIm9mZnNldFBhcmVudCIsICJnZXRPZmZzZXRQYXJlbnQiLCAiaXNGaXJlZm94IiwgImN1cnJlbnROb2RlIiwgImNzcyIsICJ0cmFuc2Zvcm0iLCAicGVyc3BlY3RpdmUiLCAiY29udGFpbiIsICJ3aWxsQ2hhbmdlIiwgImdldE1haW5BeGlzRnJvbVBsYWNlbWVudCIsICJ3aXRoaW4iLCAibWF0aE1heCIsICJtYXRoTWluIiwgIm1lcmdlUGFkZGluZ09iamVjdCIsICJwYWRkaW5nT2JqZWN0IiwgImV4cGFuZFRvSGFzaE1hcCIsICJoYXNoTWFwIiwgImFycm93JDEiLCAiX3N0YXRlJG1vZGlmaWVyc0RhdGEkIiwgImFycm93RWxlbWVudCIsICJwb3BwZXJPZmZzZXRzIiwgIm1vZGlmaWVyc0RhdGEiLCAiYmFzZVBsYWNlbWVudCIsICJheGlzIiwgImxlbiIsICJwYWRkaW5nIiwgInJlY3RzIiwgImFycm93UmVjdCIsICJtaW5Qcm9wIiwgIm1heFByb3AiLCAiZW5kRGlmZiIsICJzdGFydERpZmYiLCAiYXJyb3dPZmZzZXRQYXJlbnQiLCAiY2xpZW50U2l6ZSIsICJjbGllbnRIZWlnaHQiLCAiY2xpZW50V2lkdGgiLCAiY2VudGVyVG9SZWZlcmVuY2UiLCAiY2VudGVyIiwgIm9mZnNldCIsICJheGlzUHJvcCIsICJjZW50ZXJPZmZzZXQiLCAiX29wdGlvbnMkZWxlbWVudCIsICJyZXF1aXJlc0lmRXhpc3RzIiwgImdldFZhcmlhdGlvbiIsICJ1bnNldFNpZGVzIiwgIm1hcFRvU3R5bGVzIiwgIl9PYmplY3QkYXNzaWduMiIsICJwb3BwZXJSZWN0IiwgInZhcmlhdGlvbiIsICJvZmZzZXRzIiwgImdwdUFjY2VsZXJhdGlvbiIsICJhZGFwdGl2ZSIsICJyb3VuZE9mZnNldHMiLCAiaXNGaXhlZCIsICJfb2Zmc2V0cyR4IiwgIl9vZmZzZXRzJHkiLCAiX3JlZjMiLCAiaGFzWCIsICJoYXNZIiwgInNpZGVYIiwgInNpZGVZIiwgIndpbiIsICJoZWlnaHRQcm9wIiwgIndpZHRoUHJvcCIsICJfT2JqZWN0JGFzc2lnbiIsICJjb21tb25TdHlsZXMiLCAiX3JlZjQiLCAiZHByIiwgImRldmljZVBpeGVsUmF0aW8iLCAiY29tcHV0ZVN0eWxlcyQxIiwgIl9yZWY1IiwgIl9vcHRpb25zJGdwdUFjY2VsZXJhdCIsICJfb3B0aW9ucyRhZGFwdGl2ZSIsICJfb3B0aW9ucyRyb3VuZE9mZnNldHMiLCAicGFzc2l2ZSIsICJldmVudExpc3RlbmVycyIsICJfb3B0aW9ucyRzY3JvbGwiLCAic2Nyb2xsIiwgIl9vcHRpb25zJHJlc2l6ZSIsICJyZXNpemUiLCAic2Nyb2xsUGFyZW50cyIsICJzY3JvbGxQYXJlbnQiLCAidXBkYXRlIiwgImhhc2giLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAibWF0Y2hlZCIsICJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsICJnZXRXaW5kb3dTY3JvbGwiLCAic2Nyb2xsTGVmdCIsICJwYWdlWE9mZnNldCIsICJzY3JvbGxUb3AiLCAicGFnZVlPZmZzZXQiLCAiZ2V0V2luZG93U2Nyb2xsQmFyWCIsICJpc1Njcm9sbFBhcmVudCIsICJfZ2V0Q29tcHV0ZWRTdHlsZSIsICJvdmVyZmxvdyIsICJvdmVyZmxvd1giLCAib3ZlcmZsb3dZIiwgImdldFNjcm9sbFBhcmVudCIsICJsaXN0U2Nyb2xsUGFyZW50cyIsICJfZWxlbWVudCRvd25lckRvY3VtZW4iLCAiaXNCb2R5IiwgInVwZGF0ZWRMaXN0IiwgInJlY3RUb0NsaWVudFJlY3QiLCAicmVjdCIsICJnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZSIsICJjbGlwcGluZ1BhcmVudCIsICJodG1sIiwgImxheW91dFZpZXdwb3J0IiwgImNsaWVudFRvcCIsICJjbGllbnRMZWZ0IiwgIndpblNjcm9sbCIsICJzY3JvbGxXaWR0aCIsICJzY3JvbGxIZWlnaHQiLCAiY29tcHV0ZU9mZnNldHMiLCAiY29tbW9uWCIsICJjb21tb25ZIiwgIm1haW5BeGlzIiwgImRldGVjdE92ZXJmbG93IiwgIl9vcHRpb25zIiwgIl9vcHRpb25zJHBsYWNlbWVudCIsICJfb3B0aW9ucyRzdHJhdGVneSIsICJfb3B0aW9ucyRib3VuZGFyeSIsICJib3VuZGFyeSIsICJfb3B0aW9ucyRyb290Qm91bmRhcnkiLCAicm9vdEJvdW5kYXJ5IiwgIl9vcHRpb25zJGVsZW1lbnRDb250ZSIsICJlbGVtZW50Q29udGV4dCIsICJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsICJhbHRCb3VuZGFyeSIsICJfb3B0aW9ucyRwYWRkaW5nIiwgImFsdENvbnRleHQiLCAiY2xpcHBpbmdDbGllbnRSZWN0IiwgIm1haW5DbGlwcGluZ1BhcmVudHMiLCAiY2xpcHBlckVsZW1lbnQiLCAiZmlyc3RDbGlwcGluZ1BhcmVudCIsICJjbGlwcGluZ1JlY3QiLCAiYWNjUmVjdCIsICJjb250ZXh0RWxlbWVudCIsICJyZWZlcmVuY2VDbGllbnRSZWN0IiwgInBvcHBlckNsaWVudFJlY3QiLCAiZWxlbWVudENsaWVudFJlY3QiLCAib3ZlcmZsb3dPZmZzZXRzIiwgIm9mZnNldERhdGEiLCAibXVsdGlwbHkiLCAiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCAiZmxpcFZhcmlhdGlvbnMiLCAiX29wdGlvbnMkYWxsb3dlZEF1dG9QIiwgImFsbG93ZWRBdXRvUGxhY2VtZW50cyIsICJhbGxQbGFjZW1lbnRzIiwgImFsbG93ZWRQbGFjZW1lbnRzIiwgIm92ZXJmbG93cyIsICJzb3J0IiwgImEiLCAiYiIsICJmbGlwJDEiLCAiX3NraXAiLCAiX29wdGlvbnMkbWFpbkF4aXMiLCAiY2hlY2tNYWluQXhpcyIsICJfb3B0aW9ucyRhbHRBeGlzIiwgImFsdEF4aXMiLCAiY2hlY2tBbHRBeGlzIiwgInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsICJmYWxsYmFja1BsYWNlbWVudHMiLCAiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwgInByZWZlcnJlZFBsYWNlbWVudCIsICJvcHBvc2l0ZVBsYWNlbWVudCIsICJyZWZlcmVuY2VSZWN0IiwgImNoZWNrc01hcCIsICJtYWtlRmFsbGJhY2tDaGVja3MiLCAiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwgImkiLCAiX2Jhc2VQbGFjZW1lbnQiLCAiaXNTdGFydFZhcmlhdGlvbiIsICJpc1ZlcnRpY2FsIiwgIm1haW5WYXJpYXRpb25TaWRlIiwgImFsdFZhcmlhdGlvblNpZGUiLCAiY2hlY2tzIiwgImV2ZXJ5IiwgImNoZWNrIiwgIl9sb29wIiwgIl9pIiwgImZpdHRpbmdQbGFjZW1lbnQiLCAicmVzZXQiLCAiZ2V0U2lkZU9mZnNldHMiLCAicHJldmVudGVkT2Zmc2V0cyIsICJpc0FueVNpZGVGdWxseUNsaXBwZWQiLCAic29tZSIsICJzaWRlIiwgImhpZGUkMSIsICJwcmV2ZW50T3ZlcmZsb3ciLCAicmVmZXJlbmNlT3ZlcmZsb3ciLCAicG9wcGVyQWx0T3ZlcmZsb3ciLCAicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwgInBvcHBlckVzY2FwZU9mZnNldHMiLCAiaXNSZWZlcmVuY2VIaWRkZW4iLCAiaGFzUG9wcGVyRXNjYXBlZCIsICJvZmZzZXQkMSIsICJfb3B0aW9ucyRvZmZzZXQiLCAiaW52ZXJ0RGlzdGFuY2UiLCAic2tpZGRpbmciLCAiZGlzdGFuY2UiLCAiX2RhdGEkc3RhdGUkcGxhY2VtZW50IiwgInBvcHBlck9mZnNldHMkMSIsICJwcmV2ZW50T3ZlcmZsb3ckMSIsICJfb3B0aW9ucyR0ZXRoZXIiLCAidGV0aGVyIiwgIl9vcHRpb25zJHRldGhlck9mZnNldCIsICJ0ZXRoZXJPZmZzZXQiLCAiaXNCYXNlUGxhY2VtZW50IiwgInRldGhlck9mZnNldFZhbHVlIiwgIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsICJvZmZzZXRNb2RpZmllclN0YXRlIiwgIl9vZmZzZXRNb2RpZmllclN0YXRlJCIsICJtYWluU2lkZSIsICJhbHRTaWRlIiwgImFkZGl0aXZlIiwgIm1pbkxlbiIsICJtYXhMZW4iLCAiYXJyb3dQYWRkaW5nT2JqZWN0IiwgImFycm93UGFkZGluZ01pbiIsICJhcnJvd1BhZGRpbmdNYXgiLCAiYXJyb3dMZW4iLCAibWluT2Zmc2V0IiwgIm1heE9mZnNldCIsICJjbGllbnRPZmZzZXQiLCAib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsICJ0ZXRoZXJNYXgiLCAicHJldmVudGVkT2Zmc2V0IiwgIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCAiX21haW5TaWRlIiwgIl9hbHRTaWRlIiwgIl9vZmZzZXQiLCAiX2xlbiIsICJfbWluIiwgIl9tYXgiLCAiaXNPcmlnaW5TaWRlIiwgIl9vZmZzZXRNb2RpZmllclZhbHVlIiwgIl90ZXRoZXJNaW4iLCAiX3RldGhlck1heCIsICJfcHJldmVudGVkT2Zmc2V0IiwgInYiLCAiZ2V0Q29tcG9zaXRlUmVjdCIsICJlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCIsICJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsICJvZmZzZXRQYXJlbnRJc1NjYWxlZCIsICJtb2RpZmllcnMiLCAidmlzaXRlZCIsICJyZXN1bHQiLCAibW9kaWZpZXIiLCAiZGVwIiwgImRlcE1vZGlmaWVyIiwgIkRFRkFVTFRfT1BUSU9OUyIsICJhcmVWYWxpZEVsZW1lbnRzIiwgImFyZ3VtZW50cyIsICJfa2V5IiwgInBvcHBlckdlbmVyYXRvciIsICJnZW5lcmF0b3JPcHRpb25zIiwgIl9nZW5lcmF0b3JPcHRpb25zIiwgIl9nZW5lcmF0b3JPcHRpb25zJGRlZiIsICJkZWZhdWx0TW9kaWZpZXJzIiwgIl9nZW5lcmF0b3JPcHRpb25zJGRlZjIiLCAiZGVmYXVsdE9wdGlvbnMiLCAicGVuZGluZyIsICJvcmRlcmVkTW9kaWZpZXJzIiwgImVmZmVjdENsZWFudXBGbnMiLCAiaXNEZXN0cm95ZWQiLCAic2V0T3B0aW9ucyIsICJzZXRPcHRpb25zQWN0aW9uIiwgImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCAibWVyZ2VkIiwgImN1cnJlbnQiLCAiZXhpc3RpbmciLCAibSIsICJfcmVmJG9wdGlvbnMiLCAiY2xlYW51cEZuIiwgImZvcmNlVXBkYXRlIiwgIl9zdGF0ZSRlbGVtZW50cyIsICJfc3RhdGUkb3JkZXJlZE1vZGlmaWUiLCAiX3N0YXRlJG9yZGVyZWRNb2RpZmllMiIsICJQcm9taXNlIiwgInJlc29sdmUiLCAidGhlbiIsICJkZXN0cm95IiwgIm9uRmlyc3RVcGRhdGUiLCAiY3JlYXRlUG9wcGVyIiwgImNvbXB1dGVTdHlsZXMiLCAiYXBwbHlTdHlsZXMiLCAiZmxpcCIsICJBUlJPV19VUF9LRVkiLCAiQVJST1dfRE9XTl9LRVkiLCAiRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSIsICJFVkVOVF9LRVlVUF9EQVRBX0FQSSIsICJTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTiIsICJTRUxFQ1RPUl9NRU5VIiwgIlBMQUNFTUVOVF9UT1AiLCAiUExBQ0VNRU5UX1RPUEVORCIsICJQTEFDRU1FTlRfQk9UVE9NIiwgIlBMQUNFTUVOVF9CT1RUT01FTkQiLCAiUExBQ0VNRU5UX1JJR0hUIiwgIlBMQUNFTUVOVF9MRUZUIiwgImF1dG9DbG9zZSIsICJkaXNwbGF5IiwgInBvcHBlckNvbmZpZyIsICJEcm9wZG93biIsICJfcG9wcGVyIiwgIl9wYXJlbnQiLCAiX21lbnUiLCAiX2luTmF2YmFyIiwgIl9kZXRlY3ROYXZiYXIiLCAiX2NyZWF0ZVBvcHBlciIsICJmb2N1cyIsICJfY29tcGxldGVIaWRlIiwgIlBvcHBlciIsICJyZWZlcmVuY2VFbGVtZW50IiwgIl9nZXRQb3BwZXJDb25maWciLCAiX2dldFBsYWNlbWVudCIsICJwYXJlbnREcm9wZG93biIsICJpc0VuZCIsICJfZ2V0T2Zmc2V0IiwgInBvcHBlckRhdGEiLCAiZGVmYXVsdEJzUG9wcGVyQ29uZmlnIiwgIl9zZWxlY3RNZW51SXRlbSIsICJvcGVuVG9nZ2xlcyIsICJjb250ZXh0IiwgImNvbXBvc2VkUGF0aCIsICJpc01lbnVUYXJnZXQiLCAiaXNJbnB1dCIsICJpc0VzY2FwZUV2ZW50IiwgImlzVXBPckRvd25FdmVudCIsICJnZXRUb2dnbGVCdXR0b24iLCAic3RvcFByb3BhZ2F0aW9uIiwgImRhdGFBcGlLZXlkb3duSGFuZGxlciIsICJjbGVhck1lbnVzIiwgIkVWRU5UX01PVVNFRE9XTiIsICJjbGFzc05hbWUiLCAiY2xpY2tDYWxsYmFjayIsICJyb290RWxlbWVudCIsICJCYWNrZHJvcCIsICJfaXNBcHBlbmRlZCIsICJfYXBwZW5kIiwgIl9nZXRFbGVtZW50IiwgIl9lbXVsYXRlQW5pbWF0aW9uIiwgImJhY2tkcm9wIiwgImNyZWF0ZUVsZW1lbnQiLCAiYXBwZW5kIiwgIkVWRU5UX0ZPQ1VTSU4iLCAiRVZFTlRfS0VZRE9XTl9UQUIiLCAiVEFCX05BVl9CQUNLV0FSRCIsICJhdXRvZm9jdXMiLCAidHJhcEVsZW1lbnQiLCAiRm9jdXNUcmFwIiwgIl9pc0FjdGl2ZSIsICJfbGFzdFRhYk5hdkRpcmVjdGlvbiIsICJhY3RpdmF0ZSIsICJfaGFuZGxlRm9jdXNpbiIsICJfaGFuZGxlS2V5ZG93biIsICJkZWFjdGl2YXRlIiwgInNoaWZ0S2V5IiwgIlNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQiLCAiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCAiUFJPUEVSVFlfUEFERElORyIsICJQUk9QRVJUWV9NQVJHSU4iLCAiU2Nyb2xsQmFySGVscGVyIiwgImdldFdpZHRoIiwgImRvY3VtZW50V2lkdGgiLCAiaW5uZXJXaWR0aCIsICJfZGlzYWJsZU92ZXJGbG93IiwgIl9zZXRFbGVtZW50QXR0cmlidXRlcyIsICJjYWxjdWxhdGVkVmFsdWUiLCAiX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCAiaXNPdmVyZmxvd2luZyIsICJfc2F2ZUluaXRpYWxBdHRyaWJ1dGUiLCAic3R5bGVQcm9wZXJ0eSIsICJzY3JvbGxiYXJXaWR0aCIsICJfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayIsICJzZXRQcm9wZXJ0eSIsICJhY3R1YWxWYWx1ZSIsICJyZW1vdmVQcm9wZXJ0eSIsICJjYWxsQmFjayIsICJFVkVOVF9ISURFX1BSRVZFTlRFRCIsICJFVkVOVF9SRVNJWkUiLCAiRVZFTlRfQ0xJQ0tfRElTTUlTUyIsICJFVkVOVF9NT1VTRURPV05fRElTTUlTUyIsICJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCAiQ0xBU1NfTkFNRV9PUEVOIiwgIkNMQVNTX05BTUVfU1RBVElDIiwgIk1vZGFsIiwgIl9kaWFsb2ciLCAiX2JhY2tkcm9wIiwgIl9pbml0aWFsaXplQmFja0Ryb3AiLCAiX2ZvY3VzdHJhcCIsICJfaW5pdGlhbGl6ZUZvY3VzVHJhcCIsICJfc2Nyb2xsQmFyIiwgIl9hZGp1c3REaWFsb2ciLCAiX3Nob3dFbGVtZW50IiwgIl9oaWRlTW9kYWwiLCAiaGFuZGxlVXBkYXRlIiwgIm1vZGFsQm9keSIsICJ0cmFuc2l0aW9uQ29tcGxldGUiLCAiX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24iLCAiZXZlbnQyIiwgIl9yZXNldEFkanVzdG1lbnRzIiwgImlzTW9kYWxPdmVyZmxvd2luZyIsICJpbml0aWFsT3ZlcmZsb3dZIiwgImlzQm9keU92ZXJmbG93aW5nIiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIsICJzaG93RXZlbnQiLCAiYWxyZWFkeU9wZW4iLCAiQ0xBU1NfTkFNRV9TSE9XSU5HIiwgIkNMQVNTX05BTUVfSElESU5HIiwgIk9QRU5fU0VMRUNUT1IiLCAiT2ZmY2FudmFzIiwgImJsdXIiLCAiY29tcGxldGVDYWxsYmFjayIsICJEZWZhdWx0QWxsb3dsaXN0IiwgImFyZWEiLCAiYnIiLCAiY29sIiwgImNvZGUiLCAiZGQiLCAiZGl2IiwgImRsIiwgImR0IiwgImVtIiwgImhyIiwgImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2IiwgImxpIiwgIm9sIiwgInAiLCAicHJlIiwgInMiLCAic21hbGwiLCAic3BhbiIsICJzdWIiLCAic3VwIiwgInN0cm9uZyIsICJ1IiwgInVsIiwgInVyaUF0dHJpYnV0ZXMiLCAiU0FGRV9VUkxfUEFUVEVSTiIsICJhbGxvd2VkQXR0cmlidXRlIiwgImFsbG93ZWRBdHRyaWJ1dGVMaXN0IiwgImF0dHJpYnV0ZU5hbWUiLCAibm9kZVZhbHVlIiwgImF0dHJpYnV0ZVJlZ2V4IiwgInJlZ2V4IiwgImFsbG93TGlzdCIsICJjb250ZW50IiwgImV4dHJhQ2xhc3MiLCAic2FuaXRpemUiLCAic2FuaXRpemVGbiIsICJ0ZW1wbGF0ZSIsICJEZWZhdWx0Q29udGVudFR5cGUiLCAiZW50cnkiLCAiVGVtcGxhdGVGYWN0b3J5IiwgImdldENvbnRlbnQiLCAiX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uIiwgImhhc0NvbnRlbnQiLCAiY2hhbmdlQ29udGVudCIsICJfY2hlY2tDb250ZW50IiwgInRvSHRtbCIsICJ0ZW1wbGF0ZVdyYXBwZXIiLCAiaW5uZXJIVE1MIiwgIl9tYXliZVNhbml0aXplIiwgInRleHQiLCAiX3NldENvbnRlbnQiLCAiYXJnIiwgInRlbXBsYXRlRWxlbWVudCIsICJfcHV0RWxlbWVudEluVGVtcGxhdGUiLCAidGV4dENvbnRlbnQiLCAidW5zYWZlSHRtbCIsICJzYW5pdGl6ZUZ1bmN0aW9uIiwgImNyZWF0ZWREb2N1bWVudCIsICJET01QYXJzZXIiLCAicGFyc2VGcm9tU3RyaW5nIiwgImVsZW1lbnROYW1lIiwgImF0dHJpYnV0ZUxpc3QiLCAiYWxsb3dlZEF0dHJpYnV0ZXMiLCAiRElTQUxMT1dFRF9BVFRSSUJVVEVTIiwgIkNMQVNTX05BTUVfRkFERSIsICJTRUxFQ1RPUl9NT0RBTCIsICJFVkVOVF9NT0RBTF9ISURFIiwgIlRSSUdHRVJfSE9WRVIiLCAiVFJJR0dFUl9GT0NVUyIsICJBdHRhY2htZW50TWFwIiwgIkFVVE8iLCAiVE9QIiwgIlJJR0hUIiwgIkJPVFRPTSIsICJMRUZUIiwgImFuaW1hdGlvbiIsICJjb250YWluZXIiLCAiY3VzdG9tQ2xhc3MiLCAiZGVsYXkiLCAidGl0bGUiLCAiVG9vbHRpcCIsICJfaXNFbmFibGVkIiwgIl90aW1lb3V0IiwgIl9pc0hvdmVyZWQiLCAiX2FjdGl2ZVRyaWdnZXIiLCAiX3RlbXBsYXRlRmFjdG9yeSIsICJfbmV3Q29udGVudCIsICJ0aXAiLCAiX3NldExpc3RlbmVycyIsICJfZml4VGl0bGUiLCAiZW5hYmxlIiwgImRpc2FibGUiLCAidG9nZ2xlRW5hYmxlZCIsICJjbGljayIsICJfbGVhdmUiLCAiX2VudGVyIiwgIl9oaWRlTW9kYWxIYW5kbGVyIiwgIl9kaXNwb3NlUG9wcGVyIiwgIl9pc1dpdGhDb250ZW50IiwgImlzSW5UaGVEb20iLCAiX2dldFRpcEVsZW1lbnQiLCAiX2lzV2l0aEFjdGl2ZVRyaWdnZXIiLCAiX2dldFRpdGxlIiwgIl9jcmVhdGVUaXBFbGVtZW50IiwgIl9nZXRDb250ZW50Rm9yVGVtcGxhdGUiLCAiX2dldFRlbXBsYXRlRmFjdG9yeSIsICJ0aXBJZCIsICJwcmVmaXgiLCAiZmxvb3IiLCAicmFuZG9tIiwgImdldEVsZW1lbnRCeUlkIiwgInNldENvbnRlbnQiLCAiX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldCIsICJfZ2V0RGVsZWdhdGVDb25maWciLCAiYXR0YWNobWVudCIsICJ0cmlnZ2VycyIsICJldmVudEluIiwgImV2ZW50T3V0IiwgIl9zZXRUaW1lb3V0IiwgInRpbWVvdXQiLCAiZGF0YUF0dHJpYnV0ZXMiLCAiZGF0YUF0dHJpYnV0ZSIsICJQb3BvdmVyIiwgIl9nZXRDb250ZW50IiwgIkVWRU5UX0FDVElWQVRFIiwgIkVWRU5UX0NMSUNLIiwgIlNFTEVDVE9SX1RBUkdFVF9MSU5LUyIsICJTRUxFQ1RPUl9OQVZfTElOS1MiLCAiU0VMRUNUT1JfTElOS19JVEVNUyIsICJyb290TWFyZ2luIiwgInNtb290aFNjcm9sbCIsICJ0aHJlc2hvbGQiLCAiU2Nyb2xsU3B5IiwgIl90YXJnZXRMaW5rcyIsICJfb2JzZXJ2YWJsZVNlY3Rpb25zIiwgIl9yb290RWxlbWVudCIsICJfYWN0aXZlVGFyZ2V0IiwgIl9vYnNlcnZlciIsICJfcHJldmlvdXNTY3JvbGxEYXRhIiwgInZpc2libGVFbnRyeVRvcCIsICJwYXJlbnRTY3JvbGxUb3AiLCAicmVmcmVzaCIsICJfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcyIsICJfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwiLCAiZGlzY29ubmVjdCIsICJfZ2V0TmV3T2JzZXJ2ZXIiLCAic2VjdGlvbiIsICJvYnNlcnZlIiwgIm9ic2VydmFibGVTZWN0aW9uIiwgInNjcm9sbFRvIiwgImJlaGF2aW9yIiwgIkludGVyc2VjdGlvbk9ic2VydmVyIiwgIl9vYnNlcnZlckNhbGxiYWNrIiwgInRhcmdldEVsZW1lbnQiLCAiX3Byb2Nlc3MiLCAidXNlclNjcm9sbHNEb3duIiwgImlzSW50ZXJzZWN0aW5nIiwgIl9jbGVhckFjdGl2ZUNsYXNzIiwgImVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyIsICJ0YXJnZXRMaW5rcyIsICJhbmNob3IiLCAiZGVjb2RlVVJJIiwgIl9hY3RpdmF0ZVBhcmVudHMiLCAibGlzdEdyb3VwIiwgImFjdGl2ZU5vZGVzIiwgInNweSIsICJBUlJPV19MRUZUX0tFWSIsICJBUlJPV19SSUdIVF9LRVkiLCAiSE9NRV9LRVkiLCAiRU5EX0tFWSIsICJTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCAiTk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRSIsICJTRUxFQ1RPUl9JTk5FUl9FTEVNIiwgIlNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSIsICJUYWIiLCAiX3NldEluaXRpYWxBdHRyaWJ1dGVzIiwgIl9nZXRDaGlsZHJlbiIsICJpbm5lckVsZW0iLCAiX2VsZW1Jc0FjdGl2ZSIsICJhY3RpdmUiLCAiX2dldEFjdGl2ZUVsZW0iLCAiaGlkZUV2ZW50IiwgIl9kZWFjdGl2YXRlIiwgIl9hY3RpdmF0ZSIsICJyZWxhdGVkRWxlbSIsICJfdG9nZ2xlRHJvcERvd24iLCAibmV4dEFjdGl2ZUVsZW1lbnQiLCAicHJldmVudFNjcm9sbCIsICJfc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMiLCAiX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZCIsICJfZ2V0SW5uZXJFbGVtZW50IiwgImlzQWN0aXZlIiwgIm91dGVyRWxlbSIsICJfZ2V0T3V0ZXJFbGVtZW50IiwgIl9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwiLCAib3BlbiIsICJFVkVOVF9NT1VTRU9WRVIiLCAiRVZFTlRfTU9VU0VPVVQiLCAiRVZFTlRfRk9DVVNPVVQiLCAiQ0xBU1NfTkFNRV9ISURFIiwgImF1dG9oaWRlIiwgIlRvYXN0IiwgIl9oYXNNb3VzZUludGVyYWN0aW9uIiwgIl9oYXNLZXlib2FyZEludGVyYWN0aW9uIiwgIl9jbGVhclRpbWVvdXQiLCAiX21heWJlU2NoZWR1bGVIaWRlIiwgImlzU2hvd24iLCAiX29uSW50ZXJhY3Rpb24iLCAiaXNJbnRlcmFjdGluZyIsICJhIiwgImEiLCAieCIsICJhIiwgIngiLCAic3RhcnQiLCAidGlja3MiLCAiY29weSIsICJ0eXBlIiwgImMiLCAiZG9jdW1lbnQiLCAibSIsICJ4IiwgIm0iLCAibSIsICJkYXR1bSIsICJ4IiwgIm0iLCAic2VsZWN0aW9uIiwgIm0iLCAibSIsICJhc2NlbmRpbmciLCAiYSIsICJtIiwgIm0iLCAibSIsICJjcmVhdGUiLCAiY3JlYXRlIiwgInBhcnNlVHlwZW5hbWVzIiwgIm0iLCAidHlwZSIsICJ3aW5kb3ciLCAiZGlzcGF0Y2hfZGVmYXVsdCIsICJtIiwgImRpc3BhdGNoX2RlZmF1bHQiLCAic2VsZWN0X2RlZmF1bHQiLCAicm9vdCIsICJzZWxlY3Rpb24iLCAic2VsZWN0X2RlZmF1bHQiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJ4IiwgInR5cGUiLCAieCIsICJ5IiwgImRpc3BhdGNoIiwgImZpbHRlciIsICJzZWxlY3Rpb24iLCAic2VsZWN0X2RlZmF1bHQiLCAiYyIsICJjb250YWluZXIiLCAiZGlzcGF0Y2giLCAidHlwZSIsICJldmVudCIsICJ0b3VjaCIsICJjb25zdGFudF9kZWZhdWx0IiwgImZvcm1hdCIsICJtIiwgImEiLCAibWluIiwgIm1heCIsICJjb25zdGFudF9kZWZhdWx0IiwgIngiLCAiYSIsICJ5IiwgInkiLCAiYSIsICJjb25zdGFudF9kZWZhdWx0IiwgInkiLCAiY29sb3IiLCAicmdiIiwgInN0YXJ0IiwgImEiLCAiYyIsICJ4IiwgImEiLCAieCIsICJjIiwgImEiLCAiYSIsICJhIiwgImMiLCAiemVybyIsICJhIiwgImkiLCAiYSIsICJjIiwgImNvbnN0YW50X2RlZmF1bHQiLCAiYSIsICJhIiwgImMiLCAibSIsICJhIiwgIngiLCAibm93IiwgImlkIiwgImluZGV4IiwgImdldCIsICJzZXQiLCAic2VsZiIsICJzdGFydCIsICJlbXB0eSIsICJpbnRlcnJ1cHRfZGVmYXVsdCIsICJpZCIsICJzZXQiLCAiZ2V0IiwgInRyYW5zaXRpb24iLCAiYSIsICJjIiwgImF0dHJSZW1vdmUiLCAiYXR0clJlbW92ZU5TIiwgImF0dHJDb25zdGFudCIsICJhdHRyQ29uc3RhbnROUyIsICJhdHRyRnVuY3Rpb24iLCAiYXR0ckZ1bmN0aW9uTlMiLCAiYXR0cl9kZWZhdWx0IiwgImlkIiwgImdldCIsICJpZCIsICJzZXQiLCAiZ2V0IiwgImlkIiwgInNldCIsICJnZXQiLCAiaWQiLCAic2V0IiwgImZpbHRlcl9kZWZhdWx0IiwgIm0iLCAibWVyZ2VfZGVmYXVsdCIsICJ0cmFuc2l0aW9uIiwgIm0iLCAiaWQiLCAic2V0IiwgIm9uX2RlZmF1bHQiLCAiZ2V0IiwgImlkIiwgInJlbW92ZV9kZWZhdWx0IiwgInNlbGVjdF9kZWZhdWx0IiwgImlkIiwgIm0iLCAiZ2V0IiwgInNlbGVjdEFsbF9kZWZhdWx0IiwgImlkIiwgIm0iLCAiY2hpbGRyZW4iLCAiaW5oZXJpdCIsICJnZXQiLCAiU2VsZWN0aW9uIiwgInNlbGVjdGlvbl9kZWZhdWx0IiwgInN0eWxlUmVtb3ZlIiwgInN0eWxlQ29uc3RhbnQiLCAic3R5bGVGdW5jdGlvbiIsICJpZCIsICJyZW1vdmUiLCAic2V0IiwgInN0eWxlX2RlZmF1bHQiLCAidGV4dENvbnN0YW50IiwgInRleHRGdW5jdGlvbiIsICJ0ZXh0X2RlZmF1bHQiLCAibSIsICJpbmhlcml0IiwgImdldCIsICJpZCIsICJzZXQiLCAiaWQiLCAic2VsZWN0X2RlZmF1bHQiLCAic2VsZWN0QWxsX2RlZmF1bHQiLCAiZmlsdGVyX2RlZmF1bHQiLCAibWVyZ2VfZGVmYXVsdCIsICJzZWxlY3Rpb25fZGVmYXVsdCIsICJvbl9kZWZhdWx0IiwgImF0dHJfZGVmYXVsdCIsICJzdHlsZV9kZWZhdWx0IiwgInRleHRfZGVmYXVsdCIsICJyZW1vdmVfZGVmYXVsdCIsICJpZCIsICJ0cmFuc2l0aW9uX2RlZmF1bHQiLCAibSIsICJpbnRlcnJ1cHRfZGVmYXVsdCIsICJ0cmFuc2l0aW9uX2RlZmF1bHQiLCAieCIsICJ5IiwgIngiLCAieSIsICJ4IiwgInkiLCAieCIsICJ5IiwgImRhdGFfZGVmYXVsdCIsICJ4IiwgInkiLCAieDIiLCAieTIiLCAieDMiLCAieTMiLCAicmVtb3ZlX2RlZmF1bHQiLCAieCIsICJ5IiwgInNpemVfZGVmYXVsdCIsICJ4IiwgInkiLCAiY29weSIsICJkYXRhX2RlZmF1bHQiLCAicmVtb3ZlX2RlZmF1bHQiLCAic2l6ZV9kZWZhdWx0IiwgImNvbnN0YW50X2RlZmF1bHQiLCAieCIsICJjb25zdGFudF9kZWZhdWx0IiwgIngiLCAieSIsICJmaW5kIiwgImlkIiwgImNvbnN0YW50X2RlZmF1bHQiLCAieCIsICJ5IiwgIm0iLCAiaSIsICJ4IiwgInkiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJ4IiwgInkiLCAibm9kZSIsICJzdHJlbmd0aCIsICJjIiwgIngyIiwgIngiLCAieCIsICJ4IiwgIngiLCAieCIsICJ4IiwgImxvY2FsZSIsICJ6ZXJvIiwgInR5cGUiLCAiZm9ybWF0IiwgImMiLCAiZm9ybWF0UHJlZml4IiwgInZhbHVlIiwgIm1heCIsICJ4IiwgIm51bWJlciIsICJ4IiwgImlkZW50aXR5IiwgIngiLCAiYSIsICJpIiwgInRyYW5zZm9ybSIsICJ5IiwgIm51bWJlciIsICJzdGFydCIsICJzdGFydCIsICJsaW5lYXIiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJ4IiwgInR5cGUiLCAidHJhbnNmb3JtIiwgImRpc3BhdGNoIiwgIngiLCAieSIsICJpZGVudGl0eSIsICJub3Byb3BhZ2F0aW9uIiwgIm5vZXZlbnRfZGVmYXVsdCIsICJkZWZhdWx0RmlsdGVyIiwgImlkZW50aXR5IiwgImRlZmF1bHRUb3VjaGFibGUiLCAidHJhbnNmb3JtIiwgInpvb21fZGVmYXVsdCIsICJmaWx0ZXIiLCAic2VsZWN0aW9uIiwgIngiLCAieSIsICJleHRlbnQiLCAidHJhbnNpdGlvbiIsICJhIiwgInR5cGUiLCAic2VsZWN0X2RlZmF1bHQiLCAibm9ldmVudF9kZWZhdWx0IiwgIm5vcHJvcGFnYXRpb24iLCAiZXZlbnQiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJub2RlcyIsICJsaW5rcyIsICJub2RlIiwgImxpbmsiLCAiaW5kZXgiLCAic2VsZWN0X2RlZmF1bHQiLCAiem9vbV9kZWZhdWx0IiwgIngiLCAieSIsICJ0cmFuc2Zvcm0iLCAiaWQiLCAibGluZWFyIiwgInRpbWVvdXQiXQp9Cg== +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL2RhdGEuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vZXZlbnQtaGFuZGxlci5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vbWFuaXB1bGF0b3IuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9jb25maWcuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYmFzZS1jb21wb25lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL3NlbGVjdG9yLWVuZ2luZS5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYWxlcnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYnV0dG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc3dpcGUuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvY2Fyb3VzZWwuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvY29sbGFwc2UuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzTGF5b3V0Vmlld3BvcnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXItbGl0ZS5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2Ryb3Bkb3duLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvYmFja2Ryb3AuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9mb2N1c3RyYXAuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9zY3JvbGxiYXIuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvbW9kYWwuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvb2ZmY2FudmFzLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc2FuaXRpemVyLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvdGVtcGxhdGUtZmFjdG9yeS5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90b29sdGlwLmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3BvcG92ZXIuanMiLCAibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvc2Nyb2xsc3B5LmpzIiwgIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3RhYi5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90b2FzdC5qcyIsICJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2luZGV4LnVtZC5qcyIsICJtYWluLnRzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZGVzY2VuZGluZy5qcyIsICJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiLCAibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc291cmNlRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9ldmVudC5qcyIsICJub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9kcmFnLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWRyYWcvc3JjL2RyYWcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jb2xvci5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2Jhc2lzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyQXJyYXkuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3pvb20uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsICJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2VWYXJ5aW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsICJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCAibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi90cmFuc2l0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NlbnRlci5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2FkZC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2NvdmVyLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL2V4dGVudC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcm9vdC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3NpemUuanMiLCAibm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3Zpc2l0QWZ0ZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy94LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcyIsICJub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3F1YWR0cmVlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9jb2xsaWRlLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvbGluay5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2xjZy5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL3NpbXVsYXRpb24uanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9tYW55Qm9keS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2V4cG9uZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdEdyb3VwLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyIsICJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCAibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMiLCAibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwgIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsICJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIsICJub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvY29uc3RhbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL25vZXZlbnQuanMiLCAibm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3pvb20uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudClcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpXG4gIH0sXG5cbiAgZ2V0KGVsZW1lbnQsIGtleSkge1xuICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KVxuXG4gICAgLy8gZnJlZSB1cCBlbGVtZW50IHJlZmVyZW5jZXMgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBsZWZ0IGZvciBhbiBlbGVtZW50XG4gICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpXG4gICAgfVxuICB9XG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvaW5kZXguanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBNQVhfVUlEID0gMV8wMDBfMDAwXG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDBcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnXG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YClcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWBcbiAgfVxuXG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQgeyB0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcblxuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbilcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpXG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdXG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdXG5cbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUlxufVxuXG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSlcbn1cblxuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbMF1cbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJ1xufVxuXG5jb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3RcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJ1xuICAvLyBIYW5kbGUgYGRldGFpbHNgIGVsZW1lbnQgYXMgaXRzIGNvbnRlbnQgbWF5IGZhbHNpZSBhcHBlYXIgdmlzaWJsZSB3aGVuIGl0IGlzIGNsb3NlZFxuICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJylcblxuICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZVxuICB9XG5cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5JylcbiAgICBpZiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnBhcmVudE5vZGUgIT09IGNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudElzVmlzaWJsZVxufVxuXG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkXG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSdcbn1cblxuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGxcbiAgfVxuXG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG59XG5cbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5qUXVlcnlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXVxuXG5jb25zdCBvbkRPTUNvbnRlbnRMb2FkZWQgPSBjYWxsYmFjayA9PiB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgIGlmICghRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCdcblxuY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FXG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdXG4gICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpblxuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gICAgICAgIHJldHVybiBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5jb25zdCBleGVjdXRlID0gKHBvc3NpYmxlQ2FsbGJhY2ssIGFyZ3MgPSBbXSwgZGVmYXVsdFZhbHVlID0gcG9zc2libGVDYWxsYmFjaykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlXG59XG5cbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1XG4gIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmdcblxuICBsZXQgY2FsbGVkID0gZmFsc2VcblxuICBjb25zdCBoYW5kbGVyID0gKHsgdGFyZ2V0IH0pID0+IHtcbiAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudClcbiAgICB9XG4gIH0sIGVtdWxhdGVkRHVyYXRpb24pXG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aFxuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudClcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAvLyBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdXG4gIH1cblxuICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xXG5cbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXVxufVxuXG5leHBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGV4ZWN1dGUsXG4gIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sXG4gIGZpbmRTaGFkb3dSb290LFxuICBnZXRFbGVtZW50LFxuICBnZXRqUXVlcnksXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCxcbiAgZ2V0VUlELFxuICBpc0Rpc2FibGVkLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIG5vb3AsXG4gIG9uRE9NQ29udGVudExvYWRlZCxcbiAgcGFyc2VTZWxlY3RvcixcbiAgcmVmbG93LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCxcbiAgdG9UeXBlXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZ2V0alF1ZXJ5IH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi9cbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qL1xuY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskL1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxXG5jb25zdCBjdXN0b21FdmVudHMgPSB7XG4gIG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxuICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG59XG5cbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoW1xuICAnY2xpY2snLFxuICAnZGJsY2xpY2snLFxuICAnbW91c2V1cCcsXG4gICdtb3VzZWRvd24nLFxuICAnY29udGV4dG1lbnUnLFxuICAnbW91c2V3aGVlbCcsXG4gICdET01Nb3VzZVNjcm9sbCcsXG4gICdtb3VzZW92ZXInLFxuICAnbW91c2VvdXQnLFxuICAnbW91c2Vtb3ZlJyxcbiAgJ3NlbGVjdHN0YXJ0JyxcbiAgJ3NlbGVjdGVuZCcsXG4gICdrZXlkb3duJyxcbiAgJ2tleXByZXNzJyxcbiAgJ2tleXVwJyxcbiAgJ29yaWVudGF0aW9uY2hhbmdlJyxcbiAgJ3RvdWNoc3RhcnQnLFxuICAndG91Y2htb3ZlJyxcbiAgJ3RvdWNoZW5kJyxcbiAgJ3RvdWNoY2FuY2VsJyxcbiAgJ3BvaW50ZXJkb3duJyxcbiAgJ3BvaW50ZXJtb3ZlJyxcbiAgJ3BvaW50ZXJ1cCcsXG4gICdwb2ludGVybGVhdmUnLFxuICAncG9pbnRlcmNhbmNlbCcsXG4gICdnZXN0dXJlc3RhcnQnLFxuICAnZ2VzdHVyZWNoYW5nZScsXG4gICdnZXN0dXJlZW5kJyxcbiAgJ2ZvY3VzJyxcbiAgJ2JsdXInLFxuICAnY2hhbmdlJyxcbiAgJ3Jlc2V0JyxcbiAgJ3NlbGVjdCcsXG4gICdzdWJtaXQnLFxuICAnZm9jdXNpbicsXG4gICdmb2N1c291dCcsXG4gICdsb2FkJyxcbiAgJ3VubG9hZCcsXG4gICdiZWZvcmV1bmxvYWQnLFxuICAncmVzaXplJyxcbiAgJ21vdmUnLFxuICAnRE9NQ29udGVudExvYWRlZCcsXG4gICdyZWFkeXN0YXRlY2hhbmdlJyxcbiAgJ2Vycm9yJyxcbiAgJ2Fib3J0JyxcbiAgJ3Njcm9sbCdcbl0pXG5cbi8qKlxuICogUHJpdmF0ZSBtZXRob2RzXG4gKi9cblxuZnVuY3Rpb24gbWFrZUV2ZW50VWlkKGVsZW1lbnQsIHVpZCkge1xuICByZXR1cm4gKHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCkgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudClcblxuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkXG4gIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fVxuXG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF1cbn1cblxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGh5ZHJhdGVPYmooZXZlbnQsIHsgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnQgfSlcblxuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbilcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcblxuICAgIGZvciAobGV0IHsgdGFyZ2V0IH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHsgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldCB9KVxuXG4gICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoZXZlbnRzLCBjYWxsYWJsZSwgZGVsZWdhdGlvblNlbGVjdG9yID0gbnVsbCkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhldmVudHMpXG4gICAgLmZpbmQoZXZlbnQgPT4gZXZlbnQuY2FsbGFibGUgPT09IGNhbGxhYmxlICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZydcbiAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gIGNvbnN0IGNhbGxhYmxlID0gaXNEZWxlZ2F0ZWQgPyBkZWxlZ2F0aW9uRnVuY3Rpb24gOiAoaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpXG5cbiAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudFxuICB9XG5cbiAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF1cbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKVxuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGFibGUgPSB3cmFwRnVuY3Rpb24oY2FsbGFibGUpXG4gIH1cblxuICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpXG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pXG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpXG5cbiAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiA9IHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmICYmIG9uZU9mZlxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSlcbiAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/XG4gICAgYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDpcbiAgICBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKVxuXG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGxcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZVxuICBmbi5vbmVPZmYgPSBvbmVPZmZcbiAgZm4udWlkRXZlbnQgPSB1aWRcbiAgaGFuZGxlcnNbdWlkXSA9IGZuXG5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKVxufVxuXG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKVxuXG4gIGlmICghZm4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpXG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuXG4gIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICBpZiAoaGFuZGxlcktleS5pbmNsdWRlcyhuYW1lc3BhY2UpKSB7XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKVxuICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudFxufVxuXG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKVxuICB9LFxuXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKVxuICB9LFxuXG4gIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KVxuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge31cbiAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleUhhbmRsZXJzLCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJylcblxuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudFxuXG4gICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbFxuICAgIGxldCBidWJibGVzID0gdHJ1ZVxuICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWVcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlXG5cbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKVxuXG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpXG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICAgIH1cblxuICAgIGNvbnN0IGV2dCA9IGh5ZHJhdGVPYmoobmV3IEV2ZW50KGV2ZW50LCB7IGJ1YmJsZXMsIGNhbmNlbGFibGU6IHRydWUgfSksIGFyZ3MpXG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfVxuXG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2dFxuICB9XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRIYW5kbGVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKC9bQS1aXS9nLCBjaHIgPT4gYC0ke2Noci50b0xvd2VyQ2FzZSgpfWApXG59XG5cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSlcbiAgfSxcblxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9XG4gICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSlcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpXG4gICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpXG4gICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSlcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlc1xuICB9LFxuXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaXB1bGF0b3JcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IHsgaXNFbGVtZW50LCB0b1R5cGUgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge30gLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gIH1cblxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKVxuXG4gICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IERhdGEgZnJvbSAnLi9kb20vZGF0YS5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi91dGlsL2NvbmZpZy5qcydcbmltcG9ydCB7IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sIGdldEVsZW1lbnQgfSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjMuMydcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKClcblxuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG5cbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSlcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBfcXVldWVDYWxsYmFjayhjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCA9IHRydWUpIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKVxuICB9XG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YFxuICB9XG5cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWBcbiAgfVxuXG4gIHN0YXRpYyBldmVudE5hbWUobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VDb21wb25lbnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGlzRGlzYWJsZWQsIGlzVmlzaWJsZSwgcGFyc2VTZWxlY3RvciB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnXG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgKCFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YFxuICAgIH1cblxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBwYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGxcbn1cblxuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpXG4gIH0sXG5cbiAgZmluZE9uZShzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpXG4gIH0sXG5cbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSlcbiAgfSxcblxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdXG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpXG5cbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgIHBhcmVudHMucHVzaChhbmNlc3RvcilcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzXG4gIH0sXG5cbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c11cbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG4gIC8vIFRPRE86IHRoaXMgaXMgbm93IHVudXNlZDsgcmVtb3ZlIGxhdGVyIGFsb25nIHdpdGggcHJldigpXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nXG5cbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXh0XVxuICAgICAgfVxuXG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBmb2N1c2FibGVDaGlsZHJlbihlbGVtZW50KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IFtcbiAgICAgICdhJyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICd0ZXh0YXJlYScsXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdbdGFiaW5kZXhdJyxcbiAgICAgICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICBdLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywnKVxuXG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpXG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpIDogbnVsbFxuICB9LFxuXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW11cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvckVuZ2luZVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgeyBpc0Rpc2FibGVkIH0gZnJvbSAnLi9pbmRleC5qcydcblxuY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWBcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgIGluc3RhbmNlW21ldGhvZF0oKVxuICB9KVxufVxuXG5leHBvcnQge1xuICBlbmFibGVEaXNtaXNzVHJpZ2dlclxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzJ1xuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luIH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnYWxlcnQnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKVxuXG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRClcbiAgICB0aGlzLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2J1dHRvbidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmJ1dHRvbidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSkpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbilcblxuICBkYXRhLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pXG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvblxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5pbXBvcnQgeyBleGVjdXRlIH0gZnJvbSAnLi9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3N3aXBlJ1xuY29uc3QgRVZFTlRfS0VZID0gJy5icy5zd2lwZSdcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWBcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCdcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJ1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fZGVsdGFYID0gMFxuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuICAgIHRoaXMuX2luaXRFdmVudHMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYXG4gICAgfVxuICB9XG5cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWFxuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKClcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjaylcbiAgfVxuXG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgP1xuICAgICAgMCA6XG4gICAgICBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVhcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYXG5cbiAgICB0aGlzLl9kZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKVxuICB9XG5cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpcGVcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50LmpzJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIHJlZmxvdyxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmRcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuaW1wb3J0IFN3aXBlIGZyb20gJy4vdXRpbC9zd2lwZS5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Nhcm91c2VsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY2Fyb3VzZWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0J1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnXG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwIC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnXG5jb25zdCBPUkRFUl9QUkVWID0gJ3ByZXYnXG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0J1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0J1xuXG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV04gPSBga2V5ZG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9FTkQgPSAnY2Fyb3VzZWwtaXRlbS1lbmQnXG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnXG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0J1xuY29uc3QgQ0xBU1NfTkFNRV9QUkVWID0gJ2Nhcm91c2VsLWl0ZW0tcHJldidcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSBTRUxFQ1RPUl9BQ1RJVkUgKyBTRUxFQ1RPUl9JVEVNXG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnXG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nXG5cbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWV06IERJUkVDVElPTl9SSUdIVCxcbiAgW0FSUk9XX1JJR0hUX0tFWV06IERJUkVDVElPTl9MRUZUXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGludGVydmFsOiA1MDAwLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHJpZGU6IGZhbHNlLFxuICB0b3VjaDogdHJ1ZSxcbiAgd3JhcDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJywgLy8gVE9ETzp2NiByZW1vdmUgYm9vbGVhbiBzdXBwb3J0XG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHJpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgdG91Y2g6ICdib29sZWFuJyxcbiAgd3JhcDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGxcblxuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcblxuICAgIGlmICh0aGlzLl9jb25maWcucmlkZSA9PT0gQ0xBU1NfTkFNRV9DQVJPVVNFTCkge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpXG4gIH1cblxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRklYTUUgVE9ETyB1c2UgYGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZWBcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGlzVmlzaWJsZSh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdGhpcy5uZXh0KClcbiAgICB9XG4gIH1cblxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKVxuICB9XG5cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpXG4gICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwoKVxuXG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpXG4gIH1cblxuICBfbWF5YmVFbmFibGVDeWNsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yaWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMuY3ljbGUoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY3ljbGUoKVxuICB9XG5cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKClcbiAgICBpZiAoaW5kZXggPiBpdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWXG5cbiAgICB0aGlzLl9zbGlkZShvcmRlciwgaXRlbXNbaW5kZXhdKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fc3dpcGVIZWxwZXIpIHtcbiAgICAgIHRoaXMuX3N3aXBlSGVscGVyLmRpc3Bvc2UoKVxuICAgIH1cblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuZGVmYXVsdEludGVydmFsID0gY29uZmlnLmludGVydmFsXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiwgKCkgPT4gdGhpcy5wYXVzZSgpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUsICgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGZvciAoY29uc3QgaW1nIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGVuZENhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSAhPT0gJ2hvdmVyJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKVxuICAgIH1cblxuICAgIGNvbnN0IHN3aXBlQ29uZmlnID0ge1xuICAgICAgbGVmdENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9MRUZUKSksXG4gICAgICByaWdodENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9SSUdIVCkpLFxuICAgICAgZW5kQ2FsbGJhY2s6IGVuZENhbGxCYWNrXG4gICAgfVxuXG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBuZXcgU3dpcGUodGhpcy5fZWxlbWVudCwgc3dpcGVDb25maWcpXG4gIH1cblxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudClcbiAgfVxuXG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxuXG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JylcblxuICAgIGNvbnN0IG5ld0FjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYFtkYXRhLWJzLXNsaWRlLXRvPVwiJHtpbmRleH1cIl1gLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgIGlmIChuZXdBY3RpdmVJbmRpY2F0b3IpIHtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApXG5cbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbFxuICB9XG5cbiAgX3NsaWRlKG9yZGVyLCBlbGVtZW50ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9nZXRBY3RpdmUoKVxuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApXG5cbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpXG5cbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKVxuXG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAvLyBUT0RPOiBjaGFuZ2UgdGVzdHMgdGhhdCB1c2UgZW1wdHkgZGl2cyB0byBhdm9pZCB0aGlzIGNoZWNrXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKVxuICAgIHRoaXMucGF1c2UoKVxuXG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudEluZGV4KVxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudFxuXG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkRcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVlxuXG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSlcblxuICAgIHJlZmxvdyhuZXh0RWxlbWVudClcblxuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKVxuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFLCBvcmRlckNsYXNzTmFtZSwgZGlyZWN0aW9uYWxDbGFzc05hbWUpXG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG5cbiAgICAgIHRyaWdnZXJFdmVudChFVkVOVF9TTElEKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpXG4gIH1cblxuICBfZ2V0QWN0aXZlKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICB9XG5cbiAgX2dldEl0ZW1zKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU0sIHRoaXMuX2VsZW1lbnQpXG4gIH1cblxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVFxuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVZcbiAgfVxuXG4gIF9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlRcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcbiAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJylcblxuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpXG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUodGhpcywgJ3NsaWRlJykgPT09ICduZXh0Jykge1xuICAgIGNhcm91c2VsLm5leHQoKVxuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNhcm91c2VsLnByZXYoKVxuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKVxuXG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY2Fyb3VzZWxzKSB7XG4gICAgQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpXG5cbmV4cG9ydCBkZWZhdWx0IENhcm91c2VsXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjb2xsYXBzZSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNvbGxhcHNlJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCdcbmNvbnN0IENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOID0gYDpzY29wZSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfWBcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJ1xuXG5jb25zdCBXSURUSCA9ICd3aWR0aCdcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIHBhcmVudDogbnVsbCxcbiAgdG9nZ2xlOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW11cblxuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChjb25zdCBlbGVtIG9mIHRvZ2dsZUxpc3QpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JFbmdpbmUuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKVxuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpXG4gICAgICAgIC5maWx0ZXIoZm91bmRFbGVtZW50ID0+IGZvdW5kRWxlbWVudCA9PT0gdGhpcy5fZWxlbWVudClcblxuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdGhpcy5faXNTaG93bigpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlQ2hpbGRyZW4gPSBbXVxuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUylcbiAgICAgICAgLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC5tYXAoZWxlbWVudCA9PiBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHsgdG9nZ2xlOiBmYWxzZSB9KSlcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2hpbGRyZW4ubGVuZ3RoICYmIGFjdGl2ZUNoaWxkcmVuWzBdLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWN0aXZlSW5zdGFuY2Ugb2YgYWN0aXZlQ2hpbGRyZW4pIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlLmhpZGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMFxuXG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSlcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcbiAgICB9XG5cbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWBcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGBcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YFxuXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdGhpcy5fdHJpZ2dlckFycmF5KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0cmlnZ2VyKVxuXG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJydcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpIC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudClcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFRcbiAgfVxuXG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KVxuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSlcbiAgfVxuXG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0NPTExBUFNFRCwgIWlzT3BlbilcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fVxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgIF9jb25maWcudG9nZ2xlID0gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCAoZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5nZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKHRoaXMpKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7IHRvZ2dsZTogZmFsc2UgfSkudG9nZ2xlKClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3IuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBleGVjdXRlLFxuICBnZXRFbGVtZW50LFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNFbGVtZW50LFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICBub29wXG59IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Ryb3Bkb3duJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMiAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSID0gJ2Ryb3B1cC1jZW50ZXInXG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04gPSBgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX0uJHtDTEFTU19OQU1FX1NIT1d9YFxuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IFNFTEVDVE9SX05BVkJBUiA9ICcubmF2YmFyJ1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdidcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5cbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvQ2xvc2U6IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBvZmZzZXQ6IFswLCAyXSxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlIC8vIGRyb3Bkb3duIHdyYXBwZXJcbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgdGhpcy5fbWVudSA9IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KVxuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCByZWxhdGVkVGFyZ2V0KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF0aGlzLl9wYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJylcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmXG4gICAgICB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYClcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlXG4gICAgfVxuXG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKClcbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZylcbiAgfVxuXG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fcGFyZW50XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUF9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1RPUENFTlRFUlxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUlxuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJ1xuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT01cbiAgfVxuXG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVIpICE9PSBudWxsXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKSAvLyBUT0RPOiB2NiByZW1vdmVcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9XG4gIH1cblxuICBfc2VsZWN0TWVudUl0ZW0oeyBrZXksIHRhcmdldCB9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMsIHRoaXMuX21lbnUpLmZpbHRlcihlbGVtZW50ID0+IGlzVmlzaWJsZShlbGVtZW50KSlcblxuICAgIGlmICghaXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBpZiB0YXJnZXQgaXNuJ3QgaW5jbHVkZWQgaW4gaXRlbXMgKGUuZy4gd2hlbiBleHBhbmRpbmcgdGhlIGRyb3Bkb3duKVxuICAgIC8vIGFsbG93IGN5Y2xpbmcgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gY2FzZSBrZXkgZXF1YWxzIEFSUk9XX1VQX0tFWVxuICAgIGdldE5leHRBY3RpdmVFbGVtZW50KGl0ZW1zLCB0YXJnZXQsIGtleSA9PT0gQVJST1dfRE9XTl9LRVksICFpdGVtcy5pbmNsdWRlcyh0YXJnZXQpKS5mb2N1cygpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10oKVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgY2xlYXJNZW51cyhldmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IFJJR0hUX01PVVNFX0JVVFRPTiB8fCAoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgIT09IFRBQl9LRVkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcGVuVG9nZ2xlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04pXG5cbiAgICBmb3IgKGNvbnN0IHRvZ2dsZSBvZiBvcGVuVG9nZ2xlcykge1xuICAgICAgY29uc3QgY29udGV4dCA9IERyb3Bkb3duLmdldEluc3RhbmNlKHRvZ2dsZSlcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKVxuICAgICAgY29uc3QgaXNNZW51VGFyZ2V0ID0gY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX21lbnUpXG4gICAgICBpZiAoXG4gICAgICAgIGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fFxuICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScgJiYgIWlzTWVudVRhcmdldCkgfHxcbiAgICAgICAgKGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdvdXRzaWRlJyAmJiBpc01lbnVUYXJnZXQpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgaWYgKGNvbnRleHQuX21lbnUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAoKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ID09PSBUQUJfS0VZKSB8fCAvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7IHJlbGF0ZWRUYXJnZXQ6IGNvbnRleHQuX2VsZW1lbnQgfVxuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudFxuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldClcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGFuIFVQIHwgRE9XTiB8IEVTQ0FQRSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhICYmIGlmIGtleSBpcyBvdGhlciB0aGFuIEVTQ0FQRSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG5cbiAgICBjb25zdCBpc0lucHV0ID0gL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSlcbiAgICBjb25zdCBpc0VzY2FwZUV2ZW50ID0gZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZXG4gICAgY29uc3QgaXNVcE9yRG93bkV2ZW50ID0gW0FSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSlcblxuICAgIGlmICghaXNVcE9yRG93bkV2ZW50ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNJbnB1dCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIGNvbnN0IGdldFRvZ2dsZUJ1dHRvbiA9IHRoaXMubWF0Y2hlcyhTRUxFQ1RPUl9EQVRBX1RPR0dMRSkgP1xuICAgICAgdGhpcyA6XG4gICAgICAoU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSlbMF0gfHxcbiAgICAgICAgU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSlbMF0gfHxcbiAgICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZXZlbnQuZGVsZWdhdGVUYXJnZXQucGFyZW50Tm9kZSkpXG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UoZ2V0VG9nZ2xlQnV0dG9uKVxuXG4gICAgaWYgKGlzVXBPckRvd25FdmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGluc3RhbmNlLnNob3coKVxuICAgICAgaW5zdGFuY2UuX3NlbGVjdE1lbnVJdGVtKGV2ZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLl9pc1Nob3duKCkpIHsgLy8gZWxzZSBpcyBlc2NhcGUgYW5kIHdlIGNoZWNrIGlmIGl0IGlzIHNob3duXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaW5zdGFuY2UuaGlkZSgpXG4gICAgICBnZXRUb2dnbGVCdXR0b24uZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJLCBTRUxFQ1RPUl9NRU5VLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cylcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bilcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25cbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vY29uZmlnLmpzJ1xuaW1wb3J0IHtcbiAgZXhlY3V0ZSwgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiwgZ2V0RWxlbWVudCwgcmVmbG93XG59IGZyb20gJy4vaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdiYWNrZHJvcCdcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBFVkVOVF9NT1VTRURPV04gPSBgbW91c2Vkb3duLmJzLiR7TkFNRX1gXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgY2xpY2tDYWxsYmFjazogbnVsbCxcbiAgaXNBbmltYXRlZDogZmFsc2UsXG4gIGlzVmlzaWJsZTogdHJ1ZSwgLy8gaWYgZmFsc2UsIHdlIHVzZSB0aGUgYmFja2Ryb3AgaGVscGVyIHdpdGhvdXQgYWRkaW5nIGFueSBlbGVtZW50IHRvIHRoZSBkb21cbiAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgcm9vdEVsZW1lbnQ6ICcoZWxlbWVudHxzdHJpbmcpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQoKVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKVxuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KGVsZW1lbnQpXG4gICAgfVxuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKClcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgfSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTilcblxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKClcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2VcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50XG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudClcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpXG4gICAgdGhpcy5fY29uZmlnLnJvb3RFbGVtZW50LmFwcGVuZChlbGVtZW50KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjaylcbiAgICB9KVxuXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWVcbiAgfVxuXG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpIC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpXG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7IHRyYXBFbGVtZW50IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudClcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Njcm9sbEJhci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuLi9kb20vbWFuaXB1bGF0b3IuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJy4vaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJ1xuY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnXG5jb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnXG5jb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0J1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpXG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aClcbiAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKVxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aClcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTilcbiAgfVxuXG4gIGlzT3ZlcmZsb3dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSA+IDBcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rpc2FibGVPdmVyRmxvdygpIHtcbiAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICB9XG5cbiAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpXG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KVxuICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KVxuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGApXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spXG4gIH1cblxuICBfc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpXG4gICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KVxuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHN0eWxlUHJvcGVydHkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpXG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIHZhbHVlKVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKVxuICB9XG5cbiAgX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIGNhbGxCYWNrKSB7XG4gICAgaWYgKGlzRWxlbWVudChzZWxlY3RvcikpIHtcbiAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGNhbGxCYWNrKHNlbClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsQmFySGVscGVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wLmpzJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcydcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi91dGlsL2ZvY3VzdHJhcC5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbiwgaXNSVEwsIGlzVmlzaWJsZSwgcmVmbG93XG59IGZyb20gJy4vdXRpbC9pbmRleC5qcydcbmltcG9ydCBTY3JvbGxCYXJIZWxwZXIgZnJvbSAnLi91dGlsL3Njcm9sbGJhci5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ21vZGFsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMubW9kYWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTID0gYG1vdXNlZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3BlbidcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnXG5cbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm1vZGFsLnNob3cnXG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZydcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGZvY3VzOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgZm9jdXM6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKClcblxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIHRoaXMuX3Njcm9sbEJhci5oaWRlKClcblxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pXG5cbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygoKSA9PiB0aGlzLl9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSlcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2hpZGVNb2RhbCgpLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9LRVkpXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX0tFWSlcblxuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgaGFuZGxlVXBkYXRlKCkge1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSwgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlLFxuICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgfSlcbiAgfVxuXG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSlcbiAgfVxuXG4gIF9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSB7XG4gICAgLy8gdHJ5IHRvIGFwcGVuZCBkeW5hbWljIG1vZGFsXG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpXG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDBcbiAgICB9XG5cbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2sodHJhbnNpdGlvbkNvbXBsZXRlLCB0aGlzLl9kaWFsb2csIHRoaXMuX2lzQW5pbWF0ZWQoKSlcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICB9KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgLy8gYSBiYWQgdHJpY2sgdG8gc2VncmVnYXRlIGNsaWNrcyB0aGF0IG1heSBzdGFydCBpbnNpZGUgZGlhbG9nIGJ1dCBlbmQgb3V0c2lkZSwgYW5kIGF2b2lkIGxpc3RlbiB0byBzY3JvbGxiYXIgY2xpY2tzXG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgfHwgdGhpcy5fZWxlbWVudCAhPT0gZXZlbnQyLnRhcmdldCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuXG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKVxuICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpXG4gICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH0pXG4gIH1cblxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICB9XG5cbiAgX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1lcbiAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICBpZiAoaW5pdGlhbE92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TVEFUSUMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJ1xuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQylcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NUQVRJQylcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IGluaXRpYWxPdmVyZmxvd1lcbiAgICAgIH0sIHRoaXMuX2RpYWxvZylcbiAgICB9LCB0aGlzLl9kaWFsb2cpXG5cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgKi9cblxuICBfYWRqdXN0RGlhbG9nKCkge1xuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKClcbiAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMFxuXG4gICAgaWYgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0J1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG5cbiAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdSaWdodCcgOiAncGFkZGluZ0xlZnQnXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJ1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJydcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVywgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGFsIHRvZ2dsZXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUilcbiAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuXG4gIGRhdGEudG9nZ2xlKHRoaXMpXG59KVxuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihNb2RhbClcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpXG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4vdXRpbC9iYWNrZHJvcC5qcydcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGlzRGlzYWJsZWQsXG4gIGlzVmlzaWJsZVxufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXIuanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdvZmZjYW52YXMnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5vZmZjYW52YXMnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9ISURJTkcgPSAnaGlkaW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9CQUNLRFJPUCA9ICdvZmZjYW52YXMtYmFja2Ryb3AnXG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5vZmZjYW52YXMuc2hvdydcblxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBzY3JvbGw6IGZhbHNlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzY3JvbGw6ICdib29sZWFuJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBPZmZjYW52YXMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKVxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywgeyByZWxhdGVkVGFyZ2V0IH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdygpXG5cbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5oaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCB8fCB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwgeyByZWxhdGVkVGFyZ2V0IH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJRElORylcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKClcblxuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XLCBDTEFTU19OQU1FX0hJRElORylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5yZXNldCgpXG4gICAgICB9XG5cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbGJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICBjb25zdCBjbGlja0NhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH1cblxuICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZVxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKVxuXG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBjbGFzc05hbWU6IENMQVNTX05BTUVfQkFDS0RST1AsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBpc0FuaW1hdGVkOiB0cnVlLFxuICAgICAgcm9vdEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgIGNsaWNrQ2FsbGJhY2s6IGlzVmlzaWJsZSA/IGNsaWNrQ2FsbGJhY2sgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSlcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpXG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG4gIGRhdGEudG9nZ2xlKHRoaXMpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KClcbiAgfVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKVxuICAgIH1cbiAgfVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8vIGpzLWRvY3Mtc3RhcnQgYWxsb3ctbGlzdFxuY29uc3QgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0QWxsb3dsaXN0ID0ge1xuICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICBhOiBbJ3RhcmdldCcsICdocmVmJywgJ3RpdGxlJywgJ3JlbCddLFxuICBhcmVhOiBbXSxcbiAgYjogW10sXG4gIGJyOiBbXSxcbiAgY29sOiBbXSxcbiAgY29kZTogW10sXG4gIGRkOiBbXSxcbiAgZGl2OiBbXSxcbiAgZGw6IFtdLFxuICBkdDogW10sXG4gIGVtOiBbXSxcbiAgaHI6IFtdLFxuICBoMTogW10sXG4gIGgyOiBbXSxcbiAgaDM6IFtdLFxuICBoNDogW10sXG4gIGg1OiBbXSxcbiAgaDY6IFtdLFxuICBpOiBbXSxcbiAgaW1nOiBbJ3NyYycsICdzcmNzZXQnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICBsaTogW10sXG4gIG9sOiBbXSxcbiAgcDogW10sXG4gIHByZTogW10sXG4gIHM6IFtdLFxuICBzbWFsbDogW10sXG4gIHNwYW46IFtdLFxuICBzdWI6IFtdLFxuICBzdXA6IFtdLFxuICBzdHJvbmc6IFtdLFxuICB1OiBbXSxcbiAgdWw6IFtdXG59XG4vLyBqcy1kb2NzLWVuZCBhbGxvdy1saXN0XG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFtcbiAgJ2JhY2tncm91bmQnLFxuICAnY2l0ZScsXG4gICdocmVmJyxcbiAgJ2l0ZW10eXBlJyxcbiAgJ2xvbmdkZXNjJyxcbiAgJ3Bvc3RlcicsXG4gICdzcmMnLFxuICAneGxpbms6aHJlZidcbl0pXG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBVUkxzIHRoYXQgYXJlIHNhZmUgd3J0LiBYU1MgaW4gVVJMIG5hdmlnYXRpb25cbiAqIGNvbnRleHRzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xNS4yLjgvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHMjTDM4XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvaVxuXG5jb25zdCBhbGxvd2VkQXR0cmlidXRlID0gKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpID0+IHtcbiAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgaWYgKHVyaUF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKVxuICAgIC5zb21lKHJlZ2V4ID0+IHJlZ2V4LnRlc3QoYXR0cmlidXRlTmFtZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgYWxsb3dMaXN0LCBzYW5pdGl6ZUZ1bmN0aW9uKSB7XG4gIGlmICghdW5zYWZlSHRtbC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zYWZlSHRtbFxuICB9XG5cbiAgaWYgKHNhbml0aXplRnVuY3Rpb24gJiYgdHlwZW9mIHNhbml0aXplRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2FuaXRpemVGdW5jdGlvbih1bnNhZmVIdG1sKVxuICB9XG5cbiAgY29uc3QgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKVxuICBjb25zdCBjcmVhdGVkRG9jdW1lbnQgPSBkb21QYXJzZXIucGFyc2VGcm9tU3RyaW5nKHVuc2FmZUh0bWwsICd0ZXh0L2h0bWwnKVxuICBjb25zdCBlbGVtZW50cyA9IFtdLmNvbmNhdCguLi5jcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpXG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgZWxlbWVudE5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmICghT2JqZWN0LmtleXMoYWxsb3dMaXN0KS5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlKClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpXG4gICAgY29uc3QgYWxsb3dlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQoYWxsb3dMaXN0WycqJ10gfHwgW10sIGFsbG93TGlzdFtlbGVtZW50TmFtZV0gfHwgW10pXG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVMaXN0KSB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUxcbn1cbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC90ZW1wbGF0ZS1mYWN0b3J5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vY29uZmlnLmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCwgc2FuaXRpemVIdG1sIH0gZnJvbSAnLi9zYW5pdGl6ZXIuanMnXG5pbXBvcnQgeyBleGVjdXRlLCBnZXRFbGVtZW50LCBpc0VsZW1lbnQgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnVGVtcGxhdGVGYWN0b3J5J1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGNvbnRlbnQ6IHt9LCAvLyB7IHNlbGVjdG9yIDogdGV4dCAsICBzZWxlY3RvcjIgOiB0ZXh0MiAsIH1cbiAgZXh0cmFDbGFzczogJycsXG4gIGh0bWw6IGZhbHNlLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2Pidcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGNvbnRlbnQ6ICdvYmplY3QnLFxuICBleHRyYUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZydcbn1cblxuY29uc3QgRGVmYXVsdENvbnRlbnRUeXBlID0ge1xuICBlbnRyeTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbnxudWxsKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xlbGVtZW50KSdcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGVtcGxhdGVGYWN0b3J5IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpXG4gICAgICAubWFwKGNvbmZpZyA9PiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb25maWcpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICB9XG5cbiAgaGFzQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50KCkubGVuZ3RoID4gMFxuICB9XG5cbiAgY2hhbmdlQ29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbnRlbnQpXG4gICAgdGhpcy5fY29uZmlnLmNvbnRlbnQgPSB7IC4uLnRoaXMuX2NvbmZpZy5jb250ZW50LCAuLi5jb250ZW50IH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgdG9IdG1sKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGVtcGxhdGVXcmFwcGVyLmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUodGhpcy5fY29uZmlnLnRlbXBsYXRlKVxuXG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIHRleHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KSkge1xuICAgICAgdGhpcy5fc2V0Q29udGVudCh0ZW1wbGF0ZVdyYXBwZXIsIHRleHQsIHNlbGVjdG9yKVxuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVXcmFwcGVyLmNoaWxkcmVuWzBdXG4gICAgY29uc3QgZXh0cmFDbGFzcyA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5leHRyYUNsYXNzKVxuXG4gICAgaWYgKGV4dHJhQ2xhc3MpIHtcbiAgICAgIHRlbXBsYXRlLmNsYXNzTGlzdC5hZGQoLi4uZXh0cmFDbGFzcy5zcGxpdCgnICcpKVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZykge1xuICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb25maWcuY29udGVudClcbiAgfVxuXG4gIF9jaGVja0NvbnRlbnQoYXJnKSB7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGFyZykpIHtcbiAgICAgIHN1cGVyLl90eXBlQ2hlY2tDb25maWcoeyBzZWxlY3RvciwgZW50cnk6IGNvbnRlbnQgfSwgRGVmYXVsdENvbnRlbnRUeXBlKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRDb250ZW50KHRlbXBsYXRlLCBjb250ZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIHRlbXBsYXRlKVxuXG4gICAgaWYgKCF0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnRlbnQgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KVxuXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQucmVtb3ZlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0VsZW1lbnQoY29udGVudCkpIHtcbiAgICAgIHRoaXMuX3B1dEVsZW1lbnRJblRlbXBsYXRlKGdldEVsZW1lbnQoY29udGVudCksIHRlbXBsYXRlRWxlbWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUoY29udGVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnRcbiAgfVxuXG4gIF9tYXliZVNhbml0aXplKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2FuaXRpemUgPyBzYW5pdGl6ZUh0bWwoYXJnLCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbikgOiBhcmdcbiAgfVxuXG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzXSlcbiAgfVxuXG4gIF9wdXRFbGVtZW50SW5UZW1wbGF0ZShlbGVtZW50LCB0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSAnJ1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmFwcGVuZChlbGVtZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlRmFjdG9yeVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b29sdGlwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvci5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbiwgZXhlY3V0ZSwgZmluZFNoYWRvd1Jvb3QsIGdldEVsZW1lbnQsIGdldFVJRCwgaXNSVEwsIG5vb3Bcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCB9IGZyb20gJy4vdXRpbC9zYW5pdGl6ZXIuanMnXG5pbXBvcnQgVGVtcGxhdGVGYWN0b3J5IGZyb20gJy4vdXRpbC90ZW1wbGF0ZS1mYWN0b3J5LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9vbHRpcCdcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKVxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfTU9EQUwgPSAnbW9kYWwnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiA9ICcudG9vbHRpcC1pbm5lcidcbmNvbnN0IFNFTEVDVE9SX01PREFMID0gYC4ke0NMQVNTX05BTUVfTU9EQUx9YFxuXG5jb25zdCBFVkVOVF9NT0RBTF9ISURFID0gJ2hpZGUuYnMubW9kYWwnXG5cbmNvbnN0IFRSSUdHRVJfSE9WRVIgPSAnaG92ZXInXG5jb25zdCBUUklHR0VSX0ZPQ1VTID0gJ2ZvY3VzJ1xuY29uc3QgVFJJR0dFUl9DTElDSyA9ICdjbGljaydcbmNvbnN0IFRSSUdHRVJfTUFOVUFMID0gJ21hbnVhbCdcblxuY29uc3QgRVZFTlRfSElERSA9ICdoaWRlJ1xuY29uc3QgRVZFTlRfSElEREVOID0gJ2hpZGRlbidcbmNvbnN0IEVWRU5UX1NIT1cgPSAnc2hvdydcbmNvbnN0IEVWRU5UX1NIT1dOID0gJ3Nob3duJ1xuY29uc3QgRVZFTlRfSU5TRVJURUQgPSAnaW5zZXJ0ZWQnXG5jb25zdCBFVkVOVF9DTElDSyA9ICdjbGljaydcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSAnZm9jdXNpbidcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gJ2ZvY3Vzb3V0J1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiA9ICdtb3VzZWVudGVyJ1xuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSA9ICdtb3VzZWxlYXZlJ1xuXG5jb25zdCBBdHRhY2htZW50TWFwID0ge1xuICBBVVRPOiAnYXV0bycsXG4gIFRPUDogJ3RvcCcsXG4gIFJJR0hUOiBpc1JUTCgpID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgQk9UVE9NOiAnYm90dG9tJyxcbiAgTEVGVDogaXNSVEwoKSA/ICdyaWdodCcgOiAnbGVmdCdcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBhbmltYXRpb246IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgY29udGFpbmVyOiBmYWxzZSxcbiAgY3VzdG9tQ2xhc3M6ICcnLFxuICBkZWxheTogMCxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLFxuICBodG1sOiBmYWxzZSxcbiAgb2Zmc2V0OiBbMCwgNl0sXG4gIHBsYWNlbWVudDogJ3RvcCcsXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicsXG4gIHRpdGxlOiAnJyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gIGN1c3RvbUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogJ2FycmF5JyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBsYWNlbWVudDogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gIHRpdGxlOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKScsXG4gIHRyaWdnZXI6ICdzdHJpbmcnXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJylcbiAgICB9XG5cbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICAgIHRoaXMuX3RpbWVvdXQgPSAwXG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fVxuICAgIHRoaXMuX3BvcHBlciA9IG51bGxcbiAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBudWxsXG4gICAgdGhpcy5fbmV3Q29udGVudCA9IG51bGxcblxuICAgIC8vIFByb3RlY3RlZFxuICAgIHRoaXMudGlwID0gbnVsbFxuXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLl9maXhUaXRsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSBmYWxzZVxuICB9XG5cbiAgdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkXG4gIH1cblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2sgPSAhdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGlja1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2xlYXZlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VudGVyKClcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpXG5cbiAgICBpZiAodGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSlcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJylcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLl9pc1dpdGhDb250ZW50KCkgJiYgdGhpcy5faXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPVykpXG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgaXNJblRoZURvbSA9IChzaGFkb3dSb290IHx8IHRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFRPRE86IHY2IHJlbW92ZSB0aGlzIG9yIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXAuZ2V0QXR0cmlidXRlKCdpZCcpKVxuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpXG4gICAgfVxuXG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcClcblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTikpXG5cbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlYXZlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElERSkpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KClcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGwgLy8gaXQgaXMgYSB0cmljayB0byBzdXBwb3J0IG1hbnVhbCB0cmlnZ2VyaW5nXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4pKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpXG4gIH1cblxuICBfZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudCB8fCB0aGlzLl9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aXBcbiAgfVxuXG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKClcblxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGNoZWNrIGluIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFLCBDTEFTU19OQU1FX1NIT1cpXG4gICAgLy8gVE9ETzogdjYgdGhlIGZvbGxvd2luZyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBDU1Mgb25seVxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKGBicy0ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXV0b2ApXG5cbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKClcblxuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRpcFxuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICAgIHRoaXMuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3RvcnlcbiAgfVxuXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9UT09MVElQX0lOTkVSXTogdGhpcy5fZ2V0VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgKHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IGV4ZWN1dGUodGhpcy5fY29uZmlnLnBsYWNlbWVudCwgW3RoaXMsIHRpcCwgdGhpcy5fZWxlbWVudF0pXG4gICAgY29uc3QgYXR0YWNobWVudCA9IEF0dGFjaG1lbnRNYXBbcGxhY2VtZW50LnRvVXBwZXJDYXNlKCldXG4gICAgcmV0dXJuIFBvcHBlci5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkpXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXMuX2VsZW1lbnRdKVxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmVTZXRQbGFjZW1lbnQnLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgICBmbjogZGF0YSA9PiB7XG4gICAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgICB0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdkYXRhLXBvcHBlci1wbGFjZW1lbnQnLCBkYXRhLnN0YXRlLnBsYWNlbWVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9XG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKVxuXG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0spLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KVxuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKClcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOKVxuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFTEVBVkUpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVClcblxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IHRydWVcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpXG4gICAgICAgIH0pXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPVxuICAgICAgICAgICAgY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxuXG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuICB9XG5cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcblxuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSkgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKVxuICB9XG5cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG5cbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93KClcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdylcbiAgfVxuXG4gIF9sZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKVxuICB9XG5cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG4gIH1cblxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKVxuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKVxuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcilcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25maWcuc2VsZWN0b3IgPSBmYWxzZVxuICAgIGNvbmZpZy50cmlnZ2VyID0gJ21hbnVhbCdcblxuICAgIC8vIEluIHRoZSBmdXR1cmUgY2FuIGJlIHJlcGxhY2VkIHdpdGg6XG4gICAgLy8gY29uc3Qga2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpLmZpbHRlcihlbnRyeSA9PiB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZW50cnlbMF1dICE9PSB0aGlzLl9jb25maWdbZW50cnlbMF1dKVxuICAgIC8vIGBPYmplY3QuZnJvbUVudHJpZXMoa2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMpYFxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9kaXNwb3NlUG9wcGVyKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpXG4gICAgICB0aGlzLnRpcCA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb29sdGlwLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAuanMnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdwb3BvdmVyJ1xuXG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInXG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgK1xuICAgICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICtcbiAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2NsaWNrJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKVxuXG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLCBnZXRFbGVtZW50LCBpc0Rpc2FibGVkLCBpc1Zpc2libGVcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnc2Nyb2xsc3B5J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX0FDVElWQVRFID0gYGFjdGl2YXRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0sgPSBgY2xpY2ske0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nXG5jb25zdCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MgPSAnW2hyZWZdJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgb2Zmc2V0OiBudWxsLCAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLCAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fcm9vdEVsZW1lbnQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnQpLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnID8gbnVsbCA6IHRoaXMuX2VsZW1lbnRcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsXG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhID0ge1xuICAgICAgdmlzaWJsZUVudHJ5VG9wOiAwLFxuICAgICAgcGFyZW50U2Nyb2xsVG9wOiAwXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaCgpIC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKClcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHlcblxuICAgIC8vIFRPRE86IHY2IE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFVzZSByb290TWFyZ2luIG9ubHlcbiAgICBjb25maWcucm9vdE1hcmdpbiA9IGNvbmZpZy5vZmZzZXQgPyBgJHtjb25maWcub2Zmc2V0fXB4IDBweCAtMzAlYCA6IGNvbmZpZy5yb290TWFyZ2luXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNtb290aFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSylcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSywgU0VMRUNUT1JfVEFSR0VUX0xJTktTLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQoZXZlbnQudGFyZ2V0Lmhhc2gpXG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG9ic2VydmFibGVTZWN0aW9uLm9mZnNldFRvcCAtIHRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wXG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7IHRvcDogaGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSwgb3B0aW9ucylcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKVxuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3BcbiAgICAgIHRoaXMuX3Byb2Nlc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50U2Nyb2xsVG9wID0gKHRoaXMuX3Jvb3RFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3BcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcFxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKVxuXG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldClcblxuICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIHRhcmdldExpbmtzKSB7XG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcyBhbiBpZCBhbmQgaXMgbm90IGRpc2FibGVkXG4gICAgICBpZiAoIWFuY2hvci5oYXNoIHx8IGlzRGlzYWJsZWQoYW5jaG9yKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgdGhpcy5fZWxlbWVudClcblxuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIG9ic2VydmFibGVTZWN0aW9uIGV4aXN0cyAmIGlzIHZpc2libGVcbiAgICAgIGlmIChpc1Zpc2libGUob2JzZXJ2YWJsZVNlY3Rpb24pKSB7XG4gICAgICAgIHRoaXMuX3RhcmdldExpbmtzLnNldChkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCBhbmNob3IpXG4gICAgICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5zZXQoYW5jaG9yLmhhc2gsIG9ic2VydmFibGVTZWN0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9wcm9jZXNzKHRhcmdldCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgPT09IHRhcmdldCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0aGlzLl9jb25maWcudGFyZ2V0KVxuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IHRhcmdldFxuICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpXG5cbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9BQ1RJVkFURSwgeyByZWxhdGVkVGFyZ2V0OiB0YXJnZXQgfSlcbiAgfVxuXG4gIF9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KSB7XG4gICAgLy8gQWN0aXZhdGUgZHJvcGRvd24gcGFyZW50c1xuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCB0YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTikpXG4gICAgICAgIC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsaXN0R3JvdXAgb2YgU2VsZWN0b3JFbmdpbmUucGFyZW50cyh0YXJnZXQsIFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKSkge1xuICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX0xJTktfSVRFTVMpKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfY2xlYXJBY3RpdmVDbGFzcyhwYXJlbnQpIHtcbiAgICBwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcblxuICAgIGNvbnN0IGFjdGl2ZU5vZGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChgJHtTRUxFQ1RPUl9UQVJHRVRfTElOS1N9LiR7Q0xBU1NfTkFNRV9BQ1RJVkV9YCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhY3RpdmVOb2Rlcykge1xuICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10oKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBzcHkgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSkpIHtcbiAgICBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZShzcHkpXG4gIH1cbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSlcblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsU3B5XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luLCBnZXROZXh0QWN0aXZlRWxlbWVudCwgaXNEaXNhYmxlZCB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RhYidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnXG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCdcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgSE9NRV9LRVkgPSAnSG9tZSdcbmNvbnN0IEVORF9LRVkgPSAnRW5kJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nXG5cbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSBgOm5vdCgke1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0pYFxuXG5jb25zdCBTRUxFQ1RPUl9UQUJfUEFORUwgPSAnLmxpc3QtZ3JvdXAsIC5uYXYsIFtyb2xlPVwidGFibGlzdFwiXSdcbmNvbnN0IFNFTEVDVE9SX09VVEVSID0gJy5uYXYtaXRlbSwgLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0lOTkVSID0gYC5uYXYtbGluayR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIC5saXN0LWdyb3VwLWl0ZW0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCBbcm9sZT1cInRhYlwiXSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX1gXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nIC8vIFRPRE86IGNvdWxkIG9ubHkgYmUgYHRhYmAgaW4gdjZcbmNvbnN0IFNFTEVDVE9SX0lOTkVSX0VMRU0gPSBgJHtTRUxFQ1RPUl9JTk5FUn0sICR7U0VMRUNUT1JfREFUQV9UT0dHTEV9YFxuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUgPSBgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdYFxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIHN1cGVyKGVsZW1lbnQpXG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX1RBQl9QQU5FTClcblxuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICAgIC8vIFRPRE86IHNob3VsZCB0aHJvdyBleGNlcHRpb24gaW4gdjZcbiAgICAgIC8vIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7ZWxlbWVudC5vdXRlckhUTUx9IGhhcyBub3QgYSB2YWxpZCBwYXJlbnQgJHtTRUxFQ1RPUl9JTk5FUl9FTEVNfWApXG4gICAgfVxuXG4gICAgLy8gU2V0IHVwIGluaXRpYWwgYXJpYSBhdHRyaWJ1dGVzXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXModGhpcy5fcGFyZW50LCB0aGlzLl9nZXRDaGlsZHJlbigpKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04sIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkgeyAvLyBTaG93cyB0aGlzIGVsZW0gYW5kIGRlYWN0aXZhdGUgdGhlIGFjdGl2ZSBzaWJsaW5nIGlmIGV4aXN0c1xuICAgIGNvbnN0IGlubmVyRWxlbSA9IHRoaXMuX2VsZW1lbnRcbiAgICBpZiAodGhpcy5fZWxlbUlzQWN0aXZlKGlubmVyRWxlbSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNlYXJjaCBmb3IgYWN0aXZlIHRhYiBvbiBzYW1lIHBhcmVudCB0byBkZWFjdGl2YXRlIGl0XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbSgpXG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBhY3RpdmUgP1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoYWN0aXZlLCBFVkVOVF9ISURFLCB7IHJlbGF0ZWRUYXJnZXQ6IGlubmVyRWxlbSB9KSA6XG4gICAgICBudWxsXG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcihpbm5lckVsZW0sIEVWRU5UX1NIT1csIHsgcmVsYXRlZFRhcmdldDogYWN0aXZlIH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgKGhpZGVFdmVudCAmJiBoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2RlYWN0aXZhdGUoYWN0aXZlLCBpbm5lckVsZW0pXG4gICAgdGhpcy5fYWN0aXZhdGUoaW5uZXJFbGVtLCBhY3RpdmUpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9hY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgdGhpcy5fYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSkgLy8gU2VhcmNoIGFuZCBhY3RpdmF0ZS9zaG93IHRoZSBwcm9wZXIgc2VjdGlvblxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpXG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCB0cnVlKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfU0hPV04sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSlcbiAgfVxuXG4gIF9kZWFjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgZWxlbWVudC5ibHVyKClcblxuICAgIHRoaXMuX2RlYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSkgLy8gU2VhcmNoIGFuZCBkZWFjdGl2YXRlIHRoZSBzaG93biBzZWN0aW9uIHRvb1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKVxuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgZmFsc2UpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9ISURERU4sIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW0gfSlcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoIShbQVJST1dfTEVGVF9LRVksIEFSUk9XX1JJR0hUX0tFWSwgQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWSwgSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKS8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKVxuICAgIGxldCBuZXh0QWN0aXZlRWxlbWVudFxuXG4gICAgaWYgKFtIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBjaGlsZHJlbltldmVudC5rZXkgPT09IEhPTUVfS0VZID8gMCA6IGNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpXG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGdldE5leHRBY3RpdmVFbGVtZW50KGNoaWxkcmVuLCBldmVudC50YXJnZXQsIGlzTmV4dCwgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KVxuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRDaGlsZHJlbigpIHsgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudClcbiAgfVxuXG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbFxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhwYXJlbnQsICdyb2xlJywgJ3RhYmxpc3QnKVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZClcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZClcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoY2hpbGQpXG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpXG5cbiAgICBpZiAob3V0ZXJFbGVtICE9PSBjaGlsZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMob3V0ZXJFbGVtLCAncm9sZScsICdwcmVzZW50YXRpb24nKVxuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKVxuICAgIH1cblxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKVxuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKVxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpXG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpXG5cbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAke2NoaWxkLmlkfWApXG4gICAgfVxuICB9XG5cbiAgX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIG9wZW4pIHtcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoZWxlbWVudClcbiAgICBpZiAoIW91dGVyRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfRFJPUERPV04pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0b2dnbGUgPSAoc2VsZWN0b3IsIGNsYXNzTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIG91dGVyRWxlbSlcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIG9wZW4pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX01FTlUsIENMQVNTX05BTUVfU0hPVylcbiAgICBvdXRlckVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgb3BlbilcbiAgfVxuXG4gIF9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIF9lbGVtSXNBY3RpdmUoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0FDVElWRSlcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIGlubmVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtbGluaylcbiAgX2dldElubmVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhTRUxFQ1RPUl9JTk5FUl9FTEVNKSA/IGVsZW0gOiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lOTkVSX0VMRU0sIGVsZW0pXG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBvdXRlciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWl0ZW0pXG4gIF9nZXRPdXRlckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsb3Nlc3QoU0VMRUNUT1JfT1VURVIpIHx8IGVsZW1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykuc2hvdygpXG59KVxuXG4vKipcbiAqIEluaXRpYWxpemUgb24gZm9jdXNcbiAqL1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUpKSB7XG4gICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudClcbiAgfVxufSlcbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYilcblxuZXhwb3J0IGRlZmF1bHQgVGFiXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIHJlZmxvdyB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RvYXN0J1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9hc3QnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuXG5jb25zdCBFVkVOVF9NT1VTRU9WRVIgPSBgbW91c2VvdmVyJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VPVVQgPSBgbW91c2VvdXQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9GT0NVU09VVCA9IGBmb2N1c291dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX0hJREUgPSAnaGlkZScgLy8gQGRlcHJlY2F0ZWQgLSBrZXB0IGhlcmUgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnXG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYXV0b2hpZGU6ICdib29sZWFuJyxcbiAgZGVsYXk6ICdudW1iZXInXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYXV0b2hpZGU6IHRydWUsXG4gIGRlbGF5OiA1MDAwXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pXG5cbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfU0hPV0lORylcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSkgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcsIENMQVNTX05BTUVfU0hPVylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG5cbiAgICBpZiAodGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBpc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX21heWJlU2NoZWR1bGVIaWRlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmF1dG9oaWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiB8fCB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheSlcbiAgfVxuXG4gIF9vbkludGVyYWN0aW9uKGV2ZW50LCBpc0ludGVyYWN0aW5nKSB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAgY2FzZSAnbW91c2VvdXQnOiB7XG4gICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOiB7XG4gICAgICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldFxuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICB9XG5cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpXG4gIH1cblxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKFRvYXN0KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdClcblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgaW5kZXgudW1kLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEFsZXJ0IGZyb20gJy4vc3JjL2FsZXJ0LmpzJ1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuL3NyYy9idXR0b24uanMnXG5pbXBvcnQgQ2Fyb3VzZWwgZnJvbSAnLi9zcmMvY2Fyb3VzZWwuanMnXG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi9zcmMvY29sbGFwc2UuanMnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9zcmMvZHJvcGRvd24uanMnXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9zcmMvbW9kYWwuanMnXG5pbXBvcnQgT2ZmY2FudmFzIGZyb20gJy4vc3JjL29mZmNhbnZhcy5qcydcbmltcG9ydCBQb3BvdmVyIGZyb20gJy4vc3JjL3BvcG92ZXIuanMnXG5pbXBvcnQgU2Nyb2xsU3B5IGZyb20gJy4vc3JjL3Njcm9sbHNweS5qcydcbmltcG9ydCBUYWIgZnJvbSAnLi9zcmMvdGFiLmpzJ1xuaW1wb3J0IFRvYXN0IGZyb20gJy4vc3JjL3RvYXN0LmpzJ1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnLi9zcmMvdG9vbHRpcC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBBbGVydCxcbiAgQnV0dG9uLFxuICBDYXJvdXNlbCxcbiAgQ29sbGFwc2UsXG4gIERyb3Bkb3duLFxuICBNb2RhbCxcbiAgT2ZmY2FudmFzLFxuICBQb3BvdmVyLFxuICBTY3JvbGxTcHksXG4gIFRhYixcbiAgVG9hc3QsXG4gIFRvb2x0aXBcbn1cbiIsICJpbXBvcnQgeyBBcHAsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZywgSXRlbVZpZXcsIFdvcmtzcGFjZUxlYWYsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyc7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzJztcblxuaW50ZXJmYWNlIFNjR3JhcGhWaWV3U2V0dGluZ3Mge1xuICAgIG15U2V0dGluZzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBTY0dyYXBoVmlld1NldHRpbmdzID0ge1xuICAgIG15U2V0dGluZzogJ2RlZmF1bHQnXG59XG5cbmNvbnN0IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUyA6IGFueSA9IHtcblx0c2NvcmVUaHJlc2hvbGQ6IDAuOCxcblx0bm9kZVNpemU6IDMsXG5cdGxpbmtUaGlja25lc3M6IDAuMyxcblx0cmVwZWxGb3JjZTogNDAwLFxuXHRsaW5rRm9yY2U6IDAuNCxcblx0bGlua0Rpc3RhbmNlOiA3MCxcblx0Y2VudGVyRm9yY2U6IDAuNDBcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBTbWFydFNlYXJjaDogYW55O1xuICAgIH1cbn1cblxuY2xhc3MgTXlJdGVtVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcblxuXHRjdXJyZW50Tm90ZUtleTogc3RyaW5nOyAvLyBEZWZpbmUgdGhlIGN1cnJlbnROb3RlS2V5IHByb3BlcnR5XG5cdGNlbnRyYWxOb3RlOiBhbnk7XG5cdGNlbnRyYWxOb2RlOiBhbnk7XG5cdGNvbm5lY3Rpb25UeXBlID0gJ2Jsb2NrJztcbiAgICBpc0hvdmVyaW5nOiBib29sZWFuOyAvLyBBZGQgYSBmbGFnIHRvIHRyYWNrIGhvdmVyIHN0YXRlXG5cdHJlbGV2YW5jZVNjb3JlVGhyZXNob2xkID0gMC44O1xuXHRzZXR0aW5nc0luc3RhbnRpYXRlZCA9IGZhbHNlO1xuXHRub2RlU2l6ZSA9IDM7XG5cdGxpbmtUaGlja25lc3MgPSAwLjM7XG5cdHJlcGVsRm9yY2UgPSA0MDA7XG5cdGxpbmtGb3JjZSA9IDAuNDtcblx0bGlua0Rpc3RhbmNlID0gNzA7XG5cdGNlbnRlckZvcmNlID0gMC40MDtcblx0dGV4dEZhZGVUaHJlc2hvbGQgPSAxLjE7XG5cdG1pblNjb3JlID0gMTtcblx0bWF4U2NvcmUgPSAwO1xuXHRtaW5Ob2RlU2l6ZSA9IDM7XG5cdG1heE5vZGVTaXplID0gNjtcblx0bWluTGlua1RoaWNrbmVzcyA9IDAuMztcblx0bWF4TGlua1RoaWNrbmVzcyA9IDQ7XG5cdG5vZGVTZWxlY3Rpb24gOiBhbnk7XG5cdGxpbmtTZWxlY3Rpb24gOiBhbnk7XG5cdGxpbmtMYWJlbFNlbGVjdGlvbiA6IGFueTtcblx0bGFiZWxTZWxlY3Rpb24gOiBhbnk7XG5cdHVwZGF0aW5nVmlzdWFsaXphdGlvbjogYm9vbGVhbjsgLy8gQWRkIHRoaXMgZmxhZ1xuXHRpc0N0cmxQcmVzc2VkID0gZmFsc2U7XG5cdGlzQWx0UHJlc3NlZCA9IGZhbHNlO1xuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0aXNDaGFuZ2luZ0Nvbm5lY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICBzZWxlY3Rpb25Cb3g6IGFueTtcblx0dmFsaWRhdGVkTGlua3MgOiBhbnk7XG5cdG1heExhYmVsQ2hhcmFjdGVycyA9IDE4OyAvLyBBZGQgbWF4IGxhYmVsIGNoYXJhY3RlcnMgcHJvcGVydHlcblx0bGlua0xhYmVsU2l6ZSA9IDc7IC8vIEFkZCBsaW5rIGxhYmVsIHNpemUgcHJvcGVydHlcblx0bm9kZUxhYmVsU2l6ZSA9IDc7IC8vIEFkZCBub2RlIGxhYmVsIHNpemUgcHJvcGVydHlcblx0XG5cdC8vIHNlbGVjdGlvbiBib3ggb3JpZ2luIHBvaW50XG5cdHN0YXJ0WCA9IDA7XG5cdHN0YXJ0WSA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmKSB7XG4gICAgICAgIHN1cGVyKGxlYWYpO1xuXHRcdHRoaXMuY3VycmVudE5vdGVLZXkgPSAnJztcblx0XHR0aGlzLmlzSG92ZXJpbmcgPSBmYWxzZTsgXG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiU21hcnQgR3JhcGggVmlld1wiO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlNtYXJ0IEdyYXBoIFZpZXdcIjtcbiAgICB9XG5cbiAgICBnZXRJY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcImdpdC1mb3JrXCI7XG4gICAgfVxuXG5cdC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSBub2RlIGFwcGVhcmFuY2UgYmFzZWQgb24gc2VsZWN0aW9uIGFuZCBoaWdobGlnaHQgc3RhdGVcblx0dXBkYXRlTm9kZUFwcGVhcmFuY2UoKSB7XG5cdFx0dGhpcy5ub2RlU2VsZWN0aW9uLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG5cdFx0XHQuYXR0cignZmlsbCcsIChkOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGQuaWQgPT09IHRoaXMuY2VudHJhbE5vZGUuaWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyM3Yzg1OTQnO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGQuaGlnaGxpZ2h0ZWQgJiYgIWQuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyNkNDZlYmUnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBkLmdyb3VwID09PSAnbm90ZScgPyAnIzdjODU5NCcgOiAnIzkyNmVjOSc7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuYXR0cignc3Ryb2tlJywgKGQ6IGFueSkgPT4gZC5zZWxlY3RlZCA/ICdibGFuY2hlZGFsbW9uZCcgOiAndHJhbnNwYXJlbnQnKVxuXHRcdFx0LmF0dHIoJ3N0cm9rZS13aWR0aCcsIChkOiBhbnkpID0+IHsgKGQuc2VsZWN0ZWQgJiYgIXRoaXMuaXNIb3ZlcmluZykgPyAxLjU6IDAuMyB9KVxuXHRcdFx0LmF0dHIoJ29wYWNpdHknLCAoZDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChkLmlkID09PSB0aGlzLmNlbnRyYWxOb2RlLmlkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZC5oaWdobGlnaHRlZCkge1xuXHRcdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaXNIb3ZlcmluZykge1xuXHRcdFx0XHRcdHJldHVybiAwLjE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cdFxuICAgIC8vIEZ1bmN0aW9uIHRvIHRvZ2dsZSBub2RlIHNlbGVjdGlvblxuICAgIHRvZ2dsZU5vZGVTZWxlY3Rpb24obm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZVNlbGVjdGlvbi5kYXRhKCkuZmluZCgoZDogYW55KSA9PiBkLmlkID09PSBub2RlSWQpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9ICFub2RlLnNlbGVjdGVkO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cdCAvLyBDbGVhciBhbGwgc2VsZWN0aW9uc1xuXHQgY2xlYXJTZWxlY3Rpb25zKCkge1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uZWFjaCgoZDogYW55KSA9PiBkLnNlbGVjdGVkID0gZmFsc2UpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vZGVBcHBlYXJhbmNlKCk7XG4gICAgfVxuXG5cdGhpZ2hsaWdodE5vZGUobm9kZTogYW55KSB7XG5cdFx0dGhpcy5ub2RlU2VsZWN0aW9uLmVhY2goKGQ6IGFueSkgPT4ge1xuXHRcdFx0aWYgKGQuaWQgIT09IHRoaXMuY2VudHJhbE5vZGUuaWQpIHtcblx0XHRcdFx0ZC5oaWdobGlnaHRlZCA9IChkLmlkID09PSBub2RlLmlkIHx8IHRoaXMudmFsaWRhdGVkTGlua3Muc29tZSgobGluazogYW55KSA9PlxuXHRcdFx0XHRcdChsaW5rLnNvdXJjZS5pZCA9PT0gbm9kZS5pZCAmJiBsaW5rLnRhcmdldC5pZCA9PT0gZC5pZCkgfHxcblx0XHRcdFx0XHQobGluay50YXJnZXQuaWQgPT09IG5vZGUuaWQgJiYgbGluay5zb3VyY2UuaWQgPT09IGQuaWQpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuXHRcblx0XHR0aGlzLmxpbmtTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMClcblx0XHRcdC5hdHRyKCdvcGFjaXR5JywgKGQ6IGFueSkgPT4gKGQuc291cmNlLmlkID09PSBub2RlLmlkIHx8IGQudGFyZ2V0LmlkID09PSBub2RlLmlkKSA/IDEgOiAwLjEpO1xuXHRcblx0XHR0aGlzLmxhYmVsU2VsZWN0aW9uLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG5cdFx0XHQuYXR0cignb3BhY2l0eScsIChkOiBhbnkpID0+XG5cdFx0XHRcdChkLmlkID09PSBub2RlLmlkIHx8IHRoaXMudmFsaWRhdGVkTGlua3Muc29tZSgobGluazogYW55KSA9PlxuXHRcdFx0XHRcdChsaW5rLnNvdXJjZS5pZCA9PT0gbm9kZS5pZCAmJiBsaW5rLnRhcmdldC5pZCA9PT0gZC5pZCkpKSA/IDEgOiAwLjEpXG5cdFx0XHQudGV4dCgoZDogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdkOiAnLCBkLmlkID09PSBub2RlLmlkKTtcblx0XHRcdFx0cmV0dXJuIGQuaWQgPT09IG5vZGUuaWQgPyB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSwgZmFsc2UpIDogdGhpcy5mb3JtYXRMYWJlbChkLm5hbWUsIHRydWUpO1xuXHRcdFx0fSk7IC8vIFNob3cgZnVsbCBsYWJlbCBvbmx5IGZvciB0aGUgaGlnaGxpZ2h0ZWQgbm9kZVx0XG5cdFxuXHRcdHRoaXMubGlua0xhYmVsU2VsZWN0aW9uLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApXG5cdFx0XHQuYXR0cignb3BhY2l0eScsIChkOiBhbnkpID0+IChkLnNvdXJjZS5pZCA9PT0gbm9kZS5pZCB8fCBkLnRhcmdldC5pZCA9PT0gbm9kZS5pZCkgPyAxIDogMCk7XG5cdH1cblx0XG5cdFxuXHRcblx0dW5oaWdobGlnaHROb2RlKCkge1xuXHRcdHRoaXMubm9kZVNlbGVjdGlvbi5lYWNoKChkOiBhbnkpID0+IHtcblx0XHRcdGlmIChkLmlkICE9PSB0aGlzLmNlbnRyYWxOb2RlLmlkKSB7XG4gICAgICAgICAgICBcdGQuaGlnaGxpZ2h0ZWQgPSBmYWxzZTtcbiAgICAgICAgXHR9XG5cdFx0fSk7XG5cdFx0dGhpcy51cGRhdGVOb2RlQXBwZWFyYW5jZSgpO1xuXHRcblx0XHR0aGlzLmxpbmtTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuYXR0cignb3BhY2l0eScsIDEpO1xuXHRcdHRoaXMubGFiZWxTZWxlY3Rpb24udHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuYXR0cignb3BhY2l0eScsIDEpXG4gICAgICAgIC50ZXh0KChkOiBhbnkpID0+IHRoaXMuZm9ybWF0TGFiZWwoZC5uYW1lLCB0cnVlKSk7IC8vIFJldmVydCB0byB0cnVuY2F0ZWQgbGFiZWxcblx0XHR0aGlzLmxpbmtMYWJlbFNlbGVjdGlvbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5hdHRyKCdvcGFjaXR5JywgMCk7XG5cdFx0XG5cdH1cblxuXHQvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdHJ1bmNhdGUgbGFiZWxzLCBleHRyYWN0IGZpbGVuYW1lcyBvciBwYXJ0cyBhZnRlciBoYXNodGFncywgYW5kIHJlbW92ZSBicmFja2V0c1xuXHRmb3JtYXRMYWJlbChwYXRoOiBzdHJpbmcsIHRydW5jYXRlOiBib29sZWFuID0gdHJ1ZSkge1xuXHRcdGlmICh0cnVuY2F0ZSkge1xuXHRcdFx0aWYgKHBhdGguaW5jbHVkZXMoJyMnKSkge1xuXHRcdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJyMnKTtcblx0XHRcdFx0cGF0aCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOyAvLyBUYWtlIHRoZSBsYXN0IHBhcnQgYWZ0ZXIgc3BsaXR0aW5nIGJ5ICcjJ1xuXHRcdFx0XHRjb25zdCBjbGVhbmVkUGF0aCA9IHBhdGgucmVwbGFjZSgvW1xcW1xcXV0vZywgJycpOyAvLyBSZW1vdmUgYnJhY2tldHNcblx0XHRcdFx0cmV0dXJuIGNsZWFuZWRQYXRoLmxlbmd0aCA+IHRoaXMubWF4TGFiZWxDaGFyYWN0ZXJzID8gY2xlYW5lZFBhdGguc2xpY2UoMCwgdGhpcy5tYXhMYWJlbENoYXJhY3RlcnMpICsgJy4uLicgOiBjbGVhbmVkUGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpbGVuYW1lID0gcGF0aC5zcGxpdCgnLycpLnBvcCgpO1xuXHRcdFx0XHRpZiAoZmlsZW5hbWUpIHtcblx0XHRcdFx0XHRjb25zdCBjbGVhbmVkRmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9bXFxbXFxdXS9nLCAnJyk7IC8vIFJlbW92ZSBicmFja2V0c1xuXHRcdFx0XHRcdHJldHVybiBjbGVhbmVkRmlsZW5hbWUubGVuZ3RoID4gdGhpcy5tYXhMYWJlbENoYXJhY3RlcnMgPyBjbGVhbmVkRmlsZW5hbWUuc2xpY2UoMCwgdGhpcy5tYXhMYWJlbENoYXJhY3RlcnMpICsgJy4uLicgOiBjbGVhbmVkRmlsZW5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcjJyk7XG5cdFx0XHRcdHBhdGggPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsgLy8gVGFrZSB0aGUgbGFzdCBwYXJ0IGFmdGVyIHNwbGl0dGluZyBieSAnIydcblx0XHRcdFx0Y29uc3QgY2xlYW5lZFBhdGggPSBwYXRoLnJlcGxhY2UoL1tcXFtcXF1dL2csICcnKTsgLy8gUmVtb3ZlIGJyYWNcblx0XHRcdHJldHVybiBjbGVhbmVkUGF0aDsgLy8gUmVtb3ZlIGJyYWNrZXRzIHdpdGhvdXQgdHJ1bmNhdGluZ1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cdFxuXHRcblxuXHRhc3luYyBvbk9wZW4oKSB7XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcblx0XHRcdC8vIFRvIGJlIHVzZWQgZm9yIGZ1bmN0aW9ucyB0aGF0IGRvbnQgaGF2ZSB0aGlzIGluIHRoZSBzY29wZVxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xuXHRcdFxuXHRcdFx0Y29uc3Qgc21hcnROb3RlcyAgPSB3aW5kb3cuU21hcnRTZWFyY2gubWFpbi5lbnYuc21hcnRfbm90ZXMuaXRlbXM7XG5cdFx0XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMoc21hcnROb3RlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiTm8gc21hcnQgbm90ZXMgZm91bmQuXCIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XG5cdFx0XHRjb25zb2xlLmxvZygnU21hcnROb3RlczonLCBzbWFydE5vdGVzKTtcblx0XHRcblx0XHRcdGxldCBub2RlczogYW55W10gPSBbXTtcblx0XHRcdGxldCBsaW5rczogYW55W10gPSBbXTtcblx0XHRcdGxldCBjb25uZWN0aW9uczogYW55W10gPSBbXTtcblx0XHRcdFxuXHRcdFxuXHRcdFx0ZnVuY3Rpb24gdmFsaWRhdGVHcmFwaERhdGEobm9kZXM6IGFueVtdLCBsaW5rczogYW55W10pOiBib29sZWFuIHtcblx0XHRcdFx0Y29uc3Qgbm9kZUlkcyA9IG5ldyBTZXQobm9kZXMubWFwKG5vZGUgPT4gbm9kZS5pZCkpO1xuXHRcdFx0XHRsZXQgaXNWYWxpZCA9IHRydWU7XG5cdFx0XG5cdFx0XHRcdGxpbmtzLmZvckVhY2goKGxpbmssIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFub2RlSWRzLmhhcyhsaW5rLnNvdXJjZSkpIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYExpbmsgYXQgaW5kZXggJHtpbmRleH0gaGFzIGFuIGludmFsaWQgc291cmNlOiAke2xpbmsuc291cmNlfWApO1xuXHRcdFx0XHRcdFx0aXNWYWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIW5vZGVJZHMuaGFzKGxpbmsudGFyZ2V0KSkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgTGluayBhdCBpbmRleCAke2luZGV4fSBoYXMgYW4gaW52YWxpZCB0YXJnZXQ6ICR7bGluay50YXJnZXR9YCk7XG5cdFx0XHRcdFx0XHRpc1ZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcblx0XHRcdFx0bm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRpZiAoIW5vZGUuaGFzT3duUHJvcGVydHkoJ2lkJykgfHwgIW5vZGUuaGFzT3duUHJvcGVydHkoJ25hbWUnKSB8fCAhbm9kZS5oYXNPd25Qcm9wZXJ0eSgnZ3JvdXAnKSkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgTm9kZSBhdCBpbmRleCAke2luZGV4fSBpcyBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXM6ICR7SlNPTi5zdHJpbmdpZnkobm9kZSl9YCk7XG5cdFx0XHRcdFx0XHRpc1ZhbGlkID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcblx0XHRcdFx0cmV0dXJuIGlzVmFsaWQ7XG5cdFx0XHR9XG5cdFx0XG5cdFx0XHRjb25zdCB1cGRhdGVDb25uZWN0aW9ucyA9ICgpID0+IHtcblxuXHRcdFx0XHQvLyBSZXNldCBWYXJpYWJsZXNcblx0XHRcdFx0bm9kZXMgPSBbXTtcblx0XHRcdFx0bGlua3MgPSBbXTtcblx0XHRcdFx0Y29ubmVjdGlvbnMgPSBbXTtcblx0XHRcdFx0dGhpcy5taW5TY29yZSA9IDE7XG5cdFx0XHRcdHRoaXMubWF4U2NvcmUgPSAwO1xuXHRcdFxuXHRcdFx0XHQvLyBEb250IGJvdGhlciBleGVjdXRpbmcgaWYgd2UgZG9uJ3QgaGF2ZSBhIG5vdGUgdG8gZmluZCBjb25uZWN0aW9ucyBmb3Jcblx0XHRcdFx0aWYgKCF0aGlzLmN1cnJlbnROb3RlS2V5KSByZXR1cm47XG5cdFx0XG5cdFx0XHRcdHRoaXMuY2VudHJhbE5vdGUgPSBzbWFydE5vdGVzW3RoaXMuY3VycmVudE5vdGVLZXldO1xuXHRcdFx0XHRjb25zdCBub3RlQ29ubmVjdGlvbnMgPSB0aGlzLmNlbnRyYWxOb3RlLmZpbmRfY29ubmVjdGlvbnMoKS5maWx0ZXIoXG5cdFx0XHRcdFx0KGNvbm5lY3Rpb246IGFueSkgPT4gY29ubmVjdGlvbi5zY29yZSA+PSB0aGlzLnJlbGV2YW5jZVNjb3JlVGhyZXNob2xkKTsgXG5cblx0XHRcdFx0Y29uc29sZS5sb2coJ2NlbnRyYWwgbm90ZTogJywgdGhpcy5jZW50cmFsTm90ZSk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdub3RlIGNvbm5lY3Rpb25zOiAnLCB0aGlzLmNlbnRyYWxOb3RlLmZpbmRfY29ubmVjdGlvbnMoKSk7XG5cblx0XHRcdFx0Ly8gQWRkIHRoZSBub3RlIG5vZGUgaXRzZWxmXG5cdFx0XHRcdGlmICh0aGlzLmNlbnRyYWxOb3RlLmtleSAmJiB0aGlzLmNlbnRyYWxOb3RlLmtleS50cmltKCkgIT09ICcnICYmICFub2Rlcy5zb21lKG5vZGUgPT4gbm9kZS5pZCA9PT0gdGhpcy5jZW50cmFsTm90ZS5rZXkpKSB7XG5cdFx0XHRcdFx0bm9kZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRpZDogdGhpcy5jZW50cmFsTm90ZS5rZXksXG5cdFx0XHRcdFx0XHRuYW1lOiB0aGlzLmNlbnRyYWxOb3RlLmtleSxcblx0XHRcdFx0XHRcdGdyb3VwOiAnbm90ZScsXG5cdFx0XHRcdFx0XHR4OiBNYXRoLnJhbmRvbSgpICogMTAwMCxcblx0XHRcdFx0XHRcdHk6IE1hdGgucmFuZG9tKCkgKiAxMDAwLFxuXHRcdFx0XHRcdFx0Zng6IG51bGwsXG5cdFx0XHRcdFx0XHRmeTogbnVsbCxcblx0XHRcdFx0XHRcdHNlbGVjdGVkOiBmYWxzZSwgLy8gQWRkIHNlbGVjdGVkIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRoaWdobGlnaHRlZCA6IGZhbHNlXG5cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIEFzc2lnbiBjZW50cmFsIG5vZGUgLSAxc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkgc28gZmFyXG5cdFx0XHRcdFx0dGhpcy5jZW50cmFsTm9kZSA9IG5vZGVzWzBdOyBcblxuXHRcdFx0XHR9XG5cdFx0XG5cdFx0XHRcdC8vIEZpbHRlciBjb25uZWN0aW9ucyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgY29ubmVjdGlvbiB0eXBlXG5cdFx0XHRcdGNvbnN0IGZpbHRlcmVkQ29ubmVjdGlvbnMgPSBub3RlQ29ubmVjdGlvbnMuZmlsdGVyKChjb25uZWN0aW9uOiBhbnkpID0+IGNvbm5lY3Rpb24uX19wcm90b19fLmNvbnN0cnVjdG9yLm5hbWUgPT09ICh0aGlzLmNvbm5lY3Rpb25UeXBlID09PSAnYmxvY2snID8gJ1NtYXJ0QmxvY2snIDogJ1NtYXJ0Tm90ZScpKTtcdFx0XG5cdFx0XHRcdC8vIEFkZGluZyBjb25uZWN0aW9ucyBmcm9tIGJsb2NrQ29ubmVjdGlvbnNcblxuXHRcdFx0XHRmaWx0ZXJlZENvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmIChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uZGF0YSAmJiBjb25uZWN0aW9uLmRhdGEua2V5ICYmIGNvbm5lY3Rpb24uZGF0YS5rZXkudHJpbSgpICE9PSAnJykge1xuXHRcdFx0XHRcdFx0Y29uc3QgY29ubmVjdGlvbklkID0gY29ubmVjdGlvbi5kYXRhLmtleTtcblx0XHRcblx0XHRcdFx0XHRcdGlmICghbm9kZXMuc29tZShub2RlID0+IG5vZGUuaWQgPT09IGNvbm5lY3Rpb25JZCkpIHtcblx0XHRcdFx0XHRcdFx0bm9kZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0aWQ6IGNvbm5lY3Rpb25JZCxcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBjb25uZWN0aW9uSWQsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXA6ICdibG9jaycsXG5cdFx0XHRcdFx0XHRcdFx0eDogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG5cdFx0XHRcdFx0XHRcdFx0eTogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG5cdFx0XHRcdFx0XHRcdFx0Zng6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0Znk6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IGZhbHNlLCAvLyBBZGQgc2VsZWN0ZWQgcHJvcGVydHlcblx0XHRcdFx0XHRcdFx0XHRoaWdobGlnaHRlZCA6IGZhbHNlXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFxuXHRcdFx0XHRcdFx0bGlua3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHNvdXJjZTogdGhpcy5jZW50cmFsTm90ZS5rZXksXG5cdFx0XHRcdFx0XHRcdHRhcmdldDogY29ubmVjdGlvbklkLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogY29ubmVjdGlvbi5zY29yZSB8fCAwICAvLyBFbnN1cmUgc2NvcmUgaXMgZGVmaW5lZFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XG5cdFx0XHRcdFx0XHRjb25uZWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c291cmNlOiB0aGlzLmNlbnRyYWxOb3RlLmtleSxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiBjb25uZWN0aW9uSWQsXG5cdFx0XHRcdFx0XHRcdHNjb3JlOiBjb25uZWN0aW9uLnNjb3JlIHx8IDAgIC8vIEVuc3VyZSBzY29yZSBpcyBkZWZpbmVkXG5cdFx0XHRcdFx0XHR9KTtcblx0XG5cdFx0XHRcdFx0XHRpZigoY29ubmVjdGlvbiAmJiBjb25uZWN0aW9uLnNjb3JlKSA+IHRoaXMubWF4U2NvcmUpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5tYXhTY29yZSA9IGNvbm5lY3Rpb24uc2NvcmU7XG5cdFx0XHRcdFx0XHR9XG5cdFxuXHRcdFx0XHRcdFx0aWYoKGNvbm5lY3Rpb24gJiYgY29ubmVjdGlvbi5zY29yZSkgPCB0aGlzLm1pblNjb3JlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMubWluU2NvcmUgPSBjb25uZWN0aW9uLnNjb3JlO1xuXHRcdFx0XHRcdFx0fVxuXHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKGBTa2lwcGluZyBpbnZhbGlkIGNvbm5lY3Rpb24gYXQgaW5kZXggJHtpbmRleH06YCwgY29ubmVjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcblx0XHRcdFx0Ly8gVE9ETzo6IFJlbW92ZSBldmVudHVhbGx5LCBidXQga2VlcCBmb3Igbm93IGp1c3QgaW4gY2FzZSB3ZSB3YW50IHRoaXMgZm9yIHNvbWUgcmVhc29uXG5cdFx0XHRcdC8vIEFkZGluZyBTbWFydCBCbG9ja3MgZnJvbSB0aGUgbm90ZSBpdHNlbGZcblx0XHRcdFx0Ly8gY29uc3Qgc21hcnRCbG9ja3MgPSBub3RlLmJsb2Nrcztcblx0XHRcdFx0Ly8gc21hcnRCbG9ja3MuZm9yRWFjaCgoYmxvY2s6IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBcdGlmIChibG9jay5rZXkgJiYgYmxvY2sua2V5LnRyaW0oKSAhPT0gJycgJiYgIW5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBibG9jay5rZXkpKSB7XG5cdFx0XHRcdC8vIFx0XHRub2Rlcy5wdXNoKHtcblx0XHRcdFx0Ly8gXHRcdFx0aWQ6IGJsb2NrLmtleSxcblx0XHRcdFx0Ly8gXHRcdFx0bmFtZTogYmxvY2sua2V5LFxuXHRcdFx0XHQvLyBcdFx0XHRncm91cDogJ2Jsb2NrJyxcblx0XHRcdFx0Ly8gXHRcdFx0eDogTWF0aC5yYW5kb20oKSAqIDEwMDAsXG5cdFx0XHRcdC8vIFx0XHRcdHk6IE1hdGgucmFuZG9tKCkgKiAxMDAwLFxuXHRcdFx0XHQvLyBcdFx0XHRmeDogbnVsbCxcblx0XHRcdFx0Ly8gXHRcdFx0Znk6IG51bGxcblx0XHRcdFx0Ly8gXHRcdH0pO1xuXHRcdFx0XHQvLyBcdH1cblx0XHRcblx0XHRcdFx0Ly8gXHRsaW5rcy5wdXNoKHtcblx0XHRcdFx0Ly8gXHRcdHNvdXJjZTogbm90ZS5rZXksXG5cdFx0XHRcdC8vIFx0XHR0YXJnZXQ6IGJsb2NrLmtleSxcblx0XHRcdFx0Ly8gXHRcdHZhbHVlOiAwLjk1ICAvLyBFbnN1cmUgc2NvcmUgaXMgZGVmaW5lZFxuXHRcdFx0XHQvLyBcdH0pO1xuXHRcdFxuXHRcdFx0XHQvLyBcdGNvbm5lY3Rpb25zLnB1c2goe1xuXHRcdFx0XHQvLyBcdFx0c291cmNlOiBub3RlLmtleSxcblx0XHRcdFx0Ly8gXHRcdHRhcmdldDogYmxvY2sua2V5LFxuXHRcdFx0XHQvLyBcdFx0c2NvcmU6IDAuOTUgIC8vIEVuc3VyZSBzY29yZSBpcyBkZWZpbmVkXG5cdFx0XHRcdC8vIFx0fSk7XG5cdFxuXHRcdFx0XHQvLyBcdGlmKChjb25uZWN0aW9uICYmIGNvbm5lY3Rpb24uc2NvcmUpID4gdGhpcy5tYXhTY29yZSkge1xuXHRcdFx0XHQvLyBcdFx0dGhpcy5tYXhTY29yZSA9IGNvbm5lY3Rpb24uc2NvcmU7XG5cdFx0XHRcdC8vIFx0fVxuXHRcblx0XHRcdFx0Ly8gfSk7XG5cdFx0XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdOb2RlcyBhZnRlciB1cGRhdGVDb25uZWN0aW9uczonLCBub2Rlcyk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdMaW5rcyBhZnRlciB1cGRhdGVDb25uZWN0aW9uczonLCBsaW5rcyk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdDb25uZWN0aW9ucyBhZnRlciB1cGRhdGVDb25uZWN0aW9uczonLCBjb25uZWN0aW9ucyk7XG5cdFx0XG5cdFx0XHRcdGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUdyYXBoRGF0YShub2RlcywgbGlua3MpO1xuXHRcdFx0XHRpZiAoIWlzVmFsaWQpIHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdHcmFwaCBkYXRhIHZhbGlkYXRpb24gZmFpbGVkLicpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdHcmFwaCBkYXRhIHZhbGlkYXRpb24gcGFzc2VkLicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFxuXHRcdFx0Ly8gRGVmaW5lIHRoZSBkaW1lbnNpb25zIGZvciB0aGUgU1ZHXG5cdFx0XHRjb25zdCB3aWR0aCA9IHRoaXMuY29udGVudEVsLmNsaWVudFdpZHRoO1xuXHRcdFx0Y29uc3QgaGVpZ2h0ID0gdGhpcy5jb250ZW50RWwuY2xpZW50SGVpZ2h0O1xuXHRcdFxuXHRcdFx0Y29uc3Qgc3ZnID0gZDMuc2VsZWN0KHRoaXMuY29udGVudEVsKVxuXHRcdFx0XHQuYXBwZW5kKCdzdmcnKVxuXHRcdFx0XHQuYXR0cignd2lkdGgnLCAnMTAwJScpXG5cdFx0XHRcdC5hdHRyKCdoZWlnaHQnLCAnOTglJylcblx0XHRcdFx0LmF0dHIoJ3ZpZXdCb3gnLCBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWApXG5cdFx0XHRcdC5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3hNaWRZTWlkIG1lZXQnKVxuXHRcdFx0XHQuY2FsbChkMy56b29tKClcblx0XHRcdFx0XHQuc2NhbGVFeHRlbnQoWzAuMSwgMTBdKVxuXHRcdFx0XHRcdC5vbignem9vbScsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0c3ZnR3JvdXAuYXR0cigndHJhbnNmb3JtJywgZXZlbnQudHJhbnNmb3JtKTtcblx0XHRcdFx0XHRcdHVwZGF0ZUxhYmVsT3BhY2l0eShldmVudC50cmFuc2Zvcm0uayk7XG5cdFx0XHRcdFx0fSkpO1xuXHRcdFx0XHRcblx0XHRcdGNvbnN0IHN2Z0dyb3VwID0gc3ZnLmFwcGVuZCgnZycpO1xuXHRcdFx0XG5cdFx0XHRjb25zdCBzdGFydEJveFNlbGVjdGlvbiA9IChldmVudDogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5pc0N0cmxQcmVzc2VkKSByZXR1cm47XG5cdFx0XHRcblx0XHRcdFx0dGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgW3gsIHldID0gZDMucG9pbnRlcihldmVudCk7XG5cdFx0XHRcblx0XHRcdFx0Y29uc3QgdHJhbnNmb3JtID0gZDMuem9vbVRyYW5zZm9ybShzdmcubm9kZSgpIGFzIEVsZW1lbnQpO1xuXHRcdFx0XG5cdFx0XHRcdHRoaXMuc2VsZWN0aW9uQm94ID0gc3ZnLmFwcGVuZCgncmVjdCcpXG5cdFx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ3NlbGVjdGlvbi1ib3gnKVxuXHRcdFx0XHRcdC5hdHRyKCd4JywgeClcblx0XHRcdFx0XHQuYXR0cigneScsIHkpXG5cdFx0XHRcdFx0LmF0dHIoJ3dpZHRoJywgMClcblx0XHRcdFx0XHQuYXR0cignaGVpZ2h0JywgMClcblx0XHRcdFx0XHQuYXR0cignc3Ryb2tlJywgJyMwMGYnKVxuXHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuXHRcdFx0XHRcdC5hdHRyKCdmaWxsJywgJ3JnYmEoMCwgMCwgMjU1LCAwLjMpJyk7IC8vIFNlbWktdHJhbnNwYXJlbnQgZmlsbFxuXHRcdFx0XG5cdFx0XHRcdC8vIFN0b3JlIHRoZSBpbml0aWFsIGNsaWNrIHBvaW50IGFkanVzdGVkIGJ5IHpvb20gYW5kIHBhblxuXHRcdFx0XHR0aGlzLnN0YXJ0WCA9IHg7XG5cdFx0XHRcdHRoaXMuc3RhcnRZID0geTtcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdGNvbnN0IHVwZGF0ZUJveFNlbGVjdGlvbiA9IChldmVudDogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XG5cdFx0XHRcblx0XHRcdFx0Y29uc3QgW3gsIHldID0gZDMucG9pbnRlcihldmVudCk7XG5cdFx0XHRcblx0XHRcdFx0Y29uc3QgdHJhbnNmb3JtID0gZDMuem9vbVRyYW5zZm9ybShzdmcubm9kZSgpIGFzIEVsZW1lbnQpO1xuXHRcdFx0XG5cdFx0XHRcdGNvbnN0IG5ld1dpZHRoID0geCAtIHRoaXMuc3RhcnRYO1xuXHRcdFx0XHRjb25zdCBuZXdIZWlnaHQgPSB5IC0gdGhpcy5zdGFydFk7XG5cdFx0XHRcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25Cb3hcblx0XHRcdFx0XHQuYXR0cignd2lkdGgnLCBNYXRoLmFicyhuZXdXaWR0aCkpXG5cdFx0XHRcdFx0LmF0dHIoJ2hlaWdodCcsIE1hdGguYWJzKG5ld0hlaWdodCkpXG5cdFx0XHRcdFx0LmF0dHIoJ3gnLCBNYXRoLm1pbih4LCB0aGlzLnN0YXJ0WCkpXG5cdFx0XHRcdFx0LmF0dHIoJ3knLCBNYXRoLm1pbih5LCB0aGlzLnN0YXJ0WSkpO1xuXHRcdFx0XG5cdFx0XHRcdGNvbnN0IGVuZFggPSB0aGlzLnN0YXJ0WCArIG5ld1dpZHRoO1xuXHRcdFx0XHRjb25zdCBlbmRZID0gdGhpcy5zdGFydFkgKyBuZXdIZWlnaHQ7XG5cdFx0XHRcblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjb29yZGluYXRlcyBhY2NvdW50IGZvciBkcmFnIGRpcmVjdGlvblxuXHRcdFx0XHRjb25zdCB0cmFuc2Zvcm1lZFN0YXJ0WCA9IE1hdGgubWluKHRoaXMuc3RhcnRYLCBlbmRYKTtcblx0XHRcdFx0Y29uc3QgdHJhbnNmb3JtZWRTdGFydFkgPSBNYXRoLm1pbih0aGlzLnN0YXJ0WSwgZW5kWSk7XG5cdFx0XHRcdGNvbnN0IHRyYW5zZm9ybWVkRW5kWCA9IE1hdGgubWF4KHRoaXMuc3RhcnRYLCBlbmRYKTtcblx0XHRcdFx0Y29uc3QgdHJhbnNmb3JtZWRFbmRZID0gTWF0aC5tYXgodGhpcy5zdGFydFksIGVuZFkpO1xuXHRcdFx0XG5cdFx0XHRcdC8vIEFkanVzdCB0aGUgY29vcmRpbmF0ZXMgZm9yIHpvb20gYW5kIHBhblxuXHRcdFx0XHRjb25zdCB6b29tZWRTdGFydFggPSAodHJhbnNmb3JtZWRTdGFydFggLSB0cmFuc2Zvcm0ueCkgLyB0cmFuc2Zvcm0uaztcblx0XHRcdFx0Y29uc3Qgem9vbWVkU3RhcnRZID0gKHRyYW5zZm9ybWVkU3RhcnRZIC0gdHJhbnNmb3JtLnkpIC8gdHJhbnNmb3JtLms7XG5cdFx0XHRcdGNvbnN0IHpvb21lZEVuZFggPSAodHJhbnNmb3JtZWRFbmRYIC0gdHJhbnNmb3JtLngpIC8gdHJhbnNmb3JtLms7XG5cdFx0XHRcdGNvbnN0IHpvb21lZEVuZFkgPSAodHJhbnNmb3JtZWRFbmRZIC0gdHJhbnNmb3JtLnkpIC8gdHJhbnNmb3JtLms7XG5cdFx0XHRcblx0XHRcdFx0dGhpcy5ub2RlU2VsZWN0aW9uLmVhY2goKGQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG5vZGVYID0gZC54O1xuXHRcdFx0XHRcdGNvbnN0IG5vZGVZID0gZC55O1xuXHRcdFx0XHRcdGlmIChub2RlWCA+PSB6b29tZWRTdGFydFggJiYgbm9kZVggPD0gem9vbWVkRW5kWCAmJiBub2RlWSA+PSB6b29tZWRTdGFydFkgJiYgbm9kZVkgPD0gem9vbWVkRW5kWSkge1xuXHRcdFx0XHRcdFx0ZC5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGQuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0XHRcdHRoaXMudXBkYXRlTm9kZUFwcGVhcmFuY2UoKTtcblx0XHRcdH07XG5cdFx0XHRcblx0XHRcdGNvbnN0IGVuZEJveFNlbGVjdGlvbiA9ICgpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblx0XHRcdFx0dGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG5cdFx0XHRcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25Cb3gucmVtb3ZlKCk7XG5cdFx0XHR9O1xuXHRcdFx0XG5cdFx0XHRcblx0XHRcdC8vIEF0dGFjaCBtb3VzZSBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIFNWR1xuXHRcdFx0c3ZnLm9uKCdtb3VzZWRvd24nLCAoZXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHR0aGlzLmNsZWFyU2VsZWN0aW9ucygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YXJ0Qm94U2VsZWN0aW9uKGV2ZW50KTtcblx0XHRcdH0pLm9uKCdtb3VzZW1vdmUnLCB1cGRhdGVCb3hTZWxlY3Rpb24pXG5cdFx0XHQub24oJ21vdXNldXAnLCBlbmRCb3hTZWxlY3Rpb24pXG5cdFx0XHQub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdFx0aWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmICFldmVudC5jdHJsS2V5KSB7XG5cdFx0XHRcdFx0dGhhdC5jbGVhclNlbGVjdGlvbnMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRcdFx0XG5cblx0XHRcdC8vIExpc3RlbiBmb3IgQWx0L09wdGlvbiBrZXkgcHJlc3MgZm9yIGluZGl2aWR1YWwgbm9kZSBzZWxlY3Rpb25cblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0FsdCcgfHwgZXZlbnQua2V5ID09PSAnQWx0R3JhcGgnKSB7XG5cdFx0XHRcdFx0dGhpcy5pc0FsdFByZXNzZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0FsdCcgfHwgZXZlbnQua2V5ID09PSAnQWx0R3JhcGgnKSB7XG5cdFx0XHRcdFx0dGhpcy5pc0FsdFByZXNzZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblxuXHRcdFx0Ly8gTGlzdGVuIGZvciBjb250cm9sIGtleSBwcmVzc1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQ29udHJvbCcpIHtcblx0XHRcdFx0XHR0aGlzLmlzQ3RybFByZXNzZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHN2Zy5zdHlsZSgnY3Vyc29yJywgJ2Nyb3NzaGFpcicpO1xuXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSAnQ29udHJvbCcpIHtcblx0XHRcdFx0XHR0aGlzLmlzQ3RybFByZXNzZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRzdmcuc3R5bGUoJ2N1cnNvcicsICdkZWZhdWx0Jyk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRcblx0XG5cdFx0XHRjb25zdCB1cGRhdGVMYWJlbE9wYWNpdHkgPSAoem9vbUxldmVsOiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF4T3BhY2l0eSA9IDE7IC8vIE1heGltdW0gb3BhY2l0eVxuXHRcdFx0XHRjb25zdCBtaW5PcGFjaXR5ID0gMDsgLy8gTWluaW11bSBvcGFjaXR5XG5cdFx0XHRcdGNvbnN0IG1pblpvb20gPSAwLjE7IC8vIE1pbmltdW0gem9vbSBsZXZlbCB3aGVyZSBvcGFjaXR5IGlzIDBcblx0XHRcdFx0Y29uc3QgbWF4Wm9vbSA9IHRoaXMudGV4dEZhZGVUaHJlc2hvbGQ7IC8vIFVzZSB0aGUgdGV4dCBmYWRlIHRocmVzaG9sZCB2YWx1ZVxuXHRcdFx0XG5cdFx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgbmV3IG9wYWNpdHkgYmFzZWQgb24gdGhlIHpvb20gbGV2ZWxcblx0XHRcdFx0bGV0IG5ld09wYWNpdHkgPSAoem9vbUxldmVsIC0gbWluWm9vbSkgLyAobWF4Wm9vbSAtIG1pblpvb20pO1xuXHRcblx0XHRcdFx0ICAvLyBFbnN1cmUgbGFiZWxzIGJlY29tZSBpbnZpc2libGUgYXQgbG93ZXIgem9vbSBsZXZlbHNcblx0XHRcdFx0aWYgKHpvb21MZXZlbCA8PSBtaW5ab29tKSB7XG5cdFx0XHRcdFx0bmV3T3BhY2l0eSA9IG1pbk9wYWNpdHk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoem9vbUxldmVsID49IG1heFpvb20pIHtcblx0XHRcdFx0XHRuZXdPcGFjaXR5ID0gbWF4T3BhY2l0eTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIG5ldyBvcGFjaXR5IGJhc2VkIG9uIHRoZSB6b29tIGxldmVsXG5cdFx0XHRcdFx0bmV3T3BhY2l0eSA9ICh6b29tTGV2ZWwgLSBtaW5ab29tKSAvIChtYXhab29tIC0gbWluWm9vbSk7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdC8vIENsYW1wIHRoZSBvcGFjaXR5IGJldHdlZW4gMCBhbmQgMVxuXHRcdFx0XHRuZXdPcGFjaXR5ID0gTWF0aC5tYXgobWluT3BhY2l0eSwgTWF0aC5taW4obWF4T3BhY2l0eSwgbmV3T3BhY2l0eSkpO1xuXHRcblx0XHRcdFx0Ly8gRGVidWcgc3RhdGVtZW50c1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhgWm9vbSBMZXZlbDogJHt6b29tTGV2ZWx9LCBOZXcgT3BhY2l0eTogJHtuZXdPcGFjaXR5fSwgRmFkZSBUaHJlc2hvbGQ6ICR7dGhpcy50ZXh0RmFkZVRocmVzaG9sZH1gKTtcblx0XG5cdFx0XHRcblx0XHRcdFx0c3ZnR3JvdXAuc2VsZWN0QWxsKCcubGFiZWwnKVxuXHRcdFx0XHRcdC50cmFuc2l0aW9uKClcblx0XHRcdFx0XHQuZHVyYXRpb24oMzAwKVxuXHRcdFx0XHRcdC5hdHRyKCdvcGFjaXR5JywgbmV3T3BhY2l0eSk7XG5cdFx0XHR9O1xuXHRcdFx0XG5cdFx0XHQvLyBGdW5jdGlvbiB0byBub3JtYWxpemUgcmVsZXZhbmNlIHNjb3JlIGFuZCBpbnZlcnNlIGl0IHRvIGhhdmUgbGlua3Mgd2l0aCBoaWdoZXIgc2NvcmVzIGNsb3NlciB0byB0aGUgY2VudHJhbCBub2RlXG5cdFx0XHRmdW5jdGlvbiBpbnZlcnNlTm9ybWFsaXplKHZhbHVlIDogbnVtYmVyKSB7XG5cdFx0XHRcdHJldHVybiAxIC0gKCh2YWx1ZSAtIHRoYXQubWluU2NvcmUpIC8gKHRoYXQubWF4U2NvcmUgLSB0aGF0Lm1pblNjb3JlKSk7XG5cdFx0XHR9XHRcdFxuXHRcblx0XHRcdGNvbnN0IHNpbXVsYXRpb24gPSBkMy5mb3JjZVNpbXVsYXRpb24oKVxuXHRcdFx0LmZvcmNlKCdjZW50ZXInLCBudWxsKSAvLyBSZW1vdmUgdGhlIGRlZmF1bHQgY2VudGVyIGZvcmNlXG5cdFx0XHQuZm9yY2UoJ2NoYXJnZScsIGQzLmZvcmNlTWFueUJvZHkoKS5zdHJlbmd0aCgtREVGQVVMVF9ORVRXT1JLX1NFVFRJTkdTLnJlcGVsRm9yY2UpKSAvLyBOb3RlIHRoZSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcmVwdWxzaW9uXG5cdFx0XHQuZm9yY2UoJ2xpbmsnLCBkMy5mb3JjZUxpbmsoKS5pZCgoZDogYW55KSA9PiBkLmlkKS5kaXN0YW5jZSgoZDogYW55KSA9PiA1MCArIChpbnZlcnNlTm9ybWFsaXplKGQuc2NvcmUpICogMTAwKSkuc3RyZW5ndGgoMSkpXG5cdFx0XHQuZm9yY2UoJ2NvbGxpZGUnLCBkMy5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoREVGQVVMVF9ORVRXT1JLX1NFVFRJTkdTLm5vZGVTaXplICsgMykuc3RyZW5ndGgoMC43KSkgLy8gQWRqdXN0IHJhZGl1cyBiYXNlZCBvbiBub2RlIHNpemVcblx0XHRcblx0XHRcdHVwZGF0ZUNvbm5lY3Rpb25zKCk7XG5cdFx0XG5cdFx0XHRsZXQgbGluayA9IHN2Z0dyb3VwLmFwcGVuZCgnZycpXG5cdFx0XHRcdC5hdHRyKCdjbGFzcycsICdsaW5rcycpXG5cdFx0XHRcdC5zZWxlY3RBbGwoJ2xpbmUnKVxuXHRcdFx0XHQuZGF0YShsaW5rcylcblx0XHRcdFx0LmVudGVyKCkuYXBwZW5kKCdsaW5lJylcblx0XHRcdFx0LmF0dHIoJ3N0cm9rZScsICdibHVlJylcblx0XHRcdFx0LmF0dHIoJ3N0cm9rZS13aWR0aCcsIDIpXG5cdFx0XHRcdC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIDEpO1xuXHRcdFxuXHRcdFx0bGV0IG5vZGUgPSBzdmdHcm91cC5hcHBlbmQoJ2cnKVxuXHRcdFx0XHQuYXR0cignY2xhc3MnLCAnbm9kZXMnKVxuXHRcdFx0XHQuc2VsZWN0QWxsKCdjaXJjbGUnKVxuXHRcdFx0XHQuZGF0YShub2Rlcylcblx0XHRcdFx0LmVudGVyKCkuYXBwZW5kKCdjaXJjbGUnKVxuXHRcdFx0XHQuYXR0cigncicsIDIwKVxuXHRcdFx0XHQuYXR0cignZmlsbCcsICdibHVlJylcblx0XHRcdFx0LmNhbGwoZDMuZHJhZygpXG5cdFx0XHRcdFx0Lm9uKCdzdGFydCcsIChldmVudCwgZDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWV2ZW50LmFjdGl2ZSkgc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwLjMpLnJlc3RhcnQoKTtcblx0XHRcdFx0XHRcdGQuZnggPSBkLng7XG5cdFx0XHRcdFx0XHRkLmZ5ID0gZC55O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdkcmFnJywgKGV2ZW50LCBkOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGQuZnggPSBldmVudC54O1xuXHRcdFx0XHRcdFx0ZC5meSA9IGV2ZW50Lnk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ2VuZCcsIChldmVudCwgZDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIWV2ZW50LmFjdGl2ZSkgc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwKTtcblx0XHRcdFx0XHR9KSk7XG5cdFx0XG5cdFx0XHRsZXQgbm9kZUxhYmVscyA9IHN2Z0dyb3VwLmFwcGVuZCgnZycpXG5cdFx0XHRcdC5hdHRyKCdjbGFzcycsICdsYWJlbHMnKVxuXHRcdFx0XHQuc2VsZWN0QWxsKCd0ZXh0Jylcblx0XHRcdFx0LmRhdGEobm9kZXMpXG5cdFx0XHRcdC5lbnRlcigpLmFwcGVuZCgndGV4dCcpXG5cdFx0XHRcdC5hdHRyKCdkeCcsIDEyKVxuXHRcdFx0XHQuYXR0cignZHknLCAnLjM1ZW0nKVxuXHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiBkLm5hbWUpO1xuXHRcdFxuXHRcdFx0Y29uc3QgdG9vbHRpcCA9IGQzLnNlbGVjdCh0aGlzLmNvbnRlbnRFbClcblx0XHRcdFx0LmFwcGVuZCgnZGl2Jylcblx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ3Rvb2x0aXAnKVxuXHRcdFx0XHQuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcblx0XHRcdFx0LnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpXG5cdFx0XHRcdC5zdHlsZSgnYmFja2dyb3VuZCcsICcjMzMzJykgLy8gVXBkYXRlZCBiYWNrZ3JvdW5kIGNvbG9yXG5cdFx0XHRcdC5zdHlsZSgnY29sb3InLCAnI2ZmZicpIC8vIFVwZGF0ZWQgdGV4dCBjb2xvclxuXHRcdFx0XHQuc3R5bGUoJ3BhZGRpbmcnLCAnNXB4Jylcblx0XHRcdFx0LnN0eWxlKCdib3JkZXInLCAnMXB4IHNvbGlkICM0NDQnKSAvLyBVcGRhdGVkIGJvcmRlciBjb2xvclxuXHRcdFx0XHQuc3R5bGUoJ2JvcmRlci1yYWRpdXMnLCAnNXB4Jyk7XG5cdFxuXHRcdFx0Ly8gVE9ETzo6IFVuY29tbWVudCBiYWNrIGluIHdoZW4gd2FudCB0byBzdGFydCBvbiB0b29sdG9wIGZ1bmMgZm9yIGxpbmtcblx0XHRcdC8vIEFkZCB0b29sdGlwIGV2ZW50IGxpc3RlbmVycyB0byBsaW5rc1xuXHRcdFx0Ly8gbGluay5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oZXZlbnQsIGQpIHtcblxuXHRcdFx0Ly8gXHR0b29sdGlwLnRleHQoYHJlbGV2YW5jZTogJHtkLnNjb3JldG9GaXhlZCgzKX1gKVxuXHRcdFx0Ly8gLnN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XG5cdFx0XHQvLyB9KS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oZXZlbnQpIHtcblxuXHRcdFx0Ly8gXHRjb25zdCBbeCwgeV0gPSBkMy5wb2ludGVyKGV2ZW50KTtcblx0XHRcdC8vIFx0dG9vbHRpcC5zdHlsZSgndG9wJywgYCR7eSArIDEwfXB4YClcblx0XHRcdC8vIFx0XHQuc3R5bGUoJ2xlZnQnLCBgJHt4ICsgMTB9cHhgKTtcblxuXHRcdFx0Ly8gfSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIFx0dG9vbHRpcC5zdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblxuXHRcdFx0Ly8gfSk7XG5cdFx0XHRcblx0XHRcdC8vIFRPRE86OiBVbmNvbW1lbnQgYmFjayBpbiB3aGVuIHdhbnQgdG8gc3RhcnQgb24gdG9vbHRvcCBmdW5jIGZvciBub2RlXG5cdFx0XHQvLyBub2RlLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihldmVudCwgZDogYW55KSB7XG5cdFx0XHQvLyBcdHRvb2x0aXAudGV4dChkLm5hbWUpXG5cdFx0XHQvLyBcdFx0LnN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdC8vIH0pLm9uKCdtb3VzZW1vdmUnLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0Ly8gXHRjb25zdCBbeCwgeV0gPSBkMy5wb2ludGVyKGV2ZW50KTtcblx0XHRcdC8vIFx0dG9vbHRpcC5zdHlsZSgndG9wJywgYCR7eSArIDEwfXB4YClcblx0XHRcdC8vIFx0XHQuc3R5bGUoJ2xlZnQnLCBgJHt4ICsgMTB9cHhgKTtcblx0XHRcdC8vIH0pLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gXHR0b29sdGlwLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0Ly8gfSk7XG5cdFxuXHRcdFx0Ly8gRnVuY2l0aW9uIHRvIGNlbnRlciB0aGUgbmV0d29yayBvbiB1cGRhdGVcblx0XHRcdGNvbnN0IGNlbnRlck5ldHdvcmsgPSAoKSA9PiB7XG5cdFx0XHRcdHNpbXVsYXRpb25cblx0XHRcdFx0XHQuZm9yY2UoJ2NlbnRlcicsIGQzLmZvcmNlQ2VudGVyKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMikpXG5cdFx0XHRcdFx0LmFscGhhKDAuMylcblx0XHRcdFx0XHQucmVzdGFydCgpO1xuXHRcdFx0fTtcblx0XG5cdFx0XHRcblxuXHRcdFx0Ly8gRnVuY3Rpb24gdG8gcmVyZW5kZXIgdmlzdWFsaXphdGlvbiB3aXRoIG1vc3QgdXAgdG8gZGF0ZSBzZXR0aW5nc1xuXHRcdFx0Y29uc3QgdXBkYXRlVmlzdWFsaXphdGlvbiA9IChuZXdTY29yZVRocmVzaG9sZD86IG51bWJlcikgPT4ge1xuXG5cdFx0XHRcdC8vIFdlIGRvbnQgd2FudCByYXBpZCBjYWxscyBpZiBpdHMgYWxyZWFkeSB1cGRhdGluZyB1bmxlc3Mgd2UgYXJlIGNoYW5naW5nIHRoZSBuZXR3b3JrIHZpYSBjb25uZWN0aW9uIHR5cGVcblx0XHRcdFx0aWYgKHRoaXMudXBkYXRpbmdWaXN1YWxpemF0aW9uICYmICF0aGlzLmlzQ2hhbmdpbmdDb25uZWN0aW9uVHlwZSkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdVcGRhdGUgYWxyZWFkeSBpbiBwcm9ncmVzcy4gU2tpcHBpbmcuLi4nKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ1VwZGF0ZSBub3QgaW4gcHJvZ3Jlc3MgLiBTa2lwcGluZy4uLicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5pc0NoYW5naW5nQ29ubmVjdGlvblR5cGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAobmV3U2NvcmVUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMucmVsZXZhbmNlU2NvcmVUaHJlc2hvbGQgPSBuZXdTY29yZVRocmVzaG9sZDtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0dXBkYXRlQ29ubmVjdGlvbnMoKTtcblx0XHRcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ0Nvbm5lY3Rpb25zIGJlZm9yZSBmaWx0ZXJpbmc6JywgY29ubmVjdGlvbnMpO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZENvbm5lY3Rpb25zID0gY29ubmVjdGlvbnMuZmlsdGVyKChjb25uZWN0aW9uOiBhbnkpID0+IGNvbm5lY3Rpb24uc2NvcmUgPj0gdGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZCk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdGaWx0ZXJlZCBDb25uZWN0aW9uczonLCBmaWx0ZXJlZENvbm5lY3Rpb25zKTtcblx0XHRcblx0XHRcdFx0bGV0IHZpc2libGVOb2RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdFx0XHRmaWx0ZXJlZENvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcblx0XHRcdFx0XHR2aXNpYmxlTm9kZXMuYWRkKGNvbm5lY3Rpb24uc291cmNlKTtcblx0XHRcdFx0XHR2aXNpYmxlTm9kZXMuYWRkKGNvbm5lY3Rpb24udGFyZ2V0KTtcblx0XHRcdFx0fSk7XG5cdFx0XG5cdFx0XHRcdGNvbnN0IG5vZGVzRGF0YSA9IEFycmF5LmZyb20odmlzaWJsZU5vZGVzKS5tYXAoaWQgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG5vZGUgPSBub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpO1xuXHRcdFx0XHRcdGlmIChub2RlKSB7XG5cdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhgTm9kZSBkYXRhIGZvciBpZCAke2lkfTpgLCBub2RlKTtcblx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYE5vZGUgZGF0YSBtaXNzaW5nIGZvciBpZCAke2lkfWApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KS5maWx0ZXIoQm9vbGVhbik7XG5cdFx0XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdWaXNpYmxlIE5vZGVzOicsIG5vZGVzRGF0YSk7XG5cdFx0XG5cdFx0XHRcdHRoaXMudmFsaWRhdGVkTGlua3MgPSBmaWx0ZXJlZENvbm5lY3Rpb25zLmZpbHRlcigobGluaykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNvdXJjZU5vZGUgPSBub2Rlc0RhdGEuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGxpbmsuc291cmNlKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXROb2RlID0gbm9kZXNEYXRhLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBsaW5rLnRhcmdldCk7XG5cdFx0XG5cdFx0XHRcdFx0aWYgKCFzb3VyY2VOb2RlIHx8ICF0YXJnZXROb2RlKSB7XG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBJbnZhbGlkIGxpbmsgZm91bmQ6ICR7bGluay5zb3VyY2V9IC0+ICR7bGluay50YXJnZXR9YCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ1ZhbGlkYXRlZCBMaW5rczonLCB0aGlzLnZhbGlkYXRlZExpbmtzKTtcblx0XG5cdFx0XHRcdC8vIFNhZmVndWFyZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Bcblx0XHRcdFx0aWYgKG5vZGVzRGF0YS5sZW5ndGggPT09IDAgfHwgdGhpcy52YWxpZGF0ZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ05vIG5vZGVzIG9yIGxpbmtzIHRvIGRpc3BsYXkgYWZ0ZXIgZmlsdGVyaW5nLiBBYm9ydGluZyB1cGRhdGUuJyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XHRcdFxuXHRcdFx0XHRcblx0XHRcdFx0Ly9UT0RPOjogRm9yIG5vdywgc2VwYXJhdGUgY2VudHJhbCBub2RlIGFuZCBvdGhlciBub2RlIHNpemVzIHVudGlsIHdlIGRvIGEgbm9kZSBzaXplIGJ5IGZlYXR1cmVcblx0XHRcdFx0Y29uc3QgbWFpbk5vZGVTaXplID0gdGhpcy5tYXhOb2RlU2l6ZTtcblx0XHRcdFx0Y29uc3Qgb3RoZXJOb2RlU2l6ZSA9IHRoaXMubWluTm9kZVNpemU7XG5cdFxuXHRcdFx0XHQvLyBNb3ZlIGZvcmNlcyB0b3dhcmRzIGNlbnRyYWwgbm9kZVxuXHRcdFx0XHRpZiAodGhpcy5jZW50cmFsTm9kZSkge1xuXHRcdFx0XHRcdHRoaXMuY2VudHJhbE5vZGUuZnggPSB3aWR0aCAvIDI7XG5cdFx0XHRcdFx0dGhpcy5jZW50cmFsTm9kZS5meSA9IGhlaWdodCAvIDI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBFbnN1cmUgbGFzdGluZyBqaXR0ZXJpbmcgb2YgdGhlIG5vZGVzIGRvZXNuJ3QgaGFwcGVuLCBzbyBzdG9wIGFmdGVyIDIgc2Vjb25kc1xuXHRcdFx0XHRjb25zdCB1cGRhdGVGb3JjZXMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYSgwLjMpLnJlc3RhcnQoKTsgLy8gUmVzdGFydCB0aGUgc2ltdWxhdGlvbiB3aXRoIGluaXRpYWwgYWxwaGFcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRpbmdWaXN1YWxpemF0aW9uID0gZmFsc2U7IC8vIFJlc2V0IHRoZSBmbGFnIGFmdGVyIHN0b3BwaW5nIHNpbXVsYXRpb25cblx0XHRcdFx0XHRcdHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMCkuc3RvcCgpOyAvLyBTdG9wIHRoZSBzaW11bGF0aW9uIGFmdGVyIDIgc2Vjb25kc1xuXHRcdFx0XHRcdH0sIDIwMDApOyBcblx0XHRcdFx0fTtcblx0XHRcblx0XHRcdFx0dGhpcy5ub2RlU2VsZWN0aW9uID0gc3ZnR3JvdXAuc2VsZWN0KCdnLm5vZGVzJykuc2VsZWN0QWxsKCdjaXJjbGUnKVxuXHRcdFx0XHRcdC5kYXRhKG5vZGVzRGF0YSwgKGQ6IGFueSkgPT4gZC5pZClcblx0XHRcdFx0XHQuam9pbihcblx0XHRcdFx0XHRcdGVudGVyID0+IGVudGVyLmFwcGVuZCgnY2lyY2xlJylcblx0XHRcdFx0XHRcdC5hdHRyKCdjbGFzcycsICdub2RlJylcblx0XHRcdFx0XHRcdC5hdHRyKCdyJywgZCA9PiBkLmlkID09PSB0aGlzLmNlbnRyYWxOb2RlLmlkID8gdGhpcy5ub2RlU2l6ZSArIDIgOiB0aGlzLm5vZGVTaXplKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCBkID0+IChkLmdyb3VwID09PSAnbm90ZScgPyAnIzdjODU5NCcgOiAnIzkyNmVjOScpKVxuXHRcdFx0XHRcdFx0LmF0dHIoJ3N0cm9rZScsIGQgPT4geyByZXR1cm4gZC5zZWxlY3RlZCA/ICdibGFuY2hlZGFsbW9uZCcgOiAndHJhbnNwYXJlbnQnfSlcblx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utd2lkdGgnLCBkID0+IGQuc2VsZWN0ZWQgPyAxLjUgOiAwLjMpXG5cdFx0XHRcdFx0XHQuYXR0cignb3BhY2l0eScsIDEpXG5cdFx0XHRcdFx0XHQuYXR0cignY3Vyc29yJywgJ2dyYWInKVxuXHRcdFx0XHRcdFx0LmNhbGwoZDMuZHJhZygpXG5cdFx0XHRcdFx0XHRcdC5vbignc3RhcnQnLCBmdW5jdGlvbihldmVudCwgZDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFldmVudC5hY3RpdmUpIHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3RvcmUgaW5pdGlhbCBwb3NpdGlvbnMgb2Ygc2VsZWN0ZWQgbm9kZXNcblx0XHRcdFx0XHRcdFx0XHRkLmluaXRpYWxYID0gZC54O1xuXHRcdFx0XHRcdFx0XHRcdGQuaW5pdGlhbFkgPSBkLnk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGQuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoYXQubm9kZVNlbGVjdGlvbi5lYWNoKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5vZGUuc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLmluaXRpYWxYID0gbm9kZS54O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuaW5pdGlhbFkgPSBub2RlLnk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0Lm9uKCdkcmFnJywgZnVuY3Rpb24oZXZlbnQsIGQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGR4ID0gZXZlbnQueCAtIGQuaW5pdGlhbFg7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZHkgPSBldmVudC55IC0gZC5pbml0aWFsWTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZC5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhhdC5ub2RlU2VsZWN0aW9uLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobm9kZS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZnggPSBub2RlLmluaXRpYWxYICsgZHg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5meSA9IG5vZGUuaW5pdGlhbFkgKyBkeTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGQuZnggPSBldmVudC54O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZC5meSA9IGV2ZW50Lnk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQub24oJ2VuZCcsIGZ1bmN0aW9uKGV2ZW50LCBkOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWV2ZW50LmFjdGl2ZSkgc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZC5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhhdC5ub2RlU2VsZWN0aW9uLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobm9kZS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZnggPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUuZnkgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZC5meCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHRkLmZ5ID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQgOiBhbnksIGQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdFx0aWYgKCF0aGF0LmlzQWx0UHJlc3NlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoYXQuY2xlYXJTZWxlY3Rpb25zKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZC5zZWxlY3RlZCA9ICFkLnNlbGVjdGVkO1xuXHRcdFx0XHRcdFx0XHR0aGF0LnVwZGF0ZU5vZGVBcHBlYXJhbmNlKCk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihldmVudCA6IGFueSwgZDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHRoYXQuaXNIb3ZlcmluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGlmICghZC5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChkLmlkICE9PSB0aGF0LmNlbnRyYWxOb2RlLmlkICYmICFkLmhpZ2hsaWdodGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuYXR0cignZmlsbCcsICcjZDQ2ZWJlJyk7IC8vIEFuaW1hdGUgZmlsbCBjb2xvciB0byAjZDQ2ZWJlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhhdC5oaWdobGlnaHROb2RlKGQpO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRkMy5zZWxlY3QodGhpcykuYXR0cignc3Ryb2tlJywgZC5zZWxlY3RlZCA/ICdibGFuY2hlZGFsbW9uZCcgOiAnI2ZmZicpLmF0dHIoJ3N0cm9rZS13aWR0aCcsIGQuc2VsZWN0ZWQgPyAxLjUgOiAwLjMpOyAvLyBDaGFuZ2Ugc3Ryb2tlIGNvbG9yIHRvIHdoaXRlIG9uIGhvdmVyXG5cdFx0XHRcdFx0XHRcdHN2Z0dyb3VwLnNlbGVjdChgdGV4dFtkYXRhLWlkPScke2QuaWR9J11gKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjUwKS5hdHRyKCd5JywgZC55ICsgNCk7IC8vIEFuaW1hdGUgbGFiZWwgZG93biAxMCBwaXhlbHNcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHRoYXQuYXBwLndvcmtzcGFjZS50cmlnZ2VyKFwiaG92ZXItbGlua1wiLCB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdFx0c291cmNlOiAnRDMnLFxuXHRcdFx0XHRcdFx0XHRcdGhvdmVyUGFyZW50OiB0aGlzLnBhcmVudEVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0RWw6IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0bGlua3RleHQ6IGQuaWQsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oZXZlbnQgOiBhbnksIGQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHR0aGF0LmlzSG92ZXJpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYgKCFkLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGQuaWQgIT09IHRoYXQuY2VudHJhbE5vZGUuaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGQzLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5hdHRyKCdmaWxsJywgZC5ncm91cCA9PT0gJ25vdGUnID8gJyM3Yzg1OTQnIDogJyM5MjZlYzknKTsgLy8gQW5pbWF0ZSBmaWxsIGNvbG9yIGJhY2sgdG8gb3JpZ2luYWxcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhhdC51bmhpZ2hsaWdodE5vZGUoKTtcblx0XHRcdFx0XHRcdFx0ZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ3N0cm9rZScsIGQuc2VsZWN0ZWQgPyAnYmxhbmNoZWRhbG1vbmQnIDogJ3RyYW5zcGFyZW50JykuYXR0cignc3Ryb2tlLXdpZHRoJywgZC5zZWxlY3RlZCA/IDEuNSA6IDAuMyk7IC8vIENoYW5nZSBzdHJva2UgY29sb3IgYmFjayB0byBsZXNzIHZpc2libGUgb24gbW91c2Ugb3V0XG5cdFx0XHRcdFx0XHRcdHN2Z0dyb3VwLnNlbGVjdChgdGV4dFtkYXRhLWlkPScke2QuaWR9J11gKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjUwKS5hdHRyKCd5JywgZC55KTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dXBkYXRlID0+IHVwZGF0ZVxuXHRcdFx0XHRcdFx0XHQuYXR0cigncicsIGQgPT4gZC5pZCA9PT0gdGhpcy5jZW50cmFsTm9kZS5pZCA/IHRoaXMubm9kZVNpemUgKyAyIDogdGhpcy5ub2RlU2l6ZSlcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCBkID0+IGQuc2VsZWN0ZWQgPyAnI2YzZWU1ZCcgOiAoZC5ncm91cCA9PT0gJ25vdGUnID8gJyM3Yzg1OTQnIDogJyM5MjZlYzknKSlcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ3N0cm9rZScsIGQgPT4gZC5zZWxlY3RlZCA/ICcjYmxhbmNoZWRhbG1vbmQnIDogKGQuZ3JvdXAgPT09ICdub3RlJyA/ICcjN2M4NTk0JyA6ICcjOTI2ZWM5JykpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utd2lkdGgnLCBkID0+IGQuc2VsZWN0ZWQgPyAxLjUgOiAwLjMpLFxuXHRcdFx0XHRcdFx0ZXhpdCA9PiBleGl0LnJlbW92ZSgpXG5cdFx0XHRcdFx0KTtcblxuXHRcblx0XHRcdFx0dGhpcy5saW5rU2VsZWN0aW9uID0gc3ZnR3JvdXAuc2VsZWN0KCdnLmxpbmtzJykuc2VsZWN0QWxsKCdsaW5lJylcblx0XHRcdFx0XHQuZGF0YSh0aGlzLnZhbGlkYXRlZExpbmtzLCAoZDogYW55KSA9PiBgJHtkLnNvdXJjZX0tJHtkLnRhcmdldH1gKVxuXHRcdFx0XHRcdC5qb2luKFxuXHRcdFx0XHRcdFx0ZW50ZXIgPT4gZW50ZXIuYXBwZW5kKCdsaW5lJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ2NsYXNzJywgJ2xpbmsnKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignc3Ryb2tlJywgJyM0Yzc3ODcnKSAvLyBBZGp1c3RlZCBjb2xvciB0byBtYXRjaCB0aGUgYmx1ZSBodWVcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ3N0cm9rZS13aWR0aCcsKGQ6IGFueSkgPT4gZDMuc2NhbGVMaW5lYXIoKVxuXHRcdFx0XHRcdFx0XHQuZG9tYWluKFt0aGlzLm1pblNjb3JlLCB0aGlzLm1heFNjb3JlXSkgLy8gRW5zdXJlIHRoaXMgZG9tYWluIG1hdGNoZXMgeW91ciBzY29yZSByYW5nZVxuXHRcdFx0XHRcdFx0XHQucmFuZ2UoW3RoaXMubWluTGlua1RoaWNrbmVzcywgdGhpcy5tYXhMaW5rVGhpY2tuZXNzXSkoZC5zY29yZSkpIC8vIFRoaW5uZXIgc3Ryb2tlIHdpZHRoXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utb3BhY2l0eScsIDEpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdvcGFjaXR5JywgMSlcblx0XHRcdFx0XHRcdFx0Lm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihldmVudCwgZCA6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIExlYWNpbmcgaGVyZSBmb3Igd2hlbiB3ZSB1c2UgaG92ZXJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zdCBbeCwgeV0gPSBkMy5wb2ludGVyKGV2ZW50KTtcblx0XHRcdFx0XHRcdFx0XHQvLyB0b29sdGlwLnRleHQoYFNpZ25maWNhbmNlOiAke2Quc2NvcmUudG9GaXhlZCgzKX1gKVxuXHRcdFx0XHRcdFx0XHRcdC8vIFx0LnN0eWxlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRcdFx0fSkub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc3QgW3gsIHldID0gZDMucG9pbnRlcihldmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdG9vbHRpcC5zdHlsZSgndG9wJywgYCR7eSArIDEwfXB4YClcblx0XHRcdFx0XHRcdFx0XHQvLyBcdC5zdHlsZSgnbGVmdCcsIGAke3h9cHhgKTtcblx0XHRcdFx0XHRcdFx0fSkub24oJ21vdXNlb3V0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdG9vbHRpcC5zdHlsZSgndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR1cGRhdGUgPT4gdXBkYXRlXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2UnLCAnIzRjNzc4NycpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdzdHJva2Utd2lkdGgnLChkOiBhbnkpID0+IGQzLnNjYWxlTGluZWFyKClcblx0XHRcdFx0XHRcdFx0LmRvbWFpbihbdGhpcy5taW5TY29yZSwgdGhpcy5tYXhTY29yZV0pIC8vIEVuc3VyZSB0aGlzIGRvbWFpbiBtYXRjaGVzIHlvdXIgc2NvcmUgcmFuZ2Vcblx0XHRcdFx0XHRcdFx0LnJhbmdlKFt0aGlzLm1pbkxpbmtUaGlja25lc3MsIHRoaXMubWF4TGlua1RoaWNrbmVzc10pKGQuc2NvcmUpKSxcblx0XHRcdFx0XHRcdFx0Ly8gLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbihldmVudCwgZCA6IGFueSkge1xuXHRcdFx0XHRcdFx0XHQvLyB9KS5vbignbW91c2Vtb3ZlJywgZnVuY3Rpb24oZXZlbnQsIGQgOmFueSkge1xuXHRcdFx0XHRcdFx0XHQvLyBcdC8vIENhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAgcmVsYXRpdmUgdG8gdGhlIFNWRyBjb29yZGluYXRlIHN5c3RlbVxuXHRcdFx0XHRcdFx0XHQvLyB9KS5vbignbW91c2VvdXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0Ly8gXHR0b29sdGlwLnN0eWxlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXHRcdFx0XHRcdFx0ZXhpdCA9PiBleGl0LnJlbW92ZSgpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHRoaXMubGlua0xhYmVsU2VsZWN0aW9uID0gc3ZnR3JvdXAuYXBwZW5kKCdnJylcblx0XHRcdFx0XHQuYXR0cignY2xhc3MnLCAnbGluay1sYWJlbHMnKVxuXHRcdFx0XHRcdC5zZWxlY3RBbGwoJ3RleHQnKVxuXHRcdFx0XHRcdC5kYXRhKHRoaXMudmFsaWRhdGVkTGlua3MsIChkOiBhbnkpID0+IGAke2Quc291cmNlLmlkfS0ke2QudGFyZ2V0LmlkfWApXG5cdFx0XHRcdFx0LmpvaW4oXG5cdFx0XHRcdFx0XHRlbnRlciA9PiBlbnRlci5hcHBlbmQoJ3RleHQnKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignY2xhc3MnLCAnbGluay1sYWJlbCcpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdmb250LXNpemUnLCB0aGlzLmxpbmtMYWJlbFNpemUpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdmaWxsJywgJyNiYmInKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignb3BhY2l0eScsIDApXG5cdFx0XHRcdFx0XHRcdC50ZXh0KChkOiBhbnkpID0+IChkLnNjb3JlICogMTAwKS50b0ZpeGVkKDEpKSxcblx0XHRcdFx0XHRcdHVwZGF0ZSA9PiB1cGRhdGUudGV4dCgoZDogYW55KSA9PiAoZC5zY29yZSAqIDEwMCkudG9GaXhlZCgxKSksXG5cdFx0XHRcdFx0XHRleGl0ID0+IGV4aXQucmVtb3ZlKClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcblx0XHRcblx0XHRcdFx0dGhpcy5sYWJlbFNlbGVjdGlvbiA9IHN2Z0dyb3VwLnNlbGVjdCgnZy5sYWJlbHMnKS5zZWxlY3RBbGwoJ3RleHQnKVxuXHRcdFx0XHRcdC5kYXRhKG5vZGVzRGF0YSwgKGQ6IGFueSkgPT4gZC5pZClcblx0XHRcdFx0XHQuam9pbihcblx0XHRcdFx0XHRcdGVudGVyID0+IGVudGVyLmFwcGVuZCgndGV4dCcpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdjbGFzcycsICdsYWJlbCcpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdkeCcsIDApIC8vIENlbnRlcmVkIGhvcml6b250YWxseVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZm9udC1zaXplJywgdGhpcy5ub2RlTGFiZWxTaXplKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZHknLCAxMikgLy8gUG9zaXRpb25lZCByaWdodCB1bmRlcm5lYXRoXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKSAvLyBDZW50ZXIgYWxpZ24gdGV4dFxuXHRcdFx0XHRcdFx0XHQuYXR0cignZmlsbCcsICcjYmJiJylcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ29wYWNpdHknLCAxKSAvLyBTZXQgaW5pdGlhbCBvcGFjaXR5XG5cdFx0XHRcdFx0XHRcdC50ZXh0KChkOiBhbnkpID0+IHRoaXMuZm9ybWF0TGFiZWwoZC5uYW1lKSksXG5cdFx0XHRcdFx0XHR1cGRhdGUgPT4gdXBkYXRlXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdkeCcsIDApIC8vIENlbnRlcmVkIGhvcml6b250YWxseVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZHknLCAxMikgLy8gUG9zaXRpb25lZCByaWdodCB1bmRlcm5lYXRoXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKSAvLyBDZW50ZXIgYWxpZ24gdGV4dFxuXHRcdFx0XHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSkpXG5cdFx0XHRcdFx0XHRcdC5hdHRyKCdmaWxsJywgJyNiYmInKVxuXHRcdFx0XHRcdFx0XHQuYXR0cignZm9udC1zaXplJywgNClcblx0XHRcdFx0XHRcdFx0LmF0dHIoJ29wYWNpdHknLCAxKSwgLy8gRW5zdXJlIHVwZGF0ZWQgb3BhY2l0eSBpcyAxXG5cdFx0XHRcdFx0XHRleGl0ID0+IGV4aXQucmVtb3ZlKClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmF0dHIoJ3gnLCAoZDogYW55KSA9PiBkLngpXG5cdFx0XHRcdFx0LmF0dHIoJ3knLCAoZDogYW55KSA9PiBkLnkpO1xuXHRcblx0XHRcdFx0c2ltdWxhdGlvbi5ub2Rlcyhub2Rlc0RhdGEpO1xuXHRcdFx0XHQoc2ltdWxhdGlvbi5mb3JjZSgnbGluaycpIGFzIGFueSkubGlua3ModGhpcy52YWxpZGF0ZWRMaW5rcyk7XG5cdFxuXHRcdFx0XHRzaW11bGF0aW9uLmFscGhhKDAuMykuYWxwaGFUYXJnZXQoMC4wNSkucmVzdGFydCgpO1xuXG5cdFx0XHRcdHVwZGF0ZUZvcmNlcygpO1xuXG5cdFx0XHRcdHNpbXVsYXRpb24ub24oJ3RpY2snLCAoKSA9PiB7XG5cdFx0XG5cdFx0XHRcdFx0dGhpcy5ub2RlU2VsZWN0aW9uXG5cdFx0XHRcdFx0XHQuYXR0cignY3gnLCAoZDogYW55KSA9PiBkLngpXG5cdFx0XHRcdFx0XHQuYXR0cignY3knLCAoZDogYW55KSA9PiBkLnkpO1xuXHRcblx0XHRcdFx0XHR0aGlzLmxpbmtTZWxlY3Rpb25cblx0XHRcdFx0XHRcdC5hdHRyKCd4MScsIChkOiBhbnkpID0+IGQuc291cmNlLngpXG5cdFx0XHRcdFx0XHQuYXR0cigneTEnLCAoZDogYW55KSA9PiBkLnNvdXJjZS55KVxuXHRcdFx0XHRcdFx0LmF0dHIoJ3gyJywgKGQ6IGFueSkgPT4gZC50YXJnZXQueClcblx0XHRcdFx0XHRcdC5hdHRyKCd5MicsIChkOiBhbnkpID0+IGQudGFyZ2V0LnkpO1xuXG5cdFx0XHRcdFx0dGhpcy5saW5rTGFiZWxTZWxlY3Rpb25cblx0XHRcdFx0XHQuYXR0cigneCcsIChkOiBhbnkpID0+IChkLnNvdXJjZS54ICsgZC50YXJnZXQueCkgLyAyKVxuXHRcdFx0XHRcdC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gKGQuc291cmNlLnkgKyBkLnRhcmdldC55KSAvIDIpOyAvLyBQb3NpdGlvbiBhdCB0aGUgbWlkcG9pbnQgb2YgdGhlIGxpbmtcdFx0XHRcdFxuXHRcblx0XHRcdFx0XHRzdmdHcm91cC5zZWxlY3QoJ2cubGFiZWxzJykuc2VsZWN0QWxsKCd0ZXh0Jylcblx0XHRcdFx0XHRcdC5kYXRhKG5vZGVzRGF0YSwgKGQ6IGFueSkgPT4gZC5pZClcblx0XHRcdFx0XHRcdC5qb2luKFxuXHRcdFx0XHRcdFx0XHRlbnRlciA9PiBlbnRlci5hcHBlbmQoJ3RleHQnKVxuXHRcdFx0XHRcdFx0XHRcdC5hdHRyKCdjbGFzcycsICdsYWJlbCcpXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2R4JywgMTIpXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2R5JywgJy4zNWVtJylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignZmlsbCcsICcjYmJiJylcblx0XHRcdFx0XHRcdFx0XHQuYXR0cignZGF0YS1pZCcsIGQgPT4gZC5pZClcblx0XHRcdFx0XHRcdFx0XHQudGV4dCgoZDogYW55KSA9PiB0aGlzLmZvcm1hdExhYmVsKGQubmFtZSwgdHJ1ZSkpLCAvLyBTZXQgaW5pdGlhbCBsYWJlbCB3aXRoIHRydW5jYXRpb25cblx0XHRcdFx0XHRcdFx0dXBkYXRlID0+IHVwZGF0ZVxuXHRcdFx0XHRcdFx0XHRcdC50ZXh0KChkOiBhbnkpID0+IHRoaXMuZm9ybWF0TGFiZWwoZC5uYW1lLCB0cnVlKSkgLy8gRW5zdXJlIHVwZGF0ZWQgbGFiZWwgaXMgdHJ1bmNhdGVkXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2ZpbGwnLCAnI2JiYicpXG5cdFx0XHRcdFx0XHRcdFx0LmF0dHIoJ2RhdGEtaWQnLCBkID0+IGQuaWQpLFxuXHRcdFx0XHRcdFx0XHRleGl0ID0+IGV4aXQucmVtb3ZlKClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gZC54KVxuXHRcdFx0XHRcdFx0LmF0dHIoJ3knLCAoZDogYW55KSA9PiBkLnkpOyAvLyBQb3NpdGlvbiBsYWJlbCBiZWxvdyB0aGUgbm9kZVxuXHRcblx0XHRcdFx0XHRcdC8vIFVwZGF0ZSBsYWJlbCBvcGFjaXR5IGJhc2VkIG9uIGluaXRpYWwgem9vbSBsZXZlbFxuXHRcdFx0XHRcdFx0dXBkYXRlTGFiZWxPcGFjaXR5KGQzLnpvb21UcmFuc2Zvcm0oc3ZnLm5vZGUoKSBhcyBFbGVtZW50KS5rKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy51cGRhdGluZ1Zpc3VhbGl6YXRpb24gPSB0cnVlOyAvLyBTZXQgdGhlIGZsYWcgdG8gdHJ1ZVxuXHRcblx0XHRcdFxuXHRcdFx0fTtcblx0XG5cdFxuXHRcdFx0aWYgKCF0aGlzLnNldHRpbmdzSW5zdGFudGlhdGVkKSB7XG5cdFxuXHRcdFx0XHQvLyBFbnN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgbWVudSBhbmQgaXRzIGVsZW1lbnRzIGFyZSBvbmx5IGNyZWF0ZWQgb25jZVxuXHRcdFx0XHRpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNldHRpbmdzLWljb24nKSkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwic2NvcmUgc2V0dGluZ3MgZXhpc3RcIik7XG5cdFx0XHRcdFx0Ly8gSWYgc2V0dGluZ3MgbWVudSBpcyBhbHJlYWR5IHNldCB1cCwgc2tpcCBzZXR1cFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInNjb3JlIGRvZXNudFwiKVxuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNldHRpbmdzIGljb25cblx0XHRcdFx0Y29uc3Qgc2V0dGluZ3NJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0XHRcdHNldHRpbmdzSWNvbi5pbm5lckhUTUwgPSAnJiM5ODgxOyc7IC8vIFVuaWNvZGUgZm9yIGdlYXIgaWNvblxuXHRcdFx0XHRzZXR0aW5nc0ljb24uY2xhc3NMaXN0LmFkZCgnc2V0dGluZ3MtaWNvbicpO1xuXHRcdFx0XHR0aGlzLmNvbnRlbnRFbC5hcHBlbmRDaGlsZChzZXR0aW5nc0ljb24pO1xuXHRcblx0XHRcdFx0Ly8gU1ZHIGljb24gZm9yIGRyb3Bkb3duIGFycm93XG5cdFx0XHRcdGNvbnN0IGRyb3Bkb3duQXJyb3cgPSBgXG5cdFx0XHRcdDxzdmcgY2xhc3M9XCJkcm9wZG93bi1pbmRpY2F0b3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cblx0XHRcdFx0XHQ8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xLjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMEw4IDEwLjI5M2w1LjY0Ni01LjY0N2EuNS41IDAgMCAxIC43MDguNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4IDBsLTYtNmEuNS41IDAgMCAxIDAtLjcwOHpcIi8+XG5cdFx0XHRcdDwvc3ZnPmA7XG5cdFxuXHRcdFx0XHRjb25zdCByaWdodEFycm93ID0gYFxuXHRcdFx0XHQ8c3ZnIGNsYXNzPVwiZHJvcGRvd24taW5kaWNhdG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XG5cdFx0XHRcdDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4elwiLz5cblx0XHRcdFx0PC9zdmc+YDtcblx0XG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgZHJvcGRvd24gbWVudVxuXHRcdFx0XHRjb25zdCBkcm9wZG93bk1lbnUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0XHRcdFx0ZHJvcGRvd25NZW51LmNsYXNzTGlzdC5hZGQoJ2Ryb3Bkb3duLW1lbnUnKTtcblx0XHRcdFx0ZHJvcGRvd25NZW51LmlubmVySFRNTCA9IGBcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibWVudS1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpY29uXCIgaWQ9XCJyZWZyZXNoLWljb25cIj4mIzg2MzU7PC9kaXY+IDwhLS0gVW5pY29kZSBmb3IgcmVmcmVzaCBpY29uIC0tPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImljb25cIiBpZD1cImNsb3NlLWljb25cIj4mIzEwMDA1OzwvZGl2PiA8IS0tIFVuaWNvZGUgZm9yIFggKGNsb3NlKSBpY29uIC0tPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taXRlbVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJhcnJvdy1pY29uXCI+JHtyaWdodEFycm93fTwvc3Bhbj5GaWx0ZXJzXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cdFx0XHRcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tY29udGVudFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cInNjb3JlVGhyZXNob2xkTGFiZWxcIiBmb3I9XCJzY29yZVRocmVzaG9sZFwiPk1pbiBSZWxldmFuY2U6ICR7dGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZCAqIDEwMH08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cInNjb3JlVGhyZXNob2xkXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwic2NvcmVUaHJlc2hvbGRcIiBtaW49XCIwXCIgbWF4PVwiMC45OVwiIHZhbHVlPVwiJHt0aGlzLnJlbGV2YW5jZVNjb3JlVGhyZXNob2xkfVwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJzZXR0aW5ncy1pdGVtLWNvbnRlbnQtbGFiZWxcIj5Db25uZWN0aW9uIFR5cGU6PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY29ubmVjdGlvblR5cGVcIiB2YWx1ZT1cImJsb2NrXCIgJHt0aGlzLmNvbm5lY3Rpb25UeXBlID09PSAnYmxvY2snID8gJ2NoZWNrZWQnIDogJyd9PiBCbG9ja1xuXHRcdFx0XHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJjb25uZWN0aW9uVHlwZVwiIHZhbHVlPVwibm90ZVwiICR7dGhpcy5jb25uZWN0aW9uVHlwZSA9PT0gJ25vdGUnID8gJ2NoZWNrZWQnIDogJyd9PiBOb3RlXG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8IS0tXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImFycm93LWljb25cIj4ke3JpZ2h0QXJyb3d9PC9zcGFuPkdyb3Vwc1xuXHRcdFx0XHRcdFx0PC9kaXY+XHRcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tY29udGVudFwiPlxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJncm91cDFcIiBuYW1lPVwiZ3JvdXAxXCIgY2hlY2tlZD5cblx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cImdyb3VwMVwiPkdyb3VwIDE8L2xhYmVsPjxicj5cblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiZ3JvdXAyXCIgbmFtZT1cImdyb3VwMlwiIGNoZWNrZWQ+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJncm91cDJcIj5Hcm91cCAyPC9sYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PiBcblx0XHRcdFx0XHQtLSE+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1pdGVtXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImFycm93LWljb25cIj4ke3JpZ2h0QXJyb3d9PC9zcGFuPkRpc3BsYXlcblx0XHRcdFx0XHRcdDwvZGl2Plx0XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWNvbnRlbnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgaWQ9XCJmYWRlVGhyZXNob2xkTGFiZWxcIiBmb3I9XCJmYWRlVGhyZXNob2xkXCI+IFRleHQgRmFkZSBUaHJlc2hvbGQ6ICR7dGhpcy50ZXh0RmFkZVRocmVzaG9sZH08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cImZhZGVUaHJlc2hvbGRcIiBjbGFzcz1cInNsaWRlclwiIG5hbWU9XCJmYWRlVGhyZXNob2xkXCIgbWluPVwiMC4xXCIgbWF4PVwiMTBcIiB2YWx1ZT1cIjEuMlwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cIm5vZGVTaXplTGFiZWxcIiBmb3I9XCJub2RlU2l6ZVwiPk5vZGUgU2l6ZTogJHt0aGlzLm5vZGVTaXplfTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJyYW5nZVwiIGlkPVwibm9kZVNpemVcIiBjbGFzcz1cInNsaWRlclwiIG5hbWU9XCJub2RlU2l6ZVwiIG1pbj1cIjFcIiBtYXg9XCIxNVwiIHZhbHVlPVwiJHt0aGlzLm5vZGVTaXplfVwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBpZD1cIm1heExhYmVsQ2hhcmFjdGVyc0xhYmVsXCIgZm9yPVwibWF4TGFiZWxDaGFyYWN0ZXJzXCI+TWF4IExhYmVsIENoYXJhY3RlcnM6ICR7dGhpcy5tYXhMYWJlbENoYXJhY3RlcnN9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJtYXhMYWJlbENoYXJhY3RlcnNcIiBjbGFzcz1cInNsaWRlclwiIG5hbWU9XCJtYXhMYWJlbENoYXJhY3RlcnNcIiBtaW49XCIxXCIgbWF4PVwiNTBcIiB2YWx1ZT1cIiR7dGhpcy5tYXhMYWJlbENoYXJhY3RlcnN9XCIgc3RlcD1cIjFcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibGlua0xhYmVsU2l6ZUxhYmVsXCIgZm9yPVwibGlua0xhYmVsU2l6ZVwiPkxpbmsgTGFiZWwgU2l6ZTogJHt0aGlzLmxpbmtMYWJlbFNpemV9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJsaW5rTGFiZWxTaXplXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibGlua0xhYmVsU2l6ZVwiIG1pbj1cIjFcIiBtYXg9XCIxNVwiIHZhbHVlPVwiJHt0aGlzLmxpbmtMYWJlbFNpemV9XCIgc3RlcD1cIjAuMDFcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibm9kZUxhYmVsU2l6ZUxhYmVsXCIgZm9yPVwibm9kZUxhYmVsU2l6ZVwiPk5vZGUgTGFiZWwgU2l6ZTogJHt0aGlzLm5vZGVMYWJlbFNpemV9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJub2RlTGFiZWxTaXplXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibm9kZUxhYmVsU2l6ZVwiIG1pbj1cIjFcIiBtYXg9XCIyNlwiIHZhbHVlPVwiJHt0aGlzLm5vZGVMYWJlbFNpemV9XCIgc3RlcD1cIjFcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibWluTGlua1RoaWNrbmVzc0xhYmVsXCIgZm9yPVwibWluTGlua1RoaWNrbmVzc1wiPk1pbiBMaW5rIFRoaWNrbmVzczogJHt0aGlzLm1pbkxpbmtUaGlja25lc3N9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJtaW5MaW5rVGhpY2tuZXNzXCIgY2xhc3M9XCJzbGlkZXJcIiBuYW1lPVwibWluTGlua1RoaWNrbmVzc1wiIG1pbj1cIjAuMVwiIG1heD1cIjEwXCIgdmFsdWU9XCIke3RoaXMubWluTGlua1RoaWNrbmVzc31cIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgaWQ9XCJtYXhMaW5rVGhpY2tuZXNzTGFiZWxcIiBmb3I9XCJtYXhMaW5rVGhpY2tuZXNzXCI+TWF4IExpbmsgVGhpY2tuZXNzOiAke3RoaXMubWF4TGlua1RoaWNrbmVzc308L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cIm1heExpbmtUaGlja25lc3NcIiBjbGFzcz1cInNsaWRlclwiIG5hbWU9XCJtYXhMaW5rVGhpY2tuZXNzXCIgbWluPVwiMC4xXCIgbWF4PVwiMTBcIiB2YWx1ZT1cIiR7dGhpcy5tYXhMaW5rVGhpY2tuZXNzfVwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8IS0tIDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGlkPVwibGluZVRoaWNrbmVzc0xhYmVsXCIgZm9yPVwibGluZVRoaWNrbmVzc1wiPkxpbmUgVGhpY2tuZXNzOiAke3RoaXMubGlua1RoaWNrbmVzc308L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cImxpbmVUaGlja25lc3NcIiBjbGFzcz1cInNsaWRlclwiIG5hbWU9XCJsaW5lVGhpY2tuZXNzXCIgIG1pbj1cIjAuMVwiIG1heD1cIjVcIiB2YWx1ZT1cIiR7dGhpcy5saW5rVGhpY2tuZXNzfVwiIHN0ZXA9XCIwLjAxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PiAtLSE+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWl0ZW1cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYXJyb3ctaWNvblwiPiR7cmlnaHRBcnJvd308L3NwYW4+Rm9yY2VzXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cdFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFjY29yZGlvbi1jb250ZW50XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cImNlbnRlckZvcmNlXCIgaWQ9XCJjZW50ZXJGb3JjZUxhYmVsXCI+Q2VudGVyIEZvcmNlOiAke3RoaXMuY2VudGVyRm9yY2V9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJjZW50ZXJGb3JjZVwiIG5hbWU9XCJjZW50ZXJGb3JjZVwiIGNsYXNzPVwic2xpZGVyXCIgbWluPVwiMFwiIG1heD1cIjFcIiB2YWx1ZT1cIiR7dGhpcy5jZW50ZXJGb3JjZX1cIiBzdGVwPVwiMC4wMVwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwicmVwZWxGb3JjZVwiIGlkPVwicmVwZWxGb3JjZUxhYmVsXCI+UmVwZWwgRm9yY2U6ICAke3RoaXMucmVwZWxGb3JjZX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cInJlcGVsRm9yY2VcIiBuYW1lPVwicmVwZWxGb3JjZVwiIGNsYXNzPVwic2xpZGVyXCIgbWluPVwiMFwiIG1heD1cIjE1MDBcIiB2YWx1ZT1cIiR7dGhpcy5yZXBlbEZvcmNlfVwiIHN0ZXA9XCIxXCI+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2xpZGVyLWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJsaW5rRm9yY2VcIiBpZD1cImxpbmtGb3JjZUxhYmVsXCI+TGluayBGb3JjZTogICR7dGhpcy5saW5rRm9yY2V9PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhbmdlXCIgaWQ9XCJsaW5rRm9yY2VcIiBuYW1lPVwibGlua0ZvcmNlXCIgY2xhc3M9XCJzbGlkZXJcIiBtaW49XCIwXCIgbWF4PVwiMVwiIHZhbHVlPVwiICR7dGhpcy5saW5rRm9yY2V9XCIgc3RlcD1cIjAuMDFcIj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cImxpbmtEaXN0YW5jZVwiIGlkPVwibGlua0Rpc3RhbmNlTGFiZWxcIj5MaW5rIERpc3RhbmNlOiAgJHt0aGlzLmxpbmtEaXN0YW5jZX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBpZD1cImxpbmtEaXN0YW5jZVwiIG5hbWU9XCJsaW5rRGlzdGFuY2VcIiBjbGFzcz1cInNsaWRlclwiIG1pbj1cIjEwXCIgbWF4PVwiMjAwXCIgdmFsdWU9XCIke3RoaXMubGlua0Rpc3RhbmNlfVwiIHN0ZXA9XCIxXCI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0YDtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHR0aGlzLmNvbnRlbnRFbC5hcHBlbmRDaGlsZChkcm9wZG93bk1lbnUpO1xuXHRcblx0XHRcdFx0Ly8gVG9nZ2xlIGRyb3Bkb3duIG1lbnUgdmlzaWJpbGl0eSBvbiBzZXR0aW5ncyBpY29uIGNsaWNrXG5cdFx0XHRcdHNldHRpbmdzSWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRkcm9wZG93bk1lbnUuY2xhc3NMaXN0LnRvZ2dsZSgnb3BlbicpO1xuXHRcdFx0XHR9KTtcblx0XG5cdFx0XHRcdC8vIFRvZ2dsZSBhY2NvcmRpb24gY29udGVudCB2aXNpYmlsaXR5IGFuZCBhcnJvdyBpY29uIG9uIGhlYWRlciBjbGlja1xuXHRcdFx0XHRjb25zdCBhY2NvcmRpb25IZWFkZXJzID0gZHJvcGRvd25NZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hY2NvcmRpb24taGVhZGVyJyk7XG5cdFx0XHRcdGFjY29yZGlvbkhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xuXHRcdFx0XHRcdGhlYWRlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRlbnQgPSBoZWFkZXIubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dJY29uID0gaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJy5hcnJvdy1pY29uJyk7XG5cdFxuXHRcdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgYXJyb3dJY29uKSB7IC8vIEFkZCBudWxsIGNoZWNrIGZvciBhcnJvd0ljb25cblx0XHRcdFx0XHRcdFx0Y29udGVudC5jbGFzc0xpc3QudG9nZ2xlKCdzaG93Jyk7XG5cdFx0XHRcdFx0XHRcdGlmIChjb250ZW50LmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyb3dJY29uLmlubmVySFRNTCA9IGRyb3Bkb3duQXJyb3c7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyb3dJY29uLmlubmVySFRNTCA9IHJpZ2h0QXJyb3c7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFxuXHRcdFx0XHQvLyBOb3cgcXVlcnkgdGhlIERPTSBmb3IgdGhlIHNsaWRlciBhbmQgbGFiZWxcblx0XHRcdFx0Y29uc3Qgc2NvcmVUaHJlc2hvbGRTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcmVUaHJlc2hvbGQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBzY29yZVRocmVzaG9sZExhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlLXRocmVzaG9sZC1sYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBub2RlU2l6ZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub2RlU2l6ZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IG5vZGVTaXplTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm9kZVNpemVMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBsaW5lVGhpY2tuZXNzU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmVUaGlja25lc3MnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBsaW5lVGhpY2tuZXNzTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGluZVRoaWNrbmVzc0xhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IGNlbnRlckZvcmNlU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NlbnRlckZvcmNlJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgY2VudGVyRm9yY2VMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZW50ZXJGb3JjZUxhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IHJlcGVsRm9yY2VTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVwZWxGb3JjZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IHJlcGVsRm9yY2VMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXBlbEZvcmNlTGFiZWwnKTtcblx0XHRcdFx0Y29uc3QgbGlua0ZvcmNlU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmtGb3JjZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IGxpbmtGb3JjZUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmtGb3JjZUxhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IGxpbmtEaXN0YW5jZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rRGlzdGFuY2UnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBsaW5rRGlzdGFuY2VMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rRGlzdGFuY2VMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBmYWRlVGhyZXNob2xkU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhZGVUaHJlc2hvbGQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBmYWRlVGhyZXNob2xkTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFkZVRocmVzaG9sZExhYmVsJyk7XG5cdFx0XHRcdGNvbnN0IG1pbkxpbmtUaGlja25lc3NTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWluTGlua1RoaWNrbmVzcycpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdGNvbnN0IG1pbkxpbmtUaGlja25lc3NMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaW5MaW5rVGhpY2tuZXNzTGFiZWwnKTtcblx0XHRcdFx0Y29uc3QgbWF4TGlua1RoaWNrbmVzc1NsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXhMaW5rVGhpY2tuZXNzJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgbWF4TGlua1RoaWNrbmVzc0xhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21heExpbmtUaGlja25lc3NMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBjb25uZWN0aW9uVHlwZVJhZGlvcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9XCJjb25uZWN0aW9uVHlwZVwiXScpO1xuXHRcdFx0XHRjb25zdCBtYXhMYWJlbENoYXJhY3RlcnNTbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWF4TGFiZWxDaGFyYWN0ZXJzJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgbWF4TGFiZWxDaGFyYWN0ZXJzTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWF4TGFiZWxDaGFyYWN0ZXJzTGFiZWwnKTtcblx0XHRcdFx0Y29uc3QgbGlua0xhYmVsU2l6ZVNsaWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rTGFiZWxTaXplJykgYXMgSFRNTElucHV0RWxlbWVudDtcblx0XHRcdFx0Y29uc3QgbGlua0xhYmVsU2l6ZUxhYmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpbmtMYWJlbFNpemVMYWJlbCcpO1xuXHRcdFx0XHRjb25zdCBub2RlTGFiZWxTaXplU2xpZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vZGVMYWJlbFNpemUnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXHRcdFx0XHRjb25zdCBub2RlTGFiZWxTaXplTGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm9kZUxhYmVsU2l6ZUxhYmVsJyk7XG5cblx0XHRcdFx0aWYgKG1heExhYmVsQ2hhcmFjdGVyc1NsaWRlcikge1xuXHRcdFx0XHRcdG1heExhYmVsQ2hhcmFjdGVyc1NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3TWF4TGFiZWxDaGFyYWN0ZXJzID0gcGFyc2VJbnQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgMTApO1xuXHRcdFx0XHRcdFx0aWYgKG1heExhYmVsQ2hhcmFjdGVyc0xhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdG1heExhYmVsQ2hhcmFjdGVyc0xhYmVsLnRleHRDb250ZW50ID0gYE1heCBMYWJlbCBDaGFyYWN0ZXJzOiAke25ld01heExhYmVsQ2hhcmFjdGVyc31gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5tYXhMYWJlbENoYXJhY3RlcnMgPSBuZXdNYXhMYWJlbENoYXJhY3RlcnM7XG5cdFx0XHRcdFx0XHR1cGRhdGVOb2RlTGFiZWxzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobGlua0xhYmVsU2l6ZVNsaWRlcikge1xuXHRcdFx0XHRcdGxpbmtMYWJlbFNpemVTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0xpbmtMYWJlbFNpemUgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGxpbmtMYWJlbFNpemVMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRsaW5rTGFiZWxTaXplTGFiZWwudGV4dENvbnRlbnQgPSBgTGluayBMYWJlbCBTaXplOiAke25ld0xpbmtMYWJlbFNpemV9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMubGlua0xhYmVsU2l6ZSA9IG5ld0xpbmtMYWJlbFNpemU7XG5cdFx0XHRcdFx0XHR1cGRhdGVMaW5rTGFiZWxTaXplcygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG5vZGVMYWJlbFNpemVTbGlkZXIpIHtcblx0XHRcdFx0XHRub2RlTGFiZWxTaXplU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdOb2RlTGFiZWxTaXplID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChub2RlTGFiZWxTaXplTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0bm9kZUxhYmVsU2l6ZUxhYmVsLnRleHRDb250ZW50ID0gYE5vZGUgTGFiZWwgU2l6ZTogJHtuZXdOb2RlTGFiZWxTaXplfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLm5vZGVMYWJlbFNpemUgPSBuZXdOb2RlTGFiZWxTaXplO1xuXHRcdFx0XHRcdFx0dXBkYXRlTm9kZUxhYmVsU2l6ZXMoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIENvbm5lY3Rpb24gVHlwZSBSYWRpb3Mgc2xpZGVyXG5cdFx0XHRcdGlmIChjb25uZWN0aW9uVHlwZVJhZGlvcykge1xuXHRcdFx0XHRcdGNvbm5lY3Rpb25UeXBlUmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xuXHRcdFx0XHRcdFx0cmFkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29ubmVjdGlvblR5cGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmlzQ2hhbmdpbmdDb25uZWN0aW9uVHlwZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVZpc3VhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XHRcblxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgTWluIExpbmsgVGhpY2tuZXNzIHNsaWRlclxuXHRcdFx0XHRpZiAobWluTGlua1RoaWNrbmVzc1NsaWRlcikge1xuXHRcdFx0XHRcdG1pbkxpbmtUaGlja25lc3NTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld01pbkxpbmtUaGlja25lc3MgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKG1pbkxpbmtUaGlja25lc3NMYWJlbCkge1xuXHRcdFx0XHRcdFx0XHRtaW5MaW5rVGhpY2tuZXNzTGFiZWwudGV4dENvbnRlbnQgPSBgTWluIExpbmsgVGhpY2tuZXNzOiAke25ld01pbkxpbmtUaGlja25lc3N9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMubWluTGlua1RoaWNrbmVzcyA9IG5ld01pbkxpbmtUaGlja25lc3M7XG5cdFx0XHRcdFx0XHR1cGRhdGVMaW5rVGhpY2tuZXNzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdC8vIEV2ZW50IGxpc3RlbmVyIGZvciBNYXggTGluayBUaGlja25lc3Mgc2xpZGVyXG5cdFx0XHRcdGlmIChtYXhMaW5rVGhpY2tuZXNzU2xpZGVyKSB7XG5cdFx0XHRcdFx0bWF4TGlua1RoaWNrbmVzc1NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3TWF4TGlua1RoaWNrbmVzcyA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRpZiAobWF4TGlua1RoaWNrbmVzc0xhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdG1heExpbmtUaGlja25lc3NMYWJlbC50ZXh0Q29udGVudCA9IGBNYXggTGluayBUaGlja25lc3M6ICR7bmV3TWF4TGlua1RoaWNrbmVzc31gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5tYXhMaW5rVGhpY2tuZXNzID0gbmV3TWF4TGlua1RoaWNrbmVzcztcblx0XHRcdFx0XHRcdHVwZGF0ZUxpbmtUaGlja25lc3MoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIFRleHQgRmFkZSBUaHJlc2hvbGQgc2xpZGVyXG5cdFx0XHRcdGlmIChmYWRlVGhyZXNob2xkU2xpZGVyKSB7XG5cdFx0XHRcdFx0ZmFkZVRocmVzaG9sZFNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3RmFkZVRocmVzaG9sZCA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRpZiAoZmFkZVRocmVzaG9sZExhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdGZhZGVUaHJlc2hvbGRMYWJlbC50ZXh0Q29udGVudCA9IGBGYWRlIFRocmVzaG9sZDogJHtuZXdGYWRlVGhyZXNob2xkfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRGYWRlVGhyZXNob2xkID0gbmV3RmFkZVRocmVzaG9sZDtcblx0XHRcdFx0XHRcdC8vIFVwZGF0ZSB0aGUgbGFiZWwgb3BhY2l0eSBpbW1lZGlhdGVseSB0byByZWZsZWN0IHRoZSBuZXcgdGhyZXNob2xkXG5cdFx0XHRcdFx0XHR1cGRhdGVMYWJlbE9wYWNpdHkoZDMuem9vbVRyYW5zZm9ybShzdmcubm9kZSgpIGFzIEVsZW1lbnQpLmspO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgQ2VudGVyIEZvcmNlIHNsaWRlclxuXHRcdFx0XHRpZiAoY2VudGVyRm9yY2VTbGlkZXIpIHtcblx0XHRcdFx0XHRjZW50ZXJGb3JjZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3Q2VudGVyRm9yY2UgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGNlbnRlckZvcmNlTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0Y2VudGVyRm9yY2VMYWJlbC50ZXh0Q29udGVudCA9IGBDZW50ZXIgRm9yY2U6ICR7bmV3Q2VudGVyRm9yY2V9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHVwZGF0ZUNlbnRlckZvcmNlKG5ld0NlbnRlckZvcmNlKTtcblx0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdC8vIEV2ZW50IGxpc3RlbmVyIGZvciBSZXBlbCBGb3JjZSBzbGlkZXJcblx0XHRcdFx0aWYgKHJlcGVsRm9yY2VTbGlkZXIpIHtcblx0XHRcdFx0XHRyZXBlbEZvcmNlU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdSZXBlbEZvcmNlID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChyZXBlbEZvcmNlTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0cmVwZWxGb3JjZUxhYmVsLnRleHRDb250ZW50ID0gYFJlcGVsIEZvcmNlOiAke25ld1JlcGVsRm9yY2V9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHVwZGF0ZVJlcGVsRm9yY2UobmV3UmVwZWxGb3JjZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdC8vIEV2ZW50IGxpc3RlbmVyIGZvciBMaW5rIEZvcmNlIHNsaWRlclxuXHRcdFx0XHRpZiAobGlua0ZvcmNlU2xpZGVyKSB7XG5cdFx0XHRcdFx0bGlua0ZvcmNlU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdMaW5rRm9yY2UgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKGxpbmtGb3JjZUxhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdGxpbmtGb3JjZUxhYmVsLnRleHRDb250ZW50ID0gYExpbmsgRm9yY2U6ICR7bmV3TGlua0ZvcmNlfWA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR1cGRhdGVMaW5rRm9yY2UobmV3TGlua0ZvcmNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gRXZlbnQgbGlzdGVuZXIgZm9yIExpbmsgRGlzdGFuY2Ugc2xpZGVyXG5cdFx0XHRcdGlmIChsaW5rRGlzdGFuY2VTbGlkZXIpIHtcblx0XHRcdFx0XHRsaW5rRGlzdGFuY2VTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0xpbmtEaXN0YW5jZSA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHRpZiAobGlua0Rpc3RhbmNlTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0bGlua0Rpc3RhbmNlTGFiZWwudGV4dENvbnRlbnQgPSBgTGluayBEaXN0YW5jZTogJHtuZXdMaW5rRGlzdGFuY2V9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHVwZGF0ZUxpbmtEaXN0YW5jZShuZXdMaW5rRGlzdGFuY2UpO1xuXHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSBjZW50ZXIgZm9yY2UgYmFzZWQgb24gdGhlIHNsaWRlciB2YWx1ZVxuXHRcdFx0XHRjb25zdCB1cGRhdGVDZW50ZXJGb3JjZSA9IChuZXdDZW50ZXJGb3JjZTogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5mb3JjZSgnY2VudGVyJywgbnVsbCk7IC8vIFJlbW92ZSB0aGUgZXhpc3RpbmcgY2VudGVyIGZvcmNlXG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5mb3JjZSgnY2VudGVyJywgZDMuZm9yY2VDZW50ZXIod2lkdGggLyAyLCBoZWlnaHQgLyAyKS5zdHJlbmd0aChuZXdDZW50ZXJGb3JjZSkpOyAvLyBBZGQgdGhlIG5ldyBjZW50ZXIgZm9yY2Vcblx0XHRcdFx0XHRzaW11bGF0aW9uLmFscGhhVGFyZ2V0KDAuMykucmVzdGFydCgpO1xuXHRcdFx0XHRcdHVwZGF0ZUZvcmNlcygpO1xuXHRcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSByZXBlbCBmb3JjZSBiYXNlZCBvbiB0aGUgc2xpZGVyIHZhbHVlXG5cdFx0XHRcdGNvbnN0IHVwZGF0ZVJlcGVsRm9yY2UgPSAobmV3UmVwZWxGb3JjZTogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0KHNpbXVsYXRpb24uZm9yY2UoJ2NoYXJnZScpIGFzIGFueSkuc3RyZW5ndGgoLW5ld1JlcGVsRm9yY2UpO1xuXHRcdFx0XHRcdHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG5cdFx0XHRcdFx0dXBkYXRlRm9yY2VzKCk7XG5cdFxuXHRcdFx0XHR9O1xuXHRcblx0XHRcdFx0Y29uc3QgdXBkYXRlTGlua1RoaWNrbmVzcyA9ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBsaW5rU3Ryb2tlU2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXG5cdFx0XHRcdFx0XHQuZG9tYWluKFt0aGlzLm1pblNjb3JlLCB0aGlzLm1heFNjb3JlXSkgLy8gVXBkYXRlIHRoaXMgdG8gbWF0Y2ggeW91ciBzY29yZSByYW5nZVxuXHRcdFx0XHRcdFx0LnJhbmdlKFt0aGlzLm1pbkxpbmtUaGlja25lc3MsIHRoaXMubWF4TGlua1RoaWNrbmVzc10pO1xuXHRcdFx0XHRcblx0XHRcdFx0XHR0aGlzLmxpbmtTZWxlY3Rpb24uYXR0cignc3Ryb2tlLXdpZHRoJywgKGQ6IGFueSkgPT4gbGlua1N0cm9rZVNjYWxlKGQuc2NvcmUpKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byB1cGRhdGUgbGluayBmb3JjZSBiYXNlZCBvbiB0aGUgc2xpZGVyIHZhbHVlXG5cdFx0XHRcdGNvbnN0IHVwZGF0ZUxpbmtGb3JjZSA9IChuZXdMaW5rRm9yY2U6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdHNpbXVsYXRpb24uZm9yY2UoJ2xpbmsnLCBudWxsKTsgLy8gUmVtb3ZlIHRoZSBleGlzdGluZyBsaW5rIGZvcmNlXG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5mb3JjZSgnbGluaycsIGQzLmZvcmNlTGluayh0aGlzLnZhbGlkYXRlZExpbmtzKS5pZCgoZDogYW55KSA9PiBkLmlkKS5zdHJlbmd0aChuZXdMaW5rRm9yY2UpLmRpc3RhbmNlKHRoaXMubGlua0Rpc3RhbmNlKSk7IC8vIEFkZCB0aGUgbmV3IGxpbmsgZm9yY2Vcblx0XHRcdFx0XHRzaW11bGF0aW9uLmFscGhhVGFyZ2V0KDAuMykucmVzdGFydCgpOyAvLyBTbW9vdGhseSBhZGp1c3Qgd2l0aG91dCBhIGZ1bGwgcmVzdGFydFxuXHRcdFx0XHRcdHVwZGF0ZUZvcmNlcygpO1xuXHRcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSBsaW5rIGRpc3RhbmNlIGJhc2VkIG9uIHRoZSBzbGlkZXIgdmFsdWVcblx0XHRcdFx0Y29uc3QgdXBkYXRlTGlua0Rpc3RhbmNlID0gKG5ld0xpbmtEaXN0YW5jZTogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5mb3JjZSgnbGluaycsIG51bGwpOyAvLyBSZW1vdmUgdGhlIGV4aXN0aW5nIGxpbmsgZm9yY2Vcblx0XHRcdFx0XHRzaW11bGF0aW9uLmZvcmNlKCdsaW5rJywgZDMuZm9yY2VMaW5rKHRoaXMudmFsaWRhdGVkTGlua3MpLmlkKChkOiBhbnkpID0+IGQuaWQpLmRpc3RhbmNlKG5ld0xpbmtEaXN0YW5jZSkuc3RyZW5ndGgodGhpcy5saW5rRm9yY2UpKTsgLy8gQWRkIHRoZSBuZXcgbGluayBmb3JjZSB3aXRoIHRoZSBjdXJyZW50IGRpc3RhbmNlXG5cdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwLjMpLnJlc3RhcnQoKTsgLy8gU21vb3RobHkgYWRqdXN0IHdpdGhvdXQgYSBmdWxsIHJlc3RhcnRcblx0XHRcdFx0XHR1cGRhdGVGb3JjZXMoKTtcblx0XG5cdFx0XHRcdH07XG5cdFxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byBlbnN1cmUgbmV0d29yayBzdG9wcyBpbiBjYXNlIG5vZGVzIGdldCBqaXR0ZXJ5XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZUZvcmNlcyA9ICgpID0+IHtcblx0XHRcdFx0XHRzaW11bGF0aW9uLmFscGhhKDAuMykucmVzdGFydCgpOyAvLyBSZXN0YXJ0IHRoZSBzaW11bGF0aW9uIHdpdGggaW5pdGlhbCBhbHBoYVxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwKS5zdG9wKCk7IC8vIFN0b3AgdGhlIHNpbXVsYXRpb24gYWZ0ZXIgNSBzZWNvbmRzXG5cdFx0XHRcdFx0fSwgMjAwMCk7IFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRcblx0XHRcdFx0Ly8gRnVuY3Rpb24gdG8gdXBkYXRlIG5vZGUgc2l6ZXMgYmFzZWQgb24gdGhlIHNsaWRlciB2YWx1ZVxuXHRcdFx0XHRjb25zdCB1cGRhdGVOb2RlU2l6ZXMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ub2RlU2VsZWN0aW9uLmF0dHIoJ3InLCAoZDogYW55KSA9PiBkLmlkID09PSB0aGlzLmNlbnRyYWxOb2RlLmlkID8gdGhpcy5ub2RlU2l6ZSArIDMgOiB0aGlzLm5vZGVTaXplKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZU5vZGVMYWJlbHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5sYWJlbFNlbGVjdGlvblxuXHRcdFx0XHRcdFx0LmF0dHIoJ2ZvbnQtc2l6ZScsIHRoaXMubm9kZUxhYmVsU2l6ZSkgLy8gVXBkYXRlIGZvbnQgc2l6ZSBmb3Igbm9kZSBsYWJlbHNcblx0XHRcdFx0XHRcdC50ZXh0KChkOiBhbnkpID0+IHRoaXMuZm9ybWF0TGFiZWwoZC5uYW1lLCB0cnVlKSk7IC8vIFVwZGF0ZSB0ZXh0IGJhc2VkIG9uIG1heCBsYWJlbCBjaGFyYWN0ZXJzXG5cdFx0XHRcdH07XG5cdFx0XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZUxpbmtMYWJlbFNpemVzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGlua0xhYmVsU2VsZWN0aW9uLmF0dHIoJ2ZvbnQtc2l6ZScsIHRoaXMubGlua0xhYmVsU2l6ZSk7IC8vIFVwZGF0ZSBmb250IHNpemUgZm9yIGxpbmsgbGFiZWxzXG5cdFx0XHRcdH07XG5cdFx0XG5cdFx0XHRcdGNvbnN0IHVwZGF0ZU5vZGVMYWJlbFNpemVzID0gKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCd1cGRhdGluZyBub2RlIGxhYmVscycsIHRoaXMubm9kZUxhYmVsU2l6ZSk7XG5cdFx0XHRcdFx0dGhpcy5sYWJlbFNlbGVjdGlvbi5hdHRyKCdmb250LXNpemUnLCB0aGlzLm5vZGVMYWJlbFNpemUpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRcblxuXHRcdFx0XHQvLyBGdW5jdGlvbiB0byBkZWJvdW5jZSBjYWxscyB0byB1cGRhdGVWaXN1YWxpemF0aW9uXG5cdFx0XHRcdGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmM6IEZ1bmN0aW9uLCB3YWl0OiBudW1iZXIpIHtcblx0XHRcdFx0XHRsZXQgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0dGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IGZ1bmMuYXBwbHkodGhpcywgYXJncyksIHdhaXQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XG5cdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgU2NvcmUgVGhyZXNob2xkIHNsaWRlclxuXHRcdFx0XHRpZiAoc2NvcmVUaHJlc2hvbGRTbGlkZXIgICYmICF0aGlzLnNldHRpbmdzSW5zdGFudGlhdGVkKSB7XG5cdFx0XHRcdFx0Ly8gSW1tZWRpYXRlIHVwZGF0ZSBvZiBsYWJlbCB0ZXh0XG5cdFx0XHRcdFx0c2NvcmVUaHJlc2hvbGRTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld1Njb3JlVGhyZXNob2xkID0gcGFyc2VGbG9hdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcblx0XHRcdFx0XHRcdGlmIChzY29yZVRocmVzaG9sZExhYmVsKSB7XG5cdFx0XHRcdFx0XHRcdHNjb3JlVGhyZXNob2xkTGFiZWwudGV4dENvbnRlbnQgPSBgTWluIFJlbGV2YW5jZTogJHtuZXdTY29yZVRocmVzaG9sZH1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0XHQvLyBEZWJvdW5jZWQgdXBkYXRlVmlzdWFsaXphdGlvbiBmdW5jdGlvblxuXHRcdFx0XHRcdGNvbnN0IGRlYm91bmNlZFVwZGF0ZVZpc3VhbGl6YXRpb24gPSBkZWJvdW5jZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdTY29yZVRocmVzaG9sZCA9IHBhcnNlRmxvYXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG5cdFx0XHRcdFx0XHR1cGRhdGVWaXN1YWxpemF0aW9uKG5ld1Njb3JlVGhyZXNob2xkKTtcblx0XHRcdFx0XHR9LCA1MDApOyAvLyBBZGp1c3QgdGhlIGRlbGF5ICg1MDBtcykgYXMgbmVlZGVkXG5cdFxuXHRcdFx0XHRcdHNjb3JlVGhyZXNob2xkU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZGVib3VuY2VkVXBkYXRlVmlzdWFsaXphdGlvbik7XG5cdFxuXHRcdFx0XHRcdHRoaXMuc2V0dGluZ3NJbnN0YW50aWF0ZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgTm9kZSBTaXplIHNsaWRlclxuXHRcdFx0XHRpZiAobm9kZVNpemVTbGlkZXIpIHtcblx0XHRcdFx0XHRub2RlU2l6ZVNsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3Tm9kZVNpemUgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0aWYgKG5vZGVTaXplTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0bm9kZVNpemVMYWJlbC50ZXh0Q29udGVudCA9IGBOb2RlIFNpemU6ICR7bmV3Tm9kZVNpemV9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMubm9kZVNpemUgPSBuZXdOb2RlU2l6ZTtcblx0XHRcdFx0XHRcdHVwZGF0ZU5vZGVTaXplcygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHQvLyBFdmVudCBsaXN0ZW5lciBmb3IgTGluayBUaGlja25lc3Mgc2xpZGVyXG5cdFx0XHRcdGlmIChsaW5lVGhpY2tuZXNzU2xpZGVyKSB7XG5cdFx0XHRcdFx0bGluZVRoaWNrbmVzc1NsaWRlci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ2xpbmUgdGhpY2tpbmcnKTtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0xpbmVUaGlja25lc3MgPSBwYXJzZUZsb2F0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy5saW5rVGhpY2tuZXNzID0gbmV3TGluZVRoaWNrbmVzcztcblx0XHRcdFx0XHRcdGlmIChsaW5lVGhpY2tuZXNzTGFiZWwpIHtcblx0XHRcdFx0XHRcdFx0bGluZVRoaWNrbmVzc0xhYmVsLnRleHRDb250ZW50ID0gYExpbmUgVGhpY2tuZXNzOiAke25ld0xpbmVUaGlja25lc3N9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHVwZGF0ZUxpbmtUaGlja25lc3MoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcblx0XHRcdFx0Ly8gQ2xvc2UgZHJvcGRvd24gbWVudSBvbiBYIGljb24gY2xpY2tcblx0XHRcdFx0Y29uc3QgY2xvc2VJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nsb3NlLWljb24nKTtcblx0XHRcdFx0aWYgKGNsb3NlSWNvbikge1xuXHRcdFx0XHRcdGNsb3NlSWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdDbG9zZSBpY29uIENMSUNLRUQnKTtcblx0XG5cdFx0XHRcdFx0XHRkcm9wZG93bk1lbnUuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHQvLyBSZWZyZXNoIGZ1bmN0aW9uYWxpdHkgZm9yIHJlZnJlc2ggaWNvbiBjbGljayAob3B0aW9uYWwsIGltcGxlbWVudCBhcyBuZWVkZWQpXG5cdFx0XHRcdGNvbnN0IHJlZnJlc2hJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZnJlc2gtaWNvbicpO1xuXHRcdFx0XHRpZiAocmVmcmVzaEljb24pIHtcblx0XHRcdFx0XHRyZWZyZXNoSWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdSZWZyZXNoIGljb24gY2xpY2tlZCcpO1xuXHRcdFx0XHRcdFx0cmVzZXRUb0RlZmF1bHQoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XG5cdFx0XHRcdC8vIEZ1bmN0aW9uIHRvIHJlc2V0IGFsbCB2YXJpYWJsZXMgdG8gZGVmYXVsdCB1c2luZyB0aGUgZ2xvYmFsIGRlZmF1bHQgY29uc3RhbnRcblx0XHRcdFx0Y29uc3QgcmVzZXRUb0RlZmF1bHQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZCA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5zY29yZVRocmVzaG9sZDtcblx0XHRcdFx0XHR0aGlzLm5vZGVTaXplID0gREVGQVVMVF9ORVRXT1JLX1NFVFRJTkdTLm5vZGVTaXplO1xuXHRcdFx0XHRcdHRoaXMubGlua1RoaWNrbmVzcyA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5saW5rVGhpY2tuZXNzO1xuXHRcdFx0XHRcdHRoaXMucmVwZWxGb3JjZSA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5yZXBlbEZvcmNlO1xuXHRcdFx0XHRcdHRoaXMubGlua0ZvcmNlID0gREVGQVVMVF9ORVRXT1JLX1NFVFRJTkdTLmxpbmtGb3JjZTtcblx0XHRcdFx0XHR0aGlzLmxpbmtEaXN0YW5jZSA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5saW5rRGlzdGFuY2U7XG5cdFx0XHRcdFx0dGhpcy5jZW50ZXJGb3JjZSA9IERFRkFVTFRfTkVUV09SS19TRVRUSU5HUy5jZW50ZXJGb3JjZTtcblx0XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIHNsaWRlciB2YWx1ZXNcblx0XHRcdFx0XHRpZiAoc2NvcmVUaHJlc2hvbGRTbGlkZXIpIHNjb3JlVGhyZXNob2xkU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZH1gO1xuXHRcdFx0XHRcdGlmIChzY29yZVRocmVzaG9sZExhYmVsKSBzY29yZVRocmVzaG9sZExhYmVsLnRleHRDb250ZW50ID0gYHJlbGV2YW5jZSBUaHJlc2hvbGQ6ICR7dGhpcy5yZWxldmFuY2VTY29yZVRocmVzaG9sZH1gO1xuXHRcdFx0XHRcdGlmIChub2RlU2l6ZVNsaWRlcikgbm9kZVNpemVTbGlkZXIudmFsdWUgPSBgJHt0aGlzLm5vZGVTaXplfWA7XG5cdFx0XHRcdFx0aWYgKG5vZGVTaXplTGFiZWwpIG5vZGVTaXplTGFiZWwudGV4dENvbnRlbnQgPSBgTm9kZSBTaXplOiAke3RoaXMubm9kZVNpemV9YDtcblx0XHRcdFx0XHRpZiAobGluZVRoaWNrbmVzc1NsaWRlcikgbGluZVRoaWNrbmVzc1NsaWRlci52YWx1ZSA9IGAke3RoaXMubGlua1RoaWNrbmVzc31gO1xuXHRcdFx0XHRcdGlmIChsaW5lVGhpY2tuZXNzTGFiZWwpIGxpbmVUaGlja25lc3NMYWJlbC50ZXh0Q29udGVudCA9IGBMaW5lIFRoaWNrbmVzczogJHt0aGlzLmxpbmtUaGlja25lc3N9YDtcblx0XHRcdFx0XHRpZiAoY2VudGVyRm9yY2VTbGlkZXIpIGNlbnRlckZvcmNlU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5jZW50ZXJGb3JjZX1gO1xuXHRcdFx0XHRcdGlmIChjZW50ZXJGb3JjZUxhYmVsKSBjZW50ZXJGb3JjZUxhYmVsLnRleHRDb250ZW50ID0gYENlbnRlciBGb3JjZTogJHt0aGlzLmNlbnRlckZvcmNlfWA7XG5cdFx0XHRcdFx0aWYgKHJlcGVsRm9yY2VTbGlkZXIpIHJlcGVsRm9yY2VTbGlkZXIudmFsdWUgPSBgJHt0aGlzLnJlcGVsRm9yY2V9YDtcblx0XHRcdFx0XHRpZiAocmVwZWxGb3JjZUxhYmVsKSByZXBlbEZvcmNlTGFiZWwudGV4dENvbnRlbnQgPSBgUmVwZWwgRm9yY2U6ICR7dGhpcy5yZXBlbEZvcmNlfWA7XG5cdFx0XHRcdFx0aWYgKGxpbmtGb3JjZVNsaWRlcikgbGlua0ZvcmNlU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5saW5rRm9yY2V9YDtcblx0XHRcdFx0XHRpZiAobGlua0ZvcmNlTGFiZWwpIGxpbmtGb3JjZUxhYmVsLnRleHRDb250ZW50ID0gYExpbmsgRm9yY2U6ICR7dGhpcy5saW5rRm9yY2V9YDtcblx0XHRcdFx0XHRpZiAobGlua0Rpc3RhbmNlU2xpZGVyKSBsaW5rRGlzdGFuY2VTbGlkZXIudmFsdWUgPSBgJHt0aGlzLmxpbmtEaXN0YW5jZX1gO1xuXHRcdFx0XHRcdGlmIChsaW5rRGlzdGFuY2VMYWJlbCkgbGlua0Rpc3RhbmNlTGFiZWwudGV4dENvbnRlbnQgPSBgTGluayBEaXN0YW5jZTogJHt0aGlzLmxpbmtEaXN0YW5jZX1gO1xuXHRcdFx0XHRcdGlmIChmYWRlVGhyZXNob2xkU2xpZGVyKSBmYWRlVGhyZXNob2xkU2xpZGVyLnZhbHVlID0gYCR7dGhpcy50ZXh0RmFkZVRocmVzaG9sZH1gO1xuXHRcdFx0XHRcdGlmIChmYWRlVGhyZXNob2xkTGFiZWwpIGZhZGVUaHJlc2hvbGRMYWJlbC50ZXh0Q29udGVudCA9IGBGYWRlIFRocmVzaG9sZDogJHt0aGlzLnRleHRGYWRlVGhyZXNob2xkfWA7XG5cdFx0XHRcdFx0aWYgKG1pbkxpbmtUaGlja25lc3NTbGlkZXIpIG1pbkxpbmtUaGlja25lc3NTbGlkZXIudmFsdWUgPSBgJHt0aGlzLm1pbkxpbmtUaGlja25lc3N9YDtcblx0XHRcdFx0XHRpZiAobWluTGlua1RoaWNrbmVzc0xhYmVsKSBtaW5MaW5rVGhpY2tuZXNzTGFiZWwudGV4dENvbnRlbnQgPSBgTWluIExpbmsgVGhpY2tuZXNzOiAke3RoaXMubWluTGlua1RoaWNrbmVzc31gO1xuXHRcdFx0XHRcdGlmIChtYXhMaW5rVGhpY2tuZXNzU2xpZGVyKSBtYXhMaW5rVGhpY2tuZXNzU2xpZGVyLnZhbHVlID0gYCR7dGhpcy5tYXhMaW5rVGhpY2tuZXNzfWA7XG5cdFx0XHRcdFx0aWYgKG1heExpbmtUaGlja25lc3NMYWJlbCkgbWF4TGlua1RoaWNrbmVzc0xhYmVsLnRleHRDb250ZW50ID0gYE1heCBMaW5rIFRoaWNrbmVzczogJHt0aGlzLm1heExpbmtUaGlja25lc3N9YDtcblxuXHRcdFx0XHRcdC8vIFJlYXBwbHkgc2V0dGluZ3Ncblx0XHRcdFx0XHR1cGRhdGVOb2RlU2l6ZXMoKTtcblx0XHRcdFx0XHR1cGRhdGVMaW5rVGhpY2tuZXNzKCk7XG5cdFxuXHRcdFx0XHRcdC8vIFVwZGF0ZSB0aGUgc2ltdWxhdGlvbiBmb3JjZXNcblx0XHRcdFx0XHRzaW11bGF0aW9uXG5cdFx0XHRcdFx0XHQuZm9yY2UoJ2NlbnRlcicsIGQzLmZvcmNlQ2VudGVyKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMikuc3RyZW5ndGgodGhpcy5jZW50ZXJGb3JjZSkpXG5cdFx0XHRcdFx0XHQuZm9yY2UoJ2NoYXJnZScsIGQzLmZvcmNlTWFueUJvZHkoKS5zdHJlbmd0aCgtdGhpcy5yZXBlbEZvcmNlKSlcblx0XHRcdFx0XHRcdC5mb3JjZSgnbGluaycsIGQzLmZvcmNlTGluaygpLmlkKChkOiBhbnkpID0+IGQuaWQpLnN0cmVuZ3RoKHRoaXMubGlua0ZvcmNlKS5kaXN0YW5jZSh0aGlzLmxpbmtEaXN0YW5jZSkpO1xuXHRcblx0XHRcdFx0XHQvLyBSZXN0YXJ0IHRoZSBzaW11bGF0aW9uIHdpdGggdGhlIG5ldyBzZXR0aW5nc1xuXHRcdFx0XHRcdHNpbXVsYXRpb24uYWxwaGEoMC4zKS5hbHBoYVRhcmdldCgwKS5yZXN0YXJ0KCk7XG5cdFx0XHRcdFx0dXBkYXRlVmlzdWFsaXphdGlvbih0aGlzLnJlbGV2YW5jZVNjb3JlVGhyZXNob2xkKTtcblx0XHRcdFx0fTtcblx0XG5cdFxuXHRcdFx0dGhpcy5zZXR0aW5nc0luc3RhbnRpYXRlZCA9IHRydWU7XG5cdFxuXHRcdH1cblx0XG5cdFx0XHQvLyBXYXRjaCBmb3IgY2hhbmdlcyBpbiB0aGUgY3VycmVudGx5IHZpZXdlZCBub3RlXG5cdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtb3BlbicsIChmaWxlKSA9PiB7XG5cdFx0XHRcdGlmIChmaWxlICYmICh0aGlzLmN1cnJlbnROb3RlS2V5ICE9PSBmaWxlLnBhdGgpICYmICF0aGlzLmlzSG92ZXJpbmcpIHtcblx0XHRcdFx0XHQvLyBpZiAoIXRoaXMudXBkYXRpbmdWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmN1cnJlbnROb3RlS2V5ID0gZmlsZS5wYXRoO1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0N1cnJlbnQgTm90ZSBLZXk6JywgdGhpcy5jdXJyZW50Tm90ZUtleSk7XG5cdFx0XHRcdFx0XHR1cGRhdGVWaXN1YWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcblx0XHRcdC8vIEluaXRpYWwgY2FsbCB0byBjcmVhdGUgdGhlIHZpc3VhbGl6YXRpb25cblx0XHRcdHVwZGF0ZVZpc3VhbGl6YXRpb24oKTtcblx0XG5cdFx0fSwgMTAwMCk7XG5cblx0fVxuXG59XG4vKlxuXHRNYWluIENvbG9yc1xuXHRNZW51IHRleHQ6ICNhM2FlY2Jcblx0SG92ZXJlZE92ZXJOb2RlOiAjZDQ2ZWJlXG5cdE5vcm1hbE5vZGU6ICM5MjZlYzlcblx0Y2VudHJhbE5vZGU6ICM3Yzg1OTRcblx0TGluazogIzRjNzc4N1xuXHRTbGlkZXJLbm9iOiAjZjNlZTVkXG4qL1xuXHRcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjR3JhcGhWaWV3IGV4dGVuZHMgUGx1Z2luIHtcbiAgICBzZXR0aW5nczogU2NHcmFwaFZpZXdTZXR0aW5ncztcblxuICAgIGFzeW5jIG9ubG9hZCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyB2aWV3XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaWV3KFwiU21hcnQgR3JhcGggVmlld1wiLCAobGVhZjogV29ya3NwYWNlTGVhZikgPT4gbmV3IE15SXRlbVZpZXcobGVhZikpO1xuXG5cdFx0XHRcdC8vIFJlZ2lzdGVyIGhvdmVyIGxpbmsgc291cmNlXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJIb3ZlckxpbmtTb3VyY2UoJ1NtYXJ0IEdyYXBoJywge1xuXHRcdFx0XHRcdGRpc3BsYXk6ICdTbWFydCBHcmFwaCBIb3ZlciBMaW5rIFNvdXJjZScsXG5cdFx0XHRcdFx0ZGVmYXVsdE1vZDogdHJ1ZVxuXHRcdFx0XHR9KTtcblxuICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gaWNvbiBpbiB0aGUgbGVmdCByaWJib24uXG4gICAgICAgIGNvbnN0IHJpYmJvbkljb25FbCA9IHRoaXMuYWRkUmliYm9uSWNvbignZ2l0LWZvcmsnLCAnU21hcnQgR3JhcGgnLCAoZXZ0OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGljb24uXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbGVhZiBpbiB0aGUgY3VycmVudCB3b3Jrc3BhY2VcbiAgICAgICAgICAgIGxldCBsZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYodHJ1ZSk7XG4gICAgXG4gICAgICAgICAgICAvLyBTZXQgdGhlIG5ldyBsZWFmJ3MgdmlldyB0byB5b3VyIGN1c3RvbSB2aWV3XG4gICAgICAgICAgICBsZWFmLnNldFZpZXdTdGF0ZSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTbWFydCBHcmFwaCBWaWV3XCIsXG4gICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC8vIFBlcmZvcm0gYWRkaXRpb25hbCB0aGluZ3Mgd2l0aCB0aGUgcmliYm9uXG4gICAgICAgIHJpYmJvbkljb25FbC5hZGRDbGFzcygnbXktcGx1Z2luLXJpYmJvbi1jbGFzcycpO1xuXG4gICAgICAgIC8vIFRoaXMgYWRkcyBhIHN0YXR1cyBiYXIgaXRlbSB0byB0aGUgYm90dG9tIG9mIHRoZSBhcHAuIERvZXMgbm90IHdvcmsgb24gbW9iaWxlIGFwcHMuXG4gICAgICAgIGNvbnN0IHN0YXR1c0Jhckl0ZW1FbCA9IHRoaXMuYWRkU3RhdHVzQmFySXRlbSgpO1xuICAgICAgICBzdGF0dXNCYXJJdGVtRWwuc2V0VGV4dCgnU3RhdHVzIEJhciBUZXh0Jyk7XG5cbiAgICAgICAgLy8gVGhpcyBhZGRzIGEgc2ltcGxlIGNvbW1hbmQgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGFueXdoZXJlXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ29wZW4tc2FtcGxlLW1vZGFsLXNpbXBsZScsXG4gICAgICAgICAgICBuYW1lOiAnT3BlbiBzYW1wbGUgbW9kYWwgKHNpbXBsZSknLFxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbGVhZiBpbiB0aGUgY3VycmVudCB3b3Jrc3BhY2VcbiAgICAgICAgICAgICAgICBsZXQgbGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKHRydWUpO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG5ldyBsZWFmJ3MgdmlldyB0byB5b3VyIGN1c3RvbSB2aWV3XG4gICAgICAgICAgICAgICAgbGVhZi5zZXRWaWV3U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIlNtYXJ0IEdyYXBoIFZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gLy8gVGhpcyBhZGRzIGFuIGVkaXRvciBjb21tYW5kIHRoYXQgY2FuIHBlcmZvcm0gc29tZSBvcGVyYXRpb24gb24gdGhlIGN1cnJlbnQgZWRpdG9yIGluc3RhbmNlXG4gICAgICAgIC8vIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgIC8vICAgICBpZDogJ3NhbXBsZS1lZGl0b3ItY29tbWFuZCcsXG4gICAgICAgIC8vICAgICBuYW1lOiAnU2FtcGxlIGVkaXRvciBjb21tYW5kJyxcbiAgICAgICAgLy8gICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGxlYWYgaW4gdGhlIGN1cnJlbnQgd29ya3NwYWNlXG4gICAgICAgIC8vICAgICAgICAgbGV0IGxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZih0cnVlKTtcbiAgICAgICAgXG4gICAgICAgIC8vICAgICAgICAgLy8gU2V0IHRoZSBuZXcgbGVhZidzIHZpZXcgdG8geW91ciBjdXN0b20gdmlld1xuICAgICAgICAvLyAgICAgICAgIGxlYWYuc2V0Vmlld1N0YXRlKHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogXCJTbWFydCBHcmFwaCBWaWV3XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgLy8gVGhpcyBhZGRzIGEgY29tcGxleCBjb21tYW5kIHRoYXQgY2FuIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcCBhbGxvd3MgZXhlY3V0aW9uIG9mIHRoZSBjb21tYW5kXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ29wZW4tc2FtcGxlLW1vZGFsLWNvbXBsZXgnLFxuICAgICAgICAgICAgbmFtZTogJ09wZW4gc2FtcGxlIG1vZGFsIChjb21wbGV4KScsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBsZWFmIGluIHRoZSBjdXJyZW50IHdvcmtzcGFjZVxuICAgICAgICAgICAgICAgIGxldCBsZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYodHJ1ZSk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgbmV3IGxlYWYncyB2aWV3IHRvIHlvdXIgY3VzdG9tIHZpZXdcbiAgICAgICAgICAgICAgICBsZWFmLnNldFZpZXdTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiU21hcnQgR3JhcGggVmlld1wiLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIC8vIFRoaXMgYWRkcyBhIHNldHRpbmdzIHRhYiBzbyB0aGUgdXNlciBjYW4gY29uZmlndXJlIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGx1Z2luXG4gICAgICAgIC8vIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgU2FtcGxlU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG5cdFx0XHRcdC8vIElmIHRoZSBwbHVnaW4gaG9va3MgdXAgYW55IGdsb2JhbCBET00gZXZlbnRzIChvbiBwYXJ0cyBvZiB0aGUgYXBwIHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBwbHVnaW4pXG4gICAgICAgIC8vIFVzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgd2hlbiB0aGlzIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAgICAgICAgdGhpcy5yZWdpc3RlckRvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snLCAoZXZ0OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2NsaWNrJywgZXZ0KTtcblx0XHRcdFx0fSk7XG5cbiAgICAgICAgLy8gLy8gV2hlbiByZWdpc3RlcmluZyBpbnRlcnZhbHMsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNsZWFyIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gICAgICAgIC8vIHRoaXMucmVnaXN0ZXJJbnRlcnZhbCh3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gY29uc29sZS5sb2coJ3NldEludGVydmFsJyksIDUgKiA2MCAqIDEwMDApKTtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHt9XG5cbiAgICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG59XG5cbi8vIGNsYXNzIFNhbXBsZVNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbi8vICAgICBwbHVnaW46IFNjR3JhcGhWaWV3O1xuXG4vLyAgICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogU2NHcmFwaFZpZXcpIHtcbi8vICAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuLy8gICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbi8vICAgICB9XG5cbi8vICAgICBkaXNwbGF5KCk6IHZvaWQge1xuLy8gICAgICAgICBjb25zdCB7Y29udGFpbmVyRWx9ID0gdGhpcztcblxuLy8gICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4vLyAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuLy8gICAgICAgICAgICAgLnNldE5hbWUoJ1NldHRpbmcgIzEnKVxuLy8gICAgICAgICAgICAgLnNldERlc2MoJ0l0XFwncyBhIHNlY3JldCcpXG4vLyAgICAgICAgICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHRcbi8vICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIHlvdXIgc2VjcmV0Li4uIFRoaXMgd2lsbCBjaGFuZ2UgZXZlcnl0aGluZycpXG4vLyAgICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm15U2V0dGluZylcbi8vICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm15U2V0dGluZyA9IHZhbHVlO1xuLy8gICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbi8vICAgICAgICAgICAgICAgICB9KSk7XG4vLyAgICAgfVxuLy8gfSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA9PSBudWxsIHx8IGIgPT0gbnVsbCA/IE5hTiA6IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA9PSBudWxsIHx8IGIgPT0gbnVsbCA/IE5hTlxuICAgIDogYiA8IGEgPyAtMVxuICAgIDogYiA+IGEgPyAxXG4gICAgOiBiID49IGEgPyAwXG4gICAgOiBOYU47XG59XG4iLCAiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBkZXNjZW5kaW5nIGZyb20gXCIuL2Rlc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmlzZWN0b3IoZikge1xuICBsZXQgY29tcGFyZTEsIGNvbXBhcmUyLCBkZWx0YTtcblxuICAvLyBJZiBhbiBhY2Nlc3NvciBpcyBzcGVjaWZpZWQsIHByb21vdGUgaXQgdG8gYSBjb21wYXJhdG9yLiBJbiB0aGlzIGNhc2Ugd2VcbiAgLy8gY2FuIHRlc3Qgd2hldGhlciB0aGUgc2VhcmNoIHZhbHVlIGlzIChzZWxmLSkgY29tcGFyYWJsZS4gV2UgY2FuXHUyMDE5dCBkbyB0aGlzXG4gIC8vIGZvciBhIGNvbXBhcmF0b3IgKGV4Y2VwdCBmb3Igc3BlY2lmaWMsIGtub3duIGNvbXBhcmF0b3JzKSBiZWNhdXNlIHdlIGNhblx1MjAxOXRcbiAgLy8gdGVsbCBpZiB0aGUgY29tcGFyYXRvciBpcyBzeW1tZXRyaWMsIGFuZCBhbiBhc3ltbWV0cmljIGNvbXBhcmF0b3IgY2FuXHUyMDE5dCBiZVxuICAvLyB1c2VkIHRvIHRlc3Qgd2hldGhlciBhIHNpbmdsZSB2YWx1ZSBpcyBjb21wYXJhYmxlLlxuICBpZiAoZi5sZW5ndGggIT09IDIpIHtcbiAgICBjb21wYXJlMSA9IGFzY2VuZGluZztcbiAgICBjb21wYXJlMiA9IChkLCB4KSA9PiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgZGVsdGEgPSAoZCwgeCkgPT4gZihkKSAtIHg7XG4gIH0gZWxzZSB7XG4gICAgY29tcGFyZTEgPSBmID09PSBhc2NlbmRpbmcgfHwgZiA9PT0gZGVzY2VuZGluZyA/IGYgOiB6ZXJvO1xuICAgIGNvbXBhcmUyID0gZjtcbiAgICBkZWx0YSA9IGY7XG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiByaWdodChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPD0gMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIHplcm8oKSB7XG4gIHJldHVybiAwO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3IuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbmNvbnN0IGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgY29uc3QgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG5leHBvcnQgY29uc3QgYmlzZWN0TGVmdCA9IGFzY2VuZGluZ0Jpc2VjdC5sZWZ0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdENlbnRlciA9IGJpc2VjdG9yKG51bWJlcikuY2VudGVyO1xuZXhwb3J0IGRlZmF1bHQgYmlzZWN0UmlnaHQ7XG4iLCAiY29uc3QgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICBlNSA9IE1hdGguc3FydCgxMCksXG4gICAgZTIgPSBNYXRoLnNxcnQoMik7XG5cbmZ1bmN0aW9uIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBjb25zdCBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChzdGVwKSksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpLFxuICAgICAgZmFjdG9yID0gZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxO1xuICBsZXQgaTEsIGkyLCBpbmM7XG4gIGlmIChwb3dlciA8IDApIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgLXBvd2VyKSAvIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgKiBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wICogaW5jKTtcbiAgICBpZiAoaTEgLyBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgLyBpbmMgPiBzdG9wKSAtLWkyO1xuICAgIGluYyA9IC1pbmM7XG4gIH0gZWxzZSB7XG4gICAgaW5jID0gTWF0aC5wb3coMTAsIHBvd2VyKSAqIGZhY3RvcjtcbiAgICBpMSA9IE1hdGgucm91bmQoc3RhcnQgLyBpbmMpO1xuICAgIGkyID0gTWF0aC5yb3VuZChzdG9wIC8gaW5jKTtcbiAgICBpZiAoaTEgKiBpbmMgPCBzdGFydCkgKytpMTtcbiAgICBpZiAoaTIgKiBpbmMgPiBzdG9wKSAtLWkyO1xuICB9XG4gIGlmIChpMiA8IGkxICYmIDAuNSA8PSBjb3VudCAmJiBjb3VudCA8IDIpIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQgKiAyKTtcbiAgcmV0dXJuIFtpMSwgaTIsIGluY107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKCEoY291bnQgPiAwKSkgcmV0dXJuIFtdO1xuICBpZiAoc3RhcnQgPT09IHN0b3ApIHJldHVybiBbc3RhcnRdO1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBbaTEsIGkyLCBpbmNdID0gcmV2ZXJzZSA/IHRpY2tTcGVjKHN0b3AsIHN0YXJ0LCBjb3VudCkgOiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpO1xuICBpZiAoIShpMiA+PSBpMSkpIHJldHVybiBbXTtcbiAgY29uc3QgbiA9IGkyIC0gaTEgKyAxLCB0aWNrcyA9IG5ldyBBcnJheShuKTtcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkyIC0gaSkgKiBpbmM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluYyA8IDApIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpIC8gLWluYztcbiAgICBlbHNlIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB0aWNrc1tpXSA9IChpMSArIGkpICogaW5jO1xuICB9XG4gIHJldHVybiB0aWNrcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICByZXR1cm4gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KVsyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgY29uc3QgcmV2ZXJzZSA9IHN0b3AgPCBzdGFydCwgaW5jID0gcmV2ZXJzZSA/IHRpY2tJbmNyZW1lbnQoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgcmV0dXJuIChyZXZlcnNlID8gLTEgOiAxKSAqIChpbmMgPCAwID8gMSAvIC1pbmMgOiBpbmMpO1xufVxuIiwgInZhciBub29wID0ge3ZhbHVlOiAoKSA9PiB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSB8fCAvW1xccy5dLy50ZXN0KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwgImV4cG9ydCB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeGh0bWw6IHhodG1sLFxuICB4bGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxufTtcbiIsICJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLCAiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsICJmdW5jdGlvbiBub25lKCkge31cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG59XG4iLCAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwgIi8vIEdpdmVuIHNvbWV0aGluZyBhcnJheSBsaWtlIChvciBudWxsKSwgcmV0dXJucyBzb21ldGhpbmcgdGhhdCBpcyBzdHJpY3RseSBhblxuLy8gYXJyYXkuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBhcnJheS1saWtlIG9iamVjdHMgcGFzc2VkIHRvIGQzLnNlbGVjdEFsbFxuLy8gb3Igc2VsZWN0aW9uLnNlbGVjdEFsbCBhcmUgY29udmVydGVkIGludG8gcHJvcGVyIGFycmF5cyB3aGVuIGNyZWF0aW5nIGFcbi8vIHNlbGVjdGlvbjsgd2UgZG9uXHUyMDE5dCBldmVyIHdhbnQgdG8gY3JlYXRlIGEgc2VsZWN0aW9uIGJhY2tlZCBieSBhIGxpdmVcbi8vIEhUTUxDb2xsZWN0aW9uIG9yIE5vZGVMaXN0LiBIb3dldmVyLCBub3RlIHRoYXQgc2VsZWN0aW9uLnNlbGVjdEFsbCB3aWxsIHVzZSBhXG4vLyBzdGF0aWMgTm9kZUxpc3QgYXMgYSBncm91cCwgc2luY2UgaXQgc2FmZWx5IGRlcml2ZWQgZnJvbSBxdWVyeVNlbGVjdG9yQWxsLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJyYXkoeCkge1xuICByZXR1cm4geCA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KHgpID8geCA6IEFycmF5LmZyb20oeCk7XG59XG4iLCAiZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICB9O1xufVxuIiwgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsICJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbmQgPSBBcnJheS5wcm90b3R5cGUuZmluZDtcblxuZnVuY3Rpb24gY2hpbGRGaW5kKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmluZC5jYWxsKHRoaXMuY2hpbGRyZW4sIG1hdGNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hpbGRGaXJzdCgpIHtcbiAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChtYXRjaCA9PSBudWxsID8gY2hpbGRGaXJzdFxuICAgICAgOiBjaGlsZEZpbmQodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsICJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsICJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIiwgImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvblx1MjAxOXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0gbmV3IE1hcCxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkgKyBcIlwiO1xuICAgICAgaWYgKG5vZGVCeUtleVZhbHVlLmhhcyhrZXlWYWx1ZSkpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpICsgXCJcIjtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZSkpIHtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIG5vZGVCeUtleVZhbHVlLmRlbGV0ZShrZXlWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlc1tpXSkgPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0dW0obm9kZSkge1xuICByZXR1cm4gbm9kZS5fX2RhdGFfXztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBBcnJheS5mcm9tKHRoaXMsIGRhdHVtKTtcblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSBhcnJheWxpa2UodmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG5cbi8vIEdpdmVuIHNvbWUgZGF0YSwgdGhpcyByZXR1cm5zIGFuIGFycmF5LWxpa2UgdmlldyBvZiBpdDogYW4gb2JqZWN0IHRoYXRcbi8vIGV4cG9zZXMgYSBsZW5ndGggcHJvcGVydHkgYW5kIGFsbG93cyBudW1lcmljIGluZGV4aW5nLiBOb3RlIHRoYXQgdW5saWtlXG4vLyBzZWxlY3RBbGwsIHRoaXMgaXNuXHUyMDE5dCB3b3JyaWVkIGFib3V0IFx1MjAxQ2xpdmVcdTIwMUQgY29sbGVjdGlvbnMgYmVjYXVzZSB0aGUgcmVzdWx0aW5nXG4vLyBhcnJheSB3aWxsIG9ubHkgYmUgdXNlZCBicmllZmx5IHdoaWxlIGRhdGEgaXMgYmVpbmcgYm91bmQuIChJdCBpcyBwb3NzaWJsZSB0b1xuLy8gY2F1c2UgdGhlIGRhdGEgdG8gY2hhbmdlIHdoaWxlIGl0ZXJhdGluZyBieSB1c2luZyBhIGtleSBmdW5jdGlvbiwgYnV0IHBsZWFzZVxuLy8gZG9uXHUyMDE5dDsgd2VcdTIwMTlkIHJhdGhlciBhdm9pZCBhIGdyYXR1aXRvdXMgY29weS4pXG5mdW5jdGlvbiBhcnJheWxpa2UoZGF0YSkge1xuICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiBkYXRhXG4gICAgPyBkYXRhIC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbShkYXRhKTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsICJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwgImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb250ZXh0KSB7XG4gIHZhciBzZWxlY3Rpb24gPSBjb250ZXh0LnNlbGVjdGlvbiA/IGNvbnRleHQuc2VsZWN0aW9uKCkgOiBjb250ZXh0O1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAtMSwgbSA9IGdyb3Vwcy5sZW5ndGg7ICsraiA8IG07KSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSBncm91cC5sZW5ndGggLSAxLCBuZXh0ID0gZ3JvdXBbaV0sIG5vZGU7IC0taSA+PSAwOykge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBpZiAobmV4dCAmJiBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG5leHQpIF4gNCkgbmV4dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBuZXh0KTtcbiAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgc2l6ZSA9IDA7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSArK3NpemU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIHNpemU7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCAiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsICJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsICJmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gIHJldHVybiBub2RlLmNsYXNzTGlzdCB8fCBuZXcgQ2xhc3NMaXN0KG5vZGUpO1xufVxuXG5mdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICB0aGlzLl9ub2RlID0gbm9kZTtcbiAgdGhpcy5fbmFtZXMgPSBjbGFzc0FycmF5KG5vZGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIik7XG59XG5cbkNsYXNzTGlzdC5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5hZGQobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LnJlbW92ZShuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKG5hbWVzLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdCh0aGlzLm5vZGUoKSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgID8gY2xhc3NlZFRydWVcbiAgICAgIDogY2xhc3NlZEZhbHNlKShuYW1lcywgdmFsdWUpKTtcbn1cbiIsICJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwgImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwgImZ1bmN0aW9uIHJhaXNlKCkge1xuICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG59XG4iLCAiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsICJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCAiZnVuY3Rpb24gcmVtb3ZlKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG59XG4iLCAiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIiwgImZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lcikge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50LCB0aGlzLl9fZGF0YV9fKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25SZW1vdmUodHlwZW5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbjtcbiAgICBpZiAoIW9uKSByZXR1cm47XG4gICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8ub3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblsrK2ldID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLl9fb247XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uQWRkKHR5cGVuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uLCBvLCBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcih2YWx1ZSk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8ub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5vcHRpb25zID0gb3B0aW9ucyk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIG9wdGlvbnM6IG9wdGlvbnN9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKigpIHtcbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHlpZWxkIG5vZGU7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQgZnJvbSBcIi4vc2VsZWN0Q2hpbGQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4gZnJvbSBcIi4vc2VsZWN0Q2hpbGRyZW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBqb2luOiBzZWxlY3Rpb25fam9pbixcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiBzZWxlY3Rpb25fc2VsZWN0aW9uLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX2l0ZXJhdG9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCAiaW1wb3J0IHtTZWxlY3Rpb24sIHJvb3R9IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIGxldCBzb3VyY2VFdmVudDtcbiAgd2hpbGUgKHNvdXJjZUV2ZW50ID0gZXZlbnQuc291cmNlRXZlbnQpIGV2ZW50ID0gc291cmNlRXZlbnQ7XG4gIHJldHVybiBldmVudDtcbn1cbiIsICJpbXBvcnQgc291cmNlRXZlbnQgZnJvbSBcIi4vc291cmNlRXZlbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQsIG5vZGUpIHtcbiAgZXZlbnQgPSBzb3VyY2VFdmVudChldmVudCk7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIG5vZGUgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICBpZiAobm9kZSkge1xuICAgIHZhciBzdmcgPSBub2RlLm93bmVyU1ZHRWxlbWVudCB8fCBub2RlO1xuICAgIGlmIChzdmcuY3JlYXRlU1ZHUG9pbnQpIHtcbiAgICAgIHZhciBwb2ludCA9IHN2Zy5jcmVhdGVTVkdQb2ludCgpO1xuICAgICAgcG9pbnQueCA9IGV2ZW50LmNsaWVudFgsIHBvaW50LnkgPSBldmVudC5jbGllbnRZO1xuICAgICAgcG9pbnQgPSBwb2ludC5tYXRyaXhUcmFuc2Zvcm0obm9kZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpO1xuICAgICAgcmV0dXJuIFtwb2ludC54LCBwb2ludC55XTtcbiAgICB9XG4gICAgaWYgKG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgICB2YXIgcmVjdCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXR1cm4gW2V2ZW50LmNsaWVudFggLSByZWN0LmxlZnQgLSBub2RlLmNsaWVudExlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIG5vZGUuY2xpZW50VG9wXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtldmVudC5wYWdlWCwgZXZlbnQucGFnZVldO1xufVxuIiwgIi8vIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG5vZXZlbnQgdG8gZW5zdXJlIHRoYXQgd2UgY2FuXG4vLyBwcmV2ZW50RGVmYXVsdCBvbiB0aGUgZXZlbnQuXG5leHBvcnQgY29uc3Qgbm9ucGFzc2l2ZSA9IHtwYXNzaXZlOiBmYWxzZX07XG5leHBvcnQgY29uc3Qgbm9ucGFzc2l2ZWNhcHR1cmUgPSB7Y2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogZmFsc2V9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9wcm9wYWdhdGlvbihldmVudCkge1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59XG4iLCAiaW1wb3J0IHtzZWxlY3R9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBub2V2ZW50LCB7bm9ucGFzc2l2ZWNhcHR1cmV9IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmlldykge1xuICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbm9ldmVudCwgbm9ucGFzc2l2ZWNhcHR1cmUpO1xuICBpZiAoXCJvbnNlbGVjdHN0YXJ0XCIgaW4gcm9vdCkge1xuICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbm9ldmVudCwgbm9ucGFzc2l2ZWNhcHR1cmUpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuX19ub3NlbGVjdCA9IHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdDtcbiAgICByb290LnN0eWxlLk1velVzZXJTZWxlY3QgPSBcIm5vbmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24geWVzZHJhZyh2aWV3LCBub2NsaWNrKSB7XG4gIHZhciByb290ID0gdmlldy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBzZWxlY3Rpb24gPSBzZWxlY3Qodmlldykub24oXCJkcmFnc3RhcnQuZHJhZ1wiLCBudWxsKTtcbiAgaWYgKG5vY2xpY2spIHtcbiAgICBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG5vZXZlbnQsIG5vbnBhc3NpdmVjYXB0dXJlKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxlY3Rpb24ub24oXCJjbGljay5kcmFnXCIsIG51bGwpOyB9LCAwKTtcbiAgfVxuICBpZiAoXCJvbnNlbGVjdHN0YXJ0XCIgaW4gcm9vdCkge1xuICAgIHNlbGVjdGlvbi5vbihcInNlbGVjdHN0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gcm9vdC5fX25vc2VsZWN0O1xuICAgIGRlbGV0ZSByb290Ll9fbm9zZWxlY3Q7XG4gIH1cbn1cbiIsICJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRHJhZ0V2ZW50KHR5cGUsIHtcbiAgc291cmNlRXZlbnQsXG4gIHN1YmplY3QsXG4gIHRhcmdldCxcbiAgaWRlbnRpZmllcixcbiAgYWN0aXZlLFxuICB4LCB5LCBkeCwgZHksXG4gIGRpc3BhdGNoXG59KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICB0eXBlOiB7dmFsdWU6IHR5cGUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc291cmNlRXZlbnQ6IHt2YWx1ZTogc291cmNlRXZlbnQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc3ViamVjdDoge3ZhbHVlOiBzdWJqZWN0LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHRhcmdldDoge3ZhbHVlOiB0YXJnZXQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgaWRlbnRpZmllcjoge3ZhbHVlOiBpZGVudGlmaWVyLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIGFjdGl2ZToge3ZhbHVlOiBhY3RpdmUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgeDoge3ZhbHVlOiB4LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIHk6IHt2YWx1ZTogeSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBkeDoge3ZhbHVlOiBkeCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBkeToge3ZhbHVlOiBkeSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICBfOiB7dmFsdWU6IGRpc3BhdGNofVxuICB9KTtcbn1cblxuRHJhZ0V2ZW50LnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSB0aGlzLl8ub24uYXBwbHkodGhpcy5fLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdmFsdWUgPT09IHRoaXMuXyA/IHRoaXMgOiB2YWx1ZTtcbn07XG4iLCAiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3NlbGVjdCwgcG9pbnRlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IG5vZHJhZywge3llc2RyYWd9IGZyb20gXCIuL25vZHJhZy5qc1wiO1xuaW1wb3J0IG5vZXZlbnQsIHtub25wYXNzaXZlLCBub25wYXNzaXZlY2FwdHVyZSwgbm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgRHJhZ0V2ZW50IGZyb20gXCIuL2V2ZW50LmpzXCI7XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcihldmVudCkge1xuICByZXR1cm4gIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnRhaW5lcigpIHtcbiAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFN1YmplY3QoZXZlbnQsIGQpIHtcbiAgcmV0dXJuIGQgPT0gbnVsbCA/IHt4OiBldmVudC54LCB5OiBldmVudC55fSA6IGQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIsXG4gICAgICBzdWJqZWN0ID0gZGVmYXVsdFN1YmplY3QsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAgZ2VzdHVyZXMgPSB7fSxcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJkcmFnXCIsIFwiZW5kXCIpLFxuICAgICAgYWN0aXZlID0gMCxcbiAgICAgIG1vdXNlZG93bngsXG4gICAgICBtb3VzZWRvd255LFxuICAgICAgbW91c2Vtb3ZpbmcsXG4gICAgICB0b3VjaGVuZGluZyxcbiAgICAgIGNsaWNrRGlzdGFuY2UyID0gMDtcblxuICBmdW5jdGlvbiBkcmFnKHNlbGVjdGlvbikge1xuICAgIHNlbGVjdGlvblxuICAgICAgICAub24oXCJtb3VzZWRvd24uZHJhZ1wiLCBtb3VzZWRvd25lZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmRyYWdcIiwgdG91Y2hzdGFydGVkKVxuICAgICAgICAub24oXCJ0b3VjaG1vdmUuZHJhZ1wiLCB0b3VjaG1vdmVkLCBub25wYXNzaXZlKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWdcIiwgdG91Y2hlbmRlZClcbiAgICAgICAgLnN0eWxlKFwidG91Y2gtYWN0aW9uXCIsIFwibm9uZVwiKVxuICAgICAgICAuc3R5bGUoXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIiwgXCJyZ2JhKDAsMCwwLDApXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Vkb3duZWQoZXZlbnQsIGQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgfHwgIWZpbHRlci5jYWxsKHRoaXMsIGV2ZW50LCBkKSkgcmV0dXJuO1xuICAgIHZhciBnZXN0dXJlID0gYmVmb3Jlc3RhcnQodGhpcywgY29udGFpbmVyLmNhbGwodGhpcywgZXZlbnQsIGQpLCBldmVudCwgZCwgXCJtb3VzZVwiKTtcbiAgICBpZiAoIWdlc3R1cmUpIHJldHVybjtcbiAgICBzZWxlY3QoZXZlbnQudmlldylcbiAgICAgIC5vbihcIm1vdXNlbW92ZS5kcmFnXCIsIG1vdXNlbW92ZWQsIG5vbnBhc3NpdmVjYXB0dXJlKVxuICAgICAgLm9uKFwibW91c2V1cC5kcmFnXCIsIG1vdXNldXBwZWQsIG5vbnBhc3NpdmVjYXB0dXJlKTtcbiAgICBub2RyYWcoZXZlbnQudmlldyk7XG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgbW91c2Vtb3ZpbmcgPSBmYWxzZTtcbiAgICBtb3VzZWRvd254ID0gZXZlbnQuY2xpZW50WDtcbiAgICBtb3VzZWRvd255ID0gZXZlbnQuY2xpZW50WTtcbiAgICBnZXN0dXJlKFwic3RhcnRcIiwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Vtb3ZlZChldmVudCkge1xuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGlmICghbW91c2Vtb3ZpbmcpIHtcbiAgICAgIHZhciBkeCA9IGV2ZW50LmNsaWVudFggLSBtb3VzZWRvd254LCBkeSA9IGV2ZW50LmNsaWVudFkgLSBtb3VzZWRvd255O1xuICAgICAgbW91c2Vtb3ZpbmcgPSBkeCAqIGR4ICsgZHkgKiBkeSA+IGNsaWNrRGlzdGFuY2UyO1xuICAgIH1cbiAgICBnZXN0dXJlcy5tb3VzZShcImRyYWdcIiwgZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2V1cHBlZChldmVudCkge1xuICAgIHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZ1wiLCBudWxsKTtcbiAgICB5ZXNkcmFnKGV2ZW50LnZpZXcsIG1vdXNlbW92aW5nKTtcbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBnZXN0dXJlcy5tb3VzZShcImVuZFwiLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaHN0YXJ0ZWQoZXZlbnQsIGQpIHtcbiAgICBpZiAoIWZpbHRlci5jYWxsKHRoaXMsIGV2ZW50LCBkKSkgcmV0dXJuO1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIGMgPSBjb250YWluZXIuY2FsbCh0aGlzLCBldmVudCwgZCksXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChnZXN0dXJlID0gYmVmb3Jlc3RhcnQodGhpcywgYywgZXZlbnQsIGQsIHRvdWNoZXNbaV0uaWRlbnRpZmllciwgdG91Y2hlc1tpXSkpIHtcbiAgICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICAgIGdlc3R1cmUoXCJzdGFydFwiLCBldmVudCwgdG91Y2hlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZChldmVudCkge1xuICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgZ2VzdHVyZTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChnZXN0dXJlID0gZ2VzdHVyZXNbdG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICAgICAgZ2VzdHVyZShcImRyYWdcIiwgZXZlbnQsIHRvdWNoZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICBuID0gdG91Y2hlcy5sZW5ndGgsIGksIGdlc3R1cmU7XG5cbiAgICBpZiAodG91Y2hlbmRpbmcpIGNsZWFyVGltZW91dCh0b3VjaGVuZGluZyk7XG4gICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0pIHtcbiAgICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICAgIGdlc3R1cmUoXCJlbmRcIiwgZXZlbnQsIHRvdWNoZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJlZm9yZXN0YXJ0KHRoYXQsIGNvbnRhaW5lciwgZXZlbnQsIGQsIGlkZW50aWZpZXIsIHRvdWNoKSB7XG4gICAgdmFyIGRpc3BhdGNoID0gbGlzdGVuZXJzLmNvcHkoKSxcbiAgICAgICAgcCA9IHBvaW50ZXIodG91Y2ggfHwgZXZlbnQsIGNvbnRhaW5lciksIGR4LCBkeSxcbiAgICAgICAgcztcblxuICAgIGlmICgocyA9IHN1YmplY3QuY2FsbCh0aGF0LCBuZXcgRHJhZ0V2ZW50KFwiYmVmb3Jlc3RhcnRcIiwge1xuICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsXG4gICAgICAgIHRhcmdldDogZHJhZyxcbiAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgYWN0aXZlLFxuICAgICAgICB4OiBwWzBdLFxuICAgICAgICB5OiBwWzFdLFxuICAgICAgICBkeDogMCxcbiAgICAgICAgZHk6IDAsXG4gICAgICAgIGRpc3BhdGNoXG4gICAgICB9KSwgZCkpID09IG51bGwpIHJldHVybjtcblxuICAgIGR4ID0gcy54IC0gcFswXSB8fCAwO1xuICAgIGR5ID0gcy55IC0gcFsxXSB8fCAwO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGdlc3R1cmUodHlwZSwgZXZlbnQsIHRvdWNoKSB7XG4gICAgICB2YXIgcDAgPSBwLCBuO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzdGFydFwiOiBnZXN0dXJlc1tpZGVudGlmaWVyXSA9IGdlc3R1cmUsIG4gPSBhY3RpdmUrKzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbmRcIjogZGVsZXRlIGdlc3R1cmVzW2lkZW50aWZpZXJdLCAtLWFjdGl2ZTsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgICBjYXNlIFwiZHJhZ1wiOiBwID0gcG9pbnRlcih0b3VjaCB8fCBldmVudCwgY29udGFpbmVyKSwgbiA9IGFjdGl2ZTsgYnJlYWs7XG4gICAgICB9XG4gICAgICBkaXNwYXRjaC5jYWxsKFxuICAgICAgICB0eXBlLFxuICAgICAgICB0aGF0LFxuICAgICAgICBuZXcgRHJhZ0V2ZW50KHR5cGUsIHtcbiAgICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsXG4gICAgICAgICAgc3ViamVjdDogcyxcbiAgICAgICAgICB0YXJnZXQ6IGRyYWcsXG4gICAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgICBhY3RpdmU6IG4sXG4gICAgICAgICAgeDogcFswXSArIGR4LFxuICAgICAgICAgIHk6IHBbMV0gKyBkeSxcbiAgICAgICAgICBkeDogcFswXSAtIHAwWzBdLFxuICAgICAgICAgIGR5OiBwWzFdIC0gcDBbMV0sXG4gICAgICAgICAgZGlzcGF0Y2hcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIGRyYWcuZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgZHJhZykgOiBmaWx0ZXI7XG4gIH07XG5cbiAgZHJhZy5jb250YWluZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29udGFpbmVyID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChfKSwgZHJhZykgOiBjb250YWluZXI7XG4gIH07XG5cbiAgZHJhZy5zdWJqZWN0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN1YmplY3QgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KF8pLCBkcmFnKSA6IHN1YmplY3Q7XG4gIH07XG5cbiAgZHJhZy50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBkcmFnKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBkcmFnLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGRyYWcgOiB2YWx1ZTtcbiAgfTtcblxuICBkcmFnLmNsaWNrRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xpY2tEaXN0YW5jZTIgPSAoXyA9ICtfKSAqIF8sIGRyYWcpIDogTWF0aC5zcXJ0KGNsaWNrRGlzdGFuY2UyKTtcbiAgfTtcblxuICByZXR1cm4gZHJhZztcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsICJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmUuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbG9yKCkge31cblxuZXhwb3J0IHZhciBkYXJrZXIgPSAwLjc7XG5leHBvcnQgdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLFxuICAgIHJlTiA9IFwiXFxcXHMqKFsrLV0/KD86XFxcXGQqXFxcXC4pP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/KD86XFxcXGQqXFxcXC4pP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoYF5yZ2JcXFxcKCR7cmVJfSwke3JlSX0sJHtyZUl9XFxcXCkkYCksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZVB9LCR7cmVQfSwke3JlUH1cXFxcKSRgKSxcbiAgICByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYmFcXFxcKCR7cmVJfSwke3JlSX0sJHtyZUl9LCR7cmVOfVxcXFwpJGApLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZVB9LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChgXmhzbFxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH1cXFxcKSRgKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChgXmhzbGFcXFxcKCR7cmVOfSwke3JlUH0sJHtyZVB9LCR7cmVOfVxcXFwpJGApO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5KGNoYW5uZWxzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsIHRoaXMsIGNoYW5uZWxzKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKTtcbiAgfSxcbiAgaGV4OiBjb2xvcl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXG4gIGZvcm1hdEhleDogY29sb3JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiBjb2xvcl9mb3JtYXRIZXg4LFxuICBmb3JtYXRIc2w6IGNvbG9yX2Zvcm1hdEhzbCxcbiAgZm9ybWF0UmdiOiBjb2xvcl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiBjb2xvcl9mb3JtYXRSZ2Jcbn0pO1xuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIZXg4KCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IFJnYihjbGFtcGkodGhpcy5yKSwgY2xhbXBpKHRoaXMuZyksIGNsYW1waSh0aGlzLmIpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoLTAuNSA8PSB0aGlzLnIgJiYgdGhpcy5yIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuZyAmJiB0aGlzLmcgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5iICYmIHRoaXMuYiA8IDI1NS41KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IHJnYl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXG4gIGZvcm1hdEhleDogcmdiX2Zvcm1hdEhleCxcbiAgZm9ybWF0SGV4ODogcmdiX2Zvcm1hdEhleDgsXG4gIGZvcm1hdFJnYjogcmdiX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IHJnYl9mb3JtYXRSZ2Jcbn0pKTtcblxuZnVuY3Rpb24gcmdiX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiBgIyR7aGV4KHRoaXMucil9JHtoZXgodGhpcy5nKX0ke2hleCh0aGlzLmIpfSR7aGV4KChpc05hTih0aGlzLm9wYWNpdHkpID8gMSA6IHRoaXMub3BhY2l0eSkgKiAyNTUpfWA7XG59XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRSZ2IoKSB7XG4gIGNvbnN0IGEgPSBjbGFtcGEodGhpcy5vcGFjaXR5KTtcbiAgcmV0dXJuIGAke2EgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIn0ke2NsYW1waSh0aGlzLnIpfSwgJHtjbGFtcGkodGhpcy5nKX0sICR7Y2xhbXBpKHRoaXMuYil9JHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbn1cblxuZnVuY3Rpb24gY2xhbXBhKG9wYWNpdHkpIHtcbiAgcmV0dXJuIGlzTmFOKG9wYWNpdHkpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG9wYWNpdHkpKTtcbn1cblxuZnVuY3Rpb24gY2xhbXBpKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodmFsdWUpIHx8IDApKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gY2xhbXBpKHZhbHVlKTtcbiAgcmV0dXJuICh2YWx1ZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIHZhbHVlLnRvU3RyaW5nKDE2KTtcbn1cblxuZnVuY3Rpb24gaHNsYShoLCBzLCBsLCBhKSB7XG4gIGlmIChhIDw9IDApIGggPSBzID0gbCA9IE5hTjtcbiAgZWxzZSBpZiAobCA8PSAwIHx8IGwgPj0gMSkgaCA9IHMgPSBOYU47XG4gIGVsc2UgaWYgKHMgPD0gMCkgaCA9IE5hTjtcbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBuZXcgSHNsKG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IEhzbDtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBvO1xuICBvID0gby5yZ2IoKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBoID0gTmFOLFxuICAgICAgcyA9IG1heCAtIG1pbixcbiAgICAgIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gIGlmIChzKSB7XG4gICAgaWYgKHIgPT09IG1heCkgaCA9IChnIC0gYikgLyBzICsgKGcgPCBiKSAqIDY7XG4gICAgZWxzZSBpZiAoZyA9PT0gbWF4KSBoID0gKGIgLSByKSAvIHMgKyAyO1xuICAgIGVsc2UgaCA9IChyIC0gZykgLyBzICsgNDtcbiAgICBzIC89IGwgPCAwLjUgPyBtYXggKyBtaW4gOiAyIC0gbWF4IC0gbWluO1xuICAgIGggKj0gNjA7XG4gIH0gZWxzZSB7XG4gICAgcyA9IGwgPiAwICYmIGwgPCAxID8gMCA6IGg7XG4gIH1cbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXG4gICAgICAgIGwgPSB0aGlzLmwsXG4gICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgIG0xID0gMiAqIGwgLSBtMjtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfSxcbiAgY2xhbXAoKSB7XG4gICAgcmV0dXJuIG5ldyBIc2woY2xhbXBoKHRoaXMuaCksIGNsYW1wdCh0aGlzLnMpLCBjbGFtcHQodGhpcy5sKSwgY2xhbXBhKHRoaXMub3BhY2l0eSkpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsKCkge1xuICAgIGNvbnN0IGEgPSBjbGFtcGEodGhpcy5vcGFjaXR5KTtcbiAgICByZXR1cm4gYCR7YSA9PT0gMSA/IFwiaHNsKFwiIDogXCJoc2xhKFwifSR7Y2xhbXBoKHRoaXMuaCl9LCAke2NsYW1wdCh0aGlzLnMpICogMTAwfSUsICR7Y2xhbXB0KHRoaXMubCkgKiAxMDB9JSR7YSA9PT0gMSA/IFwiKVwiIDogYCwgJHthfSlgfWA7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24gY2xhbXBoKHZhbHVlKSB7XG4gIHZhbHVlID0gKHZhbHVlIHx8IDApICUgMzYwO1xuICByZXR1cm4gdmFsdWUgPCAwID8gdmFsdWUgKyAzNjAgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2xhbXB0KHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2YWx1ZSB8fCAwKSk7XG59XG5cbi8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcbiAgICAgIDogaCA8IDE4MCA/IG0yXG4gICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICA6IG0xKSAqIDI1NTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gYmFzaXModDEsIHYwLCB2MSwgdjIsIHYzKSB7XG4gIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTtcbiAgcmV0dXJuICgoMSAtIDMgKiB0MSArIDMgKiB0MiAtIHQzKSAqIHYwXG4gICAgICArICg0IC0gNiAqIHQyICsgMyAqIHQzKSAqIHYxXG4gICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyXG4gICAgICArIHQzICogdjMpIC8gNjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0IDw9IDAgPyAodCA9IDApIDogdCA+PSAxID8gKHQgPSAxLCBuIC0gMSkgOiBNYXRoLmZsb29yKHQgKiBuKSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sXG4gICAgICAgIHYyID0gdmFsdWVzW2kgKyAxXSxcbiAgICAgICAgdjAgPSBpID4gMCA/IHZhbHVlc1tpIC0gMV0gOiAyICogdjEgLSB2MixcbiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwgImltcG9ydCB7YmFzaXN9IGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iLCAiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCAiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICBpZiAoIWIpIGIgPSBbXTtcbiAgdmFyIG4gPSBhID8gTWF0aC5taW4oYi5sZW5ndGgsIGEubGVuZ3RoKSA6IDAsXG4gICAgICBjID0gYi5zbGljZSgpLFxuICAgICAgaTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBjW2ldID0gYVtpXSAqICgxIC0gdCkgKyBiW2ldICogdDtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXkoeCkge1xuICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHgpICYmICEoeCBpbnN0YW5jZW9mIERhdGFWaWV3KTtcbn1cbiIsICJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIChpc051bWJlckFycmF5KGIpID8gbnVtYmVyQXJyYXkgOiBnZW5lcmljQXJyYXkpKGEsIGIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJpY0FycmF5KGEsIGIpIHtcbiAgdmFyIG5iID0gYiA/IGIubGVuZ3RoIDogMCxcbiAgICAgIG5hID0gYSA/IE1hdGgubWluKG5iLCBhLmxlbmd0aCkgOiAwLFxuICAgICAgeCA9IG5ldyBBcnJheShuYSksXG4gICAgICBjID0gbmV3IEFycmF5KG5iKSxcbiAgICAgIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIHhbaV0gPSB2YWx1ZShhW2ldLCBiW2ldKTtcbiAgZm9yICg7IGkgPCBuYjsgKytpKSBjW2ldID0gYltpXTtcblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSBjW2ldID0geFtpXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiIsICJpbXBvcnQgdmFsdWUgZnJvbSBcIi4vdmFsdWUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgaSA9IHt9LFxuICAgICAgYyA9IHt9LFxuICAgICAgaztcblxuICBpZiAoYSA9PT0gbnVsbCB8fCB0eXBlb2YgYSAhPT0gXCJvYmplY3RcIikgYSA9IHt9O1xuICBpZiAoYiA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgYiA9IHt9O1xuXG4gIGZvciAoayBpbiBiKSB7XG4gICAgaWYgKGsgaW4gYSkge1xuICAgICAgaVtrXSA9IHZhbHVlKGFba10sIGJba10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjW2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoayBpbiBpKSBjW2tdID0gaVtrXSh0KTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cbiIsICJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwgImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHJnYiBmcm9tIFwiLi9yZ2IuanNcIjtcbmltcG9ydCB7Z2VuZXJpY0FycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGRhdGUgZnJvbSBcIi4vZGF0ZS5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCBvYmplY3QgZnJvbSBcIi4vb2JqZWN0LmpzXCI7XG5pbXBvcnQgc3RyaW5nIGZyb20gXCIuL3N0cmluZy5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gY29sb3IoYikpID8gKGIgPSBjLCByZ2IpIDogc3RyaW5nKVxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyByZ2JcbiAgICAgIDogYiBpbnN0YW5jZW9mIERhdGUgPyBkYXRlXG4gICAgICA6IGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gZ2VuZXJpY0FycmF5XG4gICAgICA6IHR5cGVvZiBiLnZhbHVlT2YgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgYi50b1N0cmluZyAhPT0gXCJmdW5jdGlvblwiIHx8IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChhICogKDEgLSB0KSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsICJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsICJpbXBvcnQgZGVjb21wb3NlLCB7aWRlbnRpdHl9IGZyb20gXCIuL2RlY29tcG9zZS5qc1wiO1xuXG52YXIgc3ZnTm9kZTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBjb25zdCBtID0gbmV3ICh0eXBlb2YgRE9NTWF0cml4ID09PSBcImZ1bmN0aW9uXCIgPyBET01NYXRyaXggOiBXZWJLaXRDU1NNYXRyaXgpKHZhbHVlICsgXCJcIik7XG4gIHJldHVybiBtLmlzSWRlbnRpdHkgPyBpZGVudGl0eSA6IGRlY29tcG9zZShtLmEsIG0uYiwgbS5jLCBtLmQsIG0uZSwgbS5mKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ZnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghc3ZnTm9kZSkgc3ZnTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZ1wiKTtcbiAgc3ZnTm9kZS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdmFsdWUpO1xuICBpZiAoISh2YWx1ZSA9IHN2Z05vZGUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpIHJldHVybiBpZGVudGl0eTtcbiAgdmFsdWUgPSB2YWx1ZS5tYXRyaXg7XG4gIHJldHVybiBkZWNvbXBvc2UodmFsdWUuYSwgdmFsdWUuYiwgdmFsdWUuYywgdmFsdWUuZCwgdmFsdWUuZSwgdmFsdWUuZik7XG59XG4iLCAiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsICJ2YXIgZXBzaWxvbjIgPSAxZS0xMjtcblxuZnVuY3Rpb24gY29zaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgKyAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiBzaW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSAtIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHRhbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoMiAqIHgpKSAtIDEpIC8gKHggKyAxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHpvb21SaG8ocmhvLCByaG8yLCByaG80KSB7XG5cbiAgLy8gcDAgPSBbdXgwLCB1eTAsIHcwXVxuICAvLyBwMSA9IFt1eDEsIHV5MSwgdzFdXG4gIGZ1bmN0aW9uIHpvb20ocDAsIHAxKSB7XG4gICAgdmFyIHV4MCA9IHAwWzBdLCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSxcbiAgICAgICAgdXgxID0gcDFbMF0sIHV5MSA9IHAxWzFdLCB3MSA9IHAxWzJdLFxuICAgICAgICBkeCA9IHV4MSAtIHV4MCxcbiAgICAgICAgZHkgPSB1eTEgLSB1eTAsXG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICAgIGksXG4gICAgICAgIFM7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHUwIFx1MjI0NSB1MS5cbiAgICBpZiAoZDIgPCBlcHNpbG9uMikge1xuICAgICAgUyA9IE1hdGgubG9nKHcxIC8gdzApIC8gcmhvO1xuICAgICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB1eDAgKyB0ICogZHgsXG4gICAgICAgICAgdXkwICsgdCAqIGR5LFxuICAgICAgICAgIHcwICogTWF0aC5leHAocmhvICogdCAqIFMpXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhbCBjYXNlLlxuICAgIGVsc2Uge1xuICAgICAgdmFyIGQxID0gTWF0aC5zcXJ0KGQyKSxcbiAgICAgICAgICBiMCA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIHJobzQgKiBkMikgLyAoMiAqIHcwICogcmhvMiAqIGQxKSxcbiAgICAgICAgICBiMSA9ICh3MSAqIHcxIC0gdzAgKiB3MCAtIHJobzQgKiBkMikgLyAoMiAqIHcxICogcmhvMiAqIGQxKSxcbiAgICAgICAgICByMCA9IE1hdGgubG9nKE1hdGguc3FydChiMCAqIGIwICsgMSkgLSBiMCksXG4gICAgICAgICAgcjEgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1xuICAgICAgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgIHZhciBzID0gdCAqIFMsXG4gICAgICAgICAgICBjb3NocjAgPSBjb3NoKHIwKSxcbiAgICAgICAgICAgIHUgPSB3MCAvIChyaG8yICogZDEpICogKGNvc2hyMCAqIHRhbmgocmhvICogcyArIHIwKSAtIHNpbmgocjApKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB1eDAgKyB1ICogZHgsXG4gICAgICAgICAgdXkwICsgdSAqIGR5LFxuICAgICAgICAgIHcwICogY29zaHIwIC8gY29zaChyaG8gKiBzICsgcjApXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwICogcmhvIC8gTWF0aC5TUVJUMjtcblxuICAgIHJldHVybiBpO1xuICB9XG5cbiAgem9vbS5yaG8gPSBmdW5jdGlvbihfKSB7XG4gICAgdmFyIF8xID0gTWF0aC5tYXgoMWUtMywgK18pLCBfMiA9IF8xICogXzEsIF80ID0gXzIgKiBfMjtcbiAgICByZXR1cm4gem9vbVJobyhfMSwgXzIsIF80KTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn0pKE1hdGguU1FSVDIsIDIsIDQpO1xuIiwgInZhciBmcmFtZSA9IDAsIC8vIGlzIGFuIGFuaW1hdGlvbiBmcmFtZSBwZW5kaW5nP1xuICAgIHRpbWVvdXQgPSAwLCAvLyBpcyBhIHRpbWVvdXQgcGVuZGluZz9cbiAgICBpbnRlcnZhbCA9IDAsIC8vIGFyZSBhbnkgdGltZXJzIGFjdGl2ZT9cbiAgICBwb2tlRGVsYXkgPSAxMDAwLCAvLyBob3cgZnJlcXVlbnRseSB3ZSBjaGVjayBmb3IgY2xvY2sgc2tld1xuICAgIHRhc2tIZWFkLFxuICAgIHRhc2tUYWlsLFxuICAgIGNsb2NrTGFzdCA9IDAsXG4gICAgY2xvY2tOb3cgPSAwLFxuICAgIGNsb2NrU2tldyA9IDAsXG4gICAgY2xvY2sgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwib2JqZWN0XCIgJiYgcGVyZm9ybWFuY2Uubm93ID8gcGVyZm9ybWFuY2UgOiBEYXRlLFxuICAgIHNldEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZVx1MjAxOXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW5cdTIwMTl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwodW5kZWZpbmVkLCBlKTtcbiAgICB0ID0gdC5fbmV4dDtcbiAgfVxuICAtLWZyYW1lO1xufVxuXG5mdW5jdGlvbiB3YWtlKCkge1xuICBjbG9ja05vdyA9IChjbG9ja0xhc3QgPSBjbG9jay5ub3coKSkgKyBjbG9ja1NrZXc7XG4gIGZyYW1lID0gdGltZW91dCA9IDA7XG4gIHRyeSB7XG4gICAgdGltZXJGbHVzaCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGZyYW1lID0gMDtcbiAgICBuYXAoKTtcbiAgICBjbG9ja05vdyA9IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9rZSgpIHtcbiAgdmFyIG5vdyA9IGNsb2NrLm5vdygpLCBkZWxheSA9IG5vdyAtIGNsb2NrTGFzdDtcbiAgaWYgKGRlbGF5ID4gcG9rZURlbGF5KSBjbG9ja1NrZXcgLT0gZGVsYXksIGNsb2NrTGFzdCA9IG5vdztcbn1cblxuZnVuY3Rpb24gbmFwKCkge1xuICB2YXIgdDAsIHQxID0gdGFza0hlYWQsIHQyLCB0aW1lID0gSW5maW5pdHk7XG4gIHdoaWxlICh0MSkge1xuICAgIGlmICh0MS5fY2FsbCkge1xuICAgICAgaWYgKHRpbWUgPiB0MS5fdGltZSkgdGltZSA9IHQxLl90aW1lO1xuICAgICAgdDAgPSB0MSwgdDEgPSB0MS5fbmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdDIgPSB0MS5fbmV4dCwgdDEuX25leHQgPSBudWxsO1xuICAgICAgdDEgPSB0MCA/IHQwLl9uZXh0ID0gdDIgOiB0YXNrSGVhZCA9IHQyO1xuICAgIH1cbiAgfVxuICB0YXNrVGFpbCA9IHQwO1xuICBzbGVlcCh0aW1lKTtcbn1cblxuZnVuY3Rpb24gc2xlZXAodGltZSkge1xuICBpZiAoZnJhbWUpIHJldHVybjsgLy8gU29vbmVzdCBhbGFybSBhbHJlYWR5IHNldCwgb3Igd2lsbCBiZS5cbiAgaWYgKHRpbWVvdXQpIHRpbWVvdXQgPSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIHZhciBkZWxheSA9IHRpbWUgLSBjbG9ja05vdzsgLy8gU3RyaWN0bHkgbGVzcyB0aGFuIGlmIHdlIHJlY29tcHV0ZWQgY2xvY2tOb3cuXG4gIGlmIChkZWxheSA+IDI0KSB7XG4gICAgaWYgKHRpbWUgPCBJbmZpbml0eSkgdGltZW91dCA9IHNldFRpbWVvdXQod2FrZSwgdGltZSAtIGNsb2NrLm5vdygpIC0gY2xvY2tTa2V3KTtcbiAgICBpZiAoaW50ZXJ2YWwpIGludGVydmFsID0gY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpbnRlcnZhbCkgY2xvY2tMYXN0ID0gY2xvY2subm93KCksIGludGVydmFsID0gc2V0SW50ZXJ2YWwocG9rZSwgcG9rZURlbGF5KTtcbiAgICBmcmFtZSA9IDEsIHNldEZyYW1lKHdha2UpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsICJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiIsICJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCAiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZVx1MjAxOXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2VcdTIwMTlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCAiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJnYiwgaW50ZXJwb2xhdGVTdHJpbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBjO1xuICByZXR1cm4gKHR5cGVvZiBiID09PSBcIm51bWJlclwiID8gaW50ZXJwb2xhdGVOdW1iZXJcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gaW50ZXJwb2xhdGVSZ2JcbiAgICAgIDogKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIGludGVycG9sYXRlUmdiKVxuICAgICAgOiBpbnRlcnBvbGF0ZVN0cmluZykoYSwgYik7XG59XG4iLCAiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSksIGkgPSBmdWxsbmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB0aGlzLmF0dHJUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbikoZnVsbG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJhdHRyLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgOiB2YWx1ZSA9PSBudWxsID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkoZnVsbG5hbWUpXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KShmdWxsbmFtZSwgaSwgdmFsdWUpKTtcbn1cbiIsICJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwgImltcG9ydCB7Z2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkZWxheUZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVsYXlDb25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBkZWxheUZ1bmN0aW9uXG4gICAgICAgICAgOiBkZWxheUNvbnN0YW50KShpZCwgdmFsdWUpKVxuICAgICAgOiBnZXQodGhpcy5ub2RlKCksIGlkKS5kZWxheTtcbn1cbiIsICJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkdXJhdGlvbkZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZHVyYXRpb25GdW5jdGlvblxuICAgICAgICAgIDogZHVyYXRpb25Db25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZHVyYXRpb247XG59XG4iLCAiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCAiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGVhc2VWYXJ5aW5nKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgdiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLmVhY2goZWFzZVZhcnlpbmcodGhpcy5faWQsIHZhbHVlKSk7XG59XG4iLCAiaW1wb3J0IHttYXRjaGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCAiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCAiaW1wb3J0IHtnZXQsIHNldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gc3RhcnQobmFtZSkge1xuICByZXR1cm4gKG5hbWUgKyBcIlwiKS50cmltKCkuc3BsaXQoL158XFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuICF0IHx8IHQgPT09IFwic3RhcnRcIjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBvbjAsIG9uMSwgc2l0ID0gc3RhcnQobmFtZSkgPyBpbml0IDogc2V0O1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2l0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2VcdTIwMTlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCkgKG9uMSA9IChvbjAgPSBvbikuY29weSgpKS5vbihuYW1lLCBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyXG4gICAgICA/IGdldCh0aGlzLm5vZGUoKSwgaWQpLm9uLm9uKG5hbWUpXG4gICAgICA6IHRoaXMuZWFjaChvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikpO1xufVxuIiwgImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiIsICJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxudmFyIFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9ncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwgImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2VcdTIwMTlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIiwgImZ1bmN0aW9uIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGkuY2FsbCh0aGlzLCB0KSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIgdCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQgPSAoaTAgPSBpKSAmJiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGtleSA9IFwic3R5bGUuXCIgKyAobmFtZSArPSBcIlwiKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKTtcbn1cbiIsICJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCAiZnVuY3Rpb24gdGV4dEludGVycG9sYXRlKGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gaS5jYWxsKHRoaXMsIHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0VHdlZW4odmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiB0ZXh0SW50ZXJwb2xhdGUoaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcInRleHRcIjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHRleHRUd2Vlbih2YWx1ZSkpO1xufVxuIiwgImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZDAgPSB0aGlzLl9pZCxcbiAgICAgIGlkMSA9IG5ld0lkKCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgdmFyIGluaGVyaXQgPSBnZXQobm9kZSwgaWQwKTtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQxLCBpLCBncm91cCwge1xuICAgICAgICAgIHRpbWU6IGluaGVyaXQudGltZSArIGluaGVyaXQuZGVsYXkgKyBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgIGR1cmF0aW9uOiBpbmhlcml0LmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2U6IGluaGVyaXQuZWFzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZDEpO1xufVxuIiwgImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG9uMCwgb24xLCB0aGF0ID0gdGhpcywgaWQgPSB0aGF0Ll9pZCwgc2l6ZSA9IHRoYXQuc2l6ZSgpO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGNhbmNlbCA9IHt2YWx1ZTogcmVqZWN0fSxcbiAgICAgICAgZW5kID0ge3ZhbHVlOiBmdW5jdGlvbigpIHsgaWYgKC0tc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpOyB9fTtcblxuICAgIHRoYXQuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgICAgb24gPSBzY2hlZHVsZS5vbjtcblxuICAgICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdlXHUyMDE5cmUgZG9uZSFcbiAgICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICAgIGlmIChvbiAhPT0gb24wKSB7XG4gICAgICAgIG9uMSA9IChvbjAgPSBvbikuY29weSgpO1xuICAgICAgICBvbjEuXy5jYW5jZWwucHVzaChjYW5jZWwpO1xuICAgICAgICBvbjEuXy5pbnRlcnJ1cHQucHVzaChjYW5jZWwpO1xuICAgICAgICBvbjEuXy5lbmQucHVzaChlbmQpO1xuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzZWxlY3Rpb24gd2FzIGVtcHR5LCByZXNvbHZlIGVuZCBpbW1lZGlhdGVseVxuICAgIGlmIChzaXplID09PSAwKSByZXNvbHZlKCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlVmFyeWluZyBmcm9tIFwiLi9lYXNlVmFyeWluZy5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHRUd2VlbiBmcm9tIFwiLi90ZXh0VHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmQuanNcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHRleHRUd2VlbjogdHJhbnNpdGlvbl90ZXh0VHdlZW4sXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZSxcbiAgZWFzZVZhcnlpbmc6IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcsXG4gIGVuZDogdHJhbnNpdGlvbl9lbmQsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25fcHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl1cbn07XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0ICogdCA6ICh0IC09IDIpICogdCAqIHQgKyAyKSAvIDI7XG59XG4iLCAiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4uL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuaW1wb3J0IHtlYXNlQ3ViaWNJbk91dH0gZnJvbSBcImQzLWVhc2VcIjtcbmltcG9ydCB7bm93fSBmcm9tIFwiZDMtdGltZXJcIjtcblxudmFyIGRlZmF1bHRUaW1pbmcgPSB7XG4gIHRpbWU6IG51bGwsIC8vIFNldCBvbiB1c2UuXG4gIGRlbGF5OiAwLFxuICBkdXJhdGlvbjogMjUwLFxuICBlYXNlOiBlYXNlQ3ViaWNJbk91dFxufTtcblxuZnVuY3Rpb24gaW5oZXJpdChub2RlLCBpZCkge1xuICB2YXIgdGltaW5nO1xuICB3aGlsZSAoISh0aW1pbmcgPSBub2RlLl9fdHJhbnNpdGlvbikgfHwgISh0aW1pbmcgPSB0aW1pbmdbaWRdKSkge1xuICAgIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtpZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aW1pbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGlkLFxuICAgICAgdGltaW5nO1xuXG4gIGlmIChuYW1lIGluc3RhbmNlb2YgVHJhbnNpdGlvbikge1xuICAgIGlkID0gbmFtZS5faWQsIG5hbWUgPSBuYW1lLl9uYW1lO1xuICB9IGVsc2Uge1xuICAgIGlkID0gbmV3SWQoKSwgKHRpbWluZyA9IGRlZmF1bHRUaW1pbmcpLnRpbWUgPSBub3coKSwgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcbiAgfVxuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkLCBpLCBncm91cCwgdGltaW5nIHx8IGluaGVyaXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCAiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3BvaW50ZXIsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50LmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG5jb25zdCB7YWJzLCBtYXgsIG1pbn0gPSBNYXRoO1xuXG5mdW5jdGlvbiBudW1iZXIxKGUpIHtcbiAgcmV0dXJuIFsrZVswXSwgK2VbMV1dO1xufVxuXG5mdW5jdGlvbiBudW1iZXIyKGUpIHtcbiAgcmV0dXJuIFtudW1iZXIxKGVbMF0pLCBudW1iZXIxKGVbMV0pXTtcbn1cblxudmFyIFggPSB7XG4gIG5hbWU6IFwieFwiLFxuICBoYW5kbGVzOiBbXCJ3XCIsIFwiZVwiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4LCBlKSB7IHJldHVybiB4ID09IG51bGwgPyBudWxsIDogW1sreFswXSwgZVswXVsxXV0sIFsreFsxXSwgZVsxXVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMF0sIHh5WzFdWzBdXTsgfVxufTtcblxudmFyIFkgPSB7XG4gIG5hbWU6IFwieVwiLFxuICBoYW5kbGVzOiBbXCJuXCIsIFwic1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih5LCBlKSB7IHJldHVybiB5ID09IG51bGwgPyBudWxsIDogW1tlWzBdWzBdLCAreVswXV0sIFtlWzFdWzBdLCAreVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJ3XCIsIFwiZVwiLCBcInNcIiwgXCJud1wiLCBcIm5lXCIsIFwic3dcIiwgXCJzZVwiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgPT0gbnVsbCA/IG51bGwgOiBudW1iZXIyKHh5KTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH1cbn07XG5cbnZhciBjdXJzb3JzID0ge1xuICBvdmVybGF5OiBcImNyb3NzaGFpclwiLFxuICBzZWxlY3Rpb246IFwibW92ZVwiLFxuICBuOiBcIm5zLXJlc2l6ZVwiLFxuICBlOiBcImV3LXJlc2l6ZVwiLFxuICBzOiBcIm5zLXJlc2l6ZVwiLFxuICB3OiBcImV3LXJlc2l6ZVwiLFxuICBudzogXCJud3NlLXJlc2l6ZVwiLFxuICBuZTogXCJuZXN3LXJlc2l6ZVwiLFxuICBzZTogXCJud3NlLXJlc2l6ZVwiLFxuICBzdzogXCJuZXN3LXJlc2l6ZVwiXG59O1xuXG52YXIgZmxpcFggPSB7XG4gIGU6IFwid1wiLFxuICB3OiBcImVcIixcbiAgbnc6IFwibmVcIixcbiAgbmU6IFwibndcIixcbiAgc2U6IFwic3dcIixcbiAgc3c6IFwic2VcIlxufTtcblxudmFyIGZsaXBZID0ge1xuICBuOiBcInNcIixcbiAgczogXCJuXCIsXG4gIG53OiBcInN3XCIsXG4gIG5lOiBcInNlXCIsXG4gIHNlOiBcIm5lXCIsXG4gIHN3OiBcIm53XCJcbn07XG5cbnZhciBzaWduc1ggPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiBudWxsLFxuICBlOiArMSxcbiAgczogbnVsbCxcbiAgdzogLTEsXG4gIG53OiAtMSxcbiAgbmU6ICsxLFxuICBzZTogKzEsXG4gIHN3OiAtMVxufTtcblxudmFyIHNpZ25zWSA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IC0xLFxuICBlOiBudWxsLFxuICBzOiArMSxcbiAgdzogbnVsbCxcbiAgbnc6IC0xLFxuICBuZTogLTEsXG4gIHNlOiArMSxcbiAgc3c6ICsxXG59O1xuXG5mdW5jdGlvbiB0eXBlKHQpIHtcbiAgcmV0dXJuIHt0eXBlOiB0fTtcbn1cblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKGV2ZW50KSB7XG4gIHJldHVybiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYnV0dG9uO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RXh0ZW50KCkge1xuICB2YXIgc3ZnID0gdGhpcy5vd25lclNWR0VsZW1lbnQgfHwgdGhpcztcbiAgaWYgKHN2Zy5oYXNBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIpKSB7XG4gICAgc3ZnID0gc3ZnLnZpZXdCb3guYmFzZVZhbDtcbiAgICByZXR1cm4gW1tzdmcueCwgc3ZnLnldLCBbc3ZnLnggKyBzdmcud2lkdGgsIHN2Zy55ICsgc3ZnLmhlaWdodF1dO1xuICB9XG4gIHJldHVybiBbWzAsIDBdLCBbc3ZnLndpZHRoLmJhc2VWYWwudmFsdWUsIHN2Zy5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0VG91Y2hhYmxlKCkge1xuICByZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzIHx8IChcIm9udG91Y2hzdGFydFwiIGluIHRoaXMpO1xufVxuXG4vLyBMaWtlIGQzLmxvY2FsLCBidXQgd2l0aCB0aGUgbmFtZSBcdTIwMUNfX2JydXNoXHUyMDFEIHJhdGhlciB0aGFuIGF1dG8tZ2VuZXJhdGVkLlxuZnVuY3Rpb24gbG9jYWwobm9kZSkge1xuICB3aGlsZSAoIW5vZGUuX19icnVzaCkgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHJldHVybjtcbiAgcmV0dXJuIG5vZGUuX19icnVzaDtcbn1cblxuZnVuY3Rpb24gZW1wdHkoZXh0ZW50KSB7XG4gIHJldHVybiBleHRlbnRbMF1bMF0gPT09IGV4dGVudFsxXVswXVxuICAgICAgfHwgZXh0ZW50WzBdWzFdID09PSBleHRlbnRbMV1bMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFNlbGVjdGlvbihub2RlKSB7XG4gIHZhciBzdGF0ZSA9IG5vZGUuX19icnVzaDtcbiAgcmV0dXJuIHN0YXRlID8gc3RhdGUuZGltLm91dHB1dChzdGF0ZS5zZWxlY3Rpb24pIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWCgpIHtcbiAgcmV0dXJuIGJydXNoKFgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hZKCkge1xuICByZXR1cm4gYnJ1c2goWSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYnJ1c2goWFkpO1xufVxuXG5mdW5jdGlvbiBicnVzaChkaW0pIHtcbiAgdmFyIGV4dGVudCA9IGRlZmF1bHRFeHRlbnQsXG4gICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyLFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIGtleXMgPSB0cnVlLFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImJydXNoXCIsIFwiZW5kXCIpLFxuICAgICAgaGFuZGxlU2l6ZSA9IDYsXG4gICAgICB0b3VjaGVuZGluZztcblxuICBmdW5jdGlvbiBicnVzaChncm91cCkge1xuICAgIHZhciBvdmVybGF5ID0gZ3JvdXBcbiAgICAgICAgLnByb3BlcnR5KFwiX19icnVzaFwiLCBpbml0aWFsaXplKVxuICAgICAgLnNlbGVjdEFsbChcIi5vdmVybGF5XCIpXG4gICAgICAuZGF0YShbdHlwZShcIm92ZXJsYXlcIildKTtcblxuICAgIG92ZXJsYXkuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJvdmVybGF5XCIpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KVxuICAgICAgLm1lcmdlKG92ZXJsYXkpXG4gICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBleHRlbnQgPSBsb2NhbCh0aGlzKS5leHRlbnQ7XG4gICAgICAgICAgc2VsZWN0KHRoaXMpXG4gICAgICAgICAgICAgIC5hdHRyKFwieFwiLCBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBleHRlbnRbMF1bMV0pXG4gICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZXh0ZW50WzFdWzBdIC0gZXh0ZW50WzBdWzBdKVxuICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBleHRlbnRbMV1bMV0gLSBleHRlbnRbMF1bMV0pO1xuICAgICAgICB9KTtcblxuICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb25cIilcbiAgICAgIC5kYXRhKFt0eXBlKFwic2VsZWN0aW9uXCIpXSlcbiAgICAgIC5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInNlbGVjdGlvblwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLnNlbGVjdGlvbilcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwiIzc3N1wiKVxuICAgICAgICAuYXR0cihcImZpbGwtb3BhY2l0eVwiLCAwLjMpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiI2ZmZlwiKVxuICAgICAgICAuYXR0cihcInNoYXBlLXJlbmRlcmluZ1wiLCBcImNyaXNwRWRnZXNcIik7XG5cbiAgICB2YXIgaGFuZGxlID0gZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgLmRhdGEoZGltLmhhbmRsZXMsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZTsgfSk7XG5cbiAgICBoYW5kbGUuZXhpdCgpLnJlbW92ZSgpO1xuXG4gICAgaGFuZGxlLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIFwiaGFuZGxlIGhhbmRsZS0tXCIgKyBkLnR5cGU7IH0pXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGN1cnNvcnNbZC50eXBlXTsgfSk7XG5cbiAgICBncm91cFxuICAgICAgICAuZWFjaChyZWRyYXcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAub24oXCJtb3VzZWRvd24uYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgIC5maWx0ZXIodG91Y2hhYmxlKVxuICAgICAgICAub24oXCJ0b3VjaHN0YXJ0LmJydXNoXCIsIHN0YXJ0ZWQpXG4gICAgICAgIC5vbihcInRvdWNobW92ZS5icnVzaFwiLCB0b3VjaG1vdmVkKVxuICAgICAgICAub24oXCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCB0b3VjaGVuZGVkKVxuICAgICAgICAuc3R5bGUoXCJ0b3VjaC1hY3Rpb25cIiwgXCJub25lXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbiwgZXZlbnQpIHtcbiAgICBpZiAoZ3JvdXAudHdlZW4pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oZXZlbnQpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoZXZlbnQpOyB9KVxuICAgICAgICAgIC5vbihcImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2hcIiwgZnVuY3Rpb24oZXZlbnQpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZChldmVudCk7IH0pXG4gICAgICAgICAgLnR3ZWVuKFwiYnJ1c2hcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24wID0gc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjEgPSBkaW0uaW5wdXQodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gc2VsZWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgaSA9IGludGVycG9sYXRlKHNlbGVjdGlvbjAsIHNlbGVjdGlvbjEpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0d2Vlbih0KSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHQgPT09IDEgJiYgc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBpKHQpO1xuICAgICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgICAgZW1pdC5icnVzaCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uMCAhPT0gbnVsbCAmJiBzZWxlY3Rpb24xICE9PSBudWxsID8gdHdlZW4gOiB0d2VlbigxKTtcbiAgICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjEgPSBkaW0uaW5wdXQodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiID8gc2VsZWN0aW9uLmFwcGx5KHRoYXQsIGFyZ3MpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3MpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICAgICAgICAgIGludGVycnVwdCh0aGF0KTtcbiAgICAgICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjEgPT09IG51bGwgPyBudWxsIDogc2VsZWN0aW9uMTtcbiAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgZW1pdC5zdGFydChldmVudCkuYnJ1c2goZXZlbnQpLmVuZChldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGJydXNoLmNsZWFyID0gZnVuY3Rpb24oZ3JvdXAsIGV2ZW50KSB7XG4gICAgYnJ1c2gubW92ZShncm91cCwgbnVsbCwgZXZlbnQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICB2YXIgZ3JvdXAgPSBzZWxlY3QodGhpcyksXG4gICAgICAgIHNlbGVjdGlvbiA9IGxvY2FsKHRoaXMpLnNlbGVjdGlvbjtcblxuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb25cIilcbiAgICAgICAgICAuc3R5bGUoXCJkaXNwbGF5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcInlcIiwgc2VsZWN0aW9uWzBdWzFdKVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSk7XG5cbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5oYW5kbGVcIilcbiAgICAgICAgICAuc3R5bGUoXCJkaXNwbGF5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoIC0gMV0gPT09IFwiZVwiID8gc2VsZWN0aW9uWzFdWzBdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMF0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlWzBdID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVsxXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzFdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGUgPT09IFwiblwiIHx8IGQudHlwZSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0gKyBoYW5kbGVTaXplIDogaGFuZGxlU2l6ZTsgfSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGUgPT09IFwiZVwiIHx8IGQudHlwZSA9PT0gXCJ3XCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0gKyBoYW5kbGVTaXplIDogaGFuZGxlU2l6ZTsgfSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uLC5oYW5kbGVcIilcbiAgICAgICAgICAuc3R5bGUoXCJkaXNwbGF5XCIsIFwibm9uZVwiKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgdmFyIGVtaXQgPSB0aGF0Ll9fYnJ1c2guZW1pdHRlcjtcbiAgICByZXR1cm4gZW1pdCAmJiAoIWNsZWFuIHx8ICFlbWl0LmNsZWFuKSA/IGVtaXQgOiBuZXcgRW1pdHRlcih0aGF0LCBhcmdzLCBjbGVhbik7XG4gIH1cblxuICBmdW5jdGlvbiBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICAgIHRoaXMuY2xlYW4gPSBjbGVhbjtcbiAgfVxuXG4gIEVtaXR0ZXIucHJvdG90eXBlID0ge1xuICAgIGJlZm9yZXN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICgrK3RoaXMuYWN0aXZlID09PSAxKSB0aGlzLnN0YXRlLmVtaXR0ZXIgPSB0aGlzLCB0aGlzLnN0YXJ0aW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCBtb2RlKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiLCBldmVudCwgbW9kZSk7XG4gICAgICBlbHNlIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKGV2ZW50LCBtb2RlKSB7XG4gICAgICB0aGlzLmVtaXQoXCJicnVzaFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICgtLXRoaXMuYWN0aXZlID09PSAwKSBkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLCB0aGlzLmVtaXQoXCJlbmRcIiwgZXZlbnQsIG1vZGUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlLCBldmVudCwgbW9kZSkge1xuICAgICAgdmFyIGQgPSBzZWxlY3QodGhpcy50aGF0KS5kYXR1bSgpO1xuICAgICAgbGlzdGVuZXJzLmNhbGwoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHRoaXMudGhhdCxcbiAgICAgICAgbmV3IEJydXNoRXZlbnQodHlwZSwge1xuICAgICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcbiAgICAgICAgICB0YXJnZXQ6IGJydXNoLFxuICAgICAgICAgIHNlbGVjdGlvbjogZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbiksXG4gICAgICAgICAgbW9kZSxcbiAgICAgICAgICBkaXNwYXRjaDogbGlzdGVuZXJzXG4gICAgICAgIH0pLFxuICAgICAgICBkXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzdGFydGVkKGV2ZW50KSB7XG4gICAgaWYgKHRvdWNoZW5kaW5nICYmICFldmVudC50b3VjaGVzKSByZXR1cm47XG4gICAgaWYgKCFmaWx0ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgcmV0dXJuO1xuXG4gICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICB0eXBlID0gZXZlbnQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsXG4gICAgICAgIG1vZGUgPSAoa2V5cyAmJiBldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoa2V5cyAmJiBldmVudC5hbHRLZXkgPyBNT0RFX0NFTlRFUiA6IE1PREVfSEFORExFKSxcbiAgICAgICAgc2lnblggPSBkaW0gPT09IFkgPyBudWxsIDogc2lnbnNYW3R5cGVdLFxuICAgICAgICBzaWduWSA9IGRpbSA9PT0gWCA/IG51bGwgOiBzaWduc1lbdHlwZV0sXG4gICAgICAgIHN0YXRlID0gbG9jYWwodGhhdCksXG4gICAgICAgIGV4dGVudCA9IHN0YXRlLmV4dGVudCxcbiAgICAgICAgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgICBXID0gZXh0ZW50WzBdWzBdLCB3MCwgdzEsXG4gICAgICAgIE4gPSBleHRlbnRbMF1bMV0sIG4wLCBuMSxcbiAgICAgICAgRSA9IGV4dGVudFsxXVswXSwgZTAsIGUxLFxuICAgICAgICBTID0gZXh0ZW50WzFdWzFdLCBzMCwgczEsXG4gICAgICAgIGR4ID0gMCxcbiAgICAgICAgZHkgPSAwLFxuICAgICAgICBtb3ZpbmcsXG4gICAgICAgIHNoaWZ0aW5nID0gc2lnblggJiYgc2lnblkgJiYga2V5cyAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludHMgPSBBcnJheS5mcm9tKGV2ZW50LnRvdWNoZXMgfHwgW2V2ZW50XSwgdCA9PiB7XG4gICAgICAgICAgY29uc3QgaSA9IHQuaWRlbnRpZmllcjtcbiAgICAgICAgICB0ID0gcG9pbnRlcih0LCB0aGF0KTtcbiAgICAgICAgICB0LnBvaW50MCA9IHQuc2xpY2UoKTtcbiAgICAgICAgICB0LmlkZW50aWZpZXIgPSBpO1xuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9KTtcblxuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICB2YXIgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJndW1lbnRzLCB0cnVlKS5iZWZvcmVzdGFydCgpO1xuXG4gICAgaWYgKHR5cGUgPT09IFwib3ZlcmxheVwiKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uKSBtb3ZpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcHRzID0gW3BvaW50c1swXSwgcG9pbnRzWzFdIHx8IHBvaW50c1swXV07XG4gICAgICBzdGF0ZS5zZWxlY3Rpb24gPSBzZWxlY3Rpb24gPSBbW1xuICAgICAgICAgIHcwID0gZGltID09PSBZID8gVyA6IG1pbihwdHNbMF1bMF0sIHB0c1sxXVswXSksXG4gICAgICAgICAgbjAgPSBkaW0gPT09IFggPyBOIDogbWluKHB0c1swXVsxXSwgcHRzWzFdWzFdKVxuICAgICAgICBdLCBbXG4gICAgICAgICAgZTAgPSBkaW0gPT09IFkgPyBFIDogbWF4KHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBzMCA9IGRpbSA9PT0gWCA/IFMgOiBtYXgocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF1dO1xuICAgICAgaWYgKHBvaW50cy5sZW5ndGggPiAxKSBtb3ZlKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZW1pdC5tb3ZlZCA9IG1vdmVkO1xuICAgICAgZW1pdC5lbmRlZCA9IGVuZGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcbiAgICAgIGlmIChrZXlzKSB2aWV3XG4gICAgICAgICAgLm9uKFwia2V5ZG93bi5icnVzaFwiLCBrZXlkb3duZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwia2V5dXAuYnJ1c2hcIiwga2V5dXBwZWQsIHRydWUpXG5cbiAgICAgIGRyYWdEaXNhYmxlKGV2ZW50LnZpZXcpO1xuICAgIH1cblxuICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgIGVtaXQuc3RhcnQoZXZlbnQsIG1vZGUubmFtZSk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZChldmVudCkge1xuICAgICAgZm9yIChjb25zdCBwIG9mIGV2ZW50LmNoYW5nZWRUb3VjaGVzIHx8IFtldmVudF0pIHtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIHBvaW50cylcbiAgICAgICAgICBpZiAoZC5pZGVudGlmaWVyID09PSBwLmlkZW50aWZpZXIpIGQuY3VyID0gcG9pbnRlcihwLCB0aGF0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZICYmIHBvaW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbMF07XG4gICAgICAgIGlmIChhYnMocG9pbnQuY3VyWzBdIC0gcG9pbnRbMF0pID4gYWJzKHBvaW50LmN1clsxXSAtIHBvaW50WzFdKSlcbiAgICAgICAgICBsb2NrWSA9IHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cylcbiAgICAgICAgaWYgKHBvaW50LmN1cikgcG9pbnRbMF0gPSBwb2ludC5jdXJbMF0sIHBvaW50WzFdID0gcG9pbnQuY3VyWzFdO1xuICAgICAgbW92aW5nID0gdHJ1ZTtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgbW92ZShldmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZShldmVudCkge1xuICAgICAgY29uc3QgcG9pbnQgPSBwb2ludHNbMF0sIHBvaW50MCA9IHBvaW50LnBvaW50MDtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gbWF4KFcgLSB3MCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCArIGR4LCBlMSA9IGUwICsgZHg7XG4gICAgICAgICAgaWYgKHNpZ25ZKSBkeSA9IG1heChOIC0gbjAsIG1pbihTIC0gczAsIGR5KSksIG4xID0gbjAgKyBkeSwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTU9ERV9IQU5ETEU6IHtcbiAgICAgICAgICBpZiAocG9pbnRzWzFdKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIHcxID0gbWF4KFcsIG1pbihFLCBwb2ludHNbMF1bMF0pKSwgZTEgPSBtYXgoVywgbWluKEUsIHBvaW50c1sxXVswXSkpLCBzaWduWCA9IDE7XG4gICAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBwb2ludHNbMF1bMV0pKSwgczEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1sxXVsxXSkpLCBzaWduWSA9IDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gbWF4KFcgLSB3MCwgbWluKEUgLSB3MCwgZHgpKSwgdzEgPSB3MCArIGR4LCBlMSA9IGUwO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2lnblggPiAwKSBkeCA9IG1heChXIC0gZTAsIG1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICAgIGlmIChzaWduWSA8IDApIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBuMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IG1heChOIC0gczAsIG1pbihTIC0gczAsIGR5KSksIG4xID0gbjAsIHMxID0gczAgKyBkeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHcwIC0gZHggKiBzaWduWCkpLCBlMSA9IG1heChXLCBtaW4oRSwgZTAgKyBkeCAqIHNpZ25YKSk7XG4gICAgICAgICAgaWYgKHNpZ25ZKSBuMSA9IG1heChOLCBtaW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gbWF4KE4sIG1pbihTLCBzMCArIGR5ICogc2lnblkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZTEgPCB3MSkge1xuICAgICAgICBzaWduWCAqPSAtMTtcbiAgICAgICAgdCA9IHcwLCB3MCA9IGUwLCBlMCA9IHQ7XG4gICAgICAgIHQgPSB3MSwgdzEgPSBlMSwgZTEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWCkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBYW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzMSA8IG4xKSB7XG4gICAgICAgIHNpZ25ZICo9IC0xO1xuICAgICAgICB0ID0gbjAsIG4wID0gczAsIHMwID0gdDtcbiAgICAgICAgdCA9IG4xLCBuMSA9IHMxLCBzMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBZKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFlbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUhXG4gICAgICBpZiAobG9ja1gpIHcxID0gc2VsZWN0aW9uWzBdWzBdLCBlMSA9IHNlbGVjdGlvblsxXVswXTtcbiAgICAgIGlmIChsb2NrWSkgbjEgPSBzZWxlY3Rpb25bMF1bMV0sIHMxID0gc2VsZWN0aW9uWzFdWzFdO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uWzBdWzBdICE9PSB3MVxuICAgICAgICAgIHx8IHNlbGVjdGlvblswXVsxXSAhPT0gbjFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMF0gIT09IGUxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzFdICE9PSBzMSkge1xuICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSBbW3cxLCBuMV0sIFtlMSwgczFdXTtcbiAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgIGVtaXQuYnJ1c2goZXZlbnQsIG1vZGUubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoZXZlbnQpIHtcbiAgICAgIG5vcHJvcGFnYXRpb24oZXZlbnQpO1xuICAgICAgaWYgKGV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGlmICh0b3VjaGVuZGluZykgY2xlYXJUaW1lb3V0KHRvdWNoZW5kaW5nKTtcbiAgICAgICAgdG91Y2hlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaGVuZGluZyA9IG51bGw7IH0sIDUwMCk7IC8vIEdob3N0IGNsaWNrcyBhcmUgZGVsYXllZCFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZChldmVudCwgbW9kZS5uYW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXlkb3duZWQoZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDMyOiB7IC8vIFNQQUNFOyB0YWtlcyBwcmlvcml0eSBvdmVyIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSB8fCBtb2RlID09PSBNT0RFX0NFTlRFUikge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMSAtIGR4OyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzEgLSBkeDtcbiAgICAgICAgICAgIGlmIChzaWduWSA8IDApIHMwID0gczEgLSBkeTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xIC0gZHk7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9TUEFDRTtcbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xuICAgICAgfVxuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoZXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgaWYgKHNoaWZ0aW5nKSB7XG4gICAgICAgICAgICBsb2NrWCA9IGxvY2tZID0gc2hpZnRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0NFTlRFUikge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfSEFORExFO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xuICAgICAgfVxuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZChldmVudCkge1xuICAgIGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5tb3ZlZChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZGVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fX2JydXNoIHx8IHtzZWxlY3Rpb246IG51bGx9O1xuICAgIHN0YXRlLmV4dGVudCA9IG51bWJlcjIoZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgIHN0YXRlLmRpbSA9IGRpbTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBicnVzaC5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChudW1iZXIyKF8pKSwgYnJ1c2gpIDogZXh0ZW50O1xuICB9O1xuXG4gIGJydXNoLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IGZpbHRlcjtcbiAgfTtcblxuICBicnVzaC50b3VjaGFibGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodG91Y2hhYmxlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBicnVzaCkgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgYnJ1c2guaGFuZGxlU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChoYW5kbGVTaXplID0gK18sIGJydXNoKSA6IGhhbmRsZVNpemU7XG4gIH07XG5cbiAgYnJ1c2gua2V5TW9kaWZpZXJzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGtleXMgPSAhIV8sIGJydXNoKSA6IGtleXM7XG4gIH07XG5cbiAgYnJ1c2gub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gYnJ1c2ggOiB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gYnJ1c2g7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICB2YXIgbm9kZXMsIHN0cmVuZ3RoID0gMTtcblxuICBpZiAoeCA9PSBudWxsKSB4ID0gMDtcbiAgaWYgKHkgPT0gbnVsbCkgeSA9IDA7XG5cbiAgZnVuY3Rpb24gZm9yY2UoKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHN4ID0gMCxcbiAgICAgICAgc3kgPSAwO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBzeCArPSBub2RlLngsIHN5ICs9IG5vZGUueTtcbiAgICB9XG5cbiAgICBmb3IgKHN4ID0gKHN4IC8gbiAtIHgpICogc3RyZW5ndGgsIHN5ID0gKHN5IC8gbiAtIHkpICogc3RyZW5ndGgsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueCAtPSBzeCwgbm9kZS55IC09IHN5O1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9ICtfLCBmb3JjZSkgOiB4O1xuICB9O1xuXG4gIGZvcmNlLnkgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeSA9ICtfLCBmb3JjZSkgOiB5O1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gK18sIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIGNvbnN0IHggPSArdGhpcy5feC5jYWxsKG51bGwsIGQpLFxuICAgICAgeSA9ICt0aGlzLl95LmNhbGwobnVsbCwgZCk7XG4gIHJldHVybiBhZGQodGhpcy5jb3Zlcih4LCB5KSwgeCwgeSwgZCk7XG59XG5cbmZ1bmN0aW9uIGFkZCh0cmVlLCB4LCB5LCBkKSB7XG4gIGlmIChpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIHRyZWU7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdHJlZS5fcm9vdCxcbiAgICAgIGxlYWYgPSB7ZGF0YTogZH0sXG4gICAgICB4MCA9IHRyZWUuX3gwLFxuICAgICAgeTAgPSB0cmVlLl95MCxcbiAgICAgIHgxID0gdHJlZS5feDEsXG4gICAgICB5MSA9IHRyZWUuX3kxLFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHhwLFxuICAgICAgeXAsXG4gICAgICByaWdodCxcbiAgICAgIGJvdHRvbSxcbiAgICAgIGksXG4gICAgICBqO1xuXG4gIC8vIElmIHRoZSB0cmVlIGlzIGVtcHR5LCBpbml0aWFsaXplIHRoZSByb290IGFzIGEgbGVhZi5cbiAgaWYgKCFub2RlKSByZXR1cm4gdHJlZS5fcm9vdCA9IGxlYWYsIHRyZWU7XG5cbiAgLy8gRmluZCB0aGUgZXhpc3RpbmcgbGVhZiBmb3IgdGhlIG5ldyBwb2ludCwgb3IgYWRkIGl0LlxuICB3aGlsZSAobm9kZS5sZW5ndGgpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAocGFyZW50ID0gbm9kZSwgIShub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbiAgfVxuXG4gIC8vIElzIHRoZSBuZXcgcG9pbnQgaXMgZXhhY3RseSBjb2luY2lkZW50IHdpdGggdGhlIGV4aXN0aW5nIHBvaW50P1xuICB4cCA9ICt0cmVlLl94LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgeXAgPSArdHJlZS5feS5jYWxsKG51bGwsIG5vZGUuZGF0YSk7XG4gIGlmICh4ID09PSB4cCAmJiB5ID09PSB5cCkgcmV0dXJuIGxlYWYubmV4dCA9IG5vZGUsIHBhcmVudCA/IHBhcmVudFtpXSA9IGxlYWYgOiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBPdGhlcndpc2UsIHNwbGl0IHRoZSBsZWFmIG5vZGUgdW50aWwgdGhlIG9sZCBhbmQgbmV3IHBvaW50IGFyZSBzZXBhcmF0ZWQuXG4gIGRvIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQgPyBwYXJlbnRbaV0gPSBuZXcgQXJyYXkoNCkgOiB0cmVlLl9yb290ID0gbmV3IEFycmF5KDQpO1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICB9IHdoaWxlICgoaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHQpID09PSAoaiA9ICh5cCA+PSB5bSkgPDwgMSB8ICh4cCA+PSB4bSkpKTtcbiAgcmV0dXJuIHBhcmVudFtqXSA9IG5vZGUsIHBhcmVudFtpXSA9IGxlYWYsIHRyZWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRBbGwoZGF0YSkge1xuICB2YXIgZCwgaSwgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB4eiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHl6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeDAgPSBJbmZpbml0eSxcbiAgICAgIHkwID0gSW5maW5pdHksXG4gICAgICB4MSA9IC1JbmZpbml0eSxcbiAgICAgIHkxID0gLUluZmluaXR5O1xuXG4gIC8vIENvbXB1dGUgdGhlIHBvaW50cyBhbmQgdGhlaXIgZXh0ZW50LlxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKGlzTmFOKHggPSArdGhpcy5feC5jYWxsKG51bGwsIGQgPSBkYXRhW2ldKSkgfHwgaXNOYU4oeSA9ICt0aGlzLl95LmNhbGwobnVsbCwgZCkpKSBjb250aW51ZTtcbiAgICB4eltpXSA9IHg7XG4gICAgeXpbaV0gPSB5O1xuICAgIGlmICh4IDwgeDApIHgwID0geDtcbiAgICBpZiAoeCA+IHgxKSB4MSA9IHg7XG4gICAgaWYgKHkgPCB5MCkgeTAgPSB5O1xuICAgIGlmICh5ID4geTEpIHkxID0geTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIHdlcmUgbm8gKHZhbGlkKSBwb2ludHMsIGFib3J0LlxuICBpZiAoeDAgPiB4MSB8fCB5MCA+IHkxKSByZXR1cm4gdGhpcztcblxuICAvLyBFeHBhbmQgdGhlIHRyZWUgdG8gY292ZXIgdGhlIG5ldyBwb2ludHMuXG4gIHRoaXMuY292ZXIoeDAsIHkwKS5jb3Zlcih4MSwgeTEpO1xuXG4gIC8vIEFkZCB0aGUgbmV3IHBvaW50cy5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGFkZCh0aGlzLCB4eltpXSwgeXpbaV0sIGRhdGFbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICBpZiAoaXNOYU4oeCA9ICt4KSB8fCBpc05hTih5ID0gK3kpKSByZXR1cm4gdGhpczsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEgPSB0aGlzLl94MSxcbiAgICAgIHkxID0gdGhpcy5feTE7XG5cbiAgLy8gSWYgdGhlIHF1YWR0cmVlIGhhcyBubyBleHRlbnQsIGluaXRpYWxpemUgdGhlbS5cbiAgLy8gSW50ZWdlciBleHRlbnQgYXJlIG5lY2Vzc2FyeSBzbyB0aGF0IGlmIHdlIGxhdGVyIGRvdWJsZSB0aGUgZXh0ZW50LFxuICAvLyB0aGUgZXhpc3RpbmcgcXVhZHJhbnQgYm91bmRhcmllcyBkb25cdTIwMTl0IGNoYW5nZSBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgZXJyb3IhXG4gIGlmIChpc05hTih4MCkpIHtcbiAgICB4MSA9ICh4MCA9IE1hdGguZmxvb3IoeCkpICsgMTtcbiAgICB5MSA9ICh5MCA9IE1hdGguZmxvb3IoeSkpICsgMTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgZG91YmxlIHJlcGVhdGVkbHkgdG8gY292ZXIuXG4gIGVsc2Uge1xuICAgIHZhciB6ID0geDEgLSB4MCB8fCAxLFxuICAgICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBpO1xuXG4gICAgd2hpbGUgKHgwID4geCB8fCB4ID49IHgxIHx8IHkwID4geSB8fCB5ID49IHkxKSB7XG4gICAgICBpID0gKHkgPCB5MCkgPDwgMSB8ICh4IDwgeDApO1xuICAgICAgcGFyZW50ID0gbmV3IEFycmF5KDQpLCBwYXJlbnRbaV0gPSBub2RlLCBub2RlID0gcGFyZW50LCB6ICo9IDI7XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSAwOiB4MSA9IHgwICsgeiwgeTEgPSB5MCArIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDE6IHgwID0geDEgLSB6LCB5MSA9IHkwICsgejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogeDEgPSB4MCArIHosIHkwID0geTEgLSB6OyBicmVhaztcbiAgICAgICAgY2FzZSAzOiB4MCA9IHgxIC0geiwgeTAgPSB5MSAtIHo7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yb290ICYmIHRoaXMuX3Jvb3QubGVuZ3RoKSB0aGlzLl9yb290ID0gbm9kZTtcbiAgfVxuXG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHJldHVybiB0aGlzO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YSA9IFtdO1xuICB0aGlzLnZpc2l0KGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBkbyBkYXRhLnB1c2gobm9kZS5kYXRhKTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gZGF0YTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuY292ZXIoK19bMF1bMF0sICtfWzBdWzFdKS5jb3ZlcigrX1sxXVswXSwgK19bMV1bMV0pXG4gICAgICA6IGlzTmFOKHRoaXMuX3gwKSA/IHVuZGVmaW5lZCA6IFtbdGhpcy5feDAsIHRoaXMuX3kwXSwgW3RoaXMuX3gxLCB0aGlzLl95MV1dO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHRoaXMubm9kZSA9IG5vZGU7XG4gIHRoaXMueDAgPSB4MDtcbiAgdGhpcy55MCA9IHkwO1xuICB0aGlzLngxID0geDE7XG4gIHRoaXMueTEgPSB5MTtcbn1cbiIsICJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICB2YXIgZGF0YSxcbiAgICAgIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEsXG4gICAgICB5MSxcbiAgICAgIHgyLFxuICAgICAgeTIsXG4gICAgICB4MyA9IHRoaXMuX3gxLFxuICAgICAgeTMgPSB0aGlzLl95MSxcbiAgICAgIHF1YWRzID0gW10sXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHEsXG4gICAgICBpO1xuXG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHgwLCB5MCwgeDMsIHkzKSk7XG4gIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gIGVsc2Uge1xuICAgIHgwID0geCAtIHJhZGl1cywgeTAgPSB5IC0gcmFkaXVzO1xuICAgIHgzID0geCArIHJhZGl1cywgeTMgPSB5ICsgcmFkaXVzO1xuICAgIHJhZGl1cyAqPSByYWRpdXM7XG4gIH1cblxuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG5cbiAgICAvLyBTdG9wIHNlYXJjaGluZyBpZiB0aGlzIHF1YWRyYW50IGNhblx1MjAxOXQgY29udGFpbiBhIGNsb3NlciBub2RlLlxuICAgIGlmICghKG5vZGUgPSBxLm5vZGUpXG4gICAgICAgIHx8ICh4MSA9IHEueDApID4geDNcbiAgICAgICAgfHwgKHkxID0gcS55MCkgPiB5M1xuICAgICAgICB8fCAoeDIgPSBxLngxKSA8IHgwXG4gICAgICAgIHx8ICh5MiA9IHEueTEpIDwgeTApIGNvbnRpbnVlO1xuXG4gICAgLy8gQmlzZWN0IHRoZSBjdXJyZW50IHF1YWRyYW50LlxuICAgIGlmIChub2RlLmxlbmd0aCkge1xuICAgICAgdmFyIHhtID0gKHgxICsgeDIpIC8gMixcbiAgICAgICAgICB5bSA9ICh5MSArIHkyKSAvIDI7XG5cbiAgICAgIHF1YWRzLnB1c2goXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbM10sIHhtLCB5bSwgeDIsIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsyXSwgeDEsIHltLCB4bSwgeTIpLFxuICAgICAgICBuZXcgUXVhZChub2RlWzFdLCB4bSwgeTEsIHgyLCB5bSksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMF0sIHgxLCB5MSwgeG0sIHltKVxuICAgICAgKTtcblxuICAgICAgLy8gVmlzaXQgdGhlIGNsb3Nlc3QgcXVhZHJhbnQgZmlyc3QuXG4gICAgICBpZiAoaSA9ICh5ID49IHltKSA8PCAxIHwgKHggPj0geG0pKSB7XG4gICAgICAgIHEgPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV0gPSBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDEgLSBpXSA9IHE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmlzaXQgdGhpcyBwb2ludC4gKFZpc2l0aW5nIGNvaW5jaWRlbnQgcG9pbnRzIGlzblx1MjAxOXQgbmVjZXNzYXJ5ISlcbiAgICBlbHNlIHtcbiAgICAgIHZhciBkeCA9IHggLSArdGhpcy5feC5jYWxsKG51bGwsIG5vZGUuZGF0YSksXG4gICAgICAgICAgZHkgPSB5IC0gK3RoaXMuX3kuY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICBpZiAoZDIgPCByYWRpdXMpIHtcbiAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQocmFkaXVzID0gZDIpO1xuICAgICAgICB4MCA9IHggLSBkLCB5MCA9IHkgLSBkO1xuICAgICAgICB4MyA9IHggKyBkLCB5MyA9IHkgKyBkO1xuICAgICAgICBkYXRhID0gbm9kZS5kYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgaWYgKGlzTmFOKHggPSArdGhpcy5feC5jYWxsKG51bGwsIGQpKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIHJldHVybiB0aGlzOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgcGFyZW50LFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICByZXRhaW5lcixcbiAgICAgIHByZXZpb3VzLFxuICAgICAgbmV4dCxcbiAgICAgIHgwID0gdGhpcy5feDAsXG4gICAgICB5MCA9IHRoaXMuX3kwLFxuICAgICAgeDEgPSB0aGlzLl94MSxcbiAgICAgIHkxID0gdGhpcy5feTEsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHhtLFxuICAgICAgeW0sXG4gICAgICByaWdodCxcbiAgICAgIGJvdHRvbSxcbiAgICAgIGksXG4gICAgICBqO1xuXG4gIC8vIElmIHRoZSB0cmVlIGlzIGVtcHR5LCBpbml0aWFsaXplIHRoZSByb290IGFzIGEgbGVhZi5cbiAgaWYgKCFub2RlKSByZXR1cm4gdGhpcztcblxuICAvLyBGaW5kIHRoZSBsZWFmIG5vZGUgZm9yIHRoZSBwb2ludC5cbiAgLy8gV2hpbGUgZGVzY2VuZGluZywgYWxzbyByZXRhaW4gdGhlIGRlZXBlc3QgcGFyZW50IHdpdGggYSBub24tcmVtb3ZlZCBzaWJsaW5nLlxuICBpZiAobm9kZS5sZW5ndGgpIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gICAgaWYgKCEocGFyZW50ID0gbm9kZSwgbm9kZSA9IG5vZGVbaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHRdKSkgcmV0dXJuIHRoaXM7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgYnJlYWs7XG4gICAgaWYgKHBhcmVudFsoaSArIDEpICYgM10gfHwgcGFyZW50WyhpICsgMikgJiAzXSB8fCBwYXJlbnRbKGkgKyAzKSAmIDNdKSByZXRhaW5lciA9IHBhcmVudCwgaiA9IGk7XG4gIH1cblxuICAvLyBGaW5kIHRoZSBwb2ludCB0byByZW1vdmUuXG4gIHdoaWxlIChub2RlLmRhdGEgIT09IGQpIGlmICghKHByZXZpb3VzID0gbm9kZSwgbm9kZSA9IG5vZGUubmV4dCkpIHJldHVybiB0aGlzO1xuICBpZiAobmV4dCA9IG5vZGUubmV4dCkgZGVsZXRlIG5vZGUubmV4dDtcblxuICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29pbmNpZGVudCBwb2ludHMsIHJlbW92ZSBqdXN0IHRoZSBwb2ludC5cbiAgaWYgKHByZXZpb3VzKSByZXR1cm4gKG5leHQgPyBwcmV2aW91cy5uZXh0ID0gbmV4dCA6IGRlbGV0ZSBwcmV2aW91cy5uZXh0KSwgdGhpcztcblxuICAvLyBJZiB0aGlzIGlzIHRoZSByb290IHBvaW50LCByZW1vdmUgaXQuXG4gIGlmICghcGFyZW50KSByZXR1cm4gdGhpcy5fcm9vdCA9IG5leHQsIHRoaXM7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVhZi5cbiAgbmV4dCA/IHBhcmVudFtpXSA9IG5leHQgOiBkZWxldGUgcGFyZW50W2ldO1xuXG4gIC8vIElmIHRoZSBwYXJlbnQgbm93IGNvbnRhaW5zIGV4YWN0bHkgb25lIGxlYWYsIGNvbGxhcHNlIHN1cGVyZmx1b3VzIHBhcmVudHMuXG4gIGlmICgobm9kZSA9IHBhcmVudFswXSB8fCBwYXJlbnRbMV0gfHwgcGFyZW50WzJdIHx8IHBhcmVudFszXSlcbiAgICAgICYmIG5vZGUgPT09IChwYXJlbnRbM10gfHwgcGFyZW50WzJdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMF0pXG4gICAgICAmJiAhbm9kZS5sZW5ndGgpIHtcbiAgICBpZiAocmV0YWluZXIpIHJldGFpbmVyW2pdID0gbm9kZTtcbiAgICBlbHNlIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBbGwoZGF0YSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGRhdGEubGVuZ3RoOyBpIDwgbjsgKytpKSB0aGlzLnJlbW92ZShkYXRhW2ldKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yb290O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsICJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBxdWFkcyA9IFtdLCBxLCBub2RlID0gdGhpcy5fcm9vdCwgY2hpbGQsIHgwLCB5MCwgeDEsIHkxO1xuICBpZiAobm9kZSkgcXVhZHMucHVzaChuZXcgUXVhZChub2RlLCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgaWYgKCFjYWxsYmFjayhub2RlID0gcS5ub2RlLCB4MCA9IHEueDAsIHkwID0gcS55MCwgeDEgPSBxLngxLCB5MSA9IHEueTEpICYmIG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsyXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHltLCB4bSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMV0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5MCwgeDEsIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsICJpbXBvcnQgUXVhZCBmcm9tIFwiLi9xdWFkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBxdWFkcyA9IFtdLCBuZXh0ID0gW10sIHE7XG4gIGlmICh0aGlzLl9yb290KSBxdWFkcy5wdXNoKG5ldyBRdWFkKHRoaXMuX3Jvb3QsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICB2YXIgbm9kZSA9IHEubm9kZTtcbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciBjaGlsZCwgeDAgPSBxLngwLCB5MCA9IHEueTAsIHgxID0gcS54MSwgeTEgPSBxLnkxLCB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzFdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeTAsIHgxLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsyXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeDAsIHltLCB4bSwgeTEpKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgfVxuICAgIG5leHQucHVzaChxKTtcbiAgfVxuICB3aGlsZSAocSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjayhxLm5vZGUsIHEueDAsIHEueTAsIHEueDEsIHEueTEpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3ggPSBfLCB0aGlzKSA6IHRoaXMuX3g7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRZKGQpIHtcbiAgcmV0dXJuIGRbMV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKF8pIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5feSA9IF8sIHRoaXMpIDogdGhpcy5feTtcbn1cbiIsICJpbXBvcnQgdHJlZV9hZGQsIHthZGRBbGwgYXMgdHJlZV9hZGRBbGx9IGZyb20gXCIuL2FkZC5qc1wiO1xuaW1wb3J0IHRyZWVfY292ZXIgZnJvbSBcIi4vY292ZXIuanNcIjtcbmltcG9ydCB0cmVlX2RhdGEgZnJvbSBcIi4vZGF0YS5qc1wiO1xuaW1wb3J0IHRyZWVfZXh0ZW50IGZyb20gXCIuL2V4dGVudC5qc1wiO1xuaW1wb3J0IHRyZWVfZmluZCBmcm9tIFwiLi9maW5kLmpzXCI7XG5pbXBvcnQgdHJlZV9yZW1vdmUsIHtyZW1vdmVBbGwgYXMgdHJlZV9yZW1vdmVBbGx9IGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHRyZWVfcm9vdCBmcm9tIFwiLi9yb290LmpzXCI7XG5pbXBvcnQgdHJlZV9zaXplIGZyb20gXCIuL3NpemUuanNcIjtcbmltcG9ydCB0cmVlX3Zpc2l0IGZyb20gXCIuL3Zpc2l0LmpzXCI7XG5pbXBvcnQgdHJlZV92aXNpdEFmdGVyIGZyb20gXCIuL3Zpc2l0QWZ0ZXIuanNcIjtcbmltcG9ydCB0cmVlX3gsIHtkZWZhdWx0WH0gZnJvbSBcIi4veC5qc1wiO1xuaW1wb3J0IHRyZWVfeSwge2RlZmF1bHRZfSBmcm9tIFwiLi95LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YWR0cmVlKG5vZGVzLCB4LCB5KSB7XG4gIHZhciB0cmVlID0gbmV3IFF1YWR0cmVlKHggPT0gbnVsbCA/IGRlZmF1bHRYIDogeCwgeSA9PSBudWxsID8gZGVmYXVsdFkgOiB5LCBOYU4sIE5hTiwgTmFOLCBOYU4pO1xuICByZXR1cm4gbm9kZXMgPT0gbnVsbCA/IHRyZWUgOiB0cmVlLmFkZEFsbChub2Rlcyk7XG59XG5cbmZ1bmN0aW9uIFF1YWR0cmVlKHgsIHksIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHRoaXMuX3ggPSB4O1xuICB0aGlzLl95ID0geTtcbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgdGhpcy5fcm9vdCA9IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbGVhZl9jb3B5KGxlYWYpIHtcbiAgdmFyIGNvcHkgPSB7ZGF0YTogbGVhZi5kYXRhfSwgbmV4dCA9IGNvcHk7XG4gIHdoaWxlIChsZWFmID0gbGVhZi5uZXh0KSBuZXh0ID0gbmV4dC5uZXh0ID0ge2RhdGE6IGxlYWYuZGF0YX07XG4gIHJldHVybiBjb3B5O1xufVxuXG52YXIgdHJlZVByb3RvID0gcXVhZHRyZWUucHJvdG90eXBlID0gUXVhZHRyZWUucHJvdG90eXBlO1xuXG50cmVlUHJvdG8uY29weSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29weSA9IG5ldyBRdWFkdHJlZSh0aGlzLl94LCB0aGlzLl95LCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSksXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIG5vZGVzLFxuICAgICAgY2hpbGQ7XG5cbiAgaWYgKCFub2RlKSByZXR1cm4gY29weTtcblxuICBpZiAoIW5vZGUubGVuZ3RoKSByZXR1cm4gY29weS5fcm9vdCA9IGxlYWZfY29weShub2RlKSwgY29weTtcblxuICBub2RlcyA9IFt7c291cmNlOiBub2RlLCB0YXJnZXQ6IGNvcHkuX3Jvb3QgPSBuZXcgQXJyYXkoNCl9XTtcbiAgd2hpbGUgKG5vZGUgPSBub2Rlcy5wb3AoKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlLnNvdXJjZVtpXSkge1xuICAgICAgICBpZiAoY2hpbGQubGVuZ3RoKSBub2Rlcy5wdXNoKHtzb3VyY2U6IGNoaWxkLCB0YXJnZXQ6IG5vZGUudGFyZ2V0W2ldID0gbmV3IEFycmF5KDQpfSk7XG4gICAgICAgIGVsc2Ugbm9kZS50YXJnZXRbaV0gPSBsZWFmX2NvcHkoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufTtcblxudHJlZVByb3RvLmFkZCA9IHRyZWVfYWRkO1xudHJlZVByb3RvLmFkZEFsbCA9IHRyZWVfYWRkQWxsO1xudHJlZVByb3RvLmNvdmVyID0gdHJlZV9jb3ZlcjtcbnRyZWVQcm90by5kYXRhID0gdHJlZV9kYXRhO1xudHJlZVByb3RvLmV4dGVudCA9IHRyZWVfZXh0ZW50O1xudHJlZVByb3RvLmZpbmQgPSB0cmVlX2ZpbmQ7XG50cmVlUHJvdG8ucmVtb3ZlID0gdHJlZV9yZW1vdmU7XG50cmVlUHJvdG8ucmVtb3ZlQWxsID0gdHJlZV9yZW1vdmVBbGw7XG50cmVlUHJvdG8ucm9vdCA9IHRyZWVfcm9vdDtcbnRyZWVQcm90by5zaXplID0gdHJlZV9zaXplO1xudHJlZVByb3RvLnZpc2l0ID0gdHJlZV92aXNpdDtcbnRyZWVQcm90by52aXNpdEFmdGVyID0gdHJlZV92aXNpdEFmdGVyO1xudHJlZVByb3RvLnggPSB0cmVlX3g7XG50cmVlUHJvdG8ueSA9IHRyZWVfeTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihyYW5kb20pIHtcbiAgcmV0dXJuIChyYW5kb20oKSAtIDAuNSkgKiAxZS02O1xufVxuIiwgImltcG9ydCB7cXVhZHRyZWV9IGZyb20gXCJkMy1xdWFkdHJlZVwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgamlnZ2xlIGZyb20gXCIuL2ppZ2dsZS5qc1wiO1xuXG5mdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueCArIGQudng7XG59XG5cbmZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55ICsgZC52eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFkaXVzKSB7XG4gIHZhciBub2RlcyxcbiAgICAgIHJhZGlpLFxuICAgICAgcmFuZG9tLFxuICAgICAgc3RyZW5ndGggPSAxLFxuICAgICAgaXRlcmF0aW9ucyA9IDE7XG5cbiAgaWYgKHR5cGVvZiByYWRpdXMgIT09IFwiZnVuY3Rpb25cIikgcmFkaXVzID0gY29uc3RhbnQocmFkaXVzID09IG51bGwgPyAxIDogK3JhZGl1cyk7XG5cbiAgZnVuY3Rpb24gZm9yY2UoKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIHRyZWUsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHhpLFxuICAgICAgICB5aSxcbiAgICAgICAgcmksXG4gICAgICAgIHJpMjtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaXRlcmF0aW9uczsgKytrKSB7XG4gICAgICB0cmVlID0gcXVhZHRyZWUobm9kZXMsIHgsIHkpLnZpc2l0QWZ0ZXIocHJlcGFyZSk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgcmkgPSByYWRpaVtub2RlLmluZGV4XSwgcmkyID0gcmkgKiByaTtcbiAgICAgICAgeGkgPSBub2RlLnggKyBub2RlLnZ4O1xuICAgICAgICB5aSA9IG5vZGUueSArIG5vZGUudnk7XG4gICAgICAgIHRyZWUudmlzaXQoYXBwbHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5KHF1YWQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgICB2YXIgZGF0YSA9IHF1YWQuZGF0YSwgcmogPSBxdWFkLnIsIHIgPSByaSArIHJqO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEuaW5kZXggPiBub2RlLmluZGV4KSB7XG4gICAgICAgICAgdmFyIHggPSB4aSAtIGRhdGEueCAtIGRhdGEudngsXG4gICAgICAgICAgICAgIHkgPSB5aSAtIGRhdGEueSAtIGRhdGEudnksXG4gICAgICAgICAgICAgIGwgPSB4ICogeCArIHkgKiB5O1xuICAgICAgICAgIGlmIChsIDwgciAqIHIpIHtcbiAgICAgICAgICAgIGlmICh4ID09PSAwKSB4ID0gamlnZ2xlKHJhbmRvbSksIGwgKz0geCAqIHg7XG4gICAgICAgICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZShyYW5kb20pLCBsICs9IHkgKiB5O1xuICAgICAgICAgICAgbCA9IChyIC0gKGwgPSBNYXRoLnNxcnQobCkpKSAvIGwgKiBzdHJlbmd0aDtcbiAgICAgICAgICAgIG5vZGUudnggKz0gKHggKj0gbCkgKiAociA9IChyaiAqPSByaikgLyAocmkyICsgcmopKTtcbiAgICAgICAgICAgIG5vZGUudnkgKz0gKHkgKj0gbCkgKiByO1xuICAgICAgICAgICAgZGF0YS52eCAtPSB4ICogKHIgPSAxIC0gcik7XG4gICAgICAgICAgICBkYXRhLnZ5IC09IHkgKiByO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4geDAgPiB4aSArIHIgfHwgeDEgPCB4aSAtIHIgfHwgeTAgPiB5aSArIHIgfHwgeTEgPCB5aSAtIHI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZShxdWFkKSB7XG4gICAgaWYgKHF1YWQuZGF0YSkgcmV0dXJuIHF1YWQuciA9IHJhZGlpW3F1YWQuZGF0YS5pbmRleF07XG4gICAgZm9yICh2YXIgaSA9IHF1YWQuciA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGlmIChxdWFkW2ldICYmIHF1YWRbaV0uciA+IHF1YWQucikge1xuICAgICAgICBxdWFkLnIgPSBxdWFkW2ldLnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG4gICAgcmFkaWkgPSBuZXcgQXJyYXkobik7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgbm9kZSA9IG5vZGVzW2ldLCByYWRpaVtub2RlLmluZGV4XSA9ICtyYWRpdXMobm9kZSwgaSwgbm9kZXMpO1xuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF9ub2RlcywgX3JhbmRvbSkge1xuICAgIG5vZGVzID0gX25vZGVzO1xuICAgIHJhbmRvbSA9IF9yYW5kb207XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLml0ZXJhdGlvbnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaXRlcmF0aW9ucyA9ICtfLCBmb3JjZSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gK18sIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiByYWRpdXM7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwgImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGppZ2dsZSBmcm9tIFwiLi9qaWdnbGUuanNcIjtcblxuZnVuY3Rpb24gaW5kZXgoZCkge1xuICByZXR1cm4gZC5pbmRleDtcbn1cblxuZnVuY3Rpb24gZmluZChub2RlQnlJZCwgbm9kZUlkKSB7XG4gIHZhciBub2RlID0gbm9kZUJ5SWQuZ2V0KG5vZGVJZCk7XG4gIGlmICghbm9kZSkgdGhyb3cgbmV3IEVycm9yKFwibm9kZSBub3QgZm91bmQ6IFwiICsgbm9kZUlkKTtcbiAgcmV0dXJuIG5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxpbmtzKSB7XG4gIHZhciBpZCA9IGluZGV4LFxuICAgICAgc3RyZW5ndGggPSBkZWZhdWx0U3RyZW5ndGgsXG4gICAgICBzdHJlbmd0aHMsXG4gICAgICBkaXN0YW5jZSA9IGNvbnN0YW50KDMwKSxcbiAgICAgIGRpc3RhbmNlcyxcbiAgICAgIG5vZGVzLFxuICAgICAgY291bnQsXG4gICAgICBiaWFzLFxuICAgICAgcmFuZG9tLFxuICAgICAgaXRlcmF0aW9ucyA9IDE7XG5cbiAgaWYgKGxpbmtzID09IG51bGwpIGxpbmtzID0gW107XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFN0cmVuZ3RoKGxpbmspIHtcbiAgICByZXR1cm4gMSAvIE1hdGgubWluKGNvdW50W2xpbmsuc291cmNlLmluZGV4XSwgY291bnRbbGluay50YXJnZXQuaW5kZXhdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgayA9IDAsIG4gPSBsaW5rcy5sZW5ndGg7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsaW5rLCBzb3VyY2UsIHRhcmdldCwgeCwgeSwgbCwgYjsgaSA8IG47ICsraSkge1xuICAgICAgICBsaW5rID0gbGlua3NbaV0sIHNvdXJjZSA9IGxpbmsuc291cmNlLCB0YXJnZXQgPSBsaW5rLnRhcmdldDtcbiAgICAgICAgeCA9IHRhcmdldC54ICsgdGFyZ2V0LnZ4IC0gc291cmNlLnggLSBzb3VyY2UudnggfHwgamlnZ2xlKHJhbmRvbSk7XG4gICAgICAgIHkgPSB0YXJnZXQueSArIHRhcmdldC52eSAtIHNvdXJjZS55IC0gc291cmNlLnZ5IHx8IGppZ2dsZShyYW5kb20pO1xuICAgICAgICBsID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgICBsID0gKGwgLSBkaXN0YW5jZXNbaV0pIC8gbCAqIGFscGhhICogc3RyZW5ndGhzW2ldO1xuICAgICAgICB4ICo9IGwsIHkgKj0gbDtcbiAgICAgICAgdGFyZ2V0LnZ4IC09IHggKiAoYiA9IGJpYXNbaV0pO1xuICAgICAgICB0YXJnZXQudnkgLT0geSAqIGI7XG4gICAgICAgIHNvdXJjZS52eCArPSB4ICogKGIgPSAxIC0gYik7XG4gICAgICAgIHNvdXJjZS52eSArPSB5ICogYjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIGlmICghbm9kZXMpIHJldHVybjtcblxuICAgIHZhciBpLFxuICAgICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBtID0gbGlua3MubGVuZ3RoLFxuICAgICAgICBub2RlQnlJZCA9IG5ldyBNYXAobm9kZXMubWFwKChkLCBpKSA9PiBbaWQoZCwgaSwgbm9kZXMpLCBkXSkpLFxuICAgICAgICBsaW5rO1xuXG4gICAgZm9yIChpID0gMCwgY291bnQgPSBuZXcgQXJyYXkobik7IGkgPCBtOyArK2kpIHtcbiAgICAgIGxpbmsgPSBsaW5rc1tpXSwgbGluay5pbmRleCA9IGk7XG4gICAgICBpZiAodHlwZW9mIGxpbmsuc291cmNlICE9PSBcIm9iamVjdFwiKSBsaW5rLnNvdXJjZSA9IGZpbmQobm9kZUJ5SWQsIGxpbmsuc291cmNlKTtcbiAgICAgIGlmICh0eXBlb2YgbGluay50YXJnZXQgIT09IFwib2JqZWN0XCIpIGxpbmsudGFyZ2V0ID0gZmluZChub2RlQnlJZCwgbGluay50YXJnZXQpO1xuICAgICAgY291bnRbbGluay5zb3VyY2UuaW5kZXhdID0gKGNvdW50W2xpbmsuc291cmNlLmluZGV4XSB8fCAwKSArIDE7XG4gICAgICBjb3VudFtsaW5rLnRhcmdldC5pbmRleF0gPSAoY291bnRbbGluay50YXJnZXQuaW5kZXhdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBiaWFzID0gbmV3IEFycmF5KG0pOyBpIDwgbTsgKytpKSB7XG4gICAgICBsaW5rID0gbGlua3NbaV0sIGJpYXNbaV0gPSBjb3VudFtsaW5rLnNvdXJjZS5pbmRleF0gLyAoY291bnRbbGluay5zb3VyY2UuaW5kZXhdICsgY291bnRbbGluay50YXJnZXQuaW5kZXhdKTtcbiAgICB9XG5cbiAgICBzdHJlbmd0aHMgPSBuZXcgQXJyYXkobSksIGluaXRpYWxpemVTdHJlbmd0aCgpO1xuICAgIGRpc3RhbmNlcyA9IG5ldyBBcnJheShtKSwgaW5pdGlhbGl6ZURpc3RhbmNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplU3RyZW5ndGgoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBsaW5rcy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9ICtzdHJlbmd0aChsaW5rc1tpXSwgaSwgbGlua3MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVEaXN0YW5jZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGxpbmtzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgZGlzdGFuY2VzW2ldID0gK2Rpc3RhbmNlKGxpbmtzW2ldLCBpLCBsaW5rcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF9ub2RlcywgX3JhbmRvbSkge1xuICAgIG5vZGVzID0gX25vZGVzO1xuICAgIHJhbmRvbSA9IF9yYW5kb207XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLmxpbmtzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGxpbmtzID0gXywgaW5pdGlhbGl6ZSgpLCBmb3JjZSkgOiBsaW5rcztcbiAgfTtcblxuICBmb3JjZS5pZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpZCA9IF8sIGZvcmNlKSA6IGlkO1xuICB9O1xuXG4gIGZvcmNlLml0ZXJhdGlvbnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaXRlcmF0aW9ucyA9ICtfLCBmb3JjZSkgOiBpdGVyYXRpb25zO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemVTdHJlbmd0aCgpLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5kaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkaXN0YW5jZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplRGlzdGFuY2UoKSwgZm9yY2UpIDogZGlzdGFuY2U7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwgIi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpbmVhcl9jb25ncnVlbnRpYWxfZ2VuZXJhdG9yI1BhcmFtZXRlcnNfaW5fY29tbW9uX3VzZVxuY29uc3QgYSA9IDE2NjQ1MjU7XG5jb25zdCBjID0gMTAxMzkwNDIyMztcbmNvbnN0IG0gPSA0Mjk0OTY3Mjk2OyAvLyAyXjMyXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgcyA9IDE7XG4gIHJldHVybiAoKSA9PiAocyA9IChhICogcyArIGMpICUgbSkgLyBtO1xufVxuIiwgImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lcn0gZnJvbSBcImQzLXRpbWVyXCI7XG5pbXBvcnQgbGNnIGZyb20gXCIuL2xjZy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24geChkKSB7XG4gIHJldHVybiBkLng7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGQueTtcbn1cblxudmFyIGluaXRpYWxSYWRpdXMgPSAxMCxcbiAgICBpbml0aWFsQW5nbGUgPSBNYXRoLlBJICogKDMgLSBNYXRoLnNxcnQoNSkpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2Rlcykge1xuICB2YXIgc2ltdWxhdGlvbixcbiAgICAgIGFscGhhID0gMSxcbiAgICAgIGFscGhhTWluID0gMC4wMDEsXG4gICAgICBhbHBoYURlY2F5ID0gMSAtIE1hdGgucG93KGFscGhhTWluLCAxIC8gMzAwKSxcbiAgICAgIGFscGhhVGFyZ2V0ID0gMCxcbiAgICAgIHZlbG9jaXR5RGVjYXkgPSAwLjYsXG4gICAgICBmb3JjZXMgPSBuZXcgTWFwKCksXG4gICAgICBzdGVwcGVyID0gdGltZXIoc3RlcCksXG4gICAgICBldmVudCA9IGRpc3BhdGNoKFwidGlja1wiLCBcImVuZFwiKSxcbiAgICAgIHJhbmRvbSA9IGxjZygpO1xuXG4gIGlmIChub2RlcyA9PSBudWxsKSBub2RlcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIHN0ZXAoKSB7XG4gICAgdGljaygpO1xuICAgIGV2ZW50LmNhbGwoXCJ0aWNrXCIsIHNpbXVsYXRpb24pO1xuICAgIGlmIChhbHBoYSA8IGFscGhhTWluKSB7XG4gICAgICBzdGVwcGVyLnN0b3AoKTtcbiAgICAgIGV2ZW50LmNhbGwoXCJlbmRcIiwgc2ltdWxhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdGljayhpdGVyYXRpb25zKSB7XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG5cbiAgICBpZiAoaXRlcmF0aW9ucyA9PT0gdW5kZWZpbmVkKSBpdGVyYXRpb25zID0gMTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaXRlcmF0aW9uczsgKytrKSB7XG4gICAgICBhbHBoYSArPSAoYWxwaGFUYXJnZXQgLSBhbHBoYSkgKiBhbHBoYURlY2F5O1xuXG4gICAgICBmb3JjZXMuZm9yRWFjaChmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICBmb3JjZShhbHBoYSk7XG4gICAgICB9KTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLmZ4ID09IG51bGwpIG5vZGUueCArPSBub2RlLnZ4ICo9IHZlbG9jaXR5RGVjYXk7XG4gICAgICAgIGVsc2Ugbm9kZS54ID0gbm9kZS5meCwgbm9kZS52eCA9IDA7XG4gICAgICAgIGlmIChub2RlLmZ5ID09IG51bGwpIG5vZGUueSArPSBub2RlLnZ5ICo9IHZlbG9jaXR5RGVjYXk7XG4gICAgICAgIGVsc2Ugbm9kZS55ID0gbm9kZS5meSwgbm9kZS52eSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbXVsYXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplTm9kZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS5pbmRleCA9IGk7XG4gICAgICBpZiAobm9kZS5meCAhPSBudWxsKSBub2RlLnggPSBub2RlLmZ4O1xuICAgICAgaWYgKG5vZGUuZnkgIT0gbnVsbCkgbm9kZS55ID0gbm9kZS5meTtcbiAgICAgIGlmIChpc05hTihub2RlLngpIHx8IGlzTmFOKG5vZGUueSkpIHtcbiAgICAgICAgdmFyIHJhZGl1cyA9IGluaXRpYWxSYWRpdXMgKiBNYXRoLnNxcnQoMC41ICsgaSksIGFuZ2xlID0gaSAqIGluaXRpYWxBbmdsZTtcbiAgICAgICAgbm9kZS54ID0gcmFkaXVzICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBub2RlLnkgPSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4obm9kZS52eCkgfHwgaXNOYU4obm9kZS52eSkpIHtcbiAgICAgICAgbm9kZS52eCA9IG5vZGUudnkgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVGb3JjZShmb3JjZSkge1xuICAgIGlmIChmb3JjZS5pbml0aWFsaXplKSBmb3JjZS5pbml0aWFsaXplKG5vZGVzLCByYW5kb20pO1xuICAgIHJldHVybiBmb3JjZTtcbiAgfVxuXG4gIGluaXRpYWxpemVOb2RlcygpO1xuXG4gIHJldHVybiBzaW11bGF0aW9uID0ge1xuICAgIHRpY2s6IHRpY2ssXG5cbiAgICByZXN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzdGVwcGVyLnJlc3RhcnQoc3RlcCksIHNpbXVsYXRpb247XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXBwZXIuc3RvcCgpLCBzaW11bGF0aW9uO1xuICAgIH0sXG5cbiAgICBub2RlczogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobm9kZXMgPSBfLCBpbml0aWFsaXplTm9kZXMoKSwgZm9yY2VzLmZvckVhY2goaW5pdGlhbGl6ZUZvcmNlKSwgc2ltdWxhdGlvbikgOiBub2RlcztcbiAgICB9LFxuXG4gICAgYWxwaGE6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGE7XG4gICAgfSxcblxuICAgIGFscGhhTWluOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYU1pbiA9ICtfLCBzaW11bGF0aW9uKSA6IGFscGhhTWluO1xuICAgIH0sXG5cbiAgICBhbHBoYURlY2F5OiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYURlY2F5ID0gK18sIHNpbXVsYXRpb24pIDogK2FscGhhRGVjYXk7XG4gICAgfSxcblxuICAgIGFscGhhVGFyZ2V0OiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChhbHBoYVRhcmdldCA9ICtfLCBzaW11bGF0aW9uKSA6IGFscGhhVGFyZ2V0O1xuICAgIH0sXG5cbiAgICB2ZWxvY2l0eURlY2F5OiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2ZWxvY2l0eURlY2F5ID0gMSAtIF8sIHNpbXVsYXRpb24pIDogMSAtIHZlbG9jaXR5RGVjYXk7XG4gICAgfSxcblxuICAgIHJhbmRvbVNvdXJjZTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZG9tID0gXywgZm9yY2VzLmZvckVhY2goaW5pdGlhbGl6ZUZvcmNlKSwgc2ltdWxhdGlvbikgOiByYW5kb207XG4gICAgfSxcblxuICAgIGZvcmNlOiBmdW5jdGlvbihuYW1lLCBfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyAoKF8gPT0gbnVsbCA/IGZvcmNlcy5kZWxldGUobmFtZSkgOiBmb3JjZXMuc2V0KG5hbWUsIGluaXRpYWxpemVGb3JjZShfKSkpLCBzaW11bGF0aW9uKSA6IGZvcmNlcy5nZXQobmFtZSk7XG4gICAgfSxcblxuICAgIGZpbmQ6IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgIG4gPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgICAgZHgsXG4gICAgICAgICAgZHksXG4gICAgICAgICAgZDIsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBjbG9zZXN0O1xuXG4gICAgICBpZiAocmFkaXVzID09IG51bGwpIHJhZGl1cyA9IEluZmluaXR5O1xuICAgICAgZWxzZSByYWRpdXMgKj0gcmFkaXVzO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgZHggPSB4IC0gbm9kZS54O1xuICAgICAgICBkeSA9IHkgLSBub2RlLnk7XG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICAgIGlmIChkMiA8IHJhZGl1cykgY2xvc2VzdCA9IG5vZGUsIHJhZGl1cyA9IGQyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xvc2VzdDtcbiAgICB9LFxuXG4gICAgb246IGZ1bmN0aW9uKG5hbWUsIF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMSA/IChldmVudC5vbihuYW1lLCBfKSwgc2ltdWxhdGlvbikgOiBldmVudC5vbihuYW1lKTtcbiAgICB9XG4gIH07XG59XG4iLCAiaW1wb3J0IHtxdWFkdHJlZX0gZnJvbSBcImQzLXF1YWR0cmVlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBqaWdnbGUgZnJvbSBcIi4vamlnZ2xlLmpzXCI7XG5pbXBvcnQge3gsIHl9IGZyb20gXCIuL3NpbXVsYXRpb24uanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlcyxcbiAgICAgIG5vZGUsXG4gICAgICByYW5kb20sXG4gICAgICBhbHBoYSxcbiAgICAgIHN0cmVuZ3RoID0gY29uc3RhbnQoLTMwKSxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIGRpc3RhbmNlTWluMiA9IDEsXG4gICAgICBkaXN0YW5jZU1heDIgPSBJbmZpbml0eSxcbiAgICAgIHRoZXRhMiA9IDAuODE7XG5cbiAgZnVuY3Rpb24gZm9yY2UoXykge1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCB0cmVlID0gcXVhZHRyZWUobm9kZXMsIHgsIHkpLnZpc2l0QWZ0ZXIoYWNjdW11bGF0ZSk7XG4gICAgZm9yIChhbHBoYSA9IF8sIGkgPSAwOyBpIDwgbjsgKytpKSBub2RlID0gbm9kZXNbaV0sIHRyZWUudmlzaXQoYXBwbHkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgc3RyZW5ndGhzW25vZGUuaW5kZXhdID0gK3N0cmVuZ3RoKG5vZGUsIGksIG5vZGVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjY3VtdWxhdGUocXVhZCkge1xuICAgIHZhciBzdHJlbmd0aCA9IDAsIHEsIGMsIHdlaWdodCA9IDAsIHgsIHksIGk7XG5cbiAgICAvLyBGb3IgaW50ZXJuYWwgbm9kZXMsIGFjY3VtdWxhdGUgZm9yY2VzIGZyb20gY2hpbGQgcXVhZHJhbnRzLlxuICAgIGlmIChxdWFkLmxlbmd0aCkge1xuICAgICAgZm9yICh4ID0geSA9IGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgIGlmICgocSA9IHF1YWRbaV0pICYmIChjID0gTWF0aC5hYnMocS52YWx1ZSkpKSB7XG4gICAgICAgICAgc3RyZW5ndGggKz0gcS52YWx1ZSwgd2VpZ2h0ICs9IGMsIHggKz0gYyAqIHEueCwgeSArPSBjICogcS55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWFkLnggPSB4IC8gd2VpZ2h0O1xuICAgICAgcXVhZC55ID0geSAvIHdlaWdodDtcbiAgICB9XG5cbiAgICAvLyBGb3IgbGVhZiBub2RlcywgYWNjdW11bGF0ZSBmb3JjZXMgZnJvbSBjb2luY2lkZW50IHF1YWRyYW50cy5cbiAgICBlbHNlIHtcbiAgICAgIHEgPSBxdWFkO1xuICAgICAgcS54ID0gcS5kYXRhLng7XG4gICAgICBxLnkgPSBxLmRhdGEueTtcbiAgICAgIGRvIHN0cmVuZ3RoICs9IHN0cmVuZ3Roc1txLmRhdGEuaW5kZXhdO1xuICAgICAgd2hpbGUgKHEgPSBxLm5leHQpO1xuICAgIH1cblxuICAgIHF1YWQudmFsdWUgPSBzdHJlbmd0aDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5KHF1YWQsIHgxLCBfLCB4Mikge1xuICAgIGlmICghcXVhZC52YWx1ZSkgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgeCA9IHF1YWQueCAtIG5vZGUueCxcbiAgICAgICAgeSA9IHF1YWQueSAtIG5vZGUueSxcbiAgICAgICAgdyA9IHgyIC0geDEsXG4gICAgICAgIGwgPSB4ICogeCArIHkgKiB5O1xuXG4gICAgLy8gQXBwbHkgdGhlIEJhcm5lcy1IdXQgYXBwcm94aW1hdGlvbiBpZiBwb3NzaWJsZS5cbiAgICAvLyBMaW1pdCBmb3JjZXMgZm9yIHZlcnkgY2xvc2Ugbm9kZXM7IHJhbmRvbWl6ZSBkaXJlY3Rpb24gaWYgY29pbmNpZGVudC5cbiAgICBpZiAodyAqIHcgLyB0aGV0YTIgPCBsKSB7XG4gICAgICBpZiAobCA8IGRpc3RhbmNlTWF4Mikge1xuICAgICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZShyYW5kb20pLCBsICs9IHggKiB4O1xuICAgICAgICBpZiAoeSA9PT0gMCkgeSA9IGppZ2dsZShyYW5kb20pLCBsICs9IHkgKiB5O1xuICAgICAgICBpZiAobCA8IGRpc3RhbmNlTWluMikgbCA9IE1hdGguc3FydChkaXN0YW5jZU1pbjIgKiBsKTtcbiAgICAgICAgbm9kZS52eCArPSB4ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgICAgbm9kZS52eSArPSB5ICogcXVhZC52YWx1ZSAqIGFscGhhIC8gbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgcHJvY2VzcyBwb2ludHMgZGlyZWN0bHkuXG4gICAgZWxzZSBpZiAocXVhZC5sZW5ndGggfHwgbCA+PSBkaXN0YW5jZU1heDIpIHJldHVybjtcblxuICAgIC8vIExpbWl0IGZvcmNlcyBmb3IgdmVyeSBjbG9zZSBub2RlczsgcmFuZG9taXplIGRpcmVjdGlvbiBpZiBjb2luY2lkZW50LlxuICAgIGlmIChxdWFkLmRhdGEgIT09IG5vZGUgfHwgcXVhZC5uZXh0KSB7XG4gICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZShyYW5kb20pLCBsICs9IHggKiB4O1xuICAgICAgaWYgKHkgPT09IDApIHkgPSBqaWdnbGUocmFuZG9tKSwgbCArPSB5ICogeTtcbiAgICAgIGlmIChsIDwgZGlzdGFuY2VNaW4yKSBsID0gTWF0aC5zcXJ0KGRpc3RhbmNlTWluMiAqIGwpO1xuICAgIH1cblxuICAgIGRvIGlmIChxdWFkLmRhdGEgIT09IG5vZGUpIHtcbiAgICAgIHcgPSBzdHJlbmd0aHNbcXVhZC5kYXRhLmluZGV4XSAqIGFscGhhIC8gbDtcbiAgICAgIG5vZGUudnggKz0geCAqIHc7XG4gICAgICBub2RlLnZ5ICs9IHkgKiB3O1xuICAgIH0gd2hpbGUgKHF1YWQgPSBxdWFkLm5leHQpO1xuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF9ub2RlcywgX3JhbmRvbSkge1xuICAgIG5vZGVzID0gX25vZGVzO1xuICAgIHJhbmRvbSA9IF9yYW5kb207XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UuZGlzdGFuY2VNaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGlzdGFuY2VNaW4yID0gXyAqIF8sIGZvcmNlKSA6IE1hdGguc3FydChkaXN0YW5jZU1pbjIpO1xuICB9O1xuXG4gIGZvcmNlLmRpc3RhbmNlTWF4ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRpc3RhbmNlTWF4MiA9IF8gKiBfLCBmb3JjZSkgOiBNYXRoLnNxcnQoZGlzdGFuY2VNYXgyKTtcbiAgfTtcblxuICBmb3JjZS50aGV0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGV0YTIgPSBfICogXywgZm9yY2UpIDogTWF0aC5zcXJ0KHRoZXRhMik7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIE1hdGguYWJzKHggPSBNYXRoLnJvdW5kKHgpKSA+PSAxZTIxXG4gICAgICA/IHgudG9Mb2NhbGVTdHJpbmcoXCJlblwiKS5yZXBsYWNlKC8sL2csIFwiXCIpXG4gICAgICA6IHgudG9TdHJpbmcoMTApO1xufVxuXG4vLyBDb21wdXRlcyB0aGUgZGVjaW1hbCBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQgb2YgdGhlIHNwZWNpZmllZCBudW1iZXIgeCB3aXRoXG4vLyBzaWduaWZpY2FudCBkaWdpdHMgcCwgd2hlcmUgeCBpcyBwb3NpdGl2ZSBhbmQgcCBpcyBpbiBbMSwgMjFdIG9yIHVuZGVmaW5lZC5cbi8vIEZvciBleGFtcGxlLCBmb3JtYXREZWNpbWFsUGFydHMoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApIHtcbiAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCBcdTAwQjFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwgImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsUGFydHMoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncm91cGluZywgdGhvdXNhbmRzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgdCA9IFtdLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xuICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICB9O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwgIi8vIFtbZmlsbF1hbGlnbl1bc2lnbl1bc3ltYm9sXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bfl1bdHlwZV1cbnZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoe1xuICAgIGZpbGw6IG1hdGNoWzFdLFxuICAgIGFsaWduOiBtYXRjaFsyXSxcbiAgICBzaWduOiBtYXRjaFszXSxcbiAgICBzeW1ib2w6IG1hdGNoWzRdLFxuICAgIHplcm86IG1hdGNoWzVdLFxuICAgIHdpZHRoOiBtYXRjaFs2XSxcbiAgICBjb21tYTogbWF0Y2hbN10sXG4gICAgcHJlY2lzaW9uOiBtYXRjaFs4XSAmJiBtYXRjaFs4XS5zbGljZSgxKSxcbiAgICB0cmltOiBtYXRjaFs5XSxcbiAgICB0eXBlOiBtYXRjaFsxMF1cbiAgfSk7XG59XG5cbmZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUgPSBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlOyAvLyBpbnN0YW5jZW9mXG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIHRoaXMuZmlsbCA9IHNwZWNpZmllci5maWxsID09PSB1bmRlZmluZWQgPyBcIiBcIiA6IHNwZWNpZmllci5maWxsICsgXCJcIjtcbiAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xuICB0aGlzLnNpZ24gPSBzcGVjaWZpZXIuc2lnbiA9PT0gdW5kZWZpbmVkID8gXCItXCIgOiBzcGVjaWZpZXIuc2lnbiArIFwiXCI7XG4gIHRoaXMuc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci5zeW1ib2wgKyBcIlwiO1xuICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xuICB0aGlzLndpZHRoID0gc3BlY2lmaWVyLndpZHRoID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLndpZHRoO1xuICB0aGlzLmNvbW1hID0gISFzcGVjaWZpZXIuY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XG4gIHRoaXMudHJpbSA9ICEhc3BlY2lmaWVyLnRyaW07XG4gIHRoaXMudHlwZSA9IHNwZWNpZmllci50eXBlID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnR5cGUgKyBcIlwiO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArICh0aGlzLnRyaW0gPyBcIn5cIiA6IFwiXCIpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCAiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwgImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwgImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCAiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuaW1wb3J0IGZvcm1hdFByZWZpeEF1dG8gZnJvbSBcIi4vZm9ybWF0UHJlZml4QXV0by5qc1wiO1xuaW1wb3J0IGZvcm1hdFJvdW5kZWQgZnJvbSBcIi4vZm9ybWF0Um91bmRlZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiJVwiOiAoeCwgcCkgPT4gKHggKiAxMDApLnRvRml4ZWQocCksXG4gIFwiYlwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygyKSxcbiAgXCJjXCI6ICh4KSA9PiB4ICsgXCJcIixcbiAgXCJkXCI6IGZvcm1hdERlY2ltYWwsXG4gIFwiZVwiOiAoeCwgcCkgPT4geC50b0V4cG9uZW50aWFsKHApLFxuICBcImZcIjogKHgsIHApID0+IHgudG9GaXhlZChwKSxcbiAgXCJnXCI6ICh4LCBwKSA9PiB4LnRvUHJlY2lzaW9uKHApLFxuICBcIm9cIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCksXG4gIFwicFwiOiAoeCwgcCkgPT4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksXG4gIFwieFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNilcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsICJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCJcdTAwQjVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyA9PT0gdW5kZWZpbmVkIHx8IGxvY2FsZS50aG91c2FuZHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5IDogZm9ybWF0R3JvdXAobWFwLmNhbGwobG9jYWxlLmdyb3VwaW5nLCBOdW1iZXIpLCBsb2NhbGUudGhvdXNhbmRzICsgXCJcIiksXG4gICAgICBjdXJyZW5jeVByZWZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVswXSArIFwiXCIsXG4gICAgICBjdXJyZW5jeVN1ZmZpeCA9IGxvY2FsZS5jdXJyZW5jeSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGxvY2FsZS5jdXJyZW5jeVsxXSArIFwiXCIsXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwgPT09IHVuZGVmaW5lZCA/IFwiLlwiIDogbG9jYWxlLmRlY2ltYWwgKyBcIlwiLFxuICAgICAgbnVtZXJhbHMgPSBsb2NhbGUubnVtZXJhbHMgPT09IHVuZGVmaW5lZCA/IGlkZW50aXR5IDogZm9ybWF0TnVtZXJhbHMobWFwLmNhbGwobG9jYWxlLm51bWVyYWxzLCBTdHJpbmcpKSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCA9PT0gdW5kZWZpbmVkID8gXCIlXCIgOiBsb2NhbGUucGVyY2VudCArIFwiXCIsXG4gICAgICBtaW51cyA9IGxvY2FsZS5taW51cyA9PT0gdW5kZWZpbmVkID8gXCJcdTIyMTJcIiA6IGxvY2FsZS5taW51cyArIFwiXCIsXG4gICAgICBuYW4gPSBsb2NhbGUubmFuID09PSB1bmRlZmluZWQgPyBcIk5hTlwiIDogbG9jYWxlLm5hbiArIFwiXCI7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllcikge1xuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgdmFyIGZpbGwgPSBzcGVjaWZpZXIuZmlsbCxcbiAgICAgICAgYWxpZ24gPSBzcGVjaWZpZXIuYWxpZ24sXG4gICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCxcbiAgICAgICAgemVybyA9IHNwZWNpZmllci56ZXJvLFxuICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgY29tbWEgPSBzcGVjaWZpZXIuY29tbWEsXG4gICAgICAgIHByZWNpc2lvbiA9IHNwZWNpZmllci5wcmVjaXNpb24sXG4gICAgICAgIHRyaW0gPSBzcGVjaWZpZXIudHJpbSxcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gVGhlIFwiXCIgdHlwZSwgYW5kIGFueSBpbnZhbGlkIHR5cGUsIGlzIGFuIGFsaWFzIGZvciBcIi4xMn5nXCIuXG4gICAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCAmJiAocHJlY2lzaW9uID0gMTIpLCB0cmltID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gSWYgemVybyBmaWxsIGlzIHNwZWNpZmllZCwgcGFkZGluZyBnb2VzIGFmdGVyIHNpZ24gYW5kIGJlZm9yZSBkaWdpdHMuXG4gICAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICB2YXIgcHJlZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5UHJlZml4IDogc3ltYm9sID09PSBcIiNcIiAmJiAvW2JveFhdLy50ZXN0KHR5cGUpID8gXCIwXCIgKyB0eXBlLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgICBzdWZmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lTdWZmaXggOiAvWyVwXS8udGVzdCh0eXBlKSA/IHBlcmNlbnQgOiBcIlwiO1xuXG4gICAgLy8gV2hhdCBmb3JtYXQgZnVuY3Rpb24gc2hvdWxkIHdlIHVzZT9cbiAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAvLyBDYW4gdGhpcyB0eXBlIGdlbmVyYXRlIGV4cG9uZW50aWFsIG5vdGF0aW9uP1xuICAgIHZhciBmb3JtYXRUeXBlID0gZm9ybWF0VHlwZXNbdHlwZV0sXG4gICAgICAgIG1heWJlU3VmZml4ID0gL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG5vdCBzcGVjaWZpZWQsXG4gICAgLy8gb3IgY2xhbXAgdGhlIHNwZWNpZmllZCBwcmVjaXNpb24gdG8gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgLy8gRm9yIGZpeGVkIHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMCwgMjBdLlxuICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNlxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNpZ24uIC0wIGlzIG5vdCBsZXNzIHRoYW4gMCwgYnV0IDEgLyAtMCBpcyFcbiAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSB2YWx1ZSA8IDAgfHwgMSAvIHZhbHVlIDwgMDtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gbmFuIDogZm9ybWF0VHlwZShNYXRoLmFicyh2YWx1ZSksIHByZWNpc2lvbik7XG5cbiAgICAgICAgLy8gVHJpbSBpbnNpZ25pZmljYW50IHplcm9zLlxuICAgICAgICBpZiAodHJpbSkgdmFsdWUgPSBmb3JtYXRUcmltKHZhbHVlKTtcblxuICAgICAgICAvLyBJZiBhIG5lZ2F0aXZlIHZhbHVlIHJvdW5kcyB0byB6ZXJvIGFmdGVyIGZvcm1hdHRpbmcsIGFuZCBubyBleHBsaWNpdCBwb3NpdGl2ZSBzaWduIGlzIHJlcXVlc3RlZCwgaGlkZSB0aGUgc2lnbi5cbiAgICAgICAgaWYgKHZhbHVlTmVnYXRpdmUgJiYgK3ZhbHVlID09PSAwICYmIHNpZ24gIT09IFwiK1wiKSB2YWx1ZU5lZ2F0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgIHZhbHVlUHJlZml4ID0gKHZhbHVlTmVnYXRpdmUgPyAoc2lnbiA9PT0gXCIoXCIgPyBzaWduIDogbWludXMpIDogc2lnbiA9PT0gXCItXCIgfHwgc2lnbiA9PT0gXCIoXCIgPyBcIlwiIDogc2lnbikgKyB2YWx1ZVByZWZpeDtcbiAgICAgICAgdmFsdWVTdWZmaXggPSAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgdmFsdWVTdWZmaXggKyAodmFsdWVOZWdhdGl2ZSAmJiBzaWduID09PSBcIihcIiA/IFwiKVwiIDogXCJcIik7XG5cbiAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIFx1MjAxQ3ZhbHVlXHUyMDFEIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgLy8gZ3JvdXBlZCwgYW5kIGZyYWN0aW9uYWwgb3IgZXhwb25lbnRpYWwgXHUyMDFDc3VmZml4XHUyMDFEIHBhcnQgdGhhdCBpcyBub3QuXG4gICAgICAgIGlmIChtYXliZVN1ZmZpeCkge1xuICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCA0OCA+IGMgfHwgYyA+IDU3KSB7XG4gICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIG5vdCBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBiZWZvcmUgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiAhemVybykgdmFsdWUgPSBncm91cCh2YWx1ZSwgSW5maW5pdHkpO1xuXG4gICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlUHJlZml4Lmxlbmd0aCArIHZhbHVlLmxlbmd0aCArIHZhbHVlU3VmZml4Lmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nID0gbGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpIDogXCJcIjtcblxuICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgemVybykgdmFsdWUgPSBncm91cChwYWRkaW5nICsgdmFsdWUsIHBhZGRpbmcubGVuZ3RoID8gd2lkdGggLSB2YWx1ZVN1ZmZpeC5sZW5ndGggOiBJbmZpbml0eSksIHBhZGRpbmcgPSBcIlwiO1xuXG4gICAgICAvLyBSZWNvbnN0cnVjdCB0aGUgZmluYWwgb3V0cHV0IGJhc2VkIG9uIHRoZSBkZXNpcmVkIGFsaWdubWVudC5cbiAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgY2FzZSBcIjxcIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nOyBicmVhaztcbiAgICAgICAgY2FzZSBcIj1cIjogdmFsdWUgPSB2YWx1ZVByZWZpeCArIHBhZGRpbmcgKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgICAgY2FzZSBcIl5cIjogdmFsdWUgPSBwYWRkaW5nLnNsaWNlKDAsIGxlbmd0aCA9IHBhZGRpbmcubGVuZ3RoID4+IDEpICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZy5zbGljZShsZW5ndGgpOyBicmVhaztcbiAgICAgICAgZGVmYXVsdDogdmFsdWUgPSBwYWRkaW5nICsgdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4OyBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bWVyYWxzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3JtYXQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpIHtcbiAgICB2YXIgZiA9IG5ld0Zvcm1hdCgoc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciksIHNwZWNpZmllci50eXBlID0gXCJmXCIsIHNwZWNpZmllcikpLFxuICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgIGsgPSBNYXRoLnBvdygxMCwgLWUpLFxuICAgICAgICBwcmVmaXggPSBwcmVmaXhlc1s4ICsgZSAvIDNdO1xuICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGYoayAqIHZhbHVlKSArIHByZWZpeDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IG5ld0Zvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICB9O1xufVxuIiwgImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwgImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsICJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsICJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgbWF4KSB7XG4gIHN0ZXAgPSBNYXRoLmFicyhzdGVwKSwgbWF4ID0gTWF0aC5hYnMobWF4KSAtIHN0ZXA7XG4gIHJldHVybiBNYXRoLm1heCgwLCBleHBvbmVudChtYXgpIC0gZXhwb25lbnQoc3RlcCkpICsgMTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29uc3RhbnRzKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiAreDtcbn1cbiIsICJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHVuaXQgPSBbMCwgMV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGlzTmFOKGIpID8gTmFOIDogMC41KTtcbn1cblxuZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XG4gIHZhciB0O1xuICBpZiAoYSA+IGIpIHQgPSBhLCBhID0gYiwgYiA9IHQ7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG59XG5cbi8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcbiAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICByID0gbmV3IEFycmF5KGopLFxuICAgICAgaSA9IC0xO1xuXG4gIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIH1cblxuICB3aGlsZSAoKytpIDwgaikge1xuICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpID0gYmlzZWN0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xuICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcbiAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcbiAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICB1bmtub3duLFxuICAgICAgY2xhbXAgPSBpZGVudGl0eSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpO1xuICAgIGlmIChjbGFtcCAhPT0gaWRlbnRpdHkpIGNsYW1wID0gY2xhbXBlcihkb21haW5bMF0sIGRvbWFpbltuIC0gMV0pO1xuICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xuICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gQXJyYXkuZnJvbShfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gdHJ1ZSA6IGlkZW50aXR5LCByZXNjYWxlKCkpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cygpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKCkoaWRlbnRpdHksIGlkZW50aXR5KTtcbn1cbiIsICJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCAiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBab29tRXZlbnQodHlwZSwge1xuICBzb3VyY2VFdmVudCxcbiAgdGFyZ2V0LFxuICB0cmFuc2Zvcm0sXG4gIGRpc3BhdGNoXG59KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcbiAgICB0eXBlOiB7dmFsdWU6IHR5cGUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgc291cmNlRXZlbnQ6IHt2YWx1ZTogc291cmNlRXZlbnQsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZX0sXG4gICAgdGFyZ2V0OiB7dmFsdWU6IHRhcmdldCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfSxcbiAgICB0cmFuc2Zvcm06IHt2YWx1ZTogdHJhbnNmb3JtLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9LFxuICAgIF86IHt2YWx1ZTogZGlzcGF0Y2h9XG4gIH0pO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBUcmFuc2Zvcm0oaywgeCwgeSkge1xuICB0aGlzLmsgPSBrO1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNmb3JtLFxuICBzY2FsZTogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBrID09PSAxID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rICogaywgdGhpcy54LCB0aGlzLnkpO1xuICB9LFxuICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICByZXR1cm4geCA9PT0gMCAmIHkgPT09IDAgPyB0aGlzIDogbmV3IFRyYW5zZm9ybSh0aGlzLmssIHRoaXMueCArIHRoaXMuayAqIHgsIHRoaXMueSArIHRoaXMuayAqIHkpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24ocG9pbnQpIHtcbiAgICByZXR1cm4gW3BvaW50WzBdICogdGhpcy5rICsgdGhpcy54LCBwb2ludFsxXSAqIHRoaXMuayArIHRoaXMueV07XG4gIH0sXG4gIGFwcGx5WDogZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB4ICogdGhpcy5rICsgdGhpcy54O1xuICB9LFxuICBhcHBseVk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4geSAqIHRoaXMuayArIHRoaXMueTtcbiAgfSxcbiAgaW52ZXJ0OiBmdW5jdGlvbihsb2NhdGlvbikge1xuICAgIHJldHVybiBbKGxvY2F0aW9uWzBdIC0gdGhpcy54KSAvIHRoaXMuaywgKGxvY2F0aW9uWzFdIC0gdGhpcy55KSAvIHRoaXMua107XG4gIH0sXG4gIGludmVydFg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKHggLSB0aGlzLngpIC8gdGhpcy5rO1xuICB9LFxuICBpbnZlcnRZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuICh5IC0gdGhpcy55KSAvIHRoaXMuaztcbiAgfSxcbiAgcmVzY2FsZVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geC5jb3B5KCkuZG9tYWluKHgucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLCB0aGlzKS5tYXAoeC5pbnZlcnQsIHgpKTtcbiAgfSxcbiAgcmVzY2FsZVk6IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4geS5jb3B5KCkuZG9tYWluKHkucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLCB0aGlzKS5tYXAoeS5pbnZlcnQsIHkpKTtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIHRoaXMueCArIFwiLFwiICsgdGhpcy55ICsgXCIpIHNjYWxlKFwiICsgdGhpcy5rICsgXCIpXCI7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSBuZXcgVHJhbnNmb3JtKDEsIDAsIDApO1xuXG50cmFuc2Zvcm0ucHJvdG90eXBlID0gVHJhbnNmb3JtLnByb3RvdHlwZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fem9vbSkgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHJldHVybiBpZGVudGl0eTtcbiAgcmV0dXJuIG5vZGUuX196b29tO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cbiIsICJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlWm9vbX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3NlbGVjdCwgcG9pbnRlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBab29tRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCB7VHJhbnNmb3JtLCBpZGVudGl0eX0gZnJvbSBcIi4vdHJhbnNmb3JtLmpzXCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnQuanNcIjtcblxuLy8gSWdub3JlIHJpZ2h0LWNsaWNrLCBzaW5jZSB0aGF0IHNob3VsZCBvcGVuIHRoZSBjb250ZXh0IG1lbnUuXG4vLyBleGNlcHQgZm9yIHBpbmNoLXRvLXpvb20sIHdoaWNoIGlzIHNlbnQgYXMgYSB3aGVlbCtjdHJsS2V5IGV2ZW50XG5mdW5jdGlvbiBkZWZhdWx0RmlsdGVyKGV2ZW50KSB7XG4gIHJldHVybiAoIWV2ZW50LmN0cmxLZXkgfHwgZXZlbnQudHlwZSA9PT0gJ3doZWVsJykgJiYgIWV2ZW50LmJ1dHRvbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEV4dGVudCgpIHtcbiAgdmFyIGUgPSB0aGlzO1xuICBpZiAoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICBlID0gZS5vd25lclNWR0VsZW1lbnQgfHwgZTtcbiAgICBpZiAoZS5oYXNBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIpKSB7XG4gICAgICBlID0gZS52aWV3Qm94LmJhc2VWYWw7XG4gICAgICByZXR1cm4gW1tlLngsIGUueV0sIFtlLnggKyBlLndpZHRoLCBlLnkgKyBlLmhlaWdodF1dO1xuICAgIH1cbiAgICByZXR1cm4gW1swLCAwXSwgW2Uud2lkdGguYmFzZVZhbC52YWx1ZSwgZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dO1xuICB9XG4gIHJldHVybiBbWzAsIDBdLCBbZS5jbGllbnRXaWR0aCwgZS5jbGllbnRIZWlnaHRdXTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRyYW5zZm9ybSgpIHtcbiAgcmV0dXJuIHRoaXMuX196b29tIHx8IGlkZW50aXR5O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0V2hlZWxEZWx0YShldmVudCkge1xuICByZXR1cm4gLWV2ZW50LmRlbHRhWSAqIChldmVudC5kZWx0YU1vZGUgPT09IDEgPyAwLjA1IDogZXZlbnQuZGVsdGFNb2RlID8gMSA6IDAuMDAyKSAqIChldmVudC5jdHJsS2V5ID8gMTAgOiAxKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFRvdWNoYWJsZSgpIHtcbiAgcmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCAoXCJvbnRvdWNoc3RhcnRcIiBpbiB0aGlzKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbnN0cmFpbih0cmFuc2Zvcm0sIGV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSB7XG4gIHZhciBkeDAgPSB0cmFuc2Zvcm0uaW52ZXJ0WChleHRlbnRbMF1bMF0pIC0gdHJhbnNsYXRlRXh0ZW50WzBdWzBdLFxuICAgICAgZHgxID0gdHJhbnNmb3JtLmludmVydFgoZXh0ZW50WzFdWzBdKSAtIHRyYW5zbGF0ZUV4dGVudFsxXVswXSxcbiAgICAgIGR5MCA9IHRyYW5zZm9ybS5pbnZlcnRZKGV4dGVudFswXVsxXSkgLSB0cmFuc2xhdGVFeHRlbnRbMF1bMV0sXG4gICAgICBkeTEgPSB0cmFuc2Zvcm0uaW52ZXJ0WShleHRlbnRbMV1bMV0pIC0gdHJhbnNsYXRlRXh0ZW50WzFdWzFdO1xuICByZXR1cm4gdHJhbnNmb3JtLnRyYW5zbGF0ZShcbiAgICBkeDEgPiBkeDAgPyAoZHgwICsgZHgxKSAvIDIgOiBNYXRoLm1pbigwLCBkeDApIHx8IE1hdGgubWF4KDAsIGR4MSksXG4gICAgZHkxID4gZHkwID8gKGR5MCArIGR5MSkgLyAyIDogTWF0aC5taW4oMCwgZHkwKSB8fCBNYXRoLm1heCgwLCBkeTEpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGV4dGVudCA9IGRlZmF1bHRFeHRlbnQsXG4gICAgICBjb25zdHJhaW4gPSBkZWZhdWx0Q29uc3RyYWluLFxuICAgICAgd2hlZWxEZWx0YSA9IGRlZmF1bHRXaGVlbERlbHRhLFxuICAgICAgdG91Y2hhYmxlID0gZGVmYXVsdFRvdWNoYWJsZSxcbiAgICAgIHNjYWxlRXh0ZW50ID0gWzAsIEluZmluaXR5XSxcbiAgICAgIHRyYW5zbGF0ZUV4dGVudCA9IFtbLUluZmluaXR5LCAtSW5maW5pdHldLCBbSW5maW5pdHksIEluZmluaXR5XV0sXG4gICAgICBkdXJhdGlvbiA9IDI1MCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVab29tLFxuICAgICAgbGlzdGVuZXJzID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcInpvb21cIiwgXCJlbmRcIiksXG4gICAgICB0b3VjaHN0YXJ0aW5nLFxuICAgICAgdG91Y2hmaXJzdCxcbiAgICAgIHRvdWNoZW5kaW5nLFxuICAgICAgdG91Y2hEZWxheSA9IDUwMCxcbiAgICAgIHdoZWVsRGVsYXkgPSAxNTAsXG4gICAgICBjbGlja0Rpc3RhbmNlMiA9IDAsXG4gICAgICB0YXBEaXN0YW5jZSA9IDEwO1xuXG4gIGZ1bmN0aW9uIHpvb20oc2VsZWN0aW9uKSB7XG4gICAgc2VsZWN0aW9uXG4gICAgICAgIC5wcm9wZXJ0eShcIl9fem9vbVwiLCBkZWZhdWx0VHJhbnNmb3JtKVxuICAgICAgICAub24oXCJ3aGVlbC56b29tXCIsIHdoZWVsZWQsIHtwYXNzaXZlOiBmYWxzZX0pXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi56b29tXCIsIG1vdXNlZG93bmVkKVxuICAgICAgICAub24oXCJkYmxjbGljay56b29tXCIsIGRibGNsaWNrZWQpXG4gICAgICAuZmlsdGVyKHRvdWNoYWJsZSlcbiAgICAgICAgLm9uKFwidG91Y2hzdGFydC56b29tXCIsIHRvdWNoc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLnpvb21cIiwgdG91Y2htb3ZlZClcbiAgICAgICAgLm9uKFwidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIik7XG4gIH1cblxuICB6b29tLnRyYW5zZm9ybSA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KSB7XG4gICAgdmFyIHNlbGVjdGlvbiA9IGNvbGxlY3Rpb24uc2VsZWN0aW9uID8gY29sbGVjdGlvbi5zZWxlY3Rpb24oKSA6IGNvbGxlY3Rpb247XG4gICAgc2VsZWN0aW9uLnByb3BlcnR5KFwiX196b29tXCIsIGRlZmF1bHRUcmFuc2Zvcm0pO1xuICAgIGlmIChjb2xsZWN0aW9uICE9PSBzZWxlY3Rpb24pIHtcbiAgICAgIHNjaGVkdWxlKGNvbGxlY3Rpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIGdlc3R1cmUodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgIC5ldmVudChldmVudClcbiAgICAgICAgICAuc3RhcnQoKVxuICAgICAgICAgIC56b29tKG51bGwsIHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwiZnVuY3Rpb25cIiA/IHRyYW5zZm9ybS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdHJhbnNmb3JtKVxuICAgICAgICAgIC5lbmQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB6b29tLnNjYWxlQnkgPSBmdW5jdGlvbihzZWxlY3Rpb24sIGssIHAsIGV2ZW50KSB7XG4gICAgem9vbS5zY2FsZVRvKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgazAgPSB0aGlzLl9fem9vbS5rLFxuICAgICAgICAgIGsxID0gdHlwZW9mIGsgPT09IFwiZnVuY3Rpb25cIiA/IGsuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGs7XG4gICAgICByZXR1cm4gazAgKiBrMTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS5zY2FsZVRvID0gZnVuY3Rpb24oc2VsZWN0aW9uLCBrLCBwLCBldmVudCkge1xuICAgIHpvb20udHJhbnNmb3JtKHNlbGVjdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSA9IGV4dGVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgIHQwID0gdGhpcy5fX3pvb20sXG4gICAgICAgICAgcDAgPSBwID09IG51bGwgPyBjZW50cm9pZChlKSA6IHR5cGVvZiBwID09PSBcImZ1bmN0aW9uXCIgPyBwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBwLFxuICAgICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgICBrMSA9IHR5cGVvZiBrID09PSBcImZ1bmN0aW9uXCIgPyBrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBrO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0cmFuc2xhdGUoc2NhbGUodDAsIGsxKSwgcDAsIHAxKSwgZSwgdHJhbnNsYXRlRXh0ZW50KTtcbiAgICB9LCBwLCBldmVudCk7XG4gIH07XG5cbiAgem9vbS50cmFuc2xhdGVCeSA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgeCwgeSwgZXZlbnQpIHtcbiAgICB6b29tLnRyYW5zZm9ybShzZWxlY3Rpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbih0aGlzLl9fem9vbS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB4LFxuICAgICAgICB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogeVxuICAgICAgKSwgZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgbnVsbCwgZXZlbnQpO1xuICB9O1xuXG4gIHpvb20udHJhbnNsYXRlVG8gPSBmdW5jdGlvbihzZWxlY3Rpb24sIHgsIHksIHAsIGV2ZW50KSB7XG4gICAgem9vbS50cmFuc2Zvcm0oc2VsZWN0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlID0gZXh0ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgdCA9IHRoaXMuX196b29tLFxuICAgICAgICAgIHAwID0gcCA9PSBudWxsID8gY2VudHJvaWQoZSkgOiB0eXBlb2YgcCA9PT0gXCJmdW5jdGlvblwiID8gcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogcDtcbiAgICAgIHJldHVybiBjb25zdHJhaW4oaWRlbnRpdHkudHJhbnNsYXRlKHAwWzBdLCBwMFsxXSkuc2NhbGUodC5rKS50cmFuc2xhdGUoXG4gICAgICAgIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyAteC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXgsXG4gICAgICAgIHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyAteS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogLXlcbiAgICAgICksIGUsIHRyYW5zbGF0ZUV4dGVudCk7XG4gICAgfSwgcCwgZXZlbnQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKHRyYW5zZm9ybSwgaykge1xuICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIGspKTtcbiAgICByZXR1cm4gayA9PT0gdHJhbnNmb3JtLmsgPyB0cmFuc2Zvcm0gOiBuZXcgVHJhbnNmb3JtKGssIHRyYW5zZm9ybS54LCB0cmFuc2Zvcm0ueSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUodHJhbnNmb3JtLCBwMCwgcDEpIHtcbiAgICB2YXIgeCA9IHAwWzBdIC0gcDFbMF0gKiB0cmFuc2Zvcm0uaywgeSA9IHAwWzFdIC0gcDFbMV0gKiB0cmFuc2Zvcm0uaztcbiAgICByZXR1cm4geCA9PT0gdHJhbnNmb3JtLnggJiYgeSA9PT0gdHJhbnNmb3JtLnkgPyB0cmFuc2Zvcm0gOiBuZXcgVHJhbnNmb3JtKHRyYW5zZm9ybS5rLCB4LCB5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRyb2lkKGV4dGVudCkge1xuICAgIHJldHVybiBbKCtleHRlbnRbMF1bMF0gKyArZXh0ZW50WzFdWzBdKSAvIDIsICgrZXh0ZW50WzBdWzFdICsgK2V4dGVudFsxXVsxXSkgLyAyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKHRyYW5zaXRpb24sIHRyYW5zZm9ybSwgcG9pbnQsIGV2ZW50KSB7XG4gICAgdHJhbnNpdGlvblxuICAgICAgICAub24oXCJzdGFydC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZXZlbnQoZXZlbnQpLnN0YXJ0KCk7IH0pXG4gICAgICAgIC5vbihcImludGVycnVwdC56b29tIGVuZC56b29tXCIsIGZ1bmN0aW9uKCkgeyBnZXN0dXJlKHRoaXMsIGFyZ3VtZW50cykuZXZlbnQoZXZlbnQpLmVuZCgpOyB9KVxuICAgICAgICAudHdlZW4oXCJ6b29tXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgZyA9IGdlc3R1cmUodGhhdCwgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICAgICAgICBlID0gZXh0ZW50LmFwcGx5KHRoYXQsIGFyZ3MpLFxuICAgICAgICAgICAgICBwID0gcG9pbnQgPT0gbnVsbCA/IGNlbnRyb2lkKGUpIDogdHlwZW9mIHBvaW50ID09PSBcImZ1bmN0aW9uXCIgPyBwb2ludC5hcHBseSh0aGF0LCBhcmdzKSA6IHBvaW50LFxuICAgICAgICAgICAgICB3ID0gTWF0aC5tYXgoZVsxXVswXSAtIGVbMF1bMF0sIGVbMV1bMV0gLSBlWzBdWzFdKSxcbiAgICAgICAgICAgICAgYSA9IHRoYXQuX196b29tLFxuICAgICAgICAgICAgICBiID0gdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiID8gdHJhbnNmb3JtLmFwcGx5KHRoYXQsIGFyZ3MpIDogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoYS5pbnZlcnQocCkuY29uY2F0KHcgLyBhLmspLCBiLmludmVydChwKS5jb25jYXQodyAvIGIuaykpO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICBpZiAodCA9PT0gMSkgdCA9IGI7IC8vIEF2b2lkIHJvdW5kaW5nIGVycm9yIG9uIGVuZC5cbiAgICAgICAgICAgIGVsc2UgeyB2YXIgbCA9IGkodCksIGsgPSB3IC8gbFsyXTsgdCA9IG5ldyBUcmFuc2Zvcm0oaywgcFswXSAtIGxbMF0gKiBrLCBwWzFdIC0gbFsxXSAqIGspOyB9XG4gICAgICAgICAgICBnLnpvb20obnVsbCwgdCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXN0dXJlKHRoYXQsIGFyZ3MsIGNsZWFuKSB7XG4gICAgcmV0dXJuICghY2xlYW4gJiYgdGhhdC5fX3pvb21pbmcpIHx8IG5ldyBHZXN0dXJlKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gR2VzdHVyZSh0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuYWN0aXZlID0gMDtcbiAgICB0aGlzLnNvdXJjZUV2ZW50ID0gbnVsbDtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudC5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB0aGlzLnRhcHMgPSAwO1xuICB9XG5cbiAgR2VzdHVyZS5wcm90b3R5cGUgPSB7XG4gICAgZXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQpIHRoaXMuc291cmNlRXZlbnQgPSBldmVudDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHtcbiAgICAgICAgdGhpcy50aGF0Ll9fem9vbWluZyA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICB6b29tOiBmdW5jdGlvbihrZXksIHRyYW5zZm9ybSkge1xuICAgICAgaWYgKHRoaXMubW91c2UgJiYga2V5ICE9PSBcIm1vdXNlXCIpIHRoaXMubW91c2VbMV0gPSB0cmFuc2Zvcm0uaW52ZXJ0KHRoaXMubW91c2VbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gwICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMFsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDBbMF0pO1xuICAgICAgaWYgKHRoaXMudG91Y2gxICYmIGtleSAhPT0gXCJ0b3VjaFwiKSB0aGlzLnRvdWNoMVsxXSA9IHRyYW5zZm9ybS5pbnZlcnQodGhpcy50b3VjaDFbMF0pO1xuICAgICAgdGhpcy50aGF0Ll9fem9vbSA9IHRyYW5zZm9ybTtcbiAgICAgIHRoaXMuZW1pdChcInpvb21cIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZztcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgWm9vbUV2ZW50KHR5cGUsIHtcbiAgICAgICAgICBzb3VyY2VFdmVudDogdGhpcy5zb3VyY2VFdmVudCxcbiAgICAgICAgICB0YXJnZXQ6IHpvb20sXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMudGhhdC5fX3pvb20sXG4gICAgICAgICAgZGlzcGF0Y2g6IGxpc3RlbmVyc1xuICAgICAgICB9KSxcbiAgICAgICAgZFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gd2hlZWxlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICB0ID0gdGhpcy5fX3pvb20sXG4gICAgICAgIGsgPSBNYXRoLm1heChzY2FsZUV4dGVudFswXSwgTWF0aC5taW4oc2NhbGVFeHRlbnRbMV0sIHQuayAqIE1hdGgucG93KDIsIHdoZWVsRGVsdGEuYXBwbHkodGhpcywgYXJndW1lbnRzKSkpKSxcbiAgICAgICAgcCA9IHBvaW50ZXIoZXZlbnQpO1xuXG4gICAgLy8gSWYgdGhlIG1vdXNlIGlzIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIGJlZm9yZSwgcmV1c2UgaXQuXG4gICAgLy8gSWYgdGhlcmUgd2VyZSByZWNlbnQgd2hlZWwgZXZlbnRzLCByZXNldCB0aGUgd2hlZWwgaWRsZSB0aW1lb3V0LlxuICAgIGlmIChnLndoZWVsKSB7XG4gICAgICBpZiAoZy5tb3VzZVswXVswXSAhPT0gcFswXSB8fCBnLm1vdXNlWzBdWzFdICE9PSBwWzFdKSB7XG4gICAgICAgIGcubW91c2VbMV0gPSB0LmludmVydChnLm1vdXNlWzBdID0gcCk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQoZy53aGVlbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyB3aGVlbCBldmVudCB3b25cdTIwMTl0IHRyaWdnZXIgYSB0cmFuc2Zvcm0gY2hhbmdlLCBpZ25vcmUgaXQuXG4gICAgZWxzZSBpZiAodC5rID09PSBrKSByZXR1cm47XG5cbiAgICAvLyBPdGhlcndpc2UsIGNhcHR1cmUgdGhlIG1vdXNlIHBvaW50IGFuZCBsb2NhdGlvbiBhdCB0aGUgc3RhcnQuXG4gICAgZWxzZSB7XG4gICAgICBnLm1vdXNlID0gW3AsIHQuaW52ZXJ0KHApXTtcbiAgICAgIGludGVycnVwdCh0aGlzKTtcbiAgICAgIGcuc3RhcnQoKTtcbiAgICB9XG5cbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBnLndoZWVsID0gc2V0VGltZW91dCh3aGVlbGlkbGVkLCB3aGVlbERlbGF5KTtcbiAgICBnLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHNjYWxlKHQsIGspLCBnLm1vdXNlWzBdLCBnLm1vdXNlWzFdKSwgZy5leHRlbnQsIHRyYW5zbGF0ZUV4dGVudCkpO1xuXG4gICAgZnVuY3Rpb24gd2hlZWxpZGxlZCgpIHtcbiAgICAgIGcud2hlZWwgPSBudWxsO1xuICAgICAgZy5lbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtb3VzZWRvd25lZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICh0b3VjaGVuZGluZyB8fCAhZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgIGcgPSBnZXN0dXJlKHRoaXMsIGFyZ3MsIHRydWUpLmV2ZW50KGV2ZW50KSxcbiAgICAgICAgdiA9IHNlbGVjdChldmVudC52aWV3KS5vbihcIm1vdXNlbW92ZS56b29tXCIsIG1vdXNlbW92ZWQsIHRydWUpLm9uKFwibW91c2V1cC56b29tXCIsIG1vdXNldXBwZWQsIHRydWUpLFxuICAgICAgICBwID0gcG9pbnRlcihldmVudCwgY3VycmVudFRhcmdldCksXG4gICAgICAgIHgwID0gZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTAgPSBldmVudC5jbGllbnRZO1xuXG4gICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgZy5tb3VzZSA9IFtwLCB0aGlzLl9fem9vbS5pbnZlcnQocCldO1xuICAgIGludGVycnVwdCh0aGlzKTtcbiAgICBnLnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3VzZW1vdmVkKGV2ZW50KSB7XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICAgIGlmICghZy5tb3ZlZCkge1xuICAgICAgICB2YXIgZHggPSBldmVudC5jbGllbnRYIC0geDAsIGR5ID0gZXZlbnQuY2xpZW50WSAtIHkwO1xuICAgICAgICBnLm1vdmVkID0gZHggKiBkeCArIGR5ICogZHkgPiBjbGlja0Rpc3RhbmNlMjtcbiAgICAgIH1cbiAgICAgIGcuZXZlbnQoZXZlbnQpXG4gICAgICAgLnpvb20oXCJtb3VzZVwiLCBjb25zdHJhaW4odHJhbnNsYXRlKGcudGhhdC5fX3pvb20sIGcubW91c2VbMF0gPSBwb2ludGVyKGV2ZW50LCBjdXJyZW50VGFyZ2V0KSwgZy5tb3VzZVsxXSksIGcuZXh0ZW50LCB0cmFuc2xhdGVFeHRlbnQpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VzZXVwcGVkKGV2ZW50KSB7XG4gICAgICB2Lm9uKFwibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tXCIsIG51bGwpO1xuICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBnLm1vdmVkKTtcbiAgICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgICAgZy5ldmVudChldmVudCkuZW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGJsY2xpY2tlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdDAgPSB0aGlzLl9fem9vbSxcbiAgICAgICAgcDAgPSBwb2ludGVyKGV2ZW50LmNoYW5nZWRUb3VjaGVzID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBldmVudCwgdGhpcyksXG4gICAgICAgIHAxID0gdDAuaW52ZXJ0KHAwKSxcbiAgICAgICAgazEgPSB0MC5rICogKGV2ZW50LnNoaWZ0S2V5ID8gMC41IDogMiksXG4gICAgICAgIHQxID0gY29uc3RyYWluKHRyYW5zbGF0ZShzY2FsZSh0MCwgazEpLCBwMCwgcDEpLCBleHRlbnQuYXBwbHkodGhpcywgYXJncyksIHRyYW5zbGF0ZUV4dGVudCk7XG5cbiAgICBub2V2ZW50KGV2ZW50KTtcbiAgICBpZiAoZHVyYXRpb24gPiAwKSBzZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKS5jYWxsKHNjaGVkdWxlLCB0MSwgcDAsIGV2ZW50KTtcbiAgICBlbHNlIHNlbGVjdCh0aGlzKS5jYWxsKHpvb20udHJhbnNmb3JtLCB0MSwgcDAsIGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoc3RhcnRlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghZmlsdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHJldHVybjtcbiAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCxcbiAgICAgICAgZyA9IGdlc3R1cmUodGhpcywgYXJncywgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoID09PSBuKS5ldmVudChldmVudCksXG4gICAgICAgIHN0YXJ0ZWQsIGksIHQsIHA7XG5cbiAgICBub3Byb3BhZ2F0aW9uKGV2ZW50KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXSwgcCA9IHBvaW50ZXIodCwgdGhpcyk7XG4gICAgICBwID0gW3AsIHRoaXMuX196b29tLmludmVydChwKSwgdC5pZGVudGlmaWVyXTtcbiAgICAgIGlmICghZy50b3VjaDApIGcudG91Y2gwID0gcCwgc3RhcnRlZCA9IHRydWUsIGcudGFwcyA9IDEgKyAhIXRvdWNoc3RhcnRpbmc7XG4gICAgICBlbHNlIGlmICghZy50b3VjaDEgJiYgZy50b3VjaDBbMl0gIT09IHBbMl0pIGcudG91Y2gxID0gcCwgZy50YXBzID0gMDtcbiAgICB9XG5cbiAgICBpZiAodG91Y2hzdGFydGluZykgdG91Y2hzdGFydGluZyA9IGNsZWFyVGltZW91dCh0b3VjaHN0YXJ0aW5nKTtcblxuICAgIGlmIChzdGFydGVkKSB7XG4gICAgICBpZiAoZy50YXBzIDwgMikgdG91Y2hmaXJzdCA9IHBbMF0sIHRvdWNoc3RhcnRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0b3VjaHN0YXJ0aW5nID0gbnVsbDsgfSwgdG91Y2hEZWxheSk7XG4gICAgICBpbnRlcnJ1cHQodGhpcyk7XG4gICAgICBnLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2htb3ZlZChldmVudCwgLi4uYXJncykge1xuICAgIGlmICghdGhpcy5fX3pvb21pbmcpIHJldHVybjtcbiAgICB2YXIgZyA9IGdlc3R1cmUodGhpcywgYXJncykuZXZlbnQoZXZlbnQpLFxuICAgICAgICB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIG4gPSB0b3VjaGVzLmxlbmd0aCwgaSwgdCwgcCwgbDtcblxuICAgIG5vZXZlbnQoZXZlbnQpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHQgPSB0b3VjaGVzW2ldLCBwID0gcG9pbnRlcih0LCB0aGlzKTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMFswXSA9IHA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBnLnRvdWNoMVswXSA9IHA7XG4gICAgfVxuICAgIHQgPSBnLnRoYXQuX196b29tO1xuICAgIGlmIChnLnRvdWNoMSkge1xuICAgICAgdmFyIHAwID0gZy50b3VjaDBbMF0sIGwwID0gZy50b3VjaDBbMV0sXG4gICAgICAgICAgcDEgPSBnLnRvdWNoMVswXSwgbDEgPSBnLnRvdWNoMVsxXSxcbiAgICAgICAgICBkcCA9IChkcCA9IHAxWzBdIC0gcDBbMF0pICogZHAgKyAoZHAgPSBwMVsxXSAtIHAwWzFdKSAqIGRwLFxuICAgICAgICAgIGRsID0gKGRsID0gbDFbMF0gLSBsMFswXSkgKiBkbCArIChkbCA9IGwxWzFdIC0gbDBbMV0pICogZGw7XG4gICAgICB0ID0gc2NhbGUodCwgTWF0aC5zcXJ0KGRwIC8gZGwpKTtcbiAgICAgIHAgPSBbKHAwWzBdICsgcDFbMF0pIC8gMiwgKHAwWzFdICsgcDFbMV0pIC8gMl07XG4gICAgICBsID0gWyhsMFswXSArIGwxWzBdKSAvIDIsIChsMFsxXSArIGwxWzFdKSAvIDJdO1xuICAgIH1cbiAgICBlbHNlIGlmIChnLnRvdWNoMCkgcCA9IGcudG91Y2gwWzBdLCBsID0gZy50b3VjaDBbMV07XG4gICAgZWxzZSByZXR1cm47XG5cbiAgICBnLnpvb20oXCJ0b3VjaFwiLCBjb25zdHJhaW4odHJhbnNsYXRlKHQsIHAsIGwpLCBnLmV4dGVudCwgdHJhbnNsYXRlRXh0ZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaGVuZGVkKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgaWYgKCF0aGlzLl9fem9vbWluZykgcmV0dXJuO1xuICAgIHZhciBnID0gZ2VzdHVyZSh0aGlzLCBhcmdzKS5ldmVudChldmVudCksXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgbiA9IHRvdWNoZXMubGVuZ3RoLCBpLCB0O1xuXG4gICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgIHRvdWNoZW5kaW5nID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgdG91Y2hlbmRpbmcgPSBudWxsOyB9LCB0b3VjaERlbGF5KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICB0ID0gdG91Y2hlc1tpXTtcbiAgICAgIGlmIChnLnRvdWNoMCAmJiBnLnRvdWNoMFsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDA7XG4gICAgICBlbHNlIGlmIChnLnRvdWNoMSAmJiBnLnRvdWNoMVsyXSA9PT0gdC5pZGVudGlmaWVyKSBkZWxldGUgZy50b3VjaDE7XG4gICAgfVxuICAgIGlmIChnLnRvdWNoMSAmJiAhZy50b3VjaDApIGcudG91Y2gwID0gZy50b3VjaDEsIGRlbGV0ZSBnLnRvdWNoMTtcbiAgICBpZiAoZy50b3VjaDApIGcudG91Y2gwWzFdID0gdGhpcy5fX3pvb20uaW52ZXJ0KGcudG91Y2gwWzBdKTtcbiAgICBlbHNlIHtcbiAgICAgIGcuZW5kKCk7XG4gICAgICAvLyBJZiB0aGlzIHdhcyBhIGRibHRhcCwgcmVyb3V0ZSB0byB0aGUgKG9wdGlvbmFsKSBkYmxjbGljay56b29tIGhhbmRsZXIuXG4gICAgICBpZiAoZy50YXBzID09PSAyKSB7XG4gICAgICAgIHQgPSBwb2ludGVyKHQsIHRoaXMpO1xuICAgICAgICBpZiAoTWF0aC5oeXBvdCh0b3VjaGZpcnN0WzBdIC0gdFswXSwgdG91Y2hmaXJzdFsxXSAtIHRbMV0pIDwgdGFwRGlzdGFuY2UpIHtcbiAgICAgICAgICB2YXIgcCA9IHNlbGVjdCh0aGlzKS5vbihcImRibGNsaWNrLnpvb21cIik7XG4gICAgICAgICAgaWYgKHApIHAuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHpvb20ud2hlZWxEZWx0YSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh3aGVlbERlbHRhID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHpvb20pIDogd2hlZWxEZWx0YTtcbiAgfTtcblxuICB6b29tLmZpbHRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmaWx0ZXIgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIHpvb20pIDogZmlsdGVyO1xuICB9O1xuXG4gIHpvb20udG91Y2hhYmxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRvdWNoYWJsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgem9vbSkgOiB0b3VjaGFibGU7XG4gIH07XG5cbiAgem9vbS5leHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZXh0ZW50ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudChbWytfWzBdWzBdLCArX1swXVsxXV0sIFsrX1sxXVswXSwgK19bMV1bMV1dXSksIHpvb20pIDogZXh0ZW50O1xuICB9O1xuXG4gIHpvb20uc2NhbGVFeHRlbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc2NhbGVFeHRlbnRbMF0gPSArX1swXSwgc2NhbGVFeHRlbnRbMV0gPSArX1sxXSwgem9vbSkgOiBbc2NhbGVFeHRlbnRbMF0sIHNjYWxlRXh0ZW50WzFdXTtcbiAgfTtcblxuICB6b29tLnRyYW5zbGF0ZUV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0cmFuc2xhdGVFeHRlbnRbMF1bMF0gPSArX1swXVswXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzBdID0gK19bMV1bMF0sIHRyYW5zbGF0ZUV4dGVudFswXVsxXSA9ICtfWzBdWzFdLCB0cmFuc2xhdGVFeHRlbnRbMV1bMV0gPSArX1sxXVsxXSwgem9vbSkgOiBbW3RyYW5zbGF0ZUV4dGVudFswXVswXSwgdHJhbnNsYXRlRXh0ZW50WzBdWzFdXSwgW3RyYW5zbGF0ZUV4dGVudFsxXVswXSwgdHJhbnNsYXRlRXh0ZW50WzFdWzFdXV07XG4gIH07XG5cbiAgem9vbS5jb25zdHJhaW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29uc3RyYWluID0gXywgem9vbSkgOiBjb25zdHJhaW47XG4gIH07XG5cbiAgem9vbS5kdXJhdGlvbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkdXJhdGlvbiA9ICtfLCB6b29tKSA6IGR1cmF0aW9uO1xuICB9O1xuXG4gIHpvb20uaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaW50ZXJwb2xhdGUgPSBfLCB6b29tKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHpvb20ub24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBsaXN0ZW5lcnMub24uYXBwbHkobGlzdGVuZXJzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbGlzdGVuZXJzID8gem9vbSA6IHZhbHVlO1xuICB9O1xuXG4gIHpvb20uY2xpY2tEaXN0YW5jZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGlja0Rpc3RhbmNlMiA9IChfID0gK18pICogXywgem9vbSkgOiBNYXRoLnNxcnQoY2xpY2tEaXN0YW5jZTIpO1xuICB9O1xuXG4gIHpvb20udGFwRGlzdGFuY2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGFwRGlzdGFuY2UgPSArXywgem9vbSkgOiB0YXBEaXN0YW5jZTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxZQUFNQSxJQUFhLG9CQUFJQyxPQUV2QkMsSUFBZSxFQUNiQyxJQUFJQyxJQUFTQyxJQUFLQyxJQUFBQTtBQUNYTixVQUFXTyxJQUFJSCxFQUFBQSxLQUNsQkosRUFBV0csSUFBSUMsSUFBUyxvQkFBSUgsS0FBQUE7QUFHOUIsY0FBTU8sS0FBY1IsRUFBV1MsSUFBSUwsRUFBQUE7QUFJOUJJLFFBQUFBLEdBQVlELElBQUlGLEVBQUFBLEtBQTZCLE1BQXJCRyxHQUFZRSxPQU16Q0YsR0FBWUwsSUFBSUUsSUFBS0MsRUFBQUEsSUFKbkJLLFFBQVFDLE1BQU8sK0VBQThFQyxNQUFNQyxLQUFLTixHQUFZTyxLQUFBQSxDQUFBQSxFQUFRLENBQUEsSUFBQTtNQUFBLEdBT2hJTixLQUFHQSxDQUFDTCxJQUFTQyxPQUNQTCxFQUFXTyxJQUFJSCxFQUFBQSxLQUNWSixFQUFXUyxJQUFJTCxFQUFBQSxFQUFTSyxJQUFJSixFQUFBQSxLQUc5QixNQUdUVyxPQUFPWixJQUFTQyxJQUFBQTtBQUNkLFlBQUEsQ0FBS0wsRUFBV08sSUFBSUgsRUFBQUE7QUFDbEI7QUFHRixjQUFNSSxLQUFjUixFQUFX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UUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsZ0JBQWdCO0FBQUEsRUFDaEIsTUFBTTtBQUFBLEVBQ04sWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsZ0JBQWdCO0FBQUEsRUFDaEIsVUFBVTtBQUFBLEVBQ1YsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsZ0JBQWdCO0FBQUEsRUFDaEIsWUFBWTtBQUFBLEVBQ1osWUFBWTtBQUFBLEVBQ1osU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsZUFBZTtBQUFBLEVBQ2YsZUFBZTtBQUFBLEVBQ2YsZUFBZTtBQUFBLEVBQ2YsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsY0FBYztBQUFBLEVBQ2QsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsc0JBQXNCO0FBQUEsRUFDdEIsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsZUFBZTtBQUFBLEVBQ2YsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsZ0JBQWdCO0FBQUEsRUFDaEIsZ0JBQWdCO0FBQUEsRUFDaEIsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1Isa0JBQWtCO0FBQUEsRUFDbEIsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsaUJBQWlCO0FBQUEsRUFDakIsbUJBQW1CO0FBQUEsRUFDbkIsaUJBQWlCO0FBQUEsRUFDakIsaUJBQWlCO0FBQUEsRUFDakIsY0FBYztBQUFBLEVBQ2QsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsV0FBVztBQUFBLEVBQ1gsZUFBZTtBQUFBLEVBQ2YsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsS0FBSztBQUFBLEVBQ0wsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBLEVBQ1gsS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUNmO0FBRUEsZUFBTyxPQUFPLE9BQU87QUFBQSxFQUNuQixLQUFLLFVBQVU7QUFDYixXQUFPLE9BQU8sT0FBTyxJQUFJLEtBQUssZUFBYSxNQUFNLFFBQVE7QUFBQSxFQUMzRDtBQUFBLEVBQ0EsY0FBYztBQUNaLFdBQU8sS0FBSyxJQUFJLEVBQUUsWUFBWTtBQUFBLEVBQ2hDO0FBQUEsRUFDQSxLQUFLO0FBQUE7QUFBQSxFQUNMLFdBQVc7QUFBQSxFQUNYLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYLFVBQVU7QUFDWixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7QUFDekIsU0FBTyxLQUFLLElBQUksRUFBRSxVQUFVO0FBQzlCO0FBRUEsU0FBUyxtQkFBbUI7QUFDMUIsU0FBTyxLQUFLLElBQUksRUFBRSxXQUFXO0FBQy9CO0FBRUEsU0FBUyxrQkFBa0I7QUFDekIsU0FBTyxXQUFXLElBQUksRUFBRSxVQUFVO0FBQ3BDO0FBRUEsU0FBUyxrQkFBa0I7QUFDekIsU0FBTyxLQUFLLElBQUksRUFBRSxVQUFVO0FBQzlCO0FBRWUsU0FBUixNQUF1QkMsU0FBUTtBQUNwQyxNQUFJQyxJQUFHO0FBQ1AsRUFBQUQsV0FBVUEsVUFBUyxJQUFJLEtBQUssRUFBRSxZQUFZO0FBQzFDLFVBQVFDLEtBQUksTUFBTSxLQUFLRCxPQUFNLE1BQU0sSUFBSUMsR0FBRSxDQUFDLEVBQUUsUUFBUUEsS0FBSSxTQUFTQSxHQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUtBLEVBQUMsSUFDdEYsTUFBTSxJQUFJLElBQUksSUFBS0EsTUFBSyxJQUFJLEtBQVFBLE1BQUssSUFBSSxLQUFRQSxNQUFLLElBQUksS0FBUUEsS0FBSSxNQUFTQSxLQUFJLE9BQVEsSUFBTUEsS0FBSSxJQUFNLENBQUMsSUFDaEgsTUFBTSxJQUFJLEtBQUtBLE1BQUssS0FBSyxLQUFNQSxNQUFLLEtBQUssS0FBTUEsTUFBSyxJQUFJLE1BQU9BLEtBQUksT0FBUSxHQUFJLElBQy9FLE1BQU0sSUFBSSxLQUFNQSxNQUFLLEtBQUssS0FBUUEsTUFBSyxJQUFJLEtBQVFBLE1BQUssSUFBSSxLQUFRQSxNQUFLLElBQUksS0FBUUEsTUFBSyxJQUFJLEtBQVFBLEtBQUksT0FBVUEsS0FBSSxPQUFRLElBQU1BLEtBQUksTUFBUSxHQUFJLElBQ3RKLFNBQ0NBLEtBQUksYUFBYSxLQUFLRCxPQUFNLEtBQUssSUFBSSxJQUFJQyxHQUFFLENBQUMsR0FBR0EsR0FBRSxDQUFDLEdBQUdBLEdBQUUsQ0FBQyxHQUFHLENBQUMsS0FDNURBLEtBQUksYUFBYSxLQUFLRCxPQUFNLEtBQUssSUFBSSxJQUFJQyxHQUFFLENBQUMsSUFBSSxNQUFNLEtBQUtBLEdBQUUsQ0FBQyxJQUFJLE1BQU0sS0FBS0EsR0FBRSxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsS0FDaEdBLEtBQUksY0FBYyxLQUFLRCxPQUFNLEtBQUssS0FBS0MsR0FBRSxDQUFDLEdBQUdBLEdBQUUsQ0FBQyxHQUFHQSxHQUFFLENBQUMsR0FBR0EsR0FBRSxDQUFDLENBQUMsS0FDN0RBLEtBQUksY0FBYyxLQUFLRCxPQUFNLEtBQUssS0FBS0MsR0FBRSxDQUFDLElBQUksTUFBTSxLQUFLQSxHQUFFLENBQUMsSUFBSSxNQUFN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LE1BQ0w7QUFBQSxJQUNKLENBQUM7QUFPRCxTQUFLLGlCQUFpQixVQUFVLFNBQVMsQ0FBQyxRQUFvQjtBQUFBLElBRWxFLENBQUM7QUFBQSxFQUlEO0FBQUEsRUFFQSxXQUFXO0FBQUEsRUFBQztBQUFBLEVBRVosTUFBTSxlQUFlO0FBQ2pCLFNBQUssV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixNQUFNLEtBQUssU0FBUyxDQUFDO0FBQUEsRUFDN0U7QUFBQSxFQUVBLE1BQU0sZUFBZTtBQUNqQixVQUFNLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFBQSxFQUNyQztBQUNKOyIsCiAgIm5hbWVzIjogWyJlbGVtZW50TWFwIiwgIk1hcCIsICJEYXRhIiwgInNldCIsICJlbGVtZW50IiwgImtleSIsICJpbnN0YW5jZSIsICJoYXMiLCAiaW5zdGFuY2VNYXAiLCAiZ2V0IiwgInNpemUiLCAiY29uc29sZSIsICJlcnJvciIsICJBcnJheSIsICJmcm9tIiwgImtleXMiLCAicmVtb3ZlIiwgImRlbGV0ZSIsICJUUkFOU0lUSU9OX0VORCIsICJwYXJzZVNlbGVjdG9yIiwgInNlbGVjdG9yIiwgIndpbmRvdyIsICJDU1MiLCAiZXNjYXBlIiwgInJlcGxhY2UiLCAibWF0Y2giLCAiaWQiLCAidHJpZ2dlclRyYW5zaXRpb25FbmQiLCAiZGlzcGF0Y2hFdmVudCIsICJFdmVudCIsICJpc0VsZW1lbnQiLCAib2JqZWN0IiwgImpxdWVyeSIsICJub2RlVHlwZSIsICJnZXRFbGVtZW50IiwgImxlbmd0aCIsICJkb2N1bWVudCIsICJxdWVyeVNlbGVjdG9yIiwgImlzVmlzaWJsZSIsICJnZXRDbGllbnRSZWN0cyIsICJlbGVtZW50SXNWaXNpYmxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJjbG9zZWREZXRhaWxzIiwgImNsb3Nlc3QiLCAic3VtbWFyeSIsICJwYXJlbnROb2RlIiwgImlzRGlzYWJsZWQiLCAiTm9kZSIsICJFTEVNRU5UX05PREUiLCAiY2xhc3NMaXN0IiwgImNvbnRhaW5zIiwgImRpc2FibGVkIiwgImhhc0F0dHJpYnV0ZSIsICJnZXRBdHRyaWJ1dGUiLCAiZmluZFNoYWRvd1Jvb3QiLCAiZG9jdW1lbnRFbGVtZW50IiwgImF0dGFjaFNoYWRvdyIsICJnZXRSb290Tm9kZSIsICJyb290IiwgIlNoYWRvd1Jvb3QiLCAibm9vcCIsICJyZWZsb3ciLCAib2Zmc2V0SGVpZ2h0IiwgImdldGpRdWVyeSIsICJqUXVlcnkiLCAiYm9keSIsICJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwgImlzUlRMIiwgImRpciIsICJkZWZpbmVKUXVlcnlQbHVnaW4iLCAicGx1Z2luIiwgImNhbGxiYWNrIiwgIiQiLCAibmFtZSIsICJOQU1FIiwgIkpRVUVSWV9OT19DT05GTElDVCIsICJmbiIsICJqUXVlcnlJbnRlcmZhY2UiLCAiQ29uc3RydWN0b3IiLCAibm9Db25mbGljdCIsICJyZWFkeVN0YXRlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicHVzaCIsICJleGVjdXRlIiwgInBvc3NpYmxlQ2FsbGJhY2siLCAiYXJncyIsICJkZWZhdWx0VmFsdWUiLCAiZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiIsICJ0cmFuc2l0aW9uRWxlbWVudCIsICJ3YWl0Rm9yVHJhbnNpdGlvbiIsICJlbXVsYXRlZER1cmF0aW9uIiwgInRyYW5zaXRpb25EdXJhdGlvbiIsICJ0cmFuc2l0aW9uRGVsYXkiLCAiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCAiTnVtYmVyIiwgInBhcnNlRmxvYXQiLCAiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCAic3BsaXQiLCAiY2FsbGVkIiwgImhhbmRsZXIiLCAidGFyZ2V0IiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAic2V0VGltZW91dCIsICJnZXROZXh0QWN0aXZlRWxlbWVudCIsICJsaXN0IiwgImFjdGl2ZUVsZW1lbnQiLCAic2hvdWxkR2V0TmV4dCIsICJpc0N5Y2xlQWxsb3dlZCIsICJsaXN0TGVuZ3RoIiwgImluZGV4IiwgImluZGV4T2YiLCAiTWF0aCIsICJtYXgiLCAibWluIiwgIm5hbWVzcGFjZVJlZ2V4IiwgInN0cmlwTmFtZVJlZ2V4IiwgInN0cmlwVWlkUmVnZXgiLCAiZXZlbnRSZWdpc3RyeSIsICJ1aWRFdmVudCIsICJjdXN0b21FdmVudHMiLCAibW91c2VlbnRlciIsICJtb3VzZWxlYXZlIiwgIm5hdGl2ZUV2ZW50cyIsICJTZXQiLCAibWFrZUV2ZW50VWlkIiwgInVpZCIsICJnZXRFbGVtZW50RXZlbnRzIiwgImZpbmRIYW5kbGVyIiwgImV2ZW50cyIsICJjYWxsYWJsZSIsICJkZWxlZ2F0aW9uU2VsZWN0b3IiLCAiT2JqZWN0IiwgInZhbHVlcyIsICJmaW5kIiwgImV2ZW50IiwgIm5vcm1hbGl6ZVBhcmFtZXRlcnMiLCAib3JpZ2luYWxUeXBlRXZlbnQiLCAiZGVsZWdhdGlvbkZ1bmN0aW9uIiwgImlzRGVsZWdhdGVkIiwgInR5cGVFdmVudCIsICJnZXRUeXBlRXZlbnQiLCAiYWRkSGFuZGxlciIsICJvbmVPZmYiLCAid3JhcEZ1bmN0aW9uIiwgInJlbGF0ZWRUYXJnZXQiLCAiZGVsZWdhdGVUYXJnZXQiLCAiY2FsbCIsICJ0aGlzIiwgImhhbmRsZXJzIiwgInByZXZpb3VzRnVuY3Rpb24iLCAiZG9tRWxlbWVudHMiLCAicXVlcnlTZWxlY3RvckFsbCIsICJkb21FbGVtZW50IiwgImh5ZHJhdGVPYmoiLCAiRXZlbnRIYW5kbGVyIiwgIm9mZiIsICJ0eXBlIiwgImFwcGx5IiwgInJlbW92ZUhhbmRsZXIiLCAiQm9vbGVhbiIsICJyZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMiLCAibmFtZXNwYWNlIiwgInN0b3JlRWxlbWVudEV2ZW50IiwgImhhbmRsZXJLZXkiLCAiZW50cmllcyIsICJpbmNsdWRlcyIsICJvbiIsICJvbmUiLCAiaW5OYW1lc3BhY2UiLCAiaXNOYW1lc3BhY2UiLCAic3RhcnRzV2l0aCIsICJlbGVtZW50RXZlbnQiLCAic2xpY2UiLCAia2V5SGFuZGxlcnMiLCAidHJpZ2dlciIsICJqUXVlcnlFdmVudCIsICJidWJibGVzIiwgIm5hdGl2ZURpc3BhdGNoIiwgImRlZmF1bHRQcmV2ZW50ZWQiLCAiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCAiaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQiLCAiaXNEZWZhdWx0UHJldmVudGVkIiwgImV2dCIsICJjYW5jZWxhYmxlIiwgInByZXZlbnREZWZhdWx0IiwgIm9iaiIsICJtZXRhIiwgInZhbHVlIiwgIl91bnVzZWQiLCAiZGVmaW5lUHJvcGVydHkiLCAiY29uZmlndXJhYmxlIiwgIm5vcm1hbGl6ZURhdGEiLCAidG9TdHJpbmciLCAiSlNPTiIsICJwYXJzZSIsICJkZWNvZGVVUklDb21wb25lbnQiLCAibm9ybWFsaXplRGF0YUtleSIsICJjaHIiLCAidG9Mb3dlckNhc2UiLCAiTWFuaXB1bGF0b3IiLCAic2V0RGF0YUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAicmVtb3ZlRGF0YUF0dHJpYnV0ZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAiZ2V0RGF0YUF0dHJpYnV0ZXMiLCAiYXR0cmlidXRlcyIsICJic0tleXMiLCAiZGF0YXNldCIsICJmaWx0ZXIiLCAicHVyZUtleSIsICJjaGFyQXQiLCAiZ2V0RGF0YUF0dHJpYnV0ZSIsICJDb25maWciLCAiRGVmYXVsdCIsICJEZWZhdWx0VHlwZSIsICJFcnJvciIsICJfZ2V0Q29uZmlnIiwgImNvbmZpZyIsICJfbWVyZ2VDb25maWdPYmoiLCAiX2NvbmZpZ0FmdGVyTWVyZ2UiLCAiX3R5cGVDaGVja0NvbmZpZyIsICJqc29uQ29uZmlnIiwgImNvbnN0cnVjdG9yIiwgImNvbmZpZ1R5cGVzIiwgInByb3BlcnR5IiwgImV4cGVjdGVkVHlwZXMiLCAidmFsdWVUeXBlIiwgInByb3RvdHlwZSIsICJSZWdFeHAiLCAidGVzdCIsICJUeXBlRXJyb3IiLCAidG9VcHBlckNhc2UiLCAiQmFzZUNvbXBvbmVudCIsICJzdXBlciIsICJfZWxlbWVudCIsICJfY29uZmlnIiwgIkRBVEFfS0VZIiwgImRpc3Bvc2UiLCAiRVZFTlRfS0VZIiwgInByb3BlcnR5TmFtZSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIl9xdWV1ZUNhbGxiYWNrIiwgImlzQW5pbWF0ZWQiLCAiZ2V0SW5zdGFuY2UiLCAiVkVSU0lPTiIsICJnZXRTZWxlY3RvciIsICJocmVmQXR0cmlidXRlIiwgInRyaW0iLCAibWFwIiwgInNlbCIsICJqb2luIiwgIlNlbGVjdG9yRW5naW5lIiwgImNvbmNhdCIsICJFbGVtZW50IiwgImZpbmRPbmUiLCAiY2hpbGRyZW4iLCAiY2hpbGQiLCAibWF0Y2hlcyIsICJwYXJlbnRzIiwgImFuY2VzdG9yIiwgInByZXYiLCAicHJldmlvdXMiLCAicHJldmlvdXNFbGVtZW50U2libGluZyIsICJuZXh0IiwgIm5leHRFbGVtZW50U2libGluZyIsICJmb2N1c2FibGVDaGlsZHJlbiIsICJmb2N1c2FibGVzIiwgImVsIiwgImdldFNlbGVjdG9yRnJvbUVsZW1lbnQiLCAiZ2V0RWxlbWVudEZyb21TZWxlY3RvciIsICJnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yIiwgImVuYWJsZURpc21pc3NUcmlnZ2VyIiwgImNvbXBvbmVudCIsICJtZXRob2QiLCAiY2xpY2tFdmVudCIsICJ0YWdOYW1lIiwgImdldE9yQ3JlYXRlSW5zdGFuY2UiLCAiRVZFTlRfQ0xPU0UiLCAiRVZFTlRfQ0xPU0VEIiwgIkFsZXJ0IiwgImNsb3NlIiwgIl9kZXN0cm95RWxlbWVudCIsICJlYWNoIiwgImRhdGEiLCAiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCAiQnV0dG9uIiwgInRvZ2dsZSIsICJidXR0b24iLCAiRVZFTlRfVE9VQ0hTVEFSVCIsICJFVkVOVF9UT1VDSE1PVkUiLCAiRVZFTlRfVE9VQ0hFTkQiLCAiRVZFTlRfUE9JTlRFUkRPV04iLCAiRVZFTlRfUE9JTlRFUlVQIiwgImVuZENhbGxiYWNrIiwgImxlZnRDYWxsYmFjayIsICJyaWdodENhbGxiYWNrIiwgIlN3aXBlIiwgImlzU3VwcG9ydGVkIiwgIl9kZWx0YVgiLCAiX3N1cHBvcnRQb2ludGVyRXZlbnRzIiwgIlBvaW50ZXJFdmVudCIsICJfaW5pdEV2ZW50cyIsICJfc3RhcnQiLCAiX2V2ZW50SXNQb2ludGVyUGVuVG91Y2giLCAiY2xpZW50WCIsICJ0b3VjaGVzIiwgIl9lbmQiLCAiX2hhbmRsZVN3aXBlIiwgIl9tb3ZlIiwgImFic0RlbHRhWCIsICJhYnMiLCAiZGlyZWN0aW9uIiwgImFkZCIsICJwb2ludGVyVHlwZSIsICJuYXZpZ2F0b3IiLCAibWF4VG91Y2hQb2ludHMiLCAiREFUQV9BUElfS0VZIiwgIk9SREVSX05FWFQiLCAiT1JERVJfUFJFViIsICJESVJFQ1RJT05fTEVGVCIsICJESVJFQ1RJT05fUklHSFQiLCAiRVZFTlRfU0xJREUiLCAiRVZFTlRfU0xJRCIsICJFVkVOVF9LRVlET1dOIiwgIkVWRU5UX01PVVNFRU5URVIiLCAiRVZFTlRfTU9VU0VMRUFWRSIsICJFVkVOVF9EUkFHX1NUQVJUIiwgIkVWRU5UX0xPQURfREFUQV9BUEkiLCAiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCAiQ0xBU1NfTkFNRV9DQVJPVVNFTCIsICJDTEFTU19OQU1FX0FDVElWRSIsICJTRUxFQ1RPUl9BQ1RJVkUiLCAiU0VMRUNUT1JfSVRFTSIsICJTRUxFQ1RPUl9BQ1RJVkVfSVRFTSIsICJLRVlfVE9fRElSRUNUSU9OIiwgIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgImludGVydmFsIiwgImtleWJvYXJkIiwgInBhdXNlIiwgInJpZGUiLCAidG91Y2giLCAid3JhcCIsICJDYXJvdXNlbCIsICJfaW50ZXJ2YWwiLCAiX2FjdGl2ZUVsZW1lbnQiLCAiX2lzU2xpZGluZyIsICJ0b3VjaFRpbWVvdXQiLCAiX3N3aXBlSGVscGVyIiwgIl9pbmRpY2F0b3JzRWxlbWVudCIsICJfYWRkRXZlbnRMaXN0ZW5lcnMiLCAiY3ljbGUiLCAiX3NsaWRlIiwgIm5leHRXaGVuVmlzaWJsZSIsICJoaWRkZW4iLCAiX2NsZWFySW50ZXJ2YWwiLCAiX3VwZGF0ZUludGVydmFsIiwgInNldEludGVydmFsIiwgIl9tYXliZUVuYWJsZUN5Y2xlIiwgInRvIiwgIml0ZW1zIiwgIl9nZXRJdGVtcyIsICJhY3RpdmVJbmRleCIsICJfZ2V0SXRlbUluZGV4IiwgIl9nZXRBY3RpdmUiLCAib3JkZXIiLCAiZGVmYXVsdEludGVydmFsIiwgIl9rZXlkb3duIiwgIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwgImltZyIsICJzd2lwZUNvbmZpZyIsICJfZGlyZWN0aW9uVG9PcmRlciIsICJlbmRDYWxsQmFjayIsICJjbGVhclRpbWVvdXQiLCAiX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQiLCAiYWN0aXZlSW5kaWNhdG9yIiwgIm5ld0FjdGl2ZUluZGljYXRvciIsICJlbGVtZW50SW50ZXJ2YWwiLCAicGFyc2VJbnQiLCAiaXNOZXh0IiwgIm5leHRFbGVtZW50IiwgIm5leHRFbGVtZW50SW5kZXgiLCAidHJpZ2dlckV2ZW50IiwgImV2ZW50TmFtZSIsICJfb3JkZXJUb0RpcmVjdGlvbiIsICJpc0N5Y2xpbmciLCAiZGlyZWN0aW9uYWxDbGFzc05hbWUiLCAib3JkZXJDbGFzc05hbWUiLCAiY29tcGxldGVDYWxsQmFjayIsICJfaXNBbmltYXRlZCIsICJjbGVhckludGVydmFsIiwgImNhcm91c2VsIiwgInNsaWRlSW5kZXgiLCAiY2Fyb3VzZWxzIiwgIkVWRU5UX1NIT1ciLCAiRVZFTlRfU0hPV04iLCAiRVZFTlRfSElERSIsICJFVkVOVF9ISURERU4iLCAiQ0xBU1NfTkFNRV9TSE9XIiwgIkNMQVNTX05BTUVfQ09MTEFQU0UiLCAiQ0xBU1NfTkFNRV9DT0xMQVBTSU5HIiwgIkNMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOIiwgInBhcmVudCIsICJDb2xsYXBzZSIsICJfaXNUcmFuc2l0aW9uaW5nIiwgIl90cmlnZ2VyQXJyYXkiLCAidG9nZ2xlTGlzdCIsICJlbGVtIiwgImZpbHRlckVsZW1lbnQiLCAiZm91bmRFbGVtZW50IiwgIl9pbml0aWFsaXplQ2hpbGRyZW4iLCAiX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyIsICJfaXNTaG93biIsICJoaWRlIiwgInNob3ciLCAiYWN0aXZlQ2hpbGRyZW4iLCAiX2dldEZpcnN0TGV2ZWxDaGlsZHJlbiIsICJhY3RpdmVJbnN0YW5jZSIsICJkaW1lbnNpb24iLCAiX2dldERpbWVuc2lvbiIsICJzdHlsZSIsICJzY3JvbGxTaXplIiwgImNvbXBsZXRlIiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJzZWxlY3RlZCIsICJ0cmlnZ2VyQXJyYXkiLCAiaXNPcGVuIiwgInRvcCIsICJib3R0b20iLCAicmlnaHQiLCAibGVmdCIsICJhdXRvIiwgImJhc2VQbGFjZW1lbnRzIiwgInN0YXJ0IiwgImVuZCIsICJjbGlwcGluZ1BhcmVudHMiLCAidmlld3BvcnQiLCAicG9wcGVyIiwgInJlZmVyZW5jZSIsICJ2YXJpYXRpb25QbGFjZW1lbnRzIiwgInJlZHVjZSIsICJhY2MiLCAicGxhY2VtZW50IiwgInBsYWNlbWVudHMiLCAiYmVmb3JlUmVhZCIsICJyZWFkIiwgImFmdGVyUmVhZCIsICJiZWZvcmVNYWluIiwgIm1haW4iLCAiYWZ0ZXJNYWluIiwgImJlZm9yZVdyaXRlIiwgIndyaXRlIiwgImFmdGVyV3JpdGUiLCAibW9kaWZpZXJQaGFzZXMiLCAiZ2V0Tm9kZU5hbWUiLCAibm9kZU5hbWUiLCAiZ2V0V2luZG93IiwgIm5vZGUiLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJpc0hUTUxFbGVtZW50IiwgIkhUTUxFbGVtZW50IiwgImlzU2hhZG93Um9vdCIsICJhcHBseVN0eWxlcyQxIiwgImVuYWJsZWQiLCAicGhhc2UiLCAiX3JlZiIsICJzdGF0ZSIsICJlbGVtZW50cyIsICJmb3JFYWNoIiwgInN0eWxlcyIsICJhc3NpZ24iLCAiZWZmZWN0IiwgIl9yZWYyIiwgImluaXRpYWxTdHlsZXMiLCAicG9zaXRpb24iLCAib3B0aW9ucyIsICJzdHJhdGVneSIsICJtYXJnaW4iLCAiYXJyb3ciLCAiaGFzT3duUHJvcGVydHkiLCAiYXR0cmlidXRlIiwgInJlcXVpcmVzIiwgImdldEJhc2VQbGFjZW1lbnQiLCAicm91bmQiLCAiZ2V0VUFTdHJpbmciLCAidWFEYXRhIiwgInVzZXJBZ2VudERhdGEiLCAiYnJhbmRzIiwgImlzQXJyYXkiLCAiaXRlbSIsICJicmFuZCIsICJ2ZXJzaW9uIiwgInVzZXJBZ2VudCIsICJpc0xheW91dFZpZXdwb3J0IiwgImluY2x1ZGVTY2FsZSIsICJpc0ZpeGVkU3RyYXRlZ3kiLCAiY2xpZW50UmVjdCIsICJzY2FsZVgiLCAic2NhbGVZIiwgIm9mZnNldFdpZHRoIiwgIndpZHRoIiwgImhlaWdodCIsICJ2aXN1YWxWaWV3cG9ydCIsICJhZGRWaXN1YWxPZmZzZXRzIiwgIngiLCAib2Zmc2V0TGVmdCIsICJ5IiwgIm9mZnNldFRvcCIsICJnZXRMYXlvdXRSZWN0IiwgInJvb3ROb2RlIiwgImlzU2FtZU5vZGUiLCAiaG9zdCIsICJpc1RhYmxlRWxlbWVudCIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiZ2V0UGFyZW50Tm9kZSIsICJhc3NpZ25lZFNsb3QiLCAiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsICJvZmZzZXRQYXJlbnQiLCAiZ2V0T2Zmc2V0UGFyZW50IiwgImlzRmlyZWZveCIsICJjdXJyZW50Tm9kZSIsICJjc3MiLCAidHJhbnNmb3JtIiwgInBlcnNwZWN0aXZlIiwgImNvbnRhaW4iLCAid2lsbENoYW5nZSIsICJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCAid2l0aGluIiwgIm1hdGhNYXgiLCAibWF0aE1pbiIsICJtZXJnZVBhZGRpbmdPYmplY3QiLCAicGFkZGluZ09iamVjdCIsICJleHBhbmRUb0hhc2hNYXAiLCAiaGFzaE1hcCIsICJhcnJvdyQxIiwgIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsICJhcnJvd0VsZW1lbnQiLCAicG9wcGVyT2Zmc2V0cyIsICJtb2RpZmllcnNEYXRhIiwgImJhc2VQbGFjZW1lbnQiLCAiYXhpcyIsICJsZW4iLCAicGFkZGluZyIsICJyZWN0cyIsICJhcnJvd1JlY3QiLCAibWluUHJvcCIsICJtYXhQcm9wIiwgImVuZERpZmYiLCAic3RhcnREaWZmIiwgImFycm93T2Zmc2V0UGFyZW50IiwgImNsaWVudFNpemUiLCAiY2xpZW50SGVpZ2h0IiwgImNsaWVudFdpZHRoIiwgImNlbnRlclRvUmVmZXJlbmNlIiwgImNlbnRlciIsICJvZmZzZXQiLCAiYXhpc1Byb3AiLCAiY2VudGVyT2Zmc2V0IiwgIl9vcHRpb25zJGVsZW1lbnQiLCAicmVxdWlyZXNJZkV4aXN0cyIsICJnZXRWYXJpYXRpb24iLCAidW5zZXRTaWRlcyIsICJtYXBUb1N0eWxlcyIsICJfT2JqZWN0JGFzc2lnbjIiLCAicG9wcGVyUmVjdCIsICJ2YXJpYXRpb24iLCAib2Zmc2V0cyIsICJncHVBY2NlbGVyYXRpb24iLCAiYWRhcHRpdmUiLCAicm91bmRPZmZzZXRzIiwgImlzRml4ZWQiLCAiX29mZnNldHMkeCIsICJfb2Zmc2V0cyR5IiwgIl9yZWYzIiwgImhhc1giLCAiaGFzWSIsICJzaWRlWCIsICJzaWRlWSIsICJ3aW4iLCAiaGVpZ2h0UHJvcCIsICJ3aWR0aFByb3AiLCAiX09iamVjdCRhc3NpZ24iLCAiY29tbW9uU3R5bGVzIiwgIl9yZWY0IiwgImRwciIsICJkZXZpY2VQaXhlbFJhdGlvIiwgImNvbXB1dGVTdHlsZXMkMSIsICJfcmVmNSIsICJfb3B0aW9ucyRncHVBY2NlbGVyYXQiLCAiX29wdGlvbnMkYWRhcHRpdmUiLCAiX29wdGlvbnMkcm91bmRPZmZzZXRzIiwgInBhc3NpdmUiLCAiZXZlbnRMaXN0ZW5lcnMiLCAiX29wdGlvbnMkc2Nyb2xsIiwgInNjcm9sbCIsICJfb3B0aW9ucyRyZXNpemUiLCAicmVzaXplIiwgInNjcm9sbFBhcmVudHMiLCAic2Nyb2xsUGFyZW50IiwgInVwZGF0ZSIsICJoYXNoIiwgImdldE9wcG9zaXRlUGxhY2VtZW50IiwgIm1hdGNoZWQiLCAiZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQiLCAiZ2V0V2luZG93U2Nyb2xsIiwgInNjcm9sbExlZnQiLCAicGFnZVhPZmZzZXQiLCAic2Nyb2xsVG9wIiwgInBhZ2VZT2Zmc2V0IiwgImdldFdpbmRvd1Njcm9sbEJhclgiLCAiaXNTY3JvbGxQYXJlbnQiLCAiX2dldENvbXB1dGVkU3R5bGUiLCAib3ZlcmZsb3ciLCAib3ZlcmZsb3dYIiwgIm92ZXJmbG93WSIsICJnZXRTY3JvbGxQYXJlbnQiLCAibGlzdFNjcm9sbFBhcmVudHMiLCAiX2VsZW1lbnQkb3duZXJEb2N1bWVuIiwgImlzQm9keSIsICJ1cGRhdGVkTGlzdCIsICJyZWN0VG9DbGllbnRSZWN0IiwgInJlY3QiLCAiZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUiLCAiY2xpcHBpbmdQYXJlbnQiLCAiaHRtbCIsICJsYXlvdXRWaWV3cG9ydCIsICJjbGllbnRUb3AiLCAiY2xpZW50TGVmdCIsICJ3aW5TY3JvbGwiLCAic2Nyb2xsV2lkdGgiLCAic2Nyb2xsSGVpZ2h0IiwgImNvbXB1dGVPZmZzZXRzIiwgImNvbW1vblgiLCAiY29tbW9uWSIsICJtYWluQXhpcyIsICJkZXRlY3RPdmVyZmxvdyIsICJfb3B0aW9ucyIsICJfb3B0aW9ucyRwbGFjZW1lbnQiLCAiX29wdGlvbnMkc3RyYXRlZ3kiLCAiX29wdGlvbnMkYm91bmRhcnkiLCAiYm91bmRhcnkiLCAiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwgInJvb3RCb3VuZGFyeSIsICJfb3B0aW9ucyRlbGVtZW50Q29udGUiLCAiZWxlbWVudENvbnRleHQiLCAiX29wdGlvbnMkYWx0Qm91bmRhcnkiLCAiYWx0Qm91bmRhcnkiLCAiX29wdGlvbnMkcGFkZGluZyIsICJhbHRDb250ZXh0IiwgImNsaXBwaW5nQ2xpZW50UmVjdCIsICJtYWluQ2xpcHBpbmdQYXJlbnRzIiwgImNsaXBwZXJFbGVtZW50IiwgImZpcnN0Q2xpcHBpbmdQYXJlbnQiLCAiY2xpcHBpbmdSZWN0IiwgImFjY1JlY3QiLCAiY29udGV4dEVsZW1lbnQiLCAicmVmZXJlbmNlQ2xpZW50UmVjdCIsICJwb3BwZXJDbGllbnRSZWN0IiwgImVsZW1lbnRDbGllbnRSZWN0IiwgIm92ZXJmbG93T2Zmc2V0cyIsICJvZmZzZXREYXRhIiwgIm11bHRpcGx5IiwgImNvbXB1dGVBdXRvUGxhY2VtZW50IiwgImZsaXBWYXJpYXRpb25zIiwgIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsICJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCAiYWxsUGxhY2VtZW50cyIsICJhbGxvd2VkUGxhY2VtZW50cyIsICJvdmVyZmxvd3MiLCAic29ydCIsICJhIiwgImIiLCAiZmxpcCQxIiwgIl9za2lwIiwgIl9vcHRpb25zJG1haW5BeGlzIiwgImNoZWNrTWFpbkF4aXMiLCAiX29wdGlvbnMkYWx0QXhpcyIsICJhbHRBeGlzIiwgImNoZWNrQWx0QXhpcyIsICJzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMiLCAiZmFsbGJhY2tQbGFjZW1lbnRzIiwgIl9vcHRpb25zJGZsaXBWYXJpYXRpbyIsICJwcmVmZXJyZWRQbGFjZW1lbnQiLCAib3Bwb3NpdGVQbGFjZW1lbnQiLCAicmVmZXJlbmNlUmVjdCIsICJjaGVja3NNYXAiLCAibWFrZUZhbGxiYWNrQ2hlY2tzIiwgImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsICJpIiwgIl9iYXNlUGxhY2VtZW50IiwgImlzU3RhcnRWYXJpYXRpb24iLCAiaXNWZXJ0aWNhbCIsICJtYWluVmFyaWF0aW9uU2lkZSIsICJhbHRWYXJpYXRpb25TaWRlIiwgImNoZWNrcyIsICJldmVyeSIsICJjaGVjayIsICJfbG9vcCIsICJfaSIsICJmaXR0aW5nUGxhY2VtZW50IiwgInJlc2V0IiwgImdldFNpZGVPZmZzZXRzIiwgInByZXZlbnRlZE9mZnNldHMiLCAiaXNBbnlTaWRlRnVsbHlDbGlwcGVkIiwgInNvbWUiLCAic2lkZSIsICJoaWRlJDEiLCAicHJldmVudE92ZXJmbG93IiwgInJlZmVyZW5jZU92ZXJmbG93IiwgInBvcHBlckFsdE92ZXJmbG93IiwgInJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyIsICJwb3BwZXJFc2NhcGVPZmZzZXRzIiwgImlzUmVmZXJlbmNlSGlkZGVuIiwgImhhc1BvcHBlckVzY2FwZWQiLCAib2Zmc2V0JDEiLCAiX29wdGlvbnMkb2Zmc2V0IiwgImludmVydERpc3RhbmNlIiwgInNraWRkaW5nIiwgImRpc3RhbmNlIiwgIl9kYXRhJHN0YXRlJHBsYWNlbWVudCIsICJwb3BwZXJPZmZzZXRzJDEiLCAicHJldmVudE92ZXJmbG93JDEiLCAiX29wdGlvbnMkdGV0aGVyIiwgInRldGhlciIsICJfb3B0aW9ucyR0ZXRoZXJPZmZzZXQiLCAidGV0aGVyT2Zmc2V0IiwgImlzQmFzZVBsYWNlbWVudCIsICJ0ZXRoZXJPZmZzZXRWYWx1ZSIsICJub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUiLCAib2Zmc2V0TW9kaWZpZXJTdGF0ZSIsICJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQiLCAibWFpblNpZGUiLCAiYWx0U2lkZSIsICJhZGRpdGl2ZSIsICJtaW5MZW4iLCAibWF4TGVuIiwgImFycm93UGFkZGluZ09iamVjdCIsICJhcnJvd1BhZGRpbmdNaW4iLCAiYXJyb3dQYWRkaW5nTWF4IiwgImFycm93TGVuIiwgIm1pbk9mZnNldCIsICJtYXhPZmZzZXQiLCAiY2xpZW50T2Zmc2V0IiwgIm9mZnNldE1vZGlmaWVyVmFsdWUiLCAidGV0aGVyTWF4IiwgInByZXZlbnRlZE9mZnNldCIsICJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIiwgIl9tYWluU2lkZSIsICJfYWx0U2lkZSIsICJfb2Zmc2V0IiwgIl9sZW4iLCAiX21pbiIsICJfbWF4IiwgImlzT3JpZ2luU2lkZSIsICJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsICJfdGV0aGVyTWluIiwgIl90ZXRoZXJNYXgiLCAiX3ByZXZlbnRlZE9mZnNldCIsICJ2IiwgImdldENvbXBvc2l0ZVJlY3QiLCAiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCAiaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQiLCAib2Zmc2V0UGFyZW50SXNTY2FsZWQiLCAibW9kaWZpZXJzIiwgInZpc2l0ZWQiLCAicmVzdWx0IiwgIm1vZGlmaWVyIiwgImRlcCIsICJkZXBNb2RpZmllciIsICJERUZBVUxUX09QVElPTlMiLCAiYXJlVmFsaWRFbGVtZW50cyIsICJhcmd1bWVudHMiLCAiX2tleSIsICJwb3BwZXJHZW5lcmF0b3IiLCAiZ2VuZXJhdG9yT3B0aW9ucyIsICJfZ2VuZXJhdG9yT3B0aW9ucyIsICJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYiLCAiZGVmYXVsdE1vZGlmaWVycyIsICJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyIiwgImRlZmF1bHRPcHRpb25zIiwgInBlbmRpbmciLCAib3JkZXJlZE1vZGlmaWVycyIsICJlZmZlY3RDbGVhbnVwRm5zIiwgImlzRGVzdHJveWVkIiwgInNldE9wdGlvbnMiLCAic2V0T3B0aW9uc0FjdGlvbiIsICJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwgIm1lcmdlZCIsICJjdXJyZW50IiwgImV4aXN0aW5nIiwgIm0iLCAiX3JlZiRvcHRpb25zIiwgImNsZWFudXBGbiIsICJmb3JjZVVwZGF0ZSIsICJfc3RhdGUkZWxlbWVudHMiLCAiX3N0YXRlJG9yZGVyZWRNb2RpZmllIiwgIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgInRoZW4iLCAiZGVzdHJveSIsICJvbkZpcnN0VXBkYXRlIiwgImNyZWF0ZVBvcHBlciIsICJjb21wdXRlU3R5bGVzIiwgImFwcGx5U3R5bGVzIiwgImZsaXAiLCAiQVJST1dfVVBfS0VZIiwgIkFSUk9XX0RPV05fS0VZIiwgIkVWRU5UX0tFWURPV05fREFUQV9BUEkiLCAiRVZFTlRfS0VZVVBfREFUQV9BUEkiLCAiU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04iLCAiU0VMRUNUT1JfTUVOVSIsICJQTEFDRU1FTlRfVE9QIiwgIlBMQUNFTUVOVF9UT1BFTkQiLCAiUExBQ0VNRU5UX0JPVFRPTSIsICJQTEFDRU1FTlRfQk9UVE9NRU5EIiwgIlBMQUNFTUVOVF9SSUdIVCIsICJQTEFDRU1FTlRfTEVGVCIsICJhdXRvQ2xvc2UiLCAiZGlzcGxheSIsICJwb3BwZXJDb25maWciLCAiRHJvcGRvd24iLCAiX3BvcHBlciIsICJfcGFyZW50IiwgIl9tZW51IiwgIl9pbk5hdmJhciIsICJfZGV0ZWN0TmF2YmFyIiwgIl9jcmVhdGVQb3BwZXIiLCAiZm9jdXMiLCAiX2NvbXBsZXRlSGlkZSIsICJQb3BwZXIiLCAicmVmZXJlbmNlRWxlbWVudCIsICJfZ2V0UG9wcGVyQ29uZmlnIiwgIl9nZXRQbGFjZW1lbnQiLCAicGFyZW50RHJvcGRvd24iLCAiaXNFbmQiLCAiX2dldE9mZnNldCIsICJwb3BwZXJEYXRhIiwgImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsICJfc2VsZWN0TWVudUl0ZW0iLCAib3BlblRvZ2dsZXMiLCAiY29udGV4dCIsICJjb21wb3NlZFBhdGgiLCAiaXNNZW51VGFyZ2V0IiwgImlzSW5wdXQiLCAiaXNFc2NhcGVFdmVudCIsICJpc1VwT3JEb3duRXZlbnQiLCAiZ2V0VG9nZ2xlQnV0dG9uIiwgInN0b3BQcm9wYWdhdGlvbiIsICJkYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCAiY2xlYXJNZW51cyIsICJFVkVOVF9NT1VTRURPV04iLCAiY2xhc3NOYW1lIiwgImNsaWNrQ2FsbGJhY2siLCAicm9vdEVsZW1lbnQiLCAiQmFja2Ryb3AiLCAiX2lzQXBwZW5kZWQiLCAiX2FwcGVuZCIsICJfZ2V0RWxlbWVudCIsICJfZW11bGF0ZUFuaW1hdGlvbiIsICJiYWNrZHJvcCIsICJjcmVhdGVFbGVtZW50IiwgImFwcGVuZCIsICJFVkVOVF9GT0NVU0lOIiwgIkVWRU5UX0tFWURPV05fVEFCIiwgIlRBQl9OQVZfQkFDS1dBUkQiLCAiYXV0b2ZvY3VzIiwgInRyYXBFbGVtZW50IiwgIkZvY3VzVHJhcCIsICJfaXNBY3RpdmUiLCAiX2xhc3RUYWJOYXZEaXJlY3Rpb24iLCAiYWN0aXZhdGUiLCAiX2hhbmRsZUZvY3VzaW4iLCAiX2hhbmRsZUtleWRvd24iLCAiZGVhY3RpdmF0ZSIsICJzaGlmdEtleSIsICJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwgIlNFTEVDVE9SX1NUSUNLWV9DT05URU5UIiwgIlBST1BFUlRZX1BBRERJTkciLCAiUFJPUEVSVFlfTUFSR0lOIiwgIlNjcm9sbEJhckhlbHBlciIsICJnZXRXaWR0aCIsICJkb2N1bWVudFdpZHRoIiwgImlubmVyV2lkdGgiLCAiX2Rpc2FibGVPdmVyRmxvdyIsICJfc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCAiY2FsY3VsYXRlZFZhbHVlIiwgIl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzIiwgImlzT3ZlcmZsb3dpbmciLCAiX3NhdmVJbml0aWFsQXR0cmlidXRlIiwgInN0eWxlUHJvcGVydHkiLCAic2Nyb2xsYmFyV2lkdGgiLCAiX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2siLCAic2V0UHJvcGVydHkiLCAiYWN0dWFsVmFsdWUiLCAicmVtb3ZlUHJvcGVydHkiLCAiY2FsbEJhY2siLCAiRVZFTlRfSElERV9QUkVWRU5URUQiLCAiRVZFTlRfUkVTSVpFIiwgIkVWRU5UX0NMSUNLX0RJU01JU1MiLCAiRVZFTlRfTU9VU0VET1dOX0RJU01JU1MiLCAiRVZFTlRfS0VZRE9XTl9ESVNNSVNTIiwgIkNMQVNTX05BTUVfT1BFTiIsICJDTEFTU19OQU1FX1NUQVRJQyIsICJNb2RhbCIsICJfZGlhbG9nIiwgIl9iYWNrZHJvcCIsICJfaW5pdGlhbGl6ZUJhY2tEcm9wIiwgIl9mb2N1c3RyYXAiLCAiX2luaXRpYWxpemVGb2N1c1RyYXAiLCAiX3Njcm9sbEJhciIsICJfYWRqdXN0RGlhbG9nIiwgIl9zaG93RWxlbWVudCIsICJfaGlkZU1vZGFsIiwgImhhbmRsZVVwZGF0ZSIsICJtb2RhbEJvZHkiLCAidHJhbnNpdGlvbkNvbXBsZXRlIiwgIl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uIiwgImV2ZW50MiIsICJfcmVzZXRBZGp1c3RtZW50cyIsICJpc01vZGFsT3ZlcmZsb3dpbmciLCAiaW5pdGlhbE92ZXJmbG93WSIsICJpc0JvZHlPdmVyZmxvd2luZyIsICJwYWRkaW5nTGVmdCIsICJwYWRkaW5nUmlnaHQiLCAic2hvd0V2ZW50IiwgImFscmVhZHlPcGVuIiwgIkNMQVNTX05BTUVfU0hPV0lORyIsICJDTEFTU19OQU1FX0hJRElORyIsICJPUEVOX1NFTEVDVE9SIiwgIk9mZmNhbnZhcyIsICJibHVyIiwgImNvbXBsZXRlQ2FsbGJhY2siLCAiRGVmYXVsdEFsbG93bGlzdCIsICJhcmVhIiwgImJyIiwgImNvbCIsICJjb2RlIiwgImRkIiwgImRpdiIsICJkbCIsICJkdCIsICJlbSIsICJociIsICJoMSIsICJoMiIsICJoMyIsICJoNCIsICJoNSIsICJoNiIsICJsaSIsICJvbCIsICJwIiwgInByZSIsICJzIiwgInNtYWxsIiwgInNwYW4iLCAic3ViIiwgInN1cCIsICJzdHJvbmciLCAidSIsICJ1bCIsICJ1cmlBdHRyaWJ1dGVzIiwgIlNBRkVfVVJMX1BBVFRFUk4iLCAiYWxsb3dlZEF0dHJpYnV0ZSIsICJhbGxvd2VkQXR0cmlidXRlTGlzdCIsICJhdHRyaWJ1dGVOYW1lIiwgIm5vZGVWYWx1ZSIsICJhdHRyaWJ1dGVSZWdleCIsICJyZWdleCIsICJhbGxvd0xpc3QiLCAiY29udGVudCIsICJleHRyYUNsYXNzIiwgInNhbml0aXplIiwgInNhbml0aXplRm4iLCAidGVtcGxhdGUiLCAiRGVmYXVsdENvbnRlbnRUeXBlIiwgImVudHJ5IiwgIlRlbXBsYXRlRmFjdG9yeSIsICJnZXRDb250ZW50IiwgIl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbiIsICJoYXNDb250ZW50IiwgImNoYW5nZUNvbnRlbnQiLCAiX2NoZWNrQ29udGVudCIsICJ0b0h0bWwiLCAidGVtcGxhdGVXcmFwcGVyIiwgImlubmVySFRNTCIsICJfbWF5YmVTYW5pdGl6ZSIsICJ0ZXh0IiwgIl9zZXRDb250ZW50IiwgImFyZyIsICJ0ZW1wbGF0ZUVsZW1lbnQiLCAiX3B1dEVsZW1lbnRJblRlbXBsYXRlIiwgInRleHRDb250ZW50IiwgInVuc2FmZUh0bWwiLCAic2FuaXRpemVGdW5jdGlvbiIsICJjcmVhdGVkRG9jdW1lbnQiLCAiRE9NUGFyc2VyIiwgInBhcnNlRnJvbVN0cmluZyIsICJlbGVtZW50TmFtZSIsICJhdHRyaWJ1dGVMaXN0IiwgImFsbG93ZWRBdHRyaWJ1dGVzIiwgIkRJU0FMTE9XRURfQVRUUklCVVRFUyIsICJDTEFTU19OQU1FX0ZBREUiLCAiU0VMRUNUT1JfTU9EQUwiLCAiRVZFTlRfTU9EQUxfSElERSIsICJUUklHR0VSX0hPVkVSIiwgIlRSSUdHRVJfRk9DVVMiLCAiQXR0YWNobWVudE1hcCIsICJBVVRPIiwgIlRPUCIsICJSSUdIVCIsICJCT1RUT00iLCAiTEVGVCIsICJhbmltYXRpb24iLCAiY29udGFpbmVyIiwgImN1c3RvbUNsYXNzIiwgImRlbGF5IiwgInRpdGxlIiwgIlRvb2x0aXAiLCAiX2lzRW5hYmxlZCIsICJfdGltZW91dCIsICJfaXNIb3ZlcmVkIiwgIl9hY3RpdmVUcmlnZ2VyIiwgIl90ZW1wbGF0ZUZhY3RvcnkiLCAiX25ld0NvbnRlbnQiLCAidGlwIiwgIl9zZXRMaXN0ZW5lcnMiLCAiX2ZpeFRpdGxlIiwgImVuYWJsZSIsICJkaXNhYmxlIiwgInRvZ2dsZUVuYWJsZWQiLCAiY2xpY2siLCAiX2xlYXZlIiwgIl9lbnRlciIsICJfaGlkZU1vZGFsSGFuZGxlciIsICJfZGlzcG9zZVBvcHBlciIsICJfaXNXaXRoQ29udGVudCIsICJpc0luVGhlRG9tIiwgIl9nZXRUaXBFbGVtZW50IiwgIl9pc1dpdGhBY3RpdmVUcmlnZ2VyIiwgIl9nZXRUaXRsZSIsICJfY3JlYXRlVGlwRWxlbWVudCIsICJfZ2V0Q29udGVudEZvclRlbXBsYXRlIiwgIl9nZXRUZW1wbGF0ZUZhY3RvcnkiLCAidGlwSWQiLCAicHJlZml4IiwgImZsb29yIiwgInJhbmRvbSIsICJnZXRFbGVtZW50QnlJZCIsICJzZXRDb250ZW50IiwgIl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQiLCAiX2dldERlbGVnYXRlQ29uZmlnIiwgImF0dGFjaG1lbnQiLCAidHJpZ2dlcnMiLCAiZXZlbnRJbiIsICJldmVudE91dCIsICJfc2V0VGltZW91dCIsICJ0aW1lb3V0IiwgImRhdGFBdHRyaWJ1dGVzIiwgImRhdGFBdHRyaWJ1dGUiLCAiUG9wb3ZlciIsICJfZ2V0Q29udGVudCIsICJFVkVOVF9BQ1RJVkFURSIsICJFVkVOVF9DTElDSyIsICJTRUxFQ1RPUl9UQVJHRVRfTElOS1MiLCAiU0VMRUNUT1JfTkFWX0xJTktTIiwgIlNFTEVDVE9SX0xJTktfSVRFTVMiLCAicm9vdE1hcmdpbiIsICJzbW9vdGhTY3JvbGwiLCAidGhyZXNob2xkIiwgIlNjcm9sbFNweSIsICJfdGFyZ2V0TGlua3MiLCAiX29ic2VydmFibGVTZWN0aW9ucyIsICJfcm9vdEVsZW1lbnQiLCAiX2FjdGl2ZVRhcmdldCIsICJfb2JzZXJ2ZXIiLCAiX3ByZXZpb3VzU2Nyb2xsRGF0YSIsICJ2aXNpYmxlRW50cnlUb3AiLCAicGFyZW50U2Nyb2xsVG9wIiwgInJlZnJlc2giLCAiX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMiLCAiX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsIiwgImRpc2Nvbm5lY3QiLCAiX2dldE5ld09ic2VydmVyIiwgInNlY3Rpb24iLCAib2JzZXJ2ZSIsICJvYnNlcnZhYmxlU2VjdGlvbiIsICJzY3JvbGxUbyIsICJiZWhhdmlvciIsICJJbnRlcnNlY3Rpb25PYnNlcnZlciIsICJfb2JzZXJ2ZXJDYWxsYmFjayIsICJ0YXJnZXRFbGVtZW50IiwgIl9wcm9jZXNzIiwgInVzZXJTY3JvbGxzRG93biIsICJpc0ludGVyc2VjdGluZyIsICJfY2xlYXJBY3RpdmVDbGFzcyIsICJlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMiLCAidGFyZ2V0TGlua3MiLCAiYW5jaG9yIiwgImRlY29kZVVSSSIsICJfYWN0aXZhdGVQYXJlbnRzIiwgImxpc3RHcm91cCIsICJhY3RpdmVOb2RlcyIsICJzcHkiLCAiQVJST1dfTEVGVF9LRVkiLCAiQVJST1dfUklHSFRfS0VZIiwgIkhPTUVfS0VZIiwgIkVORF9LRVkiLCAiU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFIiwgIk5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCAiU0VMRUNUT1JfSU5ORVJfRUxFTSIsICJTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUiLCAiVGFiIiwgIl9zZXRJbml0aWFsQXR0cmlidXRlcyIsICJfZ2V0Q2hpbGRyZW4iLCAiaW5uZXJFbGVtIiwgIl9lbGVtSXNBY3RpdmUiLCAiYWN0aXZlIiwgIl9nZXRBY3RpdmVFbGVtIiwgImhpZGVFdmVudCIsICJfZGVhY3RpdmF0ZSIsICJfYWN0aXZhdGUiLCAicmVsYXRlZEVsZW0iLCAiX3RvZ2dsZURyb3BEb3duIiwgIm5leHRBY3RpdmVFbGVtZW50IiwgInByZXZlbnRTY3JvbGwiLCAiX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzIiwgIl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQiLCAiX2dldElubmVyRWxlbWVudCIsICJpc0FjdGl2ZSIsICJvdXRlckVsZW0iLCAiX2dldE91dGVyRWxlbWVudCIsICJfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsIiwgIm9wZW4iLCAiRVZFTlRfTU9VU0VPVkVSIiwgIkVWRU5UX01PVVNFT1VUIiwgIkVWRU5UX0ZPQ1VTT1VUIiwgIkNMQVNTX05BTUVfSElERSIsICJhdXRvaGlkZSIsICJUb2FzdCIsICJfaGFzTW91c2VJbnRlcmFjdGlvbiIsICJfaGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiIsICJfY2xlYXJUaW1lb3V0IiwgIl9tYXliZVNjaGVkdWxlSGlkZSIsICJpc1Nob3duIiwgIl9vbkludGVyYWN0aW9uIiwgImlzSW50ZXJhY3RpbmciLCAiYSIsICJhIiwgIngiLCAiYSIsICJ4IiwgInN0YXJ0IiwgInRpY2tzIiwgImNvcHkiLCAidHlwZSIsICJjIiwgImRvY3VtZW50IiwgIm0iLCAieCIsICJtIiwgIm0iLCAiZGF0dW0iLCAieCIsICJtIiwgInNlbGVjdGlvbiIsICJtIiwgIm0iLCAiYXNjZW5kaW5nIiwgImEiLCAibSIsICJtIiwgIm0iLCAiY3JlYXRlIiwgImNyZWF0ZSIsICJwYXJzZVR5cGVuYW1lcyIsICJtIiwgInR5cGUiLCAid2luZG93IiwgImRpc3BhdGNoX2RlZmF1bHQiLCAibSIsICJkaXNwYXRjaF9kZWZhdWx0IiwgInNlbGVjdF9kZWZhdWx0IiwgInJvb3QiLCAic2VsZWN0aW9uIiwgInNlbGVjdF9kZWZhdWx0IiwgImNvbnN0YW50X2RlZmF1bHQiLCAieCIsICJ0eXBlIiwgIngiLCAieSIsICJkaXNwYXRjaCIsICJmaWx0ZXIiLCAic2VsZWN0aW9uIiwgInNlbGVjdF9kZWZhdWx0IiwgImMiLCAiY29udGFpbmVyIiwgImRpc3BhdGNoIiwgInR5cGUiLCAiZXZlbnQiLCAidG91Y2giLCAiY29uc3RhbnRfZGVmYXVsdCIsICJmb3JtYXQiLCAibSIsICJhIiwgIm1pbiIsICJtYXgiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJ4IiwgImEiLCAieSIsICJ5IiwgImEiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJ5IiwgImNvbG9yIiwgInJnYiIsICJzdGFydCIsICJhIiwgImMiLCAieCIsICJhIiwgIngiLCAiYyIsICJhIiwgImEiLCAiYSIsICJjIiwgInplcm8iLCAiYSIsICJpIiwgImEiLCAiYyIsICJjb25zdGFudF9kZWZhdWx0IiwgImEiLCAiYSIsICJjIiwgIm0iLCAiYSIsICJ4IiwgIm5vdyIsICJpZCIsICJpbmRleCIsICJnZXQiLCAic2V0IiwgInNlbGYiLCAic3RhcnQiLCAiZW1wdHkiLCAiaW50ZXJydXB0X2RlZmF1bHQiLCAiaWQiLCAic2V0IiwgImdldCIsICJ0cmFuc2l0aW9uIiwgImEiLCAiYyIsICJhdHRyUmVtb3ZlIiwgImF0dHJSZW1vdmVOUyIsICJhdHRyQ29uc3RhbnQiLCAiYXR0ckNvbnN0YW50TlMiLCAiYXR0ckZ1bmN0aW9uIiwgImF0dHJGdW5jdGlvbk5TIiwgImF0dHJfZGVmYXVsdCIsICJpZCIsICJnZXQiLCAiaWQiLCAic2V0IiwgImdldCIsICJpZCIsICJzZXQiLCAiZ2V0IiwgImlkIiwgInNldCIsICJmaWx0ZXJfZGVmYXVsdCIsICJtIiwgIm1lcmdlX2RlZmF1bHQiLCAidHJhbnNpdGlvbiIsICJtIiwgImlkIiwgInNldCIsICJvbl9kZWZhdWx0IiwgImdldCIsICJpZCIsICJyZW1vdmVfZGVmYXVsdCIsICJzZWxlY3RfZGVmYXVsdCIsICJpZCIsICJtIiwgImdldCIsICJzZWxlY3RBbGxfZGVmYXVsdCIsICJpZCIsICJtIiwgImNoaWxkcmVuIiwgImluaGVyaXQiLCAiZ2V0IiwgIlNlbGVjdGlvbiIsICJzZWxlY3Rpb25fZGVmYXVsdCIsICJzdHlsZVJlbW92ZSIsICJzdHlsZUNvbnN0YW50IiwgInN0eWxlRnVuY3Rpb24iLCAiaWQiLCAicmVtb3ZlIiwgInNldCIsICJzdHlsZV9kZWZhdWx0IiwgInRleHRDb25zdGFudCIsICJ0ZXh0RnVuY3Rpb24iLCAidGV4dF9kZWZhdWx0IiwgIm0iLCAiaW5oZXJpdCIsICJnZXQiLCAiaWQiLCAic2V0IiwgImlkIiwgInNlbGVjdF9kZWZhdWx0IiwgInNlbGVjdEFsbF9kZWZhdWx0IiwgImZpbHRlcl9kZWZhdWx0IiwgIm1lcmdlX2RlZmF1bHQiLCAic2VsZWN0aW9uX2RlZmF1bHQiLCAib25fZGVmYXVsdCIsICJhdHRyX2RlZmF1bHQiLCAic3R5bGVfZGVmYXVsdCIsICJ0ZXh0X2RlZmF1bHQiLCAicmVtb3ZlX2RlZmF1bHQiLCAiaWQiLCAidHJhbnNpdGlvbl9kZWZhdWx0IiwgIm0iLCAiaW50ZXJydXB0X2RlZmF1bHQiLCAidHJhbnNpdGlvbl9kZWZhdWx0IiwgIngiLCAieSIsICJ4IiwgInkiLCAieCIsICJ5IiwgIngiLCAieSIsICJkYXRhX2RlZmF1bHQiLCAieCIsICJ5IiwgIngyIiwgInkyIiwgIngzIiwgInkzIiwgInJlbW92ZV9kZWZhdWx0IiwgIngiLCAieSIsICJzaXplX2RlZmF1bHQiLCAieCIsICJ5IiwgImNvcHkiLCAiZGF0YV9kZWZhdWx0IiwgInJlbW92ZV9kZWZhdWx0IiwgInNpemVfZGVmYXVsdCIsICJjb25zdGFudF9kZWZhdWx0IiwgIngiLCAiY29uc3RhbnRfZGVmYXVsdCIsICJ4IiwgInkiLCAiZmluZCIsICJpZCIsICJjb25zdGFudF9kZWZhdWx0IiwgIngiLCAieSIsICJtIiwgImkiLCAieCIsICJ5IiwgImNvbnN0YW50X2RlZmF1bHQiLCAieCIsICJ5IiwgIm5vZGUiLCAic3RyZW5ndGgiLCAiYyIsICJ4MiIsICJ4IiwgIngiLCAieCIsICJ4IiwgIngiLCAieCIsICJsb2NhbGUiLCAiemVybyIsICJ0eXBlIiwgImZvcm1hdCIsICJjIiwgImZvcm1hdFByZWZpeCIsICJ2YWx1ZSIsICJtYXgiLCAieCIsICJudW1iZXIiLCAieCIsICJpZGVudGl0eSIsICJ4IiwgImEiLCAiaSIsICJ0cmFuc2Zvcm0iLCAieSIsICJudW1iZXIiLCAic3RhcnQiLCAic3RhcnQiLCAibGluZWFyIiwgImNvbnN0YW50X2RlZmF1bHQiLCAieCIsICJ0eXBlIiwgInRyYW5zZm9ybSIsICJkaXNwYXRjaCIsICJ4IiwgInkiLCAiaWRlbnRpdHkiLCAibm9wcm9wYWdhdGlvbiIsICJub2V2ZW50X2RlZmF1bHQiLCAiZGVmYXVsdEZpbHRlciIsICJpZGVudGl0eSIsICJkZWZhdWx0VG91Y2hhYmxlIiwgInRyYW5zZm9ybSIsICJ6b29tX2RlZmF1bHQiLCAiZmlsdGVyIiwgInNlbGVjdGlvbiIsICJ4IiwgInkiLCAiZXh0ZW50IiwgInRyYW5zaXRpb24iLCAiYSIsICJ0eXBlIiwgInNlbGVjdF9kZWZhdWx0IiwgIm5vZXZlbnRfZGVmYXVsdCIsICJub3Byb3BhZ2F0aW9uIiwgImV2ZW50IiwgImNvbnN0YW50X2RlZmF1bHQiLCAibm9kZXMiLCAibGlua3MiLCAibm9kZSIsICJsaW5rIiwgImluZGV4IiwgInNlbGVjdF9kZWZhdWx0IiwgInpvb21fZGVmYXVsdCIsICJ4IiwgInkiLCAidHJhbnNmb3JtIiwgImlkIiwgImxpbmVhciIsICJ0aW1lb3V0Il0KfQo= diff --git a/main.ts b/main.ts index 3fa5751..0365940 100644 --- a/main.ts +++ b/main.ts @@ -3,11 +3,11 @@ import * as d3 from "d3"; import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/js/bootstrap.bundle.min.js'; -interface MyPluginSettings { +interface ScGraphViewSettings { mySetting: string; } -const DEFAULT_SETTINGS: MyPluginSettings = { +const DEFAULT_SETTINGS: ScGraphViewSettings = { mySetting: 'default' } @@ -75,15 +75,15 @@ class MyItemView extends ItemView { } getViewType(): string { - return "My Item View"; + return "Smart Graph View"; } getDisplayText(): string { - return "My Item View"; + return "Smart Graph View"; } getIcon(): string { - return "dice"; + return "git-fork"; } // Function to update node appearance based on selection and highlight state @@ -173,7 +173,6 @@ class MyItemView extends ItemView { // Helper function to truncate labels, extract filenames or parts after hashtags, and remove brackets formatLabel(path: string, truncate: boolean = true) { - console.log('formatting: ', truncate); if (truncate) { if (path.includes('#')) { const parts = path.split('#'); @@ -661,9 +660,7 @@ class MyItemView extends ItemView { console.log('Update already in progress. Skipping...'); return; } else { - console.log('Update not in progress . Skipping...'); - } this.isChangingConnectionType = false; @@ -707,7 +704,6 @@ class MyItemView extends ItemView { } return true; }); - console.log('Validated Links:', this.validatedLinks); // Safeguard to prevent infinite loop @@ -829,7 +825,6 @@ class MyItemView extends ItemView { } } that.unhighlightNode(); - console.log('selecting node', d.selected); d3.select(this).attr('stroke', d.selected ? 'blanchedalmond' : 'transparent').attr('stroke-width', d.selected ? 1.5 : 0.3); // Change stroke color back to less visible on mouse out svgGroup.select(`text[data-id='${d.id}']`).transition().duration(250).attr('y', d.y); }), @@ -1504,7 +1499,6 @@ class MyItemView extends ItemView { } } - /* Main Colors Menu text: #a3aecb @@ -1515,31 +1509,29 @@ class MyItemView extends ItemView { SliderKnob: #f3ee5d */ - -export default class MyPlugin extends Plugin { - settings: MyPluginSettings; +export default class ScGraphView extends Plugin { + settings: ScGraphViewSettings; async onload() { await this.loadSettings(); - // Register the new view - this.registerView("My Item View", (leaf: WorkspaceLeaf) => new MyItemView(leaf)); + this.registerView("Smart Graph View", (leaf: WorkspaceLeaf) => new MyItemView(leaf)); - // Register hover link source - this.registerHoverLinkSource('D3', { - display: 'D3 Hover Link Source', - defaultMod: true - }); + // Register hover link source + this.registerHoverLinkSource('Smart Graph', { + display: 'Smart Graph Hover Link Source', + defaultMod: true + }); // This creates an icon in the left ribbon. - const ribbonIconEl = this.addRibbonIcon('dice', 'Smart Graph', (evt: MouseEvent) => { + const ribbonIconEl = this.addRibbonIcon('git-fork', 'Smart Graph', (evt: MouseEvent) => { // Called when the user clicks the icon. // Create a new leaf in the current workspace let leaf = this.app.workspace.getLeaf(true); // Set the new leaf's view to your custom view leaf.setViewState({ - type: "My Item View", + type: "Smart Graph View", active: true, }); }) @@ -1560,26 +1552,26 @@ export default class MyPlugin extends Plugin { // Set the new leaf's view to your custom view leaf.setViewState({ - type: "My Item View", + type: "Smart Graph View", active: true, }); } }); - // This adds an editor command that can perform some operation on the current editor instance - this.addCommand({ - id: 'sample-editor-command', - name: 'Sample editor command', - callback: () => { - // Create a new leaf in the current workspace - let leaf = this.app.workspace.getLeaf(true); + // // This adds an editor command that can perform some operation on the current editor instance + // this.addCommand({ + // id: 'sample-editor-command', + // name: 'Sample editor command', + // callback: () => { + // // Create a new leaf in the current workspace + // let leaf = this.app.workspace.getLeaf(true); - // Set the new leaf's view to your custom view - leaf.setViewState({ - type: "My Item View", - active: true, - }); - } - }); + // // Set the new leaf's view to your custom view + // leaf.setViewState({ + // type: "Smart Graph View", + // active: true, + // }); + // } + // }); // This adds a complex command that can check whether the current state of the app allows execution of the command this.addCommand({ @@ -1591,23 +1583,23 @@ export default class MyPlugin extends Plugin { // Set the new leaf's view to your custom view leaf.setViewState({ - type: "My Item View", + type: "Smart Graph View", active: true, }); } }); - // This adds a settings tab so the user can configure various aspects of the plugin - this.addSettingTab(new SampleSettingTab(this.app, this)); + // // This adds a settings tab so the user can configure various aspects of the plugin + // this.addSettingTab(new SampleSettingTab(this.app, this)); - // If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin) + // If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin) // Using this function will automatically remove the event listener when this plugin is disabled. this.registerDomEvent(document, 'click', (evt: MouseEvent) => { - console.log('click', evt); - }); + // console.log('click', evt); + }); - // When registering intervals, this function will automatically clear the interval when the plugin is disabled. - this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); + // // When registering intervals, this function will automatically clear the interval when the plugin is disabled. + // this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); } onunload() {} @@ -1621,28 +1613,28 @@ export default class MyPlugin extends Plugin { } } -class SampleSettingTab extends PluginSettingTab { - plugin: MyPlugin; +// class SampleSettingTab extends PluginSettingTab { +// plugin: ScGraphView; - constructor(app: App, plugin: MyPlugin) { - super(app, plugin); - this.plugin = plugin; - } +// constructor(app: App, plugin: ScGraphView) { +// super(app, plugin); +// this.plugin = plugin; +// } - display(): void { - const {containerEl} = this; +// display(): void { +// const {containerEl} = this; - containerEl.empty(); +// containerEl.empty(); - new Setting(containerEl) - .setName('Setting #1') - .setDesc('It\'s a secret') - .addText(text => text - .setPlaceholder('Enter your secret... This will change everything') - .setValue(this.plugin.settings.mySetting) - .onChange(async (value) => { - this.plugin.settings.mySetting = value; - await this.plugin.saveSettings(); - })); - } -} +// new Setting(containerEl) +// .setName('Setting #1') +// .setDesc('It\'s a secret') +// .addText(text => text +// .setPlaceholder('Enter your secret... This will change everything') +// .setValue(this.plugin.settings.mySetting) +// .onChange(async (value) => { +// this.plugin.settings.mySetting = value; +// await this.plugin.saveSettings(); +// })); +// } +// } \ No newline at end of file diff --git a/manifest.json b/manifest.json index 01cabd8..ab181e7 100644 --- a/manifest.json +++ b/manifest.json @@ -1,11 +1,12 @@ { - "id": "D3", - "name": "D3 Plugin", + "id": "Smart-Connections-Graph-View", + "name": "Smart Connections Graph View", "version": "1.0.2", "minAppVersion": "0.15.0", - "description": "Demonstrates some of the capabilities of the Obsidian API.", - "author": "Obsidian", - "authorUrl": "https://obsidian.md", - "fundingUrl": "https://obsidian.md/pricing", - "isDesktopOnly": false + "description": "A plugin that allows you to view your Smart Connections in a graph format.", + "author": "Evan Moscoso", + "authorUrl": "https://github.com/mossy426", + "fundingUrl": "https://github.com/mossy426", + "isDesktopOnly": true } + diff --git a/package-lock.json b/package-lock.json index 7c28976..89c6ffb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "obsidian-sample-plugin", - "version": "1.0.0", + "name": "smart-connections-graph-view", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "obsidian-sample-plugin", - "version": "1.0.0", + "name": "smart-connections-graph-view", + "version": "1.0.2", "license": "MIT", "dependencies": { "bootstrap": "^5.3.3", @@ -18,6 +18,7 @@ "@typescript-eslint/eslint-plugin": "5.29.0", "@typescript-eslint/parser": "5.29.0", "builtin-modules": "3.3.0", + "dotenv": "^16.4.5", "esbuild": "0.17.3", "obsidian": "latest", "tslib": "2.4.0", @@ -1668,6 +1669,18 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/esbuild": { "version": "0.17.3", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.3.tgz", diff --git a/package.json b/package.json index d5d984e..87619f9 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,20 @@ { - "name": "obsidian-sample-plugin", - "version": "1.0.0", - "description": "This is a sample plugin for Obsidian (https://obsidian.md)", + "name": "smart-connections-graph-view", + "version": "1.0.2", + "description": "A plugin that allows you to view your Smart Connections in a graph format.", "main": "main.js", "scripts": { "dev": "node esbuild.config.mjs", "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "version": "node version-bump.mjs && git add manifest.json versions.json" }, - "keywords": [], - "author": "", + "keywords": [ + "Obsidian", + "Smart Connections", + "Graph", + "View" + ], + "author": "Evan Moscoso", "license": "MIT", "devDependencies": { "@types/d3": "^7.4.3", @@ -17,6 +22,7 @@ "@typescript-eslint/eslint-plugin": "5.29.0", "@typescript-eslint/parser": "5.29.0", "builtin-modules": "3.3.0", + "dotenv": "^16.4.5", "esbuild": "0.17.3", "obsidian": "latest", "tslib": "2.4.0",