Last active
December 13, 2021 21:51
-
-
Save estasney/738bf2a13ae6a52dc902258b9ab817d5 to your computer and use it in GitHub Desktop.
JSON Tidy Tree
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!doctype html><html><head><meta charset="utf-8"><title>Tidy Tree</title><meta name="viewport" content="width=device-width,initial-scale=1"><script defer="defer" src="tidyTree.1b0427f078801b34e4e5.js"></script></head><body></body></html> |
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (()=>{var __webpack_modules__={129:(module,__unused_webpack_exports,__webpack_require__)=>{eval("module.exports = __webpack_require__(760);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI5LmpzIiwibWFwcGluZ3MiOiJBQUFBQSx5Q0FBQSIsInNvdXJjZXMiOlsid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzP2EzNGEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///129\n")},922:module=>{"use strict";eval('\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = "";\n var needLayer = typeof item[5] !== "undefined";\n\n if (item[4]) {\n content += "@supports (".concat(item[4], ") {");\n }\n\n if (item[2]) {\n content += "@media ".concat(item[2], " {");\n }\n\n if (needLayer) {\n content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += "}";\n }\n\n if (item[2]) {\n content += "}";\n }\n\n if (item[4]) {\n content += "}";\n }\n\n return content;\n }).join("");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === "string") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== "undefined") {\n if (typeof item[5] === "undefined") {\n item[5] = layer;\n } else {\n item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = "".concat(supports);\n } else {\n item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQVVPLFFBQVYsQ0FBVjtBQUNELFNBRkQsTUFFTztBQUNMVixVQUFBQSxJQUFJLENBQUMsQ0FBRCxDQUFKLEdBQVUsY0FBY0csTUFBZCxDQUFxQkgsSUFBSSxDQUFDLENBQUQsQ0FBekIsRUFBOEIsS0FBOUIsRUFBcUNHLE1BQXJDLENBQTRDSCxJQUFJLENBQUMsQ0FBRCxDQUFoRCxFQUFxRCxHQUFyRCxDQUFWO0FBQ0FBLFVBQUFBLElBQUksQ0FBQyxDQUFELENBQUosR0FBVVUsUUFBVjtBQUNEO0FBQ0Y7O0FBRURiLE1BQUFBLElBQUksQ0FBQ29CLElBQUwsQ0FBVWpCLElBQVY7QUFDRDtBQUNGLEdBckREOztBQXVEQSxTQUFPSCxJQUFQO0FBQ0QsQ0EvRkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/MjRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2tdWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1cHBvcnRzKSB7XG4gICAgICAgIGlmICghaXRlbVs0XSkge1xuICAgICAgICAgIGl0ZW1bNF0gPSBcIlwiLmNvbmNhdChzdXBwb3J0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzRdID0gc3VwcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07Il0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJsZW5ndGgiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYSIsImRlZHVwZSIsInN1cHBvcnRzIiwibGF5ZXIiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiayIsImlkIiwiX2siLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///922\n')},251:module=>{"use strict";eval('\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === "function") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);\n var sourceMapping = "/*# ".concat(data, " */");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join("\\n");\n }\n\n return [content].join("\\n");\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsVUFBVUMsSUFBVixFQUFnQjtBQUMvQixNQUFJQyxPQUFPLEdBQUdELElBQUksQ0FBQyxDQUFELENBQWxCO0FBQ0EsTUFBSUUsVUFBVSxHQUFHRixJQUFJLENBQUMsQ0FBRCxDQUFyQjs7QUFFQSxNQUFJLENBQUNFLFVBQUwsRUFBaUI7QUFDZixXQUFPRCxPQUFQO0FBQ0Q7O0FBRUQsTUFBSSxPQUFPRSxJQUFQLEtBQWdCLFVBQXBCLEVBQWdDO0FBQzlCLFFBQUlDLE1BQU0sR0FBR0QsSUFBSSxDQUFDRSxRQUFRLENBQUNDLGtCQUFrQixDQUFDQyxJQUFJLENBQUNDLFNBQUwsQ0FBZU4sVUFBZixDQUFELENBQW5CLENBQVQsQ0FBakI7QUFDQSxRQUFJTyxJQUFJLEdBQUcsK0RBQStEQyxNQUEvRCxDQUFzRU4sTUFBdEUsQ0FBWDtBQUNBLFFBQUlPLGFBQWEsR0FBRyxPQUFPRCxNQUFQLENBQWNELElBQWQsRUFBb0IsS0FBcEIsQ0FBcEI7QUFDQSxRQUFJRyxVQUFVLEdBQUdWLFVBQVUsQ0FBQ1csT0FBWCxDQUFtQkMsR0FBbkIsQ0FBdUIsVUFBVUMsTUFBVixFQUFrQjtBQUN4RCxhQUFPLGlCQUFpQkwsTUFBakIsQ0FBd0JSLFVBQVUsQ0FBQ2MsVUFBWCxJQUF5QixFQUFqRCxFQUFxRE4sTUFBckQsQ0FBNERLLE1BQTVELEVBQW9FLEtBQXBFLENBQVA7QUFDRCxLQUZnQixDQUFqQjtBQUdBLFdBQU8sQ0FBQ2QsT0FBRCxFQUFVUyxNQUFWLENBQWlCRSxVQUFqQixFQUE2QkYsTUFBN0IsQ0FBb0MsQ0FBQ0MsYUFBRCxDQUFwQyxFQUFxRE0sSUFBckQsQ0FBMEQsSUFBMUQsQ0FBUDtBQUNEOztBQUVELFNBQU8sQ0FBQ2hCLE9BQUQsRUFBVWdCLElBQVYsQ0FBZSxJQUFmLENBQVA7QUFDRCxDQW5CRCIsInNvdXJjZXMiOlsid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanM/YWYxMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiaXRlbSIsImNvbnRlbnQiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJjb25jYXQiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJtYXAiLCJzb3VyY2UiLCJzb3VyY2VSb290Iiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///251\n')},760:(module,__unused_webpack_exports,__webpack_require__)=>{eval('/* module decorator */ module = __webpack_require__.nmd(module);\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, "");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: "normal",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: "throw",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n\n\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, "constructor", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);\n GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, "GeneratorFunction");\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) {\n return PromiseImpl.resolve(value.__await).then(function (value) {\n invoke("next", value, resolve, reject);\n }, function (err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke("throw", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === "throw") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n // Note: ["return"] must be used for ES3 parsing compatibility.\n if (delegate.iterator["return"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError("The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n define(Gp, toStringTagSymbol, "Generator"); // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n define(Gp, iteratorSymbol, function () {\n return this;\n });\n define(Gp, "toString", function () {\n return "[object Generator]";\n });\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: "root"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = "next";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" || record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n "catch": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error("illegal catch attempt");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\n( false ? 0 : _typeof(module)) === "object" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you\'ve misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you\'re not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if ((typeof globalThis === "undefined" ? "undefined" : _typeof(globalThis)) === "object") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function("r", "regeneratorRuntime = r")(runtime);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFVBQVAseUNBQU9BLFVBQVAsT0FBc0IsUUFBMUIsRUFBb0M7QUFDbENBLElBQUFBLFVBQVUsQ0FBQ0Ysa0JBQVgsR0FBZ0MvSSxPQUFoQztBQUNELEdBRkQsTUFFTztBQUNMa0osSUFBQUEsUUFBUSxDQUFDLEdBQUQsRUFBTSx3QkFBTixDQUFSLENBQXdDbEosT0FBeEM7QUFDRDtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzPzk2Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIC8vIElFIDggaGFzIGEgYnJva2VuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0aGF0IG9ubHkgd29ya3Mgb24gRE9NIG9iamVjdHMuXG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24ob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgZGVmaW5lKEl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBkZWZpbmUoR3AsIFwiY29uc3RydWN0b3JcIiwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwgR2VuZXJhdG9yRnVuY3Rpb24pO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShcbiAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCxcbiAgICBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgKTtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKTtcbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIik7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG5cbiAgZGVmaW5lKEdwLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCBpbiBtb2Rlcm4gZW5naW5lc1xuICAvLyB3ZSBjYW4gZXhwbGljaXRseSBhY2Nlc3MgZ2xvYmFsVGhpcy4gSW4gb2xkZXIgZW5naW5lcyB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBnbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG4gIH0gZWxzZSB7XG4gICAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJ1bnRpbWUiLCJleHBvcnRzIiwiT3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsIiRTeW1ib2wiLCJTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsIml0ZXJhdG9yIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwib2JqIiwia2V5IiwidmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImVyciIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInNlbGYiLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY3JlYXRlIiwiY29udGV4dCIsIkNvbnRleHQiLCJfaW52b2tlIiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwiZm4iLCJhcmciLCJ0eXBlIiwiY2FsbCIsIkdlblN0YXRlU3VzcGVuZGVkU3RhcnQiLCJHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkIiwiR2VuU3RhdGVFeGVjdXRpbmciLCJHZW5TdGF0ZUNvbXBsZXRlZCIsIkNvbnRpbnVlU2VudGluZWwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJnZXRQcm90byIsImdldFByb3RvdHlwZU9mIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJ2YWx1ZXMiLCJHcCIsImRpc3BsYXlOYW1lIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIm1ldGhvZCIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJjdG9yIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJfX2F3YWl0IiwiQXN5bmNJdGVyYXRvciIsIlByb21pc2VJbXBsIiwiaW52b2tlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlY29yZCIsInJlc3VsdCIsInRoZW4iLCJ1bndyYXBwZWQiLCJlcnJvciIsInByZXZpb3VzUHJvbWlzZSIsImVucXVldWUiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsImFzeW5jIiwiUHJvbWlzZSIsIml0ZXIiLCJuZXh0IiwiZG9uZSIsInN0YXRlIiwiRXJyb3IiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsImluZm8iLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJlbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0Iiwia2V5cyIsIm9iamVjdCIsInJldmVyc2UiLCJsZW5ndGgiLCJwb3AiLCJpdGVyYWJsZSIsIml0ZXJhdG9yTWV0aG9kIiwiaXNOYU4iLCJpIiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJyb290RW50cnkiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsIm1vZHVsZSIsInJlZ2VuZXJhdG9yUnVudGltZSIsImFjY2lkZW50YWxTdHJpY3RNb2RlIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///760\n')},387:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval('\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);\n }\n\n _next(undefined);\n });\n };\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js\nvar regenerator = __webpack_require__(129);\nvar regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i["return"] != null) _i["return"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/accessors.js\nfunction optional(f) {\n return f == null ? null : required(f);\n}\nfunction required(f) {\n if (typeof f !== "function") throw new Error();\n return f;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/count.js\nfunction count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;else while (--i >= 0) {\n sum += children[i].value;\n }\n node.value = sum;\n}\n\n/* harmony default export */ function hierarchy_count() {\n return this.eachAfter(count);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/each.js\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = each_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }\n\nfunction each_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return each_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return each_arrayLikeToArray(o, minLen); }\n\nfunction each_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/* harmony default export */ function each(callback, that) {\n var index = -1;\n\n var _iterator = _createForOfIteratorHelper(this),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n callback.call(that, node, ++index, this);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js\n/* harmony default export */ function eachBefore(callback, that) {\n var node = this,\n nodes = [node],\n children,\n i,\n index = -1;\n\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js\n/* harmony default export */ function eachAfter(callback, that) {\n var node = this,\n nodes = [node],\n next = [],\n children,\n i,\n n,\n index = -1;\n\n while (node = nodes.pop()) {\n next.push(node);\n\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/find.js\nfunction find_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = find_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }\n\nfunction find_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return find_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return find_arrayLikeToArray(o, minLen); }\n\nfunction find_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/* harmony default export */ function find(callback, that) {\n var index = -1;\n\n var _iterator = find_createForOfIteratorHelper(this),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/sum.js\n/* harmony default export */ function sum(value) {\n return this.eachAfter(function (node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n\n while (--i >= 0) {\n sum += children[i].value;\n }\n\n node.value = sum;\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/sort.js\n/* harmony default export */ function sort(compare) {\n return this.eachBefore(function (node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/path.js\n/* harmony default export */ function path(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n\n var k = nodes.length;\n\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n\n return c;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/ancestors.js\n/* harmony default export */ function ancestors() {\n var node = this,\n nodes = [node];\n\n while (node = node.parent) {\n nodes.push(node);\n }\n\n return nodes;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/descendants.js\n/* harmony default export */ function descendants() {\n return Array.from(this);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/leaves.js\n/* harmony default export */ function leaves() {\n var leaves = [];\n this.eachBefore(function (node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/links.js\n/* harmony default export */ function links() {\n var root = this,\n links = [];\n root.each(function (node) {\n if (node !== root) {\n // Don’t include the root’s parent, if any.\n links.push({\n source: node.parent,\n target: node\n });\n }\n });\n return links;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/iterator.js\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(_callee);\n\nfunction _callee() {\n var node, current, next, children, i, n;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n node = this, next = [node];\n\n case 1:\n current = next.reverse(), next = [];\n\n case 2:\n if (!(node = current.pop())) {\n _context.next = 8;\n break;\n }\n\n _context.next = 5;\n return node;\n\n case 5:\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n\n _context.next = 2;\n break;\n\n case 8:\n if (next.length) {\n _context.next = 1;\n break;\n }\n\n case 9:\n case "end":\n return _context.stop();\n }\n }\n }, _marked, this);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/hierarchy/index.js\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n var height = 0;\n\n do {\n node.height = height;\n } while ((node = node.parent) && node.height < ++height);\n}\nfunction Node(data) {\n this.data = data;\n this.depth = this.height = 0;\n this.parent = null;\n}\nNode.prototype = hierarchy.prototype = _defineProperty({\n constructor: Node,\n count: hierarchy_count,\n each: each,\n eachAfter: eachAfter,\n eachBefore: eachBefore,\n find: find,\n sum: sum,\n sort: sort,\n path: path,\n ancestors: ancestors,\n descendants: descendants,\n leaves: leaves,\n links: links,\n copy: node_copy\n}, Symbol.iterator, _callee);\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/stratify.js\nfunction stratify_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = stratify_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }\n\nfunction stratify_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return stratify_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return stratify_arrayLikeToArray(o, minLen); }\n\nfunction stratify_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\nvar preroot = {\n depth: -1\n},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\n/* harmony default export */ function src_stratify() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map();\n\n if (path != null) {\n var I = nodes.map(function (d, i) {\n return normalize(path(d, i, data));\n });\n var P = I.map(parentof);\n var S = new Set(I).add("");\n\n var _iterator = stratify_createForOfIteratorHelper(P),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _i = _step.value;\n\n if (!S.has(_i)) {\n S.add(_i);\n I.push(_i);\n P.push(parentof(_i));\n nodes.push(imputed);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n currentId = function currentId(_, i) {\n return I[i];\n };\n\n currentParentId = function currentParentId(_, i) {\n return P[i];\n };\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += "")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += "")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error("missing: " + nodeId);\n if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);\n if (parent.children) parent.children.push(node);else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error("multiple roots");\n root = node;\n }\n }\n\n if (!root) throw new Error("no root"); // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n\n for (var _i2 = nodes.length - 1; _i2 >= 0; --_i2) {\n node = nodes[_i2];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function (node) {\n node.depth = node.parent.depth + 1;\n --n;\n }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error("cycle");\n return root;\n }\n\n stratify.id = function (x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function (x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function (x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n} // To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\n\nfunction normalize(path) {\n path = "".concat(path);\n var i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === "/" ? path : "/".concat(path);\n} // Walk backwards to find the first slash that is not the leading slash, e.g.:\n// "/foo/bar" ⇥ "/foo", "/foo" ⇥ "/", "/" ↦ "". (The root is special-cased\n// because the id of the root must be a truthy value.)\n\n\nfunction parentof(path) {\n var i = path.length;\n if (i < 2) return "";\n\n while (--i > 1) {\n if (slash(path, i)) break;\n }\n\n return path.slice(0, i);\n} // Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\n\n\nfunction slash(path, i) {\n if (path[i] === "/") {\n var k = 0;\n\n while (i > 0 && path[--i] === "\\\\") {\n ++k;\n }\n\n if ((k & 1) === 0) return true;\n }\n\n return false;\n}\n;// CONCATENATED MODULE: ./src/tidyTree/dataHandler.ts\n\n\n\n\nfunction dataHandler_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = dataHandler_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }\n\nfunction dataHandler_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return dataHandler_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return dataHandler_arrayLikeToArray(o, minLen); }\n\nfunction dataHandler_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\nvar preprocessNodes = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/regenerator_default().mark(function _callee(data) {\n var nodesData, _iterator, _step, node, _node, nodeId, nodeData, _iterator2, _step2, link, _nodeData;\n\n return regenerator_default().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n nodesData = new Map(); // We need to attach data from nodes to links\n\n _iterator = dataHandler_createForOfIteratorHelper(data.nodes);\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n node = _step.value;\n _node = _slicedToArray(node, 2), nodeId = _node[0], nodeData = _node[1];\n nodesData.set(nodeId.toString(), {\n name: nodeData.name,\n ns: nodeData.ns,\n _id: undefined,\n _children: undefined\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n _iterator2 = dataHandler_createForOfIteratorHelper(data.links);\n _context.prev = 4;\n\n _iterator2.s();\n\n case 6:\n if ((_step2 = _iterator2.n()).done) {\n _context.next = 16;\n break;\n }\n\n link = _step2.value;\n link.child = link.child.toString();\n _nodeData = nodesData.get(link.child);\n\n if (_nodeData) {\n _context.next = 12;\n break;\n }\n\n throw new Error("".concat(link.child, " missing from nodeData"));\n\n case 12:\n link.name = _nodeData.name;\n link.ns = _nodeData.ns;\n\n case 14:\n _context.next = 6;\n break;\n\n case 16:\n _context.next = 21;\n break;\n\n case 18:\n _context.prev = 18;\n _context.t0 = _context["catch"](4);\n\n _iterator2.e(_context.t0);\n\n case 21:\n _context.prev = 21;\n\n _iterator2.f();\n\n return _context.finish(21);\n\n case 24:\n return _context.abrupt("return", data);\n\n case 25:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, null, [[4, 18, 21, 24]]);\n }));\n\n return function preprocessNodes(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\nvar stratifyNodes = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/regenerator_default().mark(function _callee2(data) {\n var pData, stratify;\n return regenerator_default().wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return preprocessNodes(data);\n\n case 2:\n pData = _context2.sent;\n stratify = src_stratify().id(function (d) {\n return d.child;\n }).parentId(function (d) {\n return d.parent;\n });\n return _context2.abrupt("return", stratify(pData.links));\n\n case 5:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2);\n }));\n\n return function stratifyNodes(_x2) {\n return _ref2.apply(this, arguments);\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selector.js\nfunction none() {}\n\n/* harmony default export */ function selector(selector) {\n return selector == null ? none : function () {\n return this.querySelector(selector);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/select.js\n\n\n/* harmony default export */ function selection_select(select) {\n if (typeof select !== "function") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if ("__data__" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/array.js\n// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nfunction array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selectorAll.js\nfunction empty() {\n return [];\n}\n\n/* harmony default export */ function selectorAll(selector) {\n return selector == null ? empty : function () {\n return this.querySelectorAll(selector);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectAll.js\n\n\n\n\nfunction arrayAll(select) {\n return function () {\n return array(select.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function selectAll(select) {\n if (typeof select === "function") select = arrayAll(select);else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/matcher.js\n/* harmony default export */ function matcher(selector) {\n return function () {\n return this.matches(selector);\n };\n}\nfunction childMatcher(selector) {\n return function (node) {\n return node.matches(selector);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectChild.js\n\nvar selectChild_find = Array.prototype.find;\n\nfunction childFind(match) {\n return function () {\n return selectChild_find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\n/* harmony default export */ function selectChild(match) {\n return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectChildren.js\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function () {\n return filter.call(this.children, match);\n };\n}\n\n/* harmony default export */ function selectChildren(match) {\n return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/filter.js\n\n\n/* harmony default export */ function selection_filter(match) {\n if (typeof match !== "function") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sparse.js\n/* harmony default export */ function sparse(update) {\n return new Array(update.length);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/enter.js\n\n\n/* harmony default export */ function enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\nfunction EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function appendChild(child) {\n return this._parent.insertBefore(child, this._next);\n },\n insertBefore: function insertBefore(child, next) {\n return this._parent.insertBefore(child, next);\n },\n querySelector: function querySelector(selector) {\n return this._parent.querySelector(selector);\n },\n querySelectorAll: function querySelectorAll(selector) {\n return this._parent.querySelectorAll(selector);\n }\n};\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/constant.js\n/* harmony default export */ function src_constant(x) {\n return function () {\n return x;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/data.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\n\n\n\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length; // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n } // Put any non-null nodes that don’t fit into exit.\n\n\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map(),\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue; // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + "";\n\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n } // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n\n\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + "";\n\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue["delete"](keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n } // Add any remaining nodes that were not bound to data to exit.\n\n\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && nodeByKeyValue.get(keyValues[i]) === node) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\n/* harmony default export */ function data(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n if (typeof value !== "function") value = src_constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n\n while (!(next = updateGroup[i1]) && ++i1 < dataLength) {\n ;\n }\n\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n} // Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\n\nfunction arraylike(data) {\n return _typeof(data) === "object" && "length" in data ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/exit.js\n\n\n/* harmony default export */ function exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/join.js\n/* harmony default export */ function join(onenter, onupdate, onexit) {\n var enter = this.enter(),\n update = this,\n exit = this.exit();\n\n if (typeof onenter === "function") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + "");\n }\n\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n\n if (onexit == null) exit.remove();else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/merge.js\n\n/* harmony default export */ function merge(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/order.js\n/* harmony default export */ function order() {\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sort.js\n\n/* harmony default export */ function selection_sort(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/call.js\n/* harmony default export */ function call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/nodes.js\n/* harmony default export */ function nodes() {\n return Array.from(this);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/node.js\n/* harmony default export */ function node() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/size.js\nfunction size_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = size_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }\n\nfunction size_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return size_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return size_arrayLikeToArray(o, minLen); }\n\nfunction size_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/* harmony default export */ function size() {\n var size = 0;\n\n var _iterator = size_createForOfIteratorHelper(this),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var node = _step.value;\n ++size;\n } // eslint-disable-line no-unused-vars\n\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return size;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/empty.js\n/* harmony default export */ function selection_empty() {\n return !this.node();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/each.js\n/* harmony default export */ function selection_each(callback) {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/namespaces.js\nvar xhtml = "http://www.w3.org/1999/xhtml";\n/* harmony default export */ const namespaces = ({\n svg: "http://www.w3.org/2000/svg",\n xhtml: xhtml,\n xlink: "http://www.w3.org/1999/xlink",\n xml: "http://www.w3.org/XML/1998/namespace",\n xmlns: "http://www.w3.org/2000/xmlns/"\n});\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/namespace.js\n\n/* harmony default export */ function namespace(name) {\n var prefix = name += "",\n i = prefix.indexOf(":");\n if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {\n space: namespaces[prefix],\n local: name\n } : name; // eslint-disable-line no-prototype-builtins\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/attr.js\n\n\nfunction attrRemove(name) {\n return function () {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function () {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function () {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function () {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\n/* harmony default export */ function attr(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname);\n }\n\n return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/window.js\n/* harmony default export */ function src_window(node) {\n return node.ownerDocument && node.ownerDocument.defaultView // node is a Node\n || node.document && node // node is a Window\n || node.defaultView; // node is a Document\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/style.js\n\n\nfunction styleRemove(name) {\n return function () {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function () {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority);\n };\n}\n\n/* harmony default export */ function style(name, value, priority) {\n return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name);\n}\nfunction styleValue(node, name) {\n return node.style.getPropertyValue(name) || src_window(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/property.js\nfunction propertyRemove(name) {\n return function () {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function () {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];else this[name] = v;\n };\n}\n\n/* harmony default export */ function property(name, value) {\n return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/classed.js\nfunction classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute("class") || "");\n}\n\nClassList.prototype = {\n add: function add(name) {\n var i = this._names.indexOf(name);\n\n if (i < 0) {\n this._names.push(name);\n\n this._node.setAttribute("class", this._names.join(" "));\n }\n },\n remove: function remove(name) {\n var i = this._names.indexOf(name);\n\n if (i >= 0) {\n this._names.splice(i, 1);\n\n this._node.setAttribute("class", this._names.join(" "));\n }\n },\n contains: function contains(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node),\n i = -1,\n n = names.length;\n\n while (++i < n) {\n list.add(names[i]);\n }\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node),\n i = -1,\n n = names.length;\n\n while (++i < n) {\n list.remove(names[i]);\n }\n}\n\nfunction classedTrue(names) {\n return function () {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function () {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function () {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\n/* harmony default export */ function classed(name, value) {\n var names = classArray(name + "");\n\n if (arguments.length < 2) {\n var list = classList(this.node()),\n i = -1,\n n = names.length;\n\n while (++i < n) {\n if (!list.contains(names[i])) return false;\n }\n\n return true;\n }\n\n return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/text.js\nfunction textRemove() {\n this.textContent = "";\n}\n\nfunction textConstant(value) {\n return function () {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function () {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? "" : v;\n };\n}\n\n/* harmony default export */ function selection_text(value) {\n return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/html.js\nfunction htmlRemove() {\n this.innerHTML = "";\n}\n\nfunction htmlConstant(value) {\n return function () {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function () {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? "" : v;\n };\n}\n\n/* harmony default export */ function html(value) {\n return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/raise.js\nfunction raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\n/* harmony default export */ function selection_raise() {\n return this.each(raise);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/lower.js\nfunction lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\n/* harmony default export */ function selection_lower() {\n return this.each(lower);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/creator.js\n\n\n\nfunction creatorInherit(name) {\n return function () {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function () {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\n/* harmony default export */ function creator(name) {\n var fullname = namespace(name);\n return (fullname.local ? creatorFixed : creatorInherit)(fullname);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/append.js\n\n/* harmony default export */ function append(name) {\n var create = typeof name === "function" ? name : creator(name);\n return this.select(function () {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/insert.js\n\n\n\nfunction constantNull() {\n return null;\n}\n\n/* harmony default export */ function insert(name, before) {\n var create = typeof name === "function" ? name : creator(name),\n select = before == null ? constantNull : typeof before === "function" ? before : selector(before);\n return this.select(function () {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/remove.js\nfunction remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\n/* harmony default export */ function selection_remove() {\n return this.each(remove);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/clone.js\nfunction selection_cloneShallow() {\n var clone = this.cloneNode(false),\n parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true),\n parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\n/* harmony default export */ function clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/datum.js\n/* harmony default export */ function selection_datum(value) {\n return arguments.length ? this.property("__data__", value) : this.node().__data__;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/on.js\nfunction contextListener(listener) {\n return function (event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function (t) {\n var name = "",\n i = t.indexOf(".");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {\n type: t,\n name: name\n };\n });\n}\n\nfunction onRemove(typename) {\n return function () {\n var on = this.__on;\n if (!on) return;\n\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n\n if (++i) on.length = i;else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function () {\n var on = this.__on,\n o,\n listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {\n type: typename.type,\n name: typename.name,\n value: value,\n listener: listener,\n options: options\n };\n if (!on) this.__on = [o];else on.push(o);\n };\n}\n\n/* harmony default export */ function on(typename, value, options) {\n var typenames = parseTypenames(typename + ""),\n i,\n n = typenames.length,\n t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n\n for (i = 0; i < n; ++i) {\n this.each(on(typenames[i], value, options));\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/dispatch.js\n\n\nfunction dispatchEvent(node, type, params) {\n var window = src_window(node),\n event = window.CustomEvent;\n\n if (typeof event === "function") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent("Event");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function () {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function () {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\n/* harmony default export */ function selection_dispatch(type, params) {\n return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/iterator.js\nvar iterator_marked = /*#__PURE__*/regeneratorRuntime.mark(iterator_callee);\n\nfunction iterator_callee() {\n var groups, j, m, group, i, n, node;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n groups = this._groups, j = 0, m = groups.length;\n\n case 1:\n if (!(j < m)) {\n _context.next = 13;\n break;\n }\n\n group = groups[j], i = 0, n = group.length;\n\n case 3:\n if (!(i < n)) {\n _context.next = 10;\n break;\n }\n\n if (!(node = group[i])) {\n _context.next = 7;\n break;\n }\n\n _context.next = 7;\n return node;\n\n case 7:\n ++i;\n _context.next = 3;\n break;\n\n case 10:\n ++j;\n _context.next = 1;\n break;\n\n case 13:\n case "end":\n return _context.stop();\n }\n }\n }, iterator_marked, this);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/index.js\nfunction selection_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar root = [null];\nfunction Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = selection_defineProperty({\n constructor: Selection,\n select: selection_select,\n selectAll: selectAll,\n selectChild: selectChild,\n selectChildren: selectChildren,\n filter: selection_filter,\n data: data,\n enter: enter,\n exit: exit,\n join: join,\n merge: merge,\n selection: selection_selection,\n order: order,\n sort: selection_sort,\n call: call,\n nodes: nodes,\n node: node,\n size: size,\n empty: selection_empty,\n each: selection_each,\n attr: attr,\n style: style,\n property: property,\n classed: classed,\n text: selection_text,\n html: html,\n raise: selection_raise,\n lower: selection_lower,\n append: append,\n insert: insert,\n remove: selection_remove,\n clone: clone,\n datum: selection_datum,\n on: on,\n dispatch: selection_dispatch\n}, Symbol.iterator, iterator_callee);\n/* harmony default export */ const src_selection = (selection);\n;// CONCATENATED MODULE: ./node_modules/d3-dispatch/src/dispatch.js\nvar noop = {\n value: function value() {}\n};\n\nfunction dispatch_dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + "") || t in _ || /[\\s.]/.test(t)) throw new Error("illegal type: " + t);\n _[t] = [];\n }\n\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction dispatch_parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function (t) {\n var name = "",\n i = t.indexOf(".");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);\n return {\n type: t,\n name: name\n };\n });\n}\n\nDispatch.prototype = dispatch_dispatch.prototype = {\n constructor: Dispatch,\n on: function on(typename, callback) {\n var _ = this._,\n T = dispatch_parseTypenames(typename + "", _),\n t,\n i = -1,\n n = T.length; // If no callback was specified, return the callback of the given type and name.\n\n if (arguments.length < 2) {\n while (++i < n) {\n if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n }\n\n return;\n } // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n\n\n if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);\n\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);else if (callback == null) for (t in _) {\n _[t] = set(_[t], typename.name, null);\n }\n }\n\n return this;\n },\n copy: function copy() {\n var copy = {},\n _ = this._;\n\n for (var t in _) {\n copy[t] = _[t].slice();\n }\n\n return new Dispatch(copy);\n },\n call: function call(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) {\n args[i] = arguments[i + 2];\n }\n if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);\n\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) {\n t[i].value.apply(that, args);\n }\n },\n apply: function apply(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);\n\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) {\n t[i].value.apply(that, args);\n }\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n\n if (callback != null) type.push({\n name: name,\n value: callback\n });\n return type;\n}\n\n/* harmony default export */ const src_dispatch = (dispatch_dispatch);\n;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timer.js\nfunction timer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { timer_typeof = function _typeof(obj) { return typeof obj; }; } else { timer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return timer_typeof(obj); }\n\nvar timer_frame = 0,\n // is an animation frame pending?\ntimeout = 0,\n // is a timeout pending?\ninterval = 0,\n // are any timers active?\npokeDelay = 1000,\n // how frequently we check for clock skew\ntaskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = (typeof performance === "undefined" ? "undefined" : timer_typeof(performance)) === "object" && performance.now ? performance : Date,\n setFrame = (typeof window === "undefined" ? "undefined" : timer_typeof(window)) === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function (f) {\n setTimeout(f, 17);\n};\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call = this._time = this._next = null;\n}\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function restart(callback, delay, time) {\n if (typeof callback !== "function") throw new TypeError("callback is not a function");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;else taskHead = this;\n taskTail = this;\n }\n\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function stop() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\nfunction timer(callback, delay, time) {\n var t = new Timer();\n t.restart(callback, delay, time);\n return t;\n}\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n\n ++timer_frame; // Pretend we’ve set an alarm, if we haven’t already.\n\n var t = taskHead,\n e;\n\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n\n --timer_frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n timer_frame = timeout = 0;\n\n try {\n timerFlush();\n } finally {\n timer_frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(),\n delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0,\n t1 = taskHead,\n t2,\n time = Infinity;\n\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (timer_frame) return; // Soonest alarm already set, or will be.\n\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n timer_frame = 1, setFrame(wake);\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timeout.js\n\n/* harmony default export */ function src_timeout(callback, delay, time) {\n var t = new Timer();\n delay = delay == null ? 0 : +delay;\n t.restart(function (elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/schedule.js\n\n\nvar emptyOn = src_dispatch("start", "end", "cancel", "interrupt");\nvar emptyTween = [];\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n/* harmony default export */ function schedule(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index,\n // For context during callback.\n group: group,\n // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\nfunction init(node, id) {\n var schedule = schedule_get(node, id);\n if (schedule.state > CREATED) throw new Error("too late; already scheduled");\n return schedule;\n}\nfunction schedule_set(node, id) {\n var schedule = schedule_get(node, id);\n if (schedule.state > STARTED) throw new Error("too late; already running");\n return schedule;\n}\nfunction schedule_get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween; // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time); // If the elapsed delay is less than our first sleep, start immediately.\n\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o; // If the state is not SCHEDULED, then we previously errored on start.\n\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue; // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n\n if (o.state === STARTED) return src_timeout(start); // Interrupt the active transition, if any.\n\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call("interrupt", node, node.__data__, o.index, o.group);\n delete schedules[i];\n } // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call("cancel", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n } // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n\n\n src_timeout(function () {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n }); // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n\n self.state = STARTING;\n self.on.call("start", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n\n self.state = STARTED; // Initialize the tween, deleting null tween.\n\n tween = new Array(n = self.tween.length);\n\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n } // Dispatch the end event.\n\n\n if (self.state === ENDING) {\n self.on.call("end", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n\n for (var i in schedules) {\n return;\n } // eslint-disable-line no-unused-vars\n\n\n delete node.__transition;\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/interrupt.js\n\n/* harmony default export */ function src_interrupt(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n if (!schedules) return;\n name = name == null ? null : name + "";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) {\n empty = false;\n continue;\n }\n\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/interrupt.js\n\n/* harmony default export */ function selection_interrupt(name) {\n return this.each(function () {\n src_interrupt(this, name);\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/number.js\n/* harmony default export */ function src_number(a, b) {\n return a = +a, b = +b, function (t) {\n return a * (1 - t) + b * t;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/decompose.js\nvar degrees = 180 / Math.PI;\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n/* harmony default export */ function decompose(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/parse.js\n\nvar svgNode;\n/* eslint-disable no-undef */\n\nfunction parseCss(value) {\n var m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\nfunction parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");\n svgNode.setAttribute("transform", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/index.js\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n function pop(s) {\n return s.length ? s.pop() + " " : "";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push("translate(", null, pxComma, null, pxParen);\n q.push({\n i: i - 4,\n x: src_number(xa, xb)\n }, {\n i: i - 2,\n x: src_number(ya, yb)\n });\n } else if (xb || yb) {\n s.push("translate(" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360;else if (b - a > 180) a += 360; // shortest path\n\n q.push({\n i: s.push(pop(s) + "rotate(", null, degParen) - 2,\n x: src_number(a, b)\n });\n } else if (b) {\n s.push(pop(s) + "rotate(" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({\n i: s.push(pop(s) + "skewX(", null, degParen) - 2,\n x: src_number(a, b)\n });\n } else if (b) {\n s.push(pop(s) + "skewX(" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + "scale(", null, ",", null, ")");\n q.push({\n i: i - 4,\n x: src_number(xa, xb)\n }, {\n i: i - 2,\n x: src_number(ya, yb)\n });\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + "scale(" + xb + "," + yb + ")");\n }\n }\n\n return function (a, b) {\n var s = [],\n // string constants and placeholders\n q = []; // number interpolators\n\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n\n return function (t) {\n var i = -1,\n n = q.length,\n o;\n\n while (++i < n) {\n s[(o = q[i]).i] = o.x(t);\n }\n\n return s.join("");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/tween.js\n\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function () {\n var schedule = schedule_set(this, id),\n tween = schedule.tween; // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== "function") throw new Error();\n return function () {\n var schedule = schedule_set(this, id),\n tween = schedule.tween; // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n\n for (var t = {\n name: name,\n value: value\n }, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\n/* harmony default export */ function tween(name, value) {\n var id = this._id;\n name += "";\n\n if (arguments.length < 2) {\n var tween = schedule_get(this.node(), id).tween;\n\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\nfunction tweenValue(transition, name, value) {\n var id = transition._id;\n transition.each(function () {\n var schedule = schedule_set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n return function (node) {\n return schedule_get(node, id).value[name];\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/define.js\n/* harmony default export */ function src_define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n\n for (var key in definition) {\n prototype[key] = definition[key];\n }\n\n return prototype;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/color.js\n\nfunction Color() {}\nvar _darker = 0.7;\n\n\nvar _brighter = 1 / _darker;\n\n\nvar reI = "\\\\s*([+-]?\\\\d+)\\\\s*",\n reN = "\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*",\n reP = "\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp("^rgb\\\\(" + [reI, reI, reI] + "\\\\)$"),\n reRgbPercent = new RegExp("^rgb\\\\(" + [reP, reP, reP] + "\\\\)$"),\n reRgbaInteger = new RegExp("^rgba\\\\(" + [reI, reI, reI, reN] + "\\\\)$"),\n reRgbaPercent = new RegExp("^rgba\\\\(" + [reP, reP, reP, reN] + "\\\\)$"),\n reHslPercent = new RegExp("^hsl\\\\(" + [reN, reP, reP] + "\\\\)$"),\n reHslaPercent = new RegExp("^hsla\\\\(" + [reN, reP, reP, reN] + "\\\\)$");\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\nsrc_define(Color, color, {\n copy: function copy(channels) {\n return Object.assign(new this.constructor(), this, channels);\n },\n displayable: function displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex,\n // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + "").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb(m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, (m & 0xf) << 4 | m & 0xf, 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba(m >> 12 & 0xf | m >> 8 & 0xf0, m >> 8 & 0xf | m >> 4 & 0xf0, m >> 4 & 0xf | m & 0xf0, ((m & 0xf) << 4 | m & 0xf) / 0xff) // #f000\n : null // invalid hex\n ) : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb();\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\nfunction color_rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\nsrc_define(Rgb, color_rgb, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function rgb() {\n return this;\n },\n displayable: function displayable() {\n return -0.5 <= this.r && this.r < 255.5 && -0.5 <= this.g && this.g < 255.5 && -0.5 <= this.b && this.b < 255.5 && 0 <= this.opacity && this.opacity <= 1;\n },\n hex: rgb_formatHex,\n // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return "#" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity;\n a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? "rgb(" : "rgba(") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a === 1 ? ")" : ", " + a + ")");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? "0" : "") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;else if (l <= 0 || l >= 1) h = s = NaN;else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl();\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;else if (g === max) h = (b - r) / s + 2;else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n\n return new Hsl(h, s, l, o.opacity);\n}\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nsrc_define(Hsl, hsl, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity);\n },\n displayable: function displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && 0 <= this.l && this.l <= 1 && 0 <= this.opacity && this.opacity <= 1;\n },\n formatHsl: function formatHsl() {\n var a = this.opacity;\n a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? "hsl(" : "hsla(") + (this.h || 0) + ", " + (this.s || 0) * 100 + "%, " + (this.l || 0) * 100 + "%" + (a === 1 ? ")" : ", " + a + ")");\n }\n}));\n/* From FvD 13.37, CSS Color Module Level 3 */\n\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/basis.js\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1,\n t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6;\n}\n/* harmony default export */ function src_basis(values) {\n var n = values.length - 1;\n return function (t) {\n var i = t <= 0 ? t = 0 : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/basisClosed.js\n\n/* harmony default export */ function basisClosed(values) {\n var n = values.length;\n return function (t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/constant.js\n/* harmony default export */ const d3_interpolate_src_constant = (function (x) {\n return function () {\n return x;\n };\n});\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/color.js\n\n\nfunction linear(a, d) {\n return function (t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function (t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : d3_interpolate_src_constant(isNaN(a) ? b : a);\n}\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function (a, b) {\n return b - a ? exponential(a, b, y) : d3_interpolate_src_constant(isNaN(a) ? b : a);\n };\n}\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : d3_interpolate_src_constant(isNaN(a) ? b : a);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/rgb.js\n\n\n\n\n/* harmony default export */ const rgb = ((function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = color_rgb(start)).r, (end = color_rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n rgb.gamma = rgbGamma;\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function (colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i,\n color;\n\n for (i = 0; i < n; ++i) {\n color = color_rgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function (t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + "";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(src_basis);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/string.js\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, "g");\n\nfunction zero(b) {\n return function () {\n return b;\n };\n}\n\nfunction one(b) {\n return function (t) {\n return b(t) + "";\n };\n}\n\n/* harmony default export */ function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0,\n // scan index for next number in b\n am,\n // current match in a\n bm,\n // current match in b\n bs,\n // string preceding current number in b, if any\n i = -1,\n // index in s\n s = [],\n // string constants and placeholders\n q = []; // number interpolators\n // Coerce inputs to strings.\n\n a = a + "", b = b + ""; // Interpolate pairs of numbers in a & b.\n\n while ((am = reA.exec(a)) && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) {\n // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n if ((am = am[0]) === (bm = bm[0])) {\n // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else {\n // interpolate non-matching numbers\n s[++i] = null;\n q.push({\n i: i,\n x: src_number(am, bm)\n });\n }\n\n bi = reB.lastIndex;\n } // Add remains of b.\n\n\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n } // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n\n\n return s.length < 2 ? q[0] ? one(q[0].x) : zero(b) : (b = q.length, function (t) {\n for (var i = 0, o; i < b; ++i) {\n s[(o = q[i]).i] = o.x(t);\n }\n\n return s.join("");\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/interpolate.js\n\n\n/* harmony default export */ function transition_interpolate(a, b) {\n var c;\n return (typeof b === "number" ? src_number : b instanceof color ? rgb : (c = color(b)) ? (b = c, rgb) : string)(a, b);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attr.js\n\n\n\n\n\nfunction attr_attrRemove(name) {\n return function () {\n this.removeAttribute(name);\n };\n}\n\nfunction attr_attrRemoveNS(fullname) {\n return function () {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attr_attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function () {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attr_attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function () {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attr_attrFunction(name, interpolate, value) {\n var string00, string10, interpolate0;\n return function () {\n var string0,\n value1 = value(this),\n string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + "";\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attr_attrFunctionNS(fullname, interpolate, value) {\n var string00, string10, interpolate0;\n return function () {\n var string0,\n value1 = value(this),\n string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + "";\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\n/* harmony default export */ function transition_attr(name, value) {\n var fullname = namespace(name),\n i = fullname === "transform" ? interpolateTransformSvg : transition_interpolate;\n return this.attrTween(name, typeof value === "function" ? (fullname.local ? attr_attrFunctionNS : attr_attrFunction)(fullname, i, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attr_attrRemoveNS : attr_attrRemove)(fullname) : (fullname.local ? attr_attrConstantNS : attr_attrConstant)(fullname, i, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attrTween.js\n\n\nfunction attrInterpolate(name, i) {\n return function (t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function (t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_attrTween(name, value) {\n var key = "attr." + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error();\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/delay.js\n\n\nfunction delayFunction(id, value) {\n return function () {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function () {\n init(this, id).delay = value;\n };\n}\n\n/* harmony default export */ function delay(value) {\n var id = this._id;\n return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id, value)) : schedule_get(this.node(), id).delay;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/duration.js\n\n\nfunction durationFunction(id, value) {\n return function () {\n schedule_set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function () {\n schedule_set(this, id).duration = value;\n };\n}\n\n/* harmony default export */ function duration(value) {\n var id = this._id;\n return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id, value)) : schedule_get(this.node(), id).duration;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/ease.js\n\n\nfunction easeConstant(id, value) {\n if (typeof value !== "function") throw new Error();\n return function () {\n schedule_set(this, id).ease = value;\n };\n}\n\n/* harmony default export */ function ease(value) {\n var id = this._id;\n return arguments.length ? this.each(easeConstant(id, value)) : schedule_get(this.node(), id).ease;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/easeVarying.js\n\n\nfunction easeVarying(id, value) {\n return function () {\n var v = value.apply(this, arguments);\n if (typeof v !== "function") throw new Error();\n schedule_set(this, id).ease = v;\n };\n}\n\n/* harmony default export */ function transition_easeVarying(value) {\n if (typeof value !== "function") throw new Error();\n return this.each(easeVarying(this._id, value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/filter.js\n\n\n/* harmony default export */ function transition_filter(match) {\n if (typeof match !== "function") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/merge.js\n\n/* harmony default export */ function transition_merge(transition) {\n if (transition._id !== this._id) throw new Error();\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/on.js\n\n\nfunction start(name) {\n return (name + "").trim().split(/^|\\s+/).every(function (t) {\n var i = t.indexOf(".");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === "start";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0,\n on1,\n sit = start(name) ? init : schedule_set;\n return function () {\n var schedule = sit(this, id),\n on = schedule.on; // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function transition_on(name, listener) {\n var id = this._id;\n return arguments.length < 2 ? schedule_get(this.node(), id).on.on(name) : this.each(onFunction(id, name, listener));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/remove.js\nfunction removeFunction(id) {\n return function () {\n var parent = this.parentNode;\n\n for (var i in this.__transition) {\n if (+i !== id) return;\n }\n\n if (parent) parent.removeChild(this);\n };\n}\n\n/* harmony default export */ function transition_remove() {\n return this.on("end.remove", removeFunction(this._id));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/select.js\n\n\n\n/* harmony default export */ function transition_select(select) {\n var name = this._name,\n id = this._id;\n if (typeof select !== "function") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if ("__data__" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, schedule_get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selectAll.js\n\n\n\n/* harmony default export */ function transition_selectAll(select) {\n var name = this._name,\n id = this._id;\n if (typeof select !== "function") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = schedule_get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selection.js\n\nvar selection_Selection = src_selection.prototype.constructor;\n/* harmony default export */ function transition_selection() {\n return new selection_Selection(this._groups, this._parents);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/style.js\n\n\n\n\n\n\nfunction styleNull(name, interpolate) {\n var string00, string10, interpolate0;\n return function () {\n var string0 = styleValue(this, name),\n string1 = (this.style.removeProperty(name), styleValue(this, name));\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction style_styleRemove(name) {\n return function () {\n this.style.removeProperty(name);\n };\n}\n\nfunction style_styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + "",\n interpolate0;\n return function () {\n var string0 = styleValue(this, name);\n return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction style_styleFunction(name, interpolate, value) {\n var string00, string10, interpolate0;\n return function () {\n var string0 = styleValue(this, name),\n value1 = value(this),\n string1 = value1 + "";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));\n return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0,\n on1,\n listener0,\n key = "style." + name,\n event = "end." + key,\n remove;\n return function () {\n var schedule = schedule_set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = style_styleRemove(name)) : undefined; // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n schedule.on = on1;\n };\n}\n\n/* harmony default export */ function transition_style(name, value, priority) {\n var i = (name += "") === "transform" ? interpolateTransformCss : transition_interpolate;\n return value == null ? this.styleTween(name, styleNull(name, i)).on("end.style." + name, style_styleRemove(name)) : typeof value === "function" ? this.styleTween(name, style_styleFunction(name, i, tweenValue(this, "style." + name, value))).each(styleMaybeRemove(this._id, name)) : this.styleTween(name, style_styleConstant(name, i, value), priority).on("end.style." + name, null);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/styleTween.js\nfunction styleInterpolate(name, i, priority) {\n return function (t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_styleTween(name, value, priority) {\n var key = "style." + (name += "");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error();\n return this.tween(key, styleTween(name, value, priority == null ? "" : priority));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/text.js\n\n\nfunction text_textConstant(value) {\n return function () {\n this.textContent = value;\n };\n}\n\nfunction text_textFunction(value) {\n return function () {\n var value1 = value(this);\n this.textContent = value1 == null ? "" : value1;\n };\n}\n\n/* harmony default export */ function transition_text(value) {\n return this.tween("text", typeof value === "function" ? text_textFunction(tweenValue(this, "text", value)) : text_textConstant(value == null ? "" : value + ""));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/textTween.js\nfunction textInterpolate(i) {\n return function (t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n\n tween._value = value;\n return tween;\n}\n\n/* harmony default export */ function transition_textTween(value) {\n var key = "text";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== "function") throw new Error();\n return this.tween(key, textTween(value));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/transition.js\n\n\n/* harmony default export */ function transition() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = schedule_get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/end.js\n\n/* harmony default export */ function end() {\n var on0,\n on1,\n that = this,\n id = that._id,\n size = that.size();\n return new Promise(function (resolve, reject) {\n var cancel = {\n value: reject\n },\n end = {\n value: function value() {\n if (--size === 0) resolve();\n }\n };\n that.each(function () {\n var schedule = schedule_set(this, id),\n on = schedule.on; // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n\n if (on !== on0) {\n on1 = (on0 = on).copy();\n\n on1._.cancel.push(cancel);\n\n on1._.interrupt.push(cancel);\n\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n }); // The selection was empty, resolve end immediately\n\n if (size === 0) resolve();\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/index.js\nfunction transition_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar id = 0;\nfunction Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\nfunction transition_transition(name) {\n return src_selection().transition(name);\n}\nfunction newId() {\n return ++id;\n}\nvar selection_prototype = src_selection.prototype;\nTransition.prototype = transition_transition.prototype = transition_defineProperty({\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: tween,\n delay: delay,\n duration: duration,\n ease: ease,\n easeVarying: transition_easeVarying,\n end: end\n}, Symbol.iterator, selection_prototype[Symbol.iterator]);\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/cubic.js\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/transition.js\n\n\n\n\nvar defaultTiming = {\n time: null,\n // Set on use.\n delay: 0,\n duration: 250,\n ease: cubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error("transition ".concat(id, " not found"));\n }\n }\n\n return timing;\n}\n\n/* harmony default export */ function selection_transition(name) {\n var id, timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/index.js\n\n\n\nsrc_selection.prototype.interrupt = selection_interrupt;\nsrc_selection.prototype.transition = selection_transition;\n;// CONCATENATED MODULE: ./node_modules/d3-transition/src/index.js\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/brush.js\nfunction brush_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = brush_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }\n\nfunction brush_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return brush_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return brush_arrayLikeToArray(o, minLen); }\n\nfunction brush_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\n\n\n\n\n\nvar MODE_DRAG = {\n name: "drag"\n},\n MODE_SPACE = {\n name: "space"\n},\n MODE_HANDLE = {\n name: "handle"\n},\n MODE_CENTER = {\n name: "center"\n};\nvar abs = Math.abs,\n max = Math.max,\n min = Math.min;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: "x",\n handles: ["w", "e"].map(type),\n input: function input(x, e) {\n return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]];\n },\n output: function output(xy) {\n return xy && [xy[0][0], xy[1][0]];\n }\n};\nvar Y = {\n name: "y",\n handles: ["n", "s"].map(type),\n input: function input(y, e) {\n return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]];\n },\n output: function output(xy) {\n return xy && [xy[0][1], xy[1][1]];\n }\n};\nvar XY = {\n name: "xy",\n handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),\n input: function input(xy) {\n return xy == null ? null : number2(xy);\n },\n output: function output(xy) {\n return xy;\n }\n};\nvar cursors = {\n overlay: "crosshair",\n selection: "move",\n n: "ns-resize",\n e: "ew-resize",\n s: "ns-resize",\n w: "ew-resize",\n nw: "nwse-resize",\n ne: "nesw-resize",\n se: "nwse-resize",\n sw: "nesw-resize"\n};\nvar flipX = {\n e: "w",\n w: "e",\n nw: "ne",\n ne: "nw",\n se: "sw",\n sw: "se"\n};\nvar flipY = {\n n: "s",\n s: "n",\n nw: "sw",\n ne: "se",\n se: "ne",\n sw: "nw"\n};\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {\n type: t\n };\n} // Ignore right-click, since that should open the context menu.\n\n\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n\n if (svg.hasAttribute("viewBox")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || "ontouchstart" in this;\n} // Like d3.local, but with the name “__brush” rather than auto-generated.\n\n\nfunction local(node) {\n while (!node.__brush) {\n if (!(node = node.parentNode)) return;\n }\n\n return node.__brush;\n}\n\nfunction brush_empty(extent) {\n return extent[0][0] === extent[1][0] || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\nfunction brushX() {\n return brush_brush(X);\n}\nfunction brushY() {\n return brush_brush(Y);\n}\n/* harmony default export */ function brush() {\n return brush_brush(XY);\n}\n\nfunction brush_brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch("start", "brush", "end"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group.property("__brush", initialize).selectAll(".overlay").data([type("overlay")]);\n overlay.enter().append("rect").attr("class", "overlay").attr("pointer-events", "all").attr("cursor", cursors.overlay).merge(overlay).each(function () {\n var extent = local(this).extent;\n select(this).attr("x", extent[0][0]).attr("y", extent[0][1]).attr("width", extent[1][0] - extent[0][0]).attr("height", extent[1][1] - extent[0][1]);\n });\n group.selectAll(".selection").data([type("selection")]).enter().append("rect").attr("class", "selection").attr("cursor", cursors.selection).attr("fill", "#777").attr("fill-opacity", 0.3).attr("stroke", "#fff").attr("shape-rendering", "crispEdges");\n var handle = group.selectAll(".handle").data(dim.handles, function (d) {\n return d.type;\n });\n handle.exit().remove();\n handle.enter().append("rect").attr("class", function (d) {\n return "handle handle--" + d.type;\n }).attr("cursor", function (d) {\n return cursors[d.type];\n });\n group.each(redraw).attr("fill", "none").attr("pointer-events", "all").on("mousedown.brush", started).filter(touchable).on("touchstart.brush", started).on("touchmove.brush", touchmoved).on("touchend.brush touchcancel.brush", touchended).style("touch-action", "none").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n brush.move = function (group, selection, event) {\n if (group.tween) {\n group.on("start.brush", function (event) {\n emitter(this, arguments).beforestart().start(event);\n }).on("interrupt.brush end.brush", function (event) {\n emitter(this, arguments).end(event);\n }).tween("brush", function () {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group.each(function () {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function (group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(".selection").style("display", null).attr("x", selection[0][0]).attr("y", selection[0][1]).attr("width", selection[1][0] - selection[0][0]).attr("height", selection[1][1] - selection[0][1]);\n group.selectAll(".handle").style("display", null).attr("x", function (d) {\n return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2;\n }).attr("y", function (d) {\n return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2;\n }).attr("width", function (d) {\n return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize;\n }).attr("height", function (d) {\n return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize;\n });\n } else {\n group.selectAll(".selection,.handle").style("display", "none").attr("x", null).attr("y", null).attr("width", null).attr("height", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function beforestart() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function start(event, mode) {\n if (this.starting) this.starting = false, this.emit("start", event, mode);else this.emit("brush", event);\n return this;\n },\n brush: function brush(event, mode) {\n this.emit("brush", event, mode);\n return this;\n },\n end: function end(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit("end", event, mode);\n return this;\n },\n emit: function emit(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(type, this.that, new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode: mode,\n dispatch: listeners\n }), d);\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : keys && event.altKey ? MODE_CENTER : MODE_HANDLE,\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0],\n w0,\n w1,\n N = extent[0][1],\n n0,\n n1,\n E = extent[1][0],\n e0,\n e1,\n S = extent[1][1],\n s0,\n s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], function (t) {\n var i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === "overlay") {\n if (selection) moving = true;\n var pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[w0 = dim === Y ? W : min(pts[0][0], pts[1][0]), n0 = dim === X ? N : min(pts[0][1], pts[1][1])], [e0 = dim === Y ? E : max(pts[0][0], pts[1][0]), s0 = dim === X ? S : max(pts[0][1], pts[1][1])]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n var group = select(that).attr("pointer-events", "none");\n var overlay = group.selectAll(".overlay").attr("cursor", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view).on("mousemove.brush", moved, true).on("mouseup.brush", ended, true);\n if (keys) view.on("keydown.brush", keydowned, true).on("keyup.brush", keyupped, true);\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n var _iterator = brush_createForOfIteratorHelper(event.changedTouches || [event]),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var p = _step.value;\n\n var _iterator3 = brush_createForOfIteratorHelper(points),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var d = _step3.value;\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (shifting && !lockX && !lockY && points.length === 1) {\n var point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1])) lockY = true;else lockX = true;\n }\n\n var _iterator2 = brush_createForOfIteratorHelper(points),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _point = _step2.value;\n if (_point.cur) _point[0] = _point.cur[0], _point[1] = _point.cur[1];\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n var point = points[0],\n point0 = point.point0;\n var t;\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG:\n {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n\n case MODE_HANDLE:\n {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n\n break;\n }\n\n case MODE_CENTER:\n {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1 || selection[0][1] !== n1 || selection[1][0] !== e1 || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function () {\n touchending = null;\n }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);\n }\n\n group.attr("pointer-events", "all");\n overlay.attr("cursor", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n\n if (brush_empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16:\n {\n // SHIFT\n shifting = signX && signY;\n break;\n }\n\n case 18:\n {\n // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n\n break;\n }\n\n case 32:\n {\n // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx;else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy;else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr("cursor", cursors.selection);\n move(event);\n }\n\n break;\n }\n\n default:\n return;\n }\n\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16:\n {\n // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n\n break;\n }\n\n case 18:\n {\n // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1;else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1;else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n\n break;\n }\n\n case 32:\n {\n // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1;else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1;else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n\n overlay.attr("cursor", cursors[type]);\n move(event);\n }\n\n break;\n }\n\n default:\n return;\n }\n\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {\n selection: null\n };\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function (_) {\n return arguments.length ? (extent = typeof _ === "function" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function (_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function (_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function (_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function (_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function () {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-brush/src/index.js\n\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/json.js\nfunction responseJson(response) {\n if (!response.ok) throw new Error(response.status + " " + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\n/* harmony default export */ function json(input, init) {\n return fetch(input, init).then(responseJson);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/index.js\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/tree.js\n\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n} // function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\n\n\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n} // This function works analogously to nextLeft.\n\n\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n} // Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\n\n\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n} // All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\n\n\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n} // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\n\n\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n\n this.a = this; // ancestor\n\n this.z = 0; // prelim\n\n this.m = 0; // mod\n\n this.c = 0; // change\n\n this.s = 0; // shift\n\n this.t = null; // thread\n\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n} // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm\n\n\n/* harmony default export */ function tree() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root); // Compute the layout using Buchheim et al.’s algorithm.\n\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk); // If a fixed node size is specified, scale x and y.\n\n if (nodeSize) root.eachBefore(sizeNode); // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function (node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function (node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return root;\n } // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n\n\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n } // Computes all real x-coordinates by summing up the modifiers recursively.\n\n\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n } // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n\n\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function (x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function (x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : nodeSize ? null : [dx, dy];\n };\n\n tree.nodeSize = function (x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : nodeSize ? [dx, dy] : null;\n };\n\n return tree;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-hierarchy/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/array.js\n\n\n/* harmony default export */ function src_array(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) {\n x[i] = value(a[i], b[i]);\n }\n\n for (; i < nb; ++i) {\n c[i] = b[i];\n }\n\n return function (t) {\n for (i = 0; i < na; ++i) {\n c[i] = x[i](t);\n }\n\n return c;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/date.js\n/* harmony default export */ function date(a, b) {\n var d = new Date();\n return a = +a, b = +b, function (t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/object.js\nfunction object_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { object_typeof = function _typeof(obj) { return typeof obj; }; } else { object_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return object_typeof(obj); }\n\n\n/* harmony default export */ function object(a, b) {\n var i = {},\n c = {},\n k;\n if (a === null || object_typeof(a) !== "object") a = {};\n if (b === null || object_typeof(b) !== "object") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function (t) {\n for (k in i) {\n c[k] = i[k](t);\n }\n\n return c;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/numberArray.js\n/* harmony default export */ function src_numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function (t) {\n for (i = 0; i < n; ++i) {\n c[i] = a[i] * (1 - t) + b[i] * t;\n }\n\n return c;\n };\n}\nfunction numberArray_isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/value.js\nfunction value_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { value_typeof = function _typeof(obj) { return typeof obj; }; } else { value_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return value_typeof(obj); }\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ function value(a, b) {\n var t = value_typeof(b),\n c;\n\n return b == null || t === "boolean" ? d3_interpolate_src_constant(b) : (t === "number" ? src_number : t === "string" ? (c = color(b)) ? (b = c, rgb) : string : b instanceof color ? rgb : b instanceof Date ? date : numberArray_isNumberArray(b) ? src_numberArray : Array.isArray(b) ? genericArray : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object : src_number)(a, b);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/round.js\n/* harmony default export */ function round(a, b) {\n return a = +a, b = +b, function (t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/continuous.js\n\n\n\n\nvar unit = (/* unused pure expression or super */ null && ([0, 1]));\nfunction continuous_identity(x) {\n return x;\n}\n\nfunction continuous_normalize(a, b) {\n return (b -= a = +a) ? function (x) {\n return (x - a) / b;\n } : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function (x) {\n return Math.max(a, Math.min(b, x));\n };\n} // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n\n\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0],\n d1 = domain[1],\n r0 = range[0],\n r1 = range[1];\n if (d1 < d0) d0 = continuous_normalize(d1, d0), r0 = interpolate(r1, r0);else d0 = continuous_normalize(d0, d1), r0 = interpolate(r0, r1);\n return function (x) {\n return r0(d0(x));\n };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1; // Reverse descending domains.\n\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = continuous_normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function (x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction continuous_copy(source, target) {\n return target.domain(source.domain()).range(source.range()).interpolate(source.interpolate()).clamp(source.clamp()).unknown(source.unknown());\n}\nfunction transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = continuous_identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== continuous_identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function (y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function (_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function (_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function (_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function (_) {\n return arguments.length ? (clamp = _ ? true : continuous_identity, rescale()) : clamp !== continuous_identity;\n };\n\n scale.interpolate = function (_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function (t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\nfunction continuous_continuous() {\n return transformer()(continuous_identity, continuous_identity);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/init.js\nfunction init_initRange(domain, range) {\n switch (arguments.length) {\n case 0:\n break;\n\n case 1:\n this.range(domain);\n break;\n\n default:\n this.range(range).domain(domain);\n break;\n }\n\n return this;\n}\nfunction init_initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0:\n break;\n\n case 1:\n {\n if (typeof domain === "function") this.interpolator(domain);else this.range(domain);\n break;\n }\n\n default:\n {\n this.domain(domain);\n if (typeof interpolator === "function") this.interpolator(interpolator);else this.range(interpolator);\n break;\n }\n }\n\n return this;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-array/src/ticks.js\nvar e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\nfunction ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n var r0 = Math.round(start / step),\n r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n\n while (++i < n) {\n ticks[i] = (r0 + i) * step;\n }\n } else {\n step = -step;\n\n var _r = Math.round(start * step),\n _r2 = Math.round(stop * step);\n\n if (_r / step < start) ++_r;\n if (_r2 / step > stop) --_r2;\n ticks = new Array(n = _r2 - _r + 1);\n\n while (++i < n) {\n ticks[i] = (_r + i) / step;\n }\n }\n\n if (reverse) ticks.reverse();\n return ticks;\n}\nfunction tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\nfunction tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;else if (error >= e5) step1 *= 5;else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatSpecifier.js\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\nfunction formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? " " : specifier.fill + "";\n this.align = specifier.align === undefined ? ">" : specifier.align + "";\n this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";\n this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? "" : specifier.type + "";\n}\n\nFormatSpecifier.prototype.toString = function () {\n return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (this.width === undefined ? "" : Math.max(1, this.width | 0)) + (this.comma ? "," : "") + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) + (this.trim ? "~" : "") + this.type;\n};\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatDecimal.js\n/* harmony default export */ function formatDecimal(x) {\n return Math.abs(x = Math.round(x)) >= 1e21 ? x.toLocaleString("en").replace(/,/g, "") : x.toString(10);\n} // Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns ["123", 0].\n\nfunction formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity\n\n var i,\n coefficient = x.slice(0, i); // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n\n return [coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1)];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/exponent.js\n\n/* harmony default export */ function exponent(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionPrefix.js\n\n/* harmony default export */ function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatGroup.js\n/* harmony default export */ function formatGroup(grouping, thousands) {\n return function (value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatNumerals.js\n/* harmony default export */ function formatNumerals(numerals) {\n return function (value) {\n return value.replace(/[0-9]/g, function (i) {\n return numerals[+i];\n });\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTrim.js\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n/* harmony default export */ function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case ".":\n i0 = i1 = i;\n break;\n\n case "0":\n if (i0 === 0) i0 = i;\n i1 = i;\n break;\n\n default:\n if (!+s[i]) break out;\n if (i0 > 0) i0 = 0;\n break;\n }\n }\n\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatPrefixAuto.js\n\nvar prefixExponent;\n/* harmony default export */ function formatPrefixAuto(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join("0") : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatRounded.js\n\n/* harmony default export */ function formatRounded(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + "";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join("0");\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTypes.js\n\n\n\n/* harmony default export */ const formatTypes = ({\n "%": function _(x, p) {\n return (x * 100).toFixed(p);\n },\n "b": function b(x) {\n return Math.round(x).toString(2);\n },\n "c": function c(x) {\n return x + "";\n },\n "d": formatDecimal,\n "e": function e(x, p) {\n return x.toExponential(p);\n },\n "f": function f(x, p) {\n return x.toFixed(p);\n },\n "g": function g(x, p) {\n return x.toPrecision(p);\n },\n "o": function o(x) {\n return Math.round(x).toString(8);\n },\n "p": function p(x, _p) {\n return formatRounded(x * 100, _p);\n },\n "r": formatRounded,\n "s": formatPrefixAuto,\n "X": function X(x) {\n return Math.round(x).toString(16).toUpperCase();\n },\n "x": function x(_x) {\n return Math.round(_x).toString(16);\n }\n});\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/identity.js\n/* harmony default export */ function src_identity(x) {\n return x;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/locale.js\n\n\n\n\n\n\n\n\nvar map = Array.prototype.map,\n prefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"];\n/* harmony default export */ function locale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? src_identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),\n currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",\n currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",\n decimal = locale.decimal === undefined ? "." : locale.decimal + "",\n numerals = locale.numerals === undefined ? src_identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? "%" : locale.percent + "",\n minus = locale.minus === undefined ? "−" : locale.minus + "",\n nan = locale.nan === undefined ? "NaN" : locale.nan + "";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type; // The "n" type is an alias for ",g".\n\n if (type === "n") comma = true, type = "g"; // The "" type, and any invalid type, is an alias for ".12~g".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g"; // If zero fill is specified, padding goes after sign and before digits.\n\n if (zero || fill === "0" && align === "=") zero = true, fill = "0", align = "="; // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n\n var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",\n suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type); // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n\n precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i,\n n,\n c;\n\n if (type === "c") {\n valueSuffix = formatType(value) + valueSuffix;\n value = "";\n } else {\n value = +value; // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n\n var valueNegative = value < 0 || 1 / value < 0; // Perform the initial formatting.\n\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision); // Trim insignificant zeros.\n\n if (trim) value = formatTrim(value); // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n\n if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; // Compute the prefix and suffix.\n\n valuePrefix = (valueNegative ? sign === "(" ? sign : minus : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;\n valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n\n if (maybeSuffix) {\n i = -1, n = value.length;\n\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n } // If the fill character is not "0", grouping is applied before padding.\n\n\n if (comma && !zero) value = group(value, Infinity); // Compute the padding.\n\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : ""; // If the fill character is "0", grouping is applied after padding.\n\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; // Reconstruct the final output based on the desired alignment.\n\n switch (align) {\n case "<":\n value = valuePrefix + value + valueSuffix + padding;\n break;\n\n case "=":\n value = valuePrefix + padding + value + valueSuffix;\n break;\n\n case "^":\n value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n break;\n\n default:\n value = padding + valuePrefix + value + valueSuffix;\n break;\n }\n\n return numerals(value);\n }\n\n format.toString = function () {\n return specifier + "";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function (value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/defaultLocale.js\n\nvar defaultLocale_locale;\nvar format;\nvar formatPrefix;\ndefaultLocale({\n thousands: ",",\n grouping: [3],\n currency: ["$", ""]\n});\nfunction defaultLocale(definition) {\n defaultLocale_locale = locale(definition);\n format = defaultLocale_locale.format;\n formatPrefix = defaultLocale_locale.formatPrefix;\n return defaultLocale_locale;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionRound.js\n\n/* harmony default export */ function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionFixed.js\n\n/* harmony default export */ function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/tickFormat.js\n\n\nfunction tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? ",f" : specifier);\n\n switch (specifier.type) {\n case "s":\n {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n\n case "":\n case "e":\n case "g":\n case "p":\n case "r":\n {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");\n break;\n }\n\n case "f":\n case "%":\n {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;\n break;\n }\n }\n\n return format(specifier);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/linear.js\n\n\n\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function (count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function (count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function (count) {\n if (count == null) count = 10;\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n\n if (step === prestep) {\n d[i0] = start;\n d[i1] = stop;\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\nfunction linear_linear() {\n var scale = continuous();\n\n scale.copy = function () {\n return copy(scale, linear_linear());\n };\n\n initRange.apply(scale, arguments);\n return linearish(scale);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/sequential.js\nfunction sequential_slicedToArray(arr, i) { return sequential_arrayWithHoles(arr) || sequential_iterableToArrayLimit(arr, i) || sequential_unsupportedIterableToArray(arr, i) || sequential_nonIterableRest(); }\n\nfunction sequential_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction sequential_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return sequential_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return sequential_arrayLikeToArray(o, minLen); }\n\nfunction sequential_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction sequential_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction sequential_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\n\n\n\nfunction sequential_transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = continuous_identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function (_) {\n var _ref, _ref2;\n\n return arguments.length ? ((_ref = _, _ref2 = sequential_slicedToArray(_ref, 2), x0 = _ref2[0], x1 = _ref2[1], _ref), t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function (_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function (_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function (_) {\n var _ref3, _ref4;\n\n var r0, r1;\n return arguments.length ? ((_ref3 = _, _ref4 = sequential_slicedToArray(_ref3, 2), r0 = _ref4[0], r1 = _ref4[1], _ref3), interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(value);\n scale.rangeRound = range(round);\n\n scale.unknown = function (_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function (t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction sequential_copy(source, target) {\n return target.domain(source.domain()).interpolator(source.interpolator()).clamp(source.clamp()).unknown(source.unknown());\n}\nfunction sequential() {\n var scale = linearish(sequential_transformer()(continuous_identity));\n\n scale.copy = function () {\n return sequential_copy(scale, sequential());\n };\n\n return init_initInterpolator.apply(scale, arguments);\n}\nfunction sequentialLog() {\n var scale = loggish(sequential_transformer()).domain([1, 10]);\n\n scale.copy = function () {\n return sequential_copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\nfunction sequentialSymlog() {\n var scale = symlogish(sequential_transformer());\n\n scale.copy = function () {\n return sequential_copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\nfunction sequentialPow() {\n var scale = powish(sequential_transformer());\n\n scale.copy = function () {\n return sequential_copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/math.js\nvar radians = Math.PI / 180;\nvar math_degrees = 180 / Math.PI;\n;// CONCATENATED MODULE: ./node_modules/d3-color/src/cubehelix.js\n\n\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)),\n // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * math_degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix_cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\nsrc_define(Cubehelix, cubehelix_cubehelix, extend(Color, {\n brighter: function brighter(k) {\n k = k == null ? _brighter : Math.pow(_brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function darker(k) {\n k = k == null ? _darker : Math.pow(_darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity);\n }\n}));\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/cubehelix.js\n\n\n\nfunction cubehelix(hue) {\n return function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = cubehelix_cubehelix(start)).h, (end = cubehelix_cubehelix(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function (t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + "";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n return cubehelix;\n }(1);\n}\n\n/* harmony default export */ const src_cubehelix = (cubehelix(hue));\nvar cubehelixLong = cubehelix(nogamma);\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js\n\n\nvar warm = cubehelixLong(cubehelix_cubehelix(-100, 0.75, 0.35), cubehelix_cubehelix(80, 1.50, 0.8));\nvar cool = cubehelixLong(cubehelix_cubehelix(260, 0.75, 0.35), cubehelix_cubehelix(80, 1.50, 0.8));\nvar c = cubehelix_cubehelix();\n/* harmony default export */ function rainbow(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + "";\n}\n;// CONCATENATED MODULE: ./node_modules/d3-scale-chromatic/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/select.js\n\n/* harmony default export */ function src_select(selector) {\n return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root);\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/create.js\n\n\n/* harmony default export */ function src_create(name) {\n return src_select(creator(name).call(document.documentElement));\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-path/src/path.js\nvar pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n\n this._ = "";\n}\n\nfunction path_path() {\n return new Path();\n}\n\nPath.prototype = path_path.prototype = {\n constructor: Path,\n moveTo: function moveTo(x, y) {\n this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);\n },\n closePath: function closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += "Z";\n }\n },\n lineTo: function lineTo(x, y) {\n this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n quadraticCurveTo: function quadraticCurveTo(x1, y1, x, y) {\n this._ += "Q" + +x1 + "," + +y1 + "," + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n bezierCurveTo: function bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._ += "C" + +x1 + "," + +y1 + "," + +x2 + "," + +y2 + "," + (this._x1 = +x) + "," + (this._y1 = +y);\n },\n arcTo: function arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01; // Is the radius negative? Error.\n\n if (r < 0) throw new Error("negative radius: " + r); // Is this path empty? Move to (x1,y1).\n\n if (this._x1 === null) {\n this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);\n } // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon)) ; // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);\n } // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21; // If the start tangent is not coincident with (x0,y0), line to.\n\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);\n }\n\n this._ += "A" + r + "," + r + ",0,0," + +(y01 * x20 > x01 * y20) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0; // Is the radius negative? Error.\n\n if (r < 0) throw new Error("negative radius: " + r); // Is this path empty? Move to (x0,y0).\n\n if (this._x1 === null) {\n this._ += "M" + x0 + "," + y0;\n } // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += "L" + x0 + "," + y0;\n } // Is this arc empty? We’re done.\n\n\n if (!r) return; // Does the angle go the wrong way? Flip the direction.\n\n if (da < 0) da = da % tau + tau; // Is this a complete circle? Draw two arcs to complete the circle.\n\n if (da > tauEpsilon) {\n this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);\n } // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += "A" + r + "," + r + ",0," + +(da >= pi) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function rect(x, y, w, h) {\n this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + +w + "v" + +h + "h" + -w + "Z";\n },\n toString: function toString() {\n return this._;\n }\n};\n/* harmony default export */ const src_path = (path_path);\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/array.js\nfunction array_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { array_typeof = function _typeof(obj) { return typeof obj; }; } else { array_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return array_typeof(obj); }\n\nvar slice = Array.prototype.slice;\n/* harmony default export */ function d3_shape_src_array(x) {\n return array_typeof(x) === "object" && "length" in x ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/constant.js\n/* harmony default export */ function d3_shape_src_constant(x) {\n return function constant() {\n return x;\n };\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/point.js\nfunction point_x(p) {\n return p[0];\n}\nfunction point_y(p) {\n return p[1];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/link/index.js\n\n\n\n\n\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link_link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = point_x,\n y = point_y,\n context = null;\n\n function link() {\n var buffer,\n argv = slice.call(arguments),\n s = source.apply(this, argv),\n t = target.apply(this, argv);\n if (!context) context = buffer = src_path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + "" || null;\n }\n\n link.source = function (_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function (_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function (_) {\n return arguments.length ? (x = typeof _ === "function" ? _ : d3_shape_src_constant(+_), link) : x;\n };\n\n link.y = function (_) {\n return arguments.length ? (y = typeof _ === "function" ? _ : d3_shape_src_constant(+_), link) : y;\n };\n\n link.context = function (_) {\n return arguments.length ? (context = _ == null ? null : _, link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nfunction linkHorizontal() {\n return link_link(curveHorizontal);\n}\nfunction linkVertical() {\n return link_link(curveVertical);\n}\nfunction linkRadial() {\n var l = link_link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-shape/src/index.js\n\n\n\n\n // Note: radialArea is deprecated!\n\n // Note: radialLine is deprecated!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/noevent.js\n// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nvar nonpassive = {\n passive: false\n};\nvar nonpassivecapture = {\n capture: true,\n passive: false\n};\nfunction noevent_nopropagation(event) {\n event.stopImmediatePropagation();\n}\n/* harmony default export */ function src_noevent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-drag/src/nodrag.js\n\n\n/* harmony default export */ function nodrag(view) {\n var root = view.document.documentElement,\n selection = src_select(view).on("dragstart.drag", src_noevent, nonpassivecapture);\n\n if ("onselectstart" in root) {\n selection.on("selectstart.drag", src_noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = "none";\n }\n}\nfunction yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = src_select(view).on("dragstart.drag", null);\n\n if (noclick) {\n selection.on("click.drag", src_noevent, nonpassivecapture);\n setTimeout(function () {\n selection.on("click.drag", null);\n }, 0);\n }\n\n if ("onselectstart" in root) {\n selection.on("selectstart.drag", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/zoom.js\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n/* harmony default export */ const src_zoom = ((function zoomRho(rho, rho2, rho4) {\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0],\n uy0 = p0[1],\n w0 = p0[2],\n ux1 = p1[0],\n uy1 = p1[1],\n w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S; // Special case for u0 ≅ u1.\n\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n\n i = function i(t) {\n return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S)];\n };\n } // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n\n i = function i(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];\n };\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n return i;\n }\n\n zoom.rho = function (_) {\n var _1 = Math.max(1e-3, +_),\n _2 = _1 * _1,\n _4 = _2 * _2;\n\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4));\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/sourceEvent.js\n/* harmony default export */ function sourceEvent(event) {\n var sourceEvent;\n\n while (sourceEvent = event.sourceEvent) {\n event = sourceEvent;\n }\n\n return event;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-selection/src/pointer.js\n\n/* harmony default export */ function src_pointer(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n\n if (node) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n\n return [event.pageX, event.pageY];\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/constant.js\n/* harmony default export */ const d3_zoom_src_constant = (function (x) {\n return function () {\n return x;\n };\n});\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/event.js\nfunction ZoomEvent(type, _ref) {\n var sourceEvent = _ref.sourceEvent,\n target = _ref.target,\n transform = _ref.transform,\n dispatch = _ref.dispatch;\n Object.defineProperties(this, {\n type: {\n value: type,\n enumerable: true,\n configurable: true\n },\n sourceEvent: {\n value: sourceEvent,\n enumerable: true,\n configurable: true\n },\n target: {\n value: target,\n enumerable: true,\n configurable: true\n },\n transform: {\n value: transform,\n enumerable: true,\n configurable: true\n },\n _: {\n value: dispatch\n }\n });\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/transform.js\nfunction Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\nTransform.prototype = {\n constructor: Transform,\n scale: function scale(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function translate(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function apply(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function applyX(x) {\n return x * this.k + this.x;\n },\n applyY: function applyY(y) {\n return y * this.k + this.y;\n },\n invert: function invert(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function invertX(x) {\n return (x - this.x) / this.k;\n },\n invertY: function invertY(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function rescaleX(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function rescaleY(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function toString() {\n return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";\n }\n};\nvar transform_identity = new Transform(1, 0, 0);\ntransform.prototype = Transform.prototype;\nfunction transform(node) {\n while (!node.__zoom) {\n if (!(node = node.parentNode)) return transform_identity;\n }\n\n return node.__zoom;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/noevent.js\nfunction src_noevent_nopropagation(event) {\n event.stopImmediatePropagation();\n}\n/* harmony default export */ function d3_zoom_src_noevent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/zoom.js\n\n\n\n\n\n\n\n\n // Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\n\nfunction zoom_defaultFilter(event) {\n return (!event.ctrlKey || event.type === \'wheel\') && !event.button;\n}\n\nfunction zoom_defaultExtent() {\n var e = this;\n\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n\n if (e.hasAttribute("viewBox")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || transform_identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction zoom_defaultTouchable() {\n return navigator.maxTouchPoints || "ontouchstart" in this;\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1));\n}\n\n/* harmony default export */ function zoom() {\n var filter = zoom_defaultFilter,\n extent = zoom_defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = zoom_defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = src_zoom,\n listeners = src_dispatch("start", "zoom", "end"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection.property("__zoom", defaultTransform).on("wheel.zoom", wheeled, {\n passive: false\n }).on("mousedown.zoom", mousedowned).on("dblclick.zoom", dblclicked).filter(touchable).on("touchstart.zoom", touchstarted).on("touchmove.zoom", touchmoved).on("touchend.zoom touchcancel.zoom", touchended).style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");\n }\n\n zoom.transform = function (collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property("__zoom", defaultTransform);\n\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function () {\n gesture(this, arguments).event(event).start().zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform).end();\n });\n }\n };\n\n zoom.scaleBy = function (selection, k, p, event) {\n zoom.scaleTo(selection, function () {\n var k0 = this.__zoom.k,\n k1 = typeof k === "function" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function (selection, k, p, event) {\n zoom.transform(selection, function () {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === "function" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function (selection, x, y, event) {\n zoom.transform(selection, function () {\n return constrain(this.__zoom.translate(typeof x === "function" ? x.apply(this, arguments) : x, typeof y === "function" ? y.apply(this, arguments) : y), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function (selection, x, y, p, event) {\n zoom.transform(selection, function () {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;\n return constrain(transform_identity.translate(p0[0], p0[1]).scale(t.k).translate(typeof x === "function" ? -x.apply(this, arguments) : -x, typeof y === "function" ? -y.apply(this, arguments) : -y), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k,\n y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition.on("start.zoom", function () {\n gesture(this, arguments).event(event).start();\n }).on("interrupt.zoom end.zoom", function () {\n gesture(this, arguments).event(event).end();\n }).tween("zoom", function () {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === "function" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function (t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else {\n var l = i(t),\n k = w / l[2];\n t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k);\n }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return !clean && that.__zooming || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function event(_event) {\n if (_event) this.sourceEvent = _event;\n return this;\n },\n start: function start() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit("start");\n }\n\n return this;\n },\n zoom: function zoom(key, transform) {\n if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit("zoom");\n return this;\n },\n end: function end() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit("end");\n }\n\n return this;\n },\n emit: function emit(type) {\n var d = src_select(this.that).datum();\n listeners.call(type, this.that, new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type: type,\n transform: this.that.__zoom,\n dispatch: listeners\n }), d);\n }\n };\n\n function wheeled(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = src_pointer(event); // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n\n clearTimeout(g.wheel);\n } // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return; // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n src_interrupt(this);\n g.start();\n }\n\n d3_zoom_src_noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = src_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),\n p = src_pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n nodrag(event.view);\n src_noevent_nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n src_interrupt(this);\n g.start();\n\n function mousemoved(event) {\n d3_zoom_src_noevent(event);\n\n if (!g.moved) {\n var dx = event.clientX - x0,\n dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n\n g.event(event).zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = src_pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on("mousemove.zoom mouseup.zoom", null);\n yesdrag(event.view, g.moved);\n d3_zoom_src_noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = src_pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n d3_zoom_src_noevent(event);\n if (duration > 0) src_select(this).transition().duration(duration).call(schedule, t1, p0, event);else src_select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started,\n i,\n t,\n p;\n src_noevent_nopropagation(event);\n\n for (i = 0; i < n; ++i) {\n t = touches[i], p = src_pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function () {\n touchstarting = null;\n }, touchDelay);\n src_interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event) {\n if (!this.__zooming) return;\n\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length,\n i,\n t,\n p,\n l;\n d3_zoom_src_noevent(event);\n\n for (i = 0; i < n; ++i) {\n t = touches[i], p = src_pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n\n t = g.that.__zoom;\n\n if (g.touch1) {\n var p0 = g.touch0[0],\n l0 = g.touch0[1],\n p1 = g.touch1[0],\n l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n } else if (g.touch0) p = g.touch0[0], l = g.touch0[1];else return;\n\n g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length,\n i,\n t;\n src_noevent_nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function () {\n touchending = null;\n }, touchDelay);\n\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);else {\n g.end(); // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n\n if (g.taps === 2) {\n t = src_pointer(t, this);\n\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = src_select(this).on("dblclick.zoom");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function (_) {\n return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : d3_zoom_src_constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function (_) {\n return arguments.length ? (filter = typeof _ === "function" ? _ : d3_zoom_src_constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function (_) {\n return arguments.length ? (touchable = typeof _ === "function" ? _ : d3_zoom_src_constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function (_) {\n return arguments.length ? (extent = typeof _ === "function" ? _ : d3_zoom_src_constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function (_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function (_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function (_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function (_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function (_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function () {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function (_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function (_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/index.js\n\n\n;// CONCATENATED MODULE: ./node_modules/d3/src/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./src/tidyTree/makeTree.ts\n\n\nvar MakeTree = function MakeTree(props) {\n var data = props.data,\n layout = props.layout;\n var dx = layout.dx,\n width = layout.width;\n var root = hierarchy(data);\n var dy = width / (root.height + 1);\n return tree().nodeSize([dx, dy])(root);\n};\n\nvar Tree = function Tree(props) {\n var data = props.data,\n layout = props.layout,\n initialDepth = props.initialDepth;\n sequential(rainbow).domain([0, 10]);\n var root = MakeTree({\n data: data,\n layout: layout\n });\n var dx = layout.dx,\n width = layout.width;\n var dy = width / (root.height + 1);\n var x0 = Infinity;\n var x1 = -x0;\n root.each(function (d) {\n if (d.x > x1) x1 = d.x;\n if (d.x < x0) x0 = d.x;\n }); // We copy attributes to allow for collapsing later\n\n root.descendants().forEach(function (d, i) {\n d.data.data._id = i;\n d.data.data._children = d.children;\n\n if (d.depth > initialDepth) {\n d.children = undefined;\n }\n });\n var zoomListener = zoom().scaleExtent([0.1, 50]).on("zoom", function (event) {\n svg.attr("transform", event.transform);\n });\n var svgParent = src_create("svg").attr("viewBox", "0,0,".concat(width, ",").concat(x1 - x0 + dx * 2)).attr("cursor", "grab") // @ts-ignore\n .call(zoomListener);\n var svg = svgParent.append("g"); // All nodes\n\n svg.append("g").attr("cursor", "pointer").attr("pointer-events", "all"); // All links\n\n svg.append("g").attr("fill", "none").attr("stroke", "#555555").attr("stroke-opacity", 0.4).attr("stroke-width", 1.5);\n var g = svg.append("g").attr("font-family", "sans-serif").attr("font-size", 8).attr("transform", "translate(".concat(dy / 3, ",").concat(dx - x0, ")"));\n var linker = linkHorizontal().x(function (d) {\n return d.y;\n }).y(function (d) {\n return d.x;\n });\n g.append("g").attr("fill", "none").attr("stroke", "#555").attr("stroke-opacity", 0.4).attr("stroke-width", 1.5).selectAll("path").data(root.links()).join("path").attr("d", linker);\n var node = g.append("g").attr("stroke-linejoin", "round").attr("stroke-width", 3).selectAll("g").data(root.descendants()).join("g").attr("transform", function (d) {\n return "translate(".concat(d.y, ",").concat(d.x, ")");\n });\n node.append("circle") // @ts-ignore\n .attr("fill", function (d) {\n return d.data.data.ns === "Category" ? "#555" : "#1276cd";\n }) // @ts-ignore\n .attr("r", function (d) {\n return d.data.data.ns === "Category" ? 2.5 : 4.5;\n }).attr("class", function (d) {\n return "depth_".concat(Math.min(d.depth, 5));\n });\n node.append("text").attr("dy", "0.31em").attr("x", function (d) {\n return d.children ? -6 : 6;\n }).attr("text-anchor", function (d) {\n return d.children ? "end" : "start";\n }).text(function (d) {\n return d.data.data.name;\n }).clone(true).lower().attr("stroke", "white");\n return svgParent;\n};\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\nvar injectStylesIntoStyleTag = __webpack_require__(379);\nvar injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleDomAPI.js\nvar styleDomAPI = __webpack_require__(795);\nvar styleDomAPI_default = /*#__PURE__*/__webpack_require__.n(styleDomAPI);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertBySelector.js\nvar insertBySelector = __webpack_require__(569);\nvar insertBySelector_default = /*#__PURE__*/__webpack_require__.n(insertBySelector);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\nvar setAttributesWithoutAttributes = __webpack_require__(565);\nvar setAttributesWithoutAttributes_default = /*#__PURE__*/__webpack_require__.n(setAttributesWithoutAttributes);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/insertStyleElement.js\nvar insertStyleElement = __webpack_require__(216);\nvar insertStyleElement_default = /*#__PURE__*/__webpack_require__.n(insertStyleElement);\n// EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/styleTagTransform.js\nvar styleTagTransform = __webpack_require__(589);\nvar styleTagTransform_default = /*#__PURE__*/__webpack_require__.n(styleTagTransform);\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./src/tidyTree/FileUpload/FileUpload.css\nvar FileUpload = __webpack_require__(793);\n;// CONCATENATED MODULE: ./src/tidyTree/FileUpload/FileUpload.css\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (styleTagTransform_default());\noptions.setAttributes = (setAttributesWithoutAttributes_default());\n\n options.insert = insertBySelector_default().bind(null, "head");\n \noptions.domAPI = (styleDomAPI_default());\noptions.insertStyleElement = (insertStyleElement_default());\n\nvar update = injectStylesIntoStyleTag_default()(FileUpload/* default */.Z, options);\n\n\n\n\n /* harmony default export */ const FileUpload_FileUpload = (FileUpload/* default */.Z && FileUpload/* default.locals */.Z.locals ? FileUpload/* default.locals */.Z.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/tidyTree/FileUpload/FileUpload.ts\n\n\n\n\nvar makeHeader = function makeHeader() {\n var header = document.createElement("h1");\n var headerContent = document.createTextNode("Drag and drop .json file");\n header.appendChild(headerContent);\n return header;\n};\n\nvar makeDropbox = function makeDropbox(handleUpload) {\n var header = makeHeader();\n var dropbox = document.createElement("div");\n\n var dragenter = function dragenter(e) {\n e.stopPropagation();\n e.preventDefault();\n };\n\n var dragover = function dragover(e) {\n e.stopPropagation();\n e.preventDefault();\n };\n\n var drop = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/regenerator_default().mark(function _callee(e) {\n var dt, files;\n return regenerator_default().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n e.stopPropagation();\n e.preventDefault();\n dt = e.dataTransfer;\n files = dt.files;\n _context.next = 6;\n return handleUpload(files);\n\n case 6:\n removeDropbox();\n\n case 7:\n case "end":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function drop(_x) {\n return _ref.apply(this, arguments);\n };\n }();\n\n var removeDropbox = function removeDropbox() {\n dropbox.removeEventListener("dragenter", dragenter);\n dropbox.removeEventListener("dragover", dragover);\n dropbox.removeEventListener("drop", drop);\n document.body.removeChild(dropbox);\n };\n\n dropbox.setAttribute("id", "fileUpload");\n dropbox.appendChild(header);\n dropbox.addEventListener("dragenter", dragenter, false);\n dropbox.addEventListener("dragover", dragover, false);\n dropbox.addEventListener("drop", drop, false);\n document.body.appendChild(dropbox);\n};\n// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[2].use[1]!./src/tidyTree/index.css\nvar tidyTree = __webpack_require__(392);\n;// CONCATENATED MODULE: ./src/tidyTree/index.css\n\n \n \n \n \n \n \n \n \n \n\nvar tidyTree_options = {};\n\ntidyTree_options.styleTagTransform = (styleTagTransform_default());\ntidyTree_options.setAttributes = (setAttributesWithoutAttributes_default());\n\n tidyTree_options.insert = insertBySelector_default().bind(null, "head");\n \ntidyTree_options.domAPI = (styleDomAPI_default());\ntidyTree_options.insertStyleElement = (insertStyleElement_default());\n\nvar tidyTree_update = injectStylesIntoStyleTag_default()(tidyTree/* default */.Z, tidyTree_options);\n\n\n\n\n /* harmony default export */ const src_tidyTree = (tidyTree/* default */.Z && tidyTree/* default.locals */.Z.locals ? tidyTree/* default.locals */.Z.locals : undefined);\n\n;// CONCATENATED MODULE: ./src/tidyTree/index.ts\n\n\n\n\n\n\n\nvar viewportWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\nvar viewportHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\nvar config = {\n layout: {\n width: 954,\n height: viewportHeight,\n margin: {\n top: 30,\n right: 60,\n bottom: 30,\n left: 30\n },\n dy: viewportWidth / 6,\n dx: 20\n },\n dataUri: null,\n initialDepth: 99,\n animationDuration: 250\n};\nvar chart;\n\nvar fileUploaded = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/regenerator_default().mark(function _callee(f) {\n var uploadFile, uploadFileUrl, rawData, parsedData;\n return regenerator_default().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n uploadFile = f[0];\n uploadFileUrl = window.URL.createObjectURL(uploadFile);\n _context.next = 4;\n return json(uploadFileUrl);\n\n case 4:\n rawData = _context.sent;\n _context.next = 7;\n return stratifyNodes(rawData);\n\n case 7:\n parsedData = _context.sent;\n createTree(parsedData);\n\n case 9:\n case "end":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function fileUploaded(_x) {\n return _ref.apply(this, arguments);\n };\n}();\n\nvar setupDropbox = function setupDropbox() {\n console.log("Creating Dropbox");\n makeDropbox(fileUploaded);\n};\n\nvar createTree = function createTree(data) {\n var chartProps = {\n data: data,\n layout: config.layout,\n initialDepth: config.initialDepth,\n animationDuration: config.animationDuration\n };\n chart = Tree(chartProps);\n\n if (!chart) {\n throw new Error("chart is null");\n }\n\n var node = chart.node();\n\n if (!node) {\n throw new Error("node is null");\n }\n\n document.body.appendChild(node);\n};\n\ndocument.addEventListener("DOMContentLoaded", setupDropbox);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzg3LmpzIiwibWFwcGluZ3MiOiI7O0FBQUEsU0FBU0Esa0JBQVQsQ0FBNEJDLEdBQTVCLEVBQWlDQyxPQUFqQyxFQUEwQ0MsTUFBMUMsRUFBa0RDLEtBQWxELEVBQXlEQyxNQUF6RCxFQUFpRUMsR0FBakUsRUFBc0VDLEdBQXRFLEVBQTJFO0FBQ3pFLE1BQUk7QUFDRixRQUFJQyxJQUFJLEdBQUdQLEdBQUcsQ0FBQ0ssR0FBRCxDQUFILENBQVNDLEdBQVQsQ0FBWDtBQUNBLFFBQUlFLEtBQUssR0FBR0QsSUFBSSxDQUFDQyxLQUFqQjtBQUNELEdBSEQsQ0FHRSxPQUFPQyxLQUFQLEVBQWM7QUFDZFAsSUFBQUEsTUFBTSxDQUFDTyxLQUFELENBQU47QUFDQTtBQUNEOztBQUVELE1BQUlGLElBQUksQ0FBQ0csSUFBVCxFQUFlO0FBQ2JULElBQUFBLE9BQU8sQ0FBQ08sS0FBRCxDQUFQO0FBQ0QsR0FGRCxNQUVPO0FBQ0xHLElBQUFBLE9BQU8sQ0FBQ1YsT0FBUixDQUFnQk8sS0FBaEIsRUFBdUJJLElBQXZCLENBQTRCVCxLQUE1QixFQUFtQ0MsTUFBbkM7QUFDRDtBQUNGOztBQUVjLFNBQVNTLGlCQUFULENBQTJCQyxFQUEzQixFQUErQjtBQUM1QyxTQUFPLFlBQVk7QUFDakIsUUFBSUMsSUFBSSxHQUFHLElBQVg7QUFBQSxRQUNJQyxJQUFJLEdBQUdDLFNBRFg7QUFFQSxXQUFPLElBQUlOLE9BQUosQ0FBWSxVQUFVVixPQUFWLEVBQW1CQyxNQUFuQixFQUEyQjtBQUM1QyxVQUFJRixHQUFHLEdBQUdjLEVBQUUsQ0FBQ0ksS0FBSCxDQUFTSCxJQUFULEVBQWVDLElBQWYsQ0FBVjs7QUFFQSxlQUFTYixLQUFULENBQWVLLEtBQWYsRUFBc0I7QUFDcEJULFFBQUFBLGtCQUFrQixDQUFDQyxHQUFELEVBQU1DLE9BQU4sRUFBZUMsTUFBZixFQUF1QkMsS0FBdkIsRUFBOEJDLE1BQTlCLEVBQXNDLE1BQXRDLEVBQThDSSxLQUE5QyxDQUFsQjtBQUNEOztBQUVELGVBQVNKLE1BQVQsQ0FBZ0JlLEdBQWhCLEVBQXFCO0FBQ25CcEIsUUFBQUEsa0JBQWtCLENBQUNDLEdBQUQsRUFBTUMsT0FBTixFQUFlQyxNQUFmLEVBQXVCQyxLQUF2QixFQUE4QkMsTUFBOUIsRUFBc0MsT0FBdEMsRUFBK0NlLEdBQS9DLENBQWxCO0FBQ0Q7O0FBRURoQixNQUFBQSxLQUFLLENBQUNpQixTQUFELENBQUw7QUFDRCxLQVpNLENBQVA7QUFhRCxHQWhCRDtBQWlCRCxDOzs7OztBQ2xDYyxTQUFTQyxlQUFULENBQXlCQyxHQUF6QixFQUE4QjtBQUMzQyxNQUFJQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0YsR0FBZCxDQUFKLEVBQXdCLE9BQU9BLEdBQVA7QUFDekIsQzs7QUNGYyxTQUFTRyxxQkFBVCxDQUErQkgsR0FBL0IsRUFBb0NJLENBQXBDLEVBQXVDO0FBQ3BELE1BQUlDLEVBQUUsR0FBR0wsR0FBRyxJQUFJLElBQVAsR0FBYyxJQUFkLEdBQXFCLE9BQU9NLE1BQVAsS0FBa0IsV0FBbEIsSUFBaUNOLEdBQUcsQ0FBQ00sTUFBTSxDQUFDQyxRQUFSLENBQXBDLElBQXlEUCxHQUFHLENBQUMsWUFBRCxDQUExRjs7QUFFQSxNQUFJSyxFQUFFLElBQUksSUFBVixFQUFnQjtBQUNoQixNQUFJRyxJQUFJLEdBQUcsRUFBWDtBQUNBLE1BQUlDLEVBQUUsR0FBRyxJQUFUO0FBQ0EsTUFBSUMsRUFBRSxHQUFHLEtBQVQ7O0FBRUEsTUFBSUMsRUFBSixFQUFRQyxFQUFSOztBQUVBLE1BQUk7QUFDRixTQUFLUCxFQUFFLEdBQUdBLEVBQUUsQ0FBQ1EsSUFBSCxDQUFRYixHQUFSLENBQVYsRUFBd0IsRUFBRVMsRUFBRSxHQUFHLENBQUNFLEVBQUUsR0FBR04sRUFBRSxDQUFDUyxJQUFILEVBQU4sRUFBaUIxQixJQUF4QixDQUF4QixFQUF1RHFCLEVBQUUsR0FBRyxJQUE1RCxFQUFrRTtBQUNoRUQsTUFBQUEsSUFBSSxDQUFDTyxJQUFMLENBQVVKLEVBQUUsQ0FBQ3pCLEtBQWI7O0FBRUEsVUFBSWtCLENBQUMsSUFBSUksSUFBSSxDQUFDUSxNQUFMLEtBQWdCWixDQUF6QixFQUE0QjtBQUM3QjtBQUNGLEdBTkQsQ0FNRSxPQUFPUCxHQUFQLEVBQVk7QUFDWmEsSUFBQUEsRUFBRSxHQUFHLElBQUw7QUFDQUUsSUFBQUEsRUFBRSxHQUFHZixHQUFMO0FBQ0QsR0FURCxTQVNVO0FBQ1IsUUFBSTtBQUNGLFVBQUksQ0FBQ1ksRUFBRCxJQUFPSixFQUFFLENBQUMsUUFBRCxDQUFGLElBQWdCLElBQTNCLEVBQWlDQSxFQUFFLENBQUMsUUFBRCxDQUFGO0FBQ2xDLEtBRkQsU0FFVTtBQUNSLFVBQUlLLEVBQUosRUFBUSxNQUFNRSxFQUFOO0FBQ1Q7QUFDRjs7QUFFRCxTQUFPSixJQUFQO0FBQ0QsQzs7QUM1QmMsU0FBU1MsaUJBQVQsQ0FBMkJqQixHQUEzQixFQUFnQ2tCLEdBQWhDLEVBQXFDO0FBQ2xELE1BQUlBLEdBQUcsSUFBSSxJQUFQLElBQWVBLEdBQUcsR0FBR2xCLEdBQUcsQ0FBQ2dCLE1BQTdCLEVBQXFDRSxHQUFHLEdBQUdsQixHQUFHLENBQUNnQixNQUFWOztBQUVyQyxPQUFLLElBQUlaLENBQUMsR0FBRyxDQUFSLEVBQVdlLElBQUksR0FBRyxJQUFJbEIsS0FBSixDQUFVaUIsR0FBVixDQUF2QixFQUF1Q2QsQ0FBQyxHQUFHYyxHQUEzQyxFQUFnRGQsQ0FBQyxFQUFqRCxFQUFxRDtBQUNuRGUsSUFBQUEsSUFBSSxDQUFDZixDQUFELENBQUosR0FBVUosR0FBRyxDQUFDSSxDQUFELENBQWI7QUFDRDs7QUFFRCxTQUFPZSxJQUFQO0FBQ0QsQzs7QUNSRDtBQUNlLFNBQVNFLDJCQUFULENBQXFDQyxDQUFyQyxFQUF3Q0MsTUFBeEMsRUFBZ0Q7QUFDN0QsTUFBSSxDQUFDRCxDQUFMLEVBQVE7QUFDUixNQUFJLE9BQU9BLENBQVAsS0FBYSxRQUFqQixFQUEyQixPQUFPRixpQkFBZ0IsQ0FBQ0UsQ0FBRCxFQUFJQyxNQUFKLENBQXZCO0FBQzNCLE1BQUlDLENBQUMsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqQixDQUEwQmQsSUFBMUIsQ0FBK0JTLENBQS9CLEVBQWtDTSxLQUFsQyxDQUF3QyxDQUF4QyxFQUEyQyxDQUFDLENBQTVDLENBQVI7QUFDQSxNQUFJSixDQUFDLEtBQUssUUFBTixJQUFrQkYsQ0FBQyxDQUFDTyxXQUF4QixFQUFxQ0wsQ0FBQyxHQUFHRixDQUFDLENBQUNPLFdBQUYsQ0FBY0MsSUFBbEI7QUFDckMsTUFBSU4sQ0FBQyxLQUFLLEtBQU4sSUFBZUEsQ0FBQyxLQUFLLEtBQXpCLEVBQWdDLE9BQU92QixLQUFLLENBQUM4QixJQUFOLENBQVdULENBQVgsQ0FBUDtBQUNoQyxNQUFJRSxDQUFDLEtBQUssV0FBTixJQUFxQiwyQ0FBMkNRLElBQTNDLENBQWdEUixDQUFoRCxDQUF6QixFQUE2RSxPQUFPSixpQkFBZ0IsQ0FBQ0UsQ0FBRCxFQUFJQyxNQUFKLENBQXZCO0FBQzlFLEM7O0FDUmMsU0FBU1UsZ0JBQVQsR0FBNEI7QUFDekMsUUFBTSxJQUFJQyxTQUFKLENBQWMsMklBQWQsQ0FBTjtBQUNELEM7O0FDRkQ7QUFDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTSyxjQUFULENBQXdCdkMsR0FBeEIsRUFBNkJJLENBQTdCLEVBQWdDO0FBQzdDLFNBQU8rQixlQUFjLENBQUNuQyxHQUFELENBQWQsSUFBdUJvQyxxQkFBb0IsQ0FBQ3BDLEdBQUQsRUFBTUksQ0FBTixDQUEzQyxJQUF1RGlDLDJCQUEwQixDQUFDckMsR0FBRCxFQUFNSSxDQUFOLENBQWpGLElBQTZGa0MsZ0JBQWUsRUFBbkg7QUFDRCxDOztBQ05NLFNBQVNFLFFBQVQsQ0FBa0JDLENBQWxCLEVBQXFCO0FBQzFCLFNBQU9BLENBQUMsSUFBSSxJQUFMLEdBQVksSUFBWixHQUFtQkMsUUFBUSxDQUFDRCxDQUFELENBQWxDO0FBQ0Q7QUFFTSxTQUFTQyxRQUFULENBQWtCRCxDQUFsQixFQUFxQjtBQUMxQixNQUFJLE9BQU9BLENBQVAsS0FBYSxVQUFqQixFQUE2QixNQUFNLElBQUlFLEtBQUosRUFBTjtBQUM3QixTQUFPRixDQUFQO0FBQ0QsQzs7QUNQRCxTQUFTRyxLQUFULENBQWVDLElBQWYsRUFBcUI7QUFDbkIsTUFBSUMsR0FBRyxHQUFHLENBQVY7QUFBQSxNQUNJQyxRQUFRLEdBQUdGLElBQUksQ0FBQ0UsUUFEcEI7QUFBQSxNQUVJM0MsQ0FBQyxHQUFHMkMsUUFBUSxJQUFJQSxRQUFRLENBQUMvQixNQUY3QjtBQUdBLE1BQUksQ0FBQ1osQ0FBTCxFQUFRMEMsR0FBRyxHQUFHLENBQU4sQ0FBUixLQUNLLE9BQU8sRUFBRTFDLENBQUYsSUFBTyxDQUFkO0FBQWlCMEMsSUFBQUEsR0FBRyxJQUFJQyxRQUFRLENBQUMzQyxDQUFELENBQVIsQ0FBWWxCLEtBQW5CO0FBQWpCO0FBQ0wyRCxFQUFBQSxJQUFJLENBQUMzRCxLQUFMLEdBQWE0RCxHQUFiO0FBQ0Q7O0FBRUQsNkJBQWUsMkJBQVc7QUFDeEIsU0FBTyxLQUFLRSxTQUFMLENBQWVKLEtBQWYsQ0FBUDtBQUNELEM7Ozs7Ozs7O0FDWEQsNkJBQWUsY0FBU0ssUUFBVCxFQUFtQkMsSUFBbkIsRUFBeUI7QUFDdEMsTUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBYjs7QUFEc0MsNkNBRW5CLElBRm1CO0FBQUE7O0FBQUE7QUFFdEMsd0RBQXlCO0FBQUEsVUFBZE4sSUFBYztBQUN2QkksTUFBQUEsUUFBUSxDQUFDcEMsSUFBVCxDQUFjcUMsSUFBZCxFQUFvQkwsSUFBcEIsRUFBMEIsRUFBRU0sS0FBNUIsRUFBbUMsSUFBbkM7QUFDRDtBQUpxQztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUt0QyxTQUFPLElBQVA7QUFDRCxDOztBQ05ELDZCQUFlLG9CQUFTRixRQUFULEVBQW1CQyxJQUFuQixFQUF5QjtBQUN0QyxNQUFJTCxJQUFJLEdBQUcsSUFBWDtBQUFBLE1BQWlCTyxLQUFLLEdBQUcsQ0FBQ1AsSUFBRCxDQUF6QjtBQUFBLE1BQWlDRSxRQUFqQztBQUFBLE1BQTJDM0MsQ0FBM0M7QUFBQSxNQUE4QytDLEtBQUssR0FBRyxDQUFDLENBQXZEOztBQUNBLFNBQU9OLElBQUksR0FBR08sS0FBSyxDQUFDQyxHQUFOLEVBQWQsRUFBMkI7QUFDekJKLElBQUFBLFFBQVEsQ0FBQ3BDLElBQVQsQ0FBY3FDLElBQWQsRUFBb0JMLElBQXBCLEVBQTBCLEVBQUVNLEtBQTVCLEVBQW1DLElBQW5DOztBQUNBLFFBQUlKLFFBQVEsR0FBR0YsSUFBSSxDQUFDRSxRQUFwQixFQUE4QjtBQUM1QixXQUFLM0MsQ0FBQyxHQUFHMkMsUUFBUSxDQUFDL0IsTUFBVCxHQUFrQixDQUEzQixFQUE4QlosQ0FBQyxJQUFJLENBQW5DLEVBQXNDLEVBQUVBLENBQXhDLEVBQTJDO0FBQ3pDZ0QsUUFBQUEsS0FBSyxDQUFDckMsSUFBTixDQUFXZ0MsUUFBUSxDQUFDM0MsQ0FBRCxDQUFuQjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPLElBQVA7QUFDRCxDOztBQ1hELDZCQUFlLG1CQUFTNkMsUUFBVCxFQUFtQkMsSUFBbkIsRUFBeUI7QUFDdEMsTUFBSUwsSUFBSSxHQUFHLElBQVg7QUFBQSxNQUFpQk8sS0FBSyxHQUFHLENBQUNQLElBQUQsQ0FBekI7QUFBQSxNQUFpQy9CLElBQUksR0FBRyxFQUF4QztBQUFBLE1BQTRDaUMsUUFBNUM7QUFBQSxNQUFzRDNDLENBQXREO0FBQUEsTUFBeURvQixDQUF6RDtBQUFBLE1BQTREMkIsS0FBSyxHQUFHLENBQUMsQ0FBckU7O0FBQ0EsU0FBT04sSUFBSSxHQUFHTyxLQUFLLENBQUNDLEdBQU4sRUFBZCxFQUEyQjtBQUN6QnZDLElBQUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVOEIsSUFBVjs7QUFDQSxRQUFJRSxRQUFRLEdBQUdGLElBQUksQ0FBQ0UsUUFBcEIsRUFBOEI7QUFDNUIsV0FBSzNDLENBQUMsR0FBRyxDQUFKLEVBQU9vQixDQUFDLEdBQUd1QixRQUFRLENBQUMvQixNQUF6QixFQUFpQ1osQ0FBQyxHQUFHb0IsQ0FBckMsRUFBd0MsRUFBRXBCLENBQTFDLEVBQTZDO0FBQzNDZ0QsUUFBQUEsS0FBSyxDQUFDckMsSUFBTixDQUFXZ0MsUUFBUSxDQUFDM0MsQ0FBRCxDQUFuQjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPeUMsSUFBSSxHQUFHL0IsSUFBSSxDQUFDdUMsR0FBTCxFQUFkLEVBQTBCO0FBQ3hCSixJQUFBQSxRQUFRLENBQUNwQyxJQUFULENBQWNxQyxJQUFkLEVBQW9CTCxJQUFwQixFQUEwQixFQUFFTSxLQUE1QixFQUFtQyxJQUFuQztBQUNEOztBQUNELFNBQU8sSUFBUDtBQUNELEM7Ozs7Ozs7O0FDZEQsNkJBQWUsY0FBU0YsUUFBVCxFQUFtQkMsSUFBbkIsRUFBeUI7QUFDdEMsTUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBYjs7QUFEc0MsaURBRW5CLElBRm1CO0FBQUE7O0FBQUE7QUFFdEMsd0RBQXlCO0FBQUEsVUFBZE4sSUFBYzs7QUFDdkIsVUFBSUksUUFBUSxDQUFDcEMsSUFBVCxDQUFjcUMsSUFBZCxFQUFvQkwsSUFBcEIsRUFBMEIsRUFBRU0sS0FBNUIsRUFBbUMsSUFBbkMsQ0FBSixFQUE4QztBQUM1QyxlQUFPTixJQUFQO0FBQ0Q7QUFDRjtBQU5xQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT3ZDLEM7O0FDUEQsNkJBQWUsYUFBUzNELEtBQVQsRUFBZ0I7QUFDN0IsU0FBTyxLQUFLOEQsU0FBTCxDQUFlLFVBQVNILElBQVQsRUFBZTtBQUNuQyxRQUFJQyxHQUFHLEdBQUcsQ0FBQzVELEtBQUssQ0FBQzJELElBQUksQ0FBQ1MsSUFBTixDQUFOLElBQXFCLENBQS9CO0FBQUEsUUFDSVAsUUFBUSxHQUFHRixJQUFJLENBQUNFLFFBRHBCO0FBQUEsUUFFSTNDLENBQUMsR0FBRzJDLFFBQVEsSUFBSUEsUUFBUSxDQUFDL0IsTUFGN0I7O0FBR0EsV0FBTyxFQUFFWixDQUFGLElBQU8sQ0FBZDtBQUFpQjBDLE1BQUFBLEdBQUcsSUFBSUMsUUFBUSxDQUFDM0MsQ0FBRCxDQUFSLENBQVlsQixLQUFuQjtBQUFqQjs7QUFDQTJELElBQUFBLElBQUksQ0FBQzNELEtBQUwsR0FBYTRELEdBQWI7QUFDRCxHQU5NLENBQVA7QUFPRCxDOztBQ1JELDZCQUFlLGNBQVNTLE9BQVQsRUFBa0I7QUFDL0IsU0FBTyxLQUFLQyxVQUFMLENBQWdCLFVBQVNYLElBQVQsRUFBZTtBQUNwQyxRQUFJQSxJQUFJLENBQUNFLFFBQVQsRUFBbUI7QUFDakJGLE1BQUFBLElBQUksQ0FBQ0UsUUFBTCxDQUFjVSxJQUFkLENBQW1CRixPQUFuQjtBQUNEO0FBQ0YsR0FKTSxDQUFQO0FBS0QsQzs7QUNORCw2QkFBZSxjQUFTRyxHQUFULEVBQWM7QUFDM0IsTUFBSUMsS0FBSyxHQUFHLElBQVo7QUFBQSxNQUNJQyxRQUFRLEdBQUdDLG1CQUFtQixDQUFDRixLQUFELEVBQVFELEdBQVIsQ0FEbEM7QUFBQSxNQUVJTixLQUFLLEdBQUcsQ0FBQ08sS0FBRCxDQUZaOztBQUdBLFNBQU9BLEtBQUssS0FBS0MsUUFBakIsRUFBMkI7QUFDekJELElBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDRyxNQUFkO0FBQ0FWLElBQUFBLEtBQUssQ0FBQ3JDLElBQU4sQ0FBVzRDLEtBQVg7QUFDRDs7QUFDRCxNQUFJSSxDQUFDLEdBQUdYLEtBQUssQ0FBQ3BDLE1BQWQ7O0FBQ0EsU0FBTzBDLEdBQUcsS0FBS0UsUUFBZixFQUF5QjtBQUN2QlIsSUFBQUEsS0FBSyxDQUFDWSxNQUFOLENBQWFELENBQWIsRUFBZ0IsQ0FBaEIsRUFBbUJMLEdBQW5CO0FBQ0FBLElBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDSSxNQUFWO0FBQ0Q7O0FBQ0QsU0FBT1YsS0FBUDtBQUNEOztBQUVELFNBQVNTLG1CQUFULENBQTZCSSxDQUE3QixFQUFnQ0MsQ0FBaEMsRUFBbUM7QUFDakMsTUFBSUQsQ0FBQyxLQUFLQyxDQUFWLEVBQWEsT0FBT0QsQ0FBUDtBQUNiLE1BQUlFLE1BQU0sR0FBR0YsQ0FBQyxDQUFDRyxTQUFGLEVBQWI7QUFBQSxNQUNJQyxNQUFNLEdBQUdILENBQUMsQ0FBQ0UsU0FBRixFQURiO0FBQUEsTUFFSUUsQ0FBQyxHQUFHLElBRlI7QUFHQUwsRUFBQUEsQ0FBQyxHQUFHRSxNQUFNLENBQUNkLEdBQVAsRUFBSjtBQUNBYSxFQUFBQSxDQUFDLEdBQUdHLE1BQU0sQ0FBQ2hCLEdBQVAsRUFBSjs7QUFDQSxTQUFPWSxDQUFDLEtBQUtDLENBQWIsRUFBZ0I7QUFDZEksSUFBQUEsQ0FBQyxHQUFHTCxDQUFKO0FBQ0FBLElBQUFBLENBQUMsR0FBR0UsTUFBTSxDQUFDZCxHQUFQLEVBQUo7QUFDQWEsSUFBQUEsQ0FBQyxHQUFHRyxNQUFNLENBQUNoQixHQUFQLEVBQUo7QUFDRDs7QUFDRCxTQUFPaUIsQ0FBUDtBQUNELEM7O0FDN0JELDZCQUFlLHFCQUFXO0FBQ3hCLE1BQUl6QixJQUFJLEdBQUcsSUFBWDtBQUFBLE1BQWlCTyxLQUFLLEdBQUcsQ0FBQ1AsSUFBRCxDQUF6Qjs7QUFDQSxTQUFPQSxJQUFJLEdBQUdBLElBQUksQ0FBQ2lCLE1BQW5CLEVBQTJCO0FBQ3pCVixJQUFBQSxLQUFLLENBQUNyQyxJQUFOLENBQVc4QixJQUFYO0FBQ0Q7O0FBQ0QsU0FBT08sS0FBUDtBQUNELEM7O0FDTkQsNkJBQWUsdUJBQVc7QUFDeEIsU0FBT25ELEtBQUssQ0FBQzhCLElBQU4sQ0FBVyxJQUFYLENBQVA7QUFDRCxDOztBQ0ZELDZCQUFlLGtCQUFXO0FBQ3hCLE1BQUl3QyxNQUFNLEdBQUcsRUFBYjtBQUNBLE9BQUtmLFVBQUwsQ0FBZ0IsVUFBU1gsSUFBVCxFQUFlO0FBQzdCLFFBQUksQ0FBQ0EsSUFBSSxDQUFDRSxRQUFWLEVBQW9CO0FBQ2xCd0IsTUFBQUEsTUFBTSxDQUFDeEQsSUFBUCxDQUFZOEIsSUFBWjtBQUNEO0FBQ0YsR0FKRDtBQUtBLFNBQU8wQixNQUFQO0FBQ0QsQzs7QUNSRCw2QkFBZSxpQkFBVztBQUN4QixNQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUFBLE1BQWlCQyxLQUFLLEdBQUcsRUFBekI7QUFDQUQsRUFBQUEsSUFBSSxDQUFDRSxJQUFMLENBQVUsVUFBUzdCLElBQVQsRUFBZTtBQUN2QixRQUFJQSxJQUFJLEtBQUsyQixJQUFiLEVBQW1CO0FBQUU7QUFDbkJDLE1BQUFBLEtBQUssQ0FBQzFELElBQU4sQ0FBVztBQUFDNEQsUUFBQUEsTUFBTSxFQUFFOUIsSUFBSSxDQUFDaUIsTUFBZDtBQUFzQmMsUUFBQUEsTUFBTSxFQUFFL0I7QUFBOUIsT0FBWDtBQUNEO0FBQ0YsR0FKRDtBQUtBLFNBQU80QixLQUFQO0FBQ0QsQzs7OztBQ1JjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNUNUIsVUFBQUEsSUFEUyxHQUNGLElBREUsRUFDYS9CLElBRGIsR0FDb0IsQ0FBQytCLElBQUQsQ0FEcEI7O0FBQUE7QUFHWGdDLFVBQUFBLE9BQU8sR0FBRy9ELElBQUksQ0FBQ2dFLE9BQUwsRUFBVixFQUEwQmhFLElBQUksR0FBRyxFQUFqQzs7QUFIVztBQUFBLGdCQUlKK0IsSUFBSSxHQUFHZ0MsT0FBTyxDQUFDeEIsR0FBUixFQUpIO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBS1QsaUJBQU1SLElBQU47O0FBTFM7QUFNVCxjQUFJRSxRQUFRLEdBQUdGLElBQUksQ0FBQ0UsUUFBcEIsRUFBOEI7QUFDNUIsaUJBQUszQyxDQUFDLEdBQUcsQ0FBSixFQUFPb0IsQ0FBQyxHQUFHdUIsUUFBUSxDQUFDL0IsTUFBekIsRUFBaUNaLENBQUMsR0FBR29CLENBQXJDLEVBQXdDLEVBQUVwQixDQUExQyxFQUE2QztBQUMzQ1UsY0FBQUEsSUFBSSxDQUFDQyxJQUFMLENBQVVnQyxRQUFRLENBQUMzQyxDQUFELENBQWxCO0FBQ0Q7QUFDRjs7QUFWUTtBQUFBOztBQUFBO0FBQUEsY0FZSlUsSUFBSSxDQUFDRSxNQVpEO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEM7Ozs7QUNBZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLFNBQVM0RSxTQUFULENBQW1CdEMsSUFBbkIsRUFBeUJQLFFBQXpCLEVBQW1DO0FBQ2hELE1BQUlPLElBQUksWUFBWXVDLEdBQXBCLEVBQXlCO0FBQ3ZCdkMsSUFBQUEsSUFBSSxHQUFHLENBQUN4RCxTQUFELEVBQVl3RCxJQUFaLENBQVA7QUFDQSxRQUFJUCxRQUFRLEtBQUtqRCxTQUFqQixFQUE0QmlELFFBQVEsR0FBRytDLFdBQVg7QUFDN0IsR0FIRCxNQUdPLElBQUkvQyxRQUFRLEtBQUtqRCxTQUFqQixFQUE0QjtBQUNqQ2lELElBQUFBLFFBQVEsR0FBR2dELGNBQVg7QUFDRDs7QUFFRCxNQUFJdkIsSUFBSSxHQUFHLElBQUl3QixJQUFKLENBQVMxQyxJQUFULENBQVg7QUFBQSxNQUNJVCxJQURKO0FBQUEsTUFFSU8sS0FBSyxHQUFHLENBQUNvQixJQUFELENBRlo7QUFBQSxNQUdJeUIsS0FISjtBQUFBLE1BSUlDLE1BSko7QUFBQSxNQUtJOUYsQ0FMSjtBQUFBLE1BTUlvQixDQU5KOztBQVFBLFNBQU9xQixJQUFJLEdBQUdPLEtBQUssQ0FBQ0MsR0FBTixFQUFkLEVBQTJCO0FBQ3pCLFFBQUksQ0FBQzZDLE1BQU0sR0FBR25ELFFBQVEsQ0FBQ0YsSUFBSSxDQUFDUyxJQUFOLENBQWxCLE1BQW1DOUIsQ0FBQyxHQUFHLENBQUMwRSxNQUFNLEdBQUdqRyxLQUFLLENBQUM4QixJQUFOLENBQVdtRSxNQUFYLENBQVYsRUFBOEJsRixNQUFyRSxDQUFKLEVBQWtGO0FBQ2hGNkIsTUFBQUEsSUFBSSxDQUFDRSxRQUFMLEdBQWdCbUQsTUFBaEI7O0FBQ0EsV0FBSzlGLENBQUMsR0FBR29CLENBQUMsR0FBRyxDQUFiLEVBQWdCcEIsQ0FBQyxJQUFJLENBQXJCLEVBQXdCLEVBQUVBLENBQTFCLEVBQTZCO0FBQzNCZ0QsUUFBQUEsS0FBSyxDQUFDckMsSUFBTixDQUFXa0YsS0FBSyxHQUFHQyxNQUFNLENBQUM5RixDQUFELENBQU4sR0FBWSxJQUFJNEYsSUFBSixDQUFTRSxNQUFNLENBQUM5RixDQUFELENBQWYsQ0FBL0I7QUFDQTZGLFFBQUFBLEtBQUssQ0FBQ25DLE1BQU4sR0FBZWpCLElBQWY7QUFDQW9ELFFBQUFBLEtBQUssQ0FBQ0UsS0FBTixHQUFjdEQsSUFBSSxDQUFDc0QsS0FBTCxHQUFhLENBQTNCO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8zQixJQUFJLENBQUNoQixVQUFMLENBQWdCNEMsYUFBaEIsQ0FBUDtBQUNEOztBQUVELFNBQVNDLFNBQVQsR0FBcUI7QUFDbkIsU0FBT1QsU0FBUyxDQUFDLElBQUQsQ0FBVCxDQUFnQnBDLFVBQWhCLENBQTJCOEMsUUFBM0IsQ0FBUDtBQUNEOztBQUVELFNBQVNQLGNBQVQsQ0FBd0JRLENBQXhCLEVBQTJCO0FBQ3pCLFNBQU9BLENBQUMsQ0FBQ3hELFFBQVQ7QUFDRDs7QUFFRCxTQUFTK0MsV0FBVCxDQUFxQlMsQ0FBckIsRUFBd0I7QUFDdEIsU0FBT3RHLEtBQUssQ0FBQ0MsT0FBTixDQUFjcUcsQ0FBZCxJQUFtQkEsQ0FBQyxDQUFDLENBQUQsQ0FBcEIsR0FBMEIsSUFBakM7QUFDRDs7QUFFRCxTQUFTRCxRQUFULENBQWtCekQsSUFBbEIsRUFBd0I7QUFDdEIsTUFBSUEsSUFBSSxDQUFDUyxJQUFMLENBQVVwRSxLQUFWLEtBQW9CWSxTQUF4QixFQUFtQytDLElBQUksQ0FBQzNELEtBQUwsR0FBYTJELElBQUksQ0FBQ1MsSUFBTCxDQUFVcEUsS0FBdkI7QUFDbkMyRCxFQUFBQSxJQUFJLENBQUNTLElBQUwsR0FBWVQsSUFBSSxDQUFDUyxJQUFMLENBQVVBLElBQXRCO0FBQ0Q7O0FBRU0sU0FBUzhDLGFBQVQsQ0FBdUJ2RCxJQUF2QixFQUE2QjtBQUNsQyxNQUFJMkQsTUFBTSxHQUFHLENBQWI7O0FBQ0E7QUFBRzNELElBQUFBLElBQUksQ0FBQzJELE1BQUwsR0FBY0EsTUFBZDtBQUFILFdBQ08sQ0FBQzNELElBQUksR0FBR0EsSUFBSSxDQUFDaUIsTUFBYixLQUF5QmpCLElBQUksQ0FBQzJELE1BQUwsR0FBYyxFQUFFQSxNQURoRDtBQUVEO0FBRU0sU0FBU1IsSUFBVCxDQUFjMUMsSUFBZCxFQUFvQjtBQUN6QixPQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDQSxPQUFLNkMsS0FBTCxHQUNBLEtBQUtLLE1BQUwsR0FBYyxDQURkO0FBRUEsT0FBSzFDLE1BQUwsR0FBYyxJQUFkO0FBQ0Q7QUFFRGtDLElBQUksQ0FBQ3RFLFNBQUwsR0FBaUJrRSxTQUFTLENBQUNsRSxTQUFWO0FBQ2ZHLEVBQUFBLFdBQVcsRUFBRW1FLElBREU7QUFFZnBELEVBQUFBLEtBQUssRUFBRW1DLGVBRlE7QUFHZkwsRUFBQUEsSUFBSSxFQUFFTSxJQUhTO0FBSWZoQyxFQUFBQSxTQUFTLEVBQUVrQyxTQUpJO0FBS2YxQixFQUFBQSxVQUFVLEVBQUV5QixVQUxHO0FBTWZ3QixFQUFBQSxJQUFJLEVBQUV0QixJQU5TO0FBT2ZyQyxFQUFBQSxHQUFHLEVBQUVzQyxHQVBVO0FBUWYzQixFQUFBQSxJQUFJLEVBQUU0QixJQVJTO0FBU2ZxQixFQUFBQSxJQUFJLEVBQUVwQixJQVRTO0FBVWZsQixFQUFBQSxTQUFTLEVBQUVtQixTQVZJO0FBV2ZvQixFQUFBQSxXQUFXLEVBQUVuQixXQVhFO0FBWWZqQixFQUFBQSxNQUFNLEVBQUVrQixNQVpPO0FBYWZoQixFQUFBQSxLQUFLLEVBQUVpQixLQWJRO0FBY2ZrQixFQUFBQSxJQUFJLEVBQUVQO0FBZFMsR0FlZC9GLE1BQU0sQ0FBQ0MsUUFmTyxFQWVJb0YsT0FmSixDQUFqQixDOzs7Ozs7OztBQzFFQTtBQUNBO0FBRUEsSUFBSWtCLE9BQU8sR0FBRztBQUFDVixFQUFBQSxLQUFLLEVBQUUsQ0FBQztBQUFULENBQWQ7QUFBQSxJQUNJVyxTQUFTLEdBQUcsRUFEaEI7QUFBQSxJQUVJQyxPQUFPLEdBQUcsRUFGZDs7QUFJQSxTQUFTQyxTQUFULENBQW1CVCxDQUFuQixFQUFzQjtBQUNwQixTQUFPQSxDQUFDLENBQUNVLEVBQVQ7QUFDRDs7QUFFRCxTQUFTQyxlQUFULENBQXlCWCxDQUF6QixFQUE0QjtBQUMxQixTQUFPQSxDQUFDLENBQUNZLFFBQVQ7QUFDRDs7QUFFRCw2QkFBZSx3QkFBVztBQUN4QixNQUFJRixFQUFFLEdBQUdELFNBQVQ7QUFBQSxNQUNJRyxRQUFRLEdBQUdELGVBRGY7QUFBQSxNQUVJUixJQUZKOztBQUlBLFdBQVNVLFFBQVQsQ0FBa0I5RCxJQUFsQixFQUF3QjtBQUN0QixRQUFJRixLQUFLLEdBQUduRCxLQUFLLENBQUM4QixJQUFOLENBQVd1QixJQUFYLENBQVo7QUFBQSxRQUNJK0QsU0FBUyxHQUFHSixFQURoQjtBQUFBLFFBRUlLLGVBQWUsR0FBR0gsUUFGdEI7QUFBQSxRQUdJM0YsQ0FISjtBQUFBLFFBSUkrRSxDQUpKO0FBQUEsUUFLSW5HLENBTEo7QUFBQSxRQU1Jb0UsSUFOSjtBQUFBLFFBT0lWLE1BUEo7QUFBQSxRQVFJakIsSUFSSjtBQUFBLFFBU0kwRSxNQVRKO0FBQUEsUUFVSUMsT0FWSjtBQUFBLFFBV0lDLFNBQVMsR0FBRyxJQUFJNUIsR0FBSixFQVhoQjs7QUFhQSxRQUFJYSxJQUFJLElBQUksSUFBWixFQUFrQjtBQUNoQixVQUFNZ0IsQ0FBQyxHQUFHdEUsS0FBSyxDQUFDdUUsR0FBTixDQUFVLFVBQUNwQixDQUFELEVBQUluRyxDQUFKO0FBQUEsZUFBVXdILFNBQVMsQ0FBQ2xCLElBQUksQ0FBQ0gsQ0FBRCxFQUFJbkcsQ0FBSixFQUFPa0QsSUFBUCxDQUFMLENBQW5CO0FBQUEsT0FBVixDQUFWO0FBQ0EsVUFBTXVFLENBQUMsR0FBR0gsQ0FBQyxDQUFDQyxHQUFGLENBQU1HLFFBQU4sQ0FBVjtBQUNBLFVBQU1DLENBQUMsR0FBRyxJQUFJQyxHQUFKLENBQVFOLENBQVIsRUFBV08sR0FBWCxDQUFlLEVBQWYsQ0FBVjs7QUFIZ0IseURBSUFKLENBSkE7QUFBQTs7QUFBQTtBQUloQiw0REFBbUI7QUFBQSxjQUFSekgsRUFBUTs7QUFDakIsY0FBSSxDQUFDMkgsQ0FBQyxDQUFDRyxHQUFGLENBQU05SCxFQUFOLENBQUwsRUFBZTtBQUNiMkgsWUFBQUEsQ0FBQyxDQUFDRSxHQUFGLENBQU03SCxFQUFOO0FBQ0FzSCxZQUFBQSxDQUFDLENBQUMzRyxJQUFGLENBQU9YLEVBQVA7QUFDQXlILFlBQUFBLENBQUMsQ0FBQzlHLElBQUYsQ0FBTytHLFFBQVEsQ0FBQzFILEVBQUQsQ0FBZjtBQUNBZ0QsWUFBQUEsS0FBSyxDQUFDckMsSUFBTixDQUFXZ0csT0FBWDtBQUNEO0FBQ0Y7QUFYZTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVloQk0sTUFBQUEsU0FBUyxHQUFHLG1CQUFDYyxDQUFELEVBQUkvSCxDQUFKO0FBQUEsZUFBVXNILENBQUMsQ0FBQ3RILENBQUQsQ0FBWDtBQUFBLE9BQVo7O0FBQ0FrSCxNQUFBQSxlQUFlLEdBQUcseUJBQUNhLENBQUQsRUFBSS9ILENBQUo7QUFBQSxlQUFVeUgsQ0FBQyxDQUFDekgsQ0FBRCxDQUFYO0FBQUEsT0FBbEI7QUFDRDs7QUFFRCxTQUFLQSxDQUFDLEdBQUcsQ0FBSixFQUFPb0IsQ0FBQyxHQUFHNEIsS0FBSyxDQUFDcEMsTUFBdEIsRUFBOEJaLENBQUMsR0FBR29CLENBQWxDLEVBQXFDLEVBQUVwQixDQUF2QyxFQUEwQztBQUN4Q21HLE1BQUFBLENBQUMsR0FBR25ELEtBQUssQ0FBQ2hELENBQUQsQ0FBVCxFQUFjeUMsSUFBSSxHQUFHTyxLQUFLLENBQUNoRCxDQUFELENBQUwsR0FBVyxJQUFJNEYsSUFBSixDQUFTTyxDQUFULENBQWhDOztBQUNBLFVBQUksQ0FBQ2dCLE1BQU0sR0FBR0YsU0FBUyxDQUFDZCxDQUFELEVBQUluRyxDQUFKLEVBQU9rRCxJQUFQLENBQW5CLEtBQW9DLElBQXBDLEtBQTZDaUUsTUFBTSxJQUFJLEVBQXZELENBQUosRUFBZ0U7QUFDOURDLFFBQUFBLE9BQU8sR0FBRzNFLElBQUksQ0FBQ29FLEVBQUwsR0FBVU0sTUFBcEI7QUFDQUUsUUFBQUEsU0FBUyxDQUFDVyxHQUFWLENBQWNaLE9BQWQsRUFBdUJDLFNBQVMsQ0FBQ1MsR0FBVixDQUFjVixPQUFkLElBQXlCVixTQUF6QixHQUFxQ2pFLElBQTVEO0FBQ0Q7O0FBQ0QsVUFBSSxDQUFDMEUsTUFBTSxHQUFHRCxlQUFlLENBQUNmLENBQUQsRUFBSW5HLENBQUosRUFBT2tELElBQVAsQ0FBekIsS0FBMEMsSUFBMUMsS0FBbURpRSxNQUFNLElBQUksRUFBN0QsQ0FBSixFQUFzRTtBQUNwRTFFLFFBQUFBLElBQUksQ0FBQ2lCLE1BQUwsR0FBY3lELE1BQWQ7QUFDRDtBQUNGOztBQUVELFNBQUtuSCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdvQixDQUFoQixFQUFtQixFQUFFcEIsQ0FBckIsRUFBd0I7QUFDdEJ5QyxNQUFBQSxJQUFJLEdBQUdPLEtBQUssQ0FBQ2hELENBQUQsQ0FBWjs7QUFDQSxVQUFJbUgsTUFBTSxHQUFHMUUsSUFBSSxDQUFDaUIsTUFBbEIsRUFBMEI7QUFDeEJBLFFBQUFBLE1BQU0sR0FBRzJELFNBQVMsQ0FBQ1ksR0FBVixDQUFjZCxNQUFkLENBQVQ7QUFDQSxZQUFJLENBQUN6RCxNQUFMLEVBQWEsTUFBTSxJQUFJbkIsS0FBSixDQUFVLGNBQWM0RSxNQUF4QixDQUFOO0FBQ2IsWUFBSXpELE1BQU0sS0FBS2dELFNBQWYsRUFBMEIsTUFBTSxJQUFJbkUsS0FBSixDQUFVLGdCQUFnQjRFLE1BQTFCLENBQU47QUFDMUIsWUFBSXpELE1BQU0sQ0FBQ2YsUUFBWCxFQUFxQmUsTUFBTSxDQUFDZixRQUFQLENBQWdCaEMsSUFBaEIsQ0FBcUI4QixJQUFyQixFQUFyQixLQUNLaUIsTUFBTSxDQUFDZixRQUFQLEdBQWtCLENBQUNGLElBQUQsQ0FBbEI7QUFDTEEsUUFBQUEsSUFBSSxDQUFDaUIsTUFBTCxHQUFjQSxNQUFkO0FBQ0QsT0FQRCxNQU9PO0FBQ0wsWUFBSVUsSUFBSixFQUFVLE1BQU0sSUFBSTdCLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ1Y2QixRQUFBQSxJQUFJLEdBQUczQixJQUFQO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJLENBQUMyQixJQUFMLEVBQVcsTUFBTSxJQUFJN0IsS0FBSixDQUFVLFNBQVYsQ0FBTixDQXhEVyxDQTBEdEI7QUFDQTs7QUFDQSxRQUFJK0QsSUFBSSxJQUFJLElBQVosRUFBa0I7QUFDaEIsYUFBT2xDLElBQUksQ0FBQ2xCLElBQUwsS0FBY3lELE9BQWQsSUFBeUJ2QyxJQUFJLENBQUN6QixRQUFMLENBQWMvQixNQUFkLEtBQXlCLENBQXpELEVBQTREO0FBQzFEd0QsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUN6QixRQUFMLENBQWMsQ0FBZCxDQUFQLEVBQXlCLEVBQUV2QixDQUEzQjtBQUNEOztBQUNELFdBQUssSUFBSXBCLEdBQUMsR0FBR2dELEtBQUssQ0FBQ3BDLE1BQU4sR0FBZSxDQUE1QixFQUErQlosR0FBQyxJQUFJLENBQXBDLEVBQXVDLEVBQUVBLEdBQXpDLEVBQTRDO0FBQzFDeUMsUUFBQUEsSUFBSSxHQUFHTyxLQUFLLENBQUNoRCxHQUFELENBQVo7QUFDQSxZQUFJeUMsSUFBSSxDQUFDUyxJQUFMLEtBQWN5RCxPQUFsQixFQUEyQjtBQUMzQmxFLFFBQUFBLElBQUksQ0FBQ1MsSUFBTCxHQUFZLElBQVo7QUFDRDtBQUNGOztBQUVEa0IsSUFBQUEsSUFBSSxDQUFDVixNQUFMLEdBQWMrQyxPQUFkO0FBQ0FyQyxJQUFBQSxJQUFJLENBQUNoQixVQUFMLENBQWdCLFVBQVNYLElBQVQsRUFBZTtBQUFFQSxNQUFBQSxJQUFJLENBQUNzRCxLQUFMLEdBQWF0RCxJQUFJLENBQUNpQixNQUFMLENBQVlxQyxLQUFaLEdBQW9CLENBQWpDO0FBQW9DLFFBQUUzRSxDQUFGO0FBQU0sS0FBM0UsRUFBNkVnQyxVQUE3RSxDQUF3RjRDLGFBQXhGO0FBQ0E1QixJQUFBQSxJQUFJLENBQUNWLE1BQUwsR0FBYyxJQUFkO0FBQ0EsUUFBSXRDLENBQUMsR0FBRyxDQUFSLEVBQVcsTUFBTSxJQUFJbUIsS0FBSixDQUFVLE9BQVYsQ0FBTjtBQUVYLFdBQU82QixJQUFQO0FBQ0Q7O0FBRUQ0QyxFQUFBQSxRQUFRLENBQUNILEVBQVQsR0FBYyxVQUFTcUIsQ0FBVCxFQUFZO0FBQ3hCLFdBQU8zSSxTQUFTLENBQUNxQixNQUFWLElBQW9CaUcsRUFBRSxHQUFHekUsUUFBUSxDQUFDOEYsQ0FBRCxDQUFiLEVBQWtCbEIsUUFBdEMsSUFBa0RILEVBQXpEO0FBQ0QsR0FGRDs7QUFJQUcsRUFBQUEsUUFBUSxDQUFDRCxRQUFULEdBQW9CLFVBQVNtQixDQUFULEVBQVk7QUFDOUIsV0FBTzNJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0JtRyxRQUFRLEdBQUczRSxRQUFRLENBQUM4RixDQUFELENBQW5CLEVBQXdCbEIsUUFBNUMsSUFBd0RELFFBQS9EO0FBQ0QsR0FGRDs7QUFJQUMsRUFBQUEsUUFBUSxDQUFDVixJQUFULEdBQWdCLFVBQVM0QixDQUFULEVBQVk7QUFDMUIsV0FBTzNJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0IwRixJQUFJLEdBQUdsRSxRQUFRLENBQUM4RixDQUFELENBQWYsRUFBb0JsQixRQUF4QyxJQUFvRFYsSUFBM0Q7QUFDRCxHQUZEOztBQUlBLFNBQU9VLFFBQVA7QUFDRCxFQUVEO0FBQ0E7QUFDQTs7QUFDQSxTQUFTUSxTQUFULENBQW1CbEIsSUFBbkIsRUFBeUI7QUFDdkJBLEVBQUFBLElBQUksYUFBTUEsSUFBTixDQUFKO0FBQ0EsTUFBSXRHLENBQUMsR0FBR3NHLElBQUksQ0FBQzFGLE1BQWI7QUFDQSxNQUFJdUgsS0FBSyxDQUFDN0IsSUFBRCxFQUFPdEcsQ0FBQyxHQUFHLENBQVgsQ0FBTCxJQUFzQixDQUFDbUksS0FBSyxDQUFDN0IsSUFBRCxFQUFPdEcsQ0FBQyxHQUFHLENBQVgsQ0FBaEMsRUFBK0NzRyxJQUFJLEdBQUdBLElBQUksQ0FBQzlFLEtBQUwsQ0FBVyxDQUFYLEVBQWMsQ0FBQyxDQUFmLENBQVA7QUFDL0MsU0FBTzhFLElBQUksQ0FBQyxDQUFELENBQUosS0FBWSxHQUFaLEdBQWtCQSxJQUFsQixjQUE2QkEsSUFBN0IsQ0FBUDtBQUNELEVBRUQ7QUFDQTtBQUNBOzs7QUFDQSxTQUFTb0IsUUFBVCxDQUFrQnBCLElBQWxCLEVBQXdCO0FBQ3RCLE1BQUl0RyxDQUFDLEdBQUdzRyxJQUFJLENBQUMxRixNQUFiO0FBQ0EsTUFBSVosQ0FBQyxHQUFHLENBQVIsRUFBVyxPQUFPLEVBQVA7O0FBQ1gsU0FBTyxFQUFFQSxDQUFGLEdBQU0sQ0FBYjtBQUFnQixRQUFJbUksS0FBSyxDQUFDN0IsSUFBRCxFQUFPdEcsQ0FBUCxDQUFULEVBQW9CO0FBQXBDOztBQUNBLFNBQU9zRyxJQUFJLENBQUM5RSxLQUFMLENBQVcsQ0FBWCxFQUFjeEIsQ0FBZCxDQUFQO0FBQ0QsRUFFRDtBQUNBO0FBQ0E7OztBQUNBLFNBQVNtSSxLQUFULENBQWU3QixJQUFmLEVBQXFCdEcsQ0FBckIsRUFBd0I7QUFDdEIsTUFBSXNHLElBQUksQ0FBQ3RHLENBQUQsQ0FBSixLQUFZLEdBQWhCLEVBQXFCO0FBQ25CLFFBQUkyRCxDQUFDLEdBQUcsQ0FBUjs7QUFDQSxXQUFPM0QsQ0FBQyxHQUFHLENBQUosSUFBU3NHLElBQUksQ0FBQyxFQUFFdEcsQ0FBSCxDQUFKLEtBQWMsSUFBOUI7QUFBb0MsUUFBRTJELENBQUY7QUFBcEM7O0FBQ0EsUUFBSSxDQUFDQSxDQUFDLEdBQUcsQ0FBTCxNQUFZLENBQWhCLEVBQW1CLE9BQU8sSUFBUDtBQUNwQjs7QUFDRCxTQUFPLEtBQVA7QUFDRCxDOzs7Ozs7Ozs7Ozs7QUNoSkQ7O0FBc0JBLElBQU0wRSxlQUFlO0FBQUEsd0VBQUcsaUJBQU9uRixJQUFQO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDaEJvRixZQUFBQSxTQURnQixHQUNKLElBQUk3QyxHQUFKLEVBREksRUFHdEI7O0FBSHNCLDhEQUlIdkMsSUFBSSxDQUFDRixLQUpGOztBQUFBO0FBSXRCLGtFQUErQjtBQUFwQlAsZ0JBQUFBLElBQW9CO0FBQUEsdUNBQ0ZBLElBREUsTUFDdEIwRSxNQURzQixhQUNkb0IsUUFEYztBQUU3QkQsZ0JBQUFBLFNBQVMsQ0FBQ04sR0FBVixDQUFjYixNQUFNLENBQUM1RixRQUFQLEVBQWQsRUFBaUM7QUFDL0JHLGtCQUFBQSxJQUFJLEVBQUU2RyxRQUFRLENBQUM3RyxJQURnQjtBQUUvQjhHLGtCQUFBQSxFQUFFLEVBQUVELFFBQVEsQ0FBQ0MsRUFGa0I7QUFHL0JDLGtCQUFBQSxHQUFHLEVBQUUvSSxTQUgwQjtBQUkvQmdKLGtCQUFBQSxTQUFTLEVBQUVoSjtBQUpvQixpQkFBakM7QUFNRDtBQVpxQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBLCtEQWNId0QsSUFBSSxDQUFDbUIsS0FkRjtBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBY1hzRSxZQUFBQSxJQWRXO0FBZXBCQSxZQUFBQSxJQUFJLENBQUM5QyxLQUFMLEdBQWE4QyxJQUFJLENBQUM5QyxLQUFMLENBQVd0RSxRQUFYLEVBQWI7QUFDTWdILFlBQUFBLFNBaEJjLEdBZ0JIRCxTQUFTLENBQUNMLEdBQVYsQ0FBY1UsSUFBSSxDQUFDOUMsS0FBbkIsQ0FoQkc7O0FBQUEsZ0JBaUJmMEMsU0FqQmU7QUFBQTtBQUFBO0FBQUE7O0FBQUEsa0JBa0JaLElBQUloRyxLQUFKLFdBQWFvRyxJQUFJLENBQUM5QyxLQUFsQiw0QkFsQlk7O0FBQUE7QUFvQnBCOEMsWUFBQUEsSUFBSSxDQUFDakgsSUFBTCxHQUFZNkcsU0FBUSxDQUFDN0csSUFBckI7QUFDQWlILFlBQUFBLElBQUksQ0FBQ0gsRUFBTCxHQUFVRCxTQUFRLENBQUNDLEVBQW5COztBQXJCb0I7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTtBQUFBLDZDQXdCZnRGLElBeEJlOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQWZtRixlQUFlO0FBQUE7QUFBQTtBQUFBLEdBQXJCOztBQTJCTyxJQUFNTyxhQUFhO0FBQUEseUVBQUcsa0JBQU8xRixJQUFQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBT1BtRixlQUFlLENBQUNuRixJQUFELENBUFI7O0FBQUE7QUFPckIyRixZQUFBQSxLQVBxQjtBQVNyQjdCLFlBQUFBLFFBVHFCLEdBU1ZvQixZQUFBLEdBRWR2QixFQUZjLENBRVgsVUFBQ1YsQ0FBRDtBQUFBLHFCQUFPQSxDQUFDLENBQUNOLEtBQVQ7QUFBQSxhQUZXLEVBR2RrQixRQUhjLENBR0wsVUFBQ1osQ0FBRDtBQUFBLHFCQUFPQSxDQUFDLENBQUN6QyxNQUFUO0FBQUEsYUFISyxDQVRVO0FBQUEsOENBY3BCc0QsUUFBUSxDQUFDNkIsS0FBSyxDQUFDeEUsS0FBUCxDQWRZOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQWJ1RSxhQUFhO0FBQUE7QUFBQTtBQUFBLEdBQW5CLEM7O0FDakRQLFNBQVNFLElBQVQsR0FBZ0IsQ0FBRTs7QUFFbEIsNkJBQWUsa0JBQVNDLFFBQVQsRUFBbUI7QUFDaEMsU0FBT0EsUUFBUSxJQUFJLElBQVosR0FBbUJELElBQW5CLEdBQTBCLFlBQVc7QUFDMUMsV0FBTyxLQUFLRSxhQUFMLENBQW1CRCxRQUFuQixDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDTkQ7QUFDQTtBQUVBLDZCQUFlLDBCQUFTRyxNQUFULEVBQWlCO0FBQzlCLE1BQUksT0FBT0EsTUFBUCxLQUFrQixVQUF0QixFQUFrQ0EsTUFBTSxHQUFHSCxRQUFRLENBQUNHLE1BQUQsQ0FBakI7O0FBRWxDLE9BQUssSUFBSUMsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ3ZJLE1BQXRDLEVBQThDMEksU0FBUyxHQUFHLElBQUl6SixLQUFKLENBQVV3SixDQUFWLENBQTFELEVBQXdFRSxDQUFDLEdBQUcsQ0FBakYsRUFBb0ZBLENBQUMsR0FBR0YsQ0FBeEYsRUFBMkYsRUFBRUUsQ0FBN0YsRUFBZ0c7QUFDOUYsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1Qm5JLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQWpDLEVBQXlDNkksUUFBUSxHQUFHSCxTQUFTLENBQUNDLENBQUQsQ0FBVCxHQUFlLElBQUkxSixLQUFKLENBQVV1QixDQUFWLENBQW5FLEVBQWlGcUIsSUFBakYsRUFBdUZpSCxPQUF2RixFQUFnRzFKLENBQUMsR0FBRyxDQUF6RyxFQUE0R0EsQ0FBQyxHQUFHb0IsQ0FBaEgsRUFBbUgsRUFBRXBCLENBQXJILEVBQXdIO0FBQ3RILFVBQUksQ0FBQ3lDLElBQUksR0FBRytHLEtBQUssQ0FBQ3hKLENBQUQsQ0FBYixNQUFzQjBKLE9BQU8sR0FBR1IsTUFBTSxDQUFDekksSUFBUCxDQUFZZ0MsSUFBWixFQUFrQkEsSUFBSSxDQUFDa0gsUUFBdkIsRUFBaUMzSixDQUFqQyxFQUFvQ3dKLEtBQXBDLENBQWhDLENBQUosRUFBaUY7QUFDL0UsWUFBSSxjQUFjL0csSUFBbEIsRUFBd0JpSCxPQUFPLENBQUNDLFFBQVIsR0FBbUJsSCxJQUFJLENBQUNrSCxRQUF4QjtBQUN4QkYsUUFBQUEsUUFBUSxDQUFDekosQ0FBRCxDQUFSLEdBQWMwSixPQUFkO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBSVQsU0FBSixDQUFjSyxTQUFkLEVBQXlCLEtBQUtNLFFBQTlCLENBQVA7QUFDRCxDOztBQ2hCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTQyxLQUFULENBQWUzQixDQUFmLEVBQWtCO0FBQy9CLFNBQU9BLENBQUMsSUFBSSxJQUFMLEdBQVksRUFBWixHQUFpQnJJLEtBQUssQ0FBQ0MsT0FBTixDQUFjb0ksQ0FBZCxJQUFtQkEsQ0FBbkIsR0FBdUJySSxLQUFLLENBQUM4QixJQUFOLENBQVd1RyxDQUFYLENBQS9DO0FBQ0QsQzs7QUNSRCxTQUFTNEIsS0FBVCxHQUFpQjtBQUNmLFNBQU8sRUFBUDtBQUNEOztBQUVELDZCQUFlLHFCQUFTZixRQUFULEVBQW1CO0FBQ2hDLFNBQU9BLFFBQVEsSUFBSSxJQUFaLEdBQW1CZSxLQUFuQixHQUEyQixZQUFXO0FBQzNDLFdBQU8sS0FBS0MsZ0JBQUwsQ0FBc0JoQixRQUF0QixDQUFQO0FBQ0QsR0FGRDtBQUdELEM7O0FDUkQ7QUFDQTtBQUNBOztBQUVBLFNBQVNrQixRQUFULENBQWtCZixNQUFsQixFQUEwQjtBQUN4QixTQUFPLFlBQVc7QUFDaEIsV0FBT1csS0FBSyxDQUFDWCxNQUFNLENBQUMxSixLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBRCxDQUFaO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLG1CQUFTMkosTUFBVCxFQUFpQjtBQUM5QixNQUFJLE9BQU9BLE1BQVAsS0FBa0IsVUFBdEIsRUFBa0NBLE1BQU0sR0FBR2UsUUFBUSxDQUFDZixNQUFELENBQWpCLENBQWxDLEtBQ0tBLE1BQU0sR0FBR2MsV0FBVyxDQUFDZCxNQUFELENBQXBCOztBQUVMLE9BQUssSUFBSUMsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ3ZJLE1BQXRDLEVBQThDMEksU0FBUyxHQUFHLEVBQTFELEVBQThEWSxPQUFPLEdBQUcsRUFBeEUsRUFBNEVYLENBQUMsR0FBRyxDQUFyRixFQUF3RkEsQ0FBQyxHQUFHRixDQUE1RixFQUErRixFQUFFRSxDQUFqRyxFQUFvRztBQUNsRyxTQUFLLElBQUlDLEtBQUssR0FBR0wsTUFBTSxDQUFDSSxDQUFELENBQWxCLEVBQXVCbkksQ0FBQyxHQUFHb0ksS0FBSyxDQUFDNUksTUFBakMsRUFBeUM2QixJQUF6QyxFQUErQ3pDLENBQUMsR0FBRyxDQUF4RCxFQUEyREEsQ0FBQyxHQUFHb0IsQ0FBL0QsRUFBa0UsRUFBRXBCLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUl5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWhCLEVBQXFCO0FBQ25Cc0osUUFBQUEsU0FBUyxDQUFDM0ksSUFBVixDQUFldUksTUFBTSxDQUFDekksSUFBUCxDQUFZZ0MsSUFBWixFQUFrQkEsSUFBSSxDQUFDa0gsUUFBdkIsRUFBaUMzSixDQUFqQyxFQUFvQ3dKLEtBQXBDLENBQWY7QUFDQVUsUUFBQUEsT0FBTyxDQUFDdkosSUFBUixDQUFhOEIsSUFBYjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUl3RyxTQUFKLENBQWNLLFNBQWQsRUFBeUJZLE9BQXpCLENBQVA7QUFDRCxDOztBQ3hCRCw2QkFBZSxpQkFBU25CLFFBQVQsRUFBbUI7QUFDaEMsU0FBTyxZQUFXO0FBQ2hCLFdBQU8sS0FBS29CLE9BQUwsQ0FBYXBCLFFBQWIsQ0FBUDtBQUNELEdBRkQ7QUFHRDtBQUVNLFNBQVNxQixZQUFULENBQXNCckIsUUFBdEIsRUFBZ0M7QUFDckMsU0FBTyxVQUFTdEcsSUFBVCxFQUFlO0FBQ3BCLFdBQU9BLElBQUksQ0FBQzBILE9BQUwsQ0FBYXBCLFFBQWIsQ0FBUDtBQUNELEdBRkQ7QUFHRCxDOztBQ1ZEO0FBRUEsSUFBSTFDLGdCQUFJLEdBQUd4RyxLQUFLLENBQUN5QixTQUFOLENBQWdCK0UsSUFBM0I7O0FBRUEsU0FBU2dFLFNBQVQsQ0FBbUJDLEtBQW5CLEVBQTBCO0FBQ3hCLFNBQU8sWUFBVztBQUNoQixXQUFPakUsZ0JBQUksQ0FBQzVGLElBQUwsQ0FBVSxLQUFLa0MsUUFBZixFQUF5QjJILEtBQXpCLENBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU0MsVUFBVCxHQUFzQjtBQUNwQixTQUFPLEtBQUtDLGlCQUFaO0FBQ0Q7O0FBRUQsNkJBQWUscUJBQVNGLEtBQVQsRUFBZ0I7QUFDN0IsU0FBTyxLQUFLcEIsTUFBTCxDQUFZb0IsS0FBSyxJQUFJLElBQVQsR0FBZ0JDLFVBQWhCLEdBQ2JGLFNBQVMsQ0FBQyxPQUFPQyxLQUFQLEtBQWlCLFVBQWpCLEdBQThCQSxLQUE5QixHQUFzQ0YsWUFBWSxDQUFDRSxLQUFELENBQW5ELENBRFIsQ0FBUDtBQUVELEM7O0FDakJEO0FBRUEsSUFBSUcsTUFBTSxHQUFHNUssS0FBSyxDQUFDeUIsU0FBTixDQUFnQm1KLE1BQTdCOztBQUVBLFNBQVM5SCxRQUFULEdBQW9CO0FBQ2xCLFNBQU85QyxLQUFLLENBQUM4QixJQUFOLENBQVcsS0FBS2dCLFFBQWhCLENBQVA7QUFDRDs7QUFFRCxTQUFTK0gsY0FBVCxDQUF3QkosS0FBeEIsRUFBK0I7QUFDN0IsU0FBTyxZQUFXO0FBQ2hCLFdBQU9HLE1BQU0sQ0FBQ2hLLElBQVAsQ0FBWSxLQUFLa0MsUUFBakIsRUFBMkIySCxLQUEzQixDQUFQO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLHdCQUFTQSxLQUFULEVBQWdCO0FBQzdCLFNBQU8sS0FBS0ssU0FBTCxDQUFlTCxLQUFLLElBQUksSUFBVCxHQUFnQjNILFFBQWhCLEdBQ2hCK0gsY0FBYyxDQUFDLE9BQU9KLEtBQVAsS0FBaUIsVUFBakIsR0FBOEJBLEtBQTlCLEdBQXNDRixZQUFZLENBQUNFLEtBQUQsQ0FBbkQsQ0FEYixDQUFQO0FBRUQsQzs7QUNqQkQ7QUFDQTtBQUVBLDZCQUFlLDBCQUFTQSxLQUFULEVBQWdCO0FBQzdCLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQ0EsS0FBSyxHQUFHTSxPQUFPLENBQUNOLEtBQUQsQ0FBZjs7QUFFakMsT0FBSyxJQUFJbkIsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ3ZJLE1BQXRDLEVBQThDMEksU0FBUyxHQUFHLElBQUl6SixLQUFKLENBQVV3SixDQUFWLENBQTFELEVBQXdFRSxDQUFDLEdBQUcsQ0FBakYsRUFBb0ZBLENBQUMsR0FBR0YsQ0FBeEYsRUFBMkYsRUFBRUUsQ0FBN0YsRUFBZ0c7QUFDOUYsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1Qm5JLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQWpDLEVBQXlDNkksUUFBUSxHQUFHSCxTQUFTLENBQUNDLENBQUQsQ0FBVCxHQUFlLEVBQW5FLEVBQXVFOUcsSUFBdkUsRUFBNkV6QyxDQUFDLEdBQUcsQ0FBdEYsRUFBeUZBLENBQUMsR0FBR29CLENBQTdGLEVBQWdHLEVBQUVwQixDQUFsRyxFQUFxRztBQUNuRyxVQUFJLENBQUN5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWIsS0FBcUJzSyxLQUFLLENBQUM3SixJQUFOLENBQVdnQyxJQUFYLEVBQWlCQSxJQUFJLENBQUNrSCxRQUF0QixFQUFnQzNKLENBQWhDLEVBQW1Dd0osS0FBbkMsQ0FBekIsRUFBb0U7QUFDbEVDLFFBQUFBLFFBQVEsQ0FBQzlJLElBQVQsQ0FBYzhCLElBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxJQUFJd0csU0FBSixDQUFjSyxTQUFkLEVBQXlCLEtBQUtNLFFBQTlCLENBQVA7QUFDRCxDOztBQ2ZELDZCQUFlLGdCQUFTaUIsTUFBVCxFQUFpQjtBQUM5QixTQUFPLElBQUloTCxLQUFKLENBQVVnTCxNQUFNLENBQUNqSyxNQUFqQixDQUFQO0FBQ0QsQzs7QUNGRDtBQUNBO0FBRUEsNkJBQWUsaUJBQVc7QUFDeEIsU0FBTyxJQUFJcUksU0FBSixDQUFjLEtBQUs4QixNQUFMLElBQWUsS0FBSzNCLE9BQUwsQ0FBYTdCLEdBQWIsQ0FBaUJ1RCxNQUFqQixDQUE3QixFQUF1RCxLQUFLbEIsUUFBNUQsQ0FBUDtBQUNEO0FBRU0sU0FBU29CLFNBQVQsQ0FBbUJ0SCxNQUFuQixFQUEyQnVILEtBQTNCLEVBQWtDO0FBQ3ZDLE9BQUtDLGFBQUwsR0FBcUJ4SCxNQUFNLENBQUN3SCxhQUE1QjtBQUNBLE9BQUtDLFlBQUwsR0FBb0J6SCxNQUFNLENBQUN5SCxZQUEzQjtBQUNBLE9BQUsxTSxLQUFMLEdBQWEsSUFBYjtBQUNBLE9BQUsyTSxPQUFMLEdBQWUxSCxNQUFmO0FBQ0EsT0FBS2lHLFFBQUwsR0FBZ0JzQixLQUFoQjtBQUNEO0FBRURELFNBQVMsQ0FBQzFKLFNBQVYsR0FBc0I7QUFDcEJHLEVBQUFBLFdBQVcsRUFBRXVKLFNBRE87QUFFcEJLLEVBQUFBLFdBQVcsRUFBRSxxQkFBU3hGLEtBQVQsRUFBZ0I7QUFBRSxXQUFPLEtBQUt1RixPQUFMLENBQWFFLFlBQWIsQ0FBMEJ6RixLQUExQixFQUFpQyxLQUFLcEgsS0FBdEMsQ0FBUDtBQUFzRCxHQUZqRTtBQUdwQjZNLEVBQUFBLFlBQVksRUFBRSxzQkFBU3pGLEtBQVQsRUFBZ0JuRixJQUFoQixFQUFzQjtBQUFFLFdBQU8sS0FBSzBLLE9BQUwsQ0FBYUUsWUFBYixDQUEwQnpGLEtBQTFCLEVBQWlDbkYsSUFBakMsQ0FBUDtBQUFnRCxHQUhsRTtBQUlwQnNJLEVBQUFBLGFBQWEsRUFBRSx1QkFBU0QsUUFBVCxFQUFtQjtBQUFFLFdBQU8sS0FBS3FDLE9BQUwsQ0FBYXBDLGFBQWIsQ0FBMkJELFFBQTNCLENBQVA7QUFBOEMsR0FKOUQ7QUFLcEJnQixFQUFBQSxnQkFBZ0IsRUFBRSwwQkFBU2hCLFFBQVQsRUFBbUI7QUFBRSxXQUFPLEtBQUtxQyxPQUFMLENBQWFyQixnQkFBYixDQUE4QmhCLFFBQTlCLENBQVA7QUFBaUQ7QUFMcEUsQ0FBdEIsQzs7QUNmQSw2QkFBZSxzQkFBU2IsQ0FBVCxFQUFZO0FBQ3pCLFNBQU8sWUFBVztBQUNoQixXQUFPQSxDQUFQO0FBQ0QsR0FGRDtBQUdELEM7Ozs7QUNKRDtBQUNBO0FBQ0E7O0FBRUEsU0FBU3NELFNBQVQsQ0FBbUI5SCxNQUFuQixFQUEyQjhGLEtBQTNCLEVBQWtDaUMsS0FBbEMsRUFBeUNaLE1BQXpDLEVBQWlEYSxJQUFqRCxFQUF1RHhJLElBQXZELEVBQTZEO0FBQzNELE1BQUlsRCxDQUFDLEdBQUcsQ0FBUjtBQUFBLE1BQ0l5QyxJQURKO0FBQUEsTUFFSWtKLFdBQVcsR0FBR25DLEtBQUssQ0FBQzVJLE1BRnhCO0FBQUEsTUFHSWdMLFVBQVUsR0FBRzFJLElBQUksQ0FBQ3RDLE1BSHRCLENBRDJELENBTTNEO0FBQ0E7QUFDQTs7QUFDQSxTQUFPWixDQUFDLEdBQUc0TCxVQUFYLEVBQXVCLEVBQUU1TCxDQUF6QixFQUE0QjtBQUMxQixRQUFJeUMsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUFoQixFQUFxQjtBQUNuQnlDLE1BQUFBLElBQUksQ0FBQ2tILFFBQUwsR0FBZ0J6RyxJQUFJLENBQUNsRCxDQUFELENBQXBCO0FBQ0E2SyxNQUFBQSxNQUFNLENBQUM3SyxDQUFELENBQU4sR0FBWXlDLElBQVo7QUFDRCxLQUhELE1BR087QUFDTGdKLE1BQUFBLEtBQUssQ0FBQ3pMLENBQUQsQ0FBTCxHQUFXLElBQUlnTCxTQUFKLENBQWN0SCxNQUFkLEVBQXNCUixJQUFJLENBQUNsRCxDQUFELENBQTFCLENBQVg7QUFDRDtBQUNGLEdBaEIwRCxDQWtCM0Q7OztBQUNBLFNBQU9BLENBQUMsR0FBRzJMLFdBQVgsRUFBd0IsRUFBRTNMLENBQTFCLEVBQTZCO0FBQzNCLFFBQUl5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWhCLEVBQXFCO0FBQ25CMEwsTUFBQUEsSUFBSSxDQUFDMUwsQ0FBRCxDQUFKLEdBQVV5QyxJQUFWO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVNvSixPQUFULENBQWlCbkksTUFBakIsRUFBeUI4RixLQUF6QixFQUFnQ2lDLEtBQWhDLEVBQXVDWixNQUF2QyxFQUErQ2EsSUFBL0MsRUFBcUR4SSxJQUFyRCxFQUEyRHZFLEdBQTNELEVBQWdFO0FBQzlELE1BQUlxQixDQUFKO0FBQUEsTUFDSXlDLElBREo7QUFBQSxNQUVJcUosY0FBYyxHQUFHLElBQUlyRyxHQUFKLEVBRnJCO0FBQUEsTUFHSWtHLFdBQVcsR0FBR25DLEtBQUssQ0FBQzVJLE1BSHhCO0FBQUEsTUFJSWdMLFVBQVUsR0FBRzFJLElBQUksQ0FBQ3RDLE1BSnRCO0FBQUEsTUFLSW1MLFNBQVMsR0FBRyxJQUFJbE0sS0FBSixDQUFVOEwsV0FBVixDQUxoQjtBQUFBLE1BTUlLLFFBTkosQ0FEOEQsQ0FTOUQ7QUFDQTs7QUFDQSxPQUFLaE0sQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHMkwsV0FBaEIsRUFBNkIsRUFBRTNMLENBQS9CLEVBQWtDO0FBQ2hDLFFBQUl5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWhCLEVBQXFCO0FBQ25CK0wsTUFBQUEsU0FBUyxDQUFDL0wsQ0FBRCxDQUFULEdBQWVnTSxRQUFRLEdBQUdyTixHQUFHLENBQUM4QixJQUFKLENBQVNnQyxJQUFULEVBQWVBLElBQUksQ0FBQ2tILFFBQXBCLEVBQThCM0osQ0FBOUIsRUFBaUN3SixLQUFqQyxJQUEwQyxFQUFwRTs7QUFDQSxVQUFJc0MsY0FBYyxDQUFDaEUsR0FBZixDQUFtQmtFLFFBQW5CLENBQUosRUFBa0M7QUFDaENOLFFBQUFBLElBQUksQ0FBQzFMLENBQUQsQ0FBSixHQUFVeUMsSUFBVjtBQUNELE9BRkQsTUFFTztBQUNMcUosUUFBQUEsY0FBYyxDQUFDOUQsR0FBZixDQUFtQmdFLFFBQW5CLEVBQTZCdkosSUFBN0I7QUFDRDtBQUNGO0FBQ0YsR0FwQjZELENBc0I5RDtBQUNBO0FBQ0E7OztBQUNBLE9BQUt6QyxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUc0TCxVQUFoQixFQUE0QixFQUFFNUwsQ0FBOUIsRUFBaUM7QUFDL0JnTSxJQUFBQSxRQUFRLEdBQUdyTixHQUFHLENBQUM4QixJQUFKLENBQVNpRCxNQUFULEVBQWlCUixJQUFJLENBQUNsRCxDQUFELENBQXJCLEVBQTBCQSxDQUExQixFQUE2QmtELElBQTdCLElBQXFDLEVBQWhEOztBQUNBLFFBQUlULElBQUksR0FBR3FKLGNBQWMsQ0FBQzdELEdBQWYsQ0FBbUIrRCxRQUFuQixDQUFYLEVBQXlDO0FBQ3ZDbkIsTUFBQUEsTUFBTSxDQUFDN0ssQ0FBRCxDQUFOLEdBQVl5QyxJQUFaO0FBQ0FBLE1BQUFBLElBQUksQ0FBQ2tILFFBQUwsR0FBZ0J6RyxJQUFJLENBQUNsRCxDQUFELENBQXBCO0FBQ0E4TCxNQUFBQSxjQUFjLFVBQWQsQ0FBc0JFLFFBQXRCO0FBQ0QsS0FKRCxNQUlPO0FBQ0xQLE1BQUFBLEtBQUssQ0FBQ3pMLENBQUQsQ0FBTCxHQUFXLElBQUlnTCxTQUFKLENBQWN0SCxNQUFkLEVBQXNCUixJQUFJLENBQUNsRCxDQUFELENBQTFCLENBQVg7QUFDRDtBQUNGLEdBbEM2RCxDQW9DOUQ7OztBQUNBLE9BQUtBLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBRzJMLFdBQWhCLEVBQTZCLEVBQUUzTCxDQUEvQixFQUFrQztBQUNoQyxRQUFJLENBQUN5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWIsS0FBc0I4TCxjQUFjLENBQUM3RCxHQUFmLENBQW1COEQsU0FBUyxDQUFDL0wsQ0FBRCxDQUE1QixNQUFxQ3lDLElBQS9ELEVBQXNFO0FBQ3BFaUosTUFBQUEsSUFBSSxDQUFDMUwsQ0FBRCxDQUFKLEdBQVV5QyxJQUFWO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVN3SSxLQUFULENBQWV4SSxJQUFmLEVBQXFCO0FBQ25CLFNBQU9BLElBQUksQ0FBQ2tILFFBQVo7QUFDRDs7QUFFRCw2QkFBZSxjQUFTN0ssS0FBVCxFQUFnQkgsR0FBaEIsRUFBcUI7QUFDbEMsTUFBSSxDQUFDWSxTQUFTLENBQUNxQixNQUFmLEVBQXVCLE9BQU9mLEtBQUssQ0FBQzhCLElBQU4sQ0FBVyxJQUFYLEVBQWlCc0osS0FBakIsQ0FBUDtBQUV2QixNQUFJZ0IsSUFBSSxHQUFHdE4sR0FBRyxHQUFHa04sT0FBSCxHQUFhTCxTQUEzQjtBQUFBLE1BQ0l0QixPQUFPLEdBQUcsS0FBS04sUUFEbkI7QUFBQSxNQUVJVCxNQUFNLEdBQUcsS0FBS0MsT0FGbEI7QUFJQSxNQUFJLE9BQU90SyxLQUFQLEtBQWlCLFVBQXJCLEVBQWlDQSxLQUFLLEdBQUd5TSxZQUFRLENBQUN6TSxLQUFELENBQWhCOztBQUVqQyxPQUFLLElBQUl1SyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ3ZJLE1BQWYsRUFBdUJpSyxNQUFNLEdBQUcsSUFBSWhMLEtBQUosQ0FBVXdKLENBQVYsQ0FBaEMsRUFBOENvQyxLQUFLLEdBQUcsSUFBSTVMLEtBQUosQ0FBVXdKLENBQVYsQ0FBdEQsRUFBb0VxQyxJQUFJLEdBQUcsSUFBSTdMLEtBQUosQ0FBVXdKLENBQVYsQ0FBM0UsRUFBeUZFLENBQUMsR0FBRyxDQUFsRyxFQUFxR0EsQ0FBQyxHQUFHRixDQUF6RyxFQUE0RyxFQUFFRSxDQUE5RyxFQUFpSDtBQUMvRyxRQUFJN0YsTUFBTSxHQUFHd0csT0FBTyxDQUFDWCxDQUFELENBQXBCO0FBQUEsUUFDSUMsS0FBSyxHQUFHTCxNQUFNLENBQUNJLENBQUQsQ0FEbEI7QUFBQSxRQUVJb0MsV0FBVyxHQUFHbkMsS0FBSyxDQUFDNUksTUFGeEI7QUFBQSxRQUdJc0MsSUFBSSxHQUFHZ0osU0FBUyxDQUFDcE4sS0FBSyxDQUFDMkIsSUFBTixDQUFXaUQsTUFBWCxFQUFtQkEsTUFBTSxJQUFJQSxNQUFNLENBQUNpRyxRQUFwQyxFQUE4Q0osQ0FBOUMsRUFBaURXLE9BQWpELENBQUQsQ0FIcEI7QUFBQSxRQUlJMEIsVUFBVSxHQUFHMUksSUFBSSxDQUFDdEMsTUFKdEI7QUFBQSxRQUtJdUwsVUFBVSxHQUFHVixLQUFLLENBQUNsQyxDQUFELENBQUwsR0FBVyxJQUFJMUosS0FBSixDQUFVK0wsVUFBVixDQUw1QjtBQUFBLFFBTUlRLFdBQVcsR0FBR3ZCLE1BQU0sQ0FBQ3RCLENBQUQsQ0FBTixHQUFZLElBQUkxSixLQUFKLENBQVUrTCxVQUFWLENBTjlCO0FBQUEsUUFPSVMsU0FBUyxHQUFHWCxJQUFJLENBQUNuQyxDQUFELENBQUosR0FBVSxJQUFJMUosS0FBSixDQUFVOEwsV0FBVixDQVAxQjtBQVNBTSxJQUFBQSxJQUFJLENBQUN2SSxNQUFELEVBQVM4RixLQUFULEVBQWdCMkMsVUFBaEIsRUFBNEJDLFdBQTVCLEVBQXlDQyxTQUF6QyxFQUFvRG5KLElBQXBELEVBQTBEdkUsR0FBMUQsQ0FBSixDQVYrRyxDQVkvRztBQUNBO0FBQ0E7O0FBQ0EsU0FBSyxJQUFJMk4sRUFBRSxHQUFHLENBQVQsRUFBWUMsRUFBRSxHQUFHLENBQWpCLEVBQW9CQyxRQUFwQixFQUE4QjlMLElBQW5DLEVBQXlDNEwsRUFBRSxHQUFHVixVQUE5QyxFQUEwRCxFQUFFVSxFQUE1RCxFQUFnRTtBQUM5RCxVQUFJRSxRQUFRLEdBQUdMLFVBQVUsQ0FBQ0csRUFBRCxDQUF6QixFQUErQjtBQUM3QixZQUFJQSxFQUFFLElBQUlDLEVBQVYsRUFBY0EsRUFBRSxHQUFHRCxFQUFFLEdBQUcsQ0FBVjs7QUFDZCxlQUFPLEVBQUU1TCxJQUFJLEdBQUcwTCxXQUFXLENBQUNHLEVBQUQsQ0FBcEIsS0FBNkIsRUFBRUEsRUFBRixHQUFPWCxVQUEzQztBQUFzRDtBQUF0RDs7QUFDQVksUUFBQUEsUUFBUSxDQUFDL04sS0FBVCxHQUFpQmlDLElBQUksSUFBSSxJQUF6QjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRG1LLEVBQUFBLE1BQU0sR0FBRyxJQUFJNUIsU0FBSixDQUFjNEIsTUFBZCxFQUFzQlgsT0FBdEIsQ0FBVDtBQUNBVyxFQUFBQSxNQUFNLENBQUNFLE1BQVAsR0FBZ0JVLEtBQWhCO0FBQ0FaLEVBQUFBLE1BQU0sQ0FBQzRCLEtBQVAsR0FBZWYsSUFBZjtBQUNBLFNBQU9iLE1BQVA7QUFDRCxFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTcUIsU0FBVCxDQUFtQmhKLElBQW5CLEVBQXlCO0FBQ3ZCLFNBQU8sUUFBT0EsSUFBUCxNQUFnQixRQUFoQixJQUE0QixZQUFZQSxJQUF4QyxHQUNIQSxJQURHLENBQ0U7QUFERixJQUVIckQsS0FBSyxDQUFDOEIsSUFBTixDQUFXdUIsSUFBWCxDQUZKLENBRHVCLENBR0Q7QUFDdkIsQzs7QUMvSEQ7QUFDQTtBQUVBLDZCQUFlLGdCQUFXO0FBQ3hCLFNBQU8sSUFBSStGLFNBQUosQ0FBYyxLQUFLd0QsS0FBTCxJQUFjLEtBQUtyRCxPQUFMLENBQWE3QixHQUFiLENBQWlCdUQsTUFBakIsQ0FBNUIsRUFBc0QsS0FBS2xCLFFBQTNELENBQVA7QUFDRCxDOztBQ0xELDZCQUFlLGNBQVM4QyxPQUFULEVBQWtCQyxRQUFsQixFQUE0QkMsTUFBNUIsRUFBb0M7QUFDakQsTUFBSW5CLEtBQUssR0FBRyxLQUFLQSxLQUFMLEVBQVo7QUFBQSxNQUEwQlosTUFBTSxHQUFHLElBQW5DO0FBQUEsTUFBeUNhLElBQUksR0FBRyxLQUFLQSxJQUFMLEVBQWhEOztBQUNBLE1BQUksT0FBT2dCLE9BQVAsS0FBbUIsVUFBdkIsRUFBbUM7QUFDakNqQixJQUFBQSxLQUFLLEdBQUdpQixPQUFPLENBQUNqQixLQUFELENBQWY7QUFDQSxRQUFJQSxLQUFKLEVBQVdBLEtBQUssR0FBR0EsS0FBSyxDQUFDb0IsU0FBTixFQUFSO0FBQ1osR0FIRCxNQUdPO0FBQ0xwQixJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3FCLE1BQU4sQ0FBYUosT0FBTyxHQUFHLEVBQXZCLENBQVI7QUFDRDs7QUFDRCxNQUFJQyxRQUFRLElBQUksSUFBaEIsRUFBc0I7QUFDcEI5QixJQUFBQSxNQUFNLEdBQUc4QixRQUFRLENBQUM5QixNQUFELENBQWpCO0FBQ0EsUUFBSUEsTUFBSixFQUFZQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ2dDLFNBQVAsRUFBVDtBQUNiOztBQUNELE1BQUlELE1BQU0sSUFBSSxJQUFkLEVBQW9CbEIsSUFBSSxDQUFDcUIsTUFBTCxHQUFwQixLQUF3Q0gsTUFBTSxDQUFDbEIsSUFBRCxDQUFOO0FBQ3hDLFNBQU9ELEtBQUssSUFBSVosTUFBVCxHQUFrQlksS0FBSyxDQUFDdUIsS0FBTixDQUFZbkMsTUFBWixFQUFvQm9DLEtBQXBCLEVBQWxCLEdBQWdEcEMsTUFBdkQ7QUFDRCxDOztBQ2REO0FBRUEsNkJBQWUsZUFBU3FDLE9BQVQsRUFBa0I7QUFDL0IsTUFBSUwsU0FBUyxHQUFHSyxPQUFPLENBQUNMLFNBQVIsR0FBb0JLLE9BQU8sQ0FBQ0wsU0FBUixFQUFwQixHQUEwQ0ssT0FBMUQ7O0FBRUEsT0FBSyxJQUFJQyxPQUFPLEdBQUcsS0FBSy9ELE9BQW5CLEVBQTRCZ0UsT0FBTyxHQUFHUCxTQUFTLENBQUN6RCxPQUFoRCxFQUF5RGlFLEVBQUUsR0FBR0YsT0FBTyxDQUFDdk0sTUFBdEUsRUFBOEUwTSxFQUFFLEdBQUdGLE9BQU8sQ0FBQ3hNLE1BQTNGLEVBQW1HeUksQ0FBQyxHQUFHa0UsSUFBSSxDQUFDQyxHQUFMLENBQVNILEVBQVQsRUFBYUMsRUFBYixDQUF2RyxFQUF5SEcsTUFBTSxHQUFHLElBQUk1TixLQUFKLENBQVV3TixFQUFWLENBQWxJLEVBQWlKOUQsQ0FBQyxHQUFHLENBQTFKLEVBQTZKQSxDQUFDLEdBQUdGLENBQWpLLEVBQW9LLEVBQUVFLENBQXRLLEVBQXlLO0FBQ3ZLLFNBQUssSUFBSW1FLE1BQU0sR0FBR1AsT0FBTyxDQUFDNUQsQ0FBRCxDQUFwQixFQUF5Qm9FLE1BQU0sR0FBR1AsT0FBTyxDQUFDN0QsQ0FBRCxDQUF6QyxFQUE4Q25JLENBQUMsR0FBR3NNLE1BQU0sQ0FBQzlNLE1BQXpELEVBQWlFb00sS0FBSyxHQUFHUyxNQUFNLENBQUNsRSxDQUFELENBQU4sR0FBWSxJQUFJMUosS0FBSixDQUFVdUIsQ0FBVixDQUFyRixFQUFtR3FCLElBQW5HLEVBQXlHekMsQ0FBQyxHQUFHLENBQWxILEVBQXFIQSxDQUFDLEdBQUdvQixDQUF6SCxFQUE0SCxFQUFFcEIsQ0FBOUgsRUFBaUk7QUFDL0gsVUFBSXlDLElBQUksR0FBR2lMLE1BQU0sQ0FBQzFOLENBQUQsQ0FBTixJQUFhMk4sTUFBTSxDQUFDM04sQ0FBRCxDQUE5QixFQUFtQztBQUNqQ2dOLFFBQUFBLEtBQUssQ0FBQ2hOLENBQUQsQ0FBTCxHQUFXeUMsSUFBWDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPOEcsQ0FBQyxHQUFHOEQsRUFBWCxFQUFlLEVBQUU5RCxDQUFqQixFQUFvQjtBQUNsQmtFLElBQUFBLE1BQU0sQ0FBQ2xFLENBQUQsQ0FBTixHQUFZNEQsT0FBTyxDQUFDNUQsQ0FBRCxDQUFuQjtBQUNEOztBQUVELFNBQU8sSUFBSU4sU0FBSixDQUFjd0UsTUFBZCxFQUFzQixLQUFLN0QsUUFBM0IsQ0FBUDtBQUNELEM7O0FDbEJELDZCQUFlLGlCQUFXO0FBRXhCLE9BQUssSUFBSVQsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCRyxDQUFDLEdBQUcsQ0FBQyxDQUFoQyxFQUFtQ0YsQ0FBQyxHQUFHRixNQUFNLENBQUN2SSxNQUFuRCxFQUEyRCxFQUFFMkksQ0FBRixHQUFNRixDQUFqRSxHQUFxRTtBQUNuRSxTQUFLLElBQUlHLEtBQUssR0FBR0wsTUFBTSxDQUFDSSxDQUFELENBQWxCLEVBQXVCdkosQ0FBQyxHQUFHd0osS0FBSyxDQUFDNUksTUFBTixHQUFlLENBQTFDLEVBQTZDRixJQUFJLEdBQUc4SSxLQUFLLENBQUN4SixDQUFELENBQXpELEVBQThEeUMsSUFBbkUsRUFBeUUsRUFBRXpDLENBQUYsSUFBTyxDQUFoRixHQUFvRjtBQUNsRixVQUFJeUMsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUFoQixFQUFxQjtBQUNuQixZQUFJVSxJQUFJLElBQUkrQixJQUFJLENBQUNtTCx1QkFBTCxDQUE2QmxOLElBQTdCLElBQXFDLENBQWpELEVBQW9EQSxJQUFJLENBQUNtTixVQUFMLENBQWdCdkMsWUFBaEIsQ0FBNkI3SSxJQUE3QixFQUFtQy9CLElBQW5DO0FBQ3BEQSxRQUFBQSxJQUFJLEdBQUcrQixJQUFQO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNELEM7O0FDWkQ7QUFFQSw2QkFBZSx3QkFBU1UsT0FBVCxFQUFrQjtBQUMvQixNQUFJLENBQUNBLE9BQUwsRUFBY0EsT0FBTyxHQUFHMkssU0FBVjs7QUFFZCxXQUFTQyxXQUFULENBQXFCbEssQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCO0FBQ3pCLFdBQU9ELENBQUMsSUFBSUMsQ0FBTCxHQUFTWCxPQUFPLENBQUNVLENBQUMsQ0FBQzhGLFFBQUgsRUFBYTdGLENBQUMsQ0FBQzZGLFFBQWYsQ0FBaEIsR0FBMkMsQ0FBQzlGLENBQUQsR0FBSyxDQUFDQyxDQUF4RDtBQUNEOztBQUVELE9BQUssSUFBSXFGLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkMsQ0FBQyxHQUFHRixNQUFNLENBQUN2SSxNQUF0QyxFQUE4Q29OLFVBQVUsR0FBRyxJQUFJbk8sS0FBSixDQUFVd0osQ0FBVixDQUEzRCxFQUF5RUUsQ0FBQyxHQUFHLENBQWxGLEVBQXFGQSxDQUFDLEdBQUdGLENBQXpGLEVBQTRGLEVBQUVFLENBQTlGLEVBQWlHO0FBQy9GLFNBQUssSUFBSUMsS0FBSyxHQUFHTCxNQUFNLENBQUNJLENBQUQsQ0FBbEIsRUFBdUJuSSxDQUFDLEdBQUdvSSxLQUFLLENBQUM1SSxNQUFqQyxFQUF5Q3FOLFNBQVMsR0FBR0QsVUFBVSxDQUFDekUsQ0FBRCxDQUFWLEdBQWdCLElBQUkxSixLQUFKLENBQVV1QixDQUFWLENBQXJFLEVBQW1GcUIsSUFBbkYsRUFBeUZ6QyxDQUFDLEdBQUcsQ0FBbEcsRUFBcUdBLENBQUMsR0FBR29CLENBQXpHLEVBQTRHLEVBQUVwQixDQUE5RyxFQUFpSDtBQUMvRyxVQUFJeUMsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUFoQixFQUFxQjtBQUNuQmlPLFFBQUFBLFNBQVMsQ0FBQ2pPLENBQUQsQ0FBVCxHQUFleUMsSUFBZjtBQUNEO0FBQ0Y7O0FBQ0R3TCxJQUFBQSxTQUFTLENBQUM1SyxJQUFWLENBQWUwSyxXQUFmO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJOUUsU0FBSixDQUFjK0UsVUFBZCxFQUEwQixLQUFLcEUsUUFBL0IsRUFBeUNxRCxLQUF6QyxFQUFQO0FBQ0Q7O0FBRUQsU0FBU2EsU0FBVCxDQUFtQmpLLENBQW5CLEVBQXNCQyxDQUF0QixFQUF5QjtBQUN2QixTQUFPRCxDQUFDLEdBQUdDLENBQUosR0FBUSxDQUFDLENBQVQsR0FBYUQsQ0FBQyxHQUFHQyxDQUFKLEdBQVEsQ0FBUixHQUFZRCxDQUFDLElBQUlDLENBQUwsR0FBUyxDQUFULEdBQWFvSyxHQUE3QztBQUNELEM7O0FDdkJELDZCQUFlLGdCQUFXO0FBQ3hCLE1BQUlyTCxRQUFRLEdBQUd0RCxTQUFTLENBQUMsQ0FBRCxDQUF4QjtBQUNBQSxFQUFBQSxTQUFTLENBQUMsQ0FBRCxDQUFULEdBQWUsSUFBZjtBQUNBc0QsRUFBQUEsUUFBUSxDQUFDckQsS0FBVCxDQUFlLElBQWYsRUFBcUJELFNBQXJCO0FBQ0EsU0FBTyxJQUFQO0FBQ0QsQzs7QUNMRCw2QkFBZSxpQkFBVztBQUN4QixTQUFPTSxLQUFLLENBQUM4QixJQUFOLENBQVcsSUFBWCxDQUFQO0FBQ0QsQzs7QUNGRCw2QkFBZSxnQkFBVztBQUV4QixPQUFLLElBQUl3SCxNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJHLENBQUMsR0FBRyxDQUEvQixFQUFrQ0YsQ0FBQyxHQUFHRixNQUFNLENBQUN2SSxNQUFsRCxFQUEwRDJJLENBQUMsR0FBR0YsQ0FBOUQsRUFBaUUsRUFBRUUsQ0FBbkUsRUFBc0U7QUFDcEUsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1QnZKLENBQUMsR0FBRyxDQUEzQixFQUE4Qm9CLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQTdDLEVBQXFEWixDQUFDLEdBQUdvQixDQUF6RCxFQUE0RCxFQUFFcEIsQ0FBOUQsRUFBaUU7QUFDL0QsVUFBSXlDLElBQUksR0FBRytHLEtBQUssQ0FBQ3hKLENBQUQsQ0FBaEI7QUFDQSxVQUFJeUMsSUFBSixFQUFVLE9BQU9BLElBQVA7QUFDWDtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNELEM7Ozs7Ozs7O0FDVkQsNkJBQWUsZ0JBQVc7QUFDeEIsTUFBSTBMLElBQUksR0FBRyxDQUFYOztBQUR3QixpREFFTCxJQUZLO0FBQUE7O0FBQUE7QUFFeEI7QUFBQSxVQUFXMUwsSUFBWDtBQUF5QixRQUFFMEwsSUFBRjtBQUF6QixLQUZ3QixDQUVTOztBQUZUO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBR3hCLFNBQU9BLElBQVA7QUFDRCxDOztBQ0pELDZCQUFlLDJCQUFXO0FBQ3hCLFNBQU8sQ0FBQyxLQUFLMUwsSUFBTCxFQUFSO0FBQ0QsQzs7QUNGRCw2QkFBZSx3QkFBU0ksUUFBVCxFQUFtQjtBQUVoQyxPQUFLLElBQUlzRyxNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJHLENBQUMsR0FBRyxDQUEvQixFQUFrQ0YsQ0FBQyxHQUFHRixNQUFNLENBQUN2SSxNQUFsRCxFQUEwRDJJLENBQUMsR0FBR0YsQ0FBOUQsRUFBaUUsRUFBRUUsQ0FBbkUsRUFBc0U7QUFDcEUsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1QnZKLENBQUMsR0FBRyxDQUEzQixFQUE4Qm9CLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQXhDLEVBQWdENkIsSUFBckQsRUFBMkR6QyxDQUFDLEdBQUdvQixDQUEvRCxFQUFrRSxFQUFFcEIsQ0FBcEUsRUFBdUU7QUFDckUsVUFBSXlDLElBQUksR0FBRytHLEtBQUssQ0FBQ3hKLENBQUQsQ0FBaEIsRUFBcUI2QyxRQUFRLENBQUNwQyxJQUFULENBQWNnQyxJQUFkLEVBQW9CQSxJQUFJLENBQUNrSCxRQUF6QixFQUFtQzNKLENBQW5DLEVBQXNDd0osS0FBdEM7QUFDdEI7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCxDOztBQ1RNLElBQUk0RSxLQUFLLEdBQUcsOEJBQVo7QUFFUCxpREFBZTtBQUNiQyxFQUFBQSxHQUFHLEVBQUUsNEJBRFE7QUFFYkQsRUFBQUEsS0FBSyxFQUFFQSxLQUZNO0FBR2JFLEVBQUFBLEtBQUssRUFBRSw4QkFITTtBQUliQyxFQUFBQSxHQUFHLEVBQUUsc0NBSlE7QUFLYkMsRUFBQUEsS0FBSyxFQUFFO0FBTE0sQ0FBZixFOztBQ0ZBO0FBRUEsNkJBQWUsbUJBQVM5TSxJQUFULEVBQWU7QUFDNUIsTUFBSWdOLE1BQU0sR0FBR2hOLElBQUksSUFBSSxFQUFyQjtBQUFBLE1BQXlCMUIsQ0FBQyxHQUFHME8sTUFBTSxDQUFDQyxPQUFQLENBQWUsR0FBZixDQUE3QjtBQUNBLE1BQUkzTyxDQUFDLElBQUksQ0FBTCxJQUFVLENBQUMwTyxNQUFNLEdBQUdoTixJQUFJLENBQUNGLEtBQUwsQ0FBVyxDQUFYLEVBQWN4QixDQUFkLENBQVYsTUFBZ0MsT0FBOUMsRUFBdUQwQixJQUFJLEdBQUdBLElBQUksQ0FBQ0YsS0FBTCxDQUFXeEIsQ0FBQyxHQUFHLENBQWYsQ0FBUDtBQUN2RCxTQUFPeU8seUJBQUEsQ0FBMEJDLE1BQTFCLElBQW9DO0FBQUNHLElBQUFBLEtBQUssRUFBRUosVUFBVSxDQUFDQyxNQUFELENBQWxCO0FBQTRCSSxJQUFBQSxLQUFLLEVBQUVwTjtBQUFuQyxHQUFwQyxHQUErRUEsSUFBdEYsQ0FINEIsQ0FHZ0U7QUFDN0YsQzs7QUNORDs7QUFFQSxTQUFTc04sVUFBVCxDQUFvQnROLElBQXBCLEVBQTBCO0FBQ3hCLFNBQU8sWUFBVztBQUNoQixTQUFLdU4sZUFBTCxDQUFxQnZOLElBQXJCO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVN3TixZQUFULENBQXNCQyxRQUF0QixFQUFnQztBQUM5QixTQUFPLFlBQVc7QUFDaEIsU0FBS0MsaUJBQUwsQ0FBdUJELFFBQVEsQ0FBQ04sS0FBaEMsRUFBdUNNLFFBQVEsQ0FBQ0wsS0FBaEQ7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU08sWUFBVCxDQUFzQjNOLElBQXRCLEVBQTRCNUMsS0FBNUIsRUFBbUM7QUFDakMsU0FBTyxZQUFXO0FBQ2hCLFNBQUt3USxZQUFMLENBQWtCNU4sSUFBbEIsRUFBd0I1QyxLQUF4QjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTeVEsY0FBVCxDQUF3QkosUUFBeEIsRUFBa0NyUSxLQUFsQyxFQUF5QztBQUN2QyxTQUFPLFlBQVc7QUFDaEIsU0FBSzBRLGNBQUwsQ0FBb0JMLFFBQVEsQ0FBQ04sS0FBN0IsRUFBb0NNLFFBQVEsQ0FBQ0wsS0FBN0MsRUFBb0RoUSxLQUFwRDtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTMlEsWUFBVCxDQUFzQi9OLElBQXRCLEVBQTRCNUMsS0FBNUIsRUFBbUM7QUFDakMsU0FBTyxZQUFXO0FBQ2hCLFFBQUk0USxDQUFDLEdBQUc1USxLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFSO0FBQ0EsUUFBSW1RLENBQUMsSUFBSSxJQUFULEVBQWUsS0FBS1QsZUFBTCxDQUFxQnZOLElBQXJCLEVBQWYsS0FDSyxLQUFLNE4sWUFBTCxDQUFrQjVOLElBQWxCLEVBQXdCZ08sQ0FBeEI7QUFDTixHQUpEO0FBS0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QlIsUUFBeEIsRUFBa0NyUSxLQUFsQyxFQUF5QztBQUN2QyxTQUFPLFlBQVc7QUFDaEIsUUFBSTRRLENBQUMsR0FBRzVRLEtBQUssQ0FBQ1UsS0FBTixDQUFZLElBQVosRUFBa0JELFNBQWxCLENBQVI7QUFDQSxRQUFJbVEsQ0FBQyxJQUFJLElBQVQsRUFBZSxLQUFLTixpQkFBTCxDQUF1QkQsUUFBUSxDQUFDTixLQUFoQyxFQUF1Q00sUUFBUSxDQUFDTCxLQUFoRCxFQUFmLEtBQ0ssS0FBS1UsY0FBTCxDQUFvQkwsUUFBUSxDQUFDTixLQUE3QixFQUFvQ00sUUFBUSxDQUFDTCxLQUE3QyxFQUFvRFksQ0FBcEQ7QUFDTixHQUpEO0FBS0Q7O0FBRUQsNkJBQWUsY0FBU2hPLElBQVQsRUFBZTVDLEtBQWYsRUFBc0I7QUFDbkMsTUFBSXFRLFFBQVEsR0FBR0osU0FBUyxDQUFDck4sSUFBRCxDQUF4Qjs7QUFFQSxNQUFJbkMsU0FBUyxDQUFDcUIsTUFBVixHQUFtQixDQUF2QixFQUEwQjtBQUN4QixRQUFJNkIsSUFBSSxHQUFHLEtBQUtBLElBQUwsRUFBWDtBQUNBLFdBQU8wTSxRQUFRLENBQUNMLEtBQVQsR0FDRHJNLElBQUksQ0FBQ21OLGNBQUwsQ0FBb0JULFFBQVEsQ0FBQ04sS0FBN0IsRUFBb0NNLFFBQVEsQ0FBQ0wsS0FBN0MsQ0FEQyxHQUVEck0sSUFBSSxDQUFDb04sWUFBTCxDQUFrQlYsUUFBbEIsQ0FGTjtBQUdEOztBQUVELFNBQU8sS0FBSzdLLElBQUwsQ0FBVSxDQUFDeEYsS0FBSyxJQUFJLElBQVQsR0FDWHFRLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQkksWUFBakIsR0FBZ0NGLFVBRHJCLEdBQ29DLE9BQU9sUSxLQUFQLEtBQWlCLFVBQWpCLEdBQy9DcVEsUUFBUSxDQUFDTCxLQUFULEdBQWlCYSxjQUFqQixHQUFrQ0YsWUFEYSxHQUUvQ04sUUFBUSxDQUFDTCxLQUFULEdBQWlCUyxjQUFqQixHQUFrQ0YsWUFIeEIsRUFHd0NGLFFBSHhDLEVBR2tEclEsS0FIbEQsQ0FBVixDQUFQO0FBSUQsQzs7QUN4REQsNkJBQWUsb0JBQVMyRCxJQUFULEVBQWU7QUFDNUIsU0FBUUEsSUFBSSxDQUFDeUksYUFBTCxJQUFzQnpJLElBQUksQ0FBQ3lJLGFBQUwsQ0FBbUI0RSxXQUExQyxDQUF1RDtBQUF2RCxLQUNDck4sSUFBSSxDQUFDc04sUUFBTCxJQUFpQnROLElBRGxCLENBQ3dCO0FBRHhCLEtBRUFBLElBQUksQ0FBQ3FOLFdBRlosQ0FENEIsQ0FHSDtBQUMxQixDOztBQ0pEOztBQUVBLFNBQVNFLFdBQVQsQ0FBcUJ0TyxJQUFyQixFQUEyQjtBQUN6QixTQUFPLFlBQVc7QUFDaEIsU0FBS3VPLEtBQUwsQ0FBV0MsY0FBWCxDQUEwQnhPLElBQTFCO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVN5TyxhQUFULENBQXVCek8sSUFBdkIsRUFBNkI1QyxLQUE3QixFQUFvQ3NSLFFBQXBDLEVBQThDO0FBQzVDLFNBQU8sWUFBVztBQUNoQixTQUFLSCxLQUFMLENBQVdJLFdBQVgsQ0FBdUIzTyxJQUF2QixFQUE2QjVDLEtBQTdCLEVBQW9Dc1IsUUFBcEM7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU0UsYUFBVCxDQUF1QjVPLElBQXZCLEVBQTZCNUMsS0FBN0IsRUFBb0NzUixRQUFwQyxFQUE4QztBQUM1QyxTQUFPLFlBQVc7QUFDaEIsUUFBSVYsQ0FBQyxHQUFHNVEsS0FBSyxDQUFDVSxLQUFOLENBQVksSUFBWixFQUFrQkQsU0FBbEIsQ0FBUjtBQUNBLFFBQUltUSxDQUFDLElBQUksSUFBVCxFQUFlLEtBQUtPLEtBQUwsQ0FBV0MsY0FBWCxDQUEwQnhPLElBQTFCLEVBQWYsS0FDSyxLQUFLdU8sS0FBTCxDQUFXSSxXQUFYLENBQXVCM08sSUFBdkIsRUFBNkJnTyxDQUE3QixFQUFnQ1UsUUFBaEM7QUFDTixHQUpEO0FBS0Q7O0FBRUQsNkJBQWUsZUFBUzFPLElBQVQsRUFBZTVDLEtBQWYsRUFBc0JzUixRQUF0QixFQUFnQztBQUM3QyxTQUFPN1EsU0FBUyxDQUFDcUIsTUFBVixHQUFtQixDQUFuQixHQUNELEtBQUswRCxJQUFMLENBQVUsQ0FBQ3hGLEtBQUssSUFBSSxJQUFULEdBQ0xrUixXQURLLEdBQ1MsT0FBT2xSLEtBQVAsS0FBaUIsVUFBakIsR0FDZHdSLGFBRGMsR0FFZEgsYUFISSxFQUdXek8sSUFIWCxFQUdpQjVDLEtBSGpCLEVBR3dCc1IsUUFBUSxJQUFJLElBQVosR0FBbUIsRUFBbkIsR0FBd0JBLFFBSGhELENBQVYsQ0FEQyxHQUtERyxVQUFVLENBQUMsS0FBSzlOLElBQUwsRUFBRCxFQUFjZixJQUFkLENBTGhCO0FBTUQ7QUFFTSxTQUFTNk8sVUFBVCxDQUFvQjlOLElBQXBCLEVBQTBCZixJQUExQixFQUFnQztBQUNyQyxTQUFPZSxJQUFJLENBQUN3TixLQUFMLENBQVdPLGdCQUFYLENBQTRCOU8sSUFBNUIsS0FDQW9PLFVBQVcsQ0FBQ3JOLElBQUQsQ0FBWCxDQUFrQmdPLGdCQUFsQixDQUFtQ2hPLElBQW5DLEVBQXlDLElBQXpDLEVBQStDK04sZ0JBQS9DLENBQWdFOU8sSUFBaEUsQ0FEUDtBQUVELEM7O0FDbENELFNBQVNnUCxjQUFULENBQXdCaFAsSUFBeEIsRUFBOEI7QUFDNUIsU0FBTyxZQUFXO0FBQ2hCLFdBQU8sS0FBS0EsSUFBTCxDQUFQO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNpUCxnQkFBVCxDQUEwQmpQLElBQTFCLEVBQWdDNUMsS0FBaEMsRUFBdUM7QUFDckMsU0FBTyxZQUFXO0FBQ2hCLFNBQUs0QyxJQUFMLElBQWE1QyxLQUFiO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVM4UixnQkFBVCxDQUEwQmxQLElBQTFCLEVBQWdDNUMsS0FBaEMsRUFBdUM7QUFDckMsU0FBTyxZQUFXO0FBQ2hCLFFBQUk0USxDQUFDLEdBQUc1USxLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFSO0FBQ0EsUUFBSW1RLENBQUMsSUFBSSxJQUFULEVBQWUsT0FBTyxLQUFLaE8sSUFBTCxDQUFQLENBQWYsS0FDSyxLQUFLQSxJQUFMLElBQWFnTyxDQUFiO0FBQ04sR0FKRDtBQUtEOztBQUVELDZCQUFlLGtCQUFTaE8sSUFBVCxFQUFlNUMsS0FBZixFQUFzQjtBQUNuQyxTQUFPUyxTQUFTLENBQUNxQixNQUFWLEdBQW1CLENBQW5CLEdBQ0QsS0FBSzBELElBQUwsQ0FBVSxDQUFDeEYsS0FBSyxJQUFJLElBQVQsR0FDUDRSLGNBRE8sR0FDVSxPQUFPNVIsS0FBUCxLQUFpQixVQUFqQixHQUNqQjhSLGdCQURpQixHQUVqQkQsZ0JBSE0sRUFHWWpQLElBSFosRUFHa0I1QyxLQUhsQixDQUFWLENBREMsR0FLRCxLQUFLMkQsSUFBTCxHQUFZZixJQUFaLENBTE47QUFNRCxDOztBQzNCRCxTQUFTbVAsVUFBVCxDQUFvQkMsTUFBcEIsRUFBNEI7QUFDMUIsU0FBT0EsTUFBTSxDQUFDQyxJQUFQLEdBQWNDLEtBQWQsQ0FBb0IsT0FBcEIsQ0FBUDtBQUNEOztBQUVELFNBQVNDLFNBQVQsQ0FBbUJ4TyxJQUFuQixFQUF5QjtBQUN2QixTQUFPQSxJQUFJLENBQUN3TyxTQUFMLElBQWtCLElBQUlDLFNBQUosQ0FBY3pPLElBQWQsQ0FBekI7QUFDRDs7QUFFRCxTQUFTeU8sU0FBVCxDQUFtQnpPLElBQW5CLEVBQXlCO0FBQ3ZCLE9BQUswTyxLQUFMLEdBQWExTyxJQUFiO0FBQ0EsT0FBSzJPLE1BQUwsR0FBY1AsVUFBVSxDQUFDcE8sSUFBSSxDQUFDb04sWUFBTCxDQUFrQixPQUFsQixLQUE4QixFQUEvQixDQUF4QjtBQUNEOztBQUVEcUIsU0FBUyxDQUFDNVAsU0FBVixHQUFzQjtBQUNwQnVHLEVBQUFBLEdBQUcsRUFBRSxhQUFTbkcsSUFBVCxFQUFlO0FBQ2xCLFFBQUkxQixDQUFDLEdBQUcsS0FBS29SLE1BQUwsQ0FBWXpDLE9BQVosQ0FBb0JqTixJQUFwQixDQUFSOztBQUNBLFFBQUkxQixDQUFDLEdBQUcsQ0FBUixFQUFXO0FBQ1QsV0FBS29SLE1BQUwsQ0FBWXpRLElBQVosQ0FBaUJlLElBQWpCOztBQUNBLFdBQUt5UCxLQUFMLENBQVc3QixZQUFYLENBQXdCLE9BQXhCLEVBQWlDLEtBQUs4QixNQUFMLENBQVlDLElBQVosQ0FBaUIsR0FBakIsQ0FBakM7QUFDRDtBQUNGLEdBUG1CO0FBUXBCdEUsRUFBQUEsTUFBTSxFQUFFLGdCQUFTckwsSUFBVCxFQUFlO0FBQ3JCLFFBQUkxQixDQUFDLEdBQUcsS0FBS29SLE1BQUwsQ0FBWXpDLE9BQVosQ0FBb0JqTixJQUFwQixDQUFSOztBQUNBLFFBQUkxQixDQUFDLElBQUksQ0FBVCxFQUFZO0FBQ1YsV0FBS29SLE1BQUwsQ0FBWXhOLE1BQVosQ0FBbUI1RCxDQUFuQixFQUFzQixDQUF0Qjs7QUFDQSxXQUFLbVIsS0FBTCxDQUFXN0IsWUFBWCxDQUF3QixPQUF4QixFQUFpQyxLQUFLOEIsTUFBTCxDQUFZQyxJQUFaLENBQWlCLEdBQWpCLENBQWpDO0FBQ0Q7QUFDRixHQWRtQjtBQWVwQkMsRUFBQUEsUUFBUSxFQUFFLGtCQUFTNVAsSUFBVCxFQUFlO0FBQ3ZCLFdBQU8sS0FBSzBQLE1BQUwsQ0FBWXpDLE9BQVosQ0FBb0JqTixJQUFwQixLQUE2QixDQUFwQztBQUNEO0FBakJtQixDQUF0Qjs7QUFvQkEsU0FBUzZQLFVBQVQsQ0FBb0I5TyxJQUFwQixFQUEwQitPLEtBQTFCLEVBQWlDO0FBQy9CLE1BQUlDLElBQUksR0FBR1IsU0FBUyxDQUFDeE8sSUFBRCxDQUFwQjtBQUFBLE1BQTRCekMsQ0FBQyxHQUFHLENBQUMsQ0FBakM7QUFBQSxNQUFvQ29CLENBQUMsR0FBR29RLEtBQUssQ0FBQzVRLE1BQTlDOztBQUNBLFNBQU8sRUFBRVosQ0FBRixHQUFNb0IsQ0FBYjtBQUFnQnFRLElBQUFBLElBQUksQ0FBQzVKLEdBQUwsQ0FBUzJKLEtBQUssQ0FBQ3hSLENBQUQsQ0FBZDtBQUFoQjtBQUNEOztBQUVELFNBQVMwUixhQUFULENBQXVCalAsSUFBdkIsRUFBNkIrTyxLQUE3QixFQUFvQztBQUNsQyxNQUFJQyxJQUFJLEdBQUdSLFNBQVMsQ0FBQ3hPLElBQUQsQ0FBcEI7QUFBQSxNQUE0QnpDLENBQUMsR0FBRyxDQUFDLENBQWpDO0FBQUEsTUFBb0NvQixDQUFDLEdBQUdvUSxLQUFLLENBQUM1USxNQUE5Qzs7QUFDQSxTQUFPLEVBQUVaLENBQUYsR0FBTW9CLENBQWI7QUFBZ0JxUSxJQUFBQSxJQUFJLENBQUMxRSxNQUFMLENBQVl5RSxLQUFLLENBQUN4UixDQUFELENBQWpCO0FBQWhCO0FBQ0Q7O0FBRUQsU0FBUzJSLFdBQVQsQ0FBcUJILEtBQXJCLEVBQTRCO0FBQzFCLFNBQU8sWUFBVztBQUNoQkQsSUFBQUEsVUFBVSxDQUFDLElBQUQsRUFBT0MsS0FBUCxDQUFWO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNJLFlBQVQsQ0FBc0JKLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQkUsSUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBT0YsS0FBUCxDQUFiO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNLLGVBQVQsQ0FBeUJMLEtBQXpCLEVBQWdDMVMsS0FBaEMsRUFBdUM7QUFDckMsU0FBTyxZQUFXO0FBQ2hCLEtBQUNBLEtBQUssQ0FBQ1UsS0FBTixDQUFZLElBQVosRUFBa0JELFNBQWxCLElBQStCZ1MsVUFBL0IsR0FBNENHLGFBQTdDLEVBQTRELElBQTVELEVBQWtFRixLQUFsRTtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSxpQkFBUzlQLElBQVQsRUFBZTVDLEtBQWYsRUFBc0I7QUFDbkMsTUFBSTBTLEtBQUssR0FBR1gsVUFBVSxDQUFDblAsSUFBSSxHQUFHLEVBQVIsQ0FBdEI7O0FBRUEsTUFBSW5DLFNBQVMsQ0FBQ3FCLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsUUFBSTZRLElBQUksR0FBR1IsU0FBUyxDQUFDLEtBQUt4TyxJQUFMLEVBQUQsQ0FBcEI7QUFBQSxRQUFtQ3pDLENBQUMsR0FBRyxDQUFDLENBQXhDO0FBQUEsUUFBMkNvQixDQUFDLEdBQUdvUSxLQUFLLENBQUM1USxNQUFyRDs7QUFDQSxXQUFPLEVBQUVaLENBQUYsR0FBTW9CLENBQWI7QUFBZ0IsVUFBSSxDQUFDcVEsSUFBSSxDQUFDSCxRQUFMLENBQWNFLEtBQUssQ0FBQ3hSLENBQUQsQ0FBbkIsQ0FBTCxFQUE4QixPQUFPLEtBQVA7QUFBOUM7O0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBTyxLQUFLc0UsSUFBTCxDQUFVLENBQUMsT0FBT3hGLEtBQVAsS0FBaUIsVUFBakIsR0FDWitTLGVBRFksR0FDTS9TLEtBQUssR0FDdkI2UyxXQUR1QixHQUV2QkMsWUFIVyxFQUdHSixLQUhILEVBR1UxUyxLQUhWLENBQVYsQ0FBUDtBQUlELEM7O0FDMUVELFNBQVNnVCxVQUFULEdBQXNCO0FBQ3BCLE9BQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFDRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCbFQsS0FBdEIsRUFBNkI7QUFDM0IsU0FBTyxZQUFXO0FBQ2hCLFNBQUtpVCxXQUFMLEdBQW1CalQsS0FBbkI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU21ULFlBQVQsQ0FBc0JuVCxLQUF0QixFQUE2QjtBQUMzQixTQUFPLFlBQVc7QUFDaEIsUUFBSTRRLENBQUMsR0FBRzVRLEtBQUssQ0FBQ1UsS0FBTixDQUFZLElBQVosRUFBa0JELFNBQWxCLENBQVI7QUFDQSxTQUFLd1MsV0FBTCxHQUFtQnJDLENBQUMsSUFBSSxJQUFMLEdBQVksRUFBWixHQUFpQkEsQ0FBcEM7QUFDRCxHQUhEO0FBSUQ7O0FBRUQsNkJBQWUsd0JBQVM1USxLQUFULEVBQWdCO0FBQzdCLFNBQU9TLFNBQVMsQ0FBQ3FCLE1BQVYsR0FDRCxLQUFLMEQsSUFBTCxDQUFVeEYsS0FBSyxJQUFJLElBQVQsR0FDTmdULFVBRE0sR0FDTyxDQUFDLE9BQU9oVCxLQUFQLEtBQWlCLFVBQWpCLEdBQ2RtVCxZQURjLEdBRWRELFlBRmEsRUFFQ2xULEtBRkQsQ0FEakIsQ0FEQyxHQUtELEtBQUsyRCxJQUFMLEdBQVlzUCxXQUxsQjtBQU1ELEM7O0FDeEJELFNBQVNHLFVBQVQsR0FBc0I7QUFDcEIsT0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNEOztBQUVELFNBQVNDLFlBQVQsQ0FBc0J0VCxLQUF0QixFQUE2QjtBQUMzQixTQUFPLFlBQVc7QUFDaEIsU0FBS3FULFNBQUwsR0FBaUJyVCxLQUFqQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTdVQsWUFBVCxDQUFzQnZULEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixRQUFJNFEsQ0FBQyxHQUFHNVEsS0FBSyxDQUFDVSxLQUFOLENBQVksSUFBWixFQUFrQkQsU0FBbEIsQ0FBUjtBQUNBLFNBQUs0UyxTQUFMLEdBQWlCekMsQ0FBQyxJQUFJLElBQUwsR0FBWSxFQUFaLEdBQWlCQSxDQUFsQztBQUNELEdBSEQ7QUFJRDs7QUFFRCw2QkFBZSxjQUFTNVEsS0FBVCxFQUFnQjtBQUM3QixTQUFPUyxTQUFTLENBQUNxQixNQUFWLEdBQ0QsS0FBSzBELElBQUwsQ0FBVXhGLEtBQUssSUFBSSxJQUFULEdBQ05vVCxVQURNLEdBQ08sQ0FBQyxPQUFPcFQsS0FBUCxLQUFpQixVQUFqQixHQUNkdVQsWUFEYyxHQUVkRCxZQUZhLEVBRUN0VCxLQUZELENBRGpCLENBREMsR0FLRCxLQUFLMkQsSUFBTCxHQUFZMFAsU0FMbEI7QUFNRCxDOztBQ3hCRCxTQUFTRyxLQUFULEdBQWlCO0FBQ2YsTUFBSSxLQUFLQyxXQUFULEVBQXNCLEtBQUsxRSxVQUFMLENBQWdCeEMsV0FBaEIsQ0FBNEIsSUFBNUI7QUFDdkI7O0FBRUQsNkJBQWUsMkJBQVc7QUFDeEIsU0FBTyxLQUFLL0csSUFBTCxDQUFVZ08sS0FBVixDQUFQO0FBQ0QsQzs7QUNORCxTQUFTRSxLQUFULEdBQWlCO0FBQ2YsTUFBSSxLQUFLQyxlQUFULEVBQTBCLEtBQUs1RSxVQUFMLENBQWdCdkMsWUFBaEIsQ0FBNkIsSUFBN0IsRUFBbUMsS0FBS3VDLFVBQUwsQ0FBZ0I2RSxVQUFuRDtBQUMzQjs7QUFFRCw2QkFBZSwyQkFBVztBQUN4QixTQUFPLEtBQUtwTyxJQUFMLENBQVVrTyxLQUFWLENBQVA7QUFDRCxDOztBQ05EO0FBQ0E7O0FBRUEsU0FBU0csY0FBVCxDQUF3QmpSLElBQXhCLEVBQThCO0FBQzVCLFNBQU8sWUFBVztBQUNoQixRQUFJcU8sUUFBUSxHQUFHLEtBQUs3RSxhQUFwQjtBQUFBLFFBQ0kwSCxHQUFHLEdBQUcsS0FBS3pILFlBRGY7QUFFQSxXQUFPeUgsR0FBRyxLQUFLeEUsS0FBUixJQUFpQjJCLFFBQVEsQ0FBQzhDLGVBQVQsQ0FBeUIxSCxZQUF6QixLQUEwQ2lELEtBQTNELEdBQ0QyQixRQUFRLENBQUMrQyxhQUFULENBQXVCcFIsSUFBdkIsQ0FEQyxHQUVEcU8sUUFBUSxDQUFDZ0QsZUFBVCxDQUF5QkgsR0FBekIsRUFBOEJsUixJQUE5QixDQUZOO0FBR0QsR0FORDtBQU9EOztBQUVELFNBQVNzUixZQUFULENBQXNCN0QsUUFBdEIsRUFBZ0M7QUFDOUIsU0FBTyxZQUFXO0FBQ2hCLFdBQU8sS0FBS2pFLGFBQUwsQ0FBbUI2SCxlQUFuQixDQUFtQzVELFFBQVEsQ0FBQ04sS0FBNUMsRUFBbURNLFFBQVEsQ0FBQ0wsS0FBNUQsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSxpQkFBU3BOLElBQVQsRUFBZTtBQUM1QixNQUFJeU4sUUFBUSxHQUFHSixTQUFTLENBQUNyTixJQUFELENBQXhCO0FBQ0EsU0FBTyxDQUFDeU4sUUFBUSxDQUFDTCxLQUFULEdBQ0ZrRSxZQURFLEdBRUZMLGNBRkMsRUFFZXhELFFBRmYsQ0FBUDtBQUdELEM7O0FDeEJEO0FBRUEsNkJBQWUsZ0JBQVN6TixJQUFULEVBQWU7QUFDNUIsTUFBSXdSLE1BQU0sR0FBRyxPQUFPeFIsSUFBUCxLQUFnQixVQUFoQixHQUE2QkEsSUFBN0IsR0FBb0N1UixPQUFPLENBQUN2UixJQUFELENBQXhEO0FBQ0EsU0FBTyxLQUFLd0gsTUFBTCxDQUFZLFlBQVc7QUFDNUIsV0FBTyxLQUFLbUMsV0FBTCxDQUFpQjZILE1BQU0sQ0FBQzFULEtBQVAsQ0FBYSxJQUFiLEVBQW1CRCxTQUFuQixDQUFqQixDQUFQO0FBQ0QsR0FGTSxDQUFQO0FBR0QsQzs7QUNQRDtBQUNBOztBQUVBLFNBQVM0VCxZQUFULEdBQXdCO0FBQ3RCLFNBQU8sSUFBUDtBQUNEOztBQUVELDZCQUFlLGdCQUFTelIsSUFBVCxFQUFlMFIsTUFBZixFQUF1QjtBQUNwQyxNQUFJRixNQUFNLEdBQUcsT0FBT3hSLElBQVAsS0FBZ0IsVUFBaEIsR0FBNkJBLElBQTdCLEdBQW9DdVIsT0FBTyxDQUFDdlIsSUFBRCxDQUF4RDtBQUFBLE1BQ0l3SCxNQUFNLEdBQUdrSyxNQUFNLElBQUksSUFBVixHQUFpQkQsWUFBakIsR0FBZ0MsT0FBT0MsTUFBUCxLQUFrQixVQUFsQixHQUErQkEsTUFBL0IsR0FBd0NySyxRQUFRLENBQUNxSyxNQUFELENBRDdGO0FBRUEsU0FBTyxLQUFLbEssTUFBTCxDQUFZLFlBQVc7QUFDNUIsV0FBTyxLQUFLb0MsWUFBTCxDQUFrQjRILE1BQU0sQ0FBQzFULEtBQVAsQ0FBYSxJQUFiLEVBQW1CRCxTQUFuQixDQUFsQixFQUFpRDJKLE1BQU0sQ0FBQzFKLEtBQVAsQ0FBYSxJQUFiLEVBQW1CRCxTQUFuQixLQUFpQyxJQUFsRixDQUFQO0FBQ0QsR0FGTSxDQUFQO0FBR0QsQzs7QUNiRCxTQUFTd04sTUFBVCxHQUFrQjtBQUNoQixNQUFJckosTUFBTSxHQUFHLEtBQUttSyxVQUFsQjtBQUNBLE1BQUluSyxNQUFKLEVBQVlBLE1BQU0sQ0FBQzJQLFdBQVAsQ0FBbUIsSUFBbkI7QUFDYjs7QUFFRCw2QkFBZSw0QkFBVztBQUN4QixTQUFPLEtBQUsvTyxJQUFMLENBQVV5SSxNQUFWLENBQVA7QUFDRCxDOztBQ1BELFNBQVN1RyxzQkFBVCxHQUFrQztBQUNoQyxNQUFJQyxLQUFLLEdBQUcsS0FBS0MsU0FBTCxDQUFlLEtBQWYsQ0FBWjtBQUFBLE1BQW1DOVAsTUFBTSxHQUFHLEtBQUttSyxVQUFqRDtBQUNBLFNBQU9uSyxNQUFNLEdBQUdBLE1BQU0sQ0FBQzRILFlBQVAsQ0FBb0JpSSxLQUFwQixFQUEyQixLQUFLaEIsV0FBaEMsQ0FBSCxHQUFrRGdCLEtBQS9EO0FBQ0Q7O0FBRUQsU0FBU0UsbUJBQVQsR0FBK0I7QUFDN0IsTUFBSUYsS0FBSyxHQUFHLEtBQUtDLFNBQUwsQ0FBZSxJQUFmLENBQVo7QUFBQSxNQUFrQzlQLE1BQU0sR0FBRyxLQUFLbUssVUFBaEQ7QUFDQSxTQUFPbkssTUFBTSxHQUFHQSxNQUFNLENBQUM0SCxZQUFQLENBQW9CaUksS0FBcEIsRUFBMkIsS0FBS2hCLFdBQWhDLENBQUgsR0FBa0RnQixLQUEvRDtBQUNEOztBQUVELDZCQUFlLGVBQVNHLElBQVQsRUFBZTtBQUM1QixTQUFPLEtBQUt4SyxNQUFMLENBQVl3SyxJQUFJLEdBQUdELG1CQUFILEdBQXlCSCxzQkFBekMsQ0FBUDtBQUNELEM7O0FDWkQsNkJBQWUseUJBQVN4VSxLQUFULEVBQWdCO0FBQzdCLFNBQU9TLFNBQVMsQ0FBQ3FCLE1BQVYsR0FDRCxLQUFLK1MsUUFBTCxDQUFjLFVBQWQsRUFBMEI3VSxLQUExQixDQURDLEdBRUQsS0FBSzJELElBQUwsR0FBWWtILFFBRmxCO0FBR0QsQzs7QUNKRCxTQUFTaUssZUFBVCxDQUF5QkMsUUFBekIsRUFBbUM7QUFDakMsU0FBTyxVQUFTQyxLQUFULEVBQWdCO0FBQ3JCRCxJQUFBQSxRQUFRLENBQUNwVCxJQUFULENBQWMsSUFBZCxFQUFvQnFULEtBQXBCLEVBQTJCLEtBQUtuSyxRQUFoQztBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTb0ssY0FBVCxDQUF3QkMsU0FBeEIsRUFBbUM7QUFDakMsU0FBT0EsU0FBUyxDQUFDakQsSUFBVixHQUFpQkMsS0FBakIsQ0FBdUIsT0FBdkIsRUFBZ0N6SixHQUFoQyxDQUFvQyxVQUFTME0sQ0FBVCxFQUFZO0FBQ3JELFFBQUl2UyxJQUFJLEdBQUcsRUFBWDtBQUFBLFFBQWUxQixDQUFDLEdBQUdpVSxDQUFDLENBQUN0RixPQUFGLENBQVUsR0FBVixDQUFuQjtBQUNBLFFBQUkzTyxDQUFDLElBQUksQ0FBVCxFQUFZMEIsSUFBSSxHQUFHdVMsQ0FBQyxDQUFDelMsS0FBRixDQUFReEIsQ0FBQyxHQUFHLENBQVosQ0FBUCxFQUF1QmlVLENBQUMsR0FBR0EsQ0FBQyxDQUFDelMsS0FBRixDQUFRLENBQVIsRUFBV3hCLENBQVgsQ0FBM0I7QUFDWixXQUFPO0FBQUNrVSxNQUFBQSxJQUFJLEVBQUVELENBQVA7QUFBVXZTLE1BQUFBLElBQUksRUFBRUE7QUFBaEIsS0FBUDtBQUNELEdBSk0sQ0FBUDtBQUtEOztBQUVELFNBQVN5UyxRQUFULENBQWtCQyxRQUFsQixFQUE0QjtBQUMxQixTQUFPLFlBQVc7QUFDaEIsUUFBSUMsRUFBRSxHQUFHLEtBQUtDLElBQWQ7QUFDQSxRQUFJLENBQUNELEVBQUwsRUFBUzs7QUFDVCxTQUFLLElBQUk5SyxDQUFDLEdBQUcsQ0FBUixFQUFXdkosQ0FBQyxHQUFHLENBQUMsQ0FBaEIsRUFBbUJxSixDQUFDLEdBQUdnTCxFQUFFLENBQUN6VCxNQUExQixFQUFrQ00sQ0FBdkMsRUFBMENxSSxDQUFDLEdBQUdGLENBQTlDLEVBQWlELEVBQUVFLENBQW5ELEVBQXNEO0FBQ3BELFVBQUlySSxDQUFDLEdBQUdtVCxFQUFFLENBQUM5SyxDQUFELENBQU4sRUFBVyxDQUFDLENBQUM2SyxRQUFRLENBQUNGLElBQVYsSUFBa0JoVCxDQUFDLENBQUNnVCxJQUFGLEtBQVdFLFFBQVEsQ0FBQ0YsSUFBdkMsS0FBZ0RoVCxDQUFDLENBQUNRLElBQUYsS0FBVzBTLFFBQVEsQ0FBQzFTLElBQW5GLEVBQXlGO0FBQ3ZGLGFBQUs2UyxtQkFBTCxDQUF5QnJULENBQUMsQ0FBQ2dULElBQTNCLEVBQWlDaFQsQ0FBQyxDQUFDMlMsUUFBbkMsRUFBNkMzUyxDQUFDLENBQUNzVCxPQUEvQztBQUNELE9BRkQsTUFFTztBQUNMSCxRQUFBQSxFQUFFLENBQUMsRUFBRXJVLENBQUgsQ0FBRixHQUFVa0IsQ0FBVjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSSxFQUFFbEIsQ0FBTixFQUFTcVUsRUFBRSxDQUFDelQsTUFBSCxHQUFZWixDQUFaLENBQVQsS0FDSyxPQUFPLEtBQUtzVSxJQUFaO0FBQ04sR0FaRDtBQWFEOztBQUVELFNBQVNHLEtBQVQsQ0FBZUwsUUFBZixFQUF5QnRWLEtBQXpCLEVBQWdDMFYsT0FBaEMsRUFBeUM7QUFDdkMsU0FBTyxZQUFXO0FBQ2hCLFFBQUlILEVBQUUsR0FBRyxLQUFLQyxJQUFkO0FBQUEsUUFBb0JwVCxDQUFwQjtBQUFBLFFBQXVCMlMsUUFBUSxHQUFHRCxlQUFlLENBQUM5VSxLQUFELENBQWpEO0FBQ0EsUUFBSXVWLEVBQUosRUFBUSxLQUFLLElBQUk5SyxDQUFDLEdBQUcsQ0FBUixFQUFXRixDQUFDLEdBQUdnTCxFQUFFLENBQUN6VCxNQUF2QixFQUErQjJJLENBQUMsR0FBR0YsQ0FBbkMsRUFBc0MsRUFBRUUsQ0FBeEMsRUFBMkM7QUFDakQsVUFBSSxDQUFDckksQ0FBQyxHQUFHbVQsRUFBRSxDQUFDOUssQ0FBRCxDQUFQLEVBQVkySyxJQUFaLEtBQXFCRSxRQUFRLENBQUNGLElBQTlCLElBQXNDaFQsQ0FBQyxDQUFDUSxJQUFGLEtBQVcwUyxRQUFRLENBQUMxUyxJQUE5RCxFQUFvRTtBQUNsRSxhQUFLNlMsbUJBQUwsQ0FBeUJyVCxDQUFDLENBQUNnVCxJQUEzQixFQUFpQ2hULENBQUMsQ0FBQzJTLFFBQW5DLEVBQTZDM1MsQ0FBQyxDQUFDc1QsT0FBL0M7QUFDQSxhQUFLRSxnQkFBTCxDQUFzQnhULENBQUMsQ0FBQ2dULElBQXhCLEVBQThCaFQsQ0FBQyxDQUFDMlMsUUFBRixHQUFhQSxRQUEzQyxFQUFxRDNTLENBQUMsQ0FBQ3NULE9BQUYsR0FBWUEsT0FBakU7QUFDQXRULFFBQUFBLENBQUMsQ0FBQ3BDLEtBQUYsR0FBVUEsS0FBVjtBQUNBO0FBQ0Q7QUFDRjtBQUNELFNBQUs0VixnQkFBTCxDQUFzQk4sUUFBUSxDQUFDRixJQUEvQixFQUFxQ0wsUUFBckMsRUFBK0NXLE9BQS9DO0FBQ0F0VCxJQUFBQSxDQUFDLEdBQUc7QUFBQ2dULE1BQUFBLElBQUksRUFBRUUsUUFBUSxDQUFDRixJQUFoQjtBQUFzQnhTLE1BQUFBLElBQUksRUFBRTBTLFFBQVEsQ0FBQzFTLElBQXJDO0FBQTJDNUMsTUFBQUEsS0FBSyxFQUFFQSxLQUFsRDtBQUF5RCtVLE1BQUFBLFFBQVEsRUFBRUEsUUFBbkU7QUFBNkVXLE1BQUFBLE9BQU8sRUFBRUE7QUFBdEYsS0FBSjtBQUNBLFFBQUksQ0FBQ0gsRUFBTCxFQUFTLEtBQUtDLElBQUwsR0FBWSxDQUFDcFQsQ0FBRCxDQUFaLENBQVQsS0FDS21ULEVBQUUsQ0FBQzFULElBQUgsQ0FBUU8sQ0FBUjtBQUNOLEdBZEQ7QUFlRDs7QUFFRCw2QkFBZSxZQUFTa1QsUUFBVCxFQUFtQnRWLEtBQW5CLEVBQTBCMFYsT0FBMUIsRUFBbUM7QUFDaEQsTUFBSVIsU0FBUyxHQUFHRCxjQUFjLENBQUNLLFFBQVEsR0FBRyxFQUFaLENBQTlCO0FBQUEsTUFBK0NwVSxDQUEvQztBQUFBLE1BQWtEb0IsQ0FBQyxHQUFHNFMsU0FBUyxDQUFDcFQsTUFBaEU7QUFBQSxNQUF3RXFULENBQXhFOztBQUVBLE1BQUkxVSxTQUFTLENBQUNxQixNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFFBQUl5VCxFQUFFLEdBQUcsS0FBSzVSLElBQUwsR0FBWTZSLElBQXJCOztBQUNBLFFBQUlELEVBQUosRUFBUSxLQUFLLElBQUk5SyxDQUFDLEdBQUcsQ0FBUixFQUFXRixDQUFDLEdBQUdnTCxFQUFFLENBQUN6VCxNQUFsQixFQUEwQk0sQ0FBL0IsRUFBa0NxSSxDQUFDLEdBQUdGLENBQXRDLEVBQXlDLEVBQUVFLENBQTNDLEVBQThDO0FBQ3BELFdBQUt2SixDQUFDLEdBQUcsQ0FBSixFQUFPa0IsQ0FBQyxHQUFHbVQsRUFBRSxDQUFDOUssQ0FBRCxDQUFsQixFQUF1QnZKLENBQUMsR0FBR29CLENBQTNCLEVBQThCLEVBQUVwQixDQUFoQyxFQUFtQztBQUNqQyxZQUFJLENBQUNpVSxDQUFDLEdBQUdELFNBQVMsQ0FBQ2hVLENBQUQsQ0FBZCxFQUFtQmtVLElBQW5CLEtBQTRCaFQsQ0FBQyxDQUFDZ1QsSUFBOUIsSUFBc0NELENBQUMsQ0FBQ3ZTLElBQUYsS0FBV1IsQ0FBQyxDQUFDUSxJQUF2RCxFQUE2RDtBQUMzRCxpQkFBT1IsQ0FBQyxDQUFDcEMsS0FBVDtBQUNEO0FBQ0Y7QUFDRjtBQUNEO0FBQ0Q7O0FBRUR1VixFQUFBQSxFQUFFLEdBQUd2VixLQUFLLEdBQUcyVixLQUFILEdBQVdOLFFBQXJCOztBQUNBLE9BQUtuVSxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdvQixDQUFoQixFQUFtQixFQUFFcEIsQ0FBckI7QUFBd0IsU0FBS3NFLElBQUwsQ0FBVStQLEVBQUUsQ0FBQ0wsU0FBUyxDQUFDaFUsQ0FBRCxDQUFWLEVBQWVsQixLQUFmLEVBQXNCMFYsT0FBdEIsQ0FBWjtBQUF4Qjs7QUFDQSxTQUFPLElBQVA7QUFDRCxDOztBQ2xFRDs7QUFFQSxTQUFTRyxhQUFULENBQXVCbFMsSUFBdkIsRUFBNkJ5UixJQUE3QixFQUFtQ1UsTUFBbkMsRUFBMkM7QUFDekMsTUFBSUMsTUFBTSxHQUFHL0UsVUFBVyxDQUFDck4sSUFBRCxDQUF4QjtBQUFBLE1BQ0lxUixLQUFLLEdBQUdlLE1BQU0sQ0FBQ0MsV0FEbkI7O0FBR0EsTUFBSSxPQUFPaEIsS0FBUCxLQUFpQixVQUFyQixFQUFpQztBQUMvQkEsSUFBQUEsS0FBSyxHQUFHLElBQUlBLEtBQUosQ0FBVUksSUFBVixFQUFnQlUsTUFBaEIsQ0FBUjtBQUNELEdBRkQsTUFFTztBQUNMZCxJQUFBQSxLQUFLLEdBQUdlLE1BQU0sQ0FBQzlFLFFBQVAsQ0FBZ0JnRixXQUFoQixDQUE0QixPQUE1QixDQUFSO0FBQ0EsUUFBSUgsTUFBSixFQUFZZCxLQUFLLENBQUNrQixTQUFOLENBQWdCZCxJQUFoQixFQUFzQlUsTUFBTSxDQUFDSyxPQUE3QixFQUFzQ0wsTUFBTSxDQUFDTSxVQUE3QyxHQUEwRHBCLEtBQUssQ0FBQ3FCLE1BQU4sR0FBZVAsTUFBTSxDQUFDTyxNQUFoRixDQUFaLEtBQ0tyQixLQUFLLENBQUNrQixTQUFOLENBQWdCZCxJQUFoQixFQUFzQixLQUF0QixFQUE2QixLQUE3QjtBQUNOOztBQUVEelIsRUFBQUEsSUFBSSxDQUFDa1MsYUFBTCxDQUFtQmIsS0FBbkI7QUFDRDs7QUFFRCxTQUFTc0IsZ0JBQVQsQ0FBMEJsQixJQUExQixFQUFnQ1UsTUFBaEMsRUFBd0M7QUFDdEMsU0FBTyxZQUFXO0FBQ2hCLFdBQU9ELGFBQWEsQ0FBQyxJQUFELEVBQU9ULElBQVAsRUFBYVUsTUFBYixDQUFwQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTUyxnQkFBVCxDQUEwQm5CLElBQTFCLEVBQWdDVSxNQUFoQyxFQUF3QztBQUN0QyxTQUFPLFlBQVc7QUFDaEIsV0FBT0QsYUFBYSxDQUFDLElBQUQsRUFBT1QsSUFBUCxFQUFhVSxNQUFNLENBQUNwVixLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBYixDQUFwQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSw0QkFBUzJVLElBQVQsRUFBZVUsTUFBZixFQUF1QjtBQUNwQyxTQUFPLEtBQUt0USxJQUFMLENBQVUsQ0FBQyxPQUFPc1EsTUFBUCxLQUFrQixVQUFsQixHQUNaUyxnQkFEWSxHQUVaRCxnQkFGVyxFQUVPbEIsSUFGUCxFQUVhVSxNQUZiLENBQVYsQ0FBUDtBQUdELEM7Ozs7QUNqQ2M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0p6TCxVQUFBQSxNQURJLEdBQ0ssS0FBS0MsT0FEVixFQUNtQkcsQ0FEbkIsR0FDdUIsQ0FEdkIsRUFDMEJGLENBRDFCLEdBQzhCRixNQUFNLENBQUN2SSxNQURyQzs7QUFBQTtBQUFBLGdCQUM2QzJJLENBQUMsR0FBR0YsQ0FEakQ7QUFBQTtBQUFBO0FBQUE7O0FBRUZHLFVBQUFBLEtBRkUsR0FFTUwsTUFBTSxDQUFDSSxDQUFELENBRlosRUFFaUJ2SixDQUZqQixHQUVxQixDQUZyQixFQUV3Qm9CLENBRnhCLEdBRTRCb0ksS0FBSyxDQUFDNUksTUFGbEM7O0FBQUE7QUFBQSxnQkFFZ0RaLENBQUMsR0FBR29CLENBRnBEO0FBQUE7QUFBQTtBQUFBOztBQUFBLGdCQUdMcUIsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUhQO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBR1ksaUJBQU15QyxJQUFOOztBQUhaO0FBRXVELFlBQUV6QyxDQUZ6RDtBQUFBO0FBQUE7O0FBQUE7QUFDb0QsWUFBRXVKLENBRHREO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxDOzs7O0FDQWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFTyxJQUFJbkYsSUFBSSxHQUFHLENBQUMsSUFBRCxDQUFYO0FBRUEsU0FBUzZFLFNBQVQsQ0FBbUJFLE1BQW5CLEVBQTJCZSxPQUEzQixFQUFvQztBQUN6QyxPQUFLZCxPQUFMLEdBQWVELE1BQWY7QUFDQSxPQUFLUyxRQUFMLEdBQWdCTSxPQUFoQjtBQUNEOztBQUVELFNBQVMyQyxTQUFULEdBQXFCO0FBQ25CLFNBQU8sSUFBSTVELFNBQUosQ0FBYyxDQUFDLENBQUM4RyxRQUFRLENBQUM4QyxlQUFWLENBQUQsQ0FBZCxFQUE0Q3pPLElBQTVDLENBQVA7QUFDRDs7QUFFRCxTQUFTb1QsbUJBQVQsR0FBK0I7QUFDN0IsU0FBTyxJQUFQO0FBQ0Q7O0FBRUR2TyxTQUFTLENBQUMzSCxTQUFWLEdBQXNCdUwsU0FBUyxDQUFDdkwsU0FBVjtBQUNwQkcsRUFBQUEsV0FBVyxFQUFFd0gsU0FETztBQUVwQkMsRUFBQUEsTUFBTSxFQUFFb00sZ0JBRlk7QUFHcEIzSyxFQUFBQSxTQUFTLEVBQUU0SyxTQUhTO0FBSXBCa0MsRUFBQUEsV0FBVyxFQUFFakMsV0FKTztBQUtwQmtDLEVBQUFBLGNBQWMsRUFBRWpDLGNBTEk7QUFNcEJoTCxFQUFBQSxNQUFNLEVBQUVpTCxnQkFOWTtBQU9wQnhTLEVBQUFBLElBQUksRUFBRXlTLElBUGM7QUFRcEJsSyxFQUFBQSxLQUFLLEVBQUVtSyxLQVJhO0FBU3BCbEssRUFBQUEsSUFBSSxFQUFFbUssSUFUYztBQVVwQnhFLEVBQUFBLElBQUksRUFBRXlFLElBVmM7QUFXcEI5SSxFQUFBQSxLQUFLLEVBQUUrSSxLQVhhO0FBWXBCbEosRUFBQUEsU0FBUyxFQUFFMkssbUJBWlM7QUFhcEJ2SyxFQUFBQSxLQUFLLEVBQUUrSSxLQWJhO0FBY3BCM1MsRUFBQUEsSUFBSSxFQUFFNFMsY0FkYztBQWVwQnhWLEVBQUFBLElBQUksRUFBRXlWLElBZmM7QUFnQnBCbFQsRUFBQUEsS0FBSyxFQUFFbVQsS0FoQmE7QUFpQnBCMVQsRUFBQUEsSUFBSSxFQUFFMlQsSUFqQmM7QUFrQnBCakksRUFBQUEsSUFBSSxFQUFFa0ksSUFsQmM7QUFtQnBCdk0sRUFBQUEsS0FBSyxFQUFFd00sZUFuQmE7QUFvQnBCaFMsRUFBQUEsSUFBSSxFQUFFaVMsY0FwQmM7QUFxQnBCb0IsRUFBQUEsSUFBSSxFQUFFbkIsSUFyQmM7QUFzQnBCdkcsRUFBQUEsS0FBSyxFQUFFd0csS0F0QmE7QUF1QnBCOUMsRUFBQUEsUUFBUSxFQUFFK0MsUUF2QlU7QUF3QnBCa0IsRUFBQUEsT0FBTyxFQUFFakIsT0F4Qlc7QUF5QnBCa0IsRUFBQUEsSUFBSSxFQUFFakIsY0F6QmM7QUEwQnBCa0IsRUFBQUEsSUFBSSxFQUFFakIsSUExQmM7QUEyQnBCdkUsRUFBQUEsS0FBSyxFQUFFd0UsZUEzQmE7QUE0QnBCdEUsRUFBQUEsS0FBSyxFQUFFdUUsZUE1QmE7QUE2QnBCakssRUFBQUEsTUFBTSxFQUFFa0ssTUE3Qlk7QUE4QnBCZSxFQUFBQSxNQUFNLEVBQUVkLE1BOUJZO0FBK0JwQmxLLEVBQUFBLE1BQU0sRUFBRW1LLGdCQS9CWTtBQWdDcEIzRCxFQUFBQSxLQUFLLEVBQUU0RCxLQWhDYTtBQWlDcEJsTSxFQUFBQSxLQUFLLEVBQUVtTSxlQWpDYTtBQWtDcEIvQyxFQUFBQSxFQUFFLEVBQUVnRCxFQWxDZ0I7QUFtQ3BCVyxFQUFBQSxRQUFRLEVBQUVWLGtCQUFrQkE7QUFuQ1IsR0FvQ25CcFgsTUFBTSxDQUFDQyxRQXBDWSxFQW9DRG9YLGVBcENDLENBQXRCO0FBdUNBLG9EQUFlMUssU0FBZixFOztBQ3pGQSxJQUFJb0wsSUFBSSxHQUFHO0FBQUNuWixFQUFBQSxLQUFLLEVBQUUsaUJBQU0sQ0FBRTtBQUFoQixDQUFYOztBQUVBLFNBQVNrWixpQkFBVCxHQUFvQjtBQUNsQixPQUFLLElBQUloWSxDQUFDLEdBQUcsQ0FBUixFQUFXb0IsQ0FBQyxHQUFHN0IsU0FBUyxDQUFDcUIsTUFBekIsRUFBaUNtSCxDQUFDLEdBQUcsRUFBckMsRUFBeUNrTSxDQUE5QyxFQUFpRGpVLENBQUMsR0FBR29CLENBQXJELEVBQXdELEVBQUVwQixDQUExRCxFQUE2RDtBQUMzRCxRQUFJLEVBQUVpVSxDQUFDLEdBQUcxVSxTQUFTLENBQUNTLENBQUQsQ0FBVCxHQUFlLEVBQXJCLEtBQTZCaVUsQ0FBQyxJQUFJbE0sQ0FBbEMsSUFBd0MsUUFBUW5HLElBQVIsQ0FBYXFTLENBQWIsQ0FBNUMsRUFBNkQsTUFBTSxJQUFJMVIsS0FBSixDQUFVLG1CQUFtQjBSLENBQTdCLENBQU47QUFDN0RsTSxJQUFBQSxDQUFDLENBQUNrTSxDQUFELENBQUQsR0FBTyxFQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJaUUsUUFBSixDQUFhblEsQ0FBYixDQUFQO0FBQ0Q7O0FBRUQsU0FBU21RLFFBQVQsQ0FBa0JuUSxDQUFsQixFQUFxQjtBQUNuQixPQUFLQSxDQUFMLEdBQVNBLENBQVQ7QUFDRDs7QUFFRCxTQUFTZ00sdUJBQVQsQ0FBd0JDLFNBQXhCLEVBQW1DbUUsS0FBbkMsRUFBMEM7QUFDeEMsU0FBT25FLFNBQVMsQ0FBQ2pELElBQVYsR0FBaUJDLEtBQWpCLENBQXVCLE9BQXZCLEVBQWdDekosR0FBaEMsQ0FBb0MsVUFBUzBNLENBQVQsRUFBWTtBQUNyRCxRQUFJdlMsSUFBSSxHQUFHLEVBQVg7QUFBQSxRQUFlMUIsQ0FBQyxHQUFHaVUsQ0FBQyxDQUFDdEYsT0FBRixDQUFVLEdBQVYsQ0FBbkI7QUFDQSxRQUFJM08sQ0FBQyxJQUFJLENBQVQsRUFBWTBCLElBQUksR0FBR3VTLENBQUMsQ0FBQ3pTLEtBQUYsQ0FBUXhCLENBQUMsR0FBRyxDQUFaLENBQVAsRUFBdUJpVSxDQUFDLEdBQUdBLENBQUMsQ0FBQ3pTLEtBQUYsQ0FBUSxDQUFSLEVBQVd4QixDQUFYLENBQTNCO0FBQ1osUUFBSWlVLENBQUMsSUFBSSxDQUFDa0UsS0FBSyxDQUFDdkosY0FBTixDQUFxQnFGLENBQXJCLENBQVYsRUFBbUMsTUFBTSxJQUFJMVIsS0FBSixDQUFVLG1CQUFtQjBSLENBQTdCLENBQU47QUFDbkMsV0FBTztBQUFDQyxNQUFBQSxJQUFJLEVBQUVELENBQVA7QUFBVXZTLE1BQUFBLElBQUksRUFBRUE7QUFBaEIsS0FBUDtBQUNELEdBTE0sQ0FBUDtBQU1EOztBQUVEd1csUUFBUSxDQUFDNVcsU0FBVCxHQUFxQjBXLGlCQUFRLENBQUMxVyxTQUFULEdBQXFCO0FBQ3hDRyxFQUFBQSxXQUFXLEVBQUV5VyxRQUQyQjtBQUV4QzdELEVBQUFBLEVBQUUsRUFBRSxZQUFTRCxRQUFULEVBQW1CdlIsUUFBbkIsRUFBNkI7QUFDL0IsUUFBSWtGLENBQUMsR0FBRyxLQUFLQSxDQUFiO0FBQUEsUUFDSXFRLENBQUMsR0FBR3JFLHVCQUFjLENBQUNLLFFBQVEsR0FBRyxFQUFaLEVBQWdCck0sQ0FBaEIsQ0FEdEI7QUFBQSxRQUVJa00sQ0FGSjtBQUFBLFFBR0lqVSxDQUFDLEdBQUcsQ0FBQyxDQUhUO0FBQUEsUUFJSW9CLENBQUMsR0FBR2dYLENBQUMsQ0FBQ3hYLE1BSlYsQ0FEK0IsQ0FPL0I7O0FBQ0EsUUFBSXJCLFNBQVMsQ0FBQ3FCLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsYUFBTyxFQUFFWixDQUFGLEdBQU1vQixDQUFiO0FBQWdCLFlBQUksQ0FBQzZTLENBQUMsR0FBRyxDQUFDRyxRQUFRLEdBQUdnRSxDQUFDLENBQUNwWSxDQUFELENBQWIsRUFBa0JrVSxJQUF2QixNQUFpQ0QsQ0FBQyxHQUFHaE0sR0FBRyxDQUFDRixDQUFDLENBQUNrTSxDQUFELENBQUYsRUFBT0csUUFBUSxDQUFDMVMsSUFBaEIsQ0FBeEMsQ0FBSixFQUFvRSxPQUFPdVMsQ0FBUDtBQUFwRjs7QUFDQTtBQUNELEtBWDhCLENBYS9CO0FBQ0E7OztBQUNBLFFBQUlwUixRQUFRLElBQUksSUFBWixJQUFvQixPQUFPQSxRQUFQLEtBQW9CLFVBQTVDLEVBQXdELE1BQU0sSUFBSU4sS0FBSixDQUFVLHVCQUF1Qk0sUUFBakMsQ0FBTjs7QUFDeEQsV0FBTyxFQUFFN0MsQ0FBRixHQUFNb0IsQ0FBYixFQUFnQjtBQUNkLFVBQUk2UyxDQUFDLEdBQUcsQ0FBQ0csUUFBUSxHQUFHZ0UsQ0FBQyxDQUFDcFksQ0FBRCxDQUFiLEVBQWtCa1UsSUFBMUIsRUFBZ0NuTSxDQUFDLENBQUNrTSxDQUFELENBQUQsR0FBT2pNLEdBQUcsQ0FBQ0QsQ0FBQyxDQUFDa00sQ0FBRCxDQUFGLEVBQU9HLFFBQVEsQ0FBQzFTLElBQWhCLEVBQXNCbUIsUUFBdEIsQ0FBVixDQUFoQyxLQUNLLElBQUlBLFFBQVEsSUFBSSxJQUFoQixFQUFzQixLQUFLb1IsQ0FBTCxJQUFVbE0sQ0FBVjtBQUFhQSxRQUFBQSxDQUFDLENBQUNrTSxDQUFELENBQUQsR0FBT2pNLEdBQUcsQ0FBQ0QsQ0FBQyxDQUFDa00sQ0FBRCxDQUFGLEVBQU9HLFFBQVEsQ0FBQzFTLElBQWhCLEVBQXNCLElBQXRCLENBQVY7QUFBYjtBQUM1Qjs7QUFFRCxXQUFPLElBQVA7QUFDRCxHQXhCdUM7QUF5QnhDOEUsRUFBQUEsSUFBSSxFQUFFLGdCQUFXO0FBQ2YsUUFBSUEsSUFBSSxHQUFHLEVBQVg7QUFBQSxRQUFldUIsQ0FBQyxHQUFHLEtBQUtBLENBQXhCOztBQUNBLFNBQUssSUFBSWtNLENBQVQsSUFBY2xNLENBQWQ7QUFBaUJ2QixNQUFBQSxJQUFJLENBQUN5TixDQUFELENBQUosR0FBVWxNLENBQUMsQ0FBQ2tNLENBQUQsQ0FBRCxDQUFLelMsS0FBTCxFQUFWO0FBQWpCOztBQUNBLFdBQU8sSUFBSTBXLFFBQUosQ0FBYTFSLElBQWIsQ0FBUDtBQUNELEdBN0J1QztBQThCeEMvRixFQUFBQSxJQUFJLEVBQUUsY0FBU3lULElBQVQsRUFBZXBSLElBQWYsRUFBcUI7QUFDekIsUUFBSSxDQUFDMUIsQ0FBQyxHQUFHN0IsU0FBUyxDQUFDcUIsTUFBVixHQUFtQixDQUF4QixJQUE2QixDQUFqQyxFQUFvQyxLQUFLLElBQUl0QixJQUFJLEdBQUcsSUFBSU8sS0FBSixDQUFVdUIsQ0FBVixDQUFYLEVBQXlCcEIsQ0FBQyxHQUFHLENBQTdCLEVBQWdDb0IsQ0FBaEMsRUFBbUM2UyxDQUF4QyxFQUEyQ2pVLENBQUMsR0FBR29CLENBQS9DLEVBQWtELEVBQUVwQixDQUFwRDtBQUF1RFYsTUFBQUEsSUFBSSxDQUFDVSxDQUFELENBQUosR0FBVVQsU0FBUyxDQUFDUyxDQUFDLEdBQUcsQ0FBTCxDQUFuQjtBQUF2RDtBQUNwQyxRQUFJLENBQUMsS0FBSytILENBQUwsQ0FBTzZHLGNBQVAsQ0FBc0JzRixJQUF0QixDQUFMLEVBQWtDLE1BQU0sSUFBSTNSLEtBQUosQ0FBVSxtQkFBbUIyUixJQUE3QixDQUFOOztBQUNsQyxTQUFLRCxDQUFDLEdBQUcsS0FBS2xNLENBQUwsQ0FBT21NLElBQVAsQ0FBSixFQUFrQmxVLENBQUMsR0FBRyxDQUF0QixFQUF5Qm9CLENBQUMsR0FBRzZTLENBQUMsQ0FBQ3JULE1BQXBDLEVBQTRDWixDQUFDLEdBQUdvQixDQUFoRCxFQUFtRCxFQUFFcEIsQ0FBckQ7QUFBd0RpVSxNQUFBQSxDQUFDLENBQUNqVSxDQUFELENBQUQsQ0FBS2xCLEtBQUwsQ0FBV1UsS0FBWCxDQUFpQnNELElBQWpCLEVBQXVCeEQsSUFBdkI7QUFBeEQ7QUFDRCxHQWxDdUM7QUFtQ3hDRSxFQUFBQSxLQUFLLEVBQUUsZUFBUzBVLElBQVQsRUFBZXBSLElBQWYsRUFBcUJ4RCxJQUFyQixFQUEyQjtBQUNoQyxRQUFJLENBQUMsS0FBS3lJLENBQUwsQ0FBTzZHLGNBQVAsQ0FBc0JzRixJQUF0QixDQUFMLEVBQWtDLE1BQU0sSUFBSTNSLEtBQUosQ0FBVSxtQkFBbUIyUixJQUE3QixDQUFOOztBQUNsQyxTQUFLLElBQUlELENBQUMsR0FBRyxLQUFLbE0sQ0FBTCxDQUFPbU0sSUFBUCxDQUFSLEVBQXNCbFUsQ0FBQyxHQUFHLENBQTFCLEVBQTZCb0IsQ0FBQyxHQUFHNlMsQ0FBQyxDQUFDclQsTUFBeEMsRUFBZ0RaLENBQUMsR0FBR29CLENBQXBELEVBQXVELEVBQUVwQixDQUF6RDtBQUE0RGlVLE1BQUFBLENBQUMsQ0FBQ2pVLENBQUQsQ0FBRCxDQUFLbEIsS0FBTCxDQUFXVSxLQUFYLENBQWlCc0QsSUFBakIsRUFBdUJ4RCxJQUF2QjtBQUE1RDtBQUNEO0FBdEN1QyxDQUExQzs7QUF5Q0EsU0FBUzJJLEdBQVQsQ0FBYWlNLElBQWIsRUFBbUJ4UyxJQUFuQixFQUF5QjtBQUN2QixPQUFLLElBQUkxQixDQUFDLEdBQUcsQ0FBUixFQUFXb0IsQ0FBQyxHQUFHOFMsSUFBSSxDQUFDdFQsTUFBcEIsRUFBNEJzRCxDQUFqQyxFQUFvQ2xFLENBQUMsR0FBR29CLENBQXhDLEVBQTJDLEVBQUVwQixDQUE3QyxFQUFnRDtBQUM5QyxRQUFJLENBQUNrRSxDQUFDLEdBQUdnUSxJQUFJLENBQUNsVSxDQUFELENBQVQsRUFBYzBCLElBQWQsS0FBdUJBLElBQTNCLEVBQWlDO0FBQy9CLGFBQU93QyxDQUFDLENBQUNwRixLQUFUO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVNrSixHQUFULENBQWFrTSxJQUFiLEVBQW1CeFMsSUFBbkIsRUFBeUJtQixRQUF6QixFQUFtQztBQUNqQyxPQUFLLElBQUk3QyxDQUFDLEdBQUcsQ0FBUixFQUFXb0IsQ0FBQyxHQUFHOFMsSUFBSSxDQUFDdFQsTUFBekIsRUFBaUNaLENBQUMsR0FBR29CLENBQXJDLEVBQXdDLEVBQUVwQixDQUExQyxFQUE2QztBQUMzQyxRQUFJa1UsSUFBSSxDQUFDbFUsQ0FBRCxDQUFKLENBQVEwQixJQUFSLEtBQWlCQSxJQUFyQixFQUEyQjtBQUN6QndTLE1BQUFBLElBQUksQ0FBQ2xVLENBQUQsQ0FBSixHQUFVaVksSUFBVixFQUFnQi9ELElBQUksR0FBR0EsSUFBSSxDQUFDMVMsS0FBTCxDQUFXLENBQVgsRUFBY3hCLENBQWQsRUFBaUJxWSxNQUFqQixDQUF3Qm5FLElBQUksQ0FBQzFTLEtBQUwsQ0FBV3hCLENBQUMsR0FBRyxDQUFmLENBQXhCLENBQXZCO0FBQ0E7QUFDRDtBQUNGOztBQUNELE1BQUk2QyxRQUFRLElBQUksSUFBaEIsRUFBc0JxUixJQUFJLENBQUN2VCxJQUFMLENBQVU7QUFBQ2UsSUFBQUEsSUFBSSxFQUFFQSxJQUFQO0FBQWE1QyxJQUFBQSxLQUFLLEVBQUUrRDtBQUFwQixHQUFWO0FBQ3RCLFNBQU9xUixJQUFQO0FBQ0Q7O0FBRUQsbURBQWU4RCxpQkFBZixFOzs7O0FDbkZBLElBQUlNLFdBQUssR0FBRyxDQUFaO0FBQUEsSUFBZTtBQUNYQyxPQUFPLEdBQUcsQ0FEZDtBQUFBLElBQ2lCO0FBQ2JDLFFBQVEsR0FBRyxDQUZmO0FBQUEsSUFFa0I7QUFDZEMsU0FBUyxHQUFHLElBSGhCO0FBQUEsSUFHc0I7QUFDbEJDLFFBSko7QUFBQSxJQUtJQyxRQUxKO0FBQUEsSUFNSUMsU0FBUyxHQUFHLENBTmhCO0FBQUEsSUFPSUMsUUFBUSxHQUFHLENBUGY7QUFBQSxJQVFJQyxTQUFTLEdBQUcsQ0FSaEI7QUFBQSxJQVNJQyxLQUFLLEdBQUcsUUFBT0MsV0FBUCw4Q0FBT0EsV0FBUCxPQUF1QixRQUF2QixJQUFtQ0EsV0FBVyxDQUFDQyxHQUEvQyxHQUFxREQsV0FBckQsR0FBbUVFLElBVC9FO0FBQUEsSUFVSUMsUUFBUSxHQUFHLFFBQU90RSxNQUFQLDhDQUFPQSxNQUFQLE9BQWtCLFFBQWxCLElBQThCQSxNQUFNLENBQUN1RSxxQkFBckMsR0FBNkR2RSxNQUFNLENBQUN1RSxxQkFBUCxDQUE2Qm5OLElBQTdCLENBQWtDNEksTUFBbEMsQ0FBN0QsR0FBeUcsVUFBU3hTLENBQVQsRUFBWTtBQUFFZ1gsRUFBQUEsVUFBVSxDQUFDaFgsQ0FBRCxFQUFJLEVBQUosQ0FBVjtBQUFvQixDQVYxSjtBQVlPLFNBQVM0VyxHQUFULEdBQWU7QUFDcEIsU0FBT0osUUFBUSxLQUFLTSxRQUFRLENBQUNHLFFBQUQsQ0FBUixFQUFvQlQsUUFBUSxHQUFHRSxLQUFLLENBQUNFLEdBQU4sS0FBY0gsU0FBbEQsQ0FBZjtBQUNEOztBQUVELFNBQVNRLFFBQVQsR0FBb0I7QUFDbEJULEVBQUFBLFFBQVEsR0FBRyxDQUFYO0FBQ0Q7O0FBRU0sU0FBU1UsS0FBVCxHQUFpQjtBQUN0QixPQUFLQyxLQUFMLEdBQ0EsS0FBS0MsS0FBTCxHQUNBLEtBQUtoYixLQUFMLEdBQWEsSUFGYjtBQUdEO0FBRUQ4YSxLQUFLLENBQUNqWSxTQUFOLEdBQWtCb1ksS0FBSyxDQUFDcFksU0FBTixHQUFrQjtBQUNsQ0csRUFBQUEsV0FBVyxFQUFFOFgsS0FEcUI7QUFFbENJLEVBQUFBLE9BQU8sRUFBRSxpQkFBUzlXLFFBQVQsRUFBbUIrVyxLQUFuQixFQUEwQkMsSUFBMUIsRUFBZ0M7QUFDdkMsUUFBSSxPQUFPaFgsUUFBUCxLQUFvQixVQUF4QixFQUFvQyxNQUFNLElBQUlmLFNBQUosQ0FBYyw0QkFBZCxDQUFOO0FBQ3BDK1gsSUFBQUEsSUFBSSxHQUFHLENBQUNBLElBQUksSUFBSSxJQUFSLEdBQWVaLEdBQUcsRUFBbEIsR0FBdUIsQ0FBQ1ksSUFBekIsS0FBa0NELEtBQUssSUFBSSxJQUFULEdBQWdCLENBQWhCLEdBQW9CLENBQUNBLEtBQXZELENBQVA7O0FBQ0EsUUFBSSxDQUFDLEtBQUtuYixLQUFOLElBQWVrYSxRQUFRLEtBQUssSUFBaEMsRUFBc0M7QUFDcEMsVUFBSUEsUUFBSixFQUFjQSxRQUFRLENBQUNsYSxLQUFULEdBQWlCLElBQWpCLENBQWQsS0FDS2lhLFFBQVEsR0FBRyxJQUFYO0FBQ0xDLE1BQUFBLFFBQVEsR0FBRyxJQUFYO0FBQ0Q7O0FBQ0QsU0FBS2EsS0FBTCxHQUFhM1csUUFBYjtBQUNBLFNBQUs0VyxLQUFMLEdBQWFJLElBQWI7QUFDQUMsSUFBQUEsS0FBSztBQUNOLEdBYmlDO0FBY2xDQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVc7QUFDZixRQUFJLEtBQUtQLEtBQVQsRUFBZ0I7QUFDZCxXQUFLQSxLQUFMLEdBQWEsSUFBYjtBQUNBLFdBQUtDLEtBQUwsR0FBYU8sUUFBYjtBQUNBRixNQUFBQSxLQUFLO0FBQ047QUFDRjtBQXBCaUMsQ0FBcEM7QUF1Qk8sU0FBU0osS0FBVCxDQUFlN1csUUFBZixFQUF5QitXLEtBQXpCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUMzQyxNQUFJNUYsQ0FBQyxHQUFHLElBQUlzRixLQUFKLEVBQVI7QUFDQXRGLEVBQUFBLENBQUMsQ0FBQzBGLE9BQUYsQ0FBVTlXLFFBQVYsRUFBb0IrVyxLQUFwQixFQUEyQkMsSUFBM0I7QUFDQSxTQUFPNUYsQ0FBUDtBQUNEO0FBRU0sU0FBU2dHLFVBQVQsR0FBc0I7QUFDM0JoQixFQUFBQSxHQUFHLEdBRHdCLENBQ3BCOztBQUNQLElBQUVYLFdBQUYsQ0FGMkIsQ0FFbEI7O0FBQ1QsTUFBSXJFLENBQUMsR0FBR3lFLFFBQVI7QUFBQSxNQUFrQndCLENBQWxCOztBQUNBLFNBQU9qRyxDQUFQLEVBQVU7QUFDUixRQUFJLENBQUNpRyxDQUFDLEdBQUdyQixRQUFRLEdBQUc1RSxDQUFDLENBQUN3RixLQUFsQixLQUE0QixDQUFoQyxFQUFtQ3hGLENBQUMsQ0FBQ3VGLEtBQUYsQ0FBUS9ZLElBQVIsQ0FBYWYsU0FBYixFQUF3QndhLENBQXhCO0FBQ25DakcsSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUN4VixLQUFOO0FBQ0Q7O0FBQ0QsSUFBRTZaLFdBQUY7QUFDRDs7QUFFRCxTQUFTNkIsSUFBVCxHQUFnQjtBQUNkdEIsRUFBQUEsUUFBUSxHQUFHLENBQUNELFNBQVMsR0FBR0csS0FBSyxDQUFDRSxHQUFOLEVBQWIsSUFBNEJILFNBQXZDO0FBQ0FSLEVBQUFBLFdBQUssR0FBR0MsT0FBTyxHQUFHLENBQWxCOztBQUNBLE1BQUk7QUFDRjBCLElBQUFBLFVBQVU7QUFDWCxHQUZELFNBRVU7QUFDUjNCLElBQUFBLFdBQUssR0FBRyxDQUFSO0FBQ0E4QixJQUFBQSxHQUFHO0FBQ0h2QixJQUFBQSxRQUFRLEdBQUcsQ0FBWDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU3dCLElBQVQsR0FBZ0I7QUFDZCxNQUFJcEIsR0FBRyxHQUFHRixLQUFLLENBQUNFLEdBQU4sRUFBVjtBQUFBLE1BQXVCVyxLQUFLLEdBQUdYLEdBQUcsR0FBR0wsU0FBckM7QUFDQSxNQUFJZ0IsS0FBSyxHQUFHbkIsU0FBWixFQUF1QkssU0FBUyxJQUFJYyxLQUFiLEVBQW9CaEIsU0FBUyxHQUFHSyxHQUFoQztBQUN4Qjs7QUFFRCxTQUFTbUIsR0FBVCxHQUFlO0FBQ2IsTUFBSUUsRUFBSjtBQUFBLE1BQVFDLEVBQUUsR0FBRzdCLFFBQWI7QUFBQSxNQUF1QjhCLEVBQXZCO0FBQUEsTUFBMkJYLElBQUksR0FBR0csUUFBbEM7O0FBQ0EsU0FBT08sRUFBUCxFQUFXO0FBQ1QsUUFBSUEsRUFBRSxDQUFDZixLQUFQLEVBQWM7QUFDWixVQUFJSyxJQUFJLEdBQUdVLEVBQUUsQ0FBQ2QsS0FBZCxFQUFxQkksSUFBSSxHQUFHVSxFQUFFLENBQUNkLEtBQVY7QUFDckJhLE1BQUFBLEVBQUUsR0FBR0MsRUFBTCxFQUFTQSxFQUFFLEdBQUdBLEVBQUUsQ0FBQzliLEtBQWpCO0FBQ0QsS0FIRCxNQUdPO0FBQ0wrYixNQUFBQSxFQUFFLEdBQUdELEVBQUUsQ0FBQzliLEtBQVIsRUFBZThiLEVBQUUsQ0FBQzliLEtBQUgsR0FBVyxJQUExQjtBQUNBOGIsTUFBQUEsRUFBRSxHQUFHRCxFQUFFLEdBQUdBLEVBQUUsQ0FBQzdiLEtBQUgsR0FBVytiLEVBQWQsR0FBbUI5QixRQUFRLEdBQUc4QixFQUFyQztBQUNEO0FBQ0Y7O0FBQ0Q3QixFQUFBQSxRQUFRLEdBQUcyQixFQUFYO0FBQ0FSLEVBQUFBLEtBQUssQ0FBQ0QsSUFBRCxDQUFMO0FBQ0Q7O0FBRUQsU0FBU0MsS0FBVCxDQUFlRCxJQUFmLEVBQXFCO0FBQ25CLE1BQUl2QixXQUFKLEVBQVcsT0FEUSxDQUNBOztBQUNuQixNQUFJQyxPQUFKLEVBQWFBLE9BQU8sR0FBR2tDLFlBQVksQ0FBQ2xDLE9BQUQsQ0FBdEI7QUFDYixNQUFJcUIsS0FBSyxHQUFHQyxJQUFJLEdBQUdoQixRQUFuQixDQUhtQixDQUdVOztBQUM3QixNQUFJZSxLQUFLLEdBQUcsRUFBWixFQUFnQjtBQUNkLFFBQUlDLElBQUksR0FBR0csUUFBWCxFQUFxQnpCLE9BQU8sR0FBR2MsVUFBVSxDQUFDYyxJQUFELEVBQU9OLElBQUksR0FBR2QsS0FBSyxDQUFDRSxHQUFOLEVBQVAsR0FBcUJILFNBQTVCLENBQXBCO0FBQ3JCLFFBQUlOLFFBQUosRUFBY0EsUUFBUSxHQUFHa0MsYUFBYSxDQUFDbEMsUUFBRCxDQUF4QjtBQUNmLEdBSEQsTUFHTztBQUNMLFFBQUksQ0FBQ0EsUUFBTCxFQUFlSSxTQUFTLEdBQUdHLEtBQUssQ0FBQ0UsR0FBTixFQUFaLEVBQXlCVCxRQUFRLEdBQUdtQyxXQUFXLENBQUNOLElBQUQsRUFBTzVCLFNBQVAsQ0FBL0M7QUFDZkgsSUFBQUEsV0FBSyxHQUFHLENBQVIsRUFBV2EsUUFBUSxDQUFDZ0IsSUFBRCxDQUFuQjtBQUNEO0FBQ0YsQzs7QUM3R0Q7QUFFQSw2QkFBZSxxQkFBU3RYLFFBQVQsRUFBbUIrVyxLQUFuQixFQUEwQkMsSUFBMUIsRUFBZ0M7QUFDN0MsTUFBSTVGLENBQUMsR0FBRyxJQUFJc0YsS0FBSixFQUFSO0FBQ0FLLEVBQUFBLEtBQUssR0FBR0EsS0FBSyxJQUFJLElBQVQsR0FBZ0IsQ0FBaEIsR0FBb0IsQ0FBQ0EsS0FBN0I7QUFDQTNGLEVBQUFBLENBQUMsQ0FBQzBGLE9BQUYsQ0FBVSxVQUFBaUIsT0FBTyxFQUFJO0FBQ25CM0csSUFBQUEsQ0FBQyxDQUFDOEYsSUFBRjtBQUNBbFgsSUFBQUEsUUFBUSxDQUFDK1gsT0FBTyxHQUFHaEIsS0FBWCxDQUFSO0FBQ0QsR0FIRCxFQUdHQSxLQUhILEVBR1VDLElBSFY7QUFJQSxTQUFPNUYsQ0FBUDtBQUNELEM7O0FDVkQ7QUFDQTtBQUVBLElBQUk0RyxPQUFPLEdBQUc3QyxZQUFRLENBQUMsT0FBRCxFQUFVLEtBQVYsRUFBaUIsUUFBakIsRUFBMkIsV0FBM0IsQ0FBdEI7QUFDQSxJQUFJOEMsVUFBVSxHQUFHLEVBQWpCO0FBRU8sSUFBSUMsT0FBTyxHQUFHLENBQWQ7QUFDQSxJQUFJQyxTQUFTLEdBQUcsQ0FBaEI7QUFDQSxJQUFJQyxRQUFRLEdBQUcsQ0FBZjtBQUNBLElBQUlDLE9BQU8sR0FBRyxDQUFkO0FBQ0EsSUFBSUMsT0FBTyxHQUFHLENBQWQ7QUFDQSxJQUFJQyxNQUFNLEdBQUcsQ0FBYjtBQUNBLElBQUlDLEtBQUssR0FBRyxDQUFaO0FBRVAsNkJBQWUsa0JBQVM1WSxJQUFULEVBQWVmLElBQWYsRUFBcUJtRixFQUFyQixFQUF5QjlELEtBQXpCLEVBQWdDeUcsS0FBaEMsRUFBdUM4UixNQUF2QyxFQUErQztBQUM1RCxNQUFJQyxTQUFTLEdBQUc5WSxJQUFJLENBQUMrWSxZQUFyQjtBQUNBLE1BQUksQ0FBQ0QsU0FBTCxFQUFnQjlZLElBQUksQ0FBQytZLFlBQUwsR0FBb0IsRUFBcEIsQ0FBaEIsS0FDSyxJQUFJM1UsRUFBRSxJQUFJMFUsU0FBVixFQUFxQjtBQUMxQnJJLEVBQUFBLE1BQU0sQ0FBQ3pRLElBQUQsRUFBT29FLEVBQVAsRUFBVztBQUNmbkYsSUFBQUEsSUFBSSxFQUFFQSxJQURTO0FBRWZxQixJQUFBQSxLQUFLLEVBQUVBLEtBRlE7QUFFRDtBQUNkeUcsSUFBQUEsS0FBSyxFQUFFQSxLQUhRO0FBR0Q7QUFDZDZLLElBQUFBLEVBQUUsRUFBRXdHLE9BSlc7QUFLZlksSUFBQUEsS0FBSyxFQUFFWCxVQUxRO0FBTWZqQixJQUFBQSxJQUFJLEVBQUV5QixNQUFNLENBQUN6QixJQU5FO0FBT2ZELElBQUFBLEtBQUssRUFBRTBCLE1BQU0sQ0FBQzFCLEtBUEM7QUFRZjhCLElBQUFBLFFBQVEsRUFBRUosTUFBTSxDQUFDSSxRQVJGO0FBU2ZDLElBQUFBLElBQUksRUFBRUwsTUFBTSxDQUFDSyxJQVRFO0FBVWZqQyxJQUFBQSxLQUFLLEVBQUUsSUFWUTtBQVdma0MsSUFBQUEsS0FBSyxFQUFFYjtBQVhRLEdBQVgsQ0FBTjtBQWFEO0FBRU0sU0FBU2MsSUFBVCxDQUFjcFosSUFBZCxFQUFvQm9FLEVBQXBCLEVBQXdCO0FBQzdCLE1BQUlpVixRQUFRLEdBQUc3VCxZQUFHLENBQUN4RixJQUFELEVBQU9vRSxFQUFQLENBQWxCO0FBQ0EsTUFBSWlWLFFBQVEsQ0FBQ0YsS0FBVCxHQUFpQmIsT0FBckIsRUFBOEIsTUFBTSxJQUFJeFksS0FBSixDQUFVLDZCQUFWLENBQU47QUFDOUIsU0FBT3VaLFFBQVA7QUFDRDtBQUVNLFNBQVM5VCxZQUFULENBQWF2RixJQUFiLEVBQW1Cb0UsRUFBbkIsRUFBdUI7QUFDNUIsTUFBSWlWLFFBQVEsR0FBRzdULFlBQUcsQ0FBQ3hGLElBQUQsRUFBT29FLEVBQVAsQ0FBbEI7QUFDQSxNQUFJaVYsUUFBUSxDQUFDRixLQUFULEdBQWlCVixPQUFyQixFQUE4QixNQUFNLElBQUkzWSxLQUFKLENBQVUsMkJBQVYsQ0FBTjtBQUM5QixTQUFPdVosUUFBUDtBQUNEO0FBRU0sU0FBUzdULFlBQVQsQ0FBYXhGLElBQWIsRUFBbUJvRSxFQUFuQixFQUF1QjtBQUM1QixNQUFJaVYsUUFBUSxHQUFHclosSUFBSSxDQUFDK1ksWUFBcEI7QUFDQSxNQUFJLENBQUNNLFFBQUQsSUFBYSxFQUFFQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ2pWLEVBQUQsQ0FBckIsQ0FBakIsRUFBNkMsTUFBTSxJQUFJdEUsS0FBSixDQUFVLHNCQUFWLENBQU47QUFDN0MsU0FBT3VaLFFBQVA7QUFDRDs7QUFFRCxTQUFTNUksTUFBVCxDQUFnQnpRLElBQWhCLEVBQXNCb0UsRUFBdEIsRUFBMEJ4SCxJQUExQixFQUFnQztBQUM5QixNQUFJa2MsU0FBUyxHQUFHOVksSUFBSSxDQUFDK1ksWUFBckI7QUFBQSxNQUNJQyxLQURKLENBRDhCLENBSTlCO0FBQ0E7O0FBQ0FGLEVBQUFBLFNBQVMsQ0FBQzFVLEVBQUQsQ0FBVCxHQUFnQnhILElBQWhCO0FBQ0FBLEVBQUFBLElBQUksQ0FBQ3FhLEtBQUwsR0FBYUEsS0FBSyxDQUFDb0MsUUFBRCxFQUFXLENBQVgsRUFBY3pjLElBQUksQ0FBQ3dhLElBQW5CLENBQWxCOztBQUVBLFdBQVNpQyxRQUFULENBQWtCbEIsT0FBbEIsRUFBMkI7QUFDekJ2YixJQUFBQSxJQUFJLENBQUN1YyxLQUFMLEdBQWFaLFNBQWI7QUFDQTNiLElBQUFBLElBQUksQ0FBQ3FhLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQnBXLEtBQW5CLEVBQTBCbEUsSUFBSSxDQUFDdWEsS0FBL0IsRUFBc0N2YSxJQUFJLENBQUN3YSxJQUEzQyxFQUZ5QixDQUl6Qjs7QUFDQSxRQUFJeGEsSUFBSSxDQUFDdWEsS0FBTCxJQUFjZ0IsT0FBbEIsRUFBMkJyWCxLQUFLLENBQUNxWCxPQUFPLEdBQUd2YixJQUFJLENBQUN1YSxLQUFoQixDQUFMO0FBQzVCOztBQUVELFdBQVNyVyxLQUFULENBQWVxWCxPQUFmLEVBQXdCO0FBQ3RCLFFBQUk1YSxDQUFKLEVBQU91SixDQUFQLEVBQVVuSSxDQUFWLEVBQWFGLENBQWIsQ0FEc0IsQ0FHdEI7O0FBQ0EsUUFBSTdCLElBQUksQ0FBQ3VjLEtBQUwsS0FBZVosU0FBbkIsRUFBOEIsT0FBT2pCLElBQUksRUFBWDs7QUFFOUIsU0FBSy9aLENBQUwsSUFBVXViLFNBQVYsRUFBcUI7QUFDbkJyYSxNQUFBQSxDQUFDLEdBQUdxYSxTQUFTLENBQUN2YixDQUFELENBQWI7QUFDQSxVQUFJa0IsQ0FBQyxDQUFDUSxJQUFGLEtBQVdyQyxJQUFJLENBQUNxQyxJQUFwQixFQUEwQixTQUZQLENBSW5CO0FBQ0E7QUFDQTs7QUFDQSxVQUFJUixDQUFDLENBQUMwYSxLQUFGLEtBQVlWLE9BQWhCLEVBQXlCLE9BQU8zQyxXQUFPLENBQUNoVixLQUFELENBQWQsQ0FQTixDQVNuQjs7QUFDQSxVQUFJckMsQ0FBQyxDQUFDMGEsS0FBRixLQUFZVCxPQUFoQixFQUF5QjtBQUN2QmphLFFBQUFBLENBQUMsQ0FBQzBhLEtBQUYsR0FBVVAsS0FBVjtBQUNBbmEsUUFBQUEsQ0FBQyxDQUFDd1ksS0FBRixDQUFRSyxJQUFSO0FBQ0E3WSxRQUFBQSxDQUFDLENBQUNtVCxFQUFGLENBQUs1VCxJQUFMLENBQVUsV0FBVixFQUF1QmdDLElBQXZCLEVBQTZCQSxJQUFJLENBQUNrSCxRQUFsQyxFQUE0Q3pJLENBQUMsQ0FBQzZCLEtBQTlDLEVBQXFEN0IsQ0FBQyxDQUFDc0ksS0FBdkQ7QUFDQSxlQUFPK1IsU0FBUyxDQUFDdmIsQ0FBRCxDQUFoQjtBQUNELE9BTEQsQ0FPQTtBQVBBLFdBUUssSUFBSSxDQUFDQSxDQUFELEdBQUs2RyxFQUFULEVBQWE7QUFDaEIzRixRQUFBQSxDQUFDLENBQUMwYSxLQUFGLEdBQVVQLEtBQVY7QUFDQW5hLFFBQUFBLENBQUMsQ0FBQ3dZLEtBQUYsQ0FBUUssSUFBUjtBQUNBN1ksUUFBQUEsQ0FBQyxDQUFDbVQsRUFBRixDQUFLNVQsSUFBTCxDQUFVLFFBQVYsRUFBb0JnQyxJQUFwQixFQUEwQkEsSUFBSSxDQUFDa0gsUUFBL0IsRUFBeUN6SSxDQUFDLENBQUM2QixLQUEzQyxFQUFrRDdCLENBQUMsQ0FBQ3NJLEtBQXBEO0FBQ0EsZUFBTytSLFNBQVMsQ0FBQ3ZiLENBQUQsQ0FBaEI7QUFDRDtBQUNGLEtBOUJxQixDQWdDdEI7QUFDQTtBQUNBO0FBQ0E7OztBQUNBdVksSUFBQUEsV0FBTyxDQUFDLFlBQVc7QUFDakIsVUFBSWxaLElBQUksQ0FBQ3VjLEtBQUwsS0FBZVYsT0FBbkIsRUFBNEI7QUFDMUI3YixRQUFBQSxJQUFJLENBQUN1YyxLQUFMLEdBQWFULE9BQWI7QUFDQTliLFFBQUFBLElBQUksQ0FBQ3FhLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQm9DLElBQW5CLEVBQXlCMWMsSUFBSSxDQUFDdWEsS0FBOUIsRUFBcUN2YSxJQUFJLENBQUN3YSxJQUExQztBQUNBa0MsUUFBQUEsSUFBSSxDQUFDbkIsT0FBRCxDQUFKO0FBQ0Q7QUFDRixLQU5NLENBQVAsQ0FwQ3NCLENBNEN0QjtBQUNBOztBQUNBdmIsSUFBQUEsSUFBSSxDQUFDdWMsS0FBTCxHQUFhWCxRQUFiO0FBQ0E1YixJQUFBQSxJQUFJLENBQUNnVixFQUFMLENBQVE1VCxJQUFSLENBQWEsT0FBYixFQUFzQmdDLElBQXRCLEVBQTRCQSxJQUFJLENBQUNrSCxRQUFqQyxFQUEyQ3RLLElBQUksQ0FBQzBELEtBQWhELEVBQXVEMUQsSUFBSSxDQUFDbUssS0FBNUQ7QUFDQSxRQUFJbkssSUFBSSxDQUFDdWMsS0FBTCxLQUFlWCxRQUFuQixFQUE2QixPQWhEUCxDQWdEZTs7QUFDckM1YixJQUFBQSxJQUFJLENBQUN1YyxLQUFMLEdBQWFWLE9BQWIsQ0FqRHNCLENBbUR0Qjs7QUFDQU8sSUFBQUEsS0FBSyxHQUFHLElBQUk1YixLQUFKLENBQVV1QixDQUFDLEdBQUcvQixJQUFJLENBQUNvYyxLQUFMLENBQVc3YSxNQUF6QixDQUFSOztBQUNBLFNBQUtaLENBQUMsR0FBRyxDQUFKLEVBQU91SixDQUFDLEdBQUcsQ0FBQyxDQUFqQixFQUFvQnZKLENBQUMsR0FBR29CLENBQXhCLEVBQTJCLEVBQUVwQixDQUE3QixFQUFnQztBQUM5QixVQUFJa0IsQ0FBQyxHQUFHN0IsSUFBSSxDQUFDb2MsS0FBTCxDQUFXemIsQ0FBWCxFQUFjbEIsS0FBZCxDQUFvQjJCLElBQXBCLENBQXlCZ0MsSUFBekIsRUFBK0JBLElBQUksQ0FBQ2tILFFBQXBDLEVBQThDdEssSUFBSSxDQUFDMEQsS0FBbkQsRUFBMEQxRCxJQUFJLENBQUNtSyxLQUEvRCxDQUFSLEVBQStFO0FBQzdFaVMsUUFBQUEsS0FBSyxDQUFDLEVBQUVsUyxDQUFILENBQUwsR0FBYXJJLENBQWI7QUFDRDtBQUNGOztBQUNEdWEsSUFBQUEsS0FBSyxDQUFDN2EsTUFBTixHQUFlMkksQ0FBQyxHQUFHLENBQW5CO0FBQ0Q7O0FBRUQsV0FBU3dTLElBQVQsQ0FBY25CLE9BQWQsRUFBdUI7QUFDckIsUUFBSTNHLENBQUMsR0FBRzJHLE9BQU8sR0FBR3ZiLElBQUksQ0FBQ3FjLFFBQWYsR0FBMEJyYyxJQUFJLENBQUNzYyxJQUFMLENBQVVsYixJQUFWLENBQWUsSUFBZixFQUFxQm1hLE9BQU8sR0FBR3ZiLElBQUksQ0FBQ3FjLFFBQXBDLENBQTFCLElBQTJFcmMsSUFBSSxDQUFDcWEsS0FBTCxDQUFXQyxPQUFYLENBQW1CSSxJQUFuQixHQUEwQjFhLElBQUksQ0FBQ3VjLEtBQUwsR0FBYVIsTUFBdkMsRUFBK0MsQ0FBMUgsQ0FBUjtBQUFBLFFBQ0lwYixDQUFDLEdBQUcsQ0FBQyxDQURUO0FBQUEsUUFFSW9CLENBQUMsR0FBR3FhLEtBQUssQ0FBQzdhLE1BRmQ7O0FBSUEsV0FBTyxFQUFFWixDQUFGLEdBQU1vQixDQUFiLEVBQWdCO0FBQ2RxYSxNQUFBQSxLQUFLLENBQUN6YixDQUFELENBQUwsQ0FBU1MsSUFBVCxDQUFjZ0MsSUFBZCxFQUFvQndSLENBQXBCO0FBQ0QsS0FQb0IsQ0FTckI7OztBQUNBLFFBQUk1VSxJQUFJLENBQUN1YyxLQUFMLEtBQWVSLE1BQW5CLEVBQTJCO0FBQ3pCL2IsTUFBQUEsSUFBSSxDQUFDZ1YsRUFBTCxDQUFRNVQsSUFBUixDQUFhLEtBQWIsRUFBb0JnQyxJQUFwQixFQUEwQkEsSUFBSSxDQUFDa0gsUUFBL0IsRUFBeUN0SyxJQUFJLENBQUMwRCxLQUE5QyxFQUFxRDFELElBQUksQ0FBQ21LLEtBQTFEO0FBQ0F1USxNQUFBQSxJQUFJO0FBQ0w7QUFDRjs7QUFFRCxXQUFTQSxJQUFULEdBQWdCO0FBQ2QxYSxJQUFBQSxJQUFJLENBQUN1YyxLQUFMLEdBQWFQLEtBQWI7QUFDQWhjLElBQUFBLElBQUksQ0FBQ3FhLEtBQUwsQ0FBV0ssSUFBWDtBQUNBLFdBQU93QixTQUFTLENBQUMxVSxFQUFELENBQWhCOztBQUNBLFNBQUssSUFBSTdHLENBQVQsSUFBY3ViLFNBQWQ7QUFBeUI7QUFBekIsS0FKYyxDQUltQjs7O0FBQ2pDLFdBQU85WSxJQUFJLENBQUMrWSxZQUFaO0FBQ0Q7QUFDRixDOztBQ3hKRDtBQUVBLDZCQUFlLHVCQUFTL1ksSUFBVCxFQUFlZixJQUFmLEVBQXFCO0FBQ2xDLE1BQUk2WixTQUFTLEdBQUc5WSxJQUFJLENBQUMrWSxZQUFyQjtBQUFBLE1BQ0lNLFFBREo7QUFBQSxNQUVJRSxNQUZKO0FBQUEsTUFHSWxTLEtBQUssR0FBRyxJQUhaO0FBQUEsTUFJSTlKLENBSko7QUFNQSxNQUFJLENBQUN1YixTQUFMLEVBQWdCO0FBRWhCN1osRUFBQUEsSUFBSSxHQUFHQSxJQUFJLElBQUksSUFBUixHQUFlLElBQWYsR0FBc0JBLElBQUksR0FBRyxFQUFwQzs7QUFFQSxPQUFLMUIsQ0FBTCxJQUFVdWIsU0FBVixFQUFxQjtBQUNuQixRQUFJLENBQUNPLFFBQVEsR0FBR1AsU0FBUyxDQUFDdmIsQ0FBRCxDQUFyQixFQUEwQjBCLElBQTFCLEtBQW1DQSxJQUF2QyxFQUE2QztBQUFFb0ksTUFBQUEsS0FBSyxHQUFHLEtBQVI7QUFBZTtBQUFXOztBQUN6RWtTLElBQUFBLE1BQU0sR0FBR0YsUUFBUSxDQUFDRixLQUFULEdBQWlCWCxRQUFqQixJQUE2QmEsUUFBUSxDQUFDRixLQUFULEdBQWlCUixNQUF2RDtBQUNBVSxJQUFBQSxRQUFRLENBQUNGLEtBQVQsR0FBaUJQLEtBQWpCO0FBQ0FTLElBQUFBLFFBQVEsQ0FBQ3BDLEtBQVQsQ0FBZUssSUFBZjtBQUNBK0IsSUFBQUEsUUFBUSxDQUFDekgsRUFBVCxDQUFZNVQsSUFBWixDQUFpQnViLE1BQU0sR0FBRyxXQUFILEdBQWlCLFFBQXhDLEVBQWtEdlosSUFBbEQsRUFBd0RBLElBQUksQ0FBQ2tILFFBQTdELEVBQXVFbVMsUUFBUSxDQUFDL1ksS0FBaEYsRUFBdUYrWSxRQUFRLENBQUN0UyxLQUFoRztBQUNBLFdBQU8rUixTQUFTLENBQUN2YixDQUFELENBQWhCO0FBQ0Q7O0FBRUQsTUFBSThKLEtBQUosRUFBVyxPQUFPckgsSUFBSSxDQUFDK1ksWUFBWjtBQUNaLEM7O0FDdkJEO0FBRUEsNkJBQWUsNkJBQVM5WixJQUFULEVBQWU7QUFDNUIsU0FBTyxLQUFLNEMsSUFBTCxDQUFVLFlBQVc7QUFDMUIyWCxJQUFBQSxhQUFTLENBQUMsSUFBRCxFQUFPdmEsSUFBUCxDQUFUO0FBQ0QsR0FGTSxDQUFQO0FBR0QsQzs7QUNORCw2QkFBZSxvQkFBU21DLENBQVQsRUFBWUMsQ0FBWixFQUFlO0FBQzVCLFNBQU9ELENBQUMsR0FBRyxDQUFDQSxDQUFMLEVBQVFDLENBQUMsR0FBRyxDQUFDQSxDQUFiLEVBQWdCLFVBQVNtUSxDQUFULEVBQVk7QUFDakMsV0FBT3BRLENBQUMsSUFBSSxJQUFJb1EsQ0FBUixDQUFELEdBQWNuUSxDQUFDLEdBQUdtUSxDQUF6QjtBQUNELEdBRkQ7QUFHRCxDOztBQ0pELElBQUlpSSxPQUFPLEdBQUcsTUFBTTNPLElBQUksQ0FBQzRPLEVBQXpCO0FBRU8sSUFBSUMsUUFBUSxHQUFHO0FBQ3BCQyxFQUFBQSxVQUFVLEVBQUUsQ0FEUTtBQUVwQkMsRUFBQUEsVUFBVSxFQUFFLENBRlE7QUFHcEJDLEVBQUFBLE1BQU0sRUFBRSxDQUhZO0FBSXBCQyxFQUFBQSxLQUFLLEVBQUUsQ0FKYTtBQUtwQkMsRUFBQUEsTUFBTSxFQUFFLENBTFk7QUFNcEJDLEVBQUFBLE1BQU0sRUFBRTtBQU5ZLENBQWY7QUFTUCw2QkFBZSxtQkFBUzdZLENBQVQsRUFBWUMsQ0FBWixFQUFlSSxDQUFmLEVBQWtCaUMsQ0FBbEIsRUFBcUIrVCxDQUFyQixFQUF3QjdYLENBQXhCLEVBQTJCO0FBQ3hDLE1BQUlvYSxNQUFKLEVBQVlDLE1BQVosRUFBb0JGLEtBQXBCO0FBQ0EsTUFBSUMsTUFBTSxHQUFHbFAsSUFBSSxDQUFDb1AsSUFBTCxDQUFVOVksQ0FBQyxHQUFHQSxDQUFKLEdBQVFDLENBQUMsR0FBR0EsQ0FBdEIsQ0FBYixFQUF1Q0QsQ0FBQyxJQUFJNFksTUFBTCxFQUFhM1ksQ0FBQyxJQUFJMlksTUFBbEI7QUFDdkMsTUFBSUQsS0FBSyxHQUFHM1ksQ0FBQyxHQUFHSyxDQUFKLEdBQVFKLENBQUMsR0FBR3FDLENBQXhCLEVBQTJCakMsQ0FBQyxJQUFJTCxDQUFDLEdBQUcyWSxLQUFULEVBQWdCclcsQ0FBQyxJQUFJckMsQ0FBQyxHQUFHMFksS0FBekI7QUFDM0IsTUFBSUUsTUFBTSxHQUFHblAsSUFBSSxDQUFDb1AsSUFBTCxDQUFVelksQ0FBQyxHQUFHQSxDQUFKLEdBQVFpQyxDQUFDLEdBQUdBLENBQXRCLENBQWIsRUFBdUNqQyxDQUFDLElBQUl3WSxNQUFMLEVBQWF2VyxDQUFDLElBQUl1VyxNQUFsQixFQUEwQkYsS0FBSyxJQUFJRSxNQUFuQztBQUN2QyxNQUFJN1ksQ0FBQyxHQUFHc0MsQ0FBSixHQUFRckMsQ0FBQyxHQUFHSSxDQUFoQixFQUFtQkwsQ0FBQyxHQUFHLENBQUNBLENBQUwsRUFBUUMsQ0FBQyxHQUFHLENBQUNBLENBQWIsRUFBZ0IwWSxLQUFLLEdBQUcsQ0FBQ0EsS0FBekIsRUFBZ0NDLE1BQU0sR0FBRyxDQUFDQSxNQUExQztBQUNuQixTQUFPO0FBQ0xKLElBQUFBLFVBQVUsRUFBRW5DLENBRFA7QUFFTG9DLElBQUFBLFVBQVUsRUFBRWphLENBRlA7QUFHTGthLElBQUFBLE1BQU0sRUFBRWhQLElBQUksQ0FBQ3FQLEtBQUwsQ0FBVzlZLENBQVgsRUFBY0QsQ0FBZCxJQUFtQnFZLE9BSHRCO0FBSUxNLElBQUFBLEtBQUssRUFBRWpQLElBQUksQ0FBQ3NQLElBQUwsQ0FBVUwsS0FBVixJQUFtQk4sT0FKckI7QUFLTE8sSUFBQUEsTUFBTSxFQUFFQSxNQUxIO0FBTUxDLElBQUFBLE1BQU0sRUFBRUE7QUFOSCxHQUFQO0FBUUQsQzs7QUN6QkQ7QUFFQSxJQUFJSyxPQUFKO0FBRUE7O0FBQ08sU0FBU0MsUUFBVCxDQUFrQmxlLEtBQWxCLEVBQXlCO0FBQzlCLE1BQU11SyxDQUFDLEdBQUcsS0FBSyxPQUFPNFQsU0FBUCxLQUFxQixVQUFyQixHQUFrQ0EsU0FBbEMsR0FBOENDLGVBQW5ELEVBQW9FcGUsS0FBSyxHQUFHLEVBQTVFLENBQVY7QUFDQSxTQUFPdUssQ0FBQyxDQUFDOFQsVUFBRixHQUFlZixRQUFmLEdBQTBCVSxTQUFTLENBQUN6VCxDQUFDLENBQUN4RixDQUFILEVBQU13RixDQUFDLENBQUN2RixDQUFSLEVBQVd1RixDQUFDLENBQUNuRixDQUFiLEVBQWdCbUYsQ0FBQyxDQUFDbEQsQ0FBbEIsRUFBcUJrRCxDQUFDLENBQUM2USxDQUF2QixFQUEwQjdRLENBQUMsQ0FBQ2hILENBQTVCLENBQTFDO0FBQ0Q7QUFFTSxTQUFTK2EsUUFBVCxDQUFrQnRlLEtBQWxCLEVBQXlCO0FBQzlCLE1BQUlBLEtBQUssSUFBSSxJQUFiLEVBQW1CLE9BQU9zZCxRQUFQO0FBQ25CLE1BQUksQ0FBQ1csT0FBTCxFQUFjQSxPQUFPLEdBQUdoTixRQUFRLENBQUNnRCxlQUFULENBQXlCLDRCQUF6QixFQUF1RCxHQUF2RCxDQUFWO0FBQ2RnSyxFQUFBQSxPQUFPLENBQUN6TixZQUFSLENBQXFCLFdBQXJCLEVBQWtDeFEsS0FBbEM7QUFDQSxNQUFJLEVBQUVBLEtBQUssR0FBR2llLE9BQU8sQ0FBQ00sU0FBUixDQUFrQkMsT0FBbEIsQ0FBMEJDLFdBQTFCLEVBQVYsQ0FBSixFQUF3RCxPQUFPbkIsUUFBUDtBQUN4RHRkLEVBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDMGUsTUFBZDtBQUNBLFNBQU9WLFNBQVMsQ0FBQ2hlLEtBQUssQ0FBQytFLENBQVAsRUFBVS9FLEtBQUssQ0FBQ2dGLENBQWhCLEVBQW1CaEYsS0FBSyxDQUFDb0YsQ0FBekIsRUFBNEJwRixLQUFLLENBQUNxSCxDQUFsQyxFQUFxQ3JILEtBQUssQ0FBQ29iLENBQTNDLEVBQThDcGIsS0FBSyxDQUFDdUQsQ0FBcEQsQ0FBaEI7QUFDRCxDOztBQ2pCRDtBQUNBOztBQUVBLFNBQVNxYixvQkFBVCxDQUE4QkMsS0FBOUIsRUFBcUNDLE9BQXJDLEVBQThDQyxPQUE5QyxFQUF1REMsUUFBdkQsRUFBaUU7QUFFL0QsV0FBUzdhLEdBQVQsQ0FBYThhLENBQWIsRUFBZ0I7QUFDZCxXQUFPQSxDQUFDLENBQUNuZCxNQUFGLEdBQVdtZCxDQUFDLENBQUM5YSxHQUFGLEtBQVUsR0FBckIsR0FBMkIsRUFBbEM7QUFDRDs7QUFFRCxXQUFTK2EsU0FBVCxDQUFtQkMsRUFBbkIsRUFBdUJDLEVBQXZCLEVBQTJCQyxFQUEzQixFQUErQkMsRUFBL0IsRUFBbUNMLENBQW5DLEVBQXNDTSxDQUF0QyxFQUF5QztBQUN2QyxRQUFJSixFQUFFLEtBQUtFLEVBQVAsSUFBYUQsRUFBRSxLQUFLRSxFQUF4QixFQUE0QjtBQUMxQixVQUFJcGUsQ0FBQyxHQUFHK2QsQ0FBQyxDQUFDcGQsSUFBRixDQUFPLFlBQVAsRUFBcUIsSUFBckIsRUFBMkJpZCxPQUEzQixFQUFvQyxJQUFwQyxFQUEwQ0MsT0FBMUMsQ0FBUjtBQUNBUSxNQUFBQSxDQUFDLENBQUMxZCxJQUFGLENBQU87QUFBQ1gsUUFBQUEsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBUjtBQUFXa0ksUUFBQUEsQ0FBQyxFQUFFdVYsVUFBTSxDQUFDUSxFQUFELEVBQUtFLEVBQUw7QUFBcEIsT0FBUCxFQUFzQztBQUFDbmUsUUFBQUEsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBUjtBQUFXa0ksUUFBQUEsQ0FBQyxFQUFFdVYsVUFBTSxDQUFDUyxFQUFELEVBQUtFLEVBQUw7QUFBcEIsT0FBdEM7QUFDRCxLQUhELE1BR08sSUFBSUQsRUFBRSxJQUFJQyxFQUFWLEVBQWM7QUFDbkJMLE1BQUFBLENBQUMsQ0FBQ3BkLElBQUYsQ0FBTyxlQUFld2QsRUFBZixHQUFvQlAsT0FBcEIsR0FBOEJRLEVBQTlCLEdBQW1DUCxPQUExQztBQUNEO0FBQ0Y7O0FBRUQsV0FBU3RCLE1BQVQsQ0FBZ0IxWSxDQUFoQixFQUFtQkMsQ0FBbkIsRUFBc0JpYSxDQUF0QixFQUF5Qk0sQ0FBekIsRUFBNEI7QUFDMUIsUUFBSXhhLENBQUMsS0FBS0MsQ0FBVixFQUFhO0FBQ1gsVUFBSUQsQ0FBQyxHQUFHQyxDQUFKLEdBQVEsR0FBWixFQUFpQkEsQ0FBQyxJQUFJLEdBQUwsQ0FBakIsS0FBZ0MsSUFBSUEsQ0FBQyxHQUFHRCxDQUFKLEdBQVEsR0FBWixFQUFpQkEsQ0FBQyxJQUFJLEdBQUwsQ0FEdEMsQ0FDZ0Q7O0FBQzNEd2EsTUFBQUEsQ0FBQyxDQUFDMWQsSUFBRixDQUFPO0FBQUNYLFFBQUFBLENBQUMsRUFBRStkLENBQUMsQ0FBQ3BkLElBQUYsQ0FBT3NDLEdBQUcsQ0FBQzhhLENBQUQsQ0FBSCxHQUFTLFNBQWhCLEVBQTJCLElBQTNCLEVBQWlDRCxRQUFqQyxJQUE2QyxDQUFqRDtBQUFvRDVWLFFBQUFBLENBQUMsRUFBRXVWLFVBQU0sQ0FBQzVaLENBQUQsRUFBSUMsQ0FBSjtBQUE3RCxPQUFQO0FBQ0QsS0FIRCxNQUdPLElBQUlBLENBQUosRUFBTztBQUNaaWEsTUFBQUEsQ0FBQyxDQUFDcGQsSUFBRixDQUFPc0MsR0FBRyxDQUFDOGEsQ0FBRCxDQUFILEdBQVMsU0FBVCxHQUFxQmphLENBQXJCLEdBQXlCZ2EsUUFBaEM7QUFDRDtBQUNGOztBQUVELFdBQVN0QixLQUFULENBQWUzWSxDQUFmLEVBQWtCQyxDQUFsQixFQUFxQmlhLENBQXJCLEVBQXdCTSxDQUF4QixFQUEyQjtBQUN6QixRQUFJeGEsQ0FBQyxLQUFLQyxDQUFWLEVBQWE7QUFDWHVhLE1BQUFBLENBQUMsQ0FBQzFkLElBQUYsQ0FBTztBQUFDWCxRQUFBQSxDQUFDLEVBQUUrZCxDQUFDLENBQUNwZCxJQUFGLENBQU9zQyxHQUFHLENBQUM4YSxDQUFELENBQUgsR0FBUyxRQUFoQixFQUEwQixJQUExQixFQUFnQ0QsUUFBaEMsSUFBNEMsQ0FBaEQ7QUFBbUQ1VixRQUFBQSxDQUFDLEVBQUV1VixVQUFNLENBQUM1WixDQUFELEVBQUlDLENBQUo7QUFBNUQsT0FBUDtBQUNELEtBRkQsTUFFTyxJQUFJQSxDQUFKLEVBQU87QUFDWmlhLE1BQUFBLENBQUMsQ0FBQ3BkLElBQUYsQ0FBT3NDLEdBQUcsQ0FBQzhhLENBQUQsQ0FBSCxHQUFTLFFBQVQsR0FBb0JqYSxDQUFwQixHQUF3QmdhLFFBQS9CO0FBQ0Q7QUFDRjs7QUFFRCxXQUFTUSxLQUFULENBQWVMLEVBQWYsRUFBbUJDLEVBQW5CLEVBQXVCQyxFQUF2QixFQUEyQkMsRUFBM0IsRUFBK0JMLENBQS9CLEVBQWtDTSxDQUFsQyxFQUFxQztBQUNuQyxRQUFJSixFQUFFLEtBQUtFLEVBQVAsSUFBYUQsRUFBRSxLQUFLRSxFQUF4QixFQUE0QjtBQUMxQixVQUFJcGUsQ0FBQyxHQUFHK2QsQ0FBQyxDQUFDcGQsSUFBRixDQUFPc0MsR0FBRyxDQUFDOGEsQ0FBRCxDQUFILEdBQVMsUUFBaEIsRUFBMEIsSUFBMUIsRUFBZ0MsR0FBaEMsRUFBcUMsSUFBckMsRUFBMkMsR0FBM0MsQ0FBUjtBQUNBTSxNQUFBQSxDQUFDLENBQUMxZCxJQUFGLENBQU87QUFBQ1gsUUFBQUEsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBUjtBQUFXa0ksUUFBQUEsQ0FBQyxFQUFFdVYsVUFBTSxDQUFDUSxFQUFELEVBQUtFLEVBQUw7QUFBcEIsT0FBUCxFQUFzQztBQUFDbmUsUUFBQUEsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsQ0FBUjtBQUFXa0ksUUFBQUEsQ0FBQyxFQUFFdVYsVUFBTSxDQUFDUyxFQUFELEVBQUtFLEVBQUw7QUFBcEIsT0FBdEM7QUFDRCxLQUhELE1BR08sSUFBSUQsRUFBRSxLQUFLLENBQVAsSUFBWUMsRUFBRSxLQUFLLENBQXZCLEVBQTBCO0FBQy9CTCxNQUFBQSxDQUFDLENBQUNwZCxJQUFGLENBQU9zQyxHQUFHLENBQUM4YSxDQUFELENBQUgsR0FBUyxRQUFULEdBQW9CSSxFQUFwQixHQUF5QixHQUF6QixHQUErQkMsRUFBL0IsR0FBb0MsR0FBM0M7QUFDRDtBQUNGOztBQUVELFNBQU8sVUFBU3ZhLENBQVQsRUFBWUMsQ0FBWixFQUFlO0FBQ3BCLFFBQUlpYSxDQUFDLEdBQUcsRUFBUjtBQUFBLFFBQVk7QUFDUk0sSUFBQUEsQ0FBQyxHQUFHLEVBRFIsQ0FEb0IsQ0FFUjs7QUFDWnhhLElBQUFBLENBQUMsR0FBRzhaLEtBQUssQ0FBQzlaLENBQUQsQ0FBVCxFQUFjQyxDQUFDLEdBQUc2WixLQUFLLENBQUM3WixDQUFELENBQXZCO0FBQ0FrYSxJQUFBQSxTQUFTLENBQUNuYSxDQUFDLENBQUN3WSxVQUFILEVBQWV4WSxDQUFDLENBQUN5WSxVQUFqQixFQUE2QnhZLENBQUMsQ0FBQ3VZLFVBQS9CLEVBQTJDdlksQ0FBQyxDQUFDd1ksVUFBN0MsRUFBeUR5QixDQUF6RCxFQUE0RE0sQ0FBNUQsQ0FBVDtBQUNBOUIsSUFBQUEsTUFBTSxDQUFDMVksQ0FBQyxDQUFDMFksTUFBSCxFQUFXelksQ0FBQyxDQUFDeVksTUFBYixFQUFxQndCLENBQXJCLEVBQXdCTSxDQUF4QixDQUFOO0FBQ0E3QixJQUFBQSxLQUFLLENBQUMzWSxDQUFDLENBQUMyWSxLQUFILEVBQVUxWSxDQUFDLENBQUMwWSxLQUFaLEVBQW1CdUIsQ0FBbkIsRUFBc0JNLENBQXRCLENBQUw7QUFDQUMsSUFBQUEsS0FBSyxDQUFDemEsQ0FBQyxDQUFDNFksTUFBSCxFQUFXNVksQ0FBQyxDQUFDNlksTUFBYixFQUFxQjVZLENBQUMsQ0FBQzJZLE1BQXZCLEVBQStCM1ksQ0FBQyxDQUFDNFksTUFBakMsRUFBeUNxQixDQUF6QyxFQUE0Q00sQ0FBNUMsQ0FBTDtBQUNBeGEsSUFBQUEsQ0FBQyxHQUFHQyxDQUFDLEdBQUcsSUFBUixDQVJvQixDQVFOOztBQUNkLFdBQU8sVUFBU21RLENBQVQsRUFBWTtBQUNqQixVQUFJalUsQ0FBQyxHQUFHLENBQUMsQ0FBVDtBQUFBLFVBQVlvQixDQUFDLEdBQUdpZCxDQUFDLENBQUN6ZCxNQUFsQjtBQUFBLFVBQTBCTSxDQUExQjs7QUFDQSxhQUFPLEVBQUVsQixDQUFGLEdBQU1vQixDQUFiO0FBQWdCMmMsUUFBQUEsQ0FBQyxDQUFDLENBQUM3YyxDQUFDLEdBQUdtZCxDQUFDLENBQUNyZSxDQUFELENBQU4sRUFBV0EsQ0FBWixDQUFELEdBQWtCa0IsQ0FBQyxDQUFDZ0gsQ0FBRixDQUFJK0wsQ0FBSixDQUFsQjtBQUFoQjs7QUFDQSxhQUFPOEosQ0FBQyxDQUFDMU0sSUFBRixDQUFPLEVBQVAsQ0FBUDtBQUNELEtBSkQ7QUFLRCxHQWREO0FBZUQ7O0FBRU0sSUFBSWtOLHVCQUF1QixHQUFHYixvQkFBb0IsQ0FBQ1YsUUFBRCxFQUFXLE1BQVgsRUFBbUIsS0FBbkIsRUFBMEIsTUFBMUIsQ0FBbEQ7QUFDQSxJQUFJd0IsdUJBQXVCLEdBQUdkLG9CQUFvQixDQUFDTixRQUFELEVBQVcsSUFBWCxFQUFpQixHQUFqQixFQUFzQixHQUF0QixDQUFsRCxDOztBQzlEUDs7QUFFQSxTQUFTcUIsV0FBVCxDQUFxQjVYLEVBQXJCLEVBQXlCbkYsSUFBekIsRUFBK0I7QUFDN0IsTUFBSWdkLE1BQUosRUFBWUMsTUFBWjtBQUNBLFNBQU8sWUFBVztBQUNoQixRQUFJN0MsUUFBUSxHQUFHOVQsWUFBRyxDQUFDLElBQUQsRUFBT25CLEVBQVAsQ0FBbEI7QUFBQSxRQUNJNFUsS0FBSyxHQUFHSyxRQUFRLENBQUNMLEtBRHJCLENBRGdCLENBSWhCO0FBQ0E7QUFDQTs7QUFDQSxRQUFJQSxLQUFLLEtBQUtpRCxNQUFkLEVBQXNCO0FBQ3BCQyxNQUFBQSxNQUFNLEdBQUdELE1BQU0sR0FBR2pELEtBQWxCOztBQUNBLFdBQUssSUFBSXpiLENBQUMsR0FBRyxDQUFSLEVBQVdvQixDQUFDLEdBQUd1ZCxNQUFNLENBQUMvZCxNQUEzQixFQUFtQ1osQ0FBQyxHQUFHb0IsQ0FBdkMsRUFBMEMsRUFBRXBCLENBQTVDLEVBQStDO0FBQzdDLFlBQUkyZSxNQUFNLENBQUMzZSxDQUFELENBQU4sQ0FBVTBCLElBQVYsS0FBbUJBLElBQXZCLEVBQTZCO0FBQzNCaWQsVUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNuZCxLQUFQLEVBQVQ7QUFDQW1kLFVBQUFBLE1BQU0sQ0FBQy9hLE1BQVAsQ0FBYzVELENBQWQsRUFBaUIsQ0FBakI7QUFDQTtBQUNEO0FBQ0Y7QUFDRjs7QUFFRDhiLElBQUFBLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQmtELE1BQWpCO0FBQ0QsR0FuQkQ7QUFvQkQ7O0FBRUQsU0FBU0MsYUFBVCxDQUF1Qi9YLEVBQXZCLEVBQTJCbkYsSUFBM0IsRUFBaUM1QyxLQUFqQyxFQUF3QztBQUN0QyxNQUFJNGYsTUFBSixFQUFZQyxNQUFaO0FBQ0EsTUFBSSxPQUFPN2YsS0FBUCxLQUFpQixVQUFyQixFQUFpQyxNQUFNLElBQUl5RCxLQUFKLEVBQU47QUFDakMsU0FBTyxZQUFXO0FBQ2hCLFFBQUl1WixRQUFRLEdBQUc5VCxZQUFHLENBQUMsSUFBRCxFQUFPbkIsRUFBUCxDQUFsQjtBQUFBLFFBQ0k0VSxLQUFLLEdBQUdLLFFBQVEsQ0FBQ0wsS0FEckIsQ0FEZ0IsQ0FJaEI7QUFDQTtBQUNBOztBQUNBLFFBQUlBLEtBQUssS0FBS2lELE1BQWQsRUFBc0I7QUFDcEJDLE1BQUFBLE1BQU0sR0FBRyxDQUFDRCxNQUFNLEdBQUdqRCxLQUFWLEVBQWlCamEsS0FBakIsRUFBVDs7QUFDQSxXQUFLLElBQUl5UyxDQUFDLEdBQUc7QUFBQ3ZTLFFBQUFBLElBQUksRUFBRUEsSUFBUDtBQUFhNUMsUUFBQUEsS0FBSyxFQUFFQTtBQUFwQixPQUFSLEVBQW9Da0IsQ0FBQyxHQUFHLENBQXhDLEVBQTJDb0IsQ0FBQyxHQUFHdWQsTUFBTSxDQUFDL2QsTUFBM0QsRUFBbUVaLENBQUMsR0FBR29CLENBQXZFLEVBQTBFLEVBQUVwQixDQUE1RSxFQUErRTtBQUM3RSxZQUFJMmUsTUFBTSxDQUFDM2UsQ0FBRCxDQUFOLENBQVUwQixJQUFWLEtBQW1CQSxJQUF2QixFQUE2QjtBQUMzQmlkLFVBQUFBLE1BQU0sQ0FBQzNlLENBQUQsQ0FBTixHQUFZaVUsQ0FBWjtBQUNBO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJalUsQ0FBQyxLQUFLb0IsQ0FBVixFQUFhdWQsTUFBTSxDQUFDaGUsSUFBUCxDQUFZc1QsQ0FBWjtBQUNkOztBQUVENkgsSUFBQUEsUUFBUSxDQUFDTCxLQUFULEdBQWlCa0QsTUFBakI7QUFDRCxHQW5CRDtBQW9CRDs7QUFFRCw2QkFBZSxlQUFTamQsSUFBVCxFQUFlNUMsS0FBZixFQUFzQjtBQUNuQyxNQUFJK0gsRUFBRSxHQUFHLEtBQUs0QixHQUFkO0FBRUEvRyxFQUFBQSxJQUFJLElBQUksRUFBUjs7QUFFQSxNQUFJbkMsU0FBUyxDQUFDcUIsTUFBVixHQUFtQixDQUF2QixFQUEwQjtBQUN4QixRQUFJNmEsS0FBSyxHQUFHeFQsWUFBRyxDQUFDLEtBQUt4RixJQUFMLEVBQUQsRUFBY29FLEVBQWQsQ0FBSCxDQUFxQjRVLEtBQWpDOztBQUNBLFNBQUssSUFBSXpiLENBQUMsR0FBRyxDQUFSLEVBQVdvQixDQUFDLEdBQUdxYSxLQUFLLENBQUM3YSxNQUFyQixFQUE2QnFULENBQWxDLEVBQXFDalUsQ0FBQyxHQUFHb0IsQ0FBekMsRUFBNEMsRUFBRXBCLENBQTlDLEVBQWlEO0FBQy9DLFVBQUksQ0FBQ2lVLENBQUMsR0FBR3dILEtBQUssQ0FBQ3piLENBQUQsQ0FBVixFQUFlMEIsSUFBZixLQUF3QkEsSUFBNUIsRUFBa0M7QUFDaEMsZUFBT3VTLENBQUMsQ0FBQ25WLEtBQVQ7QUFDRDtBQUNGOztBQUNELFdBQU8sSUFBUDtBQUNEOztBQUVELFNBQU8sS0FBS3dGLElBQUwsQ0FBVSxDQUFDeEYsS0FBSyxJQUFJLElBQVQsR0FBZ0IyZixXQUFoQixHQUE4QkcsYUFBL0IsRUFBOEMvWCxFQUE5QyxFQUFrRG5GLElBQWxELEVBQXdENUMsS0FBeEQsQ0FBVixDQUFQO0FBQ0Q7QUFFTSxTQUFTK2YsVUFBVCxDQUFvQkMsVUFBcEIsRUFBZ0NwZCxJQUFoQyxFQUFzQzVDLEtBQXRDLEVBQTZDO0FBQ2xELE1BQUkrSCxFQUFFLEdBQUdpWSxVQUFVLENBQUNyVyxHQUFwQjtBQUVBcVcsRUFBQUEsVUFBVSxDQUFDeGEsSUFBWCxDQUFnQixZQUFXO0FBQ3pCLFFBQUl3WCxRQUFRLEdBQUc5VCxZQUFHLENBQUMsSUFBRCxFQUFPbkIsRUFBUCxDQUFsQjtBQUNBLEtBQUNpVixRQUFRLENBQUNoZCxLQUFULEtBQW1CZ2QsUUFBUSxDQUFDaGQsS0FBVCxHQUFpQixFQUFwQyxDQUFELEVBQTBDNEMsSUFBMUMsSUFBa0Q1QyxLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFsRDtBQUNELEdBSEQ7QUFLQSxTQUFPLFVBQVNrRCxJQUFULEVBQWU7QUFDcEIsV0FBT3dGLFlBQUcsQ0FBQ3hGLElBQUQsRUFBT29FLEVBQVAsQ0FBSCxDQUFjL0gsS0FBZCxDQUFvQjRDLElBQXBCLENBQVA7QUFDRCxHQUZEO0FBR0QsQzs7QUNoRkQsNkJBQWUsb0JBQVNELFdBQVQsRUFBc0JzZCxPQUF0QixFQUErQnpkLFNBQS9CLEVBQTBDO0FBQ3ZERyxFQUFBQSxXQUFXLENBQUNILFNBQVosR0FBd0J5ZCxPQUFPLENBQUN6ZCxTQUFSLEdBQW9CQSxTQUE1QztBQUNBQSxFQUFBQSxTQUFTLENBQUNHLFdBQVYsR0FBd0JBLFdBQXhCO0FBQ0Q7QUFFTSxTQUFTdWQsTUFBVCxDQUFnQnRiLE1BQWhCLEVBQXdCdWIsVUFBeEIsRUFBb0M7QUFDekMsTUFBSTNkLFNBQVMsR0FBR0QsTUFBTSxDQUFDNlIsTUFBUCxDQUFjeFAsTUFBTSxDQUFDcEMsU0FBckIsQ0FBaEI7O0FBQ0EsT0FBSyxJQUFJM0MsR0FBVCxJQUFnQnNnQixVQUFoQjtBQUE0QjNkLElBQUFBLFNBQVMsQ0FBQzNDLEdBQUQsQ0FBVCxHQUFpQnNnQixVQUFVLENBQUN0Z0IsR0FBRCxDQUEzQjtBQUE1Qjs7QUFDQSxTQUFPMkMsU0FBUDtBQUNELEM7O0FDVEQ7QUFFTyxTQUFTNmQsS0FBVCxHQUFpQixDQUFFO0FBRW5CLElBQUlDLE9BQU0sR0FBRyxHQUFiOzs7QUFDQSxJQUFJQyxTQUFRLEdBQUcsSUFBSUQsT0FBbkI7OztBQUVQLElBQUlFLEdBQUcsR0FBRyxxQkFBVjtBQUFBLElBQ0lDLEdBQUcsR0FBRywrQ0FEVjtBQUFBLElBRUlDLEdBQUcsR0FBRyxnREFGVjtBQUFBLElBR0lDLEtBQUssR0FBRyxvQkFIWjtBQUFBLElBSUlDLFlBQVksR0FBRyxJQUFJQyxNQUFKLENBQVcsWUFBWSxDQUFDTCxHQUFELEVBQU1BLEdBQU4sRUFBV0EsR0FBWCxDQUFaLEdBQThCLE1BQXpDLENBSm5CO0FBQUEsSUFLSU0sWUFBWSxHQUFHLElBQUlELE1BQUosQ0FBVyxZQUFZLENBQUNILEdBQUQsRUFBTUEsR0FBTixFQUFXQSxHQUFYLENBQVosR0FBOEIsTUFBekMsQ0FMbkI7QUFBQSxJQU1JSyxhQUFhLEdBQUcsSUFBSUYsTUFBSixDQUFXLGFBQWEsQ0FBQ0wsR0FBRCxFQUFNQSxHQUFOLEVBQVdBLEdBQVgsRUFBZ0JDLEdBQWhCLENBQWIsR0FBb0MsTUFBL0MsQ0FOcEI7QUFBQSxJQU9JTyxhQUFhLEdBQUcsSUFBSUgsTUFBSixDQUFXLGFBQWEsQ0FBQ0gsR0FBRCxFQUFNQSxHQUFOLEVBQVdBLEdBQVgsRUFBZ0JELEdBQWhCLENBQWIsR0FBb0MsTUFBL0MsQ0FQcEI7QUFBQSxJQVFJUSxZQUFZLEdBQUcsSUFBSUosTUFBSixDQUFXLFlBQVksQ0FBQ0osR0FBRCxFQUFNQyxHQUFOLEVBQVdBLEdBQVgsQ0FBWixHQUE4QixNQUF6QyxDQVJuQjtBQUFBLElBU0lRLGFBQWEsR0FBRyxJQUFJTCxNQUFKLENBQVcsYUFBYSxDQUFDSixHQUFELEVBQU1DLEdBQU4sRUFBV0EsR0FBWCxFQUFnQkQsR0FBaEIsQ0FBYixHQUFvQyxNQUEvQyxDQVRwQjtBQVdBLElBQUlVLEtBQUssR0FBRztBQUNWQyxFQUFBQSxTQUFTLEVBQUUsUUFERDtBQUVWQyxFQUFBQSxZQUFZLEVBQUUsUUFGSjtBQUdWQyxFQUFBQSxJQUFJLEVBQUUsUUFISTtBQUlWQyxFQUFBQSxVQUFVLEVBQUUsUUFKRjtBQUtWQyxFQUFBQSxLQUFLLEVBQUUsUUFMRztBQU1WQyxFQUFBQSxLQUFLLEVBQUUsUUFORztBQU9WQyxFQUFBQSxNQUFNLEVBQUUsUUFQRTtBQVFWQyxFQUFBQSxLQUFLLEVBQUUsUUFSRztBQVNWQyxFQUFBQSxjQUFjLEVBQUUsUUFUTjtBQVVWQyxFQUFBQSxJQUFJLEVBQUUsUUFWSTtBQVdWQyxFQUFBQSxVQUFVLEVBQUUsUUFYRjtBQVlWQyxFQUFBQSxLQUFLLEVBQUUsUUFaRztBQWFWQyxFQUFBQSxTQUFTLEVBQUUsUUFiRDtBQWNWQyxFQUFBQSxTQUFTLEVBQUUsUUFkRDtBQWVWQyxFQUFBQSxVQUFVLEVBQUUsUUFmRjtBQWdCVkMsRUFBQUEsU0FBUyxFQUFFLFFBaEJEO0FBaUJWQyxFQUFBQSxLQUFLLEVBQUUsUUFqQkc7QUFrQlZDLEVBQUFBLGNBQWMsRUFBRSxRQWxCTjtBQW1CVkMsRUFBQUEsUUFBUSxFQUFFLFFBbkJBO0FBb0JWQyxFQUFBQSxPQUFPLEVBQUUsUUFwQkM7QUFxQlZDLEVBQUFBLElBQUksRUFBRSxRQXJCSTtBQXNCVkMsRUFBQUEsUUFBUSxFQUFFLFFBdEJBO0FBdUJWQyxFQUFBQSxRQUFRLEVBQUUsUUF2QkE7QUF3QlZDLEVBQUFBLGFBQWEsRUFBRSxRQXhCTDtBQXlCVkMsRUFBQUEsUUFBUSxFQUFFLFFBekJBO0FBMEJWQyxFQUFBQSxTQUFTLEVBQUUsUUExQkQ7QUEyQlZDLEVBQUFBLFFBQVEsRUFBRSxRQTNCQTtBQTRCVkMsRUFBQUEsU0FBUyxFQUFFLFFBNUJEO0FBNkJWQyxFQUFBQSxXQUFXLEVBQUUsUUE3Qkg7QUE4QlZDLEVBQUFBLGNBQWMsRUFBRSxRQTlCTjtBQStCVkMsRUFBQUEsVUFBVSxFQUFFLFFBL0JGO0FBZ0NWQyxFQUFBQSxVQUFVLEVBQUUsUUFoQ0Y7QUFpQ1ZDLEVBQUFBLE9BQU8sRUFBRSxRQWpDQztBQWtDVkMsRUFBQUEsVUFBVSxFQUFFLFFBbENGO0FBbUNWQyxFQUFBQSxZQUFZLEVBQUUsUUFuQ0o7QUFvQ1ZDLEVBQUFBLGFBQWEsRUFBRSxRQXBDTDtBQXFDVkMsRUFBQUEsYUFBYSxFQUFFLFFBckNMO0FBc0NWQyxFQUFBQSxhQUFhLEVBQUUsUUF0Q0w7QUF1Q1ZDLEVBQUFBLGFBQWEsRUFBRSxRQXZDTDtBQXdDVkMsRUFBQUEsVUFBVSxFQUFFLFFBeENGO0FBeUNWQyxFQUFBQSxRQUFRLEVBQUUsUUF6Q0E7QUEwQ1ZDLEVBQUFBLFdBQVcsRUFBRSxRQTFDSDtBQTJDVkMsRUFBQUEsT0FBTyxFQUFFLFFBM0NDO0FBNENWQyxFQUFBQSxPQUFPLEVBQUUsUUE1Q0M7QUE2Q1ZDLEVBQUFBLFVBQVUsRUFBRSxRQTdDRjtBQThDVkMsRUFBQUEsU0FBUyxFQUFFLFFBOUNEO0FBK0NWQyxFQUFBQSxXQUFXLEVBQUUsUUEvQ0g7QUFnRFZDLEVBQUFBLFdBQVcsRUFBRSxRQWhESDtBQWlEVkMsRUFBQUEsT0FBTyxFQUFFLFFBakRDO0FBa0RWQyxFQUFBQSxTQUFTLEVBQUUsUUFsREQ7QUFtRFZDLEVBQUFBLFVBQVUsRUFBRSxRQW5ERjtBQW9EVkMsRUFBQUEsSUFBSSxFQUFFLFFBcERJO0FBcURWQyxFQUFBQSxTQUFTLEVBQUUsUUFyREQ7QUFzRFZDLEVBQUFBLElBQUksRUFBRSxRQXRESTtBQXVEVkMsRUFBQUEsS0FBSyxFQUFFLFFBdkRHO0FBd0RWQyxFQUFBQSxXQUFXLEVBQUUsUUF4REg7QUF5RFZDLEVBQUFBLElBQUksRUFBRSxRQXpESTtBQTBEVkMsRUFBQUEsUUFBUSxFQUFFLFFBMURBO0FBMkRWQyxFQUFBQSxPQUFPLEVBQUUsUUEzREM7QUE0RFZDLEVBQUFBLFNBQVMsRUFBRSxRQTVERDtBQTZEVkMsRUFBQUEsTUFBTSxFQUFFLFFBN0RFO0FBOERWQyxFQUFBQSxLQUFLLEVBQUUsUUE5REc7QUErRFZDLEVBQUFBLEtBQUssRUFBRSxRQS9ERztBQWdFVkMsRUFBQUEsUUFBUSxFQUFFLFFBaEVBO0FBaUVWQyxFQUFBQSxhQUFhLEVBQUUsUUFqRUw7QUFrRVZDLEVBQUFBLFNBQVMsRUFBRSxRQWxFRDtBQW1FVkMsRUFBQUEsWUFBWSxFQUFFLFFBbkVKO0FBb0VWQyxFQUFBQSxTQUFTLEVBQUUsUUFwRUQ7QUFxRVZDLEVBQUFBLFVBQVUsRUFBRSxRQXJFRjtBQXNFVkMsRUFBQUEsU0FBUyxFQUFFLFFBdEVEO0FBdUVWQyxFQUFBQSxvQkFBb0IsRUFBRSxRQXZFWjtBQXdFVkMsRUFBQUEsU0FBUyxFQUFFLFFBeEVEO0FBeUVWQyxFQUFBQSxVQUFVLEVBQUUsUUF6RUY7QUEwRVZDLEVBQUFBLFNBQVMsRUFBRSxRQTFFRDtBQTJFVkMsRUFBQUEsU0FBUyxFQUFFLFFBM0VEO0FBNEVWQyxFQUFBQSxXQUFXLEVBQUUsUUE1RUg7QUE2RVZDLEVBQUFBLGFBQWEsRUFBRSxRQTdFTDtBQThFVkMsRUFBQUEsWUFBWSxFQUFFLFFBOUVKO0FBK0VWQyxFQUFBQSxjQUFjLEVBQUUsUUEvRU47QUFnRlZDLEVBQUFBLGNBQWMsRUFBRSxRQWhGTjtBQWlGVkMsRUFBQUEsY0FBYyxFQUFFLFFBakZOO0FBa0ZWQyxFQUFBQSxXQUFXLEVBQUUsUUFsRkg7QUFtRlZDLEVBQUFBLElBQUksRUFBRSxRQW5GSTtBQW9GVkMsRUFBQUEsU0FBUyxFQUFFLFFBcEZEO0FBcUZWQyxFQUFBQSxLQUFLLEVBQUUsUUFyRkc7QUFzRlZDLEVBQUFBLE9BQU8sRUFBRSxRQXRGQztBQXVGVkMsRUFBQUEsTUFBTSxFQUFFLFFBdkZFO0FBd0ZWQyxFQUFBQSxnQkFBZ0IsRUFBRSxRQXhGUjtBQXlGVkMsRUFBQUEsVUFBVSxFQUFFLFFBekZGO0FBMEZWQyxFQUFBQSxZQUFZLEVBQUUsUUExRko7QUEyRlZDLEVBQUFBLFlBQVksRUFBRSxRQTNGSjtBQTRGVkMsRUFBQUEsY0FBYyxFQUFFLFFBNUZOO0FBNkZWQyxFQUFBQSxlQUFlLEVBQUUsUUE3RlA7QUE4RlZDLEVBQUFBLGlCQUFpQixFQUFFLFFBOUZUO0FBK0ZWQyxFQUFBQSxlQUFlLEVBQUUsUUEvRlA7QUFnR1ZDLEVBQUFBLGVBQWUsRUFBRSxRQWhHUDtBQWlHVkMsRUFBQUEsWUFBWSxFQUFFLFFBakdKO0FBa0dWQyxFQUFBQSxTQUFTLEVBQUUsUUFsR0Q7QUFtR1ZDLEVBQUFBLFNBQVMsRUFBRSxRQW5HRDtBQW9HVkMsRUFBQUEsUUFBUSxFQUFFLFFBcEdBO0FBcUdWQyxFQUFBQSxXQUFXLEVBQUUsUUFyR0g7QUFzR1ZDLEVBQUFBLElBQUksRUFBRSxRQXRHSTtBQXVHVkMsRUFBQUEsT0FBTyxFQUFFLFFBdkdDO0FBd0dWQyxFQUFBQSxLQUFLLEVBQUUsUUF4R0c7QUF5R1ZDLEVBQUFBLFNBQVMsRUFBRSxRQXpHRDtBQTBHVkMsRUFBQUEsTUFBTSxFQUFFLFFBMUdFO0FBMkdWQyxFQUFBQSxTQUFTLEVBQUUsUUEzR0Q7QUE0R1ZDLEVBQUFBLE1BQU0sRUFBRSxRQTVHRTtBQTZHVkMsRUFBQUEsYUFBYSxFQUFFLFFBN0dMO0FBOEdWQyxFQUFBQSxTQUFTLEVBQUUsUUE5R0Q7QUErR1ZDLEVBQUFBLGFBQWEsRUFBRSxRQS9HTDtBQWdIVkMsRUFBQUEsYUFBYSxFQUFFLFFBaEhMO0FBaUhWQyxFQUFBQSxVQUFVLEVBQUUsUUFqSEY7QUFrSFZDLEVBQUFBLFNBQVMsRUFBRSxRQWxIRDtBQW1IVkMsRUFBQUEsSUFBSSxFQUFFLFFBbkhJO0FBb0hWQyxFQUFBQSxJQUFJLEVBQUUsUUFwSEk7QUFxSFZDLEVBQUFBLElBQUksRUFBRSxRQXJISTtBQXNIVkMsRUFBQUEsVUFBVSxFQUFFLFFBdEhGO0FBdUhWQyxFQUFBQSxNQUFNLEVBQUUsUUF2SEU7QUF3SFZDLEVBQUFBLGFBQWEsRUFBRSxRQXhITDtBQXlIVkMsRUFBQUEsR0FBRyxFQUFFLFFBekhLO0FBMEhWQyxFQUFBQSxTQUFTLEVBQUUsUUExSEQ7QUEySFZDLEVBQUFBLFNBQVMsRUFBRSxRQTNIRDtBQTRIVkMsRUFBQUEsV0FBVyxFQUFFLFFBNUhIO0FBNkhWQyxFQUFBQSxNQUFNLEVBQUUsUUE3SEU7QUE4SFZDLEVBQUFBLFVBQVUsRUFBRSxRQTlIRjtBQStIVkMsRUFBQUEsUUFBUSxFQUFFLFFBL0hBO0FBZ0lWQyxFQUFBQSxRQUFRLEVBQUUsUUFoSUE7QUFpSVZDLEVBQUFBLE1BQU0sRUFBRSxRQWpJRTtBQWtJVkMsRUFBQUEsTUFBTSxFQUFFLFFBbElFO0FBbUlWQyxFQUFBQSxPQUFPLEVBQUUsUUFuSUM7QUFvSVZDLEVBQUFBLFNBQVMsRUFBRSxRQXBJRDtBQXFJVkMsRUFBQUEsU0FBUyxFQUFFLFFBcklEO0FBc0lWQyxFQUFBQSxTQUFTLEVBQUUsUUF0SUQ7QUF1SVZDLEVBQUFBLElBQUksRUFBRSxRQXZJSTtBQXdJVkMsRUFBQUEsV0FBVyxFQUFFLFFBeElIO0FBeUlWQyxFQUFBQSxTQUFTLEVBQUUsUUF6SUQ7QUEwSVZDLEVBQUFBLEdBQUcsRUFBRSxRQTFJSztBQTJJVkMsRUFBQUEsSUFBSSxFQUFFLFFBM0lJO0FBNElWQyxFQUFBQSxPQUFPLEVBQUUsUUE1SUM7QUE2SVZDLEVBQUFBLE1BQU0sRUFBRSxRQTdJRTtBQThJVkMsRUFBQUEsU0FBUyxFQUFFLFFBOUlEO0FBK0lWQyxFQUFBQSxNQUFNLEVBQUUsUUEvSUU7QUFnSlZDLEVBQUFBLEtBQUssRUFBRSxRQWhKRztBQWlKVkMsRUFBQUEsS0FBSyxFQUFFLFFBakpHO0FBa0pWQyxFQUFBQSxVQUFVLEVBQUUsUUFsSkY7QUFtSlZDLEVBQUFBLE1BQU0sRUFBRSxRQW5KRTtBQW9KVkMsRUFBQUEsV0FBVyxFQUFFO0FBcEpILENBQVo7QUF1SkFuSyxVQUFNLENBQUNDLEtBQUQsRUFBUW1LLEtBQVIsRUFBZTtBQUNuQjlpQixFQUFBQSxJQUFJLEVBQUUsY0FBUytpQixRQUFULEVBQW1CO0FBQ3ZCLFdBQU9sb0IsTUFBTSxDQUFDbW9CLE1BQVAsQ0FBYyxJQUFJLEtBQUsvbkIsV0FBVCxFQUFkLEVBQW9DLElBQXBDLEVBQTBDOG5CLFFBQTFDLENBQVA7QUFDRCxHQUhrQjtBQUluQkUsRUFBQUEsV0FBVyxFQUFFLHVCQUFXO0FBQ3RCLFdBQU8sS0FBS0MsR0FBTCxHQUFXRCxXQUFYLEVBQVA7QUFDRCxHQU5rQjtBQU9uQkUsRUFBQUEsR0FBRyxFQUFFQyxlQVBjO0FBT0c7QUFDdEJDLEVBQUFBLFNBQVMsRUFBRUQsZUFSUTtBQVNuQkUsRUFBQUEsU0FBUyxFQUFFQyxlQVRRO0FBVW5CQyxFQUFBQSxTQUFTLEVBQUVDLGVBVlE7QUFXbkIxb0IsRUFBQUEsUUFBUSxFQUFFMG9CO0FBWFMsQ0FBZixDQUFOOztBQWNBLFNBQVNMLGVBQVQsR0FBMkI7QUFDekIsU0FBTyxLQUFLRixHQUFMLEdBQVdHLFNBQVgsRUFBUDtBQUNEOztBQUVELFNBQVNFLGVBQVQsR0FBMkI7QUFDekIsU0FBT0csVUFBVSxDQUFDLElBQUQsQ0FBVixDQUFpQkosU0FBakIsRUFBUDtBQUNEOztBQUVELFNBQVNHLGVBQVQsR0FBMkI7QUFDekIsU0FBTyxLQUFLUCxHQUFMLEdBQVdNLFNBQVgsRUFBUDtBQUNEOztBQUVjLFNBQVNWLEtBQVQsQ0FBZWEsTUFBZixFQUF1QjtBQUNwQyxNQUFJOWdCLENBQUosRUFBTytnQixDQUFQO0FBQ0FELEVBQUFBLE1BQU0sR0FBRyxDQUFDQSxNQUFNLEdBQUcsRUFBVixFQUFjcFosSUFBZCxHQUFxQnNaLFdBQXJCLEVBQVQ7QUFDQSxTQUFPLENBQUNoaEIsQ0FBQyxHQUFHb1csS0FBSyxDQUFDNkssSUFBTixDQUFXSCxNQUFYLENBQUwsS0FBNEJDLENBQUMsR0FBRy9nQixDQUFDLENBQUMsQ0FBRCxDQUFELENBQUt6SSxNQUFULEVBQWlCeUksQ0FBQyxHQUFHa2hCLFFBQVEsQ0FBQ2xoQixDQUFDLENBQUMsQ0FBRCxDQUFGLEVBQU8sRUFBUCxDQUE3QixFQUF5QytnQixDQUFDLEtBQUssQ0FBTixHQUFVSSxJQUFJLENBQUNuaEIsQ0FBRCxDQUFkLENBQWtCO0FBQWxCLElBQ3RFK2dCLENBQUMsS0FBSyxDQUFOLEdBQVUsSUFBSUssR0FBSixDQUFTcGhCLENBQUMsSUFBSSxDQUFMLEdBQVMsR0FBVixHQUFrQkEsQ0FBQyxJQUFJLENBQUwsR0FBUyxJQUFuQyxFQUEyQ0EsQ0FBQyxJQUFJLENBQUwsR0FBUyxHQUFWLEdBQWtCQSxDQUFDLEdBQUcsSUFBaEUsRUFBd0UsQ0FBQ0EsQ0FBQyxHQUFHLEdBQUwsS0FBYSxDQUFkLEdBQW9CQSxDQUFDLEdBQUcsR0FBL0YsRUFBcUcsQ0FBckcsQ0FBVixDQUFrSDtBQUFsSCxJQUNBK2dCLENBQUMsS0FBSyxDQUFOLEdBQVVNLElBQUksQ0FBQ3JoQixDQUFDLElBQUksRUFBTCxHQUFVLElBQVgsRUFBaUJBLENBQUMsSUFBSSxFQUFMLEdBQVUsSUFBM0IsRUFBaUNBLENBQUMsSUFBSSxDQUFMLEdBQVMsSUFBMUMsRUFBZ0QsQ0FBQ0EsQ0FBQyxHQUFHLElBQUwsSUFBYSxJQUE3RCxDQUFkLENBQWlGO0FBQWpGLElBQ0ErZ0IsQ0FBQyxLQUFLLENBQU4sR0FBVU0sSUFBSSxDQUFFcmhCLENBQUMsSUFBSSxFQUFMLEdBQVUsR0FBWCxHQUFtQkEsQ0FBQyxJQUFJLENBQUwsR0FBUyxJQUE3QixFQUFxQ0EsQ0FBQyxJQUFJLENBQUwsR0FBUyxHQUFWLEdBQWtCQSxDQUFDLElBQUksQ0FBTCxHQUFTLElBQS9ELEVBQXVFQSxDQUFDLElBQUksQ0FBTCxHQUFTLEdBQVYsR0FBa0JBLENBQUMsR0FBRyxJQUE1RixFQUFtRyxDQUFFLENBQUNBLENBQUMsR0FBRyxHQUFMLEtBQWEsQ0FBZCxHQUFvQkEsQ0FBQyxHQUFHLEdBQXpCLElBQWlDLElBQXBJLENBQWQsQ0FBd0o7QUFBeEosSUFDQSxJQUpDLENBSUs7QUFKTCxNQUtELENBQUNBLENBQUMsR0FBR3FXLFlBQVksQ0FBQzRLLElBQWIsQ0FBa0JILE1BQWxCLENBQUwsSUFBa0MsSUFBSU0sR0FBSixDQUFRcGhCLENBQUMsQ0FBQyxDQUFELENBQVQsRUFBY0EsQ0FBQyxDQUFDLENBQUQsQ0FBZixFQUFvQkEsQ0FBQyxDQUFDLENBQUQsQ0FBckIsRUFBMEIsQ0FBMUIsQ0FBbEMsQ0FBK0Q7QUFBL0QsSUFDQSxDQUFDQSxDQUFDLEdBQUd1VyxZQUFZLENBQUMwSyxJQUFiLENBQWtCSCxNQUFsQixDQUFMLElBQWtDLElBQUlNLEdBQUosQ0FBUXBoQixDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQXJCLEVBQTBCQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQXZDLEVBQTRDQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQXpELEVBQThELENBQTlELENBQWxDLENBQW1HO0FBQW5HLElBQ0EsQ0FBQ0EsQ0FBQyxHQUFHd1csYUFBYSxDQUFDeUssSUFBZCxDQUFtQkgsTUFBbkIsQ0FBTCxJQUFtQ08sSUFBSSxDQUFDcmhCLENBQUMsQ0FBQyxDQUFELENBQUYsRUFBT0EsQ0FBQyxDQUFDLENBQUQsQ0FBUixFQUFhQSxDQUFDLENBQUMsQ0FBRCxDQUFkLEVBQW1CQSxDQUFDLENBQUMsQ0FBRCxDQUFwQixDQUF2QyxDQUFnRTtBQUFoRSxJQUNBLENBQUNBLENBQUMsR0FBR3lXLGFBQWEsQ0FBQ3dLLElBQWQsQ0FBbUJILE1BQW5CLENBQUwsSUFBbUNPLElBQUksQ0FBQ3JoQixDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBUCxHQUFhLEdBQWQsRUFBbUJBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUFQLEdBQWEsR0FBaEMsRUFBcUNBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUFQLEdBQWEsR0FBbEQsRUFBdURBLENBQUMsQ0FBQyxDQUFELENBQXhELENBQXZDLENBQW9HO0FBQXBHLElBQ0EsQ0FBQ0EsQ0FBQyxHQUFHMFcsWUFBWSxDQUFDdUssSUFBYixDQUFrQkgsTUFBbEIsQ0FBTCxJQUFrQ1EsSUFBSSxDQUFDdGhCLENBQUMsQ0FBQyxDQUFELENBQUYsRUFBT0EsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPLEdBQWQsRUFBbUJBLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUExQixFQUErQixDQUEvQixDQUF0QyxDQUF3RTtBQUF4RSxJQUNBLENBQUNBLENBQUMsR0FBRzJXLGFBQWEsQ0FBQ3NLLElBQWQsQ0FBbUJILE1BQW5CLENBQUwsSUFBbUNRLElBQUksQ0FBQ3RoQixDQUFDLENBQUMsQ0FBRCxDQUFGLEVBQU9BLENBQUMsQ0FBQyxDQUFELENBQUQsR0FBTyxHQUFkLEVBQW1CQSxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU8sR0FBMUIsRUFBK0JBLENBQUMsQ0FBQyxDQUFELENBQWhDLENBQXZDLENBQTRFO0FBQTVFLElBQ0E0VyxLQUFLLENBQUNyUixjQUFOLENBQXFCdWIsTUFBckIsSUFBK0JLLElBQUksQ0FBQ3ZLLEtBQUssQ0FBQ2tLLE1BQUQsQ0FBTixDQUFuQyxDQUFtRDtBQUFuRCxJQUNBQSxNQUFNLEtBQUssYUFBWCxHQUEyQixJQUFJTSxHQUFKLENBQVF2YyxHQUFSLEVBQWFBLEdBQWIsRUFBa0JBLEdBQWxCLEVBQXVCLENBQXZCLENBQTNCLEdBQ0EsSUFiTjtBQWNEOztBQUVELFNBQVNzYyxJQUFULENBQWNwcEIsQ0FBZCxFQUFpQjtBQUNmLFNBQU8sSUFBSXFwQixHQUFKLENBQVFycEIsQ0FBQyxJQUFJLEVBQUwsR0FBVSxJQUFsQixFQUF3QkEsQ0FBQyxJQUFJLENBQUwsR0FBUyxJQUFqQyxFQUF1Q0EsQ0FBQyxHQUFHLElBQTNDLEVBQWlELENBQWpELENBQVA7QUFDRDs7QUFFRCxTQUFTc3BCLElBQVQsQ0FBY0UsQ0FBZCxFQUFpQkMsQ0FBakIsRUFBb0IvbUIsQ0FBcEIsRUFBdUJELENBQXZCLEVBQTBCO0FBQ3hCLE1BQUlBLENBQUMsSUFBSSxDQUFULEVBQVkrbUIsQ0FBQyxHQUFHQyxDQUFDLEdBQUcvbUIsQ0FBQyxHQUFHb0ssR0FBWjtBQUNaLFNBQU8sSUFBSXVjLEdBQUosQ0FBUUcsQ0FBUixFQUFXQyxDQUFYLEVBQWMvbUIsQ0FBZCxFQUFpQkQsQ0FBakIsQ0FBUDtBQUNEOztBQUVNLFNBQVNpbkIsVUFBVCxDQUFvQjVwQixDQUFwQixFQUF1QjtBQUM1QixNQUFJLEVBQUVBLENBQUMsWUFBWWllLEtBQWYsQ0FBSixFQUEyQmplLENBQUMsR0FBR29vQixLQUFLLENBQUNwb0IsQ0FBRCxDQUFUO0FBQzNCLE1BQUksQ0FBQ0EsQ0FBTCxFQUFRLE9BQU8sSUFBSXVwQixHQUFKLEVBQVA7QUFDUnZwQixFQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQ3dvQixHQUFGLEVBQUo7QUFDQSxTQUFPLElBQUllLEdBQUosQ0FBUXZwQixDQUFDLENBQUMwcEIsQ0FBVixFQUFhMXBCLENBQUMsQ0FBQzJwQixDQUFmLEVBQWtCM3BCLENBQUMsQ0FBQzRDLENBQXBCLEVBQXVCNUMsQ0FBQyxDQUFDNnBCLE9BQXpCLENBQVA7QUFDRDtBQUVNLFNBQVNyQixTQUFULENBQWFrQixDQUFiLEVBQWdCQyxDQUFoQixFQUFtQi9tQixDQUFuQixFQUFzQmluQixPQUF0QixFQUErQjtBQUNwQyxTQUFPeHJCLFNBQVMsQ0FBQ3FCLE1BQVYsS0FBcUIsQ0FBckIsR0FBeUJrcUIsVUFBVSxDQUFDRixDQUFELENBQW5DLEdBQXlDLElBQUlILEdBQUosQ0FBUUcsQ0FBUixFQUFXQyxDQUFYLEVBQWMvbUIsQ0FBZCxFQUFpQmluQixPQUFPLElBQUksSUFBWCxHQUFrQixDQUFsQixHQUFzQkEsT0FBdkMsQ0FBaEQ7QUFDRDtBQUVNLFNBQVNOLEdBQVQsQ0FBYUcsQ0FBYixFQUFnQkMsQ0FBaEIsRUFBbUIvbUIsQ0FBbkIsRUFBc0JpbkIsT0FBdEIsRUFBK0I7QUFDcEMsT0FBS0gsQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLQyxDQUFMLEdBQVMsQ0FBQ0EsQ0FBVjtBQUNBLE9BQUsvbUIsQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLaW5CLE9BQUwsR0FBZSxDQUFDQSxPQUFoQjtBQUNEO0FBRUQ3TCxVQUFNLENBQUN1TCxHQUFELEVBQU1mLFNBQU4sRUFBVzFLLE1BQU0sQ0FBQ0csS0FBRCxFQUFRO0FBQzdCRSxFQUFBQSxRQUFRLEVBQUUsa0JBQVMxYixDQUFULEVBQVk7QUFDcEJBLElBQUFBLENBQUMsR0FBR0EsQ0FBQyxJQUFJLElBQUwsR0FBWTBiLFNBQVosR0FBdUI5UixJQUFJLENBQUN5ZCxHQUFMLENBQVMzTCxTQUFULEVBQW1CMWIsQ0FBbkIsQ0FBM0I7QUFDQSxXQUFPLElBQUk4bUIsR0FBSixDQUFRLEtBQUtHLENBQUwsR0FBU2puQixDQUFqQixFQUFvQixLQUFLa25CLENBQUwsR0FBU2xuQixDQUE3QixFQUFnQyxLQUFLRyxDQUFMLEdBQVNILENBQXpDLEVBQTRDLEtBQUtvbkIsT0FBakQsQ0FBUDtBQUNELEdBSjRCO0FBSzdCM0wsRUFBQUEsTUFBTSxFQUFFLGdCQUFTemIsQ0FBVCxFQUFZO0FBQ2xCQSxJQUFBQSxDQUFDLEdBQUdBLENBQUMsSUFBSSxJQUFMLEdBQVl5YixPQUFaLEdBQXFCN1IsSUFBSSxDQUFDeWQsR0FBTCxDQUFTNUwsT0FBVCxFQUFpQnpiLENBQWpCLENBQXpCO0FBQ0EsV0FBTyxJQUFJOG1CLEdBQUosQ0FBUSxLQUFLRyxDQUFMLEdBQVNqbkIsQ0FBakIsRUFBb0IsS0FBS2tuQixDQUFMLEdBQVNsbkIsQ0FBN0IsRUFBZ0MsS0FBS0csQ0FBTCxHQUFTSCxDQUF6QyxFQUE0QyxLQUFLb25CLE9BQWpELENBQVA7QUFDRCxHQVI0QjtBQVM3QnJCLEVBQUFBLEdBQUcsRUFBRSxlQUFXO0FBQ2QsV0FBTyxJQUFQO0FBQ0QsR0FYNEI7QUFZN0JELEVBQUFBLFdBQVcsRUFBRSx1QkFBVztBQUN0QixXQUFRLENBQUMsR0FBRCxJQUFRLEtBQUttQixDQUFiLElBQWtCLEtBQUtBLENBQUwsR0FBUyxLQUE1QixJQUNDLENBQUMsR0FBRCxJQUFRLEtBQUtDLENBQWIsSUFBa0IsS0FBS0EsQ0FBTCxHQUFTLEtBRDVCLElBRUMsQ0FBQyxHQUFELElBQVEsS0FBSy9tQixDQUFiLElBQWtCLEtBQUtBLENBQUwsR0FBUyxLQUY1QixJQUdDLEtBQUssS0FBS2luQixPQUFWLElBQXFCLEtBQUtBLE9BQUwsSUFBZ0IsQ0FIN0M7QUFJRCxHQWpCNEI7QUFrQjdCcEIsRUFBQUEsR0FBRyxFQUFFc0IsYUFsQndCO0FBa0JUO0FBQ3BCcEIsRUFBQUEsU0FBUyxFQUFFb0IsYUFuQmtCO0FBb0I3QmpCLEVBQUFBLFNBQVMsRUFBRWtCLGFBcEJrQjtBQXFCN0IzcEIsRUFBQUEsUUFBUSxFQUFFMnBCO0FBckJtQixDQUFSLENBQWpCLENBQU47O0FBd0JBLFNBQVNELGFBQVQsR0FBeUI7QUFDdkIsU0FBTyxNQUFNdEIsR0FBRyxDQUFDLEtBQUtpQixDQUFOLENBQVQsR0FBb0JqQixHQUFHLENBQUMsS0FBS2tCLENBQU4sQ0FBdkIsR0FBa0NsQixHQUFHLENBQUMsS0FBSzdsQixDQUFOLENBQTVDO0FBQ0Q7O0FBRUQsU0FBU29uQixhQUFULEdBQXlCO0FBQ3ZCLE1BQUlybkIsQ0FBQyxHQUFHLEtBQUtrbkIsT0FBYjtBQUFzQmxuQixFQUFBQSxDQUFDLEdBQUdzbkIsS0FBSyxDQUFDdG5CLENBQUQsQ0FBTCxHQUFXLENBQVgsR0FBZTBKLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVk3ZCxJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVkzSixDQUFaLENBQVosQ0FBbkI7QUFDdEIsU0FBTyxDQUFDQSxDQUFDLEtBQUssQ0FBTixHQUFVLE1BQVYsR0FBbUIsT0FBcEIsSUFDRDBKLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVk3ZCxJQUFJLENBQUNDLEdBQUwsQ0FBUyxHQUFULEVBQWNELElBQUksQ0FBQzhkLEtBQUwsQ0FBVyxLQUFLVCxDQUFoQixLQUFzQixDQUFwQyxDQUFaLENBREMsR0FDcUQsSUFEckQsR0FFRHJkLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVk3ZCxJQUFJLENBQUNDLEdBQUwsQ0FBUyxHQUFULEVBQWNELElBQUksQ0FBQzhkLEtBQUwsQ0FBVyxLQUFLUixDQUFoQixLQUFzQixDQUFwQyxDQUFaLENBRkMsR0FFcUQsSUFGckQsR0FHRHRkLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVk3ZCxJQUFJLENBQUNDLEdBQUwsQ0FBUyxHQUFULEVBQWNELElBQUksQ0FBQzhkLEtBQUwsQ0FBVyxLQUFLdm5CLENBQWhCLEtBQXNCLENBQXBDLENBQVosQ0FIQyxJQUlBRCxDQUFDLEtBQUssQ0FBTixHQUFVLEdBQVYsR0FBZ0IsT0FBT0EsQ0FBUCxHQUFXLEdBSjNCLENBQVA7QUFLRDs7QUFFRCxTQUFTOGxCLEdBQVQsQ0FBYTdxQixLQUFiLEVBQW9CO0FBQ2xCQSxFQUFBQSxLQUFLLEdBQUd5TyxJQUFJLENBQUM2ZCxHQUFMLENBQVMsQ0FBVCxFQUFZN2QsSUFBSSxDQUFDQyxHQUFMLENBQVMsR0FBVCxFQUFjRCxJQUFJLENBQUM4ZCxLQUFMLENBQVd2c0IsS0FBWCxLQUFxQixDQUFuQyxDQUFaLENBQVI7QUFDQSxTQUFPLENBQUNBLEtBQUssR0FBRyxFQUFSLEdBQWEsR0FBYixHQUFtQixFQUFwQixJQUEwQkEsS0FBSyxDQUFDeUMsUUFBTixDQUFlLEVBQWYsQ0FBakM7QUFDRDs7QUFFRCxTQUFTb3BCLElBQVQsQ0FBY1csQ0FBZCxFQUFpQnZOLENBQWpCLEVBQW9CcU0sQ0FBcEIsRUFBdUJ2bUIsQ0FBdkIsRUFBMEI7QUFDeEIsTUFBSUEsQ0FBQyxJQUFJLENBQVQsRUFBWXluQixDQUFDLEdBQUd2TixDQUFDLEdBQUdxTSxDQUFDLEdBQUdsYyxHQUFaLENBQVosS0FDSyxJQUFJa2MsQ0FBQyxJQUFJLENBQUwsSUFBVUEsQ0FBQyxJQUFJLENBQW5CLEVBQXNCa0IsQ0FBQyxHQUFHdk4sQ0FBQyxHQUFHN1AsR0FBUixDQUF0QixLQUNBLElBQUk2UCxDQUFDLElBQUksQ0FBVCxFQUFZdU4sQ0FBQyxHQUFHcGQsR0FBSjtBQUNqQixTQUFPLElBQUlxZCxHQUFKLENBQVFELENBQVIsRUFBV3ZOLENBQVgsRUFBY3FNLENBQWQsRUFBaUJ2bUIsQ0FBakIsQ0FBUDtBQUNEOztBQUVNLFNBQVNxbUIsVUFBVCxDQUFvQmhwQixDQUFwQixFQUF1QjtBQUM1QixNQUFJQSxDQUFDLFlBQVlxcUIsR0FBakIsRUFBc0IsT0FBTyxJQUFJQSxHQUFKLENBQVFycUIsQ0FBQyxDQUFDb3FCLENBQVYsRUFBYXBxQixDQUFDLENBQUM2YyxDQUFmLEVBQWtCN2MsQ0FBQyxDQUFDa3BCLENBQXBCLEVBQXVCbHBCLENBQUMsQ0FBQzZwQixPQUF6QixDQUFQO0FBQ3RCLE1BQUksRUFBRTdwQixDQUFDLFlBQVlpZSxLQUFmLENBQUosRUFBMkJqZSxDQUFDLEdBQUdvb0IsS0FBSyxDQUFDcG9CLENBQUQsQ0FBVDtBQUMzQixNQUFJLENBQUNBLENBQUwsRUFBUSxPQUFPLElBQUlxcUIsR0FBSixFQUFQO0FBQ1IsTUFBSXJxQixDQUFDLFlBQVlxcUIsR0FBakIsRUFBc0IsT0FBT3JxQixDQUFQO0FBQ3RCQSxFQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQ3dvQixHQUFGLEVBQUo7QUFDQSxNQUFJa0IsQ0FBQyxHQUFHMXBCLENBQUMsQ0FBQzBwQixDQUFGLEdBQU0sR0FBZDtBQUFBLE1BQ0lDLENBQUMsR0FBRzNwQixDQUFDLENBQUMycEIsQ0FBRixHQUFNLEdBRGQ7QUFBQSxNQUVJL21CLENBQUMsR0FBRzVDLENBQUMsQ0FBQzRDLENBQUYsR0FBTSxHQUZkO0FBQUEsTUFHSTBKLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFMLENBQVNvZCxDQUFULEVBQVlDLENBQVosRUFBZS9tQixDQUFmLENBSFY7QUFBQSxNQUlJc25CLEdBQUcsR0FBRzdkLElBQUksQ0FBQzZkLEdBQUwsQ0FBU1IsQ0FBVCxFQUFZQyxDQUFaLEVBQWUvbUIsQ0FBZixDQUpWO0FBQUEsTUFLSXduQixDQUFDLEdBQUdwZCxHQUxSO0FBQUEsTUFNSTZQLENBQUMsR0FBR3FOLEdBQUcsR0FBRzVkLEdBTmQ7QUFBQSxNQU9JNGMsQ0FBQyxHQUFHLENBQUNnQixHQUFHLEdBQUc1ZCxHQUFQLElBQWMsQ0FQdEI7O0FBUUEsTUFBSXVRLENBQUosRUFBTztBQUNMLFFBQUk2TSxDQUFDLEtBQUtRLEdBQVYsRUFBZUUsQ0FBQyxHQUFHLENBQUNULENBQUMsR0FBRy9tQixDQUFMLElBQVVpYSxDQUFWLEdBQWMsQ0FBQzhNLENBQUMsR0FBRy9tQixDQUFMLElBQVUsQ0FBNUIsQ0FBZixLQUNLLElBQUkrbUIsQ0FBQyxLQUFLTyxHQUFWLEVBQWVFLENBQUMsR0FBRyxDQUFDeG5CLENBQUMsR0FBRzhtQixDQUFMLElBQVU3TSxDQUFWLEdBQWMsQ0FBbEIsQ0FBZixLQUNBdU4sQ0FBQyxHQUFHLENBQUNWLENBQUMsR0FBR0MsQ0FBTCxJQUFVOU0sQ0FBVixHQUFjLENBQWxCO0FBQ0xBLElBQUFBLENBQUMsSUFBSXFNLENBQUMsR0FBRyxHQUFKLEdBQVVnQixHQUFHLEdBQUc1ZCxHQUFoQixHQUFzQixJQUFJNGQsR0FBSixHQUFVNWQsR0FBckM7QUFDQThkLElBQUFBLENBQUMsSUFBSSxFQUFMO0FBQ0QsR0FORCxNQU1PO0FBQ0x2TixJQUFBQSxDQUFDLEdBQUdxTSxDQUFDLEdBQUcsQ0FBSixJQUFTQSxDQUFDLEdBQUcsQ0FBYixHQUFpQixDQUFqQixHQUFxQmtCLENBQXpCO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJQyxHQUFKLENBQVFELENBQVIsRUFBV3ZOLENBQVgsRUFBY3FNLENBQWQsRUFBaUJscEIsQ0FBQyxDQUFDNnBCLE9BQW5CLENBQVA7QUFDRDtBQUVNLFNBQVNTLEdBQVQsQ0FBYUYsQ0FBYixFQUFnQnZOLENBQWhCLEVBQW1CcU0sQ0FBbkIsRUFBc0JXLE9BQXRCLEVBQStCO0FBQ3BDLFNBQU94ckIsU0FBUyxDQUFDcUIsTUFBVixLQUFxQixDQUFyQixHQUF5QnNwQixVQUFVLENBQUNvQixDQUFELENBQW5DLEdBQXlDLElBQUlDLEdBQUosQ0FBUUQsQ0FBUixFQUFXdk4sQ0FBWCxFQUFjcU0sQ0FBZCxFQUFpQlcsT0FBTyxJQUFJLElBQVgsR0FBa0IsQ0FBbEIsR0FBc0JBLE9BQXZDLENBQWhEO0FBQ0Q7O0FBRUQsU0FBU1EsR0FBVCxDQUFhRCxDQUFiLEVBQWdCdk4sQ0FBaEIsRUFBbUJxTSxDQUFuQixFQUFzQlcsT0FBdEIsRUFBK0I7QUFDN0IsT0FBS08sQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLdk4sQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLcU0sQ0FBTCxHQUFTLENBQUNBLENBQVY7QUFDQSxPQUFLVyxPQUFMLEdBQWUsQ0FBQ0EsT0FBaEI7QUFDRDs7QUFFRDdMLFVBQU0sQ0FBQ3FNLEdBQUQsRUFBTUMsR0FBTixFQUFXeE0sTUFBTSxDQUFDRyxLQUFELEVBQVE7QUFDN0JFLEVBQUFBLFFBQVEsRUFBRSxrQkFBUzFiLENBQVQsRUFBWTtBQUNwQkEsSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLElBQUksSUFBTCxHQUFZMGIsU0FBWixHQUF1QjlSLElBQUksQ0FBQ3lkLEdBQUwsQ0FBUzNMLFNBQVQsRUFBbUIxYixDQUFuQixDQUEzQjtBQUNBLFdBQU8sSUFBSTRuQixHQUFKLENBQVEsS0FBS0QsQ0FBYixFQUFnQixLQUFLdk4sQ0FBckIsRUFBd0IsS0FBS3FNLENBQUwsR0FBU3ptQixDQUFqQyxFQUFvQyxLQUFLb25CLE9BQXpDLENBQVA7QUFDRCxHQUo0QjtBQUs3QjNMLEVBQUFBLE1BQU0sRUFBRSxnQkFBU3piLENBQVQsRUFBWTtBQUNsQkEsSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLElBQUksSUFBTCxHQUFZeWIsT0FBWixHQUFxQjdSLElBQUksQ0FBQ3lkLEdBQUwsQ0FBUzVMLE9BQVQsRUFBaUJ6YixDQUFqQixDQUF6QjtBQUNBLFdBQU8sSUFBSTRuQixHQUFKLENBQVEsS0FBS0QsQ0FBYixFQUFnQixLQUFLdk4sQ0FBckIsRUFBd0IsS0FBS3FNLENBQUwsR0FBU3ptQixDQUFqQyxFQUFvQyxLQUFLb25CLE9BQXpDLENBQVA7QUFDRCxHQVI0QjtBQVM3QnJCLEVBQUFBLEdBQUcsRUFBRSxlQUFXO0FBQ2QsUUFBSTRCLENBQUMsR0FBRyxLQUFLQSxDQUFMLEdBQVMsR0FBVCxHQUFlLENBQUMsS0FBS0EsQ0FBTCxHQUFTLENBQVYsSUFBZSxHQUF0QztBQUFBLFFBQ0l2TixDQUFDLEdBQUdvTixLQUFLLENBQUNHLENBQUQsQ0FBTCxJQUFZSCxLQUFLLENBQUMsS0FBS3BOLENBQU4sQ0FBakIsR0FBNEIsQ0FBNUIsR0FBZ0MsS0FBS0EsQ0FEN0M7QUFBQSxRQUVJcU0sQ0FBQyxHQUFHLEtBQUtBLENBRmI7QUFBQSxRQUdJcUIsRUFBRSxHQUFHckIsQ0FBQyxHQUFHLENBQUNBLENBQUMsR0FBRyxHQUFKLEdBQVVBLENBQVYsR0FBYyxJQUFJQSxDQUFuQixJQUF3QnJNLENBSHJDO0FBQUEsUUFJSXpRLEVBQUUsR0FBRyxJQUFJOGMsQ0FBSixHQUFRcUIsRUFKakI7QUFLQSxXQUFPLElBQUloQixHQUFKLENBQ0xpQixPQUFPLENBQUNKLENBQUMsSUFBSSxHQUFMLEdBQVdBLENBQUMsR0FBRyxHQUFmLEdBQXFCQSxDQUFDLEdBQUcsR0FBMUIsRUFBK0JoZSxFQUEvQixFQUFtQ21lLEVBQW5DLENBREYsRUFFTEMsT0FBTyxDQUFDSixDQUFELEVBQUloZSxFQUFKLEVBQVFtZSxFQUFSLENBRkYsRUFHTEMsT0FBTyxDQUFDSixDQUFDLEdBQUcsR0FBSixHQUFVQSxDQUFDLEdBQUcsR0FBZCxHQUFvQkEsQ0FBQyxHQUFHLEdBQXpCLEVBQThCaGUsRUFBOUIsRUFBa0NtZSxFQUFsQyxDQUhGLEVBSUwsS0FBS1YsT0FKQSxDQUFQO0FBTUQsR0FyQjRCO0FBc0I3QnRCLEVBQUFBLFdBQVcsRUFBRSx1QkFBVztBQUN0QixXQUFPLENBQUMsS0FBSyxLQUFLMUwsQ0FBVixJQUFlLEtBQUtBLENBQUwsSUFBVSxDQUF6QixJQUE4Qm9OLEtBQUssQ0FBQyxLQUFLcE4sQ0FBTixDQUFwQyxLQUNDLEtBQUssS0FBS3FNLENBQVYsSUFBZSxLQUFLQSxDQUFMLElBQVUsQ0FEMUIsSUFFQyxLQUFLLEtBQUtXLE9BQVYsSUFBcUIsS0FBS0EsT0FBTCxJQUFnQixDQUY3QztBQUdELEdBMUI0QjtBQTJCN0JqQixFQUFBQSxTQUFTLEVBQUUscUJBQVc7QUFDcEIsUUFBSWptQixDQUFDLEdBQUcsS0FBS2tuQixPQUFiO0FBQXNCbG5CLElBQUFBLENBQUMsR0FBR3NuQixLQUFLLENBQUN0bkIsQ0FBRCxDQUFMLEdBQVcsQ0FBWCxHQUFlMEosSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWTdkLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWTNKLENBQVosQ0FBWixDQUFuQjtBQUN0QixXQUFPLENBQUNBLENBQUMsS0FBSyxDQUFOLEdBQVUsTUFBVixHQUFtQixPQUFwQixLQUNBLEtBQUt5bkIsQ0FBTCxJQUFVLENBRFYsSUFDZSxJQURmLEdBRUQsQ0FBQyxLQUFLdk4sQ0FBTCxJQUFVLENBQVgsSUFBZ0IsR0FGZixHQUVxQixLQUZyQixHQUdELENBQUMsS0FBS3FNLENBQUwsSUFBVSxDQUFYLElBQWdCLEdBSGYsR0FHcUIsR0FIckIsSUFJQXZtQixDQUFDLEtBQUssQ0FBTixHQUFVLEdBQVYsR0FBZ0IsT0FBT0EsQ0FBUCxHQUFXLEdBSjNCLENBQVA7QUFLRDtBQWxDNEIsQ0FBUixDQUFqQixDQUFOO0FBcUNBOztBQUNBLFNBQVM2bkIsT0FBVCxDQUFpQkosQ0FBakIsRUFBb0JoZSxFQUFwQixFQUF3Qm1lLEVBQXhCLEVBQTRCO0FBQzFCLFNBQU8sQ0FBQ0gsQ0FBQyxHQUFHLEVBQUosR0FBU2hlLEVBQUUsR0FBRyxDQUFDbWUsRUFBRSxHQUFHbmUsRUFBTixJQUFZZ2UsQ0FBWixHQUFnQixFQUE5QixHQUNGQSxDQUFDLEdBQUcsR0FBSixHQUFVRyxFQUFWLEdBQ0FILENBQUMsR0FBRyxHQUFKLEdBQVVoZSxFQUFFLEdBQUcsQ0FBQ21lLEVBQUUsR0FBR25lLEVBQU4sS0FBYSxNQUFNZ2UsQ0FBbkIsSUFBd0IsRUFBdkMsR0FDQWhlLEVBSEMsSUFHSyxHQUhaO0FBSUQsQzs7QUNsWE0sU0FBU3FlLEtBQVQsQ0FBZXBSLEVBQWYsRUFBbUJxUixFQUFuQixFQUF1QkMsRUFBdkIsRUFBMkJDLEVBQTNCLEVBQStCQyxFQUEvQixFQUFtQztBQUN4QyxNQUFJdlIsRUFBRSxHQUFHRCxFQUFFLEdBQUdBLEVBQWQ7QUFBQSxNQUFrQnlSLEVBQUUsR0FBR3hSLEVBQUUsR0FBR0QsRUFBNUI7QUFDQSxTQUFPLENBQUMsQ0FBQyxJQUFJLElBQUlBLEVBQVIsR0FBYSxJQUFJQyxFQUFqQixHQUFzQndSLEVBQXZCLElBQTZCSixFQUE3QixHQUNGLENBQUMsSUFBSSxJQUFJcFIsRUFBUixHQUFhLElBQUl3UixFQUFsQixJQUF3QkgsRUFEdEIsR0FFRixDQUFDLElBQUksSUFBSXRSLEVBQVIsR0FBYSxJQUFJQyxFQUFqQixHQUFzQixJQUFJd1IsRUFBM0IsSUFBaUNGLEVBRi9CLEdBR0ZFLEVBQUUsR0FBR0QsRUFISixJQUdVLENBSGpCO0FBSUQ7QUFFRCw2QkFBZSxtQkFBU0UsTUFBVCxFQUFpQjtBQUM5QixNQUFJN3FCLENBQUMsR0FBRzZxQixNQUFNLENBQUNyckIsTUFBUCxHQUFnQixDQUF4QjtBQUNBLFNBQU8sVUFBU3FULENBQVQsRUFBWTtBQUNqQixRQUFJalUsQ0FBQyxHQUFHaVUsQ0FBQyxJQUFJLENBQUwsR0FBVUEsQ0FBQyxHQUFHLENBQWQsR0FBbUJBLENBQUMsSUFBSSxDQUFMLElBQVVBLENBQUMsR0FBRyxDQUFKLEVBQU83UyxDQUFDLEdBQUcsQ0FBckIsSUFBMEJtTSxJQUFJLENBQUMyZSxLQUFMLENBQVdqWSxDQUFDLEdBQUc3UyxDQUFmLENBQXJEO0FBQUEsUUFDSXlxQixFQUFFLEdBQUdJLE1BQU0sQ0FBQ2pzQixDQUFELENBRGY7QUFBQSxRQUVJOHJCLEVBQUUsR0FBR0csTUFBTSxDQUFDanNCLENBQUMsR0FBRyxDQUFMLENBRmY7QUFBQSxRQUdJNHJCLEVBQUUsR0FBRzVyQixDQUFDLEdBQUcsQ0FBSixHQUFRaXNCLE1BQU0sQ0FBQ2pzQixDQUFDLEdBQUcsQ0FBTCxDQUFkLEdBQXdCLElBQUk2ckIsRUFBSixHQUFTQyxFQUgxQztBQUFBLFFBSUlDLEVBQUUsR0FBRy9yQixDQUFDLEdBQUdvQixDQUFDLEdBQUcsQ0FBUixHQUFZNnFCLE1BQU0sQ0FBQ2pzQixDQUFDLEdBQUcsQ0FBTCxDQUFsQixHQUE0QixJQUFJOHJCLEVBQUosR0FBU0QsRUFKOUM7QUFLQSxXQUFPRixLQUFLLENBQUMsQ0FBQzFYLENBQUMsR0FBR2pVLENBQUMsR0FBR29CLENBQVQsSUFBY0EsQ0FBZixFQUFrQndxQixFQUFsQixFQUFzQkMsRUFBdEIsRUFBMEJDLEVBQTFCLEVBQThCQyxFQUE5QixDQUFaO0FBQ0QsR0FQRDtBQVFELEM7O0FDbEJEO0FBRUEsNkJBQWUscUJBQVNFLE1BQVQsRUFBaUI7QUFDOUIsTUFBSTdxQixDQUFDLEdBQUc2cUIsTUFBTSxDQUFDcnJCLE1BQWY7QUFDQSxTQUFPLFVBQVNxVCxDQUFULEVBQVk7QUFDakIsUUFBSWpVLENBQUMsR0FBR3VOLElBQUksQ0FBQzJlLEtBQUwsQ0FBVyxDQUFDLENBQUNqWSxDQUFDLElBQUksQ0FBTixJQUFXLENBQVgsR0FBZSxFQUFFQSxDQUFqQixHQUFxQkEsQ0FBdEIsSUFBMkI3UyxDQUF0QyxDQUFSO0FBQUEsUUFDSXdxQixFQUFFLEdBQUdLLE1BQU0sQ0FBQyxDQUFDanNCLENBQUMsR0FBR29CLENBQUosR0FBUSxDQUFULElBQWNBLENBQWYsQ0FEZjtBQUFBLFFBRUl5cUIsRUFBRSxHQUFHSSxNQUFNLENBQUNqc0IsQ0FBQyxHQUFHb0IsQ0FBTCxDQUZmO0FBQUEsUUFHSTBxQixFQUFFLEdBQUdHLE1BQU0sQ0FBQyxDQUFDanNCLENBQUMsR0FBRyxDQUFMLElBQVVvQixDQUFYLENBSGY7QUFBQSxRQUlJMnFCLEVBQUUsR0FBR0UsTUFBTSxDQUFDLENBQUNqc0IsQ0FBQyxHQUFHLENBQUwsSUFBVW9CLENBQVgsQ0FKZjtBQUtBLFdBQU91cUIsS0FBSyxDQUFDLENBQUMxWCxDQUFDLEdBQUdqVSxDQUFDLEdBQUdvQixDQUFULElBQWNBLENBQWYsRUFBa0J3cUIsRUFBbEIsRUFBc0JDLEVBQXRCLEVBQTBCQyxFQUExQixFQUE4QkMsRUFBOUIsQ0FBWjtBQUNELEdBUEQ7QUFRRCxDOztBQ1pELGtFQUFlLFVBQUE3akIsQ0FBQztBQUFBLFNBQUk7QUFBQSxXQUFNQSxDQUFOO0FBQUEsR0FBSjtBQUFBLENBQWhCLEU7O0FDQUE7O0FBRUEsU0FBU2lrQixNQUFULENBQWdCdG9CLENBQWhCLEVBQW1Cc0MsQ0FBbkIsRUFBc0I7QUFDcEIsU0FBTyxVQUFTOE4sQ0FBVCxFQUFZO0FBQ2pCLFdBQU9wUSxDQUFDLEdBQUdvUSxDQUFDLEdBQUc5TixDQUFmO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNpbUIsV0FBVCxDQUFxQnZvQixDQUFyQixFQUF3QkMsQ0FBeEIsRUFBMkJ1b0IsQ0FBM0IsRUFBOEI7QUFDNUIsU0FBT3hvQixDQUFDLEdBQUcwSixJQUFJLENBQUN5ZCxHQUFMLENBQVNubkIsQ0FBVCxFQUFZd29CLENBQVosQ0FBSixFQUFvQnZvQixDQUFDLEdBQUd5SixJQUFJLENBQUN5ZCxHQUFMLENBQVNsbkIsQ0FBVCxFQUFZdW9CLENBQVosSUFBaUJ4b0IsQ0FBekMsRUFBNEN3b0IsQ0FBQyxHQUFHLElBQUlBLENBQXBELEVBQXVELFVBQVNwWSxDQUFULEVBQVk7QUFDeEUsV0FBTzFHLElBQUksQ0FBQ3lkLEdBQUwsQ0FBU25uQixDQUFDLEdBQUdvUSxDQUFDLEdBQUduUSxDQUFqQixFQUFvQnVvQixDQUFwQixDQUFQO0FBQ0QsR0FGRDtBQUdEOztBQUVNLFNBQVNDLEdBQVQsQ0FBYXpvQixDQUFiLEVBQWdCQyxDQUFoQixFQUFtQjtBQUN4QixNQUFJcUMsQ0FBQyxHQUFHckMsQ0FBQyxHQUFHRCxDQUFaO0FBQ0EsU0FBT3NDLENBQUMsR0FBR2dtQixNQUFNLENBQUN0b0IsQ0FBRCxFQUFJc0MsQ0FBQyxHQUFHLEdBQUosSUFBV0EsQ0FBQyxHQUFHLENBQUMsR0FBaEIsR0FBc0JBLENBQUMsR0FBRyxNQUFNb0gsSUFBSSxDQUFDOGQsS0FBTCxDQUFXbGxCLENBQUMsR0FBRyxHQUFmLENBQWhDLEdBQXNEQSxDQUExRCxDQUFULEdBQXdFb0YsMkJBQVEsQ0FBQzRmLEtBQUssQ0FBQ3RuQixDQUFELENBQUwsR0FBV0MsQ0FBWCxHQUFlRCxDQUFoQixDQUF4RjtBQUNEO0FBRU0sU0FBUzBvQixLQUFULENBQWVGLENBQWYsRUFBa0I7QUFDdkIsU0FBTyxDQUFDQSxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixNQUFhLENBQWIsR0FBaUJHLE9BQWpCLEdBQTJCLFVBQVMzb0IsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDL0MsV0FBT0EsQ0FBQyxHQUFHRCxDQUFKLEdBQVF1b0IsV0FBVyxDQUFDdm9CLENBQUQsRUFBSUMsQ0FBSixFQUFPdW9CLENBQVAsQ0FBbkIsR0FBK0I5Z0IsMkJBQVEsQ0FBQzRmLEtBQUssQ0FBQ3RuQixDQUFELENBQUwsR0FBV0MsQ0FBWCxHQUFlRCxDQUFoQixDQUE5QztBQUNELEdBRkQ7QUFHRDtBQUVjLFNBQVMyb0IsT0FBVCxDQUFpQjNvQixDQUFqQixFQUFvQkMsQ0FBcEIsRUFBdUI7QUFDcEMsTUFBSXFDLENBQUMsR0FBR3JDLENBQUMsR0FBR0QsQ0FBWjtBQUNBLFNBQU9zQyxDQUFDLEdBQUdnbUIsTUFBTSxDQUFDdG9CLENBQUQsRUFBSXNDLENBQUosQ0FBVCxHQUFrQm9GLDJCQUFRLENBQUM0ZixLQUFLLENBQUN0bkIsQ0FBRCxDQUFMLEdBQVdDLENBQVgsR0FBZUQsQ0FBaEIsQ0FBbEM7QUFDRCxDOztBQzVCRDtBQUNBO0FBQ0E7QUFDQTtBQUVBLDBDQUFlLENBQUMsU0FBUzhvQixRQUFULENBQWtCTixDQUFsQixFQUFxQjtBQUNuQyxNQUFJL0MsS0FBSyxHQUFHaUQsS0FBSyxDQUFDRixDQUFELENBQWpCOztBQUVBLFdBQVMzQyxHQUFULENBQWFubUIsS0FBYixFQUFvQkQsR0FBcEIsRUFBeUI7QUFDdkIsUUFBSXNuQixDQUFDLEdBQUd0QixLQUFLLENBQUMsQ0FBQy9sQixLQUFLLEdBQUdrcEIsU0FBUSxDQUFDbHBCLEtBQUQsQ0FBakIsRUFBMEJxbkIsQ0FBM0IsRUFBOEIsQ0FBQ3RuQixHQUFHLEdBQUdtcEIsU0FBUSxDQUFDbnBCLEdBQUQsQ0FBZixFQUFzQnNuQixDQUFwRCxDQUFiO0FBQUEsUUFDSUMsQ0FBQyxHQUFHdkIsS0FBSyxDQUFDL2xCLEtBQUssQ0FBQ3NuQixDQUFQLEVBQVV2bkIsR0FBRyxDQUFDdW5CLENBQWQsQ0FEYjtBQUFBLFFBRUkvbUIsQ0FBQyxHQUFHd2xCLEtBQUssQ0FBQy9sQixLQUFLLENBQUNPLENBQVAsRUFBVVIsR0FBRyxDQUFDUSxDQUFkLENBRmI7QUFBQSxRQUdJaW5CLE9BQU8sR0FBR3lCLE9BQU8sQ0FBQ2pwQixLQUFLLENBQUN3bkIsT0FBUCxFQUFnQnpuQixHQUFHLENBQUN5bkIsT0FBcEIsQ0FIckI7QUFJQSxXQUFPLFVBQVM5VyxDQUFULEVBQVk7QUFDakIxUSxNQUFBQSxLQUFLLENBQUNxbkIsQ0FBTixHQUFVQSxDQUFDLENBQUMzVyxDQUFELENBQVg7QUFDQTFRLE1BQUFBLEtBQUssQ0FBQ3NuQixDQUFOLEdBQVVBLENBQUMsQ0FBQzVXLENBQUQsQ0FBWDtBQUNBMVEsTUFBQUEsS0FBSyxDQUFDTyxDQUFOLEdBQVVBLENBQUMsQ0FBQ21RLENBQUQsQ0FBWDtBQUNBMVEsTUFBQUEsS0FBSyxDQUFDd25CLE9BQU4sR0FBZ0JBLE9BQU8sQ0FBQzlXLENBQUQsQ0FBdkI7QUFDQSxhQUFPMVEsS0FBSyxHQUFHLEVBQWY7QUFDRCxLQU5EO0FBT0Q7O0FBRURtbUIsRUFBQUEsR0FBRyxDQUFDNkMsS0FBSixHQUFZSSxRQUFaO0FBRUEsU0FBT2pELEdBQVA7QUFDRCxDQXBCYyxFQW9CWixDQXBCWSxDQUFmOztBQXNCQSxTQUFTa0QsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkI7QUFDekIsU0FBTyxVQUFTQyxNQUFULEVBQWlCO0FBQ3RCLFFBQUkxckIsQ0FBQyxHQUFHMHJCLE1BQU0sQ0FBQ2xzQixNQUFmO0FBQUEsUUFDSWdxQixDQUFDLEdBQUcsSUFBSS9xQixLQUFKLENBQVV1QixDQUFWLENBRFI7QUFBQSxRQUVJeXBCLENBQUMsR0FBRyxJQUFJaHJCLEtBQUosQ0FBVXVCLENBQVYsQ0FGUjtBQUFBLFFBR0kwQyxDQUFDLEdBQUcsSUFBSWpFLEtBQUosQ0FBVXVCLENBQVYsQ0FIUjtBQUFBLFFBSUlwQixDQUpKO0FBQUEsUUFJT3NwQixLQUpQOztBQUtBLFNBQUt0cEIsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHb0IsQ0FBaEIsRUFBbUIsRUFBRXBCLENBQXJCLEVBQXdCO0FBQ3RCc3BCLE1BQUFBLEtBQUssR0FBR21ELFNBQVEsQ0FBQ0ssTUFBTSxDQUFDOXNCLENBQUQsQ0FBUCxDQUFoQjtBQUNBNHFCLE1BQUFBLENBQUMsQ0FBQzVxQixDQUFELENBQUQsR0FBT3NwQixLQUFLLENBQUNzQixDQUFOLElBQVcsQ0FBbEI7QUFDQUMsTUFBQUEsQ0FBQyxDQUFDN3FCLENBQUQsQ0FBRCxHQUFPc3BCLEtBQUssQ0FBQ3VCLENBQU4sSUFBVyxDQUFsQjtBQUNBL21CLE1BQUFBLENBQUMsQ0FBQzlELENBQUQsQ0FBRCxHQUFPc3BCLEtBQUssQ0FBQ3hsQixDQUFOLElBQVcsQ0FBbEI7QUFDRDs7QUFDRDhtQixJQUFBQSxDQUFDLEdBQUdpQyxNQUFNLENBQUNqQyxDQUFELENBQVY7QUFDQUMsSUFBQUEsQ0FBQyxHQUFHZ0MsTUFBTSxDQUFDaEMsQ0FBRCxDQUFWO0FBQ0EvbUIsSUFBQUEsQ0FBQyxHQUFHK29CLE1BQU0sQ0FBQy9vQixDQUFELENBQVY7QUFDQXdsQixJQUFBQSxLQUFLLENBQUN5QixPQUFOLEdBQWdCLENBQWhCO0FBQ0EsV0FBTyxVQUFTOVcsQ0FBVCxFQUFZO0FBQ2pCcVYsTUFBQUEsS0FBSyxDQUFDc0IsQ0FBTixHQUFVQSxDQUFDLENBQUMzVyxDQUFELENBQVg7QUFDQXFWLE1BQUFBLEtBQUssQ0FBQ3VCLENBQU4sR0FBVUEsQ0FBQyxDQUFDNVcsQ0FBRCxDQUFYO0FBQ0FxVixNQUFBQSxLQUFLLENBQUN4bEIsQ0FBTixHQUFVQSxDQUFDLENBQUNtUSxDQUFELENBQVg7QUFDQSxhQUFPcVYsS0FBSyxHQUFHLEVBQWY7QUFDRCxLQUxEO0FBTUQsR0F0QkQ7QUF1QkQ7O0FBRU0sSUFBSXlELFFBQVEsR0FBR0gsU0FBUyxDQUFDakIsU0FBRCxDQUF4QjtBQUNBLElBQUlxQixjQUFjLEdBQUdKLFNBQVMsQ0FBQ0YsV0FBRCxDQUE5QixDOztBQ3REUDtBQUVBLElBQUlPLEdBQUcsR0FBRyw2Q0FBVjtBQUFBLElBQ0lDLEdBQUcsR0FBRyxJQUFJdk4sTUFBSixDQUFXc04sR0FBRyxDQUFDMW9CLE1BQWYsRUFBdUIsR0FBdkIsQ0FEVjs7QUFHQSxTQUFTNG9CLElBQVQsQ0FBY3JwQixDQUFkLEVBQWlCO0FBQ2YsU0FBTyxZQUFXO0FBQ2hCLFdBQU9BLENBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3NwQixHQUFULENBQWF0cEIsQ0FBYixFQUFnQjtBQUNkLFNBQU8sVUFBU21RLENBQVQsRUFBWTtBQUNqQixXQUFPblEsQ0FBQyxDQUFDbVEsQ0FBRCxDQUFELEdBQU8sRUFBZDtBQUNELEdBRkQ7QUFHRDs7QUFFRCw2QkFBZSxnQkFBU3BRLENBQVQsRUFBWUMsQ0FBWixFQUFlO0FBQzVCLE1BQUl1cEIsRUFBRSxHQUFHSixHQUFHLENBQUNLLFNBQUosR0FBZ0JKLEdBQUcsQ0FBQ0ksU0FBSixHQUFnQixDQUF6QztBQUFBLE1BQTRDO0FBQ3hDQyxFQUFBQSxFQURKO0FBQUEsTUFDUTtBQUNKQyxFQUFBQSxFQUZKO0FBQUEsTUFFUTtBQUNKQyxFQUFBQSxFQUhKO0FBQUEsTUFHUTtBQUNKenRCLEVBQUFBLENBQUMsR0FBRyxDQUFDLENBSlQ7QUFBQSxNQUlZO0FBQ1IrZCxFQUFBQSxDQUFDLEdBQUcsRUFMUjtBQUFBLE1BS1k7QUFDUk0sRUFBQUEsQ0FBQyxHQUFHLEVBTlIsQ0FENEIsQ0FPaEI7QUFFWjs7QUFDQXhhLEVBQUFBLENBQUMsR0FBR0EsQ0FBQyxHQUFHLEVBQVIsRUFBWUMsQ0FBQyxHQUFHQSxDQUFDLEdBQUcsRUFBcEIsQ0FWNEIsQ0FZNUI7O0FBQ0EsU0FBTyxDQUFDeXBCLEVBQUUsR0FBR04sR0FBRyxDQUFDM0MsSUFBSixDQUFTem1CLENBQVQsQ0FBTixNQUNDMnBCLEVBQUUsR0FBR04sR0FBRyxDQUFDNUMsSUFBSixDQUFTeG1CLENBQVQsQ0FETixDQUFQLEVBQzJCO0FBQ3pCLFFBQUksQ0FBQzJwQixFQUFFLEdBQUdELEVBQUUsQ0FBQ3pxQixLQUFULElBQWtCc3FCLEVBQXRCLEVBQTBCO0FBQUU7QUFDMUJJLE1BQUFBLEVBQUUsR0FBRzNwQixDQUFDLENBQUN0QyxLQUFGLENBQVE2ckIsRUFBUixFQUFZSSxFQUFaLENBQUw7QUFDQSxVQUFJMVAsQ0FBQyxDQUFDL2QsQ0FBRCxDQUFMLEVBQVUrZCxDQUFDLENBQUMvZCxDQUFELENBQUQsSUFBUXl0QixFQUFSLENBQVYsQ0FBc0I7QUFBdEIsV0FDSzFQLENBQUMsQ0FBQyxFQUFFL2QsQ0FBSCxDQUFELEdBQVN5dEIsRUFBVDtBQUNOOztBQUNELFFBQUksQ0FBQ0YsRUFBRSxHQUFHQSxFQUFFLENBQUMsQ0FBRCxDQUFSLE9BQWtCQyxFQUFFLEdBQUdBLEVBQUUsQ0FBQyxDQUFELENBQXpCLENBQUosRUFBbUM7QUFBRTtBQUNuQyxVQUFJelAsQ0FBQyxDQUFDL2QsQ0FBRCxDQUFMLEVBQVUrZCxDQUFDLENBQUMvZCxDQUFELENBQUQsSUFBUXd0QixFQUFSLENBQVYsQ0FBc0I7QUFBdEIsV0FDS3pQLENBQUMsQ0FBQyxFQUFFL2QsQ0FBSCxDQUFELEdBQVN3dEIsRUFBVDtBQUNOLEtBSEQsTUFHTztBQUFFO0FBQ1B6UCxNQUFBQSxDQUFDLENBQUMsRUFBRS9kLENBQUgsQ0FBRCxHQUFTLElBQVQ7QUFDQXFlLE1BQUFBLENBQUMsQ0FBQzFkLElBQUYsQ0FBTztBQUFDWCxRQUFBQSxDQUFDLEVBQUVBLENBQUo7QUFBT2tJLFFBQUFBLENBQUMsRUFBRXVWLFVBQU0sQ0FBQzhQLEVBQUQsRUFBS0MsRUFBTDtBQUFoQixPQUFQO0FBQ0Q7O0FBQ0RILElBQUFBLEVBQUUsR0FBR0gsR0FBRyxDQUFDSSxTQUFUO0FBQ0QsR0E1QjJCLENBOEI1Qjs7O0FBQ0EsTUFBSUQsRUFBRSxHQUFHdnBCLENBQUMsQ0FBQ2xELE1BQVgsRUFBbUI7QUFDakI2c0IsSUFBQUEsRUFBRSxHQUFHM3BCLENBQUMsQ0FBQ3RDLEtBQUYsQ0FBUTZyQixFQUFSLENBQUw7QUFDQSxRQUFJdFAsQ0FBQyxDQUFDL2QsQ0FBRCxDQUFMLEVBQVUrZCxDQUFDLENBQUMvZCxDQUFELENBQUQsSUFBUXl0QixFQUFSLENBQVYsQ0FBc0I7QUFBdEIsU0FDSzFQLENBQUMsQ0FBQyxFQUFFL2QsQ0FBSCxDQUFELEdBQVN5dEIsRUFBVDtBQUNOLEdBbkMyQixDQXFDNUI7QUFDQTs7O0FBQ0EsU0FBTzFQLENBQUMsQ0FBQ25kLE1BQUYsR0FBVyxDQUFYLEdBQWdCeWQsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUNqQitPLEdBQUcsQ0FBQy9PLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBS25XLENBQU4sQ0FEYyxHQUVqQmlsQixJQUFJLENBQUNycEIsQ0FBRCxDQUZILElBR0FBLENBQUMsR0FBR3VhLENBQUMsQ0FBQ3pkLE1BQU4sRUFBYyxVQUFTcVQsQ0FBVCxFQUFZO0FBQ3pCLFNBQUssSUFBSWpVLENBQUMsR0FBRyxDQUFSLEVBQVdrQixDQUFoQixFQUFtQmxCLENBQUMsR0FBRzhELENBQXZCLEVBQTBCLEVBQUU5RCxDQUE1QjtBQUErQitkLE1BQUFBLENBQUMsQ0FBQyxDQUFDN2MsQ0FBQyxHQUFHbWQsQ0FBQyxDQUFDcmUsQ0FBRCxDQUFOLEVBQVdBLENBQVosQ0FBRCxHQUFrQmtCLENBQUMsQ0FBQ2dILENBQUYsQ0FBSStMLENBQUosQ0FBbEI7QUFBL0I7O0FBQ0EsV0FBTzhKLENBQUMsQ0FBQzFNLElBQUYsQ0FBTyxFQUFQLENBQVA7QUFDRCxHQU5BLENBQVA7QUFPRCxDOztBQy9ERDtBQUNBO0FBRUEsNkJBQWUsZ0NBQVN4TixDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixNQUFJSSxDQUFKO0FBQ0EsU0FBTyxDQUFDLE9BQU9KLENBQVAsS0FBYSxRQUFiLEdBQXdCNHBCLFVBQXhCLEdBQ0Y1cEIsQ0FBQyxZQUFZd2xCLEtBQWIsR0FBcUJxRSxHQUFyQixHQUNBLENBQUN6cEIsQ0FBQyxHQUFHb2xCLEtBQUssQ0FBQ3hsQixDQUFELENBQVYsS0FBa0JBLENBQUMsR0FBR0ksQ0FBSixFQUFPeXBCLEdBQXpCLElBQ0FDLE1BSEMsRUFHa0IvcEIsQ0FIbEIsRUFHcUJDLENBSHJCLENBQVA7QUFJRCxDOztBQ1REO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVNrTCxlQUFULENBQW9CdE4sSUFBcEIsRUFBMEI7QUFDeEIsU0FBTyxZQUFXO0FBQ2hCLFNBQUt1TixlQUFMLENBQXFCdk4sSUFBckI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3dOLGlCQUFULENBQXNCQyxRQUF0QixFQUFnQztBQUM5QixTQUFPLFlBQVc7QUFDaEIsU0FBS0MsaUJBQUwsQ0FBdUJELFFBQVEsQ0FBQ04sS0FBaEMsRUFBdUNNLFFBQVEsQ0FBQ0wsS0FBaEQ7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU08saUJBQVQsQ0FBc0IzTixJQUF0QixFQUE0Qm1zQixXQUE1QixFQUF5Q0MsTUFBekMsRUFBaUQ7QUFDL0MsTUFBSUMsUUFBSjtBQUFBLE1BQ0lDLE9BQU8sR0FBR0YsTUFBTSxHQUFHLEVBRHZCO0FBQUEsTUFFSUcsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFPLEdBQUcsS0FBS3JlLFlBQUwsQ0FBa0JuTyxJQUFsQixDQUFkO0FBQ0EsV0FBT3dzQixPQUFPLEtBQUtGLE9BQVosR0FBc0IsSUFBdEIsR0FDREUsT0FBTyxLQUFLSCxRQUFaLEdBQXVCRSxZQUF2QixHQUNBQSxZQUFZLEdBQUdKLFdBQVcsQ0FBQ0UsUUFBUSxHQUFHRyxPQUFaLEVBQXFCSixNQUFyQixDQUZoQztBQUdELEdBTEQ7QUFNRDs7QUFFRCxTQUFTdmUsbUJBQVQsQ0FBd0JKLFFBQXhCLEVBQWtDMGUsV0FBbEMsRUFBK0NDLE1BQS9DLEVBQXVEO0FBQ3JELE1BQUlDLFFBQUo7QUFBQSxNQUNJQyxPQUFPLEdBQUdGLE1BQU0sR0FBRyxFQUR2QjtBQUFBLE1BRUlHLFlBRko7QUFHQSxTQUFPLFlBQVc7QUFDaEIsUUFBSUMsT0FBTyxHQUFHLEtBQUt0ZSxjQUFMLENBQW9CVCxRQUFRLENBQUNOLEtBQTdCLEVBQW9DTSxRQUFRLENBQUNMLEtBQTdDLENBQWQ7QUFDQSxXQUFPb2YsT0FBTyxLQUFLRixPQUFaLEdBQXNCLElBQXRCLEdBQ0RFLE9BQU8sS0FBS0gsUUFBWixHQUF1QkUsWUFBdkIsR0FDQUEsWUFBWSxHQUFHSixXQUFXLENBQUNFLFFBQVEsR0FBR0csT0FBWixFQUFxQkosTUFBckIsQ0FGaEM7QUFHRCxHQUxEO0FBTUQ7O0FBRUQsU0FBU3JlLGlCQUFULENBQXNCL04sSUFBdEIsRUFBNEJtc0IsV0FBNUIsRUFBeUMvdUIsS0FBekMsRUFBZ0Q7QUFDOUMsTUFBSWl2QixRQUFKLEVBQ0lJLFFBREosRUFFSUYsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFKO0FBQUEsUUFBYUosTUFBTSxHQUFHaHZCLEtBQUssQ0FBQyxJQUFELENBQTNCO0FBQUEsUUFBbUNrdkIsT0FBbkM7QUFDQSxRQUFJRixNQUFNLElBQUksSUFBZCxFQUFvQixPQUFPLEtBQUssS0FBSzdlLGVBQUwsQ0FBcUJ2TixJQUFyQixDQUFaO0FBQ3BCd3NCLElBQUFBLE9BQU8sR0FBRyxLQUFLcmUsWUFBTCxDQUFrQm5PLElBQWxCLENBQVY7QUFDQXNzQixJQUFBQSxPQUFPLEdBQUdGLE1BQU0sR0FBRyxFQUFuQjtBQUNBLFdBQU9JLE9BQU8sS0FBS0YsT0FBWixHQUFzQixJQUF0QixHQUNERSxPQUFPLEtBQUtILFFBQVosSUFBd0JDLE9BQU8sS0FBS0csUUFBcEMsR0FBK0NGLFlBQS9DLElBQ0NFLFFBQVEsR0FBR0gsT0FBWCxFQUFvQkMsWUFBWSxHQUFHSixXQUFXLENBQUNFLFFBQVEsR0FBR0csT0FBWixFQUFxQkosTUFBckIsQ0FEL0MsQ0FETjtBQUdELEdBUkQ7QUFTRDs7QUFFRCxTQUFTbmUsbUJBQVQsQ0FBd0JSLFFBQXhCLEVBQWtDMGUsV0FBbEMsRUFBK0MvdUIsS0FBL0MsRUFBc0Q7QUFDcEQsTUFBSWl2QixRQUFKLEVBQ0lJLFFBREosRUFFSUYsWUFGSjtBQUdBLFNBQU8sWUFBVztBQUNoQixRQUFJQyxPQUFKO0FBQUEsUUFBYUosTUFBTSxHQUFHaHZCLEtBQUssQ0FBQyxJQUFELENBQTNCO0FBQUEsUUFBbUNrdkIsT0FBbkM7QUFDQSxRQUFJRixNQUFNLElBQUksSUFBZCxFQUFvQixPQUFPLEtBQUssS0FBSzFlLGlCQUFMLENBQXVCRCxRQUFRLENBQUNOLEtBQWhDLEVBQXVDTSxRQUFRLENBQUNMLEtBQWhELENBQVo7QUFDcEJvZixJQUFBQSxPQUFPLEdBQUcsS0FBS3RlLGNBQUwsQ0FBb0JULFFBQVEsQ0FBQ04sS0FBN0IsRUFBb0NNLFFBQVEsQ0FBQ0wsS0FBN0MsQ0FBVjtBQUNBa2YsSUFBQUEsT0FBTyxHQUFHRixNQUFNLEdBQUcsRUFBbkI7QUFDQSxXQUFPSSxPQUFPLEtBQUtGLE9BQVosR0FBc0IsSUFBdEIsR0FDREUsT0FBTyxLQUFLSCxRQUFaLElBQXdCQyxPQUFPLEtBQUtHLFFBQXBDLEdBQStDRixZQUEvQyxJQUNDRSxRQUFRLEdBQUdILE9BQVgsRUFBb0JDLFlBQVksR0FBR0osV0FBVyxDQUFDRSxRQUFRLEdBQUdHLE9BQVosRUFBcUJKLE1BQXJCLENBRC9DLENBRE47QUFHRCxHQVJEO0FBU0Q7O0FBRUQsNkJBQWUseUJBQVNwc0IsSUFBVCxFQUFlNUMsS0FBZixFQUFzQjtBQUNuQyxNQUFJcVEsUUFBUSxHQUFHSixTQUFTLENBQUNyTixJQUFELENBQXhCO0FBQUEsTUFBZ0MxQixDQUFDLEdBQUdtUCxRQUFRLEtBQUssV0FBYixHQUEyQnVPLHVCQUEzQixHQUFrRG1RLHNCQUF0RjtBQUNBLFNBQU8sS0FBS08sU0FBTCxDQUFlMXNCLElBQWYsRUFBcUIsT0FBTzVDLEtBQVAsS0FBaUIsVUFBakIsR0FDdEIsQ0FBQ3FRLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQmEsbUJBQWpCLEdBQWtDRixpQkFBbkMsRUFBaUROLFFBQWpELEVBQTJEblAsQ0FBM0QsRUFBOEQ2ZSxVQUFVLENBQUMsSUFBRCxFQUFPLFVBQVVuZCxJQUFqQixFQUF1QjVDLEtBQXZCLENBQXhFLENBRHNCLEdBRXRCQSxLQUFLLElBQUksSUFBVCxHQUFnQixDQUFDcVEsUUFBUSxDQUFDTCxLQUFULEdBQWlCSSxpQkFBakIsR0FBZ0NGLGVBQWpDLEVBQTZDRyxRQUE3QyxDQUFoQixHQUNBLENBQUNBLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQlMsbUJBQWpCLEdBQWtDRixpQkFBbkMsRUFBaURGLFFBQWpELEVBQTJEblAsQ0FBM0QsRUFBOERsQixLQUE5RCxDQUhDLENBQVA7QUFJRCxDOztBQzdFRDs7QUFFQSxTQUFTdXZCLGVBQVQsQ0FBeUIzc0IsSUFBekIsRUFBK0IxQixDQUEvQixFQUFrQztBQUNoQyxTQUFPLFVBQVNpVSxDQUFULEVBQVk7QUFDakIsU0FBSzNFLFlBQUwsQ0FBa0I1TixJQUFsQixFQUF3QjFCLENBQUMsQ0FBQ1MsSUFBRixDQUFPLElBQVAsRUFBYXdULENBQWIsQ0FBeEI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3FhLGlCQUFULENBQTJCbmYsUUFBM0IsRUFBcUNuUCxDQUFyQyxFQUF3QztBQUN0QyxTQUFPLFVBQVNpVSxDQUFULEVBQVk7QUFDakIsU0FBS3pFLGNBQUwsQ0FBb0JMLFFBQVEsQ0FBQ04sS0FBN0IsRUFBb0NNLFFBQVEsQ0FBQ0wsS0FBN0MsRUFBb0Q5TyxDQUFDLENBQUNTLElBQUYsQ0FBTyxJQUFQLEVBQWF3VCxDQUFiLENBQXBEO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNzYSxXQUFULENBQXFCcGYsUUFBckIsRUFBK0JyUSxLQUEvQixFQUFzQztBQUNwQyxNQUFJd2IsRUFBSixFQUFRaE8sRUFBUjs7QUFDQSxXQUFTbVAsS0FBVCxHQUFpQjtBQUNmLFFBQUl6YixDQUFDLEdBQUdsQixLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFSO0FBQ0EsUUFBSVMsQ0FBQyxLQUFLc00sRUFBVixFQUFjZ08sRUFBRSxHQUFHLENBQUNoTyxFQUFFLEdBQUd0TSxDQUFOLEtBQVlzdUIsaUJBQWlCLENBQUNuZixRQUFELEVBQVduUCxDQUFYLENBQWxDO0FBQ2QsV0FBT3NhLEVBQVA7QUFDRDs7QUFDRG1CLEVBQUFBLEtBQUssQ0FBQytTLE1BQU4sR0FBZTF2QixLQUFmO0FBQ0EsU0FBTzJjLEtBQVA7QUFDRDs7QUFFRCxTQUFTMlMsU0FBVCxDQUFtQjFzQixJQUFuQixFQUF5QjVDLEtBQXpCLEVBQWdDO0FBQzlCLE1BQUl3YixFQUFKLEVBQVFoTyxFQUFSOztBQUNBLFdBQVNtUCxLQUFULEdBQWlCO0FBQ2YsUUFBSXpiLENBQUMsR0FBR2xCLEtBQUssQ0FBQ1UsS0FBTixDQUFZLElBQVosRUFBa0JELFNBQWxCLENBQVI7QUFDQSxRQUFJUyxDQUFDLEtBQUtzTSxFQUFWLEVBQWNnTyxFQUFFLEdBQUcsQ0FBQ2hPLEVBQUUsR0FBR3RNLENBQU4sS0FBWXF1QixlQUFlLENBQUMzc0IsSUFBRCxFQUFPMUIsQ0FBUCxDQUFoQztBQUNkLFdBQU9zYSxFQUFQO0FBQ0Q7O0FBQ0RtQixFQUFBQSxLQUFLLENBQUMrUyxNQUFOLEdBQWUxdkIsS0FBZjtBQUNBLFNBQU8yYyxLQUFQO0FBQ0Q7O0FBRUQsNkJBQWUsOEJBQVMvWixJQUFULEVBQWU1QyxLQUFmLEVBQXNCO0FBQ25DLE1BQUlILEdBQUcsR0FBRyxVQUFVK0MsSUFBcEI7QUFDQSxNQUFJbkMsU0FBUyxDQUFDcUIsTUFBVixHQUFtQixDQUF2QixFQUEwQixPQUFPLENBQUNqQyxHQUFHLEdBQUcsS0FBSzhjLEtBQUwsQ0FBVzljLEdBQVgsQ0FBUCxLQUEyQkEsR0FBRyxDQUFDNnZCLE1BQXRDO0FBQzFCLE1BQUkxdkIsS0FBSyxJQUFJLElBQWIsRUFBbUIsT0FBTyxLQUFLMmMsS0FBTCxDQUFXOWMsR0FBWCxFQUFnQixJQUFoQixDQUFQO0FBQ25CLE1BQUksT0FBT0csS0FBUCxLQUFpQixVQUFyQixFQUFpQyxNQUFNLElBQUl5RCxLQUFKLEVBQU47QUFDakMsTUFBSTRNLFFBQVEsR0FBR0osU0FBUyxDQUFDck4sSUFBRCxDQUF4QjtBQUNBLFNBQU8sS0FBSytaLEtBQUwsQ0FBVzljLEdBQVgsRUFBZ0IsQ0FBQ3dRLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQnlmLFdBQWpCLEdBQStCSCxTQUFoQyxFQUEyQ2pmLFFBQTNDLEVBQXFEclEsS0FBckQsQ0FBaEIsQ0FBUDtBQUNELEM7O0FDM0NEOztBQUVBLFNBQVMydkIsYUFBVCxDQUF1QjVuQixFQUF2QixFQUEyQi9ILEtBQTNCLEVBQWtDO0FBQ2hDLFNBQU8sWUFBVztBQUNoQitjLElBQUFBLElBQUksQ0FBQyxJQUFELEVBQU9oVixFQUFQLENBQUosQ0FBZStTLEtBQWYsR0FBdUIsQ0FBQzlhLEtBQUssQ0FBQ1UsS0FBTixDQUFZLElBQVosRUFBa0JELFNBQWxCLENBQXhCO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVNtdkIsYUFBVCxDQUF1QjduQixFQUF2QixFQUEyQi9ILEtBQTNCLEVBQWtDO0FBQ2hDLFNBQU9BLEtBQUssR0FBRyxDQUFDQSxLQUFULEVBQWdCLFlBQVc7QUFDaEMrYyxJQUFBQSxJQUFJLENBQUMsSUFBRCxFQUFPaFYsRUFBUCxDQUFKLENBQWUrUyxLQUFmLEdBQXVCOWEsS0FBdkI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsNkJBQWUsZUFBU0EsS0FBVCxFQUFnQjtBQUM3QixNQUFJK0gsRUFBRSxHQUFHLEtBQUs0QixHQUFkO0FBRUEsU0FBT2xKLFNBQVMsQ0FBQ3FCLE1BQVYsR0FDRCxLQUFLMEQsSUFBTCxDQUFVLENBQUMsT0FBT3hGLEtBQVAsS0FBaUIsVUFBakIsR0FDUDJ2QixhQURPLEdBRVBDLGFBRk0sRUFFUzduQixFQUZULEVBRWEvSCxLQUZiLENBQVYsQ0FEQyxHQUlEbUosWUFBRyxDQUFDLEtBQUt4RixJQUFMLEVBQUQsRUFBY29FLEVBQWQsQ0FBSCxDQUFxQitTLEtBSjNCO0FBS0QsQzs7QUN0QkQ7O0FBRUEsU0FBUytVLGdCQUFULENBQTBCOW5CLEVBQTFCLEVBQThCL0gsS0FBOUIsRUFBcUM7QUFDbkMsU0FBTyxZQUFXO0FBQ2hCa0osSUFBQUEsWUFBRyxDQUFDLElBQUQsRUFBT25CLEVBQVAsQ0FBSCxDQUFjNlUsUUFBZCxHQUF5QixDQUFDNWMsS0FBSyxDQUFDVSxLQUFOLENBQVksSUFBWixFQUFrQkQsU0FBbEIsQ0FBMUI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3F2QixnQkFBVCxDQUEwQi9uQixFQUExQixFQUE4Qi9ILEtBQTlCLEVBQXFDO0FBQ25DLFNBQU9BLEtBQUssR0FBRyxDQUFDQSxLQUFULEVBQWdCLFlBQVc7QUFDaENrSixJQUFBQSxZQUFHLENBQUMsSUFBRCxFQUFPbkIsRUFBUCxDQUFILENBQWM2VSxRQUFkLEdBQXlCNWMsS0FBekI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsNkJBQWUsa0JBQVNBLEtBQVQsRUFBZ0I7QUFDN0IsTUFBSStILEVBQUUsR0FBRyxLQUFLNEIsR0FBZDtBQUVBLFNBQU9sSixTQUFTLENBQUNxQixNQUFWLEdBQ0QsS0FBSzBELElBQUwsQ0FBVSxDQUFDLE9BQU94RixLQUFQLEtBQWlCLFVBQWpCLEdBQ1A2dkIsZ0JBRE8sR0FFUEMsZ0JBRk0sRUFFWS9uQixFQUZaLEVBRWdCL0gsS0FGaEIsQ0FBVixDQURDLEdBSURtSixZQUFHLENBQUMsS0FBS3hGLElBQUwsRUFBRCxFQUFjb0UsRUFBZCxDQUFILENBQXFCNlUsUUFKM0I7QUFLRCxDOztBQ3RCRDs7QUFFQSxTQUFTbVQsWUFBVCxDQUFzQmhvQixFQUF0QixFQUEwQi9ILEtBQTFCLEVBQWlDO0FBQy9CLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQyxNQUFNLElBQUl5RCxLQUFKLEVBQU47QUFDakMsU0FBTyxZQUFXO0FBQ2hCeUYsSUFBQUEsWUFBRyxDQUFDLElBQUQsRUFBT25CLEVBQVAsQ0FBSCxDQUFjOFUsSUFBZCxHQUFxQjdjLEtBQXJCO0FBQ0QsR0FGRDtBQUdEOztBQUVELDZCQUFlLGNBQVNBLEtBQVQsRUFBZ0I7QUFDN0IsTUFBSStILEVBQUUsR0FBRyxLQUFLNEIsR0FBZDtBQUVBLFNBQU9sSixTQUFTLENBQUNxQixNQUFWLEdBQ0QsS0FBSzBELElBQUwsQ0FBVXVxQixZQUFZLENBQUNob0IsRUFBRCxFQUFLL0gsS0FBTCxDQUF0QixDQURDLEdBRURtSixZQUFHLENBQUMsS0FBS3hGLElBQUwsRUFBRCxFQUFjb0UsRUFBZCxDQUFILENBQXFCOFUsSUFGM0I7QUFHRCxDOztBQ2ZEOztBQUVBLFNBQVNtVCxXQUFULENBQXFCam9CLEVBQXJCLEVBQXlCL0gsS0FBekIsRUFBZ0M7QUFDOUIsU0FBTyxZQUFXO0FBQ2hCLFFBQUk0USxDQUFDLEdBQUc1USxLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFSO0FBQ0EsUUFBSSxPQUFPbVEsQ0FBUCxLQUFhLFVBQWpCLEVBQTZCLE1BQU0sSUFBSW5OLEtBQUosRUFBTjtBQUM3QnlGLElBQUFBLFlBQUcsQ0FBQyxJQUFELEVBQU9uQixFQUFQLENBQUgsQ0FBYzhVLElBQWQsR0FBcUJqTSxDQUFyQjtBQUNELEdBSkQ7QUFLRDs7QUFFRCw2QkFBZSxnQ0FBUzVRLEtBQVQsRUFBZ0I7QUFDN0IsTUFBSSxPQUFPQSxLQUFQLEtBQWlCLFVBQXJCLEVBQWlDLE1BQU0sSUFBSXlELEtBQUosRUFBTjtBQUNqQyxTQUFPLEtBQUsrQixJQUFMLENBQVV3cUIsV0FBVyxDQUFDLEtBQUtybUIsR0FBTixFQUFXM0osS0FBWCxDQUFyQixDQUFQO0FBQ0QsQzs7QUNiRDtBQUNBO0FBRUEsNkJBQWUsMkJBQVN3TCxLQUFULEVBQWdCO0FBQzdCLE1BQUksT0FBT0EsS0FBUCxLQUFpQixVQUFyQixFQUFpQ0EsS0FBSyxHQUFHTSxPQUFPLENBQUNOLEtBQUQsQ0FBZjs7QUFFakMsT0FBSyxJQUFJbkIsTUFBTSxHQUFHLEtBQUtDLE9BQWxCLEVBQTJCQyxDQUFDLEdBQUdGLE1BQU0sQ0FBQ3ZJLE1BQXRDLEVBQThDMEksU0FBUyxHQUFHLElBQUl6SixLQUFKLENBQVV3SixDQUFWLENBQTFELEVBQXdFRSxDQUFDLEdBQUcsQ0FBakYsRUFBb0ZBLENBQUMsR0FBR0YsQ0FBeEYsRUFBMkYsRUFBRUUsQ0FBN0YsRUFBZ0c7QUFDOUYsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1Qm5JLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQWpDLEVBQXlDNkksUUFBUSxHQUFHSCxTQUFTLENBQUNDLENBQUQsQ0FBVCxHQUFlLEVBQW5FLEVBQXVFOUcsSUFBdkUsRUFBNkV6QyxDQUFDLEdBQUcsQ0FBdEYsRUFBeUZBLENBQUMsR0FBR29CLENBQTdGLEVBQWdHLEVBQUVwQixDQUFsRyxFQUFxRztBQUNuRyxVQUFJLENBQUN5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWIsS0FBcUJzSyxLQUFLLENBQUM3SixJQUFOLENBQVdnQyxJQUFYLEVBQWlCQSxJQUFJLENBQUNrSCxRQUF0QixFQUFnQzNKLENBQWhDLEVBQW1Dd0osS0FBbkMsQ0FBekIsRUFBb0U7QUFDbEVDLFFBQUFBLFFBQVEsQ0FBQzlJLElBQVQsQ0FBYzhCLElBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxJQUFJc3NCLFVBQUosQ0FBZXpsQixTQUFmLEVBQTBCLEtBQUtNLFFBQS9CLEVBQXlDLEtBQUtvbEIsS0FBOUMsRUFBcUQsS0FBS3ZtQixHQUExRCxDQUFQO0FBQ0QsQzs7QUNmRDtBQUVBLDZCQUFlLDBCQUFTcVcsVUFBVCxFQUFxQjtBQUNsQyxNQUFJQSxVQUFVLENBQUNyVyxHQUFYLEtBQW1CLEtBQUtBLEdBQTVCLEVBQWlDLE1BQU0sSUFBSWxHLEtBQUosRUFBTjs7QUFFakMsT0FBSyxJQUFJNEssT0FBTyxHQUFHLEtBQUsvRCxPQUFuQixFQUE0QmdFLE9BQU8sR0FBRzBSLFVBQVUsQ0FBQzFWLE9BQWpELEVBQTBEaUUsRUFBRSxHQUFHRixPQUFPLENBQUN2TSxNQUF2RSxFQUErRTBNLEVBQUUsR0FBR0YsT0FBTyxDQUFDeE0sTUFBNUYsRUFBb0d5SSxDQUFDLEdBQUdrRSxJQUFJLENBQUNDLEdBQUwsQ0FBU0gsRUFBVCxFQUFhQyxFQUFiLENBQXhHLEVBQTBIRyxNQUFNLEdBQUcsSUFBSTVOLEtBQUosQ0FBVXdOLEVBQVYsQ0FBbkksRUFBa0o5RCxDQUFDLEdBQUcsQ0FBM0osRUFBOEpBLENBQUMsR0FBR0YsQ0FBbEssRUFBcUssRUFBRUUsQ0FBdkssRUFBMEs7QUFDeEssU0FBSyxJQUFJbUUsTUFBTSxHQUFHUCxPQUFPLENBQUM1RCxDQUFELENBQXBCLEVBQXlCb0UsTUFBTSxHQUFHUCxPQUFPLENBQUM3RCxDQUFELENBQXpDLEVBQThDbkksQ0FBQyxHQUFHc00sTUFBTSxDQUFDOU0sTUFBekQsRUFBaUVvTSxLQUFLLEdBQUdTLE1BQU0sQ0FBQ2xFLENBQUQsQ0FBTixHQUFZLElBQUkxSixLQUFKLENBQVV1QixDQUFWLENBQXJGLEVBQW1HcUIsSUFBbkcsRUFBeUd6QyxDQUFDLEdBQUcsQ0FBbEgsRUFBcUhBLENBQUMsR0FBR29CLENBQXpILEVBQTRILEVBQUVwQixDQUE5SCxFQUFpSTtBQUMvSCxVQUFJeUMsSUFBSSxHQUFHaUwsTUFBTSxDQUFDMU4sQ0FBRCxDQUFOLElBQWEyTixNQUFNLENBQUMzTixDQUFELENBQTlCLEVBQW1DO0FBQ2pDZ04sUUFBQUEsS0FBSyxDQUFDaE4sQ0FBRCxDQUFMLEdBQVd5QyxJQUFYO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU84RyxDQUFDLEdBQUc4RCxFQUFYLEVBQWUsRUFBRTlELENBQWpCLEVBQW9CO0FBQ2xCa0UsSUFBQUEsTUFBTSxDQUFDbEUsQ0FBRCxDQUFOLEdBQVk0RCxPQUFPLENBQUM1RCxDQUFELENBQW5CO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJd2xCLFVBQUosQ0FBZXRoQixNQUFmLEVBQXVCLEtBQUs3RCxRQUE1QixFQUFzQyxLQUFLb2xCLEtBQTNDLEVBQWtELEtBQUt2bUIsR0FBdkQsQ0FBUDtBQUNELEM7O0FDbEJEOztBQUVBLFNBQVNsRixLQUFULENBQWU3QixJQUFmLEVBQXFCO0FBQ25CLFNBQU8sQ0FBQ0EsSUFBSSxHQUFHLEVBQVIsRUFBWXFQLElBQVosR0FBbUJDLEtBQW5CLENBQXlCLE9BQXpCLEVBQWtDaWUsS0FBbEMsQ0FBd0MsVUFBU2hiLENBQVQsRUFBWTtBQUN6RCxRQUFJalUsQ0FBQyxHQUFHaVUsQ0FBQyxDQUFDdEYsT0FBRixDQUFVLEdBQVYsQ0FBUjtBQUNBLFFBQUkzTyxDQUFDLElBQUksQ0FBVCxFQUFZaVUsQ0FBQyxHQUFHQSxDQUFDLENBQUN6UyxLQUFGLENBQVEsQ0FBUixFQUFXeEIsQ0FBWCxDQUFKO0FBQ1osV0FBTyxDQUFDaVUsQ0FBRCxJQUFNQSxDQUFDLEtBQUssT0FBbkI7QUFDRCxHQUpNLENBQVA7QUFLRDs7QUFFRCxTQUFTaWIsVUFBVCxDQUFvQnJvQixFQUFwQixFQUF3Qm5GLElBQXhCLEVBQThCbVMsUUFBOUIsRUFBd0M7QUFDdEMsTUFBSXNiLEdBQUo7QUFBQSxNQUFTQyxHQUFUO0FBQUEsTUFBY0MsR0FBRyxHQUFHOXJCLEtBQUssQ0FBQzdCLElBQUQsQ0FBTCxHQUFjbWEsSUFBZCxHQUFxQjdULFlBQXpDO0FBQ0EsU0FBTyxZQUFXO0FBQ2hCLFFBQUk4VCxRQUFRLEdBQUd1VCxHQUFHLENBQUMsSUFBRCxFQUFPeG9CLEVBQVAsQ0FBbEI7QUFBQSxRQUNJd04sRUFBRSxHQUFHeUgsUUFBUSxDQUFDekgsRUFEbEIsQ0FEZ0IsQ0FJaEI7QUFDQTtBQUNBOztBQUNBLFFBQUlBLEVBQUUsS0FBSzhhLEdBQVgsRUFBZ0IsQ0FBQ0MsR0FBRyxHQUFHLENBQUNELEdBQUcsR0FBRzlhLEVBQVAsRUFBVzdOLElBQVgsRUFBUCxFQUEwQjZOLEVBQTFCLENBQTZCM1MsSUFBN0IsRUFBbUNtUyxRQUFuQztBQUVoQmlJLElBQUFBLFFBQVEsQ0FBQ3pILEVBQVQsR0FBYythLEdBQWQ7QUFDRCxHQVZEO0FBV0Q7O0FBRUQsNkJBQWUsdUJBQVMxdEIsSUFBVCxFQUFlbVMsUUFBZixFQUF5QjtBQUN0QyxNQUFJaE4sRUFBRSxHQUFHLEtBQUs0QixHQUFkO0FBRUEsU0FBT2xKLFNBQVMsQ0FBQ3FCLE1BQVYsR0FBbUIsQ0FBbkIsR0FDRHFILFlBQUcsQ0FBQyxLQUFLeEYsSUFBTCxFQUFELEVBQWNvRSxFQUFkLENBQUgsQ0FBcUJ3TixFQUFyQixDQUF3QkEsRUFBeEIsQ0FBMkIzUyxJQUEzQixDQURDLEdBRUQsS0FBSzRDLElBQUwsQ0FBVTRxQixVQUFVLENBQUNyb0IsRUFBRCxFQUFLbkYsSUFBTCxFQUFXbVMsUUFBWCxDQUFwQixDQUZOO0FBR0QsQzs7QUMvQkQsU0FBU3liLGNBQVQsQ0FBd0J6b0IsRUFBeEIsRUFBNEI7QUFDMUIsU0FBTyxZQUFXO0FBQ2hCLFFBQUluRCxNQUFNLEdBQUcsS0FBS21LLFVBQWxCOztBQUNBLFNBQUssSUFBSTdOLENBQVQsSUFBYyxLQUFLd2IsWUFBbkI7QUFBaUMsVUFBSSxDQUFDeGIsQ0FBRCxLQUFPNkcsRUFBWCxFQUFlO0FBQWhEOztBQUNBLFFBQUluRCxNQUFKLEVBQVlBLE1BQU0sQ0FBQzJQLFdBQVAsQ0FBbUIsSUFBbkI7QUFDYixHQUpEO0FBS0Q7O0FBRUQsNkJBQWUsNkJBQVc7QUFDeEIsU0FBTyxLQUFLZ0IsRUFBTCxDQUFRLFlBQVIsRUFBc0JpYixjQUFjLENBQUMsS0FBSzdtQixHQUFOLENBQXBDLENBQVA7QUFDRCxDOztBQ1ZEO0FBQ0E7QUFDQTtBQUVBLDZCQUFlLDJCQUFTUyxNQUFULEVBQWlCO0FBQzlCLE1BQUl4SCxJQUFJLEdBQUcsS0FBS3N0QixLQUFoQjtBQUFBLE1BQ0lub0IsRUFBRSxHQUFHLEtBQUs0QixHQURkO0FBR0EsTUFBSSxPQUFPUyxNQUFQLEtBQWtCLFVBQXRCLEVBQWtDQSxNQUFNLEdBQUdILFFBQVEsQ0FBQ0csTUFBRCxDQUFqQjs7QUFFbEMsT0FBSyxJQUFJQyxNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJDLENBQUMsR0FBR0YsTUFBTSxDQUFDdkksTUFBdEMsRUFBOEMwSSxTQUFTLEdBQUcsSUFBSXpKLEtBQUosQ0FBVXdKLENBQVYsQ0FBMUQsRUFBd0VFLENBQUMsR0FBRyxDQUFqRixFQUFvRkEsQ0FBQyxHQUFHRixDQUF4RixFQUEyRixFQUFFRSxDQUE3RixFQUFnRztBQUM5RixTQUFLLElBQUlDLEtBQUssR0FBR0wsTUFBTSxDQUFDSSxDQUFELENBQWxCLEVBQXVCbkksQ0FBQyxHQUFHb0ksS0FBSyxDQUFDNUksTUFBakMsRUFBeUM2SSxRQUFRLEdBQUdILFNBQVMsQ0FBQ0MsQ0FBRCxDQUFULEdBQWUsSUFBSTFKLEtBQUosQ0FBVXVCLENBQVYsQ0FBbkUsRUFBaUZxQixJQUFqRixFQUF1RmlILE9BQXZGLEVBQWdHMUosQ0FBQyxHQUFHLENBQXpHLEVBQTRHQSxDQUFDLEdBQUdvQixDQUFoSCxFQUFtSCxFQUFFcEIsQ0FBckgsRUFBd0g7QUFDdEgsVUFBSSxDQUFDeUMsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUFiLE1BQXNCMEosT0FBTyxHQUFHUixNQUFNLENBQUN6SSxJQUFQLENBQVlnQyxJQUFaLEVBQWtCQSxJQUFJLENBQUNrSCxRQUF2QixFQUFpQzNKLENBQWpDLEVBQW9Dd0osS0FBcEMsQ0FBaEMsQ0FBSixFQUFpRjtBQUMvRSxZQUFJLGNBQWMvRyxJQUFsQixFQUF3QmlILE9BQU8sQ0FBQ0MsUUFBUixHQUFtQmxILElBQUksQ0FBQ2tILFFBQXhCO0FBQ3hCRixRQUFBQSxRQUFRLENBQUN6SixDQUFELENBQVIsR0FBYzBKLE9BQWQ7QUFDQW9TLFFBQUFBLFFBQVEsQ0FBQ3JTLFFBQVEsQ0FBQ3pKLENBQUQsQ0FBVCxFQUFjMEIsSUFBZCxFQUFvQm1GLEVBQXBCLEVBQXdCN0csQ0FBeEIsRUFBMkJ5SixRQUEzQixFQUFxQ3hCLFlBQUcsQ0FBQ3hGLElBQUQsRUFBT29FLEVBQVAsQ0FBeEMsQ0FBUjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlrb0IsVUFBSixDQUFlemxCLFNBQWYsRUFBMEIsS0FBS00sUUFBL0IsRUFBeUNsSSxJQUF6QyxFQUErQ21GLEVBQS9DLENBQVA7QUFDRCxDOztBQ3JCRDtBQUNBO0FBQ0E7QUFFQSw2QkFBZSw4QkFBU3FDLE1BQVQsRUFBaUI7QUFDOUIsTUFBSXhILElBQUksR0FBRyxLQUFLc3RCLEtBQWhCO0FBQUEsTUFDSW5vQixFQUFFLEdBQUcsS0FBSzRCLEdBRGQ7QUFHQSxNQUFJLE9BQU9TLE1BQVAsS0FBa0IsVUFBdEIsRUFBa0NBLE1BQU0sR0FBR2MsV0FBVyxDQUFDZCxNQUFELENBQXBCOztBQUVsQyxPQUFLLElBQUlDLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkMsQ0FBQyxHQUFHRixNQUFNLENBQUN2SSxNQUF0QyxFQUE4QzBJLFNBQVMsR0FBRyxFQUExRCxFQUE4RFksT0FBTyxHQUFHLEVBQXhFLEVBQTRFWCxDQUFDLEdBQUcsQ0FBckYsRUFBd0ZBLENBQUMsR0FBR0YsQ0FBNUYsRUFBK0YsRUFBRUUsQ0FBakcsRUFBb0c7QUFDbEcsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1Qm5JLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQWpDLEVBQXlDNkIsSUFBekMsRUFBK0N6QyxDQUFDLEdBQUcsQ0FBeEQsRUFBMkRBLENBQUMsR0FBR29CLENBQS9ELEVBQWtFLEVBQUVwQixDQUFwRSxFQUF1RTtBQUNyRSxVQUFJeUMsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUFoQixFQUFxQjtBQUNuQixhQUFLLElBQUkyQyxRQUFRLEdBQUd1RyxNQUFNLENBQUN6SSxJQUFQLENBQVlnQyxJQUFaLEVBQWtCQSxJQUFJLENBQUNrSCxRQUF2QixFQUFpQzNKLENBQWpDLEVBQW9Dd0osS0FBcEMsQ0FBZixFQUEyRDNELEtBQTNELEVBQWtFMHBCLE9BQU8sR0FBR3RuQixZQUFHLENBQUN4RixJQUFELEVBQU9vRSxFQUFQLENBQS9FLEVBQTJGbEQsQ0FBQyxHQUFHLENBQS9GLEVBQWtHeW1CLENBQUMsR0FBR3puQixRQUFRLENBQUMvQixNQUFwSCxFQUE0SCtDLENBQUMsR0FBR3ltQixDQUFoSSxFQUFtSSxFQUFFem1CLENBQXJJLEVBQXdJO0FBQ3RJLGNBQUlrQyxLQUFLLEdBQUdsRCxRQUFRLENBQUNnQixDQUFELENBQXBCLEVBQXlCO0FBQ3ZCbVksWUFBQUEsUUFBUSxDQUFDalcsS0FBRCxFQUFRbkUsSUFBUixFQUFjbUYsRUFBZCxFQUFrQmxELENBQWxCLEVBQXFCaEIsUUFBckIsRUFBK0I0c0IsT0FBL0IsQ0FBUjtBQUNEO0FBQ0Y7O0FBQ0RqbUIsUUFBQUEsU0FBUyxDQUFDM0ksSUFBVixDQUFlZ0MsUUFBZjtBQUNBdUgsUUFBQUEsT0FBTyxDQUFDdkosSUFBUixDQUFhOEIsSUFBYjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlzc0IsVUFBSixDQUFlemxCLFNBQWYsRUFBMEJZLE9BQTFCLEVBQW1DeEksSUFBbkMsRUFBeUNtRixFQUF6QyxDQUFQO0FBQ0QsQzs7QUN6QkQ7QUFFQSxJQUFJb0MsbUJBQVMsR0FBRzRELG1DQUFoQjtBQUVBLDZCQUFlLGdDQUFXO0FBQ3hCLFNBQU8sSUFBSTVELG1CQUFKLENBQWMsS0FBS0csT0FBbkIsRUFBNEIsS0FBS1EsUUFBakMsQ0FBUDtBQUNELEM7O0FDTkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTNGxCLFNBQVQsQ0FBbUI5dEIsSUFBbkIsRUFBeUJtc0IsV0FBekIsRUFBc0M7QUFDcEMsTUFBSUUsUUFBSixFQUNJSSxRQURKLEVBRUlGLFlBRko7QUFHQSxTQUFPLFlBQVc7QUFDaEIsUUFBSUMsT0FBTyxHQUFHamUsVUFBSyxDQUFDLElBQUQsRUFBT3ZPLElBQVAsQ0FBbkI7QUFBQSxRQUNJc3NCLE9BQU8sSUFBSSxLQUFLL2QsS0FBTCxDQUFXQyxjQUFYLENBQTBCeE8sSUFBMUIsR0FBaUN1TyxVQUFLLENBQUMsSUFBRCxFQUFPdk8sSUFBUCxDQUExQyxDQURYO0FBRUEsV0FBT3dzQixPQUFPLEtBQUtGLE9BQVosR0FBc0IsSUFBdEIsR0FDREUsT0FBTyxLQUFLSCxRQUFaLElBQXdCQyxPQUFPLEtBQUtHLFFBQXBDLEdBQStDRixZQUEvQyxHQUNBQSxZQUFZLEdBQUdKLFdBQVcsQ0FBQ0UsUUFBUSxHQUFHRyxPQUFaLEVBQXFCQyxRQUFRLEdBQUdILE9BQWhDLENBRmhDO0FBR0QsR0FORDtBQU9EOztBQUVELFNBQVNoZSxpQkFBVCxDQUFxQnRPLElBQXJCLEVBQTJCO0FBQ3pCLFNBQU8sWUFBVztBQUNoQixTQUFLdU8sS0FBTCxDQUFXQyxjQUFYLENBQTBCeE8sSUFBMUI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3lPLG1CQUFULENBQXVCek8sSUFBdkIsRUFBNkJtc0IsV0FBN0IsRUFBMENDLE1BQTFDLEVBQWtEO0FBQ2hELE1BQUlDLFFBQUo7QUFBQSxNQUNJQyxPQUFPLEdBQUdGLE1BQU0sR0FBRyxFQUR2QjtBQUFBLE1BRUlHLFlBRko7QUFHQSxTQUFPLFlBQVc7QUFDaEIsUUFBSUMsT0FBTyxHQUFHamUsVUFBSyxDQUFDLElBQUQsRUFBT3ZPLElBQVAsQ0FBbkI7QUFDQSxXQUFPd3NCLE9BQU8sS0FBS0YsT0FBWixHQUFzQixJQUF0QixHQUNERSxPQUFPLEtBQUtILFFBQVosR0FBdUJFLFlBQXZCLEdBQ0FBLFlBQVksR0FBR0osV0FBVyxDQUFDRSxRQUFRLEdBQUdHLE9BQVosRUFBcUJKLE1BQXJCLENBRmhDO0FBR0QsR0FMRDtBQU1EOztBQUVELFNBQVN4ZCxtQkFBVCxDQUF1QjVPLElBQXZCLEVBQTZCbXNCLFdBQTdCLEVBQTBDL3VCLEtBQTFDLEVBQWlEO0FBQy9DLE1BQUlpdkIsUUFBSixFQUNJSSxRQURKLEVBRUlGLFlBRko7QUFHQSxTQUFPLFlBQVc7QUFDaEIsUUFBSUMsT0FBTyxHQUFHamUsVUFBSyxDQUFDLElBQUQsRUFBT3ZPLElBQVAsQ0FBbkI7QUFBQSxRQUNJb3NCLE1BQU0sR0FBR2h2QixLQUFLLENBQUMsSUFBRCxDQURsQjtBQUFBLFFBRUlrdkIsT0FBTyxHQUFHRixNQUFNLEdBQUcsRUFGdkI7QUFHQSxRQUFJQSxNQUFNLElBQUksSUFBZCxFQUFvQkUsT0FBTyxHQUFHRixNQUFNLElBQUksS0FBSzdkLEtBQUwsQ0FBV0MsY0FBWCxDQUEwQnhPLElBQTFCLEdBQWlDdU8sVUFBSyxDQUFDLElBQUQsRUFBT3ZPLElBQVAsQ0FBMUMsQ0FBaEI7QUFDcEIsV0FBT3dzQixPQUFPLEtBQUtGLE9BQVosR0FBc0IsSUFBdEIsR0FDREUsT0FBTyxLQUFLSCxRQUFaLElBQXdCQyxPQUFPLEtBQUtHLFFBQXBDLEdBQStDRixZQUEvQyxJQUNDRSxRQUFRLEdBQUdILE9BQVgsRUFBb0JDLFlBQVksR0FBR0osV0FBVyxDQUFDRSxRQUFRLEdBQUdHLE9BQVosRUFBcUJKLE1BQXJCLENBRC9DLENBRE47QUFHRCxHQVJEO0FBU0Q7O0FBRUQsU0FBUzJCLGdCQUFULENBQTBCNW9CLEVBQTFCLEVBQThCbkYsSUFBOUIsRUFBb0M7QUFDbEMsTUFBSXl0QixHQUFKO0FBQUEsTUFBU0MsR0FBVDtBQUFBLE1BQWNNLFNBQWQ7QUFBQSxNQUF5Qi93QixHQUFHLEdBQUcsV0FBVytDLElBQTFDO0FBQUEsTUFBZ0RvUyxLQUFLLEdBQUcsU0FBU25WLEdBQWpFO0FBQUEsTUFBc0VvTyxNQUF0RTtBQUNBLFNBQU8sWUFBVztBQUNoQixRQUFJK08sUUFBUSxHQUFHOVQsWUFBRyxDQUFDLElBQUQsRUFBT25CLEVBQVAsQ0FBbEI7QUFBQSxRQUNJd04sRUFBRSxHQUFHeUgsUUFBUSxDQUFDekgsRUFEbEI7QUFBQSxRQUVJUixRQUFRLEdBQUdpSSxRQUFRLENBQUNoZCxLQUFULENBQWVILEdBQWYsS0FBdUIsSUFBdkIsR0FBOEJvTyxNQUFNLEtBQUtBLE1BQU0sR0FBR2lELGlCQUFXLENBQUN0TyxJQUFELENBQXpCLENBQXBDLEdBQXVFaEMsU0FGdEYsQ0FEZ0IsQ0FLaEI7QUFDQTtBQUNBOztBQUNBLFFBQUkyVSxFQUFFLEtBQUs4YSxHQUFQLElBQWNPLFNBQVMsS0FBSzdiLFFBQWhDLEVBQTBDLENBQUN1YixHQUFHLEdBQUcsQ0FBQ0QsR0FBRyxHQUFHOWEsRUFBUCxFQUFXN04sSUFBWCxFQUFQLEVBQTBCNk4sRUFBMUIsQ0FBNkJQLEtBQTdCLEVBQW9DNGIsU0FBUyxHQUFHN2IsUUFBaEQ7QUFFMUNpSSxJQUFBQSxRQUFRLENBQUN6SCxFQUFULEdBQWMrYSxHQUFkO0FBQ0QsR0FYRDtBQVlEOztBQUVELDZCQUFlLDBCQUFTMXRCLElBQVQsRUFBZTVDLEtBQWYsRUFBc0JzUixRQUF0QixFQUFnQztBQUM3QyxNQUFJcFEsQ0FBQyxHQUFHLENBQUMwQixJQUFJLElBQUksRUFBVCxNQUFpQixXQUFqQixHQUErQmdjLHVCQUEvQixHQUFzRG1RLHNCQUE5RDtBQUNBLFNBQU8vdUIsS0FBSyxJQUFJLElBQVQsR0FBZ0IsS0FDbEI2d0IsVUFEa0IsQ0FDUGp1QixJQURPLEVBQ0Q4dEIsU0FBUyxDQUFDOXRCLElBQUQsRUFBTzFCLENBQVAsQ0FEUixFQUVsQnFVLEVBRmtCLENBRWYsZUFBZTNTLElBRkEsRUFFTXNPLGlCQUFXLENBQUN0TyxJQUFELENBRmpCLENBQWhCLEdBR0gsT0FBTzVDLEtBQVAsS0FBaUIsVUFBakIsR0FBOEIsS0FDN0I2d0IsVUFENkIsQ0FDbEJqdUIsSUFEa0IsRUFDWjRPLG1CQUFhLENBQUM1TyxJQUFELEVBQU8xQixDQUFQLEVBQVU2ZSxVQUFVLENBQUMsSUFBRCxFQUFPLFdBQVduZCxJQUFsQixFQUF3QjVDLEtBQXhCLENBQXBCLENBREQsRUFFN0J3RixJQUY2QixDQUV4Qm1yQixnQkFBZ0IsQ0FBQyxLQUFLaG5CLEdBQU4sRUFBVy9HLElBQVgsQ0FGUSxDQUE5QixHQUdBLEtBQ0NpdUIsVUFERCxDQUNZanVCLElBRFosRUFDa0J5TyxtQkFBYSxDQUFDek8sSUFBRCxFQUFPMUIsQ0FBUCxFQUFVbEIsS0FBVixDQUQvQixFQUNpRHNSLFFBRGpELEVBRUNpRSxFQUZELENBRUksZUFBZTNTLElBRm5CLEVBRXlCLElBRnpCLENBTko7QUFTRCxDOztBQy9FRCxTQUFTa3VCLGdCQUFULENBQTBCbHVCLElBQTFCLEVBQWdDMUIsQ0FBaEMsRUFBbUNvUSxRQUFuQyxFQUE2QztBQUMzQyxTQUFPLFVBQVM2RCxDQUFULEVBQVk7QUFDakIsU0FBS2hFLEtBQUwsQ0FBV0ksV0FBWCxDQUF1QjNPLElBQXZCLEVBQTZCMUIsQ0FBQyxDQUFDUyxJQUFGLENBQU8sSUFBUCxFQUFhd1QsQ0FBYixDQUE3QixFQUE4QzdELFFBQTlDO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVN1ZixVQUFULENBQW9CanVCLElBQXBCLEVBQTBCNUMsS0FBMUIsRUFBaUNzUixRQUFqQyxFQUEyQztBQUN6QyxNQUFJNkQsQ0FBSixFQUFPM0gsRUFBUDs7QUFDQSxXQUFTbVAsS0FBVCxHQUFpQjtBQUNmLFFBQUl6YixDQUFDLEdBQUdsQixLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFSO0FBQ0EsUUFBSVMsQ0FBQyxLQUFLc00sRUFBVixFQUFjMkgsQ0FBQyxHQUFHLENBQUMzSCxFQUFFLEdBQUd0TSxDQUFOLEtBQVk0dkIsZ0JBQWdCLENBQUNsdUIsSUFBRCxFQUFPMUIsQ0FBUCxFQUFVb1EsUUFBVixDQUFoQztBQUNkLFdBQU82RCxDQUFQO0FBQ0Q7O0FBQ0R3SCxFQUFBQSxLQUFLLENBQUMrUyxNQUFOLEdBQWUxdkIsS0FBZjtBQUNBLFNBQU8yYyxLQUFQO0FBQ0Q7O0FBRUQsNkJBQWUsK0JBQVMvWixJQUFULEVBQWU1QyxLQUFmLEVBQXNCc1IsUUFBdEIsRUFBZ0M7QUFDN0MsTUFBSXpSLEdBQUcsR0FBRyxZQUFZK0MsSUFBSSxJQUFJLEVBQXBCLENBQVY7QUFDQSxNQUFJbkMsU0FBUyxDQUFDcUIsTUFBVixHQUFtQixDQUF2QixFQUEwQixPQUFPLENBQUNqQyxHQUFHLEdBQUcsS0FBSzhjLEtBQUwsQ0FBVzljLEdBQVgsQ0FBUCxLQUEyQkEsR0FBRyxDQUFDNnZCLE1BQXRDO0FBQzFCLE1BQUkxdkIsS0FBSyxJQUFJLElBQWIsRUFBbUIsT0FBTyxLQUFLMmMsS0FBTCxDQUFXOWMsR0FBWCxFQUFnQixJQUFoQixDQUFQO0FBQ25CLE1BQUksT0FBT0csS0FBUCxLQUFpQixVQUFyQixFQUFpQyxNQUFNLElBQUl5RCxLQUFKLEVBQU47QUFDakMsU0FBTyxLQUFLa1osS0FBTCxDQUFXOWMsR0FBWCxFQUFnQmd4QixVQUFVLENBQUNqdUIsSUFBRCxFQUFPNUMsS0FBUCxFQUFjc1IsUUFBUSxJQUFJLElBQVosR0FBbUIsRUFBbkIsR0FBd0JBLFFBQXRDLENBQTFCLENBQVA7QUFDRCxDOztBQ3ZCRDs7QUFFQSxTQUFTNEIsaUJBQVQsQ0FBc0JsVCxLQUF0QixFQUE2QjtBQUMzQixTQUFPLFlBQVc7QUFDaEIsU0FBS2lULFdBQUwsR0FBbUJqVCxLQUFuQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTbVQsaUJBQVQsQ0FBc0JuVCxLQUF0QixFQUE2QjtBQUMzQixTQUFPLFlBQVc7QUFDaEIsUUFBSWd2QixNQUFNLEdBQUdodkIsS0FBSyxDQUFDLElBQUQsQ0FBbEI7QUFDQSxTQUFLaVQsV0FBTCxHQUFtQitiLE1BQU0sSUFBSSxJQUFWLEdBQWlCLEVBQWpCLEdBQXNCQSxNQUF6QztBQUNELEdBSEQ7QUFJRDs7QUFFRCw2QkFBZSx5QkFBU2h2QixLQUFULEVBQWdCO0FBQzdCLFNBQU8sS0FBSzJjLEtBQUwsQ0FBVyxNQUFYLEVBQW1CLE9BQU8zYyxLQUFQLEtBQWlCLFVBQWpCLEdBQ3BCbVQsaUJBQVksQ0FBQzRNLFVBQVUsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlL2YsS0FBZixDQUFYLENBRFEsR0FFcEJrVCxpQkFBWSxDQUFDbFQsS0FBSyxJQUFJLElBQVQsR0FBZ0IsRUFBaEIsR0FBcUJBLEtBQUssR0FBRyxFQUE5QixDQUZYLENBQVA7QUFHRCxDOztBQ25CRCxTQUFTK3dCLGVBQVQsQ0FBeUI3dkIsQ0FBekIsRUFBNEI7QUFDMUIsU0FBTyxVQUFTaVUsQ0FBVCxFQUFZO0FBQ2pCLFNBQUtsQyxXQUFMLEdBQW1CL1IsQ0FBQyxDQUFDUyxJQUFGLENBQU8sSUFBUCxFQUFhd1QsQ0FBYixDQUFuQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTNmIsU0FBVCxDQUFtQmh4QixLQUFuQixFQUEwQjtBQUN4QixNQUFJd2IsRUFBSixFQUFRaE8sRUFBUjs7QUFDQSxXQUFTbVAsS0FBVCxHQUFpQjtBQUNmLFFBQUl6YixDQUFDLEdBQUdsQixLQUFLLENBQUNVLEtBQU4sQ0FBWSxJQUFaLEVBQWtCRCxTQUFsQixDQUFSO0FBQ0EsUUFBSVMsQ0FBQyxLQUFLc00sRUFBVixFQUFjZ08sRUFBRSxHQUFHLENBQUNoTyxFQUFFLEdBQUd0TSxDQUFOLEtBQVk2dkIsZUFBZSxDQUFDN3ZCLENBQUQsQ0FBaEM7QUFDZCxXQUFPc2EsRUFBUDtBQUNEOztBQUNEbUIsRUFBQUEsS0FBSyxDQUFDK1MsTUFBTixHQUFlMXZCLEtBQWY7QUFDQSxTQUFPMmMsS0FBUDtBQUNEOztBQUVELDZCQUFlLDhCQUFTM2MsS0FBVCxFQUFnQjtBQUM3QixNQUFJSCxHQUFHLEdBQUcsTUFBVjtBQUNBLE1BQUlZLFNBQVMsQ0FBQ3FCLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEIsT0FBTyxDQUFDakMsR0FBRyxHQUFHLEtBQUs4YyxLQUFMLENBQVc5YyxHQUFYLENBQVAsS0FBMkJBLEdBQUcsQ0FBQzZ2QixNQUF0QztBQUMxQixNQUFJMXZCLEtBQUssSUFBSSxJQUFiLEVBQW1CLE9BQU8sS0FBSzJjLEtBQUwsQ0FBVzljLEdBQVgsRUFBZ0IsSUFBaEIsQ0FBUDtBQUNuQixNQUFJLE9BQU9HLEtBQVAsS0FBaUIsVUFBckIsRUFBaUMsTUFBTSxJQUFJeUQsS0FBSixFQUFOO0FBQ2pDLFNBQU8sS0FBS2taLEtBQUwsQ0FBVzljLEdBQVgsRUFBZ0JteEIsU0FBUyxDQUFDaHhCLEtBQUQsQ0FBekIsQ0FBUDtBQUNELEM7O0FDdkJEO0FBQ0E7QUFFQSw2QkFBZSxzQkFBVztBQUN4QixNQUFJNEMsSUFBSSxHQUFHLEtBQUtzdEIsS0FBaEI7QUFBQSxNQUNJZ0IsR0FBRyxHQUFHLEtBQUt2bkIsR0FEZjtBQUFBLE1BRUl3bkIsR0FBRyxHQUFHRixLQUFLLEVBRmY7O0FBSUEsT0FBSyxJQUFJNW1CLE1BQU0sR0FBRyxLQUFLQyxPQUFsQixFQUEyQkMsQ0FBQyxHQUFHRixNQUFNLENBQUN2SSxNQUF0QyxFQUE4QzJJLENBQUMsR0FBRyxDQUF2RCxFQUEwREEsQ0FBQyxHQUFHRixDQUE5RCxFQUFpRSxFQUFFRSxDQUFuRSxFQUFzRTtBQUNwRSxTQUFLLElBQUlDLEtBQUssR0FBR0wsTUFBTSxDQUFDSSxDQUFELENBQWxCLEVBQXVCbkksQ0FBQyxHQUFHb0ksS0FBSyxDQUFDNUksTUFBakMsRUFBeUM2QixJQUF6QyxFQUErQ3pDLENBQUMsR0FBRyxDQUF4RCxFQUEyREEsQ0FBQyxHQUFHb0IsQ0FBL0QsRUFBa0UsRUFBRXBCLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUl5QyxJQUFJLEdBQUcrRyxLQUFLLENBQUN4SixDQUFELENBQWhCLEVBQXFCO0FBQ25CLFlBQUl1dkIsT0FBTyxHQUFHdG5CLFlBQUcsQ0FBQ3hGLElBQUQsRUFBT3V0QixHQUFQLENBQWpCO0FBQ0FsVSxRQUFBQSxRQUFRLENBQUNyWixJQUFELEVBQU9mLElBQVAsRUFBYXV1QixHQUFiLEVBQWtCandCLENBQWxCLEVBQXFCd0osS0FBckIsRUFBNEI7QUFDbENxUSxVQUFBQSxJQUFJLEVBQUUwVixPQUFPLENBQUMxVixJQUFSLEdBQWUwVixPQUFPLENBQUMzVixLQUF2QixHQUErQjJWLE9BQU8sQ0FBQzdULFFBRFg7QUFFbEM5QixVQUFBQSxLQUFLLEVBQUUsQ0FGMkI7QUFHbEM4QixVQUFBQSxRQUFRLEVBQUU2VCxPQUFPLENBQUM3VCxRQUhnQjtBQUlsQ0MsVUFBQUEsSUFBSSxFQUFFNFQsT0FBTyxDQUFDNVQ7QUFKb0IsU0FBNUIsQ0FBUjtBQU1EO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQUlvVCxVQUFKLENBQWU1bEIsTUFBZixFQUF1QixLQUFLUyxRQUE1QixFQUFzQ2xJLElBQXRDLEVBQTRDdXVCLEdBQTVDLENBQVA7QUFDRCxDOztBQ3ZCRDtBQUVBLDZCQUFlLGVBQVc7QUFDeEIsTUFBSWQsR0FBSjtBQUFBLE1BQVNDLEdBQVQ7QUFBQSxNQUFjdHNCLElBQUksR0FBRyxJQUFyQjtBQUFBLE1BQTJCK0QsRUFBRSxHQUFHL0QsSUFBSSxDQUFDMkYsR0FBckM7QUFBQSxNQUEwQzBGLElBQUksR0FBR3JMLElBQUksQ0FBQ3FMLElBQUwsRUFBakQ7QUFDQSxTQUFPLElBQUlsUCxPQUFKLENBQVksVUFBU1YsT0FBVCxFQUFrQkMsTUFBbEIsRUFBMEI7QUFDM0MsUUFBSTB4QixNQUFNLEdBQUc7QUFBQ3B4QixNQUFBQSxLQUFLLEVBQUVOO0FBQVIsS0FBYjtBQUFBLFFBQ0k4RSxHQUFHLEdBQUc7QUFBQ3hFLE1BQUFBLEtBQUssRUFBRSxpQkFBVztBQUFFLFlBQUksRUFBRXFQLElBQUYsS0FBVyxDQUFmLEVBQWtCNVAsT0FBTztBQUFLO0FBQW5ELEtBRFY7QUFHQXVFLElBQUFBLElBQUksQ0FBQ3dCLElBQUwsQ0FBVSxZQUFXO0FBQ25CLFVBQUl3WCxRQUFRLEdBQUc5VCxZQUFHLENBQUMsSUFBRCxFQUFPbkIsRUFBUCxDQUFsQjtBQUFBLFVBQ0l3TixFQUFFLEdBQUd5SCxRQUFRLENBQUN6SCxFQURsQixDQURtQixDQUluQjtBQUNBO0FBQ0E7O0FBQ0EsVUFBSUEsRUFBRSxLQUFLOGEsR0FBWCxFQUFnQjtBQUNkQyxRQUFBQSxHQUFHLEdBQUcsQ0FBQ0QsR0FBRyxHQUFHOWEsRUFBUCxFQUFXN04sSUFBWCxFQUFOOztBQUNBNG9CLFFBQUFBLEdBQUcsQ0FBQ3JuQixDQUFKLENBQU1tb0IsTUFBTixDQUFhdnZCLElBQWIsQ0FBa0J1dkIsTUFBbEI7O0FBQ0FkLFFBQUFBLEdBQUcsQ0FBQ3JuQixDQUFKLENBQU1rVSxTQUFOLENBQWdCdGIsSUFBaEIsQ0FBcUJ1dkIsTUFBckI7O0FBQ0FkLFFBQUFBLEdBQUcsQ0FBQ3JuQixDQUFKLENBQU16RSxHQUFOLENBQVUzQyxJQUFWLENBQWUyQyxHQUFmO0FBQ0Q7O0FBRUR3WSxNQUFBQSxRQUFRLENBQUN6SCxFQUFULEdBQWMrYSxHQUFkO0FBQ0QsS0FmRCxFQUoyQyxDQXFCM0M7O0FBQ0EsUUFBSWpoQixJQUFJLEtBQUssQ0FBYixFQUFnQjVQLE9BQU87QUFDeEIsR0F2Qk0sQ0FBUDtBQXdCRCxDOzs7O0FDNUJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlzSSxFQUFFLEdBQUcsQ0FBVDtBQUVPLFNBQVNrb0IsVUFBVCxDQUFvQjVsQixNQUFwQixFQUE0QmUsT0FBNUIsRUFBcUN4SSxJQUFyQyxFQUEyQ21GLEVBQTNDLEVBQStDO0FBQ3BELE9BQUt1QyxPQUFMLEdBQWVELE1BQWY7QUFDQSxPQUFLUyxRQUFMLEdBQWdCTSxPQUFoQjtBQUNBLE9BQUs4a0IsS0FBTCxHQUFhdHRCLElBQWI7QUFDQSxPQUFLK0csR0FBTCxHQUFXNUIsRUFBWDtBQUNEO0FBRWMsU0FBU2lZLHFCQUFULENBQW9CcGQsSUFBcEIsRUFBMEI7QUFDdkMsU0FBT21MLGFBQVMsR0FBR2lTLFVBQVosQ0FBdUJwZCxJQUF2QixDQUFQO0FBQ0Q7QUFFTSxTQUFTcXVCLEtBQVQsR0FBaUI7QUFDdEIsU0FBTyxFQUFFbHBCLEVBQVQ7QUFDRDtBQUVELElBQUkwcUIsbUJBQW1CLEdBQUcxa0IsdUJBQTFCO0FBRUFraUIsVUFBVSxDQUFDenRCLFNBQVgsR0FBdUJ3ZCxxQkFBVSxDQUFDeGQsU0FBWDtBQUNyQkcsRUFBQUEsV0FBVyxFQUFFc3RCLFVBRFE7QUFFckI3bEIsRUFBQUEsTUFBTSxFQUFFMm5CLGlCQUZhO0FBR3JCbG1CLEVBQUFBLFNBQVMsRUFBRW1tQixvQkFIVTtBQUlyQnJaLEVBQUFBLFdBQVcsRUFBRThaLG1CQUFtQixDQUFDOVosV0FKWjtBQUtyQkMsRUFBQUEsY0FBYyxFQUFFNlosbUJBQW1CLENBQUM3WixjQUxmO0FBTXJCak4sRUFBQUEsTUFBTSxFQUFFZ21CLGlCQU5hO0FBT3JCempCLEVBQUFBLEtBQUssRUFBRTBqQixnQkFQYztBQVFyQjdqQixFQUFBQSxTQUFTLEVBQUVra0Isb0JBUlU7QUFTckJqUyxFQUFBQSxVQUFVLEVBQUVzUyxVQVRTO0FBVXJCM3dCLEVBQUFBLElBQUksRUFBRTh3QixtQkFBbUIsQ0FBQzl3QixJQVZMO0FBV3JCdUMsRUFBQUEsS0FBSyxFQUFFdXVCLG1CQUFtQixDQUFDdnVCLEtBWE47QUFZckJQLEVBQUFBLElBQUksRUFBRTh1QixtQkFBbUIsQ0FBQzl1QixJQVpMO0FBYXJCMEwsRUFBQUEsSUFBSSxFQUFFb2pCLG1CQUFtQixDQUFDcGpCLElBYkw7QUFjckJyRSxFQUFBQSxLQUFLLEVBQUV5bkIsbUJBQW1CLENBQUN6bkIsS0FkTjtBQWVyQnhGLEVBQUFBLElBQUksRUFBRWl0QixtQkFBbUIsQ0FBQ2p0QixJQWZMO0FBZ0JyQitQLEVBQUFBLEVBQUUsRUFBRXNjLGFBaEJpQjtBQWlCckJoWixFQUFBQSxJQUFJLEVBQUV3WSxlQWpCZTtBQWtCckIvQixFQUFBQSxTQUFTLEVBQUVnQyxvQkFsQlU7QUFtQnJCbmdCLEVBQUFBLEtBQUssRUFBRStnQixnQkFuQmM7QUFvQnJCckIsRUFBQUEsVUFBVSxFQUFFc0IscUJBcEJTO0FBcUJyQnBaLEVBQUFBLElBQUksRUFBRXFaLGVBckJlO0FBc0JyQnBCLEVBQUFBLFNBQVMsRUFBRXFCLG9CQXRCVTtBQXVCckJwa0IsRUFBQUEsTUFBTSxFQUFFNmpCLGlCQXZCYTtBQXdCckJuVixFQUFBQSxLQUFLLEVBQUU0VixLQXhCYztBQXlCckJ6WCxFQUFBQSxLQUFLLEVBQUV5VyxLQXpCYztBQTBCckIzVSxFQUFBQSxRQUFRLEVBQUU0VSxRQTFCVztBQTJCckIzVSxFQUFBQSxJQUFJLEVBQUU0VSxJQTNCZTtBQTRCckJ6QixFQUFBQSxXQUFXLEVBQUUwQixzQkE1QlE7QUE2QnJCbHRCLEVBQUFBLEdBQUcsRUFBRWd1QixHQUFjQTtBQTdCRSxHQThCcEJweEIsTUFBTSxDQUFDQyxRQTlCYSxFQThCRm94QixtQkFBbUIsQ0FBQ3J4QixNQUFNLENBQUNDLFFBQVIsQ0E5QmpCLENBQXZCLEM7O0FDekNPLFNBQVNxeEIsT0FBVCxDQUFpQnZkLENBQWpCLEVBQW9CO0FBQ3pCLFNBQU9BLENBQUMsR0FBR0EsQ0FBSixHQUFRQSxDQUFmO0FBQ0Q7QUFFTSxTQUFTd2QsUUFBVCxDQUFrQnhkLENBQWxCLEVBQXFCO0FBQzFCLFNBQU8sRUFBRUEsQ0FBRixHQUFNQSxDQUFOLEdBQVVBLENBQVYsR0FBYyxDQUFyQjtBQUNEO0FBRU0sU0FBU3lkLFVBQVQsQ0FBb0J6ZCxDQUFwQixFQUF1QjtBQUM1QixTQUFPLENBQUMsQ0FBQ0EsQ0FBQyxJQUFJLENBQU4sS0FBWSxDQUFaLEdBQWdCQSxDQUFDLEdBQUdBLENBQUosR0FBUUEsQ0FBeEIsR0FBNEIsQ0FBQ0EsQ0FBQyxJQUFJLENBQU4sSUFBV0EsQ0FBWCxHQUFlQSxDQUFmLEdBQW1CLENBQWhELElBQXFELENBQTVEO0FBQ0QsQzs7QUNWRDtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUkyZCxhQUFhLEdBQUc7QUFDbEIvWCxFQUFBQSxJQUFJLEVBQUUsSUFEWTtBQUNOO0FBQ1pELEVBQUFBLEtBQUssRUFBRSxDQUZXO0FBR2xCOEIsRUFBQUEsUUFBUSxFQUFFLEdBSFE7QUFJbEJDLEVBQUFBLElBQUksRUFBRWdXLFVBQWNBO0FBSkYsQ0FBcEI7O0FBT0EsU0FBU3BDLE9BQVQsQ0FBaUI5c0IsSUFBakIsRUFBdUJvRSxFQUF2QixFQUEyQjtBQUN6QixNQUFJeVUsTUFBSjs7QUFDQSxTQUFPLEVBQUVBLE1BQU0sR0FBRzdZLElBQUksQ0FBQytZLFlBQWhCLEtBQWlDLEVBQUVGLE1BQU0sR0FBR0EsTUFBTSxDQUFDelUsRUFBRCxDQUFqQixDQUF4QyxFQUFnRTtBQUM5RCxRQUFJLEVBQUVwRSxJQUFJLEdBQUdBLElBQUksQ0FBQ29MLFVBQWQsQ0FBSixFQUErQjtBQUM3QixZQUFNLElBQUl0TCxLQUFKLHNCQUF3QnNFLEVBQXhCLGdCQUFOO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPeVUsTUFBUDtBQUNEOztBQUVELDZCQUFlLDhCQUFTNVosSUFBVCxFQUFlO0FBQzVCLE1BQUltRixFQUFKLEVBQ0l5VSxNQURKOztBQUdBLE1BQUk1WixJQUFJLFlBQVlxdEIsVUFBcEIsRUFBZ0M7QUFDOUJsb0IsSUFBQUEsRUFBRSxHQUFHbkYsSUFBSSxDQUFDK0csR0FBVixFQUFlL0csSUFBSSxHQUFHQSxJQUFJLENBQUNzdEIsS0FBM0I7QUFDRCxHQUZELE1BRU87QUFDTG5vQixJQUFBQSxFQUFFLEdBQUdrcEIsS0FBSyxFQUFWLEVBQWMsQ0FBQ3pVLE1BQU0sR0FBR3NXLGFBQVYsRUFBeUIvWCxJQUF6QixHQUFnQ1osR0FBRyxFQUFqRCxFQUFxRHZYLElBQUksR0FBR0EsSUFBSSxJQUFJLElBQVIsR0FBZSxJQUFmLEdBQXNCQSxJQUFJLEdBQUcsRUFBekY7QUFDRDs7QUFFRCxPQUFLLElBQUl5SCxNQUFNLEdBQUcsS0FBS0MsT0FBbEIsRUFBMkJDLENBQUMsR0FBR0YsTUFBTSxDQUFDdkksTUFBdEMsRUFBOEMySSxDQUFDLEdBQUcsQ0FBdkQsRUFBMERBLENBQUMsR0FBR0YsQ0FBOUQsRUFBaUUsRUFBRUUsQ0FBbkUsRUFBc0U7QUFDcEUsU0FBSyxJQUFJQyxLQUFLLEdBQUdMLE1BQU0sQ0FBQ0ksQ0FBRCxDQUFsQixFQUF1Qm5JLENBQUMsR0FBR29JLEtBQUssQ0FBQzVJLE1BQWpDLEVBQXlDNkIsSUFBekMsRUFBK0N6QyxDQUFDLEdBQUcsQ0FBeEQsRUFBMkRBLENBQUMsR0FBR29CLENBQS9ELEVBQWtFLEVBQUVwQixDQUFwRSxFQUF1RTtBQUNyRSxVQUFJeUMsSUFBSSxHQUFHK0csS0FBSyxDQUFDeEosQ0FBRCxDQUFoQixFQUFxQjtBQUNuQjhiLFFBQUFBLFFBQVEsQ0FBQ3JaLElBQUQsRUFBT2YsSUFBUCxFQUFhbUYsRUFBYixFQUFpQjdHLENBQWpCLEVBQW9Cd0osS0FBcEIsRUFBMkI4UixNQUFNLElBQUlpVSxPQUFPLENBQUM5c0IsSUFBRCxFQUFPb0UsRUFBUCxDQUE1QyxDQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBSWtvQixVQUFKLENBQWU1bEIsTUFBZixFQUF1QixLQUFLUyxRQUE1QixFQUFzQ2xJLElBQXRDLEVBQTRDbUYsRUFBNUMsQ0FBUDtBQUNELEM7O0FDekNEO0FBQ0E7QUFDQTtBQUVBZ0csaUNBQUEsR0FBZ0NnbEIsbUJBQWhDO0FBQ0FobEIsa0NBQUEsR0FBaUNpbEIsb0JBQWpDLEM7O0FDTEE7QUFDQTtBQUNBOzs7Ozs7Ozs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSVEsU0FBUyxHQUFHO0FBQUM1d0IsRUFBQUEsSUFBSSxFQUFFO0FBQVAsQ0FBaEI7QUFBQSxJQUNJNndCLFVBQVUsR0FBRztBQUFDN3dCLEVBQUFBLElBQUksRUFBRTtBQUFQLENBRGpCO0FBQUEsSUFFSTh3QixXQUFXLEdBQUc7QUFBQzl3QixFQUFBQSxJQUFJLEVBQUU7QUFBUCxDQUZsQjtBQUFBLElBR0krd0IsV0FBVyxHQUFHO0FBQUMvd0IsRUFBQUEsSUFBSSxFQUFFO0FBQVAsQ0FIbEI7QUFLQSxJQUFPZ3hCLEdBQVAsR0FBd0JubEIsSUFBeEIsQ0FBT21sQixHQUFQO0FBQUEsSUFBWXRILEdBQVosR0FBd0I3ZCxJQUF4QixDQUFZNmQsR0FBWjtBQUFBLElBQWlCNWQsR0FBakIsR0FBd0JELElBQXhCLENBQWlCQyxHQUFqQjs7QUFFQSxTQUFTbWxCLE9BQVQsQ0FBaUJ6WSxDQUFqQixFQUFvQjtBQUNsQixTQUFPLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLENBQUQsQ0FBSCxFQUFRLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQVYsQ0FBUDtBQUNEOztBQUVELFNBQVMwWSxPQUFULENBQWlCMVksQ0FBakIsRUFBb0I7QUFDbEIsU0FBTyxDQUFDeVksT0FBTyxDQUFDelksQ0FBQyxDQUFDLENBQUQsQ0FBRixDQUFSLEVBQWdCeVksT0FBTyxDQUFDelksQ0FBQyxDQUFDLENBQUQsQ0FBRixDQUF2QixDQUFQO0FBQ0Q7O0FBRUQsSUFBSTJZLENBQUMsR0FBRztBQUNObnhCLEVBQUFBLElBQUksRUFBRSxHQURBO0FBRU5veEIsRUFBQUEsT0FBTyxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBV3ZyQixHQUFYLENBQWUyTSxJQUFmLENBRkg7QUFHTjZlLEVBQUFBLEtBQUssRUFBRSxlQUFTN3FCLENBQVQsRUFBWWdTLENBQVosRUFBZTtBQUFFLFdBQU9oUyxDQUFDLElBQUksSUFBTCxHQUFZLElBQVosR0FBbUIsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUgsRUFBUWdTLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQVIsQ0FBRCxFQUFtQixDQUFDLENBQUNoUyxDQUFDLENBQUMsQ0FBRCxDQUFILEVBQVFnUyxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUFSLENBQW5CLENBQTFCO0FBQWlFLEdBSG5GO0FBSU44WSxFQUFBQSxNQUFNLEVBQUUsZ0JBQVNDLEVBQVQsRUFBYTtBQUFFLFdBQU9BLEVBQUUsSUFBSSxDQUFDQSxFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU0sQ0FBTixDQUFELEVBQVdBLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTSxDQUFOLENBQVgsQ0FBYjtBQUFvQztBQUpyRCxDQUFSO0FBT0EsSUFBSUMsQ0FBQyxHQUFHO0FBQ054eEIsRUFBQUEsSUFBSSxFQUFFLEdBREE7QUFFTm94QixFQUFBQSxPQUFPLEVBQUUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXdnJCLEdBQVgsQ0FBZTJNLElBQWYsQ0FGSDtBQUdONmUsRUFBQUEsS0FBSyxFQUFFLGVBQVMxRyxDQUFULEVBQVluUyxDQUFaLEVBQWU7QUFBRSxXQUFPbVMsQ0FBQyxJQUFJLElBQUwsR0FBWSxJQUFaLEdBQW1CLENBQUMsQ0FBQ25TLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQUQsRUFBVSxDQUFDbVMsQ0FBQyxDQUFDLENBQUQsQ0FBWixDQUFELEVBQW1CLENBQUNuUyxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUFELEVBQVUsQ0FBQ21TLENBQUMsQ0FBQyxDQUFELENBQVosQ0FBbkIsQ0FBMUI7QUFBaUUsR0FIbkY7QUFJTjJHLEVBQUFBLE1BQU0sRUFBRSxnQkFBU0MsRUFBVCxFQUFhO0FBQUUsV0FBT0EsRUFBRSxJQUFJLENBQUNBLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTSxDQUFOLENBQUQsRUFBV0EsRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNLENBQU4sQ0FBWCxDQUFiO0FBQW9DO0FBSnJELENBQVI7QUFPQSxJQUFJRSxFQUFFLEdBQUc7QUFDUHp4QixFQUFBQSxJQUFJLEVBQUUsSUFEQztBQUVQb3hCLEVBQUFBLE9BQU8sRUFBRSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQixHQUFoQixFQUFxQixJQUFyQixFQUEyQixJQUEzQixFQUFpQyxJQUFqQyxFQUF1QyxJQUF2QyxFQUE2Q3ZyQixHQUE3QyxDQUFpRDJNLElBQWpELENBRkY7QUFHUDZlLEVBQUFBLEtBQUssRUFBRSxlQUFTRSxFQUFULEVBQWE7QUFBRSxXQUFPQSxFQUFFLElBQUksSUFBTixHQUFhLElBQWIsR0FBb0JMLE9BQU8sQ0FBQ0ssRUFBRCxDQUFsQztBQUF5QyxHQUh4RDtBQUlQRCxFQUFBQSxNQUFNLEVBQUUsZ0JBQVNDLEVBQVQsRUFBYTtBQUFFLFdBQU9BLEVBQVA7QUFBWTtBQUo1QixDQUFUO0FBT0EsSUFBSUcsT0FBTyxHQUFHO0FBQ1pDLEVBQUFBLE9BQU8sRUFBRSxXQURHO0FBRVp4bUIsRUFBQUEsU0FBUyxFQUFFLE1BRkM7QUFHWnpMLEVBQUFBLENBQUMsRUFBRSxXQUhTO0FBSVo4WSxFQUFBQSxDQUFDLEVBQUUsV0FKUztBQUtaNkQsRUFBQUEsQ0FBQyxFQUFFLFdBTFM7QUFNWnVWLEVBQUFBLENBQUMsRUFBRSxXQU5TO0FBT1pDLEVBQUFBLEVBQUUsRUFBRSxhQVBRO0FBUVpDLEVBQUFBLEVBQUUsRUFBRSxhQVJRO0FBU1pDLEVBQUFBLEVBQUUsRUFBRSxhQVRRO0FBVVpDLEVBQUFBLEVBQUUsRUFBRTtBQVZRLENBQWQ7QUFhQSxJQUFJQyxLQUFLLEdBQUc7QUFDVnpaLEVBQUFBLENBQUMsRUFBRSxHQURPO0FBRVZvWixFQUFBQSxDQUFDLEVBQUUsR0FGTztBQUdWQyxFQUFBQSxFQUFFLEVBQUUsSUFITTtBQUlWQyxFQUFBQSxFQUFFLEVBQUUsSUFKTTtBQUtWQyxFQUFBQSxFQUFFLEVBQUUsSUFMTTtBQU1WQyxFQUFBQSxFQUFFLEVBQUU7QUFOTSxDQUFaO0FBU0EsSUFBSUUsS0FBSyxHQUFHO0FBQ1Z4eUIsRUFBQUEsQ0FBQyxFQUFFLEdBRE87QUFFVjJjLEVBQUFBLENBQUMsRUFBRSxHQUZPO0FBR1Z3VixFQUFBQSxFQUFFLEVBQUUsSUFITTtBQUlWQyxFQUFBQSxFQUFFLEVBQUUsSUFKTTtBQUtWQyxFQUFBQSxFQUFFLEVBQUUsSUFMTTtBQU1WQyxFQUFBQSxFQUFFLEVBQUU7QUFOTSxDQUFaO0FBU0EsSUFBSUcsTUFBTSxHQUFHO0FBQ1hSLEVBQUFBLE9BQU8sRUFBRSxDQUFDLENBREM7QUFFWHhtQixFQUFBQSxTQUFTLEVBQUUsQ0FBQyxDQUZEO0FBR1h6TCxFQUFBQSxDQUFDLEVBQUUsSUFIUTtBQUlYOFksRUFBQUEsQ0FBQyxFQUFFLENBQUMsQ0FKTztBQUtYNkQsRUFBQUEsQ0FBQyxFQUFFLElBTFE7QUFNWHVWLEVBQUFBLENBQUMsRUFBRSxDQUFDLENBTk87QUFPWEMsRUFBQUEsRUFBRSxFQUFFLENBQUMsQ0FQTTtBQVFYQyxFQUFBQSxFQUFFLEVBQUUsQ0FBQyxDQVJNO0FBU1hDLEVBQUFBLEVBQUUsRUFBRSxDQUFDLENBVE07QUFVWEMsRUFBQUEsRUFBRSxFQUFFLENBQUM7QUFWTSxDQUFiO0FBYUEsSUFBSUksTUFBTSxHQUFHO0FBQ1hULEVBQUFBLE9BQU8sRUFBRSxDQUFDLENBREM7QUFFWHhtQixFQUFBQSxTQUFTLEVBQUUsQ0FBQyxDQUZEO0FBR1h6TCxFQUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUhPO0FBSVg4WSxFQUFBQSxDQUFDLEVBQUUsSUFKUTtBQUtYNkQsRUFBQUEsQ0FBQyxFQUFFLENBQUMsQ0FMTztBQU1YdVYsRUFBQUEsQ0FBQyxFQUFFLElBTlE7QUFPWEMsRUFBQUEsRUFBRSxFQUFFLENBQUMsQ0FQTTtBQVFYQyxFQUFBQSxFQUFFLEVBQUUsQ0FBQyxDQVJNO0FBU1hDLEVBQUFBLEVBQUUsRUFBRSxDQUFDLENBVE07QUFVWEMsRUFBQUEsRUFBRSxFQUFFLENBQUM7QUFWTSxDQUFiOztBQWFBLFNBQVN4ZixJQUFULENBQWNELENBQWQsRUFBaUI7QUFDZixTQUFPO0FBQUNDLElBQUFBLElBQUksRUFBRUQ7QUFBUCxHQUFQO0FBQ0QsRUFFRDs7O0FBQ0EsU0FBUzhmLGFBQVQsQ0FBdUJqZ0IsS0FBdkIsRUFBOEI7QUFDNUIsU0FBTyxDQUFDQSxLQUFLLENBQUNrZ0IsT0FBUCxJQUFrQixDQUFDbGdCLEtBQUssQ0FBQ21nQixNQUFoQztBQUNEOztBQUVELFNBQVNDLGFBQVQsR0FBeUI7QUFDdkIsTUFBSTdsQixHQUFHLEdBQUcsS0FBSzhsQixlQUFMLElBQXdCLElBQWxDOztBQUNBLE1BQUk5bEIsR0FBRyxDQUFDK2xCLFlBQUosQ0FBaUIsU0FBakIsQ0FBSixFQUFpQztBQUMvQi9sQixJQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ2dtQixPQUFKLENBQVkvVyxPQUFsQjtBQUNBLFdBQU8sQ0FBQyxDQUFDalAsR0FBRyxDQUFDbkcsQ0FBTCxFQUFRbUcsR0FBRyxDQUFDZ2UsQ0FBWixDQUFELEVBQWlCLENBQUNoZSxHQUFHLENBQUNuRyxDQUFKLEdBQVFtRyxHQUFHLENBQUNpbUIsS0FBYixFQUFvQmptQixHQUFHLENBQUNnZSxDQUFKLEdBQVFoZSxHQUFHLENBQUNqSSxNQUFoQyxDQUFqQixDQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBRCxFQUFTLENBQUNpSSxHQUFHLENBQUNpbUIsS0FBSixDQUFVaFgsT0FBVixDQUFrQnhlLEtBQW5CLEVBQTBCdVAsR0FBRyxDQUFDakksTUFBSixDQUFXa1gsT0FBWCxDQUFtQnhlLEtBQTdDLENBQVQsQ0FBUDtBQUNEOztBQUVELFNBQVN5MUIsZ0JBQVQsR0FBNEI7QUFDMUIsU0FBT0MsU0FBUyxDQUFDQyxjQUFWLElBQTZCLGtCQUFrQixJQUF0RDtBQUNELEVBRUQ7OztBQUNBLFNBQVMzbEIsS0FBVCxDQUFlck0sSUFBZixFQUFxQjtBQUNuQixTQUFPLENBQUNBLElBQUksQ0FBQ2l5QixPQUFiO0FBQXNCLFFBQUksRUFBRWp5QixJQUFJLEdBQUdBLElBQUksQ0FBQ29MLFVBQWQsQ0FBSixFQUErQjtBQUFyRDs7QUFDQSxTQUFPcEwsSUFBSSxDQUFDaXlCLE9BQVo7QUFDRDs7QUFFRCxTQUFTNXFCLFdBQVQsQ0FBZTZxQixNQUFmLEVBQXVCO0FBQ3JCLFNBQU9BLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLE1BQWlCQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFqQixJQUNBQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixNQUFpQkEsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FEeEI7QUFFRDs7QUFFTSxTQUFTQyxjQUFULENBQXdCbnlCLElBQXhCLEVBQThCO0FBQ25DLE1BQUltWixLQUFLLEdBQUduWixJQUFJLENBQUNpeUIsT0FBakI7QUFDQSxTQUFPOVksS0FBSyxHQUFHQSxLQUFLLENBQUNpWixHQUFOLENBQVU3QixNQUFWLENBQWlCcFgsS0FBSyxDQUFDL08sU0FBdkIsQ0FBSCxHQUF1QyxJQUFuRDtBQUNEO0FBRU0sU0FBU2lvQixNQUFULEdBQWtCO0FBQ3ZCLFNBQU9DLFdBQUssQ0FBQ2xDLENBQUQsQ0FBWjtBQUNEO0FBRU0sU0FBU21DLE1BQVQsR0FBa0I7QUFDdkIsU0FBT0QsV0FBSyxDQUFDN0IsQ0FBRCxDQUFaO0FBQ0Q7QUFFRCw2QkFBZSxpQkFBVztBQUN4QixTQUFPNkIsV0FBSyxDQUFDNUIsRUFBRCxDQUFaO0FBQ0Q7O0FBRUQsU0FBUzRCLFdBQVQsQ0FBZUYsR0FBZixFQUFvQjtBQUNsQixNQUFJRixNQUFNLEdBQUdULGFBQWI7QUFBQSxNQUNJenBCLE1BQU0sR0FBR3NwQixhQURiO0FBQUEsTUFFSWtCLFNBQVMsR0FBR1YsZ0JBRmhCO0FBQUEsTUFHSVcsSUFBSSxHQUFHLElBSFg7QUFBQSxNQUlJQyxTQUFTLEdBQUduZCxRQUFRLENBQUMsT0FBRCxFQUFVLE9BQVYsRUFBbUIsS0FBbkIsQ0FKeEI7QUFBQSxNQUtJb2QsVUFBVSxHQUFHLENBTGpCO0FBQUEsTUFNSUMsV0FOSjs7QUFRQSxXQUFTTixLQUFULENBQWV2ckIsS0FBZixFQUFzQjtBQUNwQixRQUFJNnBCLE9BQU8sR0FBRzdwQixLQUFLLENBQ2RtSyxRQURTLENBQ0EsU0FEQSxFQUNXMmhCLFVBRFgsRUFFWDNxQixTQUZXLENBRUQsVUFGQyxFQUdYekgsSUFIVyxDQUdOLENBQUNnUixJQUFJLENBQUMsU0FBRCxDQUFMLENBSE0sQ0FBZDtBQUtBbWYsSUFBQUEsT0FBTyxDQUFDNW5CLEtBQVIsR0FBZ0JxQixNQUFoQixDQUF1QixNQUF2QixFQUNLNkssSUFETCxDQUNVLE9BRFYsRUFDbUIsU0FEbkIsRUFFS0EsSUFGTCxDQUVVLGdCQUZWLEVBRTRCLEtBRjVCLEVBR0tBLElBSEwsQ0FHVSxRQUhWLEVBR29CeWIsT0FBTyxDQUFDQyxPQUg1QixFQUlHcm1CLEtBSkgsQ0FJU3FtQixPQUpULEVBS0svdUIsSUFMTCxDQUtVLFlBQVc7QUFDZixVQUFJcXdCLE1BQU0sR0FBRzdsQixLQUFLLENBQUMsSUFBRCxDQUFMLENBQVk2bEIsTUFBekI7QUFDQXpyQixNQUFBQSxNQUFNLENBQUMsSUFBRCxDQUFOLENBQ0t5TyxJQURMLENBQ1UsR0FEVixFQUNlZ2QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FEZixFQUVLaGQsSUFGTCxDQUVVLEdBRlYsRUFFZWdkLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBRmYsRUFHS2hkLElBSEwsQ0FHVSxPQUhWLEVBR21CZ2QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsSUFBZUEsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FIbEMsRUFJS2hkLElBSkwsQ0FJVSxRQUpWLEVBSW9CZ2QsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsSUFBZUEsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FKbkM7QUFLRCxLQVpMO0FBY0FuckIsSUFBQUEsS0FBSyxDQUFDbUIsU0FBTixDQUFnQixZQUFoQixFQUNHekgsSUFESCxDQUNRLENBQUNnUixJQUFJLENBQUMsV0FBRCxDQUFMLENBRFIsRUFFR3pJLEtBRkgsR0FFV3FCLE1BRlgsQ0FFa0IsTUFGbEIsRUFHSzZLLElBSEwsQ0FHVSxPQUhWLEVBR21CLFdBSG5CLEVBSUtBLElBSkwsQ0FJVSxRQUpWLEVBSW9CeWIsT0FBTyxDQUFDdm1CLFNBSjVCLEVBS0s4SyxJQUxMLENBS1UsTUFMVixFQUtrQixNQUxsQixFQU1LQSxJQU5MLENBTVUsY0FOVixFQU0wQixHQU4xQixFQU9LQSxJQVBMLENBT1UsUUFQVixFQU9vQixNQVBwQixFQVFLQSxJQVJMLENBUVUsaUJBUlYsRUFRNkIsWUFSN0I7QUFVQSxRQUFJNGQsTUFBTSxHQUFHL3JCLEtBQUssQ0FBQ21CLFNBQU4sQ0FBZ0IsU0FBaEIsRUFDVnpILElBRFUsQ0FDTDJ4QixHQUFHLENBQUMvQixPQURDLEVBQ1EsVUFBUzNzQixDQUFULEVBQVk7QUFBRSxhQUFPQSxDQUFDLENBQUMrTixJQUFUO0FBQWdCLEtBRHRDLENBQWI7QUFHQXFoQixJQUFBQSxNQUFNLENBQUM3cEIsSUFBUCxHQUFjcUIsTUFBZDtBQUVBd29CLElBQUFBLE1BQU0sQ0FBQzlwQixLQUFQLEdBQWVxQixNQUFmLENBQXNCLE1BQXRCLEVBQ0s2SyxJQURMLENBQ1UsT0FEVixFQUNtQixVQUFTeFIsQ0FBVCxFQUFZO0FBQUUsYUFBTyxvQkFBb0JBLENBQUMsQ0FBQytOLElBQTdCO0FBQW9DLEtBRHJFLEVBRUt5RCxJQUZMLENBRVUsUUFGVixFQUVvQixVQUFTeFIsQ0FBVCxFQUFZO0FBQUUsYUFBT2l0QixPQUFPLENBQUNqdEIsQ0FBQyxDQUFDK04sSUFBSCxDQUFkO0FBQXlCLEtBRjNEO0FBSUExSyxJQUFBQSxLQUFLLENBQ0FsRixJQURMLENBQ1VreEIsTUFEVixFQUVLN2QsSUFGTCxDQUVVLE1BRlYsRUFFa0IsTUFGbEIsRUFHS0EsSUFITCxDQUdVLGdCQUhWLEVBRzRCLEtBSDVCLEVBSUt0RCxFQUpMLENBSVEsaUJBSlIsRUFJMkJvaEIsT0FKM0IsRUFLR2hyQixNQUxILENBS1V3cUIsU0FMVixFQU1LNWdCLEVBTkwsQ0FNUSxrQkFOUixFQU00Qm9oQixPQU41QixFQU9LcGhCLEVBUEwsQ0FPUSxpQkFQUixFQU8yQnFoQixVQVAzQixFQVFLcmhCLEVBUkwsQ0FRUSxrQ0FSUixFQVE0Q3NoQixVQVI1QyxFQVNLMWxCLEtBVEwsQ0FTVyxjQVRYLEVBUzJCLE1BVDNCLEVBVUtBLEtBVkwsQ0FVVyw2QkFWWCxFQVUwQyxlQVYxQztBQVdEOztBQUVEOGtCLEVBQUFBLEtBQUssQ0FBQ2EsSUFBTixHQUFhLFVBQVNwc0IsS0FBVCxFQUFnQnFELFNBQWhCLEVBQTJCaUgsS0FBM0IsRUFBa0M7QUFDN0MsUUFBSXRLLEtBQUssQ0FBQ2lTLEtBQVYsRUFBaUI7QUFDZmpTLE1BQUFBLEtBQUssQ0FDQTZLLEVBREwsQ0FDUSxhQURSLEVBQ3VCLFVBQVNQLEtBQVQsRUFBZ0I7QUFBRStoQixRQUFBQSxPQUFPLENBQUMsSUFBRCxFQUFPdDJCLFNBQVAsQ0FBUCxDQUF5QnUyQixXQUF6QixHQUF1Q3Z5QixLQUF2QyxDQUE2Q3VRLEtBQTdDO0FBQXNELE9BRC9GLEVBRUtPLEVBRkwsQ0FFUSwyQkFGUixFQUVxQyxVQUFTUCxLQUFULEVBQWdCO0FBQUUraEIsUUFBQUEsT0FBTyxDQUFDLElBQUQsRUFBT3QyQixTQUFQLENBQVAsQ0FBeUIrRCxHQUF6QixDQUE2QndRLEtBQTdCO0FBQXNDLE9BRjdGLEVBR0sySCxLQUhMLENBR1csT0FIWCxFQUdvQixZQUFXO0FBQ3pCLFlBQUkzWSxJQUFJLEdBQUcsSUFBWDtBQUFBLFlBQ0k4WSxLQUFLLEdBQUc5WSxJQUFJLENBQUM0eEIsT0FEakI7QUFBQSxZQUVJcUIsSUFBSSxHQUFHRixPQUFPLENBQUMveUIsSUFBRCxFQUFPdkQsU0FBUCxDQUZsQjtBQUFBLFlBR0l5MkIsVUFBVSxHQUFHcGEsS0FBSyxDQUFDL08sU0FIdkI7QUFBQSxZQUlJb3BCLFVBQVUsR0FBR3BCLEdBQUcsQ0FBQzlCLEtBQUosQ0FBVSxPQUFPbG1CLFNBQVAsS0FBcUIsVUFBckIsR0FBa0NBLFNBQVMsQ0FBQ3JOLEtBQVYsQ0FBZ0IsSUFBaEIsRUFBc0JELFNBQXRCLENBQWxDLEdBQXFFc04sU0FBL0UsRUFBMEYrTyxLQUFLLENBQUMrWSxNQUFoRyxDQUpqQjtBQUFBLFlBS0kzMEIsQ0FBQyxHQUFHNnRCLFdBQVcsQ0FBQ21JLFVBQUQsRUFBYUMsVUFBYixDQUxuQjs7QUFPQSxpQkFBU3hhLEtBQVQsQ0FBZXhILENBQWYsRUFBa0I7QUFDaEIySCxVQUFBQSxLQUFLLENBQUMvTyxTQUFOLEdBQWtCb0gsQ0FBQyxLQUFLLENBQU4sSUFBV2dpQixVQUFVLEtBQUssSUFBMUIsR0FBaUMsSUFBakMsR0FBd0NqMkIsQ0FBQyxDQUFDaVUsQ0FBRCxDQUEzRDtBQUNBdWhCLFVBQUFBLE1BQU0sQ0FBQy8wQixJQUFQLENBQVlxQyxJQUFaO0FBQ0FpekIsVUFBQUEsSUFBSSxDQUFDaEIsS0FBTDtBQUNEOztBQUVELGVBQU9pQixVQUFVLEtBQUssSUFBZixJQUF1QkMsVUFBVSxLQUFLLElBQXRDLEdBQTZDeGEsS0FBN0MsR0FBcURBLEtBQUssQ0FBQyxDQUFELENBQWpFO0FBQ0QsT0FsQkw7QUFtQkQsS0FwQkQsTUFvQk87QUFDTGpTLE1BQUFBLEtBQUssQ0FDQWxGLElBREwsQ0FDVSxZQUFXO0FBQ2YsWUFBSXhCLElBQUksR0FBRyxJQUFYO0FBQUEsWUFDSXhELElBQUksR0FBR0MsU0FEWDtBQUFBLFlBRUlxYyxLQUFLLEdBQUc5WSxJQUFJLENBQUM0eEIsT0FGakI7QUFBQSxZQUdJdUIsVUFBVSxHQUFHcEIsR0FBRyxDQUFDOUIsS0FBSixDQUFVLE9BQU9sbUIsU0FBUCxLQUFxQixVQUFyQixHQUFrQ0EsU0FBUyxDQUFDck4sS0FBVixDQUFnQnNELElBQWhCLEVBQXNCeEQsSUFBdEIsQ0FBbEMsR0FBZ0V1TixTQUExRSxFQUFxRitPLEtBQUssQ0FBQytZLE1BQTNGLENBSGpCO0FBQUEsWUFJSW9CLElBQUksR0FBR0YsT0FBTyxDQUFDL3lCLElBQUQsRUFBT3hELElBQVAsQ0FBUCxDQUFvQncyQixXQUFwQixFQUpYO0FBTUE3WixRQUFBQSxTQUFTLENBQUNuWixJQUFELENBQVQ7QUFDQThZLFFBQUFBLEtBQUssQ0FBQy9PLFNBQU4sR0FBa0JvcEIsVUFBVSxLQUFLLElBQWYsR0FBc0IsSUFBdEIsR0FBNkJBLFVBQS9DO0FBQ0FULFFBQUFBLE1BQU0sQ0FBQy8wQixJQUFQLENBQVlxQyxJQUFaO0FBQ0FpekIsUUFBQUEsSUFBSSxDQUFDeHlCLEtBQUwsQ0FBV3VRLEtBQVgsRUFBa0JpaEIsS0FBbEIsQ0FBd0JqaEIsS0FBeEIsRUFBK0J4USxHQUEvQixDQUFtQ3dRLEtBQW5DO0FBQ0QsT0FaTDtBQWFEO0FBQ0YsR0FwQ0Q7O0FBc0NBaWhCLEVBQUFBLEtBQUssQ0FBQ21CLEtBQU4sR0FBYyxVQUFTMXNCLEtBQVQsRUFBZ0JzSyxLQUFoQixFQUF1QjtBQUNuQ2loQixJQUFBQSxLQUFLLENBQUNhLElBQU4sQ0FBV3BzQixLQUFYLEVBQWtCLElBQWxCLEVBQXdCc0ssS0FBeEI7QUFDRCxHQUZEOztBQUlBLFdBQVMwaEIsTUFBVCxHQUFrQjtBQUNoQixRQUFJaHNCLEtBQUssR0FBR04sTUFBTSxDQUFDLElBQUQsQ0FBbEI7QUFBQSxRQUNJMkQsU0FBUyxHQUFHaUMsS0FBSyxDQUFDLElBQUQsQ0FBTCxDQUFZakMsU0FENUI7O0FBR0EsUUFBSUEsU0FBSixFQUFlO0FBQ2JyRCxNQUFBQSxLQUFLLENBQUNtQixTQUFOLENBQWdCLFlBQWhCLEVBQ0tzRixLQURMLENBQ1csU0FEWCxFQUNzQixJQUR0QixFQUVLMEgsSUFGTCxDQUVVLEdBRlYsRUFFZTlLLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBRmYsRUFHSzhLLElBSEwsQ0FHVSxHQUhWLEVBR2U5SyxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUhmLEVBSUs4SyxJQUpMLENBSVUsT0FKVixFQUltQjlLLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCQSxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUpyQyxFQUtLOEssSUFMTCxDQUtVLFFBTFYsRUFLb0I5SyxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixJQUFrQkEsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FMdEM7QUFPQXJELE1BQUFBLEtBQUssQ0FBQ21CLFNBQU4sQ0FBZ0IsU0FBaEIsRUFDS3NGLEtBREwsQ0FDVyxTQURYLEVBQ3NCLElBRHRCLEVBRUswSCxJQUZMLENBRVUsR0FGVixFQUVlLFVBQVN4UixDQUFULEVBQVk7QUFBRSxlQUFPQSxDQUFDLENBQUMrTixJQUFGLENBQU8vTixDQUFDLENBQUMrTixJQUFGLENBQU90VCxNQUFQLEdBQWdCLENBQXZCLE1BQThCLEdBQTlCLEdBQW9DaU0sU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsSUFBa0J1b0IsVUFBVSxHQUFHLENBQW5FLEdBQXVFdm9CLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCdW9CLFVBQVUsR0FBRyxDQUE3RztBQUFpSCxPQUY5SSxFQUdLemQsSUFITCxDQUdVLEdBSFYsRUFHZSxVQUFTeFIsQ0FBVCxFQUFZO0FBQUUsZUFBT0EsQ0FBQyxDQUFDK04sSUFBRixDQUFPLENBQVAsTUFBYyxHQUFkLEdBQW9CckgsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsSUFBa0J1b0IsVUFBVSxHQUFHLENBQW5ELEdBQXVEdm9CLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLElBQWtCdW9CLFVBQVUsR0FBRyxDQUE3RjtBQUFpRyxPQUg5SCxFQUlLemQsSUFKTCxDQUlVLE9BSlYsRUFJbUIsVUFBU3hSLENBQVQsRUFBWTtBQUFFLGVBQU9BLENBQUMsQ0FBQytOLElBQUYsS0FBVyxHQUFYLElBQWtCL04sQ0FBQyxDQUFDK04sSUFBRixLQUFXLEdBQTdCLEdBQW1DckgsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsSUFBa0JBLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBQWxCLEdBQW9DdW9CLFVBQXZFLEdBQW9GQSxVQUEzRjtBQUF3RyxPQUp6SSxFQUtLemQsSUFMTCxDQUtVLFFBTFYsRUFLb0IsVUFBU3hSLENBQVQsRUFBWTtBQUFFLGVBQU9BLENBQUMsQ0FBQytOLElBQUYsS0FBVyxHQUFYLElBQWtCL04sQ0FBQyxDQUFDK04sSUFBRixLQUFXLEdBQTdCLEdBQW1DckgsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsSUFBa0JBLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBQWxCLEdBQW9DdW9CLFVBQXZFLEdBQW9GQSxVQUEzRjtBQUF3RyxPQUwxSTtBQU1ELEtBZEQsTUFnQks7QUFDSDVyQixNQUFBQSxLQUFLLENBQUNtQixTQUFOLENBQWdCLG9CQUFoQixFQUNLc0YsS0FETCxDQUNXLFNBRFgsRUFDc0IsTUFEdEIsRUFFSzBILElBRkwsQ0FFVSxHQUZWLEVBRWUsSUFGZixFQUdLQSxJQUhMLENBR1UsR0FIVixFQUdlLElBSGYsRUFJS0EsSUFKTCxDQUlVLE9BSlYsRUFJbUIsSUFKbkIsRUFLS0EsSUFMTCxDQUtVLFFBTFYsRUFLb0IsSUFMcEI7QUFNRDtBQUNGOztBQUVELFdBQVNrZSxPQUFULENBQWlCL3lCLElBQWpCLEVBQXVCeEQsSUFBdkIsRUFBNkI2MkIsS0FBN0IsRUFBb0M7QUFDbEMsUUFBSUosSUFBSSxHQUFHanpCLElBQUksQ0FBQzR4QixPQUFMLENBQWFtQixPQUF4QjtBQUNBLFdBQU9FLElBQUksS0FBSyxDQUFDSSxLQUFELElBQVUsQ0FBQ0osSUFBSSxDQUFDSSxLQUFyQixDQUFKLEdBQWtDSixJQUFsQyxHQUF5QyxJQUFJSyxPQUFKLENBQVl0ekIsSUFBWixFQUFrQnhELElBQWxCLEVBQXdCNjJCLEtBQXhCLENBQWhEO0FBQ0Q7O0FBRUQsV0FBU0MsT0FBVCxDQUFpQnR6QixJQUFqQixFQUF1QnhELElBQXZCLEVBQTZCNjJCLEtBQTdCLEVBQW9DO0FBQ2xDLFNBQUtyekIsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS3hELElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtzYyxLQUFMLEdBQWE5WSxJQUFJLENBQUM0eEIsT0FBbEI7QUFDQSxTQUFLMVksTUFBTCxHQUFjLENBQWQ7QUFDQSxTQUFLbWEsS0FBTCxHQUFhQSxLQUFiO0FBQ0Q7O0FBRURDLEVBQUFBLE9BQU8sQ0FBQzkwQixTQUFSLEdBQW9CO0FBQ2xCdzBCLElBQUFBLFdBQVcsRUFBRSx1QkFBVztBQUN0QixVQUFJLEVBQUUsS0FBSzlaLE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUIsS0FBS0osS0FBTCxDQUFXaWEsT0FBWCxHQUFxQixJQUFyQixFQUEyQixLQUFLUSxRQUFMLEdBQWdCLElBQTNDO0FBQ3pCLGFBQU8sSUFBUDtBQUNELEtBSmlCO0FBS2xCOXlCLElBQUFBLEtBQUssRUFBRSxlQUFTdVEsS0FBVCxFQUFnQndpQixJQUFoQixFQUFzQjtBQUMzQixVQUFJLEtBQUtELFFBQVQsRUFBbUIsS0FBS0EsUUFBTCxHQUFnQixLQUFoQixFQUF1QixLQUFLTixJQUFMLENBQVUsT0FBVixFQUFtQmppQixLQUFuQixFQUEwQndpQixJQUExQixDQUF2QixDQUFuQixLQUNLLEtBQUtQLElBQUwsQ0FBVSxPQUFWLEVBQW1CamlCLEtBQW5CO0FBQ0wsYUFBTyxJQUFQO0FBQ0QsS0FUaUI7QUFVbEJpaEIsSUFBQUEsS0FBSyxFQUFFLGVBQVNqaEIsS0FBVCxFQUFnQndpQixJQUFoQixFQUFzQjtBQUMzQixXQUFLUCxJQUFMLENBQVUsT0FBVixFQUFtQmppQixLQUFuQixFQUEwQndpQixJQUExQjtBQUNBLGFBQU8sSUFBUDtBQUNELEtBYmlCO0FBY2xCaHpCLElBQUFBLEdBQUcsRUFBRSxhQUFTd1EsS0FBVCxFQUFnQndpQixJQUFoQixFQUFzQjtBQUN6QixVQUFJLEVBQUUsS0FBS3RhLE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUIsT0FBTyxLQUFLSixLQUFMLENBQVdpYSxPQUFsQixFQUEyQixLQUFLRSxJQUFMLENBQVUsS0FBVixFQUFpQmppQixLQUFqQixFQUF3QndpQixJQUF4QixDQUEzQjtBQUN6QixhQUFPLElBQVA7QUFDRCxLQWpCaUI7QUFrQmxCUCxJQUFBQSxJQUFJLEVBQUUsY0FBUzdoQixJQUFULEVBQWVKLEtBQWYsRUFBc0J3aUIsSUFBdEIsRUFBNEI7QUFDaEMsVUFBSW53QixDQUFDLEdBQUcrQyxNQUFNLENBQUMsS0FBS3BHLElBQU4sQ0FBTixDQUFrQm1JLEtBQWxCLEVBQVI7QUFDQWtxQixNQUFBQSxTQUFTLENBQUMxMEIsSUFBVixDQUNFeVQsSUFERixFQUVFLEtBQUtwUixJQUZQLEVBR0UsSUFBSXF2QixVQUFKLENBQWVqZSxJQUFmLEVBQXFCO0FBQ25CcWlCLFFBQUFBLFdBQVcsRUFBRXppQixLQURNO0FBRW5CdFAsUUFBQUEsTUFBTSxFQUFFdXdCLEtBRlc7QUFHbkJsb0IsUUFBQUEsU0FBUyxFQUFFZ29CLEdBQUcsQ0FBQzdCLE1BQUosQ0FBVyxLQUFLcFgsS0FBTCxDQUFXL08sU0FBdEIsQ0FIUTtBQUluQnlwQixRQUFBQSxJQUFJLEVBQUpBLElBSm1CO0FBS25CdGUsUUFBQUEsUUFBUSxFQUFFbWQ7QUFMUyxPQUFyQixDQUhGLEVBVUVodkIsQ0FWRjtBQVlEO0FBaENpQixHQUFwQjs7QUFtQ0EsV0FBU3N2QixPQUFULENBQWlCM2hCLEtBQWpCLEVBQXdCO0FBQ3RCLFFBQUl1aEIsV0FBVyxJQUFJLENBQUN2aEIsS0FBSyxDQUFDMGlCLE9BQTFCLEVBQW1DO0FBQ25DLFFBQUksQ0FBQy9yQixNQUFNLENBQUNqTCxLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBTCxFQUFvQztBQUVwQyxRQUFJdUQsSUFBSSxHQUFHLElBQVg7QUFBQSxRQUNJb1IsSUFBSSxHQUFHSixLQUFLLENBQUN0UCxNQUFOLENBQWFtRixRQUFiLENBQXNCdUssSUFEakM7QUFBQSxRQUVJb2lCLElBQUksR0FBRyxDQUFDcEIsSUFBSSxJQUFJcGhCLEtBQUssQ0FBQzJpQixPQUFkLEdBQXdCdmlCLElBQUksR0FBRyxTQUEvQixHQUEyQ0EsSUFBNUMsTUFBc0QsV0FBdEQsR0FBb0VvZSxTQUFwRSxHQUFpRjRDLElBQUksSUFBSXBoQixLQUFLLENBQUM0aUIsTUFBZCxHQUF1QmpFLFdBQXZCLEdBQXFDRCxXQUZqSTtBQUFBLFFBR0ltRSxLQUFLLEdBQUc5QixHQUFHLEtBQUszQixDQUFSLEdBQVksSUFBWixHQUFtQlcsTUFBTSxDQUFDM2YsSUFBRCxDQUhyQztBQUFBLFFBSUkwaUIsS0FBSyxHQUFHL0IsR0FBRyxLQUFLaEMsQ0FBUixHQUFZLElBQVosR0FBbUJpQixNQUFNLENBQUM1ZixJQUFELENBSnJDO0FBQUEsUUFLSTBILEtBQUssR0FBRzlNLEtBQUssQ0FBQ2hNLElBQUQsQ0FMakI7QUFBQSxRQU1JNnhCLE1BQU0sR0FBRy9ZLEtBQUssQ0FBQytZLE1BTm5CO0FBQUEsUUFPSTluQixTQUFTLEdBQUcrTyxLQUFLLENBQUMvTyxTQVB0QjtBQUFBLFFBUUlncUIsQ0FBQyxHQUFHbEMsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FSUjtBQUFBLFFBUXNCbUMsRUFSdEI7QUFBQSxRQVEwQkMsRUFSMUI7QUFBQSxRQVNJQyxDQUFDLEdBQUdyQyxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQVRSO0FBQUEsUUFTc0JzQyxFQVR0QjtBQUFBLFFBUzBCQyxFQVQxQjtBQUFBLFFBVUlDLENBQUMsR0FBR3hDLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBVlI7QUFBQSxRQVVzQnlDLEVBVnRCO0FBQUEsUUFVMEJDLEVBVjFCO0FBQUEsUUFXSTF2QixDQUFDLEdBQUdndEIsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FYUjtBQUFBLFFBV3NCMkMsRUFYdEI7QUFBQSxRQVcwQkMsRUFYMUI7QUFBQSxRQVlJQyxFQUFFLEdBQUcsQ0FaVDtBQUFBLFFBYUlDLEVBQUUsR0FBRyxDQWJUO0FBQUEsUUFjSUMsTUFkSjtBQUFBLFFBZUlDLFFBQVEsR0FBR2hCLEtBQUssSUFBSUMsS0FBVCxJQUFrQjFCLElBQWxCLElBQTBCcGhCLEtBQUssQ0FBQzhqQixRQWYvQztBQUFBLFFBZ0JJQyxLQWhCSjtBQUFBLFFBaUJJQyxLQWpCSjtBQUFBLFFBa0JJQyxNQUFNLEdBQUdsNEIsS0FBSyxDQUFDOEIsSUFBTixDQUFXbVMsS0FBSyxDQUFDMGlCLE9BQU4sSUFBaUIsQ0FBQzFpQixLQUFELENBQTVCLEVBQXFDLFVBQUFHLENBQUMsRUFBSTtBQUNqRCxVQUFNalUsQ0FBQyxHQUFHaVUsQ0FBQyxDQUFDK2pCLFVBQVo7QUFDQS9qQixNQUFBQSxDQUFDLEdBQUdpZSxPQUFPLENBQUNqZSxDQUFELEVBQUluUixJQUFKLENBQVg7QUFDQW1SLE1BQUFBLENBQUMsQ0FBQ2drQixNQUFGLEdBQVdoa0IsQ0FBQyxDQUFDelMsS0FBRixFQUFYO0FBQ0F5UyxNQUFBQSxDQUFDLENBQUMrakIsVUFBRixHQUFlaDRCLENBQWY7QUFDQSxhQUFPaVUsQ0FBUDtBQUNELEtBTlEsQ0FsQmI7QUEwQkFnSSxJQUFBQSxTQUFTLENBQUNuWixJQUFELENBQVQ7QUFDQSxRQUFJaXpCLElBQUksR0FBR0YsT0FBTyxDQUFDL3lCLElBQUQsRUFBT3ZELFNBQVAsRUFBa0IsSUFBbEIsQ0FBUCxDQUErQnUyQixXQUEvQixFQUFYOztBQUVBLFFBQUk1aEIsSUFBSSxLQUFLLFNBQWIsRUFBd0I7QUFDdEIsVUFBSXJILFNBQUosRUFBZTZxQixNQUFNLEdBQUcsSUFBVDtBQUNmLFVBQU1RLEdBQUcsR0FBRyxDQUFDSCxNQUFNLENBQUMsQ0FBRCxDQUFQLEVBQVlBLE1BQU0sQ0FBQyxDQUFELENBQU4sSUFBYUEsTUFBTSxDQUFDLENBQUQsQ0FBL0IsQ0FBWjtBQUNBbmMsTUFBQUEsS0FBSyxDQUFDL08sU0FBTixHQUFrQkEsU0FBUyxHQUFHLENBQUMsQ0FDM0JpcUIsRUFBRSxHQUFHakMsR0FBRyxLQUFLM0IsQ0FBUixHQUFZMkQsQ0FBWixHQUFnQnJwQixHQUFHLENBQUMwcUIsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPLENBQVAsQ0FBRCxFQUFZQSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFaLENBREcsRUFFM0JqQixFQUFFLEdBQUdwQyxHQUFHLEtBQUtoQyxDQUFSLEdBQVltRSxDQUFaLEdBQWdCeHBCLEdBQUcsQ0FBQzBxQixHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFELEVBQVlBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxDQUFQLENBQVosQ0FGRyxDQUFELEVBR3pCLENBQ0RkLEVBQUUsR0FBR3ZDLEdBQUcsS0FBSzNCLENBQVIsR0FBWWlFLENBQVosR0FBZ0IvTCxHQUFHLENBQUM4TSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFELEVBQVlBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBTyxDQUFQLENBQVosQ0FEdkIsRUFFRFosRUFBRSxHQUFHekMsR0FBRyxLQUFLaEMsQ0FBUixHQUFZbHJCLENBQVosR0FBZ0J5akIsR0FBRyxDQUFDOE0sR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPLENBQVAsQ0FBRCxFQUFZQSxHQUFHLENBQUMsQ0FBRCxDQUFILENBQU8sQ0FBUCxDQUFaLENBRnZCLENBSHlCLENBQTlCO0FBT0EsVUFBSUgsTUFBTSxDQUFDbjNCLE1BQVAsR0FBZ0IsQ0FBcEIsRUFBdUJnMUIsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUN4QixLQVhELE1BV087QUFDTGdqQixNQUFBQSxFQUFFLEdBQUdqcUIsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FBTDtBQUNBb3FCLE1BQUFBLEVBQUUsR0FBR3BxQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFMO0FBQ0F1cUIsTUFBQUEsRUFBRSxHQUFHdnFCLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBQUw7QUFDQXlxQixNQUFBQSxFQUFFLEdBQUd6cUIsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsQ0FBTDtBQUNEOztBQUVEa3FCLElBQUFBLEVBQUUsR0FBR0QsRUFBTDtBQUNBSSxJQUFBQSxFQUFFLEdBQUdELEVBQUw7QUFDQUksSUFBQUEsRUFBRSxHQUFHRCxFQUFMO0FBQ0FHLElBQUFBLEVBQUUsR0FBR0QsRUFBTDtBQUVBLFFBQUk5dEIsS0FBSyxHQUFHTixNQUFNLENBQUNwRyxJQUFELENBQU4sQ0FDUDZVLElBRE8sQ0FDRixnQkFERSxFQUNnQixNQURoQixDQUFaO0FBR0EsUUFBSTBiLE9BQU8sR0FBRzdwQixLQUFLLENBQUNtQixTQUFOLENBQWdCLFVBQWhCLEVBQ1RnTixJQURTLENBQ0osUUFESSxFQUNNeWIsT0FBTyxDQUFDbGYsSUFBRCxDQURiLENBQWQ7O0FBR0EsUUFBSUosS0FBSyxDQUFDMGlCLE9BQVYsRUFBbUI7QUFDakJULE1BQUFBLElBQUksQ0FBQ29DLEtBQUwsR0FBYUEsS0FBYjtBQUNBcEMsTUFBQUEsSUFBSSxDQUFDcUMsS0FBTCxHQUFhQSxLQUFiO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsVUFBSUMsSUFBSSxHQUFHbnZCLE1BQU0sQ0FBQzRLLEtBQUssQ0FBQ3VrQixJQUFQLENBQU4sQ0FDTmhrQixFQURNLENBQ0gsaUJBREcsRUFDZ0I4akIsS0FEaEIsRUFDdUIsSUFEdkIsRUFFTjlqQixFQUZNLENBRUgsZUFGRyxFQUVjK2pCLEtBRmQsRUFFcUIsSUFGckIsQ0FBWDtBQUdBLFVBQUlsRCxJQUFKLEVBQVVtRCxJQUFJLENBQ1Roa0IsRUFESyxDQUNGLGVBREUsRUFDZWlrQixTQURmLEVBQzBCLElBRDFCLEVBRUxqa0IsRUFGSyxDQUVGLGFBRkUsRUFFYWtrQixRQUZiLEVBRXVCLElBRnZCO0FBSVZ2RyxNQUFBQSxXQUFXLENBQUNsZSxLQUFLLENBQUN1a0IsSUFBUCxDQUFYO0FBQ0Q7O0FBRUQ3QyxJQUFBQSxNQUFNLENBQUMvMEIsSUFBUCxDQUFZcUMsSUFBWjtBQUNBaXpCLElBQUFBLElBQUksQ0FBQ3h5QixLQUFMLENBQVd1USxLQUFYLEVBQWtCd2lCLElBQUksQ0FBQzUwQixJQUF2Qjs7QUFFQSxhQUFTeTJCLEtBQVQsQ0FBZXJrQixLQUFmLEVBQXNCO0FBQUEsc0RBQ0pBLEtBQUssQ0FBQzBrQixjQUFOLElBQXdCLENBQUMxa0IsS0FBRCxDQURwQjtBQUFBOztBQUFBO0FBQ3BCLDREQUFpRDtBQUFBLGNBQXRDMmtCLENBQXNDOztBQUFBLDJEQUMvQlYsTUFEK0I7QUFBQTs7QUFBQTtBQUMvQztBQUFBLGtCQUFXNXhCLENBQVg7QUFDRSxrQkFBSUEsQ0FBQyxDQUFDNnhCLFVBQUYsS0FBaUJTLENBQUMsQ0FBQ1QsVUFBdkIsRUFBbUM3eEIsQ0FBQyxDQUFDdXlCLEdBQUYsR0FBUXhHLE9BQU8sQ0FBQ3VHLENBQUQsRUFBSTMxQixJQUFKLENBQWY7QUFEckM7QUFEK0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdoRDtBQUptQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUtwQixVQUFJNjBCLFFBQVEsSUFBSSxDQUFDRSxLQUFiLElBQXNCLENBQUNDLEtBQXZCLElBQWdDQyxNQUFNLENBQUNuM0IsTUFBUCxLQUFrQixDQUF0RCxFQUF5RDtBQUN2RCxZQUFNKzNCLEtBQUssR0FBR1osTUFBTSxDQUFDLENBQUQsQ0FBcEI7QUFDQSxZQUFJckYsR0FBRyxDQUFDaUcsS0FBSyxDQUFDRCxHQUFOLENBQVUsQ0FBVixJQUFlQyxLQUFLLENBQUMsQ0FBRCxDQUFyQixDQUFILEdBQStCakcsR0FBRyxDQUFDaUcsS0FBSyxDQUFDRCxHQUFOLENBQVUsQ0FBVixJQUFlQyxLQUFLLENBQUMsQ0FBRCxDQUFyQixDQUF0QyxFQUNFYixLQUFLLEdBQUcsSUFBUixDQURGLEtBR0VELEtBQUssR0FBRyxJQUFSO0FBQ0g7O0FBWG1CLHVEQVlBRSxNQVpBO0FBQUE7O0FBQUE7QUFZcEI7QUFBQSxjQUFXWSxNQUFYO0FBQ0UsY0FBSUEsTUFBSyxDQUFDRCxHQUFWLEVBQWVDLE1BQUssQ0FBQyxDQUFELENBQUwsR0FBV0EsTUFBSyxDQUFDRCxHQUFOLENBQVUsQ0FBVixDQUFYLEVBQXlCQyxNQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVdBLE1BQUssQ0FBQ0QsR0FBTixDQUFVLENBQVYsQ0FBcEM7QUFEakI7QUFab0I7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFjcEJoQixNQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNBdEYsTUFBQUEsT0FBTyxDQUFDdGUsS0FBRCxDQUFQO0FBQ0E4aEIsTUFBQUEsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUNEOztBQUVELGFBQVM4aEIsSUFBVCxDQUFjOWhCLEtBQWQsRUFBcUI7QUFDbkIsVUFBTTZrQixLQUFLLEdBQUdaLE1BQU0sQ0FBQyxDQUFELENBQXBCO0FBQUEsVUFBeUJFLE1BQU0sR0FBR1UsS0FBSyxDQUFDVixNQUF4QztBQUNBLFVBQUloa0IsQ0FBSjtBQUVBdWpCLE1BQUFBLEVBQUUsR0FBR21CLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBV1YsTUFBTSxDQUFDLENBQUQsQ0FBdEI7QUFDQVIsTUFBQUEsRUFBRSxHQUFHa0IsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXVixNQUFNLENBQUMsQ0FBRCxDQUF0Qjs7QUFFQSxjQUFRM0IsSUFBUjtBQUNFLGFBQUsvRCxVQUFMO0FBQ0EsYUFBS0QsU0FBTDtBQUFnQjtBQUNkLGdCQUFJcUUsS0FBSixFQUFXYSxFQUFFLEdBQUdwTSxHQUFHLENBQUN5TCxDQUFDLEdBQUdDLEVBQUwsRUFBU3RwQixHQUFHLENBQUMycEIsQ0FBQyxHQUFHQyxFQUFMLEVBQVNJLEVBQVQsQ0FBWixDQUFSLEVBQW1DVCxFQUFFLEdBQUdELEVBQUUsR0FBR1UsRUFBN0MsRUFBaURILEVBQUUsR0FBR0QsRUFBRSxHQUFHSSxFQUEzRDtBQUNYLGdCQUFJWixLQUFKLEVBQVdhLEVBQUUsR0FBR3JNLEdBQUcsQ0FBQzRMLENBQUMsR0FBR0MsRUFBTCxFQUFTenBCLEdBQUcsQ0FBQzdGLENBQUMsR0FBRzJ2QixFQUFMLEVBQVNHLEVBQVQsQ0FBWixDQUFSLEVBQW1DUCxFQUFFLEdBQUdELEVBQUUsR0FBR1EsRUFBN0MsRUFBaURGLEVBQUUsR0FBR0QsRUFBRSxHQUFHRyxFQUEzRDtBQUNYO0FBQ0Q7O0FBQ0QsYUFBS2pGLFdBQUw7QUFBa0I7QUFDaEIsZ0JBQUl1RixNQUFNLENBQUMsQ0FBRCxDQUFWLEVBQWU7QUFDYixrQkFBSXBCLEtBQUosRUFBV0ksRUFBRSxHQUFHM0wsR0FBRyxDQUFDeUwsQ0FBRCxFQUFJcnBCLEdBQUcsQ0FBQzJwQixDQUFELEVBQUlZLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBQUosQ0FBUCxDQUFSLEVBQW1DVixFQUFFLEdBQUdqTSxHQUFHLENBQUN5TCxDQUFELEVBQUlycEIsR0FBRyxDQUFDMnBCLENBQUQsRUFBSVksTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBSixDQUFQLENBQTNDLEVBQXNFcEIsS0FBSyxHQUFHLENBQTlFO0FBQ1gsa0JBQUlDLEtBQUosRUFBV00sRUFBRSxHQUFHOUwsR0FBRyxDQUFDNEwsQ0FBRCxFQUFJeHBCLEdBQUcsQ0FBQzdGLENBQUQsRUFBSW93QixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFKLENBQVAsQ0FBUixFQUFtQ1IsRUFBRSxHQUFHbk0sR0FBRyxDQUFDNEwsQ0FBRCxFQUFJeHBCLEdBQUcsQ0FBQzdGLENBQUQsRUFBSW93QixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFKLENBQVAsQ0FBM0MsRUFBc0VuQixLQUFLLEdBQUcsQ0FBOUU7QUFDWixhQUhELE1BR087QUFDTCxrQkFBSUQsS0FBSyxHQUFHLENBQVosRUFBZWEsRUFBRSxHQUFHcE0sR0FBRyxDQUFDeUwsQ0FBQyxHQUFHQyxFQUFMLEVBQVN0cEIsR0FBRyxDQUFDMnBCLENBQUMsR0FBR0wsRUFBTCxFQUFTVSxFQUFULENBQVosQ0FBUixFQUFtQ1QsRUFBRSxHQUFHRCxFQUFFLEdBQUdVLEVBQTdDLEVBQWlESCxFQUFFLEdBQUdELEVBQXRELENBQWYsS0FDSyxJQUFJVCxLQUFLLEdBQUcsQ0FBWixFQUFlYSxFQUFFLEdBQUdwTSxHQUFHLENBQUN5TCxDQUFDLEdBQUdPLEVBQUwsRUFBUzVwQixHQUFHLENBQUMycEIsQ0FBQyxHQUFHQyxFQUFMLEVBQVNJLEVBQVQsQ0FBWixDQUFSLEVBQW1DVCxFQUFFLEdBQUdELEVBQXhDLEVBQTRDTyxFQUFFLEdBQUdELEVBQUUsR0FBR0ksRUFBdEQ7QUFDcEIsa0JBQUlaLEtBQUssR0FBRyxDQUFaLEVBQWVhLEVBQUUsR0FBR3JNLEdBQUcsQ0FBQzRMLENBQUMsR0FBR0MsRUFBTCxFQUFTenBCLEdBQUcsQ0FBQzdGLENBQUMsR0FBR3N2QixFQUFMLEVBQVNRLEVBQVQsQ0FBWixDQUFSLEVBQW1DUCxFQUFFLEdBQUdELEVBQUUsR0FBR1EsRUFBN0MsRUFBaURGLEVBQUUsR0FBR0QsRUFBdEQsQ0FBZixLQUNLLElBQUlWLEtBQUssR0FBRyxDQUFaLEVBQWVhLEVBQUUsR0FBR3JNLEdBQUcsQ0FBQzRMLENBQUMsR0FBR00sRUFBTCxFQUFTOXBCLEdBQUcsQ0FBQzdGLENBQUMsR0FBRzJ2QixFQUFMLEVBQVNHLEVBQVQsQ0FBWixDQUFSLEVBQW1DUCxFQUFFLEdBQUdELEVBQXhDLEVBQTRDTSxFQUFFLEdBQUdELEVBQUUsR0FBR0csRUFBdEQ7QUFDckI7O0FBQ0Q7QUFDRDs7QUFDRCxhQUFLaEYsV0FBTDtBQUFrQjtBQUNoQixnQkFBSWtFLEtBQUosRUFBV0ksRUFBRSxHQUFHM0wsR0FBRyxDQUFDeUwsQ0FBRCxFQUFJcnBCLEdBQUcsQ0FBQzJwQixDQUFELEVBQUlMLEVBQUUsR0FBR1UsRUFBRSxHQUFHYixLQUFkLENBQVAsQ0FBUixFQUFzQ1UsRUFBRSxHQUFHak0sR0FBRyxDQUFDeUwsQ0FBRCxFQUFJcnBCLEdBQUcsQ0FBQzJwQixDQUFELEVBQUlDLEVBQUUsR0FBR0ksRUFBRSxHQUFHYixLQUFkLENBQVAsQ0FBOUM7QUFDWCxnQkFBSUMsS0FBSixFQUFXTSxFQUFFLEdBQUc5TCxHQUFHLENBQUM0TCxDQUFELEVBQUl4cEIsR0FBRyxDQUFDN0YsQ0FBRCxFQUFJc3ZCLEVBQUUsR0FBR1EsRUFBRSxHQUFHYixLQUFkLENBQVAsQ0FBUixFQUFzQ1csRUFBRSxHQUFHbk0sR0FBRyxDQUFDNEwsQ0FBRCxFQUFJeHBCLEdBQUcsQ0FBQzdGLENBQUQsRUFBSTJ2QixFQUFFLEdBQUdHLEVBQUUsR0FBR2IsS0FBZCxDQUFQLENBQTlDO0FBQ1g7QUFDRDtBQXZCSDs7QUEwQkEsVUFBSVMsRUFBRSxHQUFHTixFQUFULEVBQWE7QUFDWEosUUFBQUEsS0FBSyxJQUFJLENBQUMsQ0FBVjtBQUNBMWlCLFFBQUFBLENBQUMsR0FBRzZpQixFQUFKLEVBQVFBLEVBQUUsR0FBR00sRUFBYixFQUFpQkEsRUFBRSxHQUFHbmpCLENBQXRCO0FBQ0FBLFFBQUFBLENBQUMsR0FBRzhpQixFQUFKLEVBQVFBLEVBQUUsR0FBR00sRUFBYixFQUFpQkEsRUFBRSxHQUFHcGpCLENBQXRCO0FBQ0EsWUFBSUMsSUFBSSxJQUFJeWYsS0FBWixFQUFtQk4sT0FBTyxDQUFDMWIsSUFBUixDQUFhLFFBQWIsRUFBdUJ5YixPQUFPLENBQUNsZixJQUFJLEdBQUd5ZixLQUFLLENBQUN6ZixJQUFELENBQWIsQ0FBOUI7QUFDcEI7O0FBRUQsVUFBSXFqQixFQUFFLEdBQUdMLEVBQVQsRUFBYTtBQUNYTixRQUFBQSxLQUFLLElBQUksQ0FBQyxDQUFWO0FBQ0EzaUIsUUFBQUEsQ0FBQyxHQUFHZ2pCLEVBQUosRUFBUUEsRUFBRSxHQUFHSyxFQUFiLEVBQWlCQSxFQUFFLEdBQUdyakIsQ0FBdEI7QUFDQUEsUUFBQUEsQ0FBQyxHQUFHaWpCLEVBQUosRUFBUUEsRUFBRSxHQUFHSyxFQUFiLEVBQWlCQSxFQUFFLEdBQUd0akIsQ0FBdEI7QUFDQSxZQUFJQyxJQUFJLElBQUkwZixLQUFaLEVBQW1CUCxPQUFPLENBQUMxYixJQUFSLENBQWEsUUFBYixFQUF1QnliLE9BQU8sQ0FBQ2xmLElBQUksR0FBRzBmLEtBQUssQ0FBQzFmLElBQUQsQ0FBYixDQUE5QjtBQUNwQjs7QUFFRCxVQUFJMEgsS0FBSyxDQUFDL08sU0FBVixFQUFxQkEsU0FBUyxHQUFHK08sS0FBSyxDQUFDL08sU0FBbEIsQ0EvQ0YsQ0ErQytCOztBQUNsRCxVQUFJZ3JCLEtBQUosRUFBV2QsRUFBRSxHQUFHbHFCLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBQUwsRUFBc0J3cUIsRUFBRSxHQUFHeHFCLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLENBQTNCO0FBQ1gsVUFBSWlyQixLQUFKLEVBQVdaLEVBQUUsR0FBR3JxQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUFMLEVBQXNCMHFCLEVBQUUsR0FBRzFxQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixDQUEzQjs7QUFFWCxVQUFJQSxTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixNQUFvQmtxQixFQUFwQixJQUNHbHFCLFNBQVMsQ0FBQyxDQUFELENBQVQsQ0FBYSxDQUFiLE1BQW9CcXFCLEVBRHZCLElBRUdycUIsU0FBUyxDQUFDLENBQUQsQ0FBVCxDQUFhLENBQWIsTUFBb0J3cUIsRUFGdkIsSUFHR3hxQixTQUFTLENBQUMsQ0FBRCxDQUFULENBQWEsQ0FBYixNQUFvQjBxQixFQUgzQixFQUcrQjtBQUM3QjNiLFFBQUFBLEtBQUssQ0FBQy9PLFNBQU4sR0FBa0IsQ0FBQyxDQUFDa3FCLEVBQUQsRUFBS0csRUFBTCxDQUFELEVBQVcsQ0FBQ0csRUFBRCxFQUFLRSxFQUFMLENBQVgsQ0FBbEI7QUFDQS9CLFFBQUFBLE1BQU0sQ0FBQy8wQixJQUFQLENBQVlxQyxJQUFaO0FBQ0FpekIsUUFBQUEsSUFBSSxDQUFDaEIsS0FBTCxDQUFXamhCLEtBQVgsRUFBa0J3aUIsSUFBSSxDQUFDNTBCLElBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxhQUFTMDJCLEtBQVQsQ0FBZXRrQixLQUFmLEVBQXNCO0FBQ3BCdWUsTUFBQUEsYUFBYSxDQUFDdmUsS0FBRCxDQUFiOztBQUNBLFVBQUlBLEtBQUssQ0FBQzBpQixPQUFWLEVBQW1CO0FBQ2pCLFlBQUkxaUIsS0FBSyxDQUFDMGlCLE9BQU4sQ0FBYzUxQixNQUFsQixFQUEwQjtBQUMxQixZQUFJeTBCLFdBQUosRUFBaUI1YSxZQUFZLENBQUM0YSxXQUFELENBQVo7QUFDakJBLFFBQUFBLFdBQVcsR0FBR2hjLFVBQVUsQ0FBQyxZQUFXO0FBQUVnYyxVQUFBQSxXQUFXLEdBQUcsSUFBZDtBQUFxQixTQUFuQyxFQUFxQyxHQUFyQyxDQUF4QixDQUhpQixDQUdrRDtBQUNwRSxPQUpELE1BSU87QUFDTHBELFFBQUFBLFVBQVUsQ0FBQ25lLEtBQUssQ0FBQ3VrQixJQUFQLEVBQWFYLE1BQWIsQ0FBVjtBQUNBVyxRQUFBQSxJQUFJLENBQUNoa0IsRUFBTCxDQUFRLHlEQUFSLEVBQW1FLElBQW5FO0FBQ0Q7O0FBQ0Q3SyxNQUFBQSxLQUFLLENBQUNtTyxJQUFOLENBQVcsZ0JBQVgsRUFBNkIsS0FBN0I7QUFDQTBiLE1BQUFBLE9BQU8sQ0FBQzFiLElBQVIsQ0FBYSxRQUFiLEVBQXVCeWIsT0FBTyxDQUFDQyxPQUEvQjtBQUNBLFVBQUl6WCxLQUFLLENBQUMvTyxTQUFWLEVBQXFCQSxTQUFTLEdBQUcrTyxLQUFLLENBQUMvTyxTQUFsQixDQVpELENBWThCOztBQUNsRCxVQUFJL0MsV0FBSyxDQUFDK0MsU0FBRCxDQUFULEVBQXNCK08sS0FBSyxDQUFDL08sU0FBTixHQUFrQixJQUFsQixFQUF3QjJvQixNQUFNLENBQUMvMEIsSUFBUCxDQUFZcUMsSUFBWixDQUF4QjtBQUN0Qml6QixNQUFBQSxJQUFJLENBQUN6eUIsR0FBTCxDQUFTd1EsS0FBVCxFQUFnQndpQixJQUFJLENBQUM1MEIsSUFBckI7QUFDRDs7QUFFRCxhQUFTNDJCLFNBQVQsQ0FBbUJ4a0IsS0FBbkIsRUFBMEI7QUFDeEIsY0FBUUEsS0FBSyxDQUFDOGtCLE9BQWQ7QUFDRSxhQUFLLEVBQUw7QUFBUztBQUFFO0FBQ1RqQixZQUFBQSxRQUFRLEdBQUdoQixLQUFLLElBQUlDLEtBQXBCO0FBQ0E7QUFDRDs7QUFDRCxhQUFLLEVBQUw7QUFBUztBQUFFO0FBQ1QsZ0JBQUlOLElBQUksS0FBSzlELFdBQWIsRUFBMEI7QUFDeEIsa0JBQUltRSxLQUFKLEVBQVdTLEVBQUUsR0FBR0MsRUFBRSxHQUFHRyxFQUFFLEdBQUdiLEtBQWYsRUFBc0JHLEVBQUUsR0FBR0MsRUFBRSxHQUFHUyxFQUFFLEdBQUdiLEtBQXJDO0FBQ1gsa0JBQUlDLEtBQUosRUFBV1UsRUFBRSxHQUFHQyxFQUFFLEdBQUdFLEVBQUUsR0FBR2IsS0FBZixFQUFzQkssRUFBRSxHQUFHQyxFQUFFLEdBQUdPLEVBQUUsR0FBR2IsS0FBckM7QUFDWE4sY0FBQUEsSUFBSSxHQUFHN0QsV0FBUDtBQUNBbUQsY0FBQUEsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNULGdCQUFJd2lCLElBQUksS0FBSzlELFdBQVQsSUFBd0I4RCxJQUFJLEtBQUs3RCxXQUFyQyxFQUFrRDtBQUNoRCxrQkFBSWtFLEtBQUssR0FBRyxDQUFaLEVBQWVTLEVBQUUsR0FBR0MsRUFBRSxHQUFHRyxFQUFWLENBQWYsS0FBa0MsSUFBSWIsS0FBSyxHQUFHLENBQVosRUFBZUcsRUFBRSxHQUFHQyxFQUFFLEdBQUdTLEVBQVY7QUFDakQsa0JBQUlaLEtBQUssR0FBRyxDQUFaLEVBQWVVLEVBQUUsR0FBR0MsRUFBRSxHQUFHRSxFQUFWLENBQWYsS0FBa0MsSUFBSWIsS0FBSyxHQUFHLENBQVosRUFBZUssRUFBRSxHQUFHQyxFQUFFLEdBQUdPLEVBQVY7QUFDakRuQixjQUFBQSxJQUFJLEdBQUcvRCxVQUFQO0FBQ0FjLGNBQUFBLE9BQU8sQ0FBQzFiLElBQVIsQ0FBYSxRQUFiLEVBQXVCeWIsT0FBTyxDQUFDdm1CLFNBQS9CO0FBQ0Erb0IsY0FBQUEsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0Q7QUFBUztBQXhCWDs7QUEwQkFzZSxNQUFBQSxPQUFPLENBQUN0ZSxLQUFELENBQVA7QUFDRDs7QUFFRCxhQUFTeWtCLFFBQVQsQ0FBa0J6a0IsS0FBbEIsRUFBeUI7QUFDdkIsY0FBUUEsS0FBSyxDQUFDOGtCLE9BQWQ7QUFDRSxhQUFLLEVBQUw7QUFBUztBQUFFO0FBQ1QsZ0JBQUlqQixRQUFKLEVBQWM7QUFDWkUsY0FBQUEsS0FBSyxHQUFHQyxLQUFLLEdBQUdILFFBQVEsR0FBRyxLQUEzQjtBQUNBL0IsY0FBQUEsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNULGdCQUFJd2lCLElBQUksS0FBSzdELFdBQWIsRUFBMEI7QUFDeEIsa0JBQUlrRSxLQUFLLEdBQUcsQ0FBWixFQUFlUyxFQUFFLEdBQUdDLEVBQUwsQ0FBZixLQUE2QixJQUFJVixLQUFLLEdBQUcsQ0FBWixFQUFlRyxFQUFFLEdBQUdDLEVBQUw7QUFDNUMsa0JBQUlILEtBQUssR0FBRyxDQUFaLEVBQWVVLEVBQUUsR0FBR0MsRUFBTCxDQUFmLEtBQTZCLElBQUlYLEtBQUssR0FBRyxDQUFaLEVBQWVLLEVBQUUsR0FBR0MsRUFBTDtBQUM1Q1osY0FBQUEsSUFBSSxHQUFHOUQsV0FBUDtBQUNBb0QsY0FBQUEsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsYUFBSyxFQUFMO0FBQVM7QUFBRTtBQUNULGdCQUFJd2lCLElBQUksS0FBSy9ELFVBQWIsRUFBeUI7QUFDdkIsa0JBQUl6ZSxLQUFLLENBQUM0aUIsTUFBVixFQUFrQjtBQUNoQixvQkFBSUMsS0FBSixFQUFXUyxFQUFFLEdBQUdDLEVBQUUsR0FBR0csRUFBRSxHQUFHYixLQUFmLEVBQXNCRyxFQUFFLEdBQUdDLEVBQUUsR0FBR1MsRUFBRSxHQUFHYixLQUFyQztBQUNYLG9CQUFJQyxLQUFKLEVBQVdVLEVBQUUsR0FBR0MsRUFBRSxHQUFHRSxFQUFFLEdBQUdiLEtBQWYsRUFBc0JLLEVBQUUsR0FBR0MsRUFBRSxHQUFHTyxFQUFFLEdBQUdiLEtBQXJDO0FBQ1hOLGdCQUFBQSxJQUFJLEdBQUc3RCxXQUFQO0FBQ0QsZUFKRCxNQUlPO0FBQ0wsb0JBQUlrRSxLQUFLLEdBQUcsQ0FBWixFQUFlUyxFQUFFLEdBQUdDLEVBQUwsQ0FBZixLQUE2QixJQUFJVixLQUFLLEdBQUcsQ0FBWixFQUFlRyxFQUFFLEdBQUdDLEVBQUw7QUFDNUMsb0JBQUlILEtBQUssR0FBRyxDQUFaLEVBQWVVLEVBQUUsR0FBR0MsRUFBTCxDQUFmLEtBQTZCLElBQUlYLEtBQUssR0FBRyxDQUFaLEVBQWVLLEVBQUUsR0FBR0MsRUFBTDtBQUM1Q1osZ0JBQUFBLElBQUksR0FBRzlELFdBQVA7QUFDRDs7QUFDRGEsY0FBQUEsT0FBTyxDQUFDMWIsSUFBUixDQUFhLFFBQWIsRUFBdUJ5YixPQUFPLENBQUNsZixJQUFELENBQTlCO0FBQ0EwaEIsY0FBQUEsSUFBSSxDQUFDOWhCLEtBQUQsQ0FBSjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0Q7QUFBUztBQWpDWDs7QUFtQ0FzZSxNQUFBQSxPQUFPLENBQUN0ZSxLQUFELENBQVA7QUFDRDtBQUNGOztBQUVELFdBQVM0aEIsVUFBVCxDQUFvQjVoQixLQUFwQixFQUEyQjtBQUN6QitoQixJQUFBQSxPQUFPLENBQUMsSUFBRCxFQUFPdDJCLFNBQVAsQ0FBUCxDQUF5QjQ0QixLQUF6QixDQUErQnJrQixLQUEvQjtBQUNEOztBQUVELFdBQVM2aEIsVUFBVCxDQUFvQjdoQixLQUFwQixFQUEyQjtBQUN6QitoQixJQUFBQSxPQUFPLENBQUMsSUFBRCxFQUFPdDJCLFNBQVAsQ0FBUCxDQUF5QjY0QixLQUF6QixDQUErQnRrQixLQUEvQjtBQUNEOztBQUVELFdBQVN3aEIsVUFBVCxHQUFzQjtBQUNwQixRQUFJMVosS0FBSyxHQUFHLEtBQUs4WSxPQUFMLElBQWdCO0FBQUM3bkIsTUFBQUEsU0FBUyxFQUFFO0FBQVosS0FBNUI7QUFDQStPLElBQUFBLEtBQUssQ0FBQytZLE1BQU4sR0FBZS9CLE9BQU8sQ0FBQytCLE1BQU0sQ0FBQ24xQixLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBRCxDQUF0QjtBQUNBcWMsSUFBQUEsS0FBSyxDQUFDaVosR0FBTixHQUFZQSxHQUFaO0FBQ0EsV0FBT2paLEtBQVA7QUFDRDs7QUFFRG1aLEVBQUFBLEtBQUssQ0FBQ0osTUFBTixHQUFlLFVBQVM1c0IsQ0FBVCxFQUFZO0FBQ3pCLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CK3pCLE1BQU0sR0FBRyxPQUFPNXNCLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUExQixHQUE4QndELFFBQVEsQ0FBQ3FuQixPQUFPLENBQUM3cUIsQ0FBRCxDQUFSLENBQS9DLEVBQTZEZ3RCLEtBQWpGLElBQTBGSixNQUFqRztBQUNELEdBRkQ7O0FBSUFJLEVBQUFBLEtBQUssQ0FBQ3RxQixNQUFOLEdBQWUsVUFBUzFDLENBQVQsRUFBWTtBQUN6QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQjZKLE1BQU0sR0FBRyxPQUFPMUMsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCd0QsUUFBUSxDQUFDLENBQUMsQ0FBQ3hELENBQUgsQ0FBL0MsRUFBc0RndEIsS0FBMUUsSUFBbUZ0cUIsTUFBMUY7QUFDRCxHQUZEOztBQUlBc3FCLEVBQUFBLEtBQUssQ0FBQ0UsU0FBTixHQUFrQixVQUFTbHRCLENBQVQsRUFBWTtBQUM1QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQnEwQixTQUFTLEdBQUcsT0FBT2x0QixDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJ3RCxRQUFRLENBQUMsQ0FBQyxDQUFDeEQsQ0FBSCxDQUFsRCxFQUF5RGd0QixLQUE3RSxJQUFzRkUsU0FBN0Y7QUFDRCxHQUZEOztBQUlBRixFQUFBQSxLQUFLLENBQUNLLFVBQU4sR0FBbUIsVUFBU3J0QixDQUFULEVBQVk7QUFDN0IsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0J3MEIsVUFBVSxHQUFHLENBQUNydEIsQ0FBZCxFQUFpQmd0QixLQUFyQyxJQUE4Q0ssVUFBckQ7QUFDRCxHQUZEOztBQUlBTCxFQUFBQSxLQUFLLENBQUM4RCxZQUFOLEdBQXFCLFVBQVM5d0IsQ0FBVCxFQUFZO0FBQy9CLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CczBCLElBQUksR0FBRyxDQUFDLENBQUNudEIsQ0FBVCxFQUFZZ3RCLEtBQWhDLElBQXlDRyxJQUFoRDtBQUNELEdBRkQ7O0FBSUFILEVBQUFBLEtBQUssQ0FBQzFnQixFQUFOLEdBQVcsWUFBVztBQUNwQixRQUFJdlYsS0FBSyxHQUFHcTJCLFNBQVMsQ0FBQzlnQixFQUFWLENBQWE3VSxLQUFiLENBQW1CMjFCLFNBQW5CLEVBQThCNTFCLFNBQTlCLENBQVo7QUFDQSxXQUFPVCxLQUFLLEtBQUtxMkIsU0FBVixHQUFzQkosS0FBdEIsR0FBOEJqMkIsS0FBckM7QUFDRCxHQUhEOztBQUtBLFNBQU9pMkIsS0FBUDtBQUNELEM7Ozs7QUU1bUJELFNBQVMrRCxZQUFULENBQXNCQyxRQUF0QixFQUFnQztBQUM5QixNQUFJLENBQUNBLFFBQVEsQ0FBQ0MsRUFBZCxFQUFrQixNQUFNLElBQUl6MkIsS0FBSixDQUFVdzJCLFFBQVEsQ0FBQ0UsTUFBVCxHQUFrQixHQUFsQixHQUF3QkYsUUFBUSxDQUFDRyxVQUEzQyxDQUFOO0FBQ2xCLE1BQUlILFFBQVEsQ0FBQ0UsTUFBVCxLQUFvQixHQUFwQixJQUEyQkYsUUFBUSxDQUFDRSxNQUFULEtBQW9CLEdBQW5ELEVBQXdEO0FBQ3hELFNBQU9GLFFBQVEsQ0FBQ0ksSUFBVCxFQUFQO0FBQ0Q7O0FBRUQsNkJBQWUsY0FBU3BHLEtBQVQsRUFBZ0JsWCxJQUFoQixFQUFzQjtBQUNuQyxTQUFPdWQsS0FBSyxDQUFDckcsS0FBRCxFQUFRbFgsSUFBUixDQUFMLENBQW1CM2MsSUFBbkIsQ0FBd0I0NUIsWUFBeEIsQ0FBUDtBQUNELEM7O0FDUkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNMQTs7QUFFQSxTQUFTYSxpQkFBVCxDQUEyQjkxQixDQUEzQixFQUE4QkMsQ0FBOUIsRUFBaUM7QUFDL0IsU0FBT0QsQ0FBQyxDQUFDSCxNQUFGLEtBQWFJLENBQUMsQ0FBQ0osTUFBZixHQUF3QixDQUF4QixHQUE0QixDQUFuQztBQUNELEVBRUQ7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNrMkIsUUFBVCxDQUFrQmxxQixDQUFsQixFQUFxQjtBQUNuQixNQUFJL00sUUFBUSxHQUFHK00sQ0FBQyxDQUFDL00sUUFBakI7QUFDQSxTQUFPQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQyxDQUFELENBQVgsR0FBaUIrTSxDQUFDLENBQUN1RSxDQUFsQztBQUNELEVBRUQ7OztBQUNBLFNBQVM0bEIsU0FBVCxDQUFtQm5xQixDQUFuQixFQUFzQjtBQUNwQixNQUFJL00sUUFBUSxHQUFHK00sQ0FBQyxDQUFDL00sUUFBakI7QUFDQSxTQUFPQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDL0IsTUFBVCxHQUFrQixDQUFuQixDQUFYLEdBQW1DOE8sQ0FBQyxDQUFDdUUsQ0FBcEQ7QUFDRCxFQUVEO0FBQ0E7OztBQUNBLFNBQVM2bEIsV0FBVCxDQUFxQkMsRUFBckIsRUFBeUJDLEVBQXpCLEVBQTZCQyxLQUE3QixFQUFvQztBQUNsQyxNQUFJQyxNQUFNLEdBQUdELEtBQUssSUFBSUQsRUFBRSxDQUFDaDZCLENBQUgsR0FBTys1QixFQUFFLENBQUMvNUIsQ0FBZCxDQUFsQjtBQUNBZzZCLEVBQUFBLEVBQUUsQ0FBQzkxQixDQUFILElBQVFnMkIsTUFBUjtBQUNBRixFQUFBQSxFQUFFLENBQUNqYyxDQUFILElBQVFrYyxLQUFSO0FBQ0FGLEVBQUFBLEVBQUUsQ0FBQzcxQixDQUFILElBQVFnMkIsTUFBUjtBQUNBRixFQUFBQSxFQUFFLENBQUNHLENBQUgsSUFBUUYsS0FBUjtBQUNBRCxFQUFBQSxFQUFFLENBQUMzd0IsQ0FBSCxJQUFRNHdCLEtBQVI7QUFDRCxFQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU0csYUFBVCxDQUF1QjFxQixDQUF2QixFQUEwQjtBQUN4QixNQUFJdXFCLEtBQUssR0FBRyxDQUFaO0FBQUEsTUFDSUMsTUFBTSxHQUFHLENBRGI7QUFBQSxNQUVJdjNCLFFBQVEsR0FBRytNLENBQUMsQ0FBQy9NLFFBRmpCO0FBQUEsTUFHSTNDLENBQUMsR0FBRzJDLFFBQVEsQ0FBQy9CLE1BSGpCO0FBQUEsTUFJSTB5QixDQUpKOztBQUtBLFNBQU8sRUFBRXR6QixDQUFGLElBQU8sQ0FBZCxFQUFpQjtBQUNmc3pCLElBQUFBLENBQUMsR0FBRzN3QixRQUFRLENBQUMzQyxDQUFELENBQVo7QUFDQXN6QixJQUFBQSxDQUFDLENBQUM2RyxDQUFGLElBQU9GLEtBQVA7QUFDQTNHLElBQUFBLENBQUMsQ0FBQ2pxQixDQUFGLElBQU80d0IsS0FBUDtBQUNBQSxJQUFBQSxLQUFLLElBQUkzRyxDQUFDLENBQUN2VixDQUFGLElBQU9tYyxNQUFNLElBQUk1RyxDQUFDLENBQUNwdkIsQ0FBbkIsQ0FBVDtBQUNEO0FBQ0YsRUFFRDtBQUNBOzs7QUFDQSxTQUFTbTJCLFlBQVQsQ0FBc0JDLEdBQXRCLEVBQTJCNXFCLENBQTNCLEVBQThCbE0sUUFBOUIsRUFBd0M7QUFDdEMsU0FBTzgyQixHQUFHLENBQUN6MkIsQ0FBSixDQUFNSCxNQUFOLEtBQWlCZ00sQ0FBQyxDQUFDaE0sTUFBbkIsR0FBNEI0MkIsR0FBRyxDQUFDejJCLENBQWhDLEdBQW9DTCxRQUEzQztBQUNEOztBQUVELFNBQVMrMkIsUUFBVCxDQUFrQjkzQixJQUFsQixFQUF3QnpDLENBQXhCLEVBQTJCO0FBQ3pCLE9BQUsrSCxDQUFMLEdBQVN0RixJQUFUO0FBQ0EsT0FBS2lCLE1BQUwsR0FBYyxJQUFkO0FBQ0EsT0FBS2YsUUFBTCxHQUFnQixJQUFoQjtBQUNBLE9BQUs2M0IsQ0FBTCxHQUFTLElBQVQsQ0FKeUIsQ0FJVjs7QUFDZixPQUFLMzJCLENBQUwsR0FBUyxJQUFULENBTHlCLENBS1Y7O0FBQ2YsT0FBS3MyQixDQUFMLEdBQVMsQ0FBVCxDQU55QixDQU1iOztBQUNaLE9BQUs5d0IsQ0FBTCxHQUFTLENBQVQsQ0FQeUIsQ0FPYjs7QUFDWixPQUFLbkYsQ0FBTCxHQUFTLENBQVQsQ0FSeUIsQ0FRYjs7QUFDWixPQUFLNlosQ0FBTCxHQUFTLENBQVQsQ0FUeUIsQ0FTYjs7QUFDWixPQUFLOUosQ0FBTCxHQUFTLElBQVQsQ0FWeUIsQ0FVVjs7QUFDZixPQUFLalUsQ0FBTCxHQUFTQSxDQUFULENBWHlCLENBV2I7QUFDYjs7QUFFRHU2QixRQUFRLENBQUNqNUIsU0FBVCxHQUFxQkQsTUFBTSxDQUFDNlIsTUFBUCxDQUFjdE4sY0FBZCxDQUFyQjs7QUFFQSxTQUFTNjBCLFFBQVQsQ0FBa0JyMkIsSUFBbEIsRUFBd0I7QUFDdEIsTUFBSXMyQixJQUFJLEdBQUcsSUFBSUgsUUFBSixDQUFhbjJCLElBQWIsRUFBbUIsQ0FBbkIsQ0FBWDtBQUFBLE1BQ0kzQixJQURKO0FBQUEsTUFFSU8sS0FBSyxHQUFHLENBQUMwM0IsSUFBRCxDQUZaO0FBQUEsTUFHSTcwQixLQUhKO0FBQUEsTUFJSWxELFFBSko7QUFBQSxNQUtJM0MsQ0FMSjtBQUFBLE1BTUlvQixDQU5KOztBQVFBLFNBQU9xQixJQUFJLEdBQUdPLEtBQUssQ0FBQ0MsR0FBTixFQUFkLEVBQTJCO0FBQ3pCLFFBQUlOLFFBQVEsR0FBR0YsSUFBSSxDQUFDc0YsQ0FBTCxDQUFPcEYsUUFBdEIsRUFBZ0M7QUFDOUJGLE1BQUFBLElBQUksQ0FBQ0UsUUFBTCxHQUFnQixJQUFJOUMsS0FBSixDQUFVdUIsQ0FBQyxHQUFHdUIsUUFBUSxDQUFDL0IsTUFBdkIsQ0FBaEI7O0FBQ0EsV0FBS1osQ0FBQyxHQUFHb0IsQ0FBQyxHQUFHLENBQWIsRUFBZ0JwQixDQUFDLElBQUksQ0FBckIsRUFBd0IsRUFBRUEsQ0FBMUIsRUFBNkI7QUFDM0JnRCxRQUFBQSxLQUFLLENBQUNyQyxJQUFOLENBQVdrRixLQUFLLEdBQUdwRCxJQUFJLENBQUNFLFFBQUwsQ0FBYzNDLENBQWQsSUFBbUIsSUFBSXU2QixRQUFKLENBQWE1M0IsUUFBUSxDQUFDM0MsQ0FBRCxDQUFyQixFQUEwQkEsQ0FBMUIsQ0FBdEM7QUFDQTZGLFFBQUFBLEtBQUssQ0FBQ25DLE1BQU4sR0FBZWpCLElBQWY7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsR0FBQ2k0QixJQUFJLENBQUNoM0IsTUFBTCxHQUFjLElBQUk2MkIsUUFBSixDQUFhLElBQWIsRUFBbUIsQ0FBbkIsQ0FBZixFQUFzQzUzQixRQUF0QyxHQUFpRCxDQUFDKzNCLElBQUQsQ0FBakQ7QUFDQSxTQUFPQSxJQUFQO0FBQ0QsRUFFRDs7O0FBQ0EsNkJBQWUsZ0JBQVc7QUFDeEIsTUFBSUMsVUFBVSxHQUFHaEIsaUJBQWpCO0FBQUEsTUFDSW5DLEVBQUUsR0FBRyxDQURUO0FBQUEsTUFFSUMsRUFBRSxHQUFHLENBRlQ7QUFBQSxNQUdJbUQsUUFBUSxHQUFHLElBSGY7O0FBS0EsV0FBU0YsSUFBVCxDQUFjdDJCLElBQWQsRUFBb0I7QUFDbEIsUUFBSTZQLENBQUMsR0FBR3dtQixRQUFRLENBQUNyMkIsSUFBRCxDQUFoQixDQURrQixDQUdsQjs7QUFDQTZQLElBQUFBLENBQUMsQ0FBQ3JSLFNBQUYsQ0FBWWk0QixTQUFaLEdBQXdCNW1CLENBQUMsQ0FBQ3ZRLE1BQUYsQ0FBUzJGLENBQVQsR0FBYSxDQUFDNEssQ0FBQyxDQUFDa21CLENBQXhDO0FBQ0FsbUIsSUFBQUEsQ0FBQyxDQUFDN1EsVUFBRixDQUFhMDNCLFVBQWIsRUFMa0IsQ0FPbEI7O0FBQ0EsUUFBSUYsUUFBSixFQUFjeDJCLElBQUksQ0FBQ2hCLFVBQUwsQ0FBZ0IyM0IsUUFBaEIsRUFBZCxDQUVBO0FBQ0E7QUFIQSxTQUlLO0FBQ0gsVUFBSUMsSUFBSSxHQUFHNTJCLElBQVg7QUFBQSxVQUNJNjJCLEtBQUssR0FBRzcyQixJQURaO0FBQUEsVUFFSTgyQixNQUFNLEdBQUc5MkIsSUFGYjtBQUdBQSxNQUFBQSxJQUFJLENBQUNoQixVQUFMLENBQWdCLFVBQVNYLElBQVQsRUFBZTtBQUM3QixZQUFJQSxJQUFJLENBQUN5RixDQUFMLEdBQVM4eUIsSUFBSSxDQUFDOXlCLENBQWxCLEVBQXFCOHlCLElBQUksR0FBR3Y0QixJQUFQO0FBQ3JCLFlBQUlBLElBQUksQ0FBQ3lGLENBQUwsR0FBUyt5QixLQUFLLENBQUMveUIsQ0FBbkIsRUFBc0IreUIsS0FBSyxHQUFHeDRCLElBQVI7QUFDdEIsWUFBSUEsSUFBSSxDQUFDc0QsS0FBTCxHQUFhbTFCLE1BQU0sQ0FBQ24xQixLQUF4QixFQUErQm0xQixNQUFNLEdBQUd6NEIsSUFBVDtBQUNoQyxPQUpEO0FBS0EsVUFBSXNiLENBQUMsR0FBR2lkLElBQUksS0FBS0MsS0FBVCxHQUFpQixDQUFqQixHQUFxQk4sVUFBVSxDQUFDSyxJQUFELEVBQU9DLEtBQVAsQ0FBVixHQUEwQixDQUF2RDtBQUFBLFVBQ0lFLEVBQUUsR0FBR3BkLENBQUMsR0FBR2lkLElBQUksQ0FBQzl5QixDQURsQjtBQUFBLFVBRUlrekIsRUFBRSxHQUFHNUQsRUFBRSxJQUFJeUQsS0FBSyxDQUFDL3lCLENBQU4sR0FBVTZWLENBQVYsR0FBY29kLEVBQWxCLENBRlg7QUFBQSxVQUdJRSxFQUFFLEdBQUc1RCxFQUFFLElBQUl5RCxNQUFNLENBQUNuMUIsS0FBUCxJQUFnQixDQUFwQixDQUhYO0FBSUEzQixNQUFBQSxJQUFJLENBQUNoQixVQUFMLENBQWdCLFVBQVNYLElBQVQsRUFBZTtBQUM3QkEsUUFBQUEsSUFBSSxDQUFDeUYsQ0FBTCxHQUFTLENBQUN6RixJQUFJLENBQUN5RixDQUFMLEdBQVNpekIsRUFBVixJQUFnQkMsRUFBekI7QUFDQTM0QixRQUFBQSxJQUFJLENBQUM0cEIsQ0FBTCxHQUFTNXBCLElBQUksQ0FBQ3NELEtBQUwsR0FBYXMxQixFQUF0QjtBQUNELE9BSEQ7QUFJRDtBQUVELFdBQU9qM0IsSUFBUDtBQUNELEdBdEN1QixDQXdDeEI7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFdBQVN5MkIsU0FBVCxDQUFtQm5yQixDQUFuQixFQUFzQjtBQUNwQixRQUFJL00sUUFBUSxHQUFHK00sQ0FBQyxDQUFDL00sUUFBakI7QUFBQSxRQUNJMjRCLFFBQVEsR0FBRzVyQixDQUFDLENBQUNoTSxNQUFGLENBQVNmLFFBRHhCO0FBQUEsUUFFSTJ3QixDQUFDLEdBQUc1akIsQ0FBQyxDQUFDMVAsQ0FBRixHQUFNczdCLFFBQVEsQ0FBQzVyQixDQUFDLENBQUMxUCxDQUFGLEdBQU0sQ0FBUCxDQUFkLEdBQTBCLElBRmxDOztBQUdBLFFBQUkyQyxRQUFKLEVBQWM7QUFDWnkzQixNQUFBQSxhQUFhLENBQUMxcUIsQ0FBRCxDQUFiO0FBQ0EsVUFBSTZyQixRQUFRLEdBQUcsQ0FBQzU0QixRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVl3M0IsQ0FBWixHQUFnQngzQixRQUFRLENBQUNBLFFBQVEsQ0FBQy9CLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixDQUE4QnU1QixDQUEvQyxJQUFvRCxDQUFuRTs7QUFDQSxVQUFJN0csQ0FBSixFQUFPO0FBQ0w1akIsUUFBQUEsQ0FBQyxDQUFDeXFCLENBQUYsR0FBTTdHLENBQUMsQ0FBQzZHLENBQUYsR0FBTVEsVUFBVSxDQUFDanJCLENBQUMsQ0FBQzNILENBQUgsRUFBTXVyQixDQUFDLENBQUN2ckIsQ0FBUixDQUF0QjtBQUNBMkgsUUFBQUEsQ0FBQyxDQUFDckcsQ0FBRixHQUFNcUcsQ0FBQyxDQUFDeXFCLENBQUYsR0FBTW9CLFFBQVo7QUFDRCxPQUhELE1BR087QUFDTDdyQixRQUFBQSxDQUFDLENBQUN5cUIsQ0FBRixHQUFNb0IsUUFBTjtBQUNEO0FBQ0YsS0FURCxNQVNPLElBQUlqSSxDQUFKLEVBQU87QUFDWjVqQixNQUFBQSxDQUFDLENBQUN5cUIsQ0FBRixHQUFNN0csQ0FBQyxDQUFDNkcsQ0FBRixHQUFNUSxVQUFVLENBQUNqckIsQ0FBQyxDQUFDM0gsQ0FBSCxFQUFNdXJCLENBQUMsQ0FBQ3ZyQixDQUFSLENBQXRCO0FBQ0Q7O0FBQ0QySCxJQUFBQSxDQUFDLENBQUNoTSxNQUFGLENBQVM4MkIsQ0FBVCxHQUFhZ0IsU0FBUyxDQUFDOXJCLENBQUQsRUFBSTRqQixDQUFKLEVBQU81akIsQ0FBQyxDQUFDaE0sTUFBRixDQUFTODJCLENBQVQsSUFBY2MsUUFBUSxDQUFDLENBQUQsQ0FBN0IsQ0FBdEI7QUFDRCxHQTdEdUIsQ0ErRHhCOzs7QUFDQSxXQUFTUixVQUFULENBQW9CcHJCLENBQXBCLEVBQXVCO0FBQ3JCQSxJQUFBQSxDQUFDLENBQUMzSCxDQUFGLENBQUlHLENBQUosR0FBUXdILENBQUMsQ0FBQ3lxQixDQUFGLEdBQU16cUIsQ0FBQyxDQUFDaE0sTUFBRixDQUFTMkYsQ0FBdkI7QUFDQXFHLElBQUFBLENBQUMsQ0FBQ3JHLENBQUYsSUFBT3FHLENBQUMsQ0FBQ2hNLE1BQUYsQ0FBUzJGLENBQWhCO0FBQ0QsR0FuRXVCLENBcUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTbXlCLFNBQVQsQ0FBbUI5ckIsQ0FBbkIsRUFBc0I0akIsQ0FBdEIsRUFBeUI5dkIsUUFBekIsRUFBbUM7QUFDakMsUUFBSTh2QixDQUFKLEVBQU87QUFDTCxVQUFJbUksR0FBRyxHQUFHL3JCLENBQVY7QUFBQSxVQUNJZ3NCLEdBQUcsR0FBR2hzQixDQURWO0FBQUEsVUFFSTRxQixHQUFHLEdBQUdoSCxDQUZWO0FBQUEsVUFHSXFJLEdBQUcsR0FBR0YsR0FBRyxDQUFDLzNCLE1BQUosQ0FBV2YsUUFBWCxDQUFvQixDQUFwQixDQUhWO0FBQUEsVUFJSWk1QixHQUFHLEdBQUdILEdBQUcsQ0FBQ3B5QixDQUpkO0FBQUEsVUFLSXd5QixHQUFHLEdBQUdILEdBQUcsQ0FBQ3J5QixDQUxkO0FBQUEsVUFNSXl5QixHQUFHLEdBQUd4QixHQUFHLENBQUNqeEIsQ0FOZDtBQUFBLFVBT0kweUIsR0FBRyxHQUFHSixHQUFHLENBQUN0eUIsQ0FQZDtBQUFBLFVBUUk0d0IsS0FSSjs7QUFTQSxhQUFPSyxHQUFHLEdBQUdULFNBQVMsQ0FBQ1MsR0FBRCxDQUFmLEVBQXNCbUIsR0FBRyxHQUFHN0IsUUFBUSxDQUFDNkIsR0FBRCxDQUFwQyxFQUEyQ25CLEdBQUcsSUFBSW1CLEdBQXpELEVBQThEO0FBQzVERSxRQUFBQSxHQUFHLEdBQUcvQixRQUFRLENBQUMrQixHQUFELENBQWQ7QUFDQUQsUUFBQUEsR0FBRyxHQUFHN0IsU0FBUyxDQUFDNkIsR0FBRCxDQUFmO0FBQ0FBLFFBQUFBLEdBQUcsQ0FBQzczQixDQUFKLEdBQVE2TCxDQUFSO0FBQ0F1cUIsUUFBQUEsS0FBSyxHQUFHSyxHQUFHLENBQUNILENBQUosR0FBUTJCLEdBQVIsR0FBY0wsR0FBRyxDQUFDdEIsQ0FBbEIsR0FBc0J5QixHQUF0QixHQUE0QmpCLFVBQVUsQ0FBQ0wsR0FBRyxDQUFDdnlCLENBQUwsRUFBUTB6QixHQUFHLENBQUMxekIsQ0FBWixDQUE5Qzs7QUFDQSxZQUFJa3lCLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDYkgsVUFBQUEsV0FBVyxDQUFDTyxZQUFZLENBQUNDLEdBQUQsRUFBTTVxQixDQUFOLEVBQVNsTSxRQUFULENBQWIsRUFBaUNrTSxDQUFqQyxFQUFvQ3VxQixLQUFwQyxDQUFYO0FBQ0EyQixVQUFBQSxHQUFHLElBQUkzQixLQUFQO0FBQ0E0QixVQUFBQSxHQUFHLElBQUk1QixLQUFQO0FBQ0Q7O0FBQ0Q2QixRQUFBQSxHQUFHLElBQUl4QixHQUFHLENBQUNqeEIsQ0FBWDtBQUNBdXlCLFFBQUFBLEdBQUcsSUFBSUgsR0FBRyxDQUFDcHlCLENBQVg7QUFDQTB5QixRQUFBQSxHQUFHLElBQUlKLEdBQUcsQ0FBQ3R5QixDQUFYO0FBQ0F3eUIsUUFBQUEsR0FBRyxJQUFJSCxHQUFHLENBQUNyeUIsQ0FBWDtBQUNEOztBQUNELFVBQUlpeEIsR0FBRyxJQUFJLENBQUNULFNBQVMsQ0FBQzZCLEdBQUQsQ0FBckIsRUFBNEI7QUFDMUJBLFFBQUFBLEdBQUcsQ0FBQ3puQixDQUFKLEdBQVFxbUIsR0FBUjtBQUNBb0IsUUFBQUEsR0FBRyxDQUFDcnlCLENBQUosSUFBU3l5QixHQUFHLEdBQUdELEdBQWY7QUFDRDs7QUFDRCxVQUFJSixHQUFHLElBQUksQ0FBQzdCLFFBQVEsQ0FBQytCLEdBQUQsQ0FBcEIsRUFBMkI7QUFDekJBLFFBQUFBLEdBQUcsQ0FBQzFuQixDQUFKLEdBQVF3bkIsR0FBUjtBQUNBRSxRQUFBQSxHQUFHLENBQUN0eUIsQ0FBSixJQUFTdXlCLEdBQUcsR0FBR0csR0FBZjtBQUNBdjRCLFFBQUFBLFFBQVEsR0FBR2tNLENBQVg7QUFDRDtBQUNGOztBQUNELFdBQU9sTSxRQUFQO0FBQ0Q7O0FBRUQsV0FBU3UzQixRQUFULENBQWtCdDRCLElBQWxCLEVBQXdCO0FBQ3RCQSxJQUFBQSxJQUFJLENBQUN5RixDQUFMLElBQVVzdkIsRUFBVjtBQUNBLzBCLElBQUFBLElBQUksQ0FBQzRwQixDQUFMLEdBQVM1cEIsSUFBSSxDQUFDc0QsS0FBTCxHQUFhMHhCLEVBQXRCO0FBQ0Q7O0FBRURpRCxFQUFBQSxJQUFJLENBQUNDLFVBQUwsR0FBa0IsVUFBU3p5QixDQUFULEVBQVk7QUFDNUIsV0FBTzNJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0IrNUIsVUFBVSxHQUFHenlCLENBQWIsRUFBZ0J3eUIsSUFBcEMsSUFBNENDLFVBQW5EO0FBQ0QsR0FGRDs7QUFJQUQsRUFBQUEsSUFBSSxDQUFDdnNCLElBQUwsR0FBWSxVQUFTakcsQ0FBVCxFQUFZO0FBQ3RCLFdBQU8zSSxTQUFTLENBQUNxQixNQUFWLElBQW9CZzZCLFFBQVEsR0FBRyxLQUFYLEVBQWtCcEQsRUFBRSxHQUFHLENBQUN0dkIsQ0FBQyxDQUFDLENBQUQsQ0FBekIsRUFBOEJ1dkIsRUFBRSxHQUFHLENBQUN2dkIsQ0FBQyxDQUFDLENBQUQsQ0FBckMsRUFBMEN3eUIsSUFBOUQsSUFBdUVFLFFBQVEsR0FBRyxJQUFILEdBQVUsQ0FBQ3BELEVBQUQsRUFBS0MsRUFBTCxDQUFoRztBQUNELEdBRkQ7O0FBSUFpRCxFQUFBQSxJQUFJLENBQUNFLFFBQUwsR0FBZ0IsVUFBUzF5QixDQUFULEVBQVk7QUFDMUIsV0FBTzNJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0JnNkIsUUFBUSxHQUFHLElBQVgsRUFBaUJwRCxFQUFFLEdBQUcsQ0FBQ3R2QixDQUFDLENBQUMsQ0FBRCxDQUF4QixFQUE2QnV2QixFQUFFLEdBQUcsQ0FBQ3Z2QixDQUFDLENBQUMsQ0FBRCxDQUFwQyxFQUF5Q3d5QixJQUE3RCxJQUFzRUUsUUFBUSxHQUFHLENBQUNwRCxFQUFELEVBQUtDLEVBQUwsQ0FBSCxHQUFjLElBQW5HO0FBQ0QsR0FGRDs7QUFJQSxTQUFPaUQsSUFBUDtBQUNELEM7O0FDNU9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFFQSw2QkFBZSxtQkFBUzcyQixDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixTQUFPLENBQUMrNEIsYUFBYSxDQUFDLzRCLENBQUQsQ0FBYixHQUFtQjg0QixXQUFuQixHQUFpQ0UsWUFBbEMsRUFBZ0RqNUIsQ0FBaEQsRUFBbURDLENBQW5ELENBQVA7QUFDRDtBQUVNLFNBQVNnNUIsWUFBVCxDQUFzQmo1QixDQUF0QixFQUF5QkMsQ0FBekIsRUFBNEI7QUFDakMsTUFBSWk1QixFQUFFLEdBQUdqNUIsQ0FBQyxHQUFHQSxDQUFDLENBQUNsRCxNQUFMLEdBQWMsQ0FBeEI7QUFBQSxNQUNJbzhCLEVBQUUsR0FBR241QixDQUFDLEdBQUcwSixJQUFJLENBQUNDLEdBQUwsQ0FBU3V2QixFQUFULEVBQWFsNUIsQ0FBQyxDQUFDakQsTUFBZixDQUFILEdBQTRCLENBRHRDO0FBQUEsTUFFSXNILENBQUMsR0FBRyxJQUFJckksS0FBSixDQUFVbTlCLEVBQVYsQ0FGUjtBQUFBLE1BR0k5NEIsQ0FBQyxHQUFHLElBQUlyRSxLQUFKLENBQVVrOUIsRUFBVixDQUhSO0FBQUEsTUFJSS84QixDQUpKOztBQU1BLE9BQUtBLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR2c5QixFQUFoQixFQUFvQixFQUFFaDlCLENBQXRCO0FBQXlCa0ksSUFBQUEsQ0FBQyxDQUFDbEksQ0FBRCxDQUFELEdBQU9sQixLQUFLLENBQUMrRSxDQUFDLENBQUM3RCxDQUFELENBQUYsRUFBTzhELENBQUMsQ0FBQzlELENBQUQsQ0FBUixDQUFaO0FBQXpCOztBQUNBLFNBQU9BLENBQUMsR0FBRys4QixFQUFYLEVBQWUsRUFBRS84QixDQUFqQjtBQUFvQmtFLElBQUFBLENBQUMsQ0FBQ2xFLENBQUQsQ0FBRCxHQUFPOEQsQ0FBQyxDQUFDOUQsQ0FBRCxDQUFSO0FBQXBCOztBQUVBLFNBQU8sVUFBU2lVLENBQVQsRUFBWTtBQUNqQixTQUFLalUsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHZzlCLEVBQWhCLEVBQW9CLEVBQUVoOUIsQ0FBdEI7QUFBeUJrRSxNQUFBQSxDQUFDLENBQUNsRSxDQUFELENBQUQsR0FBT2tJLENBQUMsQ0FBQ2xJLENBQUQsQ0FBRCxDQUFLaVUsQ0FBTCxDQUFQO0FBQXpCOztBQUNBLFdBQU8vUCxDQUFQO0FBQ0QsR0FIRDtBQUlELEM7O0FDckJELDZCQUFlLGNBQVNMLENBQVQsRUFBWUMsQ0FBWixFQUFlO0FBQzVCLE1BQUlxQyxDQUFDLEdBQUcsSUFBSStTLElBQUosRUFBUjtBQUNBLFNBQU9yVixDQUFDLEdBQUcsQ0FBQ0EsQ0FBTCxFQUFRQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBYixFQUFnQixVQUFTbVEsQ0FBVCxFQUFZO0FBQ2pDLFdBQU85TixDQUFDLENBQUM4MkIsT0FBRixDQUFVcDVCLENBQUMsSUFBSSxJQUFJb1EsQ0FBUixDQUFELEdBQWNuUSxDQUFDLEdBQUdtUSxDQUE1QixHQUFnQzlOLENBQXZDO0FBQ0QsR0FGRDtBQUdELEM7Ozs7QUNMRDtBQUVBLDZCQUFlLGdCQUFTdEMsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsTUFBSTlELENBQUMsR0FBRyxFQUFSO0FBQUEsTUFDSWtFLENBQUMsR0FBRyxFQURSO0FBQUEsTUFFSVAsQ0FGSjtBQUlBLE1BQUlFLENBQUMsS0FBSyxJQUFOLElBQWMsY0FBT0EsQ0FBUCxNQUFhLFFBQS9CLEVBQXlDQSxDQUFDLEdBQUcsRUFBSjtBQUN6QyxNQUFJQyxDQUFDLEtBQUssSUFBTixJQUFjLGNBQU9BLENBQVAsTUFBYSxRQUEvQixFQUF5Q0EsQ0FBQyxHQUFHLEVBQUo7O0FBRXpDLE9BQUtILENBQUwsSUFBVUcsQ0FBVixFQUFhO0FBQ1gsUUFBSUgsQ0FBQyxJQUFJRSxDQUFULEVBQVk7QUFDVjdELE1BQUFBLENBQUMsQ0FBQzJELENBQUQsQ0FBRCxHQUFPN0UsS0FBSyxDQUFDK0UsQ0FBQyxDQUFDRixDQUFELENBQUYsRUFBT0csQ0FBQyxDQUFDSCxDQUFELENBQVIsQ0FBWjtBQUNELEtBRkQsTUFFTztBQUNMTyxNQUFBQSxDQUFDLENBQUNQLENBQUQsQ0FBRCxHQUFPRyxDQUFDLENBQUNILENBQUQsQ0FBUjtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxVQUFTc1EsQ0FBVCxFQUFZO0FBQ2pCLFNBQUt0USxDQUFMLElBQVUzRCxDQUFWO0FBQWFrRSxNQUFBQSxDQUFDLENBQUNQLENBQUQsQ0FBRCxHQUFPM0QsQ0FBQyxDQUFDMkQsQ0FBRCxDQUFELENBQUtzUSxDQUFMLENBQVA7QUFBYjs7QUFDQSxXQUFPL1AsQ0FBUDtBQUNELEdBSEQ7QUFJRCxDOztBQ3RCRCw2QkFBZSx5QkFBU0wsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsTUFBSSxDQUFDQSxDQUFMLEVBQVFBLENBQUMsR0FBRyxFQUFKO0FBQ1IsTUFBSTFDLENBQUMsR0FBR3lDLENBQUMsR0FBRzBKLElBQUksQ0FBQ0MsR0FBTCxDQUFTMUosQ0FBQyxDQUFDbEQsTUFBWCxFQUFtQmlELENBQUMsQ0FBQ2pELE1BQXJCLENBQUgsR0FBa0MsQ0FBM0M7QUFBQSxNQUNJc0QsQ0FBQyxHQUFHSixDQUFDLENBQUN0QyxLQUFGLEVBRFI7QUFBQSxNQUVJeEIsQ0FGSjtBQUdBLFNBQU8sVUFBU2lVLENBQVQsRUFBWTtBQUNqQixTQUFLalUsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHb0IsQ0FBaEIsRUFBbUIsRUFBRXBCLENBQXJCO0FBQXdCa0UsTUFBQUEsQ0FBQyxDQUFDbEUsQ0FBRCxDQUFELEdBQU82RCxDQUFDLENBQUM3RCxDQUFELENBQUQsSUFBUSxJQUFJaVUsQ0FBWixJQUFpQm5RLENBQUMsQ0FBQzlELENBQUQsQ0FBRCxHQUFPaVUsQ0FBL0I7QUFBeEI7O0FBQ0EsV0FBTy9QLENBQVA7QUFDRCxHQUhEO0FBSUQ7QUFFTSxTQUFTMjRCLHlCQUFULENBQXVCMzBCLENBQXZCLEVBQTBCO0FBQy9CLFNBQU9nMUIsV0FBVyxDQUFDQyxNQUFaLENBQW1CajFCLENBQW5CLEtBQXlCLEVBQUVBLENBQUMsWUFBWWsxQixRQUFmLENBQWhDO0FBQ0QsQzs7OztBQ2JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLDZCQUFlLGVBQVN2NUIsQ0FBVCxFQUFZQyxDQUFaLEVBQWU7QUFDNUIsTUFBSW1RLENBQUMsR0FBRyxhQUFPblEsQ0FBVixDQUFMO0FBQUEsTUFBa0JJLENBQWxCOztBQUNBLFNBQU9KLENBQUMsSUFBSSxJQUFMLElBQWFtUSxDQUFDLEtBQUssU0FBbkIsR0FBK0IxSSwyQkFBUSxDQUFDekgsQ0FBRCxDQUF2QyxHQUNELENBQUNtUSxDQUFDLEtBQUssUUFBTixHQUFpQndKLFVBQWpCLEdBQ0R4SixDQUFDLEtBQUssUUFBTixHQUFrQixDQUFDL1AsQ0FBQyxHQUFHb2xCLEtBQUssQ0FBQ3hsQixDQUFELENBQVYsS0FBa0JBLENBQUMsR0FBR0ksQ0FBSixFQUFPd2xCLEdBQXpCLElBQWdDNVksTUFBbEQsR0FDQWhOLENBQUMsWUFBWXdsQixLQUFiLEdBQXFCSSxHQUFyQixHQUNBNWxCLENBQUMsWUFBWW9WLElBQWIsR0FBb0Jta0IsSUFBcEIsR0FDQVIseUJBQWEsQ0FBQy80QixDQUFELENBQWIsR0FBbUI4NEIsZUFBbkIsR0FDQS84QixLQUFLLENBQUNDLE9BQU4sQ0FBY2dFLENBQWQsSUFBbUJnNUIsWUFBbkIsR0FDQSxPQUFPaDVCLENBQUMsQ0FBQ3k1QixPQUFULEtBQXFCLFVBQXJCLElBQW1DLE9BQU96NUIsQ0FBQyxDQUFDdkMsUUFBVCxLQUFzQixVQUF6RCxJQUF1RTRwQixLQUFLLENBQUNybkIsQ0FBRCxDQUE1RSxHQUFrRnc1QixNQUFsRixHQUNBN2YsVUFQQSxFQU9RNVosQ0FQUixFQU9XQyxDQVBYLENBRE47QUFTRCxDOztBQ3JCRCw2QkFBZSxlQUFTRCxDQUFULEVBQVlDLENBQVosRUFBZTtBQUM1QixTQUFPRCxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTCxFQUFRQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBYixFQUFnQixVQUFTbVEsQ0FBVCxFQUFZO0FBQ2pDLFdBQU8xRyxJQUFJLENBQUM4ZCxLQUFMLENBQVd4bkIsQ0FBQyxJQUFJLElBQUlvUSxDQUFSLENBQUQsR0FBY25RLENBQUMsR0FBR21RLENBQTdCLENBQVA7QUFDRCxHQUZEO0FBR0QsQzs7QUNKRDtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUkwcEIsSUFBSSxHQUFHLGlEQUFDLENBQUQsRUFBSSxDQUFKLENBQVg7QUFFTyxTQUFTdmhCLG1CQUFULENBQWtCbFUsQ0FBbEIsRUFBcUI7QUFDMUIsU0FBT0EsQ0FBUDtBQUNEOztBQUVELFNBQVNWLG9CQUFULENBQW1CM0QsQ0FBbkIsRUFBc0JDLENBQXRCLEVBQXlCO0FBQ3ZCLFNBQU8sQ0FBQ0EsQ0FBQyxJQUFLRCxDQUFDLEdBQUcsQ0FBQ0EsQ0FBWixJQUNELFVBQVNxRSxDQUFULEVBQVk7QUFBRSxXQUFPLENBQUNBLENBQUMsR0FBR3JFLENBQUwsSUFBVUMsQ0FBakI7QUFBcUIsR0FEbEMsR0FFRHlILFFBQVEsQ0FBQzRmLEtBQUssQ0FBQ3JuQixDQUFELENBQUwsR0FBV29LLEdBQVgsR0FBaUIsR0FBbEIsQ0FGZDtBQUdEOztBQUVELFNBQVMwdkIsT0FBVCxDQUFpQi81QixDQUFqQixFQUFvQkMsQ0FBcEIsRUFBdUI7QUFDckIsTUFBSW1RLENBQUo7QUFDQSxNQUFJcFEsQ0FBQyxHQUFHQyxDQUFSLEVBQVdtUSxDQUFDLEdBQUdwUSxDQUFKLEVBQU9BLENBQUMsR0FBR0MsQ0FBWCxFQUFjQSxDQUFDLEdBQUdtUSxDQUFsQjtBQUNYLFNBQU8sVUFBUy9MLENBQVQsRUFBWTtBQUFFLFdBQU9xRixJQUFJLENBQUM2ZCxHQUFMLENBQVN2bkIsQ0FBVCxFQUFZMEosSUFBSSxDQUFDQyxHQUFMLENBQVMxSixDQUFULEVBQVlvRSxDQUFaLENBQVosQ0FBUDtBQUFxQyxHQUExRDtBQUNELEVBRUQ7QUFDQTs7O0FBQ0EsU0FBUzIxQixLQUFULENBQWVDLE1BQWYsRUFBdUJDLEtBQXZCLEVBQThCbFEsV0FBOUIsRUFBMkM7QUFDekMsTUFBSW1RLEVBQUUsR0FBR0YsTUFBTSxDQUFDLENBQUQsQ0FBZjtBQUFBLE1BQW9CRyxFQUFFLEdBQUdILE1BQU0sQ0FBQyxDQUFELENBQS9CO0FBQUEsTUFBb0NJLEVBQUUsR0FBR0gsS0FBSyxDQUFDLENBQUQsQ0FBOUM7QUFBQSxNQUFtREksRUFBRSxHQUFHSixLQUFLLENBQUMsQ0FBRCxDQUE3RDtBQUNBLE1BQUlFLEVBQUUsR0FBR0QsRUFBVCxFQUFhQSxFQUFFLEdBQUd4MkIsb0JBQVMsQ0FBQ3kyQixFQUFELEVBQUtELEVBQUwsQ0FBZCxFQUF3QkUsRUFBRSxHQUFHclEsV0FBVyxDQUFDc1EsRUFBRCxFQUFLRCxFQUFMLENBQXhDLENBQWIsS0FDS0YsRUFBRSxHQUFHeDJCLG9CQUFTLENBQUN3MkIsRUFBRCxFQUFLQyxFQUFMLENBQWQsRUFBd0JDLEVBQUUsR0FBR3JRLFdBQVcsQ0FBQ3FRLEVBQUQsRUFBS0MsRUFBTCxDQUF4QztBQUNMLFNBQU8sVUFBU2oyQixDQUFULEVBQVk7QUFBRSxXQUFPZzJCLEVBQUUsQ0FBQ0YsRUFBRSxDQUFDOTFCLENBQUQsQ0FBSCxDQUFUO0FBQW1CLEdBQXhDO0FBQ0Q7O0FBRUQsU0FBU2syQixPQUFULENBQWlCTixNQUFqQixFQUF5QkMsS0FBekIsRUFBZ0NsUSxXQUFoQyxFQUE2QztBQUMzQyxNQUFJdGtCLENBQUMsR0FBR2dFLElBQUksQ0FBQ0MsR0FBTCxDQUFTc3dCLE1BQU0sQ0FBQ2w5QixNQUFoQixFQUF3Qm05QixLQUFLLENBQUNuOUIsTUFBOUIsSUFBd0MsQ0FBaEQ7QUFBQSxNQUNJdUYsQ0FBQyxHQUFHLElBQUl0RyxLQUFKLENBQVUwSixDQUFWLENBRFI7QUFBQSxNQUVJcWhCLENBQUMsR0FBRyxJQUFJL3FCLEtBQUosQ0FBVTBKLENBQVYsQ0FGUjtBQUFBLE1BR0l2SixDQUFDLEdBQUcsQ0FBQyxDQUhULENBRDJDLENBTTNDOztBQUNBLE1BQUk4OUIsTUFBTSxDQUFDdjBCLENBQUQsQ0FBTixHQUFZdTBCLE1BQU0sQ0FBQyxDQUFELENBQXRCLEVBQTJCO0FBQ3pCQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3Q4QixLQUFQLEdBQWVrRCxPQUFmLEVBQVQ7QUFDQXE1QixJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3Y4QixLQUFOLEdBQWNrRCxPQUFkLEVBQVI7QUFDRDs7QUFFRCxTQUFPLEVBQUUxRSxDQUFGLEdBQU11SixDQUFiLEVBQWdCO0FBQ2RwRCxJQUFBQSxDQUFDLENBQUNuRyxDQUFELENBQUQsR0FBT3dILG9CQUFTLENBQUNzMkIsTUFBTSxDQUFDOTlCLENBQUQsQ0FBUCxFQUFZODlCLE1BQU0sQ0FBQzk5QixDQUFDLEdBQUcsQ0FBTCxDQUFsQixDQUFoQjtBQUNBNHFCLElBQUFBLENBQUMsQ0FBQzVxQixDQUFELENBQUQsR0FBTzZ0QixXQUFXLENBQUNrUSxLQUFLLENBQUMvOUIsQ0FBRCxDQUFOLEVBQVcrOUIsS0FBSyxDQUFDLzlCLENBQUMsR0FBRyxDQUFMLENBQWhCLENBQWxCO0FBQ0Q7O0FBRUQsU0FBTyxVQUFTa0ksQ0FBVCxFQUFZO0FBQ2pCLFFBQUlsSSxDQUFDLEdBQUd3OUIsTUFBTSxDQUFDTSxNQUFELEVBQVM1MUIsQ0FBVCxFQUFZLENBQVosRUFBZXFCLENBQWYsQ0FBTixHQUEwQixDQUFsQztBQUNBLFdBQU9xaEIsQ0FBQyxDQUFDNXFCLENBQUQsQ0FBRCxDQUFLbUcsQ0FBQyxDQUFDbkcsQ0FBRCxDQUFELENBQUtrSSxDQUFMLENBQUwsQ0FBUDtBQUNELEdBSEQ7QUFJRDs7QUFFTSxTQUFTMUIsZUFBVCxDQUFjakMsTUFBZCxFQUFzQkMsTUFBdEIsRUFBOEI7QUFDbkMsU0FBT0EsTUFBTSxDQUNSczVCLE1BREUsQ0FDS3Y1QixNQUFNLENBQUN1NUIsTUFBUCxFQURMLEVBRUZDLEtBRkUsQ0FFSXg1QixNQUFNLENBQUN3NUIsS0FBUCxFQUZKLEVBR0ZsUSxXQUhFLENBR1V0cEIsTUFBTSxDQUFDc3BCLFdBQVAsRUFIVixFQUlGd1EsS0FKRSxDQUlJOTVCLE1BQU0sQ0FBQzg1QixLQUFQLEVBSkosRUFLRkMsT0FMRSxDQUtNLzVCLE1BQU0sQ0FBQys1QixPQUFQLEVBTE4sQ0FBUDtBQU1EO0FBRU0sU0FBU0MsV0FBVCxHQUF1QjtBQUM1QixNQUFJVCxNQUFNLEdBQUdILElBQWI7QUFBQSxNQUNJSSxLQUFLLEdBQUdKLElBRFo7QUFBQSxNQUVJOVAsV0FBVyxHQUFHNFAsZ0JBRmxCO0FBQUEsTUFHSXBnQixTQUhKO0FBQUEsTUFJSW1oQixXQUpKO0FBQUEsTUFLSUYsT0FMSjtBQUFBLE1BTUlELEtBQUssR0FBR2ppQixtQkFOWjtBQUFBLE1BT0lxaUIsU0FQSjtBQUFBLE1BUUl6TCxNQVJKO0FBQUEsTUFTSUQsS0FUSjs7QUFXQSxXQUFTMkwsT0FBVCxHQUFtQjtBQUNqQixRQUFJdDlCLENBQUMsR0FBR21NLElBQUksQ0FBQ0MsR0FBTCxDQUFTc3dCLE1BQU0sQ0FBQ2w5QixNQUFoQixFQUF3Qm05QixLQUFLLENBQUNuOUIsTUFBOUIsQ0FBUjtBQUNBLFFBQUl5OUIsS0FBSyxLQUFLamlCLG1CQUFkLEVBQXdCaWlCLEtBQUssR0FBR1QsT0FBTyxDQUFDRSxNQUFNLENBQUMsQ0FBRCxDQUFQLEVBQVlBLE1BQU0sQ0FBQzE4QixDQUFDLEdBQUcsQ0FBTCxDQUFsQixDQUFmO0FBQ3hCcTlCLElBQUFBLFNBQVMsR0FBR3I5QixDQUFDLEdBQUcsQ0FBSixHQUFRZzlCLE9BQVIsR0FBa0JQLEtBQTlCO0FBQ0E3SyxJQUFBQSxNQUFNLEdBQUdELEtBQUssR0FBRyxJQUFqQjtBQUNBLFdBQU96VSxLQUFQO0FBQ0Q7O0FBRUQsV0FBU0EsS0FBVCxDQUFlcFcsQ0FBZixFQUFrQjtBQUNoQixXQUFPQSxDQUFDLElBQUksSUFBTCxJQUFhaWpCLEtBQUssQ0FBQ2pqQixDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixDQUFsQixHQUE2Qm8yQixPQUE3QixHQUF1QyxDQUFDdEwsTUFBTSxLQUFLQSxNQUFNLEdBQUd5TCxTQUFTLENBQUNYLE1BQU0sQ0FBQ3YyQixHQUFQLENBQVc4VixTQUFYLENBQUQsRUFBd0IwZ0IsS0FBeEIsRUFBK0JsUSxXQUEvQixDQUF2QixDQUFQLEVBQTRFeFEsU0FBUyxDQUFDZ2hCLEtBQUssQ0FBQ24yQixDQUFELENBQU4sQ0FBckYsQ0FBOUM7QUFDRDs7QUFFRG9XLEVBQUFBLEtBQUssQ0FBQ3FnQixNQUFOLEdBQWUsVUFBU3RTLENBQVQsRUFBWTtBQUN6QixXQUFPZ1MsS0FBSyxDQUFDRyxXQUFXLENBQUMsQ0FBQ3pMLEtBQUssS0FBS0EsS0FBSyxHQUFHMEwsU0FBUyxDQUFDVixLQUFELEVBQVFELE1BQU0sQ0FBQ3YyQixHQUFQLENBQVc4VixTQUFYLENBQVIsRUFBK0JxUSxpQkFBL0IsQ0FBdEIsQ0FBTixFQUFnRnJCLENBQWhGLENBQUQsQ0FBWixDQUFaO0FBQ0QsR0FGRDs7QUFJQS9OLEVBQUFBLEtBQUssQ0FBQ3dmLE1BQU4sR0FBZSxVQUFTLzFCLENBQVQsRUFBWTtBQUN6QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQms5QixNQUFNLEdBQUdqK0IsS0FBSyxDQUFDOEIsSUFBTixDQUFXb0csQ0FBWCxFQUFjMFYsTUFBZCxDQUFULEVBQWdDaWhCLE9BQU8sRUFBM0QsSUFBaUVaLE1BQU0sQ0FBQ3Q4QixLQUFQLEVBQXhFO0FBQ0QsR0FGRDs7QUFJQThjLEVBQUFBLEtBQUssQ0FBQ3lmLEtBQU4sR0FBYyxVQUFTaDJCLENBQVQsRUFBWTtBQUN4QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQm05QixLQUFLLEdBQUdsK0IsS0FBSyxDQUFDOEIsSUFBTixDQUFXb0csQ0FBWCxDQUFSLEVBQXVCMjJCLE9BQU8sRUFBbEQsSUFBd0RYLEtBQUssQ0FBQ3Y4QixLQUFOLEVBQS9EO0FBQ0QsR0FGRDs7QUFJQThjLEVBQUFBLEtBQUssQ0FBQ3NnQixVQUFOLEdBQW1CLFVBQVM3MkIsQ0FBVCxFQUFZO0FBQzdCLFdBQU9nMkIsS0FBSyxHQUFHbCtCLEtBQUssQ0FBQzhCLElBQU4sQ0FBV29HLENBQVgsQ0FBUixFQUF1QjhsQixXQUFXLEdBQUc2UCxnQkFBckMsRUFBdURnQixPQUFPLEVBQXJFO0FBQ0QsR0FGRDs7QUFJQXBnQixFQUFBQSxLQUFLLENBQUMrZixLQUFOLEdBQWMsVUFBU3QyQixDQUFULEVBQVk7QUFDeEIsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0J5OUIsS0FBSyxHQUFHdDJCLENBQUMsR0FBRyxJQUFILEdBQVVxVSxtQkFBbkIsRUFBNkJzaUIsT0FBTyxFQUF4RCxJQUE4REwsS0FBSyxLQUFLamlCLG1CQUEvRTtBQUNELEdBRkQ7O0FBSUFrQyxFQUFBQSxLQUFLLENBQUN1UCxXQUFOLEdBQW9CLFVBQVM5bEIsQ0FBVCxFQUFZO0FBQzlCLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CaXRCLFdBQVcsR0FBRzlsQixDQUFkLEVBQWlCMjJCLE9BQU8sRUFBNUMsSUFBa0Q3USxXQUF6RDtBQUNELEdBRkQ7O0FBSUF2UCxFQUFBQSxLQUFLLENBQUNnZ0IsT0FBTixHQUFnQixVQUFTdjJCLENBQVQsRUFBWTtBQUMxQixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQjA5QixPQUFPLEdBQUd2MkIsQ0FBVixFQUFhdVcsS0FBakMsSUFBMENnZ0IsT0FBakQ7QUFDRCxHQUZEOztBQUlBLFNBQU8sVUFBU3JxQixDQUFULEVBQVk0cUIsQ0FBWixFQUFlO0FBQ3BCeGhCLElBQUFBLFNBQVMsR0FBR3BKLENBQVosRUFBZXVxQixXQUFXLEdBQUdLLENBQTdCO0FBQ0EsV0FBT0gsT0FBTyxFQUFkO0FBQ0QsR0FIRDtBQUlEO0FBRWMsU0FBU0kscUJBQVQsR0FBc0I7QUFDbkMsU0FBT1AsV0FBVyxHQUFHbmlCLG1CQUFILEVBQWFBLG1CQUFiLENBQWxCO0FBQ0QsQzs7QUM1SE0sU0FBUzJpQixjQUFULENBQW1CakIsTUFBbkIsRUFBMkJDLEtBQTNCLEVBQWtDO0FBQ3ZDLFVBQVF4K0IsU0FBUyxDQUFDcUIsTUFBbEI7QUFDRSxTQUFLLENBQUw7QUFBUTs7QUFDUixTQUFLLENBQUw7QUFBUSxXQUFLbTlCLEtBQUwsQ0FBV0QsTUFBWDtBQUFvQjs7QUFDNUI7QUFBUyxXQUFLQyxLQUFMLENBQVdBLEtBQVgsRUFBa0JELE1BQWxCLENBQXlCQSxNQUF6QjtBQUFrQztBQUg3Qzs7QUFLQSxTQUFPLElBQVA7QUFDRDtBQUVNLFNBQVNrQixxQkFBVCxDQUEwQmxCLE1BQTFCLEVBQWtDbUIsWUFBbEMsRUFBZ0Q7QUFDckQsVUFBUTEvQixTQUFTLENBQUNxQixNQUFsQjtBQUNFLFNBQUssQ0FBTDtBQUFROztBQUNSLFNBQUssQ0FBTDtBQUFRO0FBQ04sWUFBSSxPQUFPazlCLE1BQVAsS0FBa0IsVUFBdEIsRUFBa0MsS0FBS21CLFlBQUwsQ0FBa0JuQixNQUFsQixFQUFsQyxLQUNLLEtBQUtDLEtBQUwsQ0FBV0QsTUFBWDtBQUNMO0FBQ0Q7O0FBQ0Q7QUFBUztBQUNQLGFBQUtBLE1BQUwsQ0FBWUEsTUFBWjtBQUNBLFlBQUksT0FBT21CLFlBQVAsS0FBd0IsVUFBNUIsRUFBd0MsS0FBS0EsWUFBTCxDQUFrQkEsWUFBbEIsRUFBeEMsS0FDSyxLQUFLbEIsS0FBTCxDQUFXa0IsWUFBWDtBQUNMO0FBQ0Q7QUFaSDs7QUFjQSxTQUFPLElBQVA7QUFDRCxDOztBQ3pCRCxJQUFJQyxHQUFHLEdBQUczeEIsSUFBSSxDQUFDb1AsSUFBTCxDQUFVLEVBQVYsQ0FBVjtBQUFBLElBQ0l3aUIsRUFBRSxHQUFHNXhCLElBQUksQ0FBQ29QLElBQUwsQ0FBVSxFQUFWLENBRFQ7QUFBQSxJQUVJeWlCLEVBQUUsR0FBRzd4QixJQUFJLENBQUNvUCxJQUFMLENBQVUsQ0FBVixDQUZUO0FBSWUsU0FBUzBpQixLQUFULENBQWU5N0IsS0FBZixFQUFzQndXLElBQXRCLEVBQTRCdlgsS0FBNUIsRUFBbUM7QUFDaEQsTUFBSWtDLE9BQUo7QUFBQSxNQUNJMUUsQ0FBQyxHQUFHLENBQUMsQ0FEVDtBQUFBLE1BRUlvQixDQUZKO0FBQUEsTUFHSWkrQixLQUhKO0FBQUEsTUFJSUMsSUFKSjtBQU1BdmxCLEVBQUFBLElBQUksR0FBRyxDQUFDQSxJQUFSLEVBQWN4VyxLQUFLLEdBQUcsQ0FBQ0EsS0FBdkIsRUFBOEJmLEtBQUssR0FBRyxDQUFDQSxLQUF2QztBQUNBLE1BQUllLEtBQUssS0FBS3dXLElBQVYsSUFBa0J2WCxLQUFLLEdBQUcsQ0FBOUIsRUFBaUMsT0FBTyxDQUFDZSxLQUFELENBQVA7QUFDakMsTUFBSW1CLE9BQU8sR0FBR3FWLElBQUksR0FBR3hXLEtBQXJCLEVBQTRCbkMsQ0FBQyxHQUFHbUMsS0FBSixFQUFXQSxLQUFLLEdBQUd3VyxJQUFuQixFQUF5QkEsSUFBSSxHQUFHM1ksQ0FBaEM7QUFDNUIsTUFBSSxDQUFDaytCLElBQUksR0FBR0MsYUFBYSxDQUFDaDhCLEtBQUQsRUFBUXdXLElBQVIsRUFBY3ZYLEtBQWQsQ0FBckIsTUFBK0MsQ0FBL0MsSUFBb0QsQ0FBQ2c5QixRQUFRLENBQUNGLElBQUQsQ0FBakUsRUFBeUUsT0FBTyxFQUFQOztBQUV6RSxNQUFJQSxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ1osUUFBSXBCLEVBQUUsR0FBRzN3QixJQUFJLENBQUM4ZCxLQUFMLENBQVc5bkIsS0FBSyxHQUFHKzdCLElBQW5CLENBQVQ7QUFBQSxRQUFtQ25CLEVBQUUsR0FBRzV3QixJQUFJLENBQUM4ZCxLQUFMLENBQVd0UixJQUFJLEdBQUd1bEIsSUFBbEIsQ0FBeEM7QUFDQSxRQUFJcEIsRUFBRSxHQUFHb0IsSUFBTCxHQUFZLzdCLEtBQWhCLEVBQXVCLEVBQUUyNkIsRUFBRjtBQUN2QixRQUFJQyxFQUFFLEdBQUdtQixJQUFMLEdBQVl2bEIsSUFBaEIsRUFBc0IsRUFBRW9rQixFQUFGO0FBQ3RCa0IsSUFBQUEsS0FBSyxHQUFHLElBQUl4L0IsS0FBSixDQUFVdUIsQ0FBQyxHQUFHKzhCLEVBQUUsR0FBR0QsRUFBTCxHQUFVLENBQXhCLENBQVI7O0FBQ0EsV0FBTyxFQUFFbCtCLENBQUYsR0FBTW9CLENBQWI7QUFBZ0JpK0IsTUFBQUEsS0FBSyxDQUFDci9CLENBQUQsQ0FBTCxHQUFXLENBQUNrK0IsRUFBRSxHQUFHbCtCLENBQU4sSUFBV3MvQixJQUF0QjtBQUFoQjtBQUNELEdBTkQsTUFNTztBQUNMQSxJQUFBQSxJQUFJLEdBQUcsQ0FBQ0EsSUFBUjs7QUFDQSxRQUFJcEIsRUFBRSxHQUFHM3dCLElBQUksQ0FBQzhkLEtBQUwsQ0FBVzluQixLQUFLLEdBQUcrN0IsSUFBbkIsQ0FBVDtBQUFBLFFBQW1DbkIsR0FBRSxHQUFHNXdCLElBQUksQ0FBQzhkLEtBQUwsQ0FBV3RSLElBQUksR0FBR3VsQixJQUFsQixDQUF4Qzs7QUFDQSxRQUFJcEIsRUFBRSxHQUFHb0IsSUFBTCxHQUFZLzdCLEtBQWhCLEVBQXVCLEVBQUUyNkIsRUFBRjtBQUN2QixRQUFJQyxHQUFFLEdBQUdtQixJQUFMLEdBQVl2bEIsSUFBaEIsRUFBc0IsRUFBRW9rQixHQUFGO0FBQ3RCa0IsSUFBQUEsS0FBSyxHQUFHLElBQUl4L0IsS0FBSixDQUFVdUIsQ0FBQyxHQUFHKzhCLEdBQUUsR0FBR0QsRUFBTCxHQUFVLENBQXhCLENBQVI7O0FBQ0EsV0FBTyxFQUFFbCtCLENBQUYsR0FBTW9CLENBQWI7QUFBZ0JpK0IsTUFBQUEsS0FBSyxDQUFDci9CLENBQUQsQ0FBTCxHQUFXLENBQUNrK0IsRUFBRSxHQUFHbCtCLENBQU4sSUFBV3MvQixJQUF0QjtBQUFoQjtBQUNEOztBQUVELE1BQUk1NkIsT0FBSixFQUFhMjZCLEtBQUssQ0FBQzM2QixPQUFOO0FBRWIsU0FBTzI2QixLQUFQO0FBQ0Q7QUFFTSxTQUFTRSxhQUFULENBQXVCaDhCLEtBQXZCLEVBQThCd1csSUFBOUIsRUFBb0N2WCxLQUFwQyxFQUEyQztBQUNoRCxNQUFJODhCLElBQUksR0FBRyxDQUFDdmxCLElBQUksR0FBR3hXLEtBQVIsSUFBaUJnSyxJQUFJLENBQUM2ZCxHQUFMLENBQVMsQ0FBVCxFQUFZNW9CLEtBQVosQ0FBNUI7QUFBQSxNQUNJaTlCLEtBQUssR0FBR2x5QixJQUFJLENBQUMyZSxLQUFMLENBQVczZSxJQUFJLENBQUNteUIsR0FBTCxDQUFTSixJQUFULElBQWlCL3hCLElBQUksQ0FBQ295QixJQUFqQyxDQURaO0FBQUEsTUFFSTVnQyxLQUFLLEdBQUd1Z0MsSUFBSSxHQUFHL3hCLElBQUksQ0FBQ3lkLEdBQUwsQ0FBUyxFQUFULEVBQWF5VSxLQUFiLENBRm5CO0FBR0EsU0FBT0EsS0FBSyxJQUFJLENBQVQsR0FDRCxDQUFDMWdDLEtBQUssSUFBSW1nQyxHQUFULEdBQWUsRUFBZixHQUFvQm5nQyxLQUFLLElBQUlvZ0MsRUFBVCxHQUFjLENBQWQsR0FBa0JwZ0MsS0FBSyxJQUFJcWdDLEVBQVQsR0FBYyxDQUFkLEdBQWtCLENBQXpELElBQThEN3hCLElBQUksQ0FBQ3lkLEdBQUwsQ0FBUyxFQUFULEVBQWF5VSxLQUFiLENBRDdELEdBRUQsQ0FBQ2x5QixJQUFJLENBQUN5ZCxHQUFMLENBQVMsRUFBVCxFQUFhLENBQUN5VSxLQUFkLENBQUQsSUFBeUIxZ0MsS0FBSyxJQUFJbWdDLEdBQVQsR0FBZSxFQUFmLEdBQW9CbmdDLEtBQUssSUFBSW9nQyxFQUFULEdBQWMsQ0FBZCxHQUFrQnBnQyxLQUFLLElBQUlxZ0MsRUFBVCxHQUFjLENBQWQsR0FBa0IsQ0FBakYsQ0FGTjtBQUdEO0FBRU0sU0FBU1EsUUFBVCxDQUFrQnI4QixLQUFsQixFQUF5QndXLElBQXpCLEVBQStCdlgsS0FBL0IsRUFBc0M7QUFDM0MsTUFBSXE5QixLQUFLLEdBQUd0eUIsSUFBSSxDQUFDbWxCLEdBQUwsQ0FBUzNZLElBQUksR0FBR3hXLEtBQWhCLElBQXlCZ0ssSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWTVvQixLQUFaLENBQXJDO0FBQUEsTUFDSXM5QixLQUFLLEdBQUd2eUIsSUFBSSxDQUFDeWQsR0FBTCxDQUFTLEVBQVQsRUFBYXpkLElBQUksQ0FBQzJlLEtBQUwsQ0FBVzNlLElBQUksQ0FBQ215QixHQUFMLENBQVNHLEtBQVQsSUFBa0J0eUIsSUFBSSxDQUFDb3lCLElBQWxDLENBQWIsQ0FEWjtBQUFBLE1BRUk1Z0MsS0FBSyxHQUFHOGdDLEtBQUssR0FBR0MsS0FGcEI7QUFHQSxNQUFJL2dDLEtBQUssSUFBSW1nQyxHQUFiLEVBQWtCWSxLQUFLLElBQUksRUFBVCxDQUFsQixLQUNLLElBQUkvZ0MsS0FBSyxJQUFJb2dDLEVBQWIsRUFBaUJXLEtBQUssSUFBSSxDQUFULENBQWpCLEtBQ0EsSUFBSS9nQyxLQUFLLElBQUlxZ0MsRUFBYixFQUFpQlUsS0FBSyxJQUFJLENBQVQ7QUFDdEIsU0FBTy9sQixJQUFJLEdBQUd4VyxLQUFQLEdBQWUsQ0FBQ3U4QixLQUFoQixHQUF3QkEsS0FBL0I7QUFDRCxDOztBQ3JERDtBQUNBLElBQUlDLEVBQUUsR0FBRywwRUFBVDtBQUVlLFNBQVNDLGVBQVQsQ0FBeUJDLFNBQXpCLEVBQW9DO0FBQ2pELE1BQUksRUFBRTMxQixLQUFLLEdBQUd5MUIsRUFBRSxDQUFDelYsSUFBSCxDQUFRMlYsU0FBUixDQUFWLENBQUosRUFBbUMsTUFBTSxJQUFJMTlCLEtBQUosQ0FBVSxxQkFBcUIwOUIsU0FBL0IsQ0FBTjtBQUNuQyxNQUFJMzFCLEtBQUo7QUFDQSxTQUFPLElBQUk0MUIsZUFBSixDQUFvQjtBQUN6QkMsSUFBQUEsSUFBSSxFQUFFNzFCLEtBQUssQ0FBQyxDQUFELENBRGM7QUFFekI4MUIsSUFBQUEsS0FBSyxFQUFFOTFCLEtBQUssQ0FBQyxDQUFELENBRmE7QUFHekIrMUIsSUFBQUEsSUFBSSxFQUFFLzFCLEtBQUssQ0FBQyxDQUFELENBSGM7QUFJekJnMkIsSUFBQUEsTUFBTSxFQUFFaDJCLEtBQUssQ0FBQyxDQUFELENBSlk7QUFLekI2aUIsSUFBQUEsSUFBSSxFQUFFN2lCLEtBQUssQ0FBQyxDQUFELENBTGM7QUFNekJncUIsSUFBQUEsS0FBSyxFQUFFaHFCLEtBQUssQ0FBQyxDQUFELENBTmE7QUFPekJpMkIsSUFBQUEsS0FBSyxFQUFFajJCLEtBQUssQ0FBQyxDQUFELENBUGE7QUFRekJrMkIsSUFBQUEsU0FBUyxFQUFFbDJCLEtBQUssQ0FBQyxDQUFELENBQUwsSUFBWUEsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTOUksS0FBVCxDQUFlLENBQWYsQ0FSRTtBQVN6QnVQLElBQUFBLElBQUksRUFBRXpHLEtBQUssQ0FBQyxDQUFELENBVGM7QUFVekI0SixJQUFBQSxJQUFJLEVBQUU1SixLQUFLLENBQUMsRUFBRDtBQVZjLEdBQXBCLENBQVA7QUFZRDtBQUVEMDFCLGVBQWUsQ0FBQzErQixTQUFoQixHQUE0QjQrQixlQUFlLENBQUM1K0IsU0FBNUMsRUFBdUQ7O0FBRWhELFNBQVM0K0IsZUFBVCxDQUF5QkQsU0FBekIsRUFBb0M7QUFDekMsT0FBS0UsSUFBTCxHQUFZRixTQUFTLENBQUNFLElBQVYsS0FBbUJ6Z0MsU0FBbkIsR0FBK0IsR0FBL0IsR0FBcUN1Z0MsU0FBUyxDQUFDRSxJQUFWLEdBQWlCLEVBQWxFO0FBQ0EsT0FBS0MsS0FBTCxHQUFhSCxTQUFTLENBQUNHLEtBQVYsS0FBb0IxZ0MsU0FBcEIsR0FBZ0MsR0FBaEMsR0FBc0N1Z0MsU0FBUyxDQUFDRyxLQUFWLEdBQWtCLEVBQXJFO0FBQ0EsT0FBS0MsSUFBTCxHQUFZSixTQUFTLENBQUNJLElBQVYsS0FBbUIzZ0MsU0FBbkIsR0FBK0IsR0FBL0IsR0FBcUN1Z0MsU0FBUyxDQUFDSSxJQUFWLEdBQWlCLEVBQWxFO0FBQ0EsT0FBS0MsTUFBTCxHQUFjTCxTQUFTLENBQUNLLE1BQVYsS0FBcUI1Z0MsU0FBckIsR0FBaUMsRUFBakMsR0FBc0N1Z0MsU0FBUyxDQUFDSyxNQUFWLEdBQW1CLEVBQXZFO0FBQ0EsT0FBS25ULElBQUwsR0FBWSxDQUFDLENBQUM4UyxTQUFTLENBQUM5UyxJQUF4QjtBQUNBLE9BQUttSCxLQUFMLEdBQWEyTCxTQUFTLENBQUMzTCxLQUFWLEtBQW9CNTBCLFNBQXBCLEdBQWdDQSxTQUFoQyxHQUE0QyxDQUFDdWdDLFNBQVMsQ0FBQzNMLEtBQXBFO0FBQ0EsT0FBS2lNLEtBQUwsR0FBYSxDQUFDLENBQUNOLFNBQVMsQ0FBQ00sS0FBekI7QUFDQSxPQUFLQyxTQUFMLEdBQWlCUCxTQUFTLENBQUNPLFNBQVYsS0FBd0I5Z0MsU0FBeEIsR0FBb0NBLFNBQXBDLEdBQWdELENBQUN1Z0MsU0FBUyxDQUFDTyxTQUE1RTtBQUNBLE9BQUt6dkIsSUFBTCxHQUFZLENBQUMsQ0FBQ2t2QixTQUFTLENBQUNsdkIsSUFBeEI7QUFDQSxPQUFLbUQsSUFBTCxHQUFZK3JCLFNBQVMsQ0FBQy9yQixJQUFWLEtBQW1CeFUsU0FBbkIsR0FBK0IsRUFBL0IsR0FBb0N1Z0MsU0FBUyxDQUFDL3JCLElBQVYsR0FBaUIsRUFBakU7QUFDRDs7QUFFRGdzQixlQUFlLENBQUM1K0IsU0FBaEIsQ0FBMEJDLFFBQTFCLEdBQXFDLFlBQVc7QUFDOUMsU0FBTyxLQUFLNCtCLElBQUwsR0FDRCxLQUFLQyxLQURKLEdBRUQsS0FBS0MsSUFGSixHQUdELEtBQUtDLE1BSEosSUFJQSxLQUFLblQsSUFBTCxHQUFZLEdBQVosR0FBa0IsRUFKbEIsS0FLQSxLQUFLbUgsS0FBTCxLQUFlNTBCLFNBQWYsR0FBMkIsRUFBM0IsR0FBZ0M2TixJQUFJLENBQUM2ZCxHQUFMLENBQVMsQ0FBVCxFQUFZLEtBQUtrSixLQUFMLEdBQWEsQ0FBekIsQ0FMaEMsS0FNQSxLQUFLaU0sS0FBTCxHQUFhLEdBQWIsR0FBbUIsRUFObkIsS0FPQSxLQUFLQyxTQUFMLEtBQW1COWdDLFNBQW5CLEdBQStCLEVBQS9CLEdBQW9DLE1BQU02TixJQUFJLENBQUM2ZCxHQUFMLENBQVMsQ0FBVCxFQUFZLEtBQUtvVixTQUFMLEdBQWlCLENBQTdCLENBUDFDLEtBUUEsS0FBS3p2QixJQUFMLEdBQVksR0FBWixHQUFrQixFQVJsQixJQVNELEtBQUttRCxJQVRYO0FBVUQsQ0FYRCxDOztBQ25DQSw2QkFBZSx1QkFBU2hNLENBQVQsRUFBWTtBQUN6QixTQUFPcUYsSUFBSSxDQUFDbWxCLEdBQUwsQ0FBU3hxQixDQUFDLEdBQUdxRixJQUFJLENBQUM4ZCxLQUFMLENBQVduakIsQ0FBWCxDQUFiLEtBQStCLElBQS9CLEdBQ0RBLENBQUMsQ0FBQ3U0QixjQUFGLENBQWlCLElBQWpCLEVBQXVCQyxPQUF2QixDQUErQixJQUEvQixFQUFxQyxFQUFyQyxDQURDLEdBRUR4NEIsQ0FBQyxDQUFDM0csUUFBRixDQUFXLEVBQVgsQ0FGTjtBQUdELEVBRUQ7QUFDQTtBQUNBOztBQUNPLFNBQVNvL0Isa0JBQVQsQ0FBNEJ6NEIsQ0FBNUIsRUFBK0J1d0IsQ0FBL0IsRUFBa0M7QUFDdkMsTUFBSSxDQUFDejRCLENBQUMsR0FBRyxDQUFDa0ksQ0FBQyxHQUFHdXdCLENBQUMsR0FBR3Z3QixDQUFDLENBQUMwNEIsYUFBRixDQUFnQm5JLENBQUMsR0FBRyxDQUFwQixDQUFILEdBQTRCdndCLENBQUMsQ0FBQzA0QixhQUFGLEVBQWxDLEVBQXFEanlCLE9BQXJELENBQTZELEdBQTdELENBQUwsSUFBMEUsQ0FBOUUsRUFBaUYsT0FBTyxJQUFQLENBRDFDLENBQ3VEOztBQUM5RixNQUFJM08sQ0FBSjtBQUFBLE1BQU82Z0MsV0FBVyxHQUFHMzRCLENBQUMsQ0FBQzFHLEtBQUYsQ0FBUSxDQUFSLEVBQVd4QixDQUFYLENBQXJCLENBRnVDLENBSXZDO0FBQ0E7O0FBQ0EsU0FBTyxDQUNMNmdDLFdBQVcsQ0FBQ2pnQyxNQUFaLEdBQXFCLENBQXJCLEdBQXlCaWdDLFdBQVcsQ0FBQyxDQUFELENBQVgsR0FBaUJBLFdBQVcsQ0FBQ3IvQixLQUFaLENBQWtCLENBQWxCLENBQTFDLEdBQWlFcS9CLFdBRDVELEVBRUwsQ0FBQzM0QixDQUFDLENBQUMxRyxLQUFGLENBQVF4QixDQUFDLEdBQUcsQ0FBWixDQUZJLENBQVA7QUFJRCxDOztBQ25CRDtBQUVBLDZCQUFlLGtCQUFTa0ksQ0FBVCxFQUFZO0FBQ3pCLFNBQU9BLENBQUMsR0FBR3k0QixrQkFBa0IsQ0FBQ3B6QixJQUFJLENBQUNtbEIsR0FBTCxDQUFTeHFCLENBQVQsQ0FBRCxDQUF0QixFQUFxQ0EsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBRCxDQUFKLEdBQVVnRyxHQUF2RDtBQUNELEM7O0FDSkQ7QUFFQSw2QkFBZSx5QkFBU294QixJQUFULEVBQWV4Z0MsS0FBZixFQUFzQjtBQUNuQyxTQUFPeU8sSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWTdkLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFDLENBQVYsRUFBYTdkLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWUQsSUFBSSxDQUFDMmUsS0FBTCxDQUFXNFUsUUFBUSxDQUFDaGlDLEtBQUQsQ0FBUixHQUFrQixDQUE3QixDQUFaLENBQWIsSUFBNkQsQ0FBN0QsR0FBaUVnaUMsUUFBUSxDQUFDdnpCLElBQUksQ0FBQ21sQixHQUFMLENBQVM0TSxJQUFULENBQUQsQ0FBckYsQ0FBUDtBQUNELEM7O0FDSkQsNkJBQWUscUJBQVN5QixRQUFULEVBQW1CQyxTQUFuQixFQUE4QjtBQUMzQyxTQUFPLFVBQVNsaUMsS0FBVCxFQUFnQncxQixLQUFoQixFQUF1QjtBQUM1QixRQUFJdDBCLENBQUMsR0FBR2xCLEtBQUssQ0FBQzhCLE1BQWQ7QUFBQSxRQUNJcVQsQ0FBQyxHQUFHLEVBRFI7QUFBQSxRQUVJMUssQ0FBQyxHQUFHLENBRlI7QUFBQSxRQUdJc2hCLENBQUMsR0FBR2tXLFFBQVEsQ0FBQyxDQUFELENBSGhCO0FBQUEsUUFJSW5nQyxNQUFNLEdBQUcsQ0FKYjs7QUFNQSxXQUFPWixDQUFDLEdBQUcsQ0FBSixJQUFTNnFCLENBQUMsR0FBRyxDQUFwQixFQUF1QjtBQUNyQixVQUFJanFCLE1BQU0sR0FBR2lxQixDQUFULEdBQWEsQ0FBYixHQUFpQnlKLEtBQXJCLEVBQTRCekosQ0FBQyxHQUFHdGQsSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWWtKLEtBQUssR0FBRzF6QixNQUFwQixDQUFKO0FBQzVCcVQsTUFBQUEsQ0FBQyxDQUFDdFQsSUFBRixDQUFPN0IsS0FBSyxDQUFDbWlDLFNBQU4sQ0FBZ0JqaEMsQ0FBQyxJQUFJNnFCLENBQXJCLEVBQXdCN3FCLENBQUMsR0FBRzZxQixDQUE1QixDQUFQO0FBQ0EsVUFBSSxDQUFDanFCLE1BQU0sSUFBSWlxQixDQUFDLEdBQUcsQ0FBZixJQUFvQnlKLEtBQXhCLEVBQStCO0FBQy9CekosTUFBQUEsQ0FBQyxHQUFHa1csUUFBUSxDQUFDeDNCLENBQUMsR0FBRyxDQUFDQSxDQUFDLEdBQUcsQ0FBTCxJQUFVdzNCLFFBQVEsQ0FBQ25nQyxNQUF4QixDQUFaO0FBQ0Q7O0FBRUQsV0FBT3FULENBQUMsQ0FBQ3ZQLE9BQUYsR0FBWTJNLElBQVosQ0FBaUIydkIsU0FBakIsQ0FBUDtBQUNELEdBZkQ7QUFnQkQsQzs7QUNqQkQsNkJBQWUsd0JBQVNFLFFBQVQsRUFBbUI7QUFDaEMsU0FBTyxVQUFTcGlDLEtBQVQsRUFBZ0I7QUFDckIsV0FBT0EsS0FBSyxDQUFDNGhDLE9BQU4sQ0FBYyxRQUFkLEVBQXdCLFVBQVMxZ0MsQ0FBVCxFQUFZO0FBQ3pDLGFBQU9raEMsUUFBUSxDQUFDLENBQUNsaEMsQ0FBRixDQUFmO0FBQ0QsS0FGTSxDQUFQO0FBR0QsR0FKRDtBQUtELEM7O0FDTkQ7QUFDQSw2QkFBZSxvQkFBUytkLENBQVQsRUFBWTtBQUN6Qm9qQixFQUFBQSxHQUFHLEVBQUUsS0FBSyxJQUFJLy9CLENBQUMsR0FBRzJjLENBQUMsQ0FBQ25kLE1BQVYsRUFBa0JaLENBQUMsR0FBRyxDQUF0QixFQUF5QnNNLEVBQUUsR0FBRyxDQUFDLENBQS9CLEVBQWtDQyxFQUF2QyxFQUEyQ3ZNLENBQUMsR0FBR29CLENBQS9DLEVBQWtELEVBQUVwQixDQUFwRCxFQUF1RDtBQUMxRCxZQUFRK2QsQ0FBQyxDQUFDL2QsQ0FBRCxDQUFUO0FBQ0UsV0FBSyxHQUFMO0FBQVVzTSxRQUFBQSxFQUFFLEdBQUdDLEVBQUUsR0FBR3ZNLENBQVY7QUFBYTs7QUFDdkIsV0FBSyxHQUFMO0FBQVUsWUFBSXNNLEVBQUUsS0FBSyxDQUFYLEVBQWNBLEVBQUUsR0FBR3RNLENBQUw7QUFBUXVNLFFBQUFBLEVBQUUsR0FBR3ZNLENBQUw7QUFBUTs7QUFDeEM7QUFBUyxZQUFJLENBQUMsQ0FBQytkLENBQUMsQ0FBQy9kLENBQUQsQ0FBUCxFQUFZLE1BQU1taEMsR0FBTjtBQUFXLFlBQUk3MEIsRUFBRSxHQUFHLENBQVQsRUFBWUEsRUFBRSxHQUFHLENBQUw7QUFBUTtBQUh0RDtBQUtEOztBQUNELFNBQU9BLEVBQUUsR0FBRyxDQUFMLEdBQVN5UixDQUFDLENBQUN2YyxLQUFGLENBQVEsQ0FBUixFQUFXOEssRUFBWCxJQUFpQnlSLENBQUMsQ0FBQ3ZjLEtBQUYsQ0FBUStLLEVBQUUsR0FBRyxDQUFiLENBQTFCLEdBQTRDd1IsQ0FBbkQ7QUFDRCxDOztBQ1ZEO0FBRU8sSUFBSXFqQixjQUFKO0FBRVAsNkJBQWUsMEJBQVNsNUIsQ0FBVCxFQUFZdXdCLENBQVosRUFBZTtBQUM1QixNQUFJdHlCLENBQUMsR0FBR3c2QixrQkFBa0IsQ0FBQ3o0QixDQUFELEVBQUl1d0IsQ0FBSixDQUExQjtBQUNBLE1BQUksQ0FBQ3R5QixDQUFMLEVBQVEsT0FBTytCLENBQUMsR0FBRyxFQUFYO0FBQ1IsTUFBSTI0QixXQUFXLEdBQUcxNkIsQ0FBQyxDQUFDLENBQUQsQ0FBbkI7QUFBQSxNQUNJMjZCLFFBQVEsR0FBRzM2QixDQUFDLENBQUMsQ0FBRCxDQURoQjtBQUFBLE1BRUluRyxDQUFDLEdBQUc4Z0MsUUFBUSxJQUFJTSxjQUFjLEdBQUc3ekIsSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQUMsQ0FBVixFQUFhN2QsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZRCxJQUFJLENBQUMyZSxLQUFMLENBQVc0VSxRQUFRLEdBQUcsQ0FBdEIsQ0FBWixDQUFiLElBQXNELENBQTNFLENBQVIsR0FBd0YsQ0FGaEc7QUFBQSxNQUdJMS9CLENBQUMsR0FBR3kvQixXQUFXLENBQUNqZ0MsTUFIcEI7QUFJQSxTQUFPWixDQUFDLEtBQUtvQixDQUFOLEdBQVV5L0IsV0FBVixHQUNEN2dDLENBQUMsR0FBR29CLENBQUosR0FBUXkvQixXQUFXLEdBQUcsSUFBSWhoQyxLQUFKLENBQVVHLENBQUMsR0FBR29CLENBQUosR0FBUSxDQUFsQixFQUFxQmlRLElBQXJCLENBQTBCLEdBQTFCLENBQXRCLEdBQ0FyUixDQUFDLEdBQUcsQ0FBSixHQUFRNmdDLFdBQVcsQ0FBQ3IvQixLQUFaLENBQWtCLENBQWxCLEVBQXFCeEIsQ0FBckIsSUFBMEIsR0FBMUIsR0FBZ0M2Z0MsV0FBVyxDQUFDci9CLEtBQVosQ0FBa0J4QixDQUFsQixDQUF4QyxHQUNBLE9BQU8sSUFBSUgsS0FBSixDQUFVLElBQUlHLENBQWQsRUFBaUJxUixJQUFqQixDQUFzQixHQUF0QixDQUFQLEdBQW9Dc3ZCLGtCQUFrQixDQUFDejRCLENBQUQsRUFBSXFGLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVlxTixDQUFDLEdBQUd6NEIsQ0FBSixHQUFRLENBQXBCLENBQUosQ0FBbEIsQ0FBOEMsQ0FBOUMsQ0FIMUMsQ0FQNEIsQ0FVZ0U7QUFDN0YsQzs7QUNmRDtBQUVBLDZCQUFlLHVCQUFTa0ksQ0FBVCxFQUFZdXdCLENBQVosRUFBZTtBQUM1QixNQUFJdHlCLENBQUMsR0FBR3c2QixrQkFBa0IsQ0FBQ3o0QixDQUFELEVBQUl1d0IsQ0FBSixDQUExQjtBQUNBLE1BQUksQ0FBQ3R5QixDQUFMLEVBQVEsT0FBTytCLENBQUMsR0FBRyxFQUFYO0FBQ1IsTUFBSTI0QixXQUFXLEdBQUcxNkIsQ0FBQyxDQUFDLENBQUQsQ0FBbkI7QUFBQSxNQUNJMjZCLFFBQVEsR0FBRzM2QixDQUFDLENBQUMsQ0FBRCxDQURoQjtBQUVBLFNBQU8yNkIsUUFBUSxHQUFHLENBQVgsR0FBZSxPQUFPLElBQUlqaEMsS0FBSixDQUFVLENBQUNpaEMsUUFBWCxFQUFxQnp2QixJQUFyQixDQUEwQixHQUExQixDQUFQLEdBQXdDd3ZCLFdBQXZELEdBQ0RBLFdBQVcsQ0FBQ2pnQyxNQUFaLEdBQXFCa2dDLFFBQVEsR0FBRyxDQUFoQyxHQUFvQ0QsV0FBVyxDQUFDci9CLEtBQVosQ0FBa0IsQ0FBbEIsRUFBcUJzL0IsUUFBUSxHQUFHLENBQWhDLElBQXFDLEdBQXJDLEdBQTJDRCxXQUFXLENBQUNyL0IsS0FBWixDQUFrQnMvQixRQUFRLEdBQUcsQ0FBN0IsQ0FBL0UsR0FDQUQsV0FBVyxHQUFHLElBQUloaEMsS0FBSixDQUFVaWhDLFFBQVEsR0FBR0QsV0FBVyxDQUFDamdDLE1BQXZCLEdBQWdDLENBQTFDLEVBQTZDeVEsSUFBN0MsQ0FBa0QsR0FBbEQsQ0FGcEI7QUFHRCxDOztBQ1ZEO0FBQ0E7QUFDQTtBQUVBLGtEQUFlO0FBQ2IsT0FBSyxXQUFDbkosQ0FBRCxFQUFJdXdCLENBQUo7QUFBQSxXQUFVLENBQUN2d0IsQ0FBQyxHQUFHLEdBQUwsRUFBVXM1QixPQUFWLENBQWtCL0ksQ0FBbEIsQ0FBVjtBQUFBLEdBRFE7QUFFYixPQUFLLFdBQUN2d0IsQ0FBRDtBQUFBLFdBQU9xRixJQUFJLENBQUM4ZCxLQUFMLENBQVduakIsQ0FBWCxFQUFjM0csUUFBZCxDQUF1QixDQUF2QixDQUFQO0FBQUEsR0FGUTtBQUdiLE9BQUssV0FBQzJHLENBQUQ7QUFBQSxXQUFPQSxDQUFDLEdBQUcsRUFBWDtBQUFBLEdBSFE7QUFJYixPQUFLbTVCLGFBSlE7QUFLYixPQUFLLFdBQUNuNUIsQ0FBRCxFQUFJdXdCLENBQUo7QUFBQSxXQUFVdndCLENBQUMsQ0FBQzA0QixhQUFGLENBQWdCbkksQ0FBaEIsQ0FBVjtBQUFBLEdBTFE7QUFNYixPQUFLLFdBQUN2d0IsQ0FBRCxFQUFJdXdCLENBQUo7QUFBQSxXQUFVdndCLENBQUMsQ0FBQ3M1QixPQUFGLENBQVUvSSxDQUFWLENBQVY7QUFBQSxHQU5RO0FBT2IsT0FBSyxXQUFDdndCLENBQUQsRUFBSXV3QixDQUFKO0FBQUEsV0FBVXZ3QixDQUFDLENBQUN1NUIsV0FBRixDQUFjaEosQ0FBZCxDQUFWO0FBQUEsR0FQUTtBQVFiLE9BQUssV0FBQ3Z3QixDQUFEO0FBQUEsV0FBT3FGLElBQUksQ0FBQzhkLEtBQUwsQ0FBV25qQixDQUFYLEVBQWMzRyxRQUFkLENBQXVCLENBQXZCLENBQVA7QUFBQSxHQVJRO0FBU2IsT0FBSyxXQUFDMkcsQ0FBRCxFQUFJdXdCLEVBQUo7QUFBQSxXQUFVOEksYUFBYSxDQUFDcjVCLENBQUMsR0FBRyxHQUFMLEVBQVV1d0IsRUFBVixDQUF2QjtBQUFBLEdBVFE7QUFVYixPQUFLOEksYUFWUTtBQVdiLE9BQUtELGdCQVhRO0FBWWIsT0FBSyxXQUFDcDVCLENBQUQ7QUFBQSxXQUFPcUYsSUFBSSxDQUFDOGQsS0FBTCxDQUFXbmpCLENBQVgsRUFBYzNHLFFBQWQsQ0FBdUIsRUFBdkIsRUFBMkJtZ0MsV0FBM0IsRUFBUDtBQUFBLEdBWlE7QUFhYixPQUFLLFdBQUN4NUIsRUFBRDtBQUFBLFdBQU9xRixJQUFJLENBQUM4ZCxLQUFMLENBQVduakIsRUFBWCxFQUFjM0csUUFBZCxDQUF1QixFQUF2QixDQUFQO0FBQUE7QUFiUSxDQUFmLEU7O0FDSkEsNkJBQWUsc0JBQVMyRyxDQUFULEVBQVk7QUFDekIsU0FBT0EsQ0FBUDtBQUNELEM7O0FDRkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQUlYLEdBQUcsR0FBRzFILEtBQUssQ0FBQ3lCLFNBQU4sQ0FBZ0JpRyxHQUExQjtBQUFBLElBQ0l3NkIsUUFBUSxHQUFHLENBQUMsR0FBRCxFQUFLLEdBQUwsRUFBUyxHQUFULEVBQWEsR0FBYixFQUFpQixHQUFqQixFQUFxQixHQUFyQixFQUF5QixHQUF6QixFQUE2QixHQUE3QixFQUFpQyxFQUFqQyxFQUFvQyxHQUFwQyxFQUF3QyxHQUF4QyxFQUE0QyxHQUE1QyxFQUFnRCxHQUFoRCxFQUFvRCxHQUFwRCxFQUF3RCxHQUF4RCxFQUE0RCxHQUE1RCxFQUFnRSxHQUFoRSxDQURmO0FBR0EsNkJBQWUsZ0JBQVNDLE1BQVQsRUFBaUI7QUFDOUIsTUFBSXg0QixLQUFLLEdBQUd3NEIsTUFBTSxDQUFDakIsUUFBUCxLQUFvQnJoQyxTQUFwQixJQUFpQ3NpQyxNQUFNLENBQUNoQixTQUFQLEtBQXFCdGhDLFNBQXRELEdBQWtFMGMsWUFBbEUsR0FBNkV1bEIsV0FBVyxDQUFDcDZCLEdBQUcsQ0FBQzlHLElBQUosQ0FBU3VoQyxNQUFNLENBQUNqQixRQUFoQixFQUEwQmtCLE1BQTFCLENBQUQsRUFBb0NELE1BQU0sQ0FBQ2hCLFNBQVAsR0FBbUIsRUFBdkQsQ0FBcEc7QUFBQSxNQUNJa0IsY0FBYyxHQUFHRixNQUFNLENBQUNHLFFBQVAsS0FBb0J6aUMsU0FBcEIsR0FBZ0MsRUFBaEMsR0FBcUNzaUMsTUFBTSxDQUFDRyxRQUFQLENBQWdCLENBQWhCLElBQXFCLEVBRC9FO0FBQUEsTUFFSUMsY0FBYyxHQUFHSixNQUFNLENBQUNHLFFBQVAsS0FBb0J6aUMsU0FBcEIsR0FBZ0MsRUFBaEMsR0FBcUNzaUMsTUFBTSxDQUFDRyxRQUFQLENBQWdCLENBQWhCLElBQXFCLEVBRi9FO0FBQUEsTUFHSUUsT0FBTyxHQUFHTCxNQUFNLENBQUNLLE9BQVAsS0FBbUIzaUMsU0FBbkIsR0FBK0IsR0FBL0IsR0FBcUNzaUMsTUFBTSxDQUFDSyxPQUFQLEdBQWlCLEVBSHBFO0FBQUEsTUFJSW5CLFFBQVEsR0FBR2MsTUFBTSxDQUFDZCxRQUFQLEtBQW9CeGhDLFNBQXBCLEdBQWdDMGMsWUFBaEMsR0FBMkN3bEIsY0FBYyxDQUFDcjZCLEdBQUcsQ0FBQzlHLElBQUosQ0FBU3VoQyxNQUFNLENBQUNkLFFBQWhCLEVBQTBCb0IsTUFBMUIsQ0FBRCxDQUp4RTtBQUFBLE1BS0lDLE9BQU8sR0FBR1AsTUFBTSxDQUFDTyxPQUFQLEtBQW1CN2lDLFNBQW5CLEdBQStCLEdBQS9CLEdBQXFDc2lDLE1BQU0sQ0FBQ08sT0FBUCxHQUFpQixFQUxwRTtBQUFBLE1BTUlDLEtBQUssR0FBR1IsTUFBTSxDQUFDUSxLQUFQLEtBQWlCOWlDLFNBQWpCLEdBQTZCLEdBQTdCLEdBQW1Dc2lDLE1BQU0sQ0FBQ1EsS0FBUCxHQUFlLEVBTjlEO0FBQUEsTUFPSUMsR0FBRyxHQUFHVCxNQUFNLENBQUNTLEdBQVAsS0FBZS9pQyxTQUFmLEdBQTJCLEtBQTNCLEdBQW1Dc2lDLE1BQU0sQ0FBQ1MsR0FBUCxHQUFhLEVBUDFEOztBQVNBLFdBQVNDLFNBQVQsQ0FBbUJ6QyxTQUFuQixFQUE4QjtBQUM1QkEsSUFBQUEsU0FBUyxHQUFHRCxlQUFlLENBQUNDLFNBQUQsQ0FBM0I7QUFFQSxRQUFJRSxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0UsSUFBckI7QUFBQSxRQUNJQyxLQUFLLEdBQUdILFNBQVMsQ0FBQ0csS0FEdEI7QUFBQSxRQUVJQyxJQUFJLEdBQUdKLFNBQVMsQ0FBQ0ksSUFGckI7QUFBQSxRQUdJQyxNQUFNLEdBQUdMLFNBQVMsQ0FBQ0ssTUFIdkI7QUFBQSxRQUlJblQsSUFBSSxHQUFHOFMsU0FBUyxDQUFDOVMsSUFKckI7QUFBQSxRQUtJbUgsS0FBSyxHQUFHMkwsU0FBUyxDQUFDM0wsS0FMdEI7QUFBQSxRQU1JaU0sS0FBSyxHQUFHTixTQUFTLENBQUNNLEtBTnRCO0FBQUEsUUFPSUMsU0FBUyxHQUFHUCxTQUFTLENBQUNPLFNBUDFCO0FBQUEsUUFRSXp2QixJQUFJLEdBQUdrdkIsU0FBUyxDQUFDbHZCLElBUnJCO0FBQUEsUUFTSW1ELElBQUksR0FBRytyQixTQUFTLENBQUMvckIsSUFUckIsQ0FINEIsQ0FjNUI7O0FBQ0EsUUFBSUEsSUFBSSxLQUFLLEdBQWIsRUFBa0Jxc0IsS0FBSyxHQUFHLElBQVIsRUFBY3JzQixJQUFJLEdBQUcsR0FBckIsQ0FBbEIsQ0FFQTtBQUZBLFNBR0ssSUFBSSxDQUFDNHRCLFdBQVcsQ0FBQzV0QixJQUFELENBQWhCLEVBQXdCc3NCLFNBQVMsS0FBSzlnQyxTQUFkLEtBQTRCOGdDLFNBQVMsR0FBRyxFQUF4QyxHQUE2Q3p2QixJQUFJLEdBQUcsSUFBcEQsRUFBMERtRCxJQUFJLEdBQUcsR0FBakUsQ0FsQkQsQ0FvQjVCOztBQUNBLFFBQUlpWixJQUFJLElBQUtnVCxJQUFJLEtBQUssR0FBVCxJQUFnQkMsS0FBSyxLQUFLLEdBQXZDLEVBQTZDalQsSUFBSSxHQUFHLElBQVAsRUFBYWdULElBQUksR0FBRyxHQUFwQixFQUF5QkMsS0FBSyxHQUFHLEdBQWpDLENBckJqQixDQXVCNUI7QUFDQTs7QUFDQSxRQUFJMXhCLE1BQU0sR0FBRzR4QixNQUFNLEtBQUssR0FBWCxHQUFpQjRCLGNBQWpCLEdBQWtDNUIsTUFBTSxLQUFLLEdBQVgsSUFBa0IsU0FBUzErQixJQUFULENBQWNzUyxJQUFkLENBQWxCLEdBQXdDLE1BQU1BLElBQUksQ0FBQ21XLFdBQUwsRUFBOUMsR0FBbUUsRUFBbEg7QUFBQSxRQUNJc1ksTUFBTSxHQUFHckMsTUFBTSxLQUFLLEdBQVgsR0FBaUI4QixjQUFqQixHQUFrQyxPQUFPeGdDLElBQVAsQ0FBWXNTLElBQVosSUFBb0JxdUIsT0FBcEIsR0FBOEIsRUFEN0UsQ0F6QjRCLENBNEI1QjtBQUNBO0FBQ0E7O0FBQ0EsUUFBSUssVUFBVSxHQUFHZCxXQUFXLENBQUM1dEIsSUFBRCxDQUE1QjtBQUFBLFFBQ0kydUIsV0FBVyxHQUFHLGFBQWFqaEMsSUFBYixDQUFrQnNTLElBQWxCLENBRGxCLENBL0I0QixDQWtDNUI7QUFDQTtBQUNBO0FBQ0E7O0FBQ0Fzc0IsSUFBQUEsU0FBUyxHQUFHQSxTQUFTLEtBQUs5Z0MsU0FBZCxHQUEwQixDQUExQixHQUNOLFNBQVNrQyxJQUFULENBQWNzUyxJQUFkLElBQXNCM0csSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWTdkLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEVBQVQsRUFBYWd6QixTQUFiLENBQVosQ0FBdEIsR0FDQWp6QixJQUFJLENBQUM2ZCxHQUFMLENBQVMsQ0FBVCxFQUFZN2QsSUFBSSxDQUFDQyxHQUFMLENBQVMsRUFBVCxFQUFhZ3pCLFNBQWIsQ0FBWixDQUZOOztBQUlBLGFBQVNyVyxNQUFULENBQWdCcnJCLEtBQWhCLEVBQXVCO0FBQ3JCLFVBQUlna0MsV0FBVyxHQUFHcDBCLE1BQWxCO0FBQUEsVUFDSXEwQixXQUFXLEdBQUdKLE1BRGxCO0FBQUEsVUFFSTNpQyxDQUZKO0FBQUEsVUFFT29CLENBRlA7QUFBQSxVQUVVOEMsQ0FGVjs7QUFJQSxVQUFJZ1EsSUFBSSxLQUFLLEdBQWIsRUFBa0I7QUFDaEI2dUIsUUFBQUEsV0FBVyxHQUFHSCxVQUFVLENBQUM5akMsS0FBRCxDQUFWLEdBQW9CaWtDLFdBQWxDO0FBQ0Fqa0MsUUFBQUEsS0FBSyxHQUFHLEVBQVI7QUFDRCxPQUhELE1BR087QUFDTEEsUUFBQUEsS0FBSyxHQUFHLENBQUNBLEtBQVQsQ0FESyxDQUdMOztBQUNBLFlBQUlra0MsYUFBYSxHQUFHbGtDLEtBQUssR0FBRyxDQUFSLElBQWEsSUFBSUEsS0FBSixHQUFZLENBQTdDLENBSkssQ0FNTDs7QUFDQUEsUUFBQUEsS0FBSyxHQUFHcXNCLEtBQUssQ0FBQ3JzQixLQUFELENBQUwsR0FBZTJqQyxHQUFmLEdBQXFCRyxVQUFVLENBQUNyMUIsSUFBSSxDQUFDbWxCLEdBQUwsQ0FBUzV6QixLQUFULENBQUQsRUFBa0IwaEMsU0FBbEIsQ0FBdkMsQ0FQSyxDQVNMOztBQUNBLFlBQUl6dkIsSUFBSixFQUFValMsS0FBSyxHQUFHK2lDLFVBQVUsQ0FBQy9pQyxLQUFELENBQWxCLENBVkwsQ0FZTDs7QUFDQSxZQUFJa2tDLGFBQWEsSUFBSSxDQUFDbGtDLEtBQUQsS0FBVyxDQUE1QixJQUFpQ3VoQyxJQUFJLEtBQUssR0FBOUMsRUFBbUQyQyxhQUFhLEdBQUcsS0FBaEIsQ0FiOUMsQ0FlTDs7QUFDQUYsUUFBQUEsV0FBVyxHQUFHLENBQUNFLGFBQWEsR0FBSTNDLElBQUksS0FBSyxHQUFULEdBQWVBLElBQWYsR0FBc0JtQyxLQUExQixHQUFtQ25DLElBQUksS0FBSyxHQUFULElBQWdCQSxJQUFJLEtBQUssR0FBekIsR0FBK0IsRUFBL0IsR0FBb0NBLElBQXJGLElBQTZGeUMsV0FBM0c7QUFDQUMsUUFBQUEsV0FBVyxHQUFHLENBQUM3dUIsSUFBSSxLQUFLLEdBQVQsR0FBZTZ0QixRQUFRLENBQUMsSUFBSVgsY0FBYyxHQUFHLENBQXRCLENBQXZCLEdBQWtELEVBQW5ELElBQXlEMkIsV0FBekQsSUFBd0VDLGFBQWEsSUFBSTNDLElBQUksS0FBSyxHQUExQixHQUFnQyxHQUFoQyxHQUFzQyxFQUE5RyxDQUFkLENBakJLLENBbUJMO0FBQ0E7O0FBQ0EsWUFBSXdDLFdBQUosRUFBaUI7QUFDZjdpQyxVQUFBQSxDQUFDLEdBQUcsQ0FBQyxDQUFMLEVBQVFvQixDQUFDLEdBQUd0QyxLQUFLLENBQUM4QixNQUFsQjs7QUFDQSxpQkFBTyxFQUFFWixDQUFGLEdBQU1vQixDQUFiLEVBQWdCO0FBQ2QsZ0JBQUk4QyxDQUFDLEdBQUdwRixLQUFLLENBQUNta0MsVUFBTixDQUFpQmpqQyxDQUFqQixDQUFKLEVBQXlCLEtBQUtrRSxDQUFMLElBQVVBLENBQUMsR0FBRyxFQUEzQyxFQUErQztBQUM3QzYrQixjQUFBQSxXQUFXLEdBQUcsQ0FBQzcrQixDQUFDLEtBQUssRUFBTixHQUFXbStCLE9BQU8sR0FBR3ZqQyxLQUFLLENBQUMwQyxLQUFOLENBQVl4QixDQUFDLEdBQUcsQ0FBaEIsQ0FBckIsR0FBMENsQixLQUFLLENBQUMwQyxLQUFOLENBQVl4QixDQUFaLENBQTNDLElBQTZEK2lDLFdBQTNFO0FBQ0Fqa0MsY0FBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUMwQyxLQUFOLENBQVksQ0FBWixFQUFleEIsQ0FBZixDQUFSO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7QUFDRixPQXZDb0IsQ0F5Q3JCOzs7QUFDQSxVQUFJdWdDLEtBQUssSUFBSSxDQUFDcFQsSUFBZCxFQUFvQnJ1QixLQUFLLEdBQUcwSyxLQUFLLENBQUMxSyxLQUFELEVBQVFrYixRQUFSLENBQWIsQ0ExQ0MsQ0E0Q3JCOztBQUNBLFVBQUlwWixNQUFNLEdBQUdraUMsV0FBVyxDQUFDbGlDLE1BQVosR0FBcUI5QixLQUFLLENBQUM4QixNQUEzQixHQUFvQ21pQyxXQUFXLENBQUNuaUMsTUFBN0Q7QUFBQSxVQUNJc2lDLE9BQU8sR0FBR3RpQyxNQUFNLEdBQUcwekIsS0FBVCxHQUFpQixJQUFJejBCLEtBQUosQ0FBVXkwQixLQUFLLEdBQUcxekIsTUFBUixHQUFpQixDQUEzQixFQUE4QnlRLElBQTlCLENBQW1DOHVCLElBQW5DLENBQWpCLEdBQTRELEVBRDFFLENBN0NxQixDQWdEckI7O0FBQ0EsVUFBSUksS0FBSyxJQUFJcFQsSUFBYixFQUFtQnJ1QixLQUFLLEdBQUcwSyxLQUFLLENBQUMwNUIsT0FBTyxHQUFHcGtDLEtBQVgsRUFBa0Jva0MsT0FBTyxDQUFDdGlDLE1BQVIsR0FBaUIwekIsS0FBSyxHQUFHeU8sV0FBVyxDQUFDbmlDLE1BQXJDLEdBQThDb1osUUFBaEUsQ0FBYixFQUF3RmtwQixPQUFPLEdBQUcsRUFBbEcsQ0FqREUsQ0FtRHJCOztBQUNBLGNBQVE5QyxLQUFSO0FBQ0UsYUFBSyxHQUFMO0FBQVV0aEMsVUFBQUEsS0FBSyxHQUFHZ2tDLFdBQVcsR0FBR2hrQyxLQUFkLEdBQXNCaWtDLFdBQXRCLEdBQW9DRyxPQUE1QztBQUFxRDs7QUFDL0QsYUFBSyxHQUFMO0FBQVVwa0MsVUFBQUEsS0FBSyxHQUFHZ2tDLFdBQVcsR0FBR0ksT0FBZCxHQUF3QnBrQyxLQUF4QixHQUFnQ2lrQyxXQUF4QztBQUFxRDs7QUFDL0QsYUFBSyxHQUFMO0FBQVVqa0MsVUFBQUEsS0FBSyxHQUFHb2tDLE9BQU8sQ0FBQzFoQyxLQUFSLENBQWMsQ0FBZCxFQUFpQlosTUFBTSxHQUFHc2lDLE9BQU8sQ0FBQ3RpQyxNQUFSLElBQWtCLENBQTVDLElBQWlEa2lDLFdBQWpELEdBQStEaGtDLEtBQS9ELEdBQXVFaWtDLFdBQXZFLEdBQXFGRyxPQUFPLENBQUMxaEMsS0FBUixDQUFjWixNQUFkLENBQTdGO0FBQW9IOztBQUM5SDtBQUFTOUIsVUFBQUEsS0FBSyxHQUFHb2tDLE9BQU8sR0FBR0osV0FBVixHQUF3QmhrQyxLQUF4QixHQUFnQ2lrQyxXQUF4QztBQUFxRDtBQUpoRTs7QUFPQSxhQUFPN0IsUUFBUSxDQUFDcGlDLEtBQUQsQ0FBZjtBQUNEOztBQUVEcXJCLElBQUFBLE1BQU0sQ0FBQzVvQixRQUFQLEdBQWtCLFlBQVc7QUFDM0IsYUFBTzArQixTQUFTLEdBQUcsRUFBbkI7QUFDRCxLQUZEOztBQUlBLFdBQU85VixNQUFQO0FBQ0Q7O0FBRUQsV0FBU2daLFlBQVQsQ0FBc0JsRCxTQUF0QixFQUFpQ25oQyxLQUFqQyxFQUF3QztBQUN0QyxRQUFJdUQsQ0FBQyxHQUFHcWdDLFNBQVMsRUFBRXpDLFNBQVMsR0FBR0QsZUFBZSxDQUFDQyxTQUFELENBQTNCLEVBQXdDQSxTQUFTLENBQUMvckIsSUFBVixHQUFpQixHQUF6RCxFQUE4RCtyQixTQUFoRSxFQUFqQjtBQUFBLFFBQ0kvbEIsQ0FBQyxHQUFHM00sSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQUMsQ0FBVixFQUFhN2QsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZRCxJQUFJLENBQUMyZSxLQUFMLENBQVc0VSxRQUFRLENBQUNoaUMsS0FBRCxDQUFSLEdBQWtCLENBQTdCLENBQVosQ0FBYixJQUE2RCxDQURyRTtBQUFBLFFBRUk2RSxDQUFDLEdBQUc0SixJQUFJLENBQUN5ZCxHQUFMLENBQVMsRUFBVCxFQUFhLENBQUM5USxDQUFkLENBRlI7QUFBQSxRQUdJeEwsTUFBTSxHQUFHcXpCLFFBQVEsQ0FBQyxJQUFJN25CLENBQUMsR0FBRyxDQUFULENBSHJCO0FBSUEsV0FBTyxVQUFTcGIsS0FBVCxFQUFnQjtBQUNyQixhQUFPdUQsQ0FBQyxDQUFDc0IsQ0FBQyxHQUFHN0UsS0FBTCxDQUFELEdBQWU0UCxNQUF0QjtBQUNELEtBRkQ7QUFHRDs7QUFFRCxTQUFPO0FBQ0x5YixJQUFBQSxNQUFNLEVBQUV1WSxTQURIO0FBRUxTLElBQUFBLFlBQVksRUFBRUE7QUFGVCxHQUFQO0FBSUQsQzs7QUNuSkQ7QUFFQSxJQUFJbkIsb0JBQUo7QUFDTyxJQUFJN1gsTUFBSjtBQUNBLElBQUlnWixZQUFKO0FBRVBFLGFBQWEsQ0FBQztBQUNackMsRUFBQUEsU0FBUyxFQUFFLEdBREM7QUFFWkQsRUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBRCxDQUZFO0FBR1pvQixFQUFBQSxRQUFRLEVBQUUsQ0FBQyxHQUFELEVBQU0sRUFBTjtBQUhFLENBQUQsQ0FBYjtBQU1lLFNBQVNrQixhQUFULENBQXVCcGtCLFVBQXZCLEVBQW1DO0FBQ2hEK2lCLEVBQUFBLG9CQUFNLEdBQUdvQixNQUFZLENBQUNua0IsVUFBRCxDQUFyQjtBQUNBa0wsRUFBQUEsTUFBTSxHQUFHNlgsb0JBQU0sQ0FBQzdYLE1BQWhCO0FBQ0FnWixFQUFBQSxZQUFZLEdBQUduQixvQkFBTSxDQUFDbUIsWUFBdEI7QUFDQSxTQUFPbkIsb0JBQVA7QUFDRCxDOztBQ2pCRDtBQUVBLDZCQUFlLHdCQUFTMUMsSUFBVCxFQUFlbFUsR0FBZixFQUFvQjtBQUNqQ2tVLEVBQUFBLElBQUksR0FBRy94QixJQUFJLENBQUNtbEIsR0FBTCxDQUFTNE0sSUFBVCxDQUFQLEVBQXVCbFUsR0FBRyxHQUFHN2QsSUFBSSxDQUFDbWxCLEdBQUwsQ0FBU3RILEdBQVQsSUFBZ0JrVSxJQUE3QztBQUNBLFNBQU8veEIsSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWTBWLFFBQVEsQ0FBQzFWLEdBQUQsQ0FBUixHQUFnQjBWLFFBQVEsQ0FBQ3hCLElBQUQsQ0FBcEMsSUFBOEMsQ0FBckQ7QUFDRCxDOztBQ0xEO0FBRUEsNkJBQWUsd0JBQVNBLElBQVQsRUFBZTtBQUM1QixTQUFPL3hCLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVksQ0FBQzBWLFFBQVEsQ0FBQ3Z6QixJQUFJLENBQUNtbEIsR0FBTCxDQUFTNE0sSUFBVCxDQUFELENBQXJCLENBQVA7QUFDRCxDOztBQ0pEO0FBQ0E7QUFFZSxTQUFTbUUsVUFBVCxDQUFvQmxnQyxLQUFwQixFQUEyQndXLElBQTNCLEVBQWlDdlgsS0FBakMsRUFBd0N5OUIsU0FBeEMsRUFBbUQ7QUFDaEUsTUFBSVgsSUFBSSxHQUFHTSxRQUFRLENBQUNyOEIsS0FBRCxFQUFRd1csSUFBUixFQUFjdlgsS0FBZCxDQUFuQjtBQUFBLE1BQ0lnK0IsU0FESjtBQUVBUCxFQUFBQSxTQUFTLEdBQUdELGVBQWUsQ0FBQ0MsU0FBUyxJQUFJLElBQWIsR0FBb0IsSUFBcEIsR0FBMkJBLFNBQTVCLENBQTNCOztBQUNBLFVBQVFBLFNBQVMsQ0FBQy9yQixJQUFsQjtBQUNFLFNBQUssR0FBTDtBQUFVO0FBQ1IsWUFBSXBWLEtBQUssR0FBR3lPLElBQUksQ0FBQzZkLEdBQUwsQ0FBUzdkLElBQUksQ0FBQ21sQixHQUFMLENBQVNudkIsS0FBVCxDQUFULEVBQTBCZ0ssSUFBSSxDQUFDbWxCLEdBQUwsQ0FBUzNZLElBQVQsQ0FBMUIsQ0FBWjtBQUNBLFlBQUlrbUIsU0FBUyxDQUFDTyxTQUFWLElBQXVCLElBQXZCLElBQStCLENBQUNyVixLQUFLLENBQUNxVixTQUFTLEdBQUcrQyxlQUFlLENBQUNqRSxJQUFELEVBQU94Z0MsS0FBUCxDQUE1QixDQUF6QyxFQUFxRm1oQyxTQUFTLENBQUNPLFNBQVYsR0FBc0JBLFNBQXRCO0FBQ3JGLGVBQU8yQyxZQUFZLENBQUNsRCxTQUFELEVBQVluaEMsS0FBWixDQUFuQjtBQUNEOztBQUNELFNBQUssRUFBTDtBQUNBLFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUNBLFNBQUssR0FBTDtBQUFVO0FBQ1IsWUFBSW1oQyxTQUFTLENBQUNPLFNBQVYsSUFBdUIsSUFBdkIsSUFBK0IsQ0FBQ3JWLEtBQUssQ0FBQ3FWLFNBQVMsR0FBR2dELGNBQWMsQ0FBQ2xFLElBQUQsRUFBTy94QixJQUFJLENBQUM2ZCxHQUFMLENBQVM3ZCxJQUFJLENBQUNtbEIsR0FBTCxDQUFTbnZCLEtBQVQsQ0FBVCxFQUEwQmdLLElBQUksQ0FBQ21sQixHQUFMLENBQVMzWSxJQUFULENBQTFCLENBQVAsQ0FBM0IsQ0FBekMsRUFBd0hrbUIsU0FBUyxDQUFDTyxTQUFWLEdBQXNCQSxTQUFTLElBQUlQLFNBQVMsQ0FBQy9yQixJQUFWLEtBQW1CLEdBQXZCLENBQS9CO0FBQ3hIO0FBQ0Q7O0FBQ0QsU0FBSyxHQUFMO0FBQ0EsU0FBSyxHQUFMO0FBQVU7QUFDUixZQUFJK3JCLFNBQVMsQ0FBQ08sU0FBVixJQUF1QixJQUF2QixJQUErQixDQUFDclYsS0FBSyxDQUFDcVYsU0FBUyxHQUFHOEMsY0FBYyxDQUFDaEUsSUFBRCxDQUEzQixDQUF6QyxFQUE2RVcsU0FBUyxDQUFDTyxTQUFWLEdBQXNCQSxTQUFTLEdBQUcsQ0FBQ1AsU0FBUyxDQUFDL3JCLElBQVYsS0FBbUIsR0FBcEIsSUFBMkIsQ0FBN0Q7QUFDN0U7QUFDRDtBQWxCSDs7QUFvQkEsU0FBT2lXLE1BQU0sQ0FBQzhWLFNBQUQsQ0FBYjtBQUNELEM7O0FDNUJEO0FBQ0E7QUFDQTtBQUNBO0FBRU8sU0FBU3lELFNBQVQsQ0FBbUJwbEIsS0FBbkIsRUFBMEI7QUFDL0IsTUFBSXdmLE1BQU0sR0FBR3hmLEtBQUssQ0FBQ3dmLE1BQW5COztBQUVBeGYsRUFBQUEsS0FBSyxDQUFDK2dCLEtBQU4sR0FBYyxVQUFTNzhCLEtBQVQsRUFBZ0I7QUFDNUIsUUFBSTJELENBQUMsR0FBRzIzQixNQUFNLEVBQWQ7QUFDQSxXQUFPdUIsS0FBSyxDQUFDbDVCLENBQUMsQ0FBQyxDQUFELENBQUYsRUFBT0EsQ0FBQyxDQUFDQSxDQUFDLENBQUN2RixNQUFGLEdBQVcsQ0FBWixDQUFSLEVBQXdCNEIsS0FBSyxJQUFJLElBQVQsR0FBZ0IsRUFBaEIsR0FBcUJBLEtBQTdDLENBQVo7QUFDRCxHQUhEOztBQUtBOGIsRUFBQUEsS0FBSyxDQUFDbWxCLFVBQU4sR0FBbUIsVUFBU2poQyxLQUFULEVBQWdCeTlCLFNBQWhCLEVBQTJCO0FBQzVDLFFBQUk5NUIsQ0FBQyxHQUFHMjNCLE1BQU0sRUFBZDtBQUNBLFdBQU8yRixVQUFVLENBQUN0OUIsQ0FBQyxDQUFDLENBQUQsQ0FBRixFQUFPQSxDQUFDLENBQUNBLENBQUMsQ0FBQ3ZGLE1BQUYsR0FBVyxDQUFaLENBQVIsRUFBd0I0QixLQUFLLElBQUksSUFBVCxHQUFnQixFQUFoQixHQUFxQkEsS0FBN0MsRUFBb0R5OUIsU0FBcEQsQ0FBakI7QUFDRCxHQUhEOztBQUtBM2hCLEVBQUFBLEtBQUssQ0FBQ3FsQixJQUFOLEdBQWEsVUFBU25oQyxLQUFULEVBQWdCO0FBQzNCLFFBQUlBLEtBQUssSUFBSSxJQUFiLEVBQW1CQSxLQUFLLEdBQUcsRUFBUjtBQUVuQixRQUFJMkQsQ0FBQyxHQUFHMjNCLE1BQU0sRUFBZDtBQUNBLFFBQUl4eEIsRUFBRSxHQUFHLENBQVQ7QUFDQSxRQUFJQyxFQUFFLEdBQUdwRyxDQUFDLENBQUN2RixNQUFGLEdBQVcsQ0FBcEI7QUFDQSxRQUFJMkMsS0FBSyxHQUFHNEMsQ0FBQyxDQUFDbUcsRUFBRCxDQUFiO0FBQ0EsUUFBSXlOLElBQUksR0FBRzVULENBQUMsQ0FBQ29HLEVBQUQsQ0FBWjtBQUNBLFFBQUlxM0IsT0FBSjtBQUNBLFFBQUl0RSxJQUFKO0FBQ0EsUUFBSXVFLE9BQU8sR0FBRyxFQUFkOztBQUVBLFFBQUk5cEIsSUFBSSxHQUFHeFcsS0FBWCxFQUFrQjtBQUNoQis3QixNQUFBQSxJQUFJLEdBQUcvN0IsS0FBUCxFQUFjQSxLQUFLLEdBQUd3VyxJQUF0QixFQUE0QkEsSUFBSSxHQUFHdWxCLElBQW5DO0FBQ0FBLE1BQUFBLElBQUksR0FBR2h6QixFQUFQLEVBQVdBLEVBQUUsR0FBR0MsRUFBaEIsRUFBb0JBLEVBQUUsR0FBRyt5QixJQUF6QjtBQUNEOztBQUVELFdBQU91RSxPQUFPLEtBQUssQ0FBbkIsRUFBc0I7QUFDcEJ2RSxNQUFBQSxJQUFJLEdBQUdDLGFBQWEsQ0FBQ2g4QixLQUFELEVBQVF3VyxJQUFSLEVBQWN2WCxLQUFkLENBQXBCOztBQUNBLFVBQUk4OEIsSUFBSSxLQUFLc0UsT0FBYixFQUFzQjtBQUNwQno5QixRQUFBQSxDQUFDLENBQUNtRyxFQUFELENBQUQsR0FBUS9JLEtBQVI7QUFDQTRDLFFBQUFBLENBQUMsQ0FBQ29HLEVBQUQsQ0FBRCxHQUFRd04sSUFBUjtBQUNBLGVBQU8rakIsTUFBTSxDQUFDMzNCLENBQUQsQ0FBYjtBQUNELE9BSkQsTUFJTyxJQUFJbTVCLElBQUksR0FBRyxDQUFYLEVBQWM7QUFDbkIvN0IsUUFBQUEsS0FBSyxHQUFHZ0ssSUFBSSxDQUFDMmUsS0FBTCxDQUFXM29CLEtBQUssR0FBRys3QixJQUFuQixJQUEyQkEsSUFBbkM7QUFDQXZsQixRQUFBQSxJQUFJLEdBQUd4TSxJQUFJLENBQUN1MkIsSUFBTCxDQUFVL3BCLElBQUksR0FBR3VsQixJQUFqQixJQUF5QkEsSUFBaEM7QUFDRCxPQUhNLE1BR0EsSUFBSUEsSUFBSSxHQUFHLENBQVgsRUFBYztBQUNuQi83QixRQUFBQSxLQUFLLEdBQUdnSyxJQUFJLENBQUN1MkIsSUFBTCxDQUFVdmdDLEtBQUssR0FBRys3QixJQUFsQixJQUEwQkEsSUFBbEM7QUFDQXZsQixRQUFBQSxJQUFJLEdBQUd4TSxJQUFJLENBQUMyZSxLQUFMLENBQVduUyxJQUFJLEdBQUd1bEIsSUFBbEIsSUFBMEJBLElBQWpDO0FBQ0QsT0FITSxNQUdBO0FBQ0w7QUFDRDs7QUFDRHNFLE1BQUFBLE9BQU8sR0FBR3RFLElBQVY7QUFDRDs7QUFFRCxXQUFPaGhCLEtBQVA7QUFDRCxHQXBDRDs7QUFzQ0EsU0FBT0EsS0FBUDtBQUNEO0FBRWMsU0FBUzZOLGFBQVQsR0FBa0I7QUFDL0IsTUFBSTdOLEtBQUssR0FBR3dnQixVQUFVLEVBQXRCOztBQUVBeGdCLEVBQUFBLEtBQUssQ0FBQzlYLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU9BLElBQUksQ0FBQzhYLEtBQUQsRUFBUTZOLGFBQU0sRUFBZCxDQUFYO0FBQ0QsR0FGRDs7QUFJQTRTLEVBQUFBLFNBQVMsQ0FBQ3YvQixLQUFWLENBQWdCOGUsS0FBaEIsRUFBdUIvZSxTQUF2QjtBQUVBLFNBQU9ta0MsU0FBUyxDQUFDcGxCLEtBQUQsQ0FBaEI7QUFDRCxDOzs7Ozs7Ozs7Ozs7OztBQ3JFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTaWdCLHNCQUFULEdBQXVCO0FBQ3JCLE1BQUkyRixFQUFFLEdBQUcsQ0FBVDtBQUFBLE1BQ0lDLEVBQUUsR0FBRyxDQURUO0FBQUEsTUFFSTdwQixFQUZKO0FBQUEsTUFHSUMsRUFISjtBQUFBLE1BSUk2cEIsR0FKSjtBQUFBLE1BS0kvbUIsU0FMSjtBQUFBLE1BTUk0aEIsWUFBWSxHQUFHN2lCLG1CQU5uQjtBQUFBLE1BT0lpaUIsS0FBSyxHQUFHLEtBUFo7QUFBQSxNQVFJQyxPQVJKOztBQVVBLFdBQVNoZ0IsS0FBVCxDQUFlcFcsQ0FBZixFQUFrQjtBQUNoQixXQUFPQSxDQUFDLElBQUksSUFBTCxJQUFhaWpCLEtBQUssQ0FBQ2pqQixDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixDQUFsQixHQUE2Qm8yQixPQUE3QixHQUF1Q1csWUFBWSxDQUFDbUYsR0FBRyxLQUFLLENBQVIsR0FBWSxHQUFaLElBQW1CbDhCLENBQUMsR0FBRyxDQUFDbVYsU0FBUyxDQUFDblYsQ0FBRCxDQUFULEdBQWVvUyxFQUFoQixJQUFzQjhwQixHQUExQixFQUErQi9GLEtBQUssR0FBRzl3QixJQUFJLENBQUM2ZCxHQUFMLENBQVMsQ0FBVCxFQUFZN2QsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZdEYsQ0FBWixDQUFaLENBQUgsR0FBaUNBLENBQXhGLENBQUQsQ0FBMUQ7QUFDRDs7QUFFRG9XLEVBQUFBLEtBQUssQ0FBQ3dmLE1BQU4sR0FBZSxVQUFTLzFCLENBQVQsRUFBWTtBQUFBOztBQUN6QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQixRQUFXbUgsQ0FBWCw2Q0FBQ204QixFQUFELGFBQUtDLEVBQUwsb0JBQWM3cEIsRUFBRSxHQUFHK0MsU0FBUyxDQUFDNm1CLEVBQUUsR0FBRyxDQUFDQSxFQUFQLENBQTVCLEVBQXdDM3BCLEVBQUUsR0FBRzhDLFNBQVMsQ0FBQzhtQixFQUFFLEdBQUcsQ0FBQ0EsRUFBUCxDQUF0RCxFQUFrRUMsR0FBRyxHQUFHOXBCLEVBQUUsS0FBS0MsRUFBUCxHQUFZLENBQVosR0FBZ0IsS0FBS0EsRUFBRSxHQUFHRCxFQUFWLENBQXhGLEVBQXVHZ0UsS0FBM0gsSUFBb0ksQ0FBQzRsQixFQUFELEVBQUtDLEVBQUwsQ0FBM0k7QUFDRCxHQUZEOztBQUlBN2xCLEVBQUFBLEtBQUssQ0FBQytmLEtBQU4sR0FBYyxVQUFTdDJCLENBQVQsRUFBWTtBQUN4QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQnk5QixLQUFLLEdBQUcsQ0FBQyxDQUFDdDJCLENBQVYsRUFBYXVXLEtBQWpDLElBQTBDK2YsS0FBakQ7QUFDRCxHQUZEOztBQUlBL2YsRUFBQUEsS0FBSyxDQUFDMmdCLFlBQU4sR0FBcUIsVUFBU2wzQixDQUFULEVBQVk7QUFDL0IsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0JxK0IsWUFBWSxHQUFHbDNCLENBQWYsRUFBa0J1VyxLQUF0QyxJQUErQzJnQixZQUF0RDtBQUNELEdBRkQ7O0FBSUEsV0FBU2xCLEtBQVQsQ0FBZWxRLFdBQWYsRUFBNEI7QUFDMUIsV0FBTyxVQUFTOWxCLENBQVQsRUFBWTtBQUFBOztBQUNqQixVQUFJbTJCLEVBQUosRUFBUUMsRUFBUjtBQUNBLGFBQU81K0IsU0FBUyxDQUFDcUIsTUFBVixJQUFvQixTQUFXbUgsQ0FBWCw4Q0FBQ20yQixFQUFELGFBQUtDLEVBQUwscUJBQWNjLFlBQVksR0FBR3BSLFdBQVcsQ0FBQ3FRLEVBQUQsRUFBS0MsRUFBTCxDQUF4QyxFQUFrRDdmLEtBQXRFLElBQStFLENBQUMyZ0IsWUFBWSxDQUFDLENBQUQsQ0FBYixFQUFrQkEsWUFBWSxDQUFDLENBQUQsQ0FBOUIsQ0FBdEY7QUFDRCxLQUhEO0FBSUQ7O0FBRUQzZ0IsRUFBQUEsS0FBSyxDQUFDeWYsS0FBTixHQUFjQSxLQUFLLENBQUNsUSxLQUFELENBQW5CO0FBRUF2UCxFQUFBQSxLQUFLLENBQUNzZ0IsVUFBTixHQUFtQmIsS0FBSyxDQUFDTCxLQUFELENBQXhCOztBQUVBcGYsRUFBQUEsS0FBSyxDQUFDZ2dCLE9BQU4sR0FBZ0IsVUFBU3YyQixDQUFULEVBQVk7QUFDMUIsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0IwOUIsT0FBTyxHQUFHdjJCLENBQVYsRUFBYXVXLEtBQWpDLElBQTBDZ2dCLE9BQWpEO0FBQ0QsR0FGRDs7QUFJQSxTQUFPLFVBQVNycUIsQ0FBVCxFQUFZO0FBQ2pCb0osSUFBQUEsU0FBUyxHQUFHcEosQ0FBWixFQUFlcUcsRUFBRSxHQUFHckcsQ0FBQyxDQUFDaXdCLEVBQUQsQ0FBckIsRUFBMkIzcEIsRUFBRSxHQUFHdEcsQ0FBQyxDQUFDa3dCLEVBQUQsQ0FBakMsRUFBdUNDLEdBQUcsR0FBRzlwQixFQUFFLEtBQUtDLEVBQVAsR0FBWSxDQUFaLEdBQWdCLEtBQUtBLEVBQUUsR0FBR0QsRUFBVixDQUE3RDtBQUNBLFdBQU9nRSxLQUFQO0FBQ0QsR0FIRDtBQUlEOztBQUVNLFNBQVM5WCxlQUFULENBQWNqQyxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QjtBQUNuQyxTQUFPQSxNQUFNLENBQ1JzNUIsTUFERSxDQUNLdjVCLE1BQU0sQ0FBQ3U1QixNQUFQLEVBREwsRUFFRm1CLFlBRkUsQ0FFVzE2QixNQUFNLENBQUMwNkIsWUFBUCxFQUZYLEVBR0ZaLEtBSEUsQ0FHSTk1QixNQUFNLENBQUM4NUIsS0FBUCxFQUhKLEVBSUZDLE9BSkUsQ0FJTS81QixNQUFNLENBQUMrNUIsT0FBUCxFQUpOLENBQVA7QUFLRDtBQUVjLFNBQVMrRixVQUFULEdBQXNCO0FBQ25DLE1BQUkvbEIsS0FBSyxHQUFHb2xCLFNBQVMsQ0FBQ25GLHNCQUFXLEdBQUduaUIsbUJBQUgsQ0FBWixDQUFyQjs7QUFFQWtDLEVBQUFBLEtBQUssQ0FBQzlYLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU9BLGVBQUksQ0FBQzhYLEtBQUQsRUFBUStsQixVQUFVLEVBQWxCLENBQVg7QUFDRCxHQUZEOztBQUlBLFNBQU9yRiwyQkFBQSxDQUF1QjFnQixLQUF2QixFQUE4Qi9lLFNBQTlCLENBQVA7QUFDRDtBQUVNLFNBQVMra0MsYUFBVCxHQUF5QjtBQUM5QixNQUFJaG1CLEtBQUssR0FBR3lsQixPQUFPLENBQUN4RixzQkFBVyxFQUFaLENBQVAsQ0FBdUJULE1BQXZCLENBQThCLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FBOUIsQ0FBWjs7QUFFQXhmLEVBQUFBLEtBQUssQ0FBQzlYLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU9BLGVBQUksQ0FBQzhYLEtBQUQsRUFBUWdtQixhQUFhLEVBQXJCLENBQUosQ0FBNkJDLElBQTdCLENBQWtDam1CLEtBQUssQ0FBQ2ltQixJQUFOLEVBQWxDLENBQVA7QUFDRCxHQUZEOztBQUlBLFNBQU92RixnQkFBZ0IsQ0FBQ3gvQixLQUFqQixDQUF1QjhlLEtBQXZCLEVBQThCL2UsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBU2lsQyxnQkFBVCxHQUE0QjtBQUNqQyxNQUFJbG1CLEtBQUssR0FBRzBsQixTQUFTLENBQUN6RixzQkFBVyxFQUFaLENBQXJCOztBQUVBamdCLEVBQUFBLEtBQUssQ0FBQzlYLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU9BLGVBQUksQ0FBQzhYLEtBQUQsRUFBUWttQixnQkFBZ0IsRUFBeEIsQ0FBSixDQUFnQ2o1QixRQUFoQyxDQUF5QytTLEtBQUssQ0FBQy9TLFFBQU4sRUFBekMsQ0FBUDtBQUNELEdBRkQ7O0FBSUEsU0FBT3l6QixnQkFBZ0IsQ0FBQ3gvQixLQUFqQixDQUF1QjhlLEtBQXZCLEVBQThCL2UsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBU2tsQyxhQUFULEdBQXlCO0FBQzlCLE1BQUlubUIsS0FBSyxHQUFHMmxCLE1BQU0sQ0FBQzFGLHNCQUFXLEVBQVosQ0FBbEI7O0FBRUFqZ0IsRUFBQUEsS0FBSyxDQUFDOVgsSUFBTixHQUFhLFlBQVc7QUFDdEIsV0FBT0EsZUFBSSxDQUFDOFgsS0FBRCxFQUFRbW1CLGFBQWEsRUFBckIsQ0FBSixDQUE2QjNELFFBQTdCLENBQXNDeGlCLEtBQUssQ0FBQ3dpQixRQUFOLEVBQXRDLENBQVA7QUFDRCxHQUZEOztBQUlBLFNBQU85QixnQkFBZ0IsQ0FBQ3gvQixLQUFqQixDQUF1QjhlLEtBQXZCLEVBQThCL2UsU0FBOUIsQ0FBUDtBQUNEO0FBRU0sU0FBU21sQyxjQUFULEdBQTBCO0FBQy9CLFNBQU9ELGFBQWEsQ0FBQ2psQyxLQUFkLENBQW9CLElBQXBCLEVBQTBCRCxTQUExQixFQUFxQ3VoQyxRQUFyQyxDQUE4QyxHQUE5QyxDQUFQO0FBQ0QsQzs7QUMxR0Q7QUFLQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBS0E7QUFLQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQVFBO0FBSUE7OztBQ25FTyxJQUFNNkYsT0FBTyxHQUFHcDVCLElBQUksQ0FBQzRPLEVBQUwsR0FBVSxHQUExQjtBQUNBLElBQU1ELFlBQU8sR0FBRyxNQUFNM08sSUFBSSxDQUFDNE8sRUFBM0IsQzs7QUNEUDtBQUNBO0FBQ0E7QUFFQSxJQUFJcWUsQ0FBQyxHQUFHLENBQUMsT0FBVDtBQUFBLElBQ0lvTSxDQUFDLEdBQUcsQ0FBQyxPQURUO0FBQUEsSUFFSUMsQ0FBQyxHQUFHLENBQUMsT0FGVDtBQUFBLElBR0lDLENBQUMsR0FBRyxDQUFDLE9BSFQ7QUFBQSxJQUlJM1AsQ0FBQyxHQUFHLENBQUMsT0FKVDtBQUFBLElBS0k0UCxFQUFFLEdBQUc1UCxDQUFDLEdBQUcyUCxDQUxiO0FBQUEsSUFNSUUsRUFBRSxHQUFHN1AsQ0FBQyxHQUFHeVAsQ0FOYjtBQUFBLElBT0lLLEtBQUssR0FBR0wsQ0FBQyxHQUFHQyxDQUFKLEdBQVFDLENBQUMsR0FBR3RNLENBUHhCOztBQVNBLFNBQVMwTSxnQkFBVCxDQUEwQmhtQyxDQUExQixFQUE2QjtBQUMzQixNQUFJQSxDQUFDLFlBQVlpbUMsU0FBakIsRUFBNEIsT0FBTyxJQUFJQSxTQUFKLENBQWNqbUMsQ0FBQyxDQUFDb3FCLENBQWhCLEVBQW1CcHFCLENBQUMsQ0FBQzZjLENBQXJCLEVBQXdCN2MsQ0FBQyxDQUFDa3BCLENBQTFCLEVBQTZCbHBCLENBQUMsQ0FBQzZwQixPQUEvQixDQUFQO0FBQzVCLE1BQUksRUFBRTdwQixDQUFDLFlBQVl1cEIsR0FBZixDQUFKLEVBQXlCdnBCLENBQUMsR0FBRzRwQixVQUFVLENBQUM1cEIsQ0FBRCxDQUFkO0FBQ3pCLE1BQUkwcEIsQ0FBQyxHQUFHMXBCLENBQUMsQ0FBQzBwQixDQUFGLEdBQU0sR0FBZDtBQUFBLE1BQ0lDLENBQUMsR0FBRzNwQixDQUFDLENBQUMycEIsQ0FBRixHQUFNLEdBRGQ7QUFBQSxNQUVJL21CLENBQUMsR0FBRzVDLENBQUMsQ0FBQzRDLENBQUYsR0FBTSxHQUZkO0FBQUEsTUFHSXNtQixDQUFDLEdBQUcsQ0FBQzZjLEtBQUssR0FBR25qQyxDQUFSLEdBQVlpakMsRUFBRSxHQUFHbmMsQ0FBakIsR0FBcUJvYyxFQUFFLEdBQUduYyxDQUEzQixLQUFpQ29jLEtBQUssR0FBR0YsRUFBUixHQUFhQyxFQUE5QyxDQUhSO0FBQUEsTUFJSUksRUFBRSxHQUFHdGpDLENBQUMsR0FBR3NtQixDQUpiO0FBQUEsTUFLSXptQixDQUFDLEdBQUcsQ0FBQ3d6QixDQUFDLElBQUl0TSxDQUFDLEdBQUdULENBQVIsQ0FBRCxHQUFjeWMsQ0FBQyxHQUFHTyxFQUFuQixJQUF5Qk4sQ0FMakM7QUFBQSxNQU1JL29CLENBQUMsR0FBR3hRLElBQUksQ0FBQ29QLElBQUwsQ0FBVWhaLENBQUMsR0FBR0EsQ0FBSixHQUFReWpDLEVBQUUsR0FBR0EsRUFBdkIsS0FBOEJqUSxDQUFDLEdBQUcvTSxDQUFKLElBQVMsSUFBSUEsQ0FBYixDQUE5QixDQU5SO0FBQUEsTUFNd0Q7QUFDcERrQixFQUFBQSxDQUFDLEdBQUd2TixDQUFDLEdBQUd4USxJQUFJLENBQUNxUCxLQUFMLENBQVdqWixDQUFYLEVBQWN5akMsRUFBZCxJQUFvQmxyQixZQUFwQixHQUE4QixHQUFqQyxHQUF1Q2hPLEdBUGhEO0FBUUEsU0FBTyxJQUFJaTVCLFNBQUosQ0FBYzdiLENBQUMsR0FBRyxDQUFKLEdBQVFBLENBQUMsR0FBRyxHQUFaLEdBQWtCQSxDQUFoQyxFQUFtQ3ZOLENBQW5DLEVBQXNDcU0sQ0FBdEMsRUFBeUNscEIsQ0FBQyxDQUFDNnBCLE9BQTNDLENBQVA7QUFDRDs7QUFFYyxTQUFTc2MsbUJBQVQsQ0FBbUIvYixDQUFuQixFQUFzQnZOLENBQXRCLEVBQXlCcU0sQ0FBekIsRUFBNEJXLE9BQTVCLEVBQXFDO0FBQ2xELFNBQU94ckIsU0FBUyxDQUFDcUIsTUFBVixLQUFxQixDQUFyQixHQUF5QnNtQyxnQkFBZ0IsQ0FBQzViLENBQUQsQ0FBekMsR0FBK0MsSUFBSTZiLFNBQUosQ0FBYzdiLENBQWQsRUFBaUJ2TixDQUFqQixFQUFvQnFNLENBQXBCLEVBQXVCVyxPQUFPLElBQUksSUFBWCxHQUFrQixDQUFsQixHQUFzQkEsT0FBN0MsQ0FBdEQ7QUFDRDtBQUVNLFNBQVNvYyxTQUFULENBQW1CN2IsQ0FBbkIsRUFBc0J2TixDQUF0QixFQUF5QnFNLENBQXpCLEVBQTRCVyxPQUE1QixFQUFxQztBQUMxQyxPQUFLTyxDQUFMLEdBQVMsQ0FBQ0EsQ0FBVjtBQUNBLE9BQUt2TixDQUFMLEdBQVMsQ0FBQ0EsQ0FBVjtBQUNBLE9BQUtxTSxDQUFMLEdBQVMsQ0FBQ0EsQ0FBVjtBQUNBLE9BQUtXLE9BQUwsR0FBZSxDQUFDQSxPQUFoQjtBQUNEO0FBRUQ3TCxVQUFNLENBQUNpb0IsU0FBRCxFQUFZRSxtQkFBWixFQUF1QnJvQixNQUFNLENBQUNHLEtBQUQsRUFBUTtBQUN6Q0UsRUFBQUEsUUFBUSxFQUFFLGtCQUFTMWIsQ0FBVCxFQUFZO0FBQ3BCQSxJQUFBQSxDQUFDLEdBQUdBLENBQUMsSUFBSSxJQUFMLEdBQVkwYixTQUFaLEdBQXVCOVIsSUFBSSxDQUFDeWQsR0FBTCxDQUFTM0wsU0FBVCxFQUFtQjFiLENBQW5CLENBQTNCO0FBQ0EsV0FBTyxJQUFJd2pDLFNBQUosQ0FBYyxLQUFLN2IsQ0FBbkIsRUFBc0IsS0FBS3ZOLENBQTNCLEVBQThCLEtBQUtxTSxDQUFMLEdBQVN6bUIsQ0FBdkMsRUFBMEMsS0FBS29uQixPQUEvQyxDQUFQO0FBQ0QsR0FKd0M7QUFLekMzTCxFQUFBQSxNQUFNLEVBQUUsZ0JBQVN6YixDQUFULEVBQVk7QUFDbEJBLElBQUFBLENBQUMsR0FBR0EsQ0FBQyxJQUFJLElBQUwsR0FBWXliLE9BQVosR0FBcUI3UixJQUFJLENBQUN5ZCxHQUFMLENBQVM1TCxPQUFULEVBQWlCemIsQ0FBakIsQ0FBekI7QUFDQSxXQUFPLElBQUl3akMsU0FBSixDQUFjLEtBQUs3YixDQUFuQixFQUFzQixLQUFLdk4sQ0FBM0IsRUFBOEIsS0FBS3FNLENBQUwsR0FBU3ptQixDQUF2QyxFQUEwQyxLQUFLb25CLE9BQS9DLENBQVA7QUFDRCxHQVJ3QztBQVN6Q3JCLEVBQUFBLEdBQUcsRUFBRSxlQUFXO0FBQ2QsUUFBSTRCLENBQUMsR0FBR0gsS0FBSyxDQUFDLEtBQUtHLENBQU4sQ0FBTCxHQUFnQixDQUFoQixHQUFvQixDQUFDLEtBQUtBLENBQUwsR0FBUyxHQUFWLElBQWlCcWIsT0FBN0M7QUFBQSxRQUNJdmMsQ0FBQyxHQUFHLENBQUMsS0FBS0EsQ0FEZDtBQUFBLFFBRUl2bUIsQ0FBQyxHQUFHc25CLEtBQUssQ0FBQyxLQUFLcE4sQ0FBTixDQUFMLEdBQWdCLENBQWhCLEdBQW9CLEtBQUtBLENBQUwsR0FBU3FNLENBQVQsSUFBYyxJQUFJQSxDQUFsQixDQUY1QjtBQUFBLFFBR0lrZCxJQUFJLEdBQUcvNUIsSUFBSSxDQUFDZzZCLEdBQUwsQ0FBU2pjLENBQVQsQ0FIWDtBQUFBLFFBSUlrYyxJQUFJLEdBQUdqNkIsSUFBSSxDQUFDazZCLEdBQUwsQ0FBU25jLENBQVQsQ0FKWDtBQUtBLFdBQU8sSUFBSWIsR0FBSixDQUNMLE9BQU9MLENBQUMsR0FBR3ZtQixDQUFDLElBQUkyMkIsQ0FBQyxHQUFHOE0sSUFBSixHQUFXVixDQUFDLEdBQUdZLElBQW5CLENBQVosQ0FESyxFQUVMLE9BQU9wZCxDQUFDLEdBQUd2bUIsQ0FBQyxJQUFJZ2pDLENBQUMsR0FBR1MsSUFBSixHQUFXUixDQUFDLEdBQUdVLElBQW5CLENBQVosQ0FGSyxFQUdMLE9BQU9wZCxDQUFDLEdBQUd2bUIsQ0FBQyxJQUFJc3pCLENBQUMsR0FBR21RLElBQVIsQ0FBWixDQUhLLEVBSUwsS0FBS3ZjLE9BSkEsQ0FBUDtBQU1EO0FBckJ3QyxDQUFSLENBQTdCLENBQU4sQzs7QUN0Q0E7QUFDQTs7QUFFQSxTQUFTc2MsU0FBVCxDQUFtQi9hLEdBQW5CLEVBQXdCO0FBQ3RCLFNBQVEsU0FBU3FiLGNBQVQsQ0FBd0J0YixDQUF4QixFQUEyQjtBQUNqQ0EsSUFBQUEsQ0FBQyxHQUFHLENBQUNBLENBQUw7O0FBRUEsYUFBU2diLFNBQVQsQ0FBbUI5akMsS0FBbkIsRUFBMEJELEdBQTFCLEVBQStCO0FBQzdCLFVBQUlnb0IsQ0FBQyxHQUFHZ0IsR0FBRyxDQUFDLENBQUMvb0IsS0FBSyxHQUFHbWtDLG1CQUFjLENBQUNua0MsS0FBRCxDQUF2QixFQUFnQytuQixDQUFqQyxFQUFvQyxDQUFDaG9CLEdBQUcsR0FBR29rQyxtQkFBYyxDQUFDcGtDLEdBQUQsQ0FBckIsRUFBNEJnb0IsQ0FBaEUsQ0FBWDtBQUFBLFVBQ0l2TixDQUFDLEdBQUd1TCxPQUFLLENBQUMvbEIsS0FBSyxDQUFDd2EsQ0FBUCxFQUFVemEsR0FBRyxDQUFDeWEsQ0FBZCxDQURiO0FBQUEsVUFFSXFNLENBQUMsR0FBR2QsT0FBSyxDQUFDL2xCLEtBQUssQ0FBQzZtQixDQUFQLEVBQVU5bUIsR0FBRyxDQUFDOG1CLENBQWQsQ0FGYjtBQUFBLFVBR0lXLE9BQU8sR0FBR3pCLE9BQUssQ0FBQy9sQixLQUFLLENBQUN3bkIsT0FBUCxFQUFnQnpuQixHQUFHLENBQUN5bkIsT0FBcEIsQ0FIbkI7QUFJQSxhQUFPLFVBQVM5VyxDQUFULEVBQVk7QUFDakIxUSxRQUFBQSxLQUFLLENBQUMrbkIsQ0FBTixHQUFVQSxDQUFDLENBQUNyWCxDQUFELENBQVg7QUFDQTFRLFFBQUFBLEtBQUssQ0FBQ3dhLENBQU4sR0FBVUEsQ0FBQyxDQUFDOUosQ0FBRCxDQUFYO0FBQ0ExUSxRQUFBQSxLQUFLLENBQUM2bUIsQ0FBTixHQUFVQSxDQUFDLENBQUM3YyxJQUFJLENBQUN5ZCxHQUFMLENBQVMvVyxDQUFULEVBQVlvWSxDQUFaLENBQUQsQ0FBWDtBQUNBOW9CLFFBQUFBLEtBQUssQ0FBQ3duQixPQUFOLEdBQWdCQSxPQUFPLENBQUM5VyxDQUFELENBQXZCO0FBQ0EsZUFBTzFRLEtBQUssR0FBRyxFQUFmO0FBQ0QsT0FORDtBQU9EOztBQUVEOGpDLElBQUFBLFNBQVMsQ0FBQzlhLEtBQVYsR0FBa0JvYixjQUFsQjtBQUVBLFdBQU9OLFNBQVA7QUFDRCxHQXBCTSxDQW9CSixDQXBCSSxDQUFQO0FBcUJEOztBQUVELG9EQUFlQSxTQUFTLENBQUMvYSxHQUFELENBQXhCO0FBQ08sSUFBSXNiLGFBQWEsR0FBR1AsU0FBUyxDQUFDL2QsT0FBRCxDQUE3QixDOztBQzVCUDtBQUNBO0FBRU8sSUFBSXdlLElBQUksR0FBR0QsYUFBd0IsQ0FBQ1IsbUJBQVMsQ0FBQyxDQUFDLEdBQUYsRUFBTyxJQUFQLEVBQWEsSUFBYixDQUFWLEVBQThCQSxtQkFBUyxDQUFDLEVBQUQsRUFBSyxJQUFMLEVBQVcsR0FBWCxDQUF2QyxDQUFuQztBQUVBLElBQUlVLElBQUksR0FBR0YsYUFBd0IsQ0FBQ1IsbUJBQVMsQ0FBQyxHQUFELEVBQU0sSUFBTixFQUFZLElBQVosQ0FBVixFQUE2QkEsbUJBQVMsQ0FBQyxFQUFELEVBQUssSUFBTCxFQUFXLEdBQVgsQ0FBdEMsQ0FBbkM7QUFFUCxJQUFJbmpDLENBQUMsR0FBR21qQyxtQkFBUyxFQUFqQjtBQUVBLDZCQUFlLGlCQUFTcHpCLENBQVQsRUFBWTtBQUN6QixNQUFJQSxDQUFDLEdBQUcsQ0FBSixJQUFTQSxDQUFDLEdBQUcsQ0FBakIsRUFBb0JBLENBQUMsSUFBSTFHLElBQUksQ0FBQzJlLEtBQUwsQ0FBV2pZLENBQVgsQ0FBTDtBQUNwQixNQUFJK3pCLEVBQUUsR0FBR3o2QixJQUFJLENBQUNtbEIsR0FBTCxDQUFTemUsQ0FBQyxHQUFHLEdBQWIsQ0FBVDtBQUNBL1AsRUFBQUEsQ0FBQyxDQUFDb25CLENBQUYsR0FBTSxNQUFNclgsQ0FBTixHQUFVLEdBQWhCO0FBQ0EvUCxFQUFBQSxDQUFDLENBQUM2WixDQUFGLEdBQU0sTUFBTSxNQUFNaXFCLEVBQWxCO0FBQ0E5akMsRUFBQUEsQ0FBQyxDQUFDa21CLENBQUYsR0FBTSxNQUFNLE1BQU00ZCxFQUFsQjtBQUNBLFNBQU85akMsQ0FBQyxHQUFHLEVBQVg7QUFDRCxDOztBQ2hCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pDQTtBQUVBLDZCQUFlLG9CQUFTNkUsUUFBVCxFQUFtQjtBQUNoQyxTQUFPLE9BQU9BLFFBQVAsS0FBb0IsUUFBcEIsR0FDRCxJQUFJRSxTQUFKLENBQWMsQ0FBQyxDQUFDOEcsUUFBUSxDQUFDL0csYUFBVCxDQUF1QkQsUUFBdkIsQ0FBRCxDQUFELENBQWQsRUFBb0QsQ0FBQ2dILFFBQVEsQ0FBQzhDLGVBQVYsQ0FBcEQsQ0FEQyxHQUVELElBQUk1SixTQUFKLENBQWMsQ0FBQyxDQUFDRixRQUFELENBQUQsQ0FBZCxFQUE0QjNFLElBQTVCLENBRk47QUFHRCxDOztBQ05EO0FBQ0E7QUFFQSw2QkFBZSxvQkFBUzFDLElBQVQsRUFBZTtBQUM1QixTQUFPd0gsVUFBTSxDQUFDK0osT0FBTyxDQUFDdlIsSUFBRCxDQUFQLENBQWNqQixJQUFkLENBQW1Cc1AsUUFBUSxDQUFDOEMsZUFBNUIsQ0FBRCxDQUFiO0FBQ0QsQzs7QUNMRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNiQSxJQUFNbzZCLEVBQUUsR0FBRzEvQixJQUFJLENBQUM0TyxFQUFoQjtBQUFBLElBQ0krd0IsR0FBRyxHQUFHLElBQUlELEVBRGQ7QUFBQSxJQUVJRSxPQUFPLEdBQUcsSUFGZDtBQUFBLElBR0lDLFVBQVUsR0FBR0YsR0FBRyxHQUFHQyxPQUh2Qjs7QUFLQSxTQUFTRSxJQUFULEdBQWdCO0FBQ2QsT0FBS0MsR0FBTCxHQUFXLEtBQUtDLEdBQUwsR0FBVztBQUN0QixPQUFLQyxHQUFMLEdBQVcsS0FBS0MsR0FBTCxHQUFXLElBRHRCLENBRGMsQ0FFYzs7QUFDNUIsT0FBSzFsQyxDQUFMLEdBQVMsRUFBVDtBQUNEOztBQUVELFNBQVN6QixTQUFULEdBQWdCO0FBQ2QsU0FBTyxJQUFJK21DLElBQUosRUFBUDtBQUNEOztBQUVEQSxJQUFJLENBQUMvckMsU0FBTCxHQUFpQmdGLFNBQUksQ0FBQ2hGLFNBQUwsR0FBaUI7QUFDaENHLEVBQUFBLFdBQVcsRUFBRTRyQyxJQURtQjtBQUVoQ0ssRUFBQUEsTUFBTSxFQUFFLGdCQUFTeGxDLENBQVQsRUFBWW1rQixDQUFaLEVBQWU7QUFDckIsU0FBS3RrQixDQUFMLElBQVUsT0FBTyxLQUFLdWxDLEdBQUwsR0FBVyxLQUFLRSxHQUFMLEdBQVcsQ0FBQ3RsQyxDQUE5QixJQUFtQyxHQUFuQyxJQUEwQyxLQUFLcWxDLEdBQUwsR0FBVyxLQUFLRSxHQUFMLEdBQVcsQ0FBQ3BoQixDQUFqRSxDQUFWO0FBQ0QsR0FKK0I7QUFLaENzaEIsRUFBQUEsU0FBUyxFQUFFLHFCQUFXO0FBQ3BCLFFBQUksS0FBS0gsR0FBTCxLQUFhLElBQWpCLEVBQXVCO0FBQ3JCLFdBQUtBLEdBQUwsR0FBVyxLQUFLRixHQUFoQixFQUFxQixLQUFLRyxHQUFMLEdBQVcsS0FBS0YsR0FBckM7QUFDQSxXQUFLeGxDLENBQUwsSUFBVSxHQUFWO0FBQ0Q7QUFDRixHQVYrQjtBQVdoQzZsQyxFQUFBQSxNQUFNLEVBQUUsZ0JBQVMxbEMsQ0FBVCxFQUFZbWtCLENBQVosRUFBZTtBQUNyQixTQUFLdGtCLENBQUwsSUFBVSxPQUFPLEtBQUt5bEMsR0FBTCxHQUFXLENBQUN0bEMsQ0FBbkIsSUFBd0IsR0FBeEIsSUFBK0IsS0FBS3VsQyxHQUFMLEdBQVcsQ0FBQ3BoQixDQUEzQyxDQUFWO0FBQ0QsR0FiK0I7QUFjaEN3aEIsRUFBQUEsZ0JBQWdCLEVBQUUsMEJBQVMxSixFQUFULEVBQWEySixFQUFiLEVBQWlCNWxDLENBQWpCLEVBQW9CbWtCLENBQXBCLEVBQXVCO0FBQ3ZDLFNBQUt0a0IsQ0FBTCxJQUFVLE1BQU8sQ0FBQ284QixFQUFSLEdBQWMsR0FBZCxHQUFxQixDQUFDMkosRUFBdEIsR0FBNEIsR0FBNUIsSUFBbUMsS0FBS04sR0FBTCxHQUFXLENBQUN0bEMsQ0FBL0MsSUFBb0QsR0FBcEQsSUFBMkQsS0FBS3VsQyxHQUFMLEdBQVcsQ0FBQ3BoQixDQUF2RSxDQUFWO0FBQ0QsR0FoQitCO0FBaUJoQzBoQixFQUFBQSxhQUFhLEVBQUUsdUJBQVM1SixFQUFULEVBQWEySixFQUFiLEVBQWlCRSxFQUFqQixFQUFxQkMsRUFBckIsRUFBeUIvbEMsQ0FBekIsRUFBNEJta0IsQ0FBNUIsRUFBK0I7QUFDNUMsU0FBS3RrQixDQUFMLElBQVUsTUFBTyxDQUFDbzhCLEVBQVIsR0FBYyxHQUFkLEdBQXFCLENBQUMySixFQUF0QixHQUE0QixHQUE1QixHQUFtQyxDQUFDRSxFQUFwQyxHQUEwQyxHQUExQyxHQUFpRCxDQUFDQyxFQUFsRCxHQUF3RCxHQUF4RCxJQUErRCxLQUFLVCxHQUFMLEdBQVcsQ0FBQ3RsQyxDQUEzRSxJQUFnRixHQUFoRixJQUF1RixLQUFLdWxDLEdBQUwsR0FBVyxDQUFDcGhCLENBQW5HLENBQVY7QUFDRCxHQW5CK0I7QUFvQmhDNmhCLEVBQUFBLEtBQUssRUFBRSxlQUFTL0osRUFBVCxFQUFhMkosRUFBYixFQUFpQkUsRUFBakIsRUFBcUJDLEVBQXJCLEVBQXlCcmpCLENBQXpCLEVBQTRCO0FBQ2pDdVosSUFBQUEsRUFBRSxHQUFHLENBQUNBLEVBQU4sRUFBVTJKLEVBQUUsR0FBRyxDQUFDQSxFQUFoQixFQUFvQkUsRUFBRSxHQUFHLENBQUNBLEVBQTFCLEVBQThCQyxFQUFFLEdBQUcsQ0FBQ0EsRUFBcEMsRUFBd0NyakIsQ0FBQyxHQUFHLENBQUNBLENBQTdDO0FBQ0EsUUFBSXNaLEVBQUUsR0FBRyxLQUFLc0osR0FBZDtBQUFBLFFBQ0lXLEVBQUUsR0FBRyxLQUFLVixHQURkO0FBQUEsUUFFSVcsR0FBRyxHQUFHSixFQUFFLEdBQUc3SixFQUZmO0FBQUEsUUFHSWtLLEdBQUcsR0FBR0osRUFBRSxHQUFHSCxFQUhmO0FBQUEsUUFJSVEsR0FBRyxHQUFHcEssRUFBRSxHQUFHQyxFQUpmO0FBQUEsUUFLSW9LLEdBQUcsR0FBR0osRUFBRSxHQUFHTCxFQUxmO0FBQUEsUUFNSVUsS0FBSyxHQUFHRixHQUFHLEdBQUdBLEdBQU4sR0FBWUMsR0FBRyxHQUFHQSxHQU45QixDQUZpQyxDQVVqQzs7QUFDQSxRQUFJM2pCLENBQUMsR0FBRyxDQUFSLEVBQVcsTUFBTSxJQUFJcm9CLEtBQUosQ0FBVSxzQkFBc0Jxb0IsQ0FBaEMsQ0FBTixDQVhzQixDQWFqQzs7QUFDQSxRQUFJLEtBQUs0aUIsR0FBTCxLQUFhLElBQWpCLEVBQXVCO0FBQ3JCLFdBQUt6bEMsQ0FBTCxJQUFVLE9BQU8sS0FBS3lsQyxHQUFMLEdBQVdySixFQUFsQixJQUF3QixHQUF4QixJQUErQixLQUFLc0osR0FBTCxHQUFXSyxFQUExQyxDQUFWO0FBQ0QsS0FGRCxDQUlBO0FBSkEsU0FLSyxJQUFJLEVBQUVVLEtBQUssR0FBR3JCLE9BQVYsQ0FBSixFQUF1QixDQUF2QixDQUVMO0FBQ0E7QUFDQTtBQUpLLFNBS0EsSUFBSSxFQUFFNS9CLElBQUksQ0FBQ21sQixHQUFMLENBQVM2YixHQUFHLEdBQUdILEdBQU4sR0FBWUMsR0FBRyxHQUFHQyxHQUEzQixJQUFrQ25CLE9BQXBDLEtBQWdELENBQUN2aUIsQ0FBckQsRUFBd0Q7QUFDM0QsV0FBSzdpQixDQUFMLElBQVUsT0FBTyxLQUFLeWxDLEdBQUwsR0FBV3JKLEVBQWxCLElBQXdCLEdBQXhCLElBQStCLEtBQUtzSixHQUFMLEdBQVdLLEVBQTFDLENBQVY7QUFDRCxLQUZJLENBSUw7QUFKSyxTQUtBO0FBQ0gsVUFBSVcsR0FBRyxHQUFHVCxFQUFFLEdBQUc5SixFQUFmO0FBQUEsVUFDSXdLLEdBQUcsR0FBR1QsRUFBRSxHQUFHRSxFQURmO0FBQUEsVUFFSVEsS0FBSyxHQUFHUCxHQUFHLEdBQUdBLEdBQU4sR0FBWUMsR0FBRyxHQUFHQSxHQUY5QjtBQUFBLFVBR0lPLEtBQUssR0FBR0gsR0FBRyxHQUFHQSxHQUFOLEdBQVlDLEdBQUcsR0FBR0EsR0FIOUI7QUFBQSxVQUlJRyxHQUFHLEdBQUd0aEMsSUFBSSxDQUFDb1AsSUFBTCxDQUFVZ3lCLEtBQVYsQ0FKVjtBQUFBLFVBS0lHLEdBQUcsR0FBR3ZoQyxJQUFJLENBQUNvUCxJQUFMLENBQVU2eEIsS0FBVixDQUxWO0FBQUEsVUFNSXBrQixDQUFDLEdBQUdRLENBQUMsR0FBR3JkLElBQUksQ0FBQ29iLEdBQUwsQ0FBUyxDQUFDc2tCLEVBQUUsR0FBRzEvQixJQUFJLENBQUN3aEMsSUFBTCxDQUFVLENBQUNKLEtBQUssR0FBR0gsS0FBUixHQUFnQkksS0FBakIsS0FBMkIsSUFBSUMsR0FBSixHQUFVQyxHQUFyQyxDQUFWLENBQU4sSUFBOEQsQ0FBdkUsQ0FOWjtBQUFBLFVBT0lFLEdBQUcsR0FBRzVrQixDQUFDLEdBQUcwa0IsR0FQZDtBQUFBLFVBUUlHLEdBQUcsR0FBRzdrQixDQUFDLEdBQUd5a0IsR0FSZCxDQURHLENBV0g7O0FBQ0EsVUFBSXRoQyxJQUFJLENBQUNtbEIsR0FBTCxDQUFTc2MsR0FBRyxHQUFHLENBQWYsSUFBb0I3QixPQUF4QixFQUFpQztBQUMvQixhQUFLcGxDLENBQUwsSUFBVSxPQUFPbzhCLEVBQUUsR0FBRzZLLEdBQUcsR0FBR1YsR0FBbEIsSUFBeUIsR0FBekIsSUFBZ0NSLEVBQUUsR0FBR2tCLEdBQUcsR0FBR1QsR0FBM0MsQ0FBVjtBQUNEOztBQUVELFdBQUt4bUMsQ0FBTCxJQUFVLE1BQU02aUIsQ0FBTixHQUFVLEdBQVYsR0FBZ0JBLENBQWhCLEdBQW9CLE9BQXBCLEdBQStCLEVBQUUyakIsR0FBRyxHQUFHRSxHQUFOLEdBQVlILEdBQUcsR0FBR0ksR0FBcEIsQ0FBL0IsR0FBMkQsR0FBM0QsSUFBa0UsS0FBS2xCLEdBQUwsR0FBV3JKLEVBQUUsR0FBRzhLLEdBQUcsR0FBR2IsR0FBeEYsSUFBK0YsR0FBL0YsSUFBc0csS0FBS1gsR0FBTCxHQUFXSyxFQUFFLEdBQUdtQixHQUFHLEdBQUdaLEdBQTVILENBQVY7QUFDRDtBQUNGLEdBbkUrQjtBQW9FaENhLEVBQUFBLEdBQUcsRUFBRSxhQUFTaG5DLENBQVQsRUFBWW1rQixDQUFaLEVBQWV6QixDQUFmLEVBQWtCdWtCLEVBQWxCLEVBQXNCQyxFQUF0QixFQUEwQkMsR0FBMUIsRUFBK0I7QUFDbENubkMsSUFBQUEsQ0FBQyxHQUFHLENBQUNBLENBQUwsRUFBUW1rQixDQUFDLEdBQUcsQ0FBQ0EsQ0FBYixFQUFnQnpCLENBQUMsR0FBRyxDQUFDQSxDQUFyQixFQUF3QnlrQixHQUFHLEdBQUcsQ0FBQyxDQUFDQSxHQUFoQztBQUNBLFFBQUk3WCxFQUFFLEdBQUc1TSxDQUFDLEdBQUdyZCxJQUFJLENBQUNnNkIsR0FBTCxDQUFTNEgsRUFBVCxDQUFiO0FBQUEsUUFDSTFYLEVBQUUsR0FBRzdNLENBQUMsR0FBR3JkLElBQUksQ0FBQ2s2QixHQUFMLENBQVMwSCxFQUFULENBRGI7QUFBQSxRQUVJakwsRUFBRSxHQUFHaDhCLENBQUMsR0FBR3N2QixFQUZiO0FBQUEsUUFHSTJXLEVBQUUsR0FBRzloQixDQUFDLEdBQUdvTCxFQUhiO0FBQUEsUUFJSTZYLEVBQUUsR0FBRyxJQUFJRCxHQUpiO0FBQUEsUUFLSUUsRUFBRSxHQUFHRixHQUFHLEdBQUdGLEVBQUUsR0FBR0MsRUFBUixHQUFhQSxFQUFFLEdBQUdELEVBTDlCLENBRmtDLENBU2xDOztBQUNBLFFBQUl2a0IsQ0FBQyxHQUFHLENBQVIsRUFBVyxNQUFNLElBQUlyb0IsS0FBSixDQUFVLHNCQUFzQnFvQixDQUFoQyxDQUFOLENBVnVCLENBWWxDOztBQUNBLFFBQUksS0FBSzRpQixHQUFMLEtBQWEsSUFBakIsRUFBdUI7QUFDckIsV0FBS3psQyxDQUFMLElBQVUsTUFBTW04QixFQUFOLEdBQVcsR0FBWCxHQUFpQmlLLEVBQTNCO0FBQ0QsS0FGRCxDQUlBO0FBSkEsU0FLSyxJQUFJNWdDLElBQUksQ0FBQ21sQixHQUFMLENBQVMsS0FBSzhhLEdBQUwsR0FBV3RKLEVBQXBCLElBQTBCaUosT0FBMUIsSUFBcUM1L0IsSUFBSSxDQUFDbWxCLEdBQUwsQ0FBUyxLQUFLK2EsR0FBTCxHQUFXVSxFQUFwQixJQUEwQmhCLE9BQW5FLEVBQTRFO0FBQy9FLFdBQUtwbEMsQ0FBTCxJQUFVLE1BQU1tOEIsRUFBTixHQUFXLEdBQVgsR0FBaUJpSyxFQUEzQjtBQUNELEtBcEJpQyxDQXNCbEM7OztBQUNBLFFBQUksQ0FBQ3ZqQixDQUFMLEVBQVEsT0F2QjBCLENBeUJsQzs7QUFDQSxRQUFJMmtCLEVBQUUsR0FBRyxDQUFULEVBQVlBLEVBQUUsR0FBR0EsRUFBRSxHQUFHckMsR0FBTCxHQUFXQSxHQUFoQixDQTFCc0IsQ0E0QmxDOztBQUNBLFFBQUlxQyxFQUFFLEdBQUduQyxVQUFULEVBQXFCO0FBQ25CLFdBQUtybEMsQ0FBTCxJQUFVLE1BQU02aUIsQ0FBTixHQUFVLEdBQVYsR0FBZ0JBLENBQWhCLEdBQW9CLE9BQXBCLEdBQThCMGtCLEVBQTlCLEdBQW1DLEdBQW5DLElBQTBDcG5DLENBQUMsR0FBR3N2QixFQUE5QyxJQUFvRCxHQUFwRCxJQUEyRG5MLENBQUMsR0FBR29MLEVBQS9ELElBQXFFLEdBQXJFLEdBQTJFN00sQ0FBM0UsR0FBK0UsR0FBL0UsR0FBcUZBLENBQXJGLEdBQXlGLE9BQXpGLEdBQW1HMGtCLEVBQW5HLEdBQXdHLEdBQXhHLElBQStHLEtBQUs5QixHQUFMLEdBQVd0SixFQUExSCxJQUFnSSxHQUFoSSxJQUF1SSxLQUFLdUosR0FBTCxHQUFXVSxFQUFsSixDQUFWO0FBQ0QsS0FGRCxDQUlBO0FBSkEsU0FLSyxJQUFJb0IsRUFBRSxHQUFHcEMsT0FBVCxFQUFrQjtBQUNyQixXQUFLcGxDLENBQUwsSUFBVSxNQUFNNmlCLENBQU4sR0FBVSxHQUFWLEdBQWdCQSxDQUFoQixHQUFvQixLQUFwQixHQUE2QixFQUFFMmtCLEVBQUUsSUFBSXRDLEVBQVIsQ0FBN0IsR0FBNEMsR0FBNUMsR0FBa0RxQyxFQUFsRCxHQUF1RCxHQUF2RCxJQUE4RCxLQUFLOUIsR0FBTCxHQUFXdGxDLENBQUMsR0FBRzBpQixDQUFDLEdBQUdyZCxJQUFJLENBQUNnNkIsR0FBTCxDQUFTNkgsRUFBVCxDQUFqRixJQUFpRyxHQUFqRyxJQUF3RyxLQUFLM0IsR0FBTCxHQUFXcGhCLENBQUMsR0FBR3pCLENBQUMsR0FBR3JkLElBQUksQ0FBQ2s2QixHQUFMLENBQVMySCxFQUFULENBQTNILENBQVY7QUFDRDtBQUNGLEdBekcrQjtBQTBHaENJLEVBQUFBLElBQUksRUFBRSxjQUFTdG5DLENBQVQsRUFBWW1rQixDQUFaLEVBQWVpSCxDQUFmLEVBQWtCaEksQ0FBbEIsRUFBcUI7QUFDekIsU0FBS3ZqQixDQUFMLElBQVUsT0FBTyxLQUFLdWxDLEdBQUwsR0FBVyxLQUFLRSxHQUFMLEdBQVcsQ0FBQ3RsQyxDQUE5QixJQUFtQyxHQUFuQyxJQUEwQyxLQUFLcWxDLEdBQUwsR0FBVyxLQUFLRSxHQUFMLEdBQVcsQ0FBQ3BoQixDQUFqRSxJQUFzRSxHQUF0RSxHQUE2RSxDQUFDaUgsQ0FBOUUsR0FBbUYsR0FBbkYsR0FBMEYsQ0FBQ2hJLENBQTNGLEdBQWdHLEdBQWhHLEdBQXVHLENBQUNnSSxDQUF4RyxHQUE2RyxHQUF2SDtBQUNELEdBNUcrQjtBQTZHaEMveEIsRUFBQUEsUUFBUSxFQUFFLG9CQUFXO0FBQ25CLFdBQU8sS0FBS3dHLENBQVo7QUFDRDtBQS9HK0IsQ0FBbEM7QUFrSEEsK0NBQWV6QixTQUFmLEU7Ozs7QUNqSU8sSUFBSTlFLEtBQUssR0FBRzNCLEtBQUssQ0FBQ3lCLFNBQU4sQ0FBZ0JFLEtBQTVCO0FBRVAsNkJBQWUsNEJBQVMwRyxDQUFULEVBQVk7QUFDekIsU0FBTyxhQUFPQSxDQUFQLE1BQWEsUUFBYixJQUF5QixZQUFZQSxDQUFyQyxHQUNIQSxDQURHLENBQ0Q7QUFEQyxJQUVIckksS0FBSyxDQUFDOEIsSUFBTixDQUFXdUcsQ0FBWCxDQUZKLENBRHlCLENBR047QUFDcEIsQzs7QUNORCw2QkFBZSwrQkFBU0EsQ0FBVCxFQUFZO0FBQ3pCLFNBQU8sU0FBU3FELFFBQVQsR0FBb0I7QUFDekIsV0FBT3JELENBQVA7QUFDRCxHQUZEO0FBR0QsQzs7QUNKTSxTQUFTQSxPQUFULENBQVd1d0IsQ0FBWCxFQUFjO0FBQ25CLFNBQU9BLENBQUMsQ0FBQyxDQUFELENBQVI7QUFDRDtBQUVNLFNBQVNwTSxPQUFULENBQVdvTSxDQUFYLEVBQWM7QUFDbkIsU0FBT0EsQ0FBQyxDQUFDLENBQUQsQ0FBUjtBQUNELEM7O0FDTkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTbVgsVUFBVCxDQUFvQnpwQyxDQUFwQixFQUF1QjtBQUNyQixTQUFPQSxDQUFDLENBQUM1QixNQUFUO0FBQ0Q7O0FBRUQsU0FBU3NyQyxVQUFULENBQW9CMXBDLENBQXBCLEVBQXVCO0FBQ3JCLFNBQU9BLENBQUMsQ0FBQzNCLE1BQVQ7QUFDRDs7QUFFRCxTQUFTbUUsU0FBVCxDQUFjbW5DLEtBQWQsRUFBcUI7QUFDbkIsTUFBSXZyQyxNQUFNLEdBQUdxckMsVUFBYjtBQUFBLE1BQ0lwckMsTUFBTSxHQUFHcXJDLFVBRGI7QUFBQSxNQUVJM25DLENBQUMsR0FBR3VuQyxPQUZSO0FBQUEsTUFHSXBqQixDQUFDLEdBQUdxakIsT0FIUjtBQUFBLE1BSUl4aUMsT0FBTyxHQUFHLElBSmQ7O0FBTUEsV0FBU3ZFLElBQVQsR0FBZ0I7QUFDZCxRQUFJMndCLE1BQUo7QUFBQSxRQUFZeVcsSUFBSSxHQUFHdnVDLFVBQUEsQ0FBV2pDLFNBQVgsQ0FBbkI7QUFBQSxRQUEwQ3dlLENBQUMsR0FBR3haLE1BQU0sQ0FBQy9FLEtBQVAsQ0FBYSxJQUFiLEVBQW1CdXdDLElBQW5CLENBQTlDO0FBQUEsUUFBd0U5N0IsQ0FBQyxHQUFHelAsTUFBTSxDQUFDaEYsS0FBUCxDQUFhLElBQWIsRUFBbUJ1d0MsSUFBbkIsQ0FBNUU7QUFDQSxRQUFJLENBQUM3aUMsT0FBTCxFQUFjQSxPQUFPLEdBQUdvc0IsTUFBTSxHQUFHaHpCLFFBQUksRUFBdkI7QUFDZHdwQyxJQUFBQSxLQUFLLENBQUM1aUMsT0FBRCxFQUFVLENBQUNoRixDQUFDLENBQUMxSSxLQUFGLENBQVEsSUFBUixHQUFldXdDLElBQUksQ0FBQyxDQUFELENBQUosR0FBVWh5QixDQUFWLEVBQWFneUIsSUFBNUIsRUFBWCxFQUErQyxDQUFDMWpCLENBQUMsQ0FBQzdzQixLQUFGLENBQVEsSUFBUixFQUFjdXdDLElBQWQsQ0FBaEQsRUFBcUUsQ0FBQzduQyxDQUFDLENBQUMxSSxLQUFGLENBQVEsSUFBUixHQUFldXdDLElBQUksQ0FBQyxDQUFELENBQUosR0FBVTk3QixDQUFWLEVBQWE4N0IsSUFBNUIsRUFBdEUsRUFBMEcsQ0FBQzFqQixDQUFDLENBQUM3c0IsS0FBRixDQUFRLElBQVIsRUFBY3V3QyxJQUFkLENBQTNHLENBQUw7QUFDQSxRQUFJelcsTUFBSixFQUFZLE9BQU9wc0IsT0FBTyxHQUFHLElBQVYsRUFBZ0Jvc0IsTUFBTSxHQUFHLEVBQVQsSUFBZSxJQUF0QztBQUNiOztBQUVEM3dCLEVBQUFBLElBQUksQ0FBQ3BFLE1BQUwsR0FBYyxVQUFTd0QsQ0FBVCxFQUFZO0FBQ3hCLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CMkQsTUFBTSxHQUFHd0QsQ0FBVCxFQUFZWSxJQUFoQyxJQUF3Q3BFLE1BQS9DO0FBQ0QsR0FGRDs7QUFJQW9FLEVBQUFBLElBQUksQ0FBQ25FLE1BQUwsR0FBYyxVQUFTdUQsQ0FBVCxFQUFZO0FBQ3hCLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CNEQsTUFBTSxHQUFHdUQsQ0FBVCxFQUFZWSxJQUFoQyxJQUF3Q25FLE1BQS9DO0FBQ0QsR0FGRDs7QUFJQW1FLEVBQUFBLElBQUksQ0FBQ1QsQ0FBTCxHQUFTLFVBQVNILENBQVQsRUFBWTtBQUNuQixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQnNILENBQUMsR0FBRyxPQUFPSCxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJ3RCxxQkFBUSxDQUFDLENBQUN4RCxDQUFGLENBQTFDLEVBQWdEWSxJQUFwRSxJQUE0RVQsQ0FBbkY7QUFDRCxHQUZEOztBQUlBUyxFQUFBQSxJQUFJLENBQUMwakIsQ0FBTCxHQUFTLFVBQVN0a0IsQ0FBVCxFQUFZO0FBQ25CLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CeXJCLENBQUMsR0FBRyxPQUFPdGtCLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUExQixHQUE4QndELHFCQUFRLENBQUMsQ0FBQ3hELENBQUYsQ0FBMUMsRUFBZ0RZLElBQXBFLElBQTRFMGpCLENBQW5GO0FBQ0QsR0FGRDs7QUFJQTFqQixFQUFBQSxJQUFJLENBQUN1RSxPQUFMLEdBQWUsVUFBU25GLENBQVQsRUFBWTtBQUN6QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFxQnNNLE9BQU8sR0FBR25GLENBQUMsSUFBSSxJQUFMLEdBQVksSUFBWixHQUFtQkEsQ0FBOUIsRUFBa0NZLElBQXRELElBQThEdUUsT0FBckU7QUFDRCxHQUZEOztBQUlBLFNBQU92RSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU3FuQyxlQUFULENBQXlCOWlDLE9BQXpCLEVBQWtDZzNCLEVBQWxDLEVBQXNDaUssRUFBdEMsRUFBMENoSyxFQUExQyxFQUE4QzJKLEVBQTlDLEVBQWtEO0FBQ2hENWdDLEVBQUFBLE9BQU8sQ0FBQ3dnQyxNQUFSLENBQWV4SixFQUFmLEVBQW1CaUssRUFBbkI7QUFDQWpoQyxFQUFBQSxPQUFPLENBQUM2Z0MsYUFBUixDQUFzQjdKLEVBQUUsR0FBRyxDQUFDQSxFQUFFLEdBQUdDLEVBQU4sSUFBWSxDQUF2QyxFQUEwQ2dLLEVBQTFDLEVBQThDakssRUFBOUMsRUFBa0Q0SixFQUFsRCxFQUFzRDNKLEVBQXRELEVBQTBEMkosRUFBMUQ7QUFDRDs7QUFFRCxTQUFTbUMsYUFBVCxDQUF1Qi9pQyxPQUF2QixFQUFnQ2czQixFQUFoQyxFQUFvQ2lLLEVBQXBDLEVBQXdDaEssRUFBeEMsRUFBNEMySixFQUE1QyxFQUFnRDtBQUM5QzVnQyxFQUFBQSxPQUFPLENBQUN3Z0MsTUFBUixDQUFleEosRUFBZixFQUFtQmlLLEVBQW5CO0FBQ0FqaEMsRUFBQUEsT0FBTyxDQUFDNmdDLGFBQVIsQ0FBc0I3SixFQUF0QixFQUEwQmlLLEVBQUUsR0FBRyxDQUFDQSxFQUFFLEdBQUdMLEVBQU4sSUFBWSxDQUEzQyxFQUE4QzNKLEVBQTlDLEVBQWtEZ0ssRUFBbEQsRUFBc0RoSyxFQUF0RCxFQUEwRDJKLEVBQTFEO0FBQ0Q7O0FBRUQsU0FBU29DLFdBQVQsQ0FBcUJoakMsT0FBckIsRUFBOEJnM0IsRUFBOUIsRUFBa0NpSyxFQUFsQyxFQUFzQ2hLLEVBQXRDLEVBQTBDMkosRUFBMUMsRUFBOEM7QUFDNUMsTUFBSXFDLEVBQUUsR0FBR1IsV0FBVyxDQUFDekwsRUFBRCxFQUFLaUssRUFBTCxDQUFwQjtBQUFBLE1BQ0lpQyxFQUFFLEdBQUdULFdBQVcsQ0FBQ3pMLEVBQUQsRUFBS2lLLEVBQUUsR0FBRyxDQUFDQSxFQUFFLEdBQUdMLEVBQU4sSUFBWSxDQUF0QixDQURwQjtBQUFBLE1BRUl1QyxFQUFFLEdBQUdWLFdBQVcsQ0FBQ3hMLEVBQUQsRUFBS2dLLEVBQUwsQ0FGcEI7QUFBQSxNQUdJbUMsRUFBRSxHQUFHWCxXQUFXLENBQUN4TCxFQUFELEVBQUsySixFQUFMLENBSHBCO0FBSUE1Z0MsRUFBQUEsT0FBTyxDQUFDd2dDLE1BQVIsQ0FBZXlDLEVBQUUsQ0FBQyxDQUFELENBQWpCLEVBQXNCQSxFQUFFLENBQUMsQ0FBRCxDQUF4QjtBQUNBampDLEVBQUFBLE9BQU8sQ0FBQzZnQyxhQUFSLENBQXNCcUMsRUFBRSxDQUFDLENBQUQsQ0FBeEIsRUFBNkJBLEVBQUUsQ0FBQyxDQUFELENBQS9CLEVBQW9DQyxFQUFFLENBQUMsQ0FBRCxDQUF0QyxFQUEyQ0EsRUFBRSxDQUFDLENBQUQsQ0FBN0MsRUFBa0RDLEVBQUUsQ0FBQyxDQUFELENBQXBELEVBQXlEQSxFQUFFLENBQUMsQ0FBRCxDQUEzRDtBQUNEOztBQUVNLFNBQVNDLGNBQVQsR0FBMEI7QUFDL0IsU0FBTzVuQyxTQUFJLENBQUNxbkMsZUFBRCxDQUFYO0FBQ0Q7QUFFTSxTQUFTUSxZQUFULEdBQXdCO0FBQzdCLFNBQU83bkMsU0FBSSxDQUFDc25DLGFBQUQsQ0FBWDtBQUNEO0FBRU0sU0FBU1EsVUFBVCxHQUFzQjtBQUMzQixNQUFJcm1CLENBQUMsR0FBR3poQixTQUFJLENBQUN1bkMsV0FBRCxDQUFaO0FBQ0E5bEIsRUFBQUEsQ0FBQyxDQUFDc21CLEtBQUYsR0FBVXRtQixDQUFDLENBQUNsaUIsQ0FBWixFQUFlLE9BQU9raUIsQ0FBQyxDQUFDbGlCLENBQXhCO0FBQ0FraUIsRUFBQUEsQ0FBQyxDQUFDdW1CLE1BQUYsR0FBV3ZtQixDQUFDLENBQUNpQyxDQUFiLEVBQWdCLE9BQU9qQyxDQUFDLENBQUNpQyxDQUF6QjtBQUNBLFNBQU9qQyxDQUFQO0FBQ0QsQzs7QUNuRkQ7QUFDQTtBQUNBO0FBQ0E7Q0FDOEU7O0NBQ0E7O0FBQzlFO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM3Q0E7QUFDQTtBQUNPLElBQU02cEIsVUFBVSxHQUFHO0FBQUNDLEVBQUFBLE9BQU8sRUFBRTtBQUFWLENBQW5CO0FBQ0EsSUFBTUMsaUJBQWlCLEdBQUc7QUFBQ0MsRUFBQUEsT0FBTyxFQUFFLElBQVY7QUFBZ0JGLEVBQUFBLE9BQU8sRUFBRTtBQUF6QixDQUExQjtBQUVBLFNBQVM3aEIscUJBQVQsQ0FBdUJ2ZSxLQUF2QixFQUE4QjtBQUNuQ0EsRUFBQUEsS0FBSyxDQUFDdWdDLHdCQUFOO0FBQ0Q7QUFFRCw2QkFBZSxxQkFBU3ZnQyxLQUFULEVBQWdCO0FBQzdCQSxFQUFBQSxLQUFLLENBQUN3Z0MsY0FBTjtBQUNBeGdDLEVBQUFBLEtBQUssQ0FBQ3VnQyx3QkFBTjtBQUNELEM7O0FDWkQ7QUFDQTtBQUVBLDZCQUFlLGdCQUFTaGMsSUFBVCxFQUFlO0FBQzVCLE1BQUlqMEIsSUFBSSxHQUFHaTBCLElBQUksQ0FBQ3RvQixRQUFMLENBQWM4QyxlQUF6QjtBQUFBLE1BQ0loRyxTQUFTLEdBQUczRCxVQUFNLENBQUNtdkIsSUFBRCxDQUFOLENBQWFoa0IsRUFBYixDQUFnQixnQkFBaEIsRUFBa0MrZCxXQUFsQyxFQUEyQytoQixpQkFBM0MsQ0FEaEI7O0FBRUEsTUFBSSxtQkFBbUIvdkMsSUFBdkIsRUFBNkI7QUFDM0J5SSxJQUFBQSxTQUFTLENBQUN3SCxFQUFWLENBQWEsa0JBQWIsRUFBaUMrZCxXQUFqQyxFQUEwQytoQixpQkFBMUM7QUFDRCxHQUZELE1BRU87QUFDTC92QyxJQUFBQSxJQUFJLENBQUNtd0MsVUFBTCxHQUFrQm53QyxJQUFJLENBQUM2TCxLQUFMLENBQVd1a0MsYUFBN0I7QUFDQXB3QyxJQUFBQSxJQUFJLENBQUM2TCxLQUFMLENBQVd1a0MsYUFBWCxHQUEyQixNQUEzQjtBQUNEO0FBQ0Y7QUFFTSxTQUFTQyxPQUFULENBQWlCcGMsSUFBakIsRUFBdUJxYyxPQUF2QixFQUFnQztBQUNyQyxNQUFJdHdDLElBQUksR0FBR2kwQixJQUFJLENBQUN0b0IsUUFBTCxDQUFjOEMsZUFBekI7QUFBQSxNQUNJaEcsU0FBUyxHQUFHM0QsVUFBTSxDQUFDbXZCLElBQUQsQ0FBTixDQUFhaGtCLEVBQWIsQ0FBZ0IsZ0JBQWhCLEVBQWtDLElBQWxDLENBRGhCOztBQUVBLE1BQUlxZ0MsT0FBSixFQUFhO0FBQ1g3bkMsSUFBQUEsU0FBUyxDQUFDd0gsRUFBVixDQUFhLFlBQWIsRUFBMkIrZCxXQUEzQixFQUFvQytoQixpQkFBcEM7QUFDQTk2QixJQUFBQSxVQUFVLENBQUMsWUFBVztBQUFFeE0sTUFBQUEsU0FBUyxDQUFDd0gsRUFBVixDQUFhLFlBQWIsRUFBMkIsSUFBM0I7QUFBbUMsS0FBakQsRUFBbUQsQ0FBbkQsQ0FBVjtBQUNEOztBQUNELE1BQUksbUJBQW1CalEsSUFBdkIsRUFBNkI7QUFDM0J5SSxJQUFBQSxTQUFTLENBQUN3SCxFQUFWLENBQWEsa0JBQWIsRUFBaUMsSUFBakM7QUFDRCxHQUZELE1BRU87QUFDTGpRLElBQUFBLElBQUksQ0FBQzZMLEtBQUwsQ0FBV3VrQyxhQUFYLEdBQTJCcHdDLElBQUksQ0FBQ213QyxVQUFoQztBQUNBLFdBQU9ud0MsSUFBSSxDQUFDbXdDLFVBQVo7QUFDRDtBQUNGLEM7O0FDM0JELElBQUlJLFFBQVEsR0FBRyxLQUFmOztBQUVBLFNBQVNyTixJQUFULENBQWNwL0IsQ0FBZCxFQUFpQjtBQUNmLFNBQU8sQ0FBQyxDQUFDQSxDQUFDLEdBQUdxRixJQUFJLENBQUNxbkMsR0FBTCxDQUFTMXNDLENBQVQsQ0FBTCxJQUFvQixJQUFJQSxDQUF6QixJQUE4QixDQUFyQztBQUNEOztBQUVELFNBQVNzL0IsSUFBVCxDQUFjdC9CLENBQWQsRUFBaUI7QUFDZixTQUFPLENBQUMsQ0FBQ0EsQ0FBQyxHQUFHcUYsSUFBSSxDQUFDcW5DLEdBQUwsQ0FBUzFzQyxDQUFULENBQUwsSUFBb0IsSUFBSUEsQ0FBekIsSUFBOEIsQ0FBckM7QUFDRDs7QUFFRCxTQUFTMnNDLElBQVQsQ0FBYzNzQyxDQUFkLEVBQWlCO0FBQ2YsU0FBTyxDQUFDLENBQUNBLENBQUMsR0FBR3FGLElBQUksQ0FBQ3FuQyxHQUFMLENBQVMsSUFBSTFzQyxDQUFiLENBQUwsSUFBd0IsQ0FBekIsS0FBK0JBLENBQUMsR0FBRyxDQUFuQyxDQUFQO0FBQ0Q7O0FBRUQsK0NBQWUsQ0FBQyxTQUFTNHNDLE9BQVQsQ0FBaUJDLEdBQWpCLEVBQXNCQyxJQUF0QixFQUE0QkMsSUFBNUIsRUFBa0M7QUFFaEQ7QUFDQTtBQUNBLFdBQVNDLElBQVQsQ0FBYy9FLEVBQWQsRUFBa0JDLEVBQWxCLEVBQXNCO0FBQ3BCLFFBQUkrRSxHQUFHLEdBQUdoRixFQUFFLENBQUMsQ0FBRCxDQUFaO0FBQUEsUUFBaUJpRixHQUFHLEdBQUdqRixFQUFFLENBQUMsQ0FBRCxDQUF6QjtBQUFBLFFBQThCclosRUFBRSxHQUFHcVosRUFBRSxDQUFDLENBQUQsQ0FBckM7QUFBQSxRQUNJa0YsR0FBRyxHQUFHakYsRUFBRSxDQUFDLENBQUQsQ0FEWjtBQUFBLFFBQ2lCa0YsR0FBRyxHQUFHbEYsRUFBRSxDQUFDLENBQUQsQ0FEekI7QUFBQSxRQUM4QnJaLEVBQUUsR0FBR3FaLEVBQUUsQ0FBQyxDQUFELENBRHJDO0FBQUEsUUFFSTVZLEVBQUUsR0FBRzZkLEdBQUcsR0FBR0YsR0FGZjtBQUFBLFFBR0kxZCxFQUFFLEdBQUc2ZCxHQUFHLEdBQUdGLEdBSGY7QUFBQSxRQUlJRyxFQUFFLEdBQUcvZCxFQUFFLEdBQUdBLEVBQUwsR0FBVUMsRUFBRSxHQUFHQSxFQUp4QjtBQUFBLFFBS0l6M0IsQ0FMSjtBQUFBLFFBTUkySCxDQU5KLENBRG9CLENBU3BCOztBQUNBLFFBQUk0dEMsRUFBRSxHQUFHWixRQUFULEVBQW1CO0FBQ2pCaHRDLE1BQUFBLENBQUMsR0FBRzRGLElBQUksQ0FBQ215QixHQUFMLENBQVMzSSxFQUFFLEdBQUdELEVBQWQsSUFBb0JpZSxHQUF4Qjs7QUFDQS8wQyxNQUFBQSxDQUFDLEdBQUcsV0FBU2lVLENBQVQsRUFBWTtBQUNkLGVBQU8sQ0FDTGtoQyxHQUFHLEdBQUdsaEMsQ0FBQyxHQUFHdWpCLEVBREwsRUFFTDRkLEdBQUcsR0FBR25oQyxDQUFDLEdBQUd3akIsRUFGTCxFQUdMWCxFQUFFLEdBQUd2cEIsSUFBSSxDQUFDcW5DLEdBQUwsQ0FBU0csR0FBRyxHQUFHOWdDLENBQU4sR0FBVXRNLENBQW5CLENBSEEsQ0FBUDtBQUtELE9BTkQ7QUFPRCxLQVRELENBV0E7QUFYQSxTQVlLO0FBQ0gsVUFBSXMyQixFQUFFLEdBQUcxd0IsSUFBSSxDQUFDb1AsSUFBTCxDQUFVNDRCLEVBQVYsQ0FBVDtBQUFBLFVBQ0lDLEVBQUUsR0FBRyxDQUFDemUsRUFBRSxHQUFHQSxFQUFMLEdBQVVELEVBQUUsR0FBR0EsRUFBZixHQUFvQm1lLElBQUksR0FBR00sRUFBNUIsS0FBbUMsSUFBSXplLEVBQUosR0FBU2tlLElBQVQsR0FBZ0IvVyxFQUFuRCxDQURUO0FBQUEsVUFFSXdYLEVBQUUsR0FBRyxDQUFDMWUsRUFBRSxHQUFHQSxFQUFMLEdBQVVELEVBQUUsR0FBR0EsRUFBZixHQUFvQm1lLElBQUksR0FBR00sRUFBNUIsS0FBbUMsSUFBSXhlLEVBQUosR0FBU2llLElBQVQsR0FBZ0IvVyxFQUFuRCxDQUZUO0FBQUEsVUFHSUMsRUFBRSxHQUFHM3dCLElBQUksQ0FBQ215QixHQUFMLENBQVNueUIsSUFBSSxDQUFDb1AsSUFBTCxDQUFVNjRCLEVBQUUsR0FBR0EsRUFBTCxHQUFVLENBQXBCLElBQXlCQSxFQUFsQyxDQUhUO0FBQUEsVUFJSXJYLEVBQUUsR0FBRzV3QixJQUFJLENBQUNteUIsR0FBTCxDQUFTbnlCLElBQUksQ0FBQ29QLElBQUwsQ0FBVTg0QixFQUFFLEdBQUdBLEVBQUwsR0FBVSxDQUFwQixJQUF5QkEsRUFBbEMsQ0FKVDtBQUtBOXRDLE1BQUFBLENBQUMsR0FBRyxDQUFDdzJCLEVBQUUsR0FBR0QsRUFBTixJQUFZNlcsR0FBaEI7O0FBQ0EvMEMsTUFBQUEsQ0FBQyxHQUFHLFdBQVNpVSxDQUFULEVBQVk7QUFDZCxZQUFJOEosQ0FBQyxHQUFHOUosQ0FBQyxHQUFHdE0sQ0FBWjtBQUFBLFlBQ0krdEMsTUFBTSxHQUFHcE8sSUFBSSxDQUFDcEosRUFBRCxDQURqQjtBQUFBLFlBRUlXLENBQUMsR0FBRy9ILEVBQUUsSUFBSWtlLElBQUksR0FBRy9XLEVBQVgsQ0FBRixJQUFvQnlYLE1BQU0sR0FBR2IsSUFBSSxDQUFDRSxHQUFHLEdBQUdoM0IsQ0FBTixHQUFVbWdCLEVBQVgsQ0FBYixHQUE4QnNKLElBQUksQ0FBQ3RKLEVBQUQsQ0FBdEQsQ0FGUjtBQUdBLGVBQU8sQ0FDTGlYLEdBQUcsR0FBR3RXLENBQUMsR0FBR3JILEVBREwsRUFFTDRkLEdBQUcsR0FBR3ZXLENBQUMsR0FBR3BILEVBRkwsRUFHTFgsRUFBRSxHQUFHNGUsTUFBTCxHQUFjcE8sSUFBSSxDQUFDeU4sR0FBRyxHQUFHaDNCLENBQU4sR0FBVW1nQixFQUFYLENBSGIsQ0FBUDtBQUtELE9BVEQ7QUFVRDs7QUFFRGwrQixJQUFBQSxDQUFDLENBQUMwYixRQUFGLEdBQWEvVCxDQUFDLEdBQUcsSUFBSixHQUFXb3RDLEdBQVgsR0FBaUJ4bkMsSUFBSSxDQUFDb29DLEtBQW5DO0FBRUEsV0FBTzMxQyxDQUFQO0FBQ0Q7O0FBRURrMUMsRUFBQUEsSUFBSSxDQUFDSCxHQUFMLEdBQVcsVUFBU2h0QyxDQUFULEVBQVk7QUFDckIsUUFBSTZ0QyxFQUFFLEdBQUdyb0MsSUFBSSxDQUFDNmQsR0FBTCxDQUFTLElBQVQsRUFBZSxDQUFDcmpCLENBQWhCLENBQVQ7QUFBQSxRQUE2Qjh0QyxFQUFFLEdBQUdELEVBQUUsR0FBR0EsRUFBdkM7QUFBQSxRQUEyQ0UsRUFBRSxHQUFHRCxFQUFFLEdBQUdBLEVBQXJEOztBQUNBLFdBQU9mLE9BQU8sQ0FBQ2MsRUFBRCxFQUFLQyxFQUFMLEVBQVNDLEVBQVQsQ0FBZDtBQUNELEdBSEQ7O0FBS0EsU0FBT1osSUFBUDtBQUNELENBeERjLEVBd0RaM25DLElBQUksQ0FBQ29vQyxLQXhETyxFQXdEQSxDQXhEQSxFQXdERyxDQXhESCxDQUFmLEU7O0FDZEEsNkJBQWUscUJBQVM3aEMsS0FBVCxFQUFnQjtBQUM3QixNQUFJeWlCLFdBQUo7O0FBQ0EsU0FBT0EsV0FBVyxHQUFHemlCLEtBQUssQ0FBQ3lpQixXQUEzQjtBQUF3Q3ppQixJQUFBQSxLQUFLLEdBQUd5aUIsV0FBUjtBQUF4Qzs7QUFDQSxTQUFPemlCLEtBQVA7QUFDRCxDOztBQ0pEO0FBRUEsNkJBQWUscUJBQVNBLEtBQVQsRUFBZ0JyUixJQUFoQixFQUFzQjtBQUNuQ3FSLEVBQUFBLEtBQUssR0FBR3lpQixXQUFXLENBQUN6aUIsS0FBRCxDQUFuQjtBQUNBLE1BQUlyUixJQUFJLEtBQUsvQyxTQUFiLEVBQXdCK0MsSUFBSSxHQUFHcVIsS0FBSyxDQUFDaWlDLGFBQWI7O0FBQ3hCLE1BQUl0ekMsSUFBSixFQUFVO0FBQ1IsUUFBSTRMLEdBQUcsR0FBRzVMLElBQUksQ0FBQzB4QixlQUFMLElBQXdCMXhCLElBQWxDOztBQUNBLFFBQUk0TCxHQUFHLENBQUMybkMsY0FBUixFQUF3QjtBQUN0QixVQUFJcmQsS0FBSyxHQUFHdHFCLEdBQUcsQ0FBQzJuQyxjQUFKLEVBQVo7QUFDQXJkLE1BQUFBLEtBQUssQ0FBQ3p3QixDQUFOLEdBQVU0TCxLQUFLLENBQUNtaUMsT0FBaEIsRUFBeUJ0ZCxLQUFLLENBQUN0TSxDQUFOLEdBQVV2WSxLQUFLLENBQUNvaUMsT0FBekM7QUFDQXZkLE1BQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDd2QsZUFBTixDQUFzQjF6QyxJQUFJLENBQUMyekMsWUFBTCxHQUFvQkMsT0FBcEIsRUFBdEIsQ0FBUjtBQUNBLGFBQU8sQ0FBQzFkLEtBQUssQ0FBQ3p3QixDQUFQLEVBQVV5d0IsS0FBSyxDQUFDdE0sQ0FBaEIsQ0FBUDtBQUNEOztBQUNELFFBQUk1cEIsSUFBSSxDQUFDNnpDLHFCQUFULEVBQWdDO0FBQzlCLFVBQUk5RyxJQUFJLEdBQUcvc0MsSUFBSSxDQUFDNnpDLHFCQUFMLEVBQVg7QUFDQSxhQUFPLENBQUN4aUMsS0FBSyxDQUFDbWlDLE9BQU4sR0FBZ0J6RyxJQUFJLENBQUN4VSxJQUFyQixHQUE0QnY0QixJQUFJLENBQUM4ekMsVUFBbEMsRUFBOEN6aUMsS0FBSyxDQUFDb2lDLE9BQU4sR0FBZ0IxRyxJQUFJLENBQUNnSCxHQUFyQixHQUEyQi96QyxJQUFJLENBQUNnMEMsU0FBOUUsQ0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTyxDQUFDM2lDLEtBQUssQ0FBQzRpQyxLQUFQLEVBQWM1aUMsS0FBSyxDQUFDNmlDLEtBQXBCLENBQVA7QUFDRCxDOztBQ25CRCwyREFBZSxVQUFBenVDLENBQUM7QUFBQSxTQUFJO0FBQUEsV0FBTUEsQ0FBTjtBQUFBLEdBQUo7QUFBQSxDQUFoQixFOztBQ0FlLFNBQVMwdUMsU0FBVCxDQUFtQjFpQyxJQUFuQixRQUtaO0FBQUEsTUFKRHFpQixXQUlDLFFBSkRBLFdBSUM7QUFBQSxNQUhEL3hCLE1BR0MsUUFIREEsTUFHQztBQUFBLE1BRkQ2WSxTQUVDLFFBRkRBLFNBRUM7QUFBQSxNQUREckYsUUFDQyxRQUREQSxRQUNDO0FBQ0QzVyxFQUFBQSxNQUFNLENBQUN3MUMsZ0JBQVAsQ0FBd0IsSUFBeEIsRUFBOEI7QUFDNUIzaUMsSUFBQUEsSUFBSSxFQUFFO0FBQUNwVixNQUFBQSxLQUFLLEVBQUVvVixJQUFSO0FBQWM0aUMsTUFBQUEsVUFBVSxFQUFFLElBQTFCO0FBQWdDQyxNQUFBQSxZQUFZLEVBQUU7QUFBOUMsS0FEc0I7QUFFNUJ4Z0IsSUFBQUEsV0FBVyxFQUFFO0FBQUN6M0IsTUFBQUEsS0FBSyxFQUFFeTNCLFdBQVI7QUFBcUJ1Z0IsTUFBQUEsVUFBVSxFQUFFLElBQWpDO0FBQXVDQyxNQUFBQSxZQUFZLEVBQUU7QUFBckQsS0FGZTtBQUc1QnZ5QyxJQUFBQSxNQUFNLEVBQUU7QUFBQzFGLE1BQUFBLEtBQUssRUFBRTBGLE1BQVI7QUFBZ0JzeUMsTUFBQUEsVUFBVSxFQUFFLElBQTVCO0FBQWtDQyxNQUFBQSxZQUFZLEVBQUU7QUFBaEQsS0FIb0I7QUFJNUIxNUIsSUFBQUEsU0FBUyxFQUFFO0FBQUN2ZSxNQUFBQSxLQUFLLEVBQUV1ZSxTQUFSO0FBQW1CeTVCLE1BQUFBLFVBQVUsRUFBRSxJQUEvQjtBQUFxQ0MsTUFBQUEsWUFBWSxFQUFFO0FBQW5ELEtBSmlCO0FBSzVCaHZDLElBQUFBLENBQUMsRUFBRTtBQUFDakosTUFBQUEsS0FBSyxFQUFFa1o7QUFBUjtBQUx5QixHQUE5QjtBQU9ELEM7O0FDYk0sU0FBU2cvQixTQUFULENBQW1CcnpDLENBQW5CLEVBQXNCdUUsQ0FBdEIsRUFBeUJta0IsQ0FBekIsRUFBNEI7QUFDakMsT0FBSzFvQixDQUFMLEdBQVNBLENBQVQ7QUFDQSxPQUFLdUUsQ0FBTCxHQUFTQSxDQUFUO0FBQ0EsT0FBS21rQixDQUFMLEdBQVNBLENBQVQ7QUFDRDtBQUVEMnFCLFNBQVMsQ0FBQzExQyxTQUFWLEdBQXNCO0FBQ3BCRyxFQUFBQSxXQUFXLEVBQUV1MUMsU0FETztBQUVwQjE0QixFQUFBQSxLQUFLLEVBQUUsZUFBUzNhLENBQVQsRUFBWTtBQUNqQixXQUFPQSxDQUFDLEtBQUssQ0FBTixHQUFVLElBQVYsR0FBaUIsSUFBSXF6QyxTQUFKLENBQWMsS0FBS3J6QyxDQUFMLEdBQVNBLENBQXZCLEVBQTBCLEtBQUt1RSxDQUEvQixFQUFrQyxLQUFLbWtCLENBQXZDLENBQXhCO0FBQ0QsR0FKbUI7QUFLcEJyTyxFQUFBQSxTQUFTLEVBQUUsbUJBQVM5VixDQUFULEVBQVlta0IsQ0FBWixFQUFlO0FBQ3hCLFdBQU9ua0IsQ0FBQyxLQUFLLENBQU4sR0FBVW1rQixDQUFDLEtBQUssQ0FBaEIsR0FBb0IsSUFBcEIsR0FBMkIsSUFBSTJxQixTQUFKLENBQWMsS0FBS3J6QyxDQUFuQixFQUFzQixLQUFLdUUsQ0FBTCxHQUFTLEtBQUt2RSxDQUFMLEdBQVN1RSxDQUF4QyxFQUEyQyxLQUFLbWtCLENBQUwsR0FBUyxLQUFLMW9CLENBQUwsR0FBUzBvQixDQUE3RCxDQUFsQztBQUNELEdBUG1CO0FBUXBCN3NCLEVBQUFBLEtBQUssRUFBRSxlQUFTbTVCLEtBQVQsRUFBZ0I7QUFDckIsV0FBTyxDQUFDQSxLQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVcsS0FBS2gxQixDQUFoQixHQUFvQixLQUFLdUUsQ0FBMUIsRUFBNkJ5d0IsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXLEtBQUtoMUIsQ0FBaEIsR0FBb0IsS0FBSzBvQixDQUF0RCxDQUFQO0FBQ0QsR0FWbUI7QUFXcEI0cUIsRUFBQUEsTUFBTSxFQUFFLGdCQUFTL3VDLENBQVQsRUFBWTtBQUNsQixXQUFPQSxDQUFDLEdBQUcsS0FBS3ZFLENBQVQsR0FBYSxLQUFLdUUsQ0FBekI7QUFDRCxHQWJtQjtBQWNwQmd2QyxFQUFBQSxNQUFNLEVBQUUsZ0JBQVM3cUIsQ0FBVCxFQUFZO0FBQ2xCLFdBQU9BLENBQUMsR0FBRyxLQUFLMW9CLENBQVQsR0FBYSxLQUFLMG9CLENBQXpCO0FBQ0QsR0FoQm1CO0FBaUJwQnNTLEVBQUFBLE1BQU0sRUFBRSxnQkFBU3dZLFFBQVQsRUFBbUI7QUFDekIsV0FBTyxDQUFDLENBQUNBLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBYyxLQUFLanZDLENBQXBCLElBQXlCLEtBQUt2RSxDQUEvQixFQUFrQyxDQUFDd3pDLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBYyxLQUFLOXFCLENBQXBCLElBQXlCLEtBQUsxb0IsQ0FBaEUsQ0FBUDtBQUNELEdBbkJtQjtBQW9CcEJ5ekMsRUFBQUEsT0FBTyxFQUFFLGlCQUFTbHZDLENBQVQsRUFBWTtBQUNuQixXQUFPLENBQUNBLENBQUMsR0FBRyxLQUFLQSxDQUFWLElBQWUsS0FBS3ZFLENBQTNCO0FBQ0QsR0F0Qm1CO0FBdUJwQjB6QyxFQUFBQSxPQUFPLEVBQUUsaUJBQVNockIsQ0FBVCxFQUFZO0FBQ25CLFdBQU8sQ0FBQ0EsQ0FBQyxHQUFHLEtBQUtBLENBQVYsSUFBZSxLQUFLMW9CLENBQTNCO0FBQ0QsR0F6Qm1CO0FBMEJwQjJ6QyxFQUFBQSxRQUFRLEVBQUUsa0JBQVNwdkMsQ0FBVCxFQUFZO0FBQ3BCLFdBQU9BLENBQUMsQ0FBQzFCLElBQUYsR0FBU3MzQixNQUFULENBQWdCNTFCLENBQUMsQ0FBQzYxQixLQUFGLEdBQVV4MkIsR0FBVixDQUFjLEtBQUs2dkMsT0FBbkIsRUFBNEIsSUFBNUIsRUFBa0M3dkMsR0FBbEMsQ0FBc0NXLENBQUMsQ0FBQ3kyQixNQUF4QyxFQUFnRHoyQixDQUFoRCxDQUFoQixDQUFQO0FBQ0QsR0E1Qm1CO0FBNkJwQnF2QyxFQUFBQSxRQUFRLEVBQUUsa0JBQVNsckIsQ0FBVCxFQUFZO0FBQ3BCLFdBQU9BLENBQUMsQ0FBQzdsQixJQUFGLEdBQVNzM0IsTUFBVCxDQUFnQnpSLENBQUMsQ0FBQzBSLEtBQUYsR0FBVXgyQixHQUFWLENBQWMsS0FBSzh2QyxPQUFuQixFQUE0QixJQUE1QixFQUFrQzl2QyxHQUFsQyxDQUFzQzhrQixDQUFDLENBQUNzUyxNQUF4QyxFQUFnRHRTLENBQWhELENBQWhCLENBQVA7QUFDRCxHQS9CbUI7QUFnQ3BCOXFCLEVBQUFBLFFBQVEsRUFBRSxvQkFBVztBQUNuQixXQUFPLGVBQWUsS0FBSzJHLENBQXBCLEdBQXdCLEdBQXhCLEdBQThCLEtBQUtta0IsQ0FBbkMsR0FBdUMsVUFBdkMsR0FBb0QsS0FBSzFvQixDQUF6RCxHQUE2RCxHQUFwRTtBQUNEO0FBbENtQixDQUF0QjtBQXFDTyxJQUFJeVksa0JBQVEsR0FBRyxJQUFJNDZCLFNBQUosQ0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CLENBQXBCLENBQWY7QUFFUDM1QixTQUFTLENBQUMvYixTQUFWLEdBQXNCMDFDLFNBQVMsQ0FBQzExQyxTQUFoQztBQUVlLFNBQVMrYixTQUFULENBQW1CNWEsSUFBbkIsRUFBeUI7QUFDdEMsU0FBTyxDQUFDQSxJQUFJLENBQUMrMEMsTUFBYjtBQUFxQixRQUFJLEVBQUUvMEMsSUFBSSxHQUFHQSxJQUFJLENBQUNvTCxVQUFkLENBQUosRUFBK0IsT0FBT3VPLGtCQUFQO0FBQXBEOztBQUNBLFNBQU8zWixJQUFJLENBQUMrMEMsTUFBWjtBQUNELEM7O0FDbERNLFNBQVNubEIseUJBQVQsQ0FBdUJ2ZSxLQUF2QixFQUE4QjtBQUNuQ0EsRUFBQUEsS0FBSyxDQUFDdWdDLHdCQUFOO0FBQ0Q7QUFFRCw2QkFBZSw2QkFBU3ZnQyxLQUFULEVBQWdCO0FBQzdCQSxFQUFBQSxLQUFLLENBQUN3Z0MsY0FBTjtBQUNBeGdDLEVBQUFBLEtBQUssQ0FBQ3VnQyx3QkFBTjtBQUNELEM7O0FDUEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUdBO0FBQ0E7O0FBQ0EsU0FBU3RnQixrQkFBVCxDQUF1QmpnQixLQUF2QixFQUE4QjtBQUM1QixTQUFPLENBQUMsQ0FBQ0EsS0FBSyxDQUFDa2dCLE9BQVAsSUFBa0JsZ0IsS0FBSyxDQUFDSSxJQUFOLEtBQWUsT0FBbEMsS0FBOEMsQ0FBQ0osS0FBSyxDQUFDbWdCLE1BQTVEO0FBQ0Q7O0FBRUQsU0FBU0Msa0JBQVQsR0FBeUI7QUFDdkIsTUFBSWhhLENBQUMsR0FBRyxJQUFSOztBQUNBLE1BQUlBLENBQUMsWUFBWXc5QixVQUFqQixFQUE2QjtBQUMzQng5QixJQUFBQSxDQUFDLEdBQUdBLENBQUMsQ0FBQ2lhLGVBQUYsSUFBcUJqYSxDQUF6Qjs7QUFDQSxRQUFJQSxDQUFDLENBQUNrYSxZQUFGLENBQWUsU0FBZixDQUFKLEVBQStCO0FBQzdCbGEsTUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNtYSxPQUFGLENBQVUvVyxPQUFkO0FBQ0EsYUFBTyxDQUFDLENBQUNwRCxDQUFDLENBQUNoUyxDQUFILEVBQU1nUyxDQUFDLENBQUNtUyxDQUFSLENBQUQsRUFBYSxDQUFDblMsQ0FBQyxDQUFDaFMsQ0FBRixHQUFNZ1MsQ0FBQyxDQUFDb2EsS0FBVCxFQUFnQnBhLENBQUMsQ0FBQ21TLENBQUYsR0FBTW5TLENBQUMsQ0FBQzlULE1BQXhCLENBQWIsQ0FBUDtBQUNEOztBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUQsRUFBUyxDQUFDOFQsQ0FBQyxDQUFDb2EsS0FBRixDQUFRaFgsT0FBUixDQUFnQnhlLEtBQWpCLEVBQXdCb2IsQ0FBQyxDQUFDOVQsTUFBRixDQUFTa1gsT0FBVCxDQUFpQnhlLEtBQXpDLENBQVQsQ0FBUDtBQUNEOztBQUNELFNBQU8sQ0FBQyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUQsRUFBUyxDQUFDb2IsQ0FBQyxDQUFDeTlCLFdBQUgsRUFBZ0J6OUIsQ0FBQyxDQUFDMDlCLFlBQWxCLENBQVQsQ0FBUDtBQUNEOztBQUVELFNBQVNDLGdCQUFULEdBQTRCO0FBQzFCLFNBQU8sS0FBS0wsTUFBTCxJQUFlcDdCLGtCQUF0QjtBQUNEOztBQUVELFNBQVMwN0IsaUJBQVQsQ0FBMkJoa0MsS0FBM0IsRUFBa0M7QUFDaEMsU0FBTyxDQUFDQSxLQUFLLENBQUNpa0MsTUFBUCxJQUFpQmprQyxLQUFLLENBQUNra0MsU0FBTixLQUFvQixDQUFwQixHQUF3QixJQUF4QixHQUErQmxrQyxLQUFLLENBQUNra0MsU0FBTixHQUFrQixDQUFsQixHQUFzQixLQUF0RSxLQUFnRmxrQyxLQUFLLENBQUNrZ0IsT0FBTixHQUFnQixFQUFoQixHQUFxQixDQUFyRyxDQUFQO0FBQ0Q7O0FBRUQsU0FBU08scUJBQVQsR0FBNEI7QUFDMUIsU0FBT0MsU0FBUyxDQUFDQyxjQUFWLElBQTZCLGtCQUFrQixJQUF0RDtBQUNEOztBQUVELFNBQVN3akIsZ0JBQVQsQ0FBMEI1NkIsU0FBMUIsRUFBcUNzWCxNQUFyQyxFQUE2Q3VqQixlQUE3QyxFQUE4RDtBQUM1RCxNQUFJQyxHQUFHLEdBQUc5NkIsU0FBUyxDQUFDKzVCLE9BQVYsQ0FBa0J6aUIsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBbEIsSUFBa0N1akIsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUE1QztBQUFBLE1BQ0lFLEdBQUcsR0FBRy82QixTQUFTLENBQUMrNUIsT0FBVixDQUFrQnppQixNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFsQixJQUFrQ3VqQixlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBRDVDO0FBQUEsTUFFSUcsR0FBRyxHQUFHaDdCLFNBQVMsQ0FBQ2c2QixPQUFWLENBQWtCMWlCLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBQWxCLElBQWtDdWpCLGVBQWUsQ0FBQyxDQUFELENBQWYsQ0FBbUIsQ0FBbkIsQ0FGNUM7QUFBQSxNQUdJSSxHQUFHLEdBQUdqN0IsU0FBUyxDQUFDZzZCLE9BQVYsQ0FBa0IxaUIsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBbEIsSUFBa0N1akIsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUg1QztBQUlBLFNBQU83NkIsU0FBUyxDQUFDVyxTQUFWLENBQ0xvNkIsR0FBRyxHQUFHRCxHQUFOLEdBQVksQ0FBQ0EsR0FBRyxHQUFHQyxHQUFQLElBQWMsQ0FBMUIsR0FBOEI3cUMsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZMnFDLEdBQVosS0FBb0I1cUMsSUFBSSxDQUFDNmQsR0FBTCxDQUFTLENBQVQsRUFBWWd0QixHQUFaLENBRDdDLEVBRUxFLEdBQUcsR0FBR0QsR0FBTixHQUFZLENBQUNBLEdBQUcsR0FBR0MsR0FBUCxJQUFjLENBQTFCLEdBQThCL3FDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLENBQVQsRUFBWTZxQyxHQUFaLEtBQW9COXFDLElBQUksQ0FBQzZkLEdBQUwsQ0FBUyxDQUFULEVBQVlrdEIsR0FBWixDQUY3QyxDQUFQO0FBSUQ7O0FBRUQsNkJBQWUsZ0JBQVc7QUFDeEIsTUFBSTd0QyxNQUFNLEdBQUdzcEIsa0JBQWI7QUFBQSxNQUNJWSxNQUFNLEdBQUdULGtCQURiO0FBQUEsTUFFSXFrQixTQUFTLEdBQUdOLGdCQUZoQjtBQUFBLE1BR0lPLFVBQVUsR0FBR1YsaUJBSGpCO0FBQUEsTUFJSTdpQixTQUFTLEdBQUdWLHFCQUpoQjtBQUFBLE1BS0lra0IsV0FBVyxHQUFHLENBQUMsQ0FBRCxFQUFJeitCLFFBQUosQ0FMbEI7QUFBQSxNQU1JaytCLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQ2wrQixRQUFGLEVBQVksQ0FBQ0EsUUFBYixDQUFELEVBQXlCLENBQUNBLFFBQUQsRUFBV0EsUUFBWCxDQUF6QixDQU50QjtBQUFBLE1BT0kwQixRQUFRLEdBQUcsR0FQZjtBQUFBLE1BUUltUyxXQUFXLEdBQUc0cEIsUUFSbEI7QUFBQSxNQVNJdGlCLFNBQVMsR0FBR25kLFlBQVEsQ0FBQyxPQUFELEVBQVUsTUFBVixFQUFrQixLQUFsQixDQVR4QjtBQUFBLE1BVUkwZ0MsYUFWSjtBQUFBLE1BV0lDLFVBWEo7QUFBQSxNQVlJdGpCLFdBWko7QUFBQSxNQWFJdWpCLFVBQVUsR0FBRyxHQWJqQjtBQUFBLE1BY0lDLFVBQVUsR0FBRyxHQWRqQjtBQUFBLE1BZUlDLGNBQWMsR0FBRyxDQWZyQjtBQUFBLE1BZ0JJQyxXQUFXLEdBQUcsRUFoQmxCOztBQWtCQSxXQUFTN0QsSUFBVCxDQUFjcm9DLFNBQWQsRUFBeUI7QUFDdkJBLElBQUFBLFNBQVMsQ0FDSjhHLFFBREwsQ0FDYyxRQURkLEVBQ3dCa2tDLGdCQUR4QixFQUVLeGpDLEVBRkwsQ0FFUSxZQUZSLEVBRXNCMmtDLE9BRnRCLEVBRStCO0FBQUM5RSxNQUFBQSxPQUFPLEVBQUU7QUFBVixLQUYvQixFQUdLNy9CLEVBSEwsQ0FHUSxnQkFIUixFQUcwQjRrQyxXQUgxQixFQUlLNWtDLEVBSkwsQ0FJUSxlQUpSLEVBSXlCNmtDLFVBSnpCLEVBS0d6dUMsTUFMSCxDQUtVd3FCLFNBTFYsRUFNSzVnQixFQU5MLENBTVEsaUJBTlIsRUFNMkI4a0MsWUFOM0IsRUFPSzlrQyxFQVBMLENBT1EsZ0JBUFIsRUFPMEJxaEIsVUFQMUIsRUFRS3JoQixFQVJMLENBUVEsZ0NBUlIsRUFRMENzaEIsVUFSMUMsRUFTSzFsQixLQVRMLENBU1csNkJBVFgsRUFTMEMsZUFUMUM7QUFVRDs7QUFFRGlsQyxFQUFBQSxJQUFJLENBQUM3M0IsU0FBTCxHQUFpQixVQUFTKzdCLFVBQVQsRUFBcUIvN0IsU0FBckIsRUFBZ0NzYixLQUFoQyxFQUF1QzdrQixLQUF2QyxFQUE4QztBQUM3RCxRQUFJakgsU0FBUyxHQUFHdXNDLFVBQVUsQ0FBQ3ZzQyxTQUFYLEdBQXVCdXNDLFVBQVUsQ0FBQ3ZzQyxTQUFYLEVBQXZCLEdBQWdEdXNDLFVBQWhFO0FBQ0F2c0MsSUFBQUEsU0FBUyxDQUFDOEcsUUFBVixDQUFtQixRQUFuQixFQUE2QmtrQyxnQkFBN0I7O0FBQ0EsUUFBSXVCLFVBQVUsS0FBS3ZzQyxTQUFuQixFQUE4QjtBQUM1QmlQLE1BQUFBLFFBQVEsQ0FBQ3M5QixVQUFELEVBQWEvN0IsU0FBYixFQUF3QnNiLEtBQXhCLEVBQStCN2tCLEtBQS9CLENBQVI7QUFDRCxLQUZELE1BRU87QUFDTGpILE1BQUFBLFNBQVMsQ0FBQ29QLFNBQVYsR0FBc0IzWCxJQUF0QixDQUEyQixZQUFXO0FBQ3BDKzBDLFFBQUFBLE9BQU8sQ0FBQyxJQUFELEVBQU85NUMsU0FBUCxDQUFQLENBQ0d1VSxLQURILENBQ1NBLEtBRFQsRUFFR3ZRLEtBRkgsR0FHRzJ4QyxJQUhILENBR1EsSUFIUixFQUdjLE9BQU83M0IsU0FBUCxLQUFxQixVQUFyQixHQUFrQ0EsU0FBUyxDQUFDN2QsS0FBVixDQUFnQixJQUFoQixFQUFzQkQsU0FBdEIsQ0FBbEMsR0FBcUU4ZCxTQUhuRixFQUlHL1osR0FKSDtBQUtELE9BTkQ7QUFPRDtBQUNGLEdBZEQ7O0FBZ0JBNHhDLEVBQUFBLElBQUksQ0FBQ29FLE9BQUwsR0FBZSxVQUFTenNDLFNBQVQsRUFBb0JsSixDQUFwQixFQUF1QjgwQixDQUF2QixFQUEwQjNrQixLQUExQixFQUFpQztBQUM5Q29oQyxJQUFBQSxJQUFJLENBQUNxRSxPQUFMLENBQWExc0MsU0FBYixFQUF3QixZQUFXO0FBQ2pDLFVBQUkyc0MsRUFBRSxHQUFHLEtBQUtoQyxNQUFMLENBQVk3ekMsQ0FBckI7QUFBQSxVQUNJODFDLEVBQUUsR0FBRyxPQUFPOTFDLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUFDLENBQUNuRSxLQUFGLENBQVEsSUFBUixFQUFjRCxTQUFkLENBQTFCLEdBQXFEb0UsQ0FEOUQ7QUFFQSxhQUFPNjFDLEVBQUUsR0FBR0MsRUFBWjtBQUNELEtBSkQsRUFJR2hoQixDQUpILEVBSU0za0IsS0FKTjtBQUtELEdBTkQ7O0FBUUFvaEMsRUFBQUEsSUFBSSxDQUFDcUUsT0FBTCxHQUFlLFVBQVMxc0MsU0FBVCxFQUFvQmxKLENBQXBCLEVBQXVCODBCLENBQXZCLEVBQTBCM2tCLEtBQTFCLEVBQWlDO0FBQzlDb2hDLElBQUFBLElBQUksQ0FBQzczQixTQUFMLENBQWV4USxTQUFmLEVBQTBCLFlBQVc7QUFDbkMsVUFBSXFOLENBQUMsR0FBR3lhLE1BQU0sQ0FBQ24xQixLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBUjtBQUFBLFVBQ0krYSxFQUFFLEdBQUcsS0FBS2s5QixNQURkO0FBQUEsVUFFSXJILEVBQUUsR0FBRzFYLENBQUMsSUFBSSxJQUFMLEdBQVlpaEIsUUFBUSxDQUFDeC9CLENBQUQsQ0FBcEIsR0FBMEIsT0FBT3VlLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUFDLENBQUNqNUIsS0FBRixDQUFRLElBQVIsRUFBY0QsU0FBZCxDQUExQixHQUFxRGs1QixDQUZ4RjtBQUFBLFVBR0kyWCxFQUFFLEdBQUc5MUIsRUFBRSxDQUFDcWtCLE1BQUgsQ0FBVXdSLEVBQVYsQ0FIVDtBQUFBLFVBSUlzSixFQUFFLEdBQUcsT0FBTzkxQyxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBQyxDQUFDbkUsS0FBRixDQUFRLElBQVIsRUFBY0QsU0FBZCxDQUExQixHQUFxRG9FLENBSjlEO0FBS0EsYUFBTzQwQyxTQUFTLENBQUN2NkIsU0FBUyxDQUFDTSxLQUFLLENBQUNoRSxFQUFELEVBQUttL0IsRUFBTCxDQUFOLEVBQWdCdEosRUFBaEIsRUFBb0JDLEVBQXBCLENBQVYsRUFBbUNsMkIsQ0FBbkMsRUFBc0NnK0IsZUFBdEMsQ0FBaEI7QUFDRCxLQVBELEVBT0d6ZixDQVBILEVBT00za0IsS0FQTjtBQVFELEdBVEQ7O0FBV0FvaEMsRUFBQUEsSUFBSSxDQUFDeUUsV0FBTCxHQUFtQixVQUFTOXNDLFNBQVQsRUFBb0IzRSxDQUFwQixFQUF1Qm1rQixDQUF2QixFQUEwQnZZLEtBQTFCLEVBQWlDO0FBQ2xEb2hDLElBQUFBLElBQUksQ0FBQzczQixTQUFMLENBQWV4USxTQUFmLEVBQTBCLFlBQVc7QUFDbkMsYUFBTzByQyxTQUFTLENBQUMsS0FBS2YsTUFBTCxDQUFZeDVCLFNBQVosQ0FDZixPQUFPOVYsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQUMsQ0FBQzFJLEtBQUYsQ0FBUSxJQUFSLEVBQWNELFNBQWQsQ0FBMUIsR0FBcUQySSxDQUR0QyxFQUVmLE9BQU9ta0IsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQUMsQ0FBQzdzQixLQUFGLENBQVEsSUFBUixFQUFjRCxTQUFkLENBQTFCLEdBQXFEOHNCLENBRnRDLENBQUQsRUFHYnNJLE1BQU0sQ0FBQ24xQixLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FIYSxFQUdrQjI0QyxlQUhsQixDQUFoQjtBQUlELEtBTEQsRUFLRyxJQUxILEVBS1Nwa0MsS0FMVDtBQU1ELEdBUEQ7O0FBU0FvaEMsRUFBQUEsSUFBSSxDQUFDMEUsV0FBTCxHQUFtQixVQUFTL3NDLFNBQVQsRUFBb0IzRSxDQUFwQixFQUF1Qm1rQixDQUF2QixFQUEwQm9NLENBQTFCLEVBQTZCM2tCLEtBQTdCLEVBQW9DO0FBQ3JEb2hDLElBQUFBLElBQUksQ0FBQzczQixTQUFMLENBQWV4USxTQUFmLEVBQTBCLFlBQVc7QUFDbkMsVUFBSXFOLENBQUMsR0FBR3lhLE1BQU0sQ0FBQ24xQixLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBUjtBQUFBLFVBQ0kwVSxDQUFDLEdBQUcsS0FBS3VqQyxNQURiO0FBQUEsVUFFSXJILEVBQUUsR0FBRzFYLENBQUMsSUFBSSxJQUFMLEdBQVlpaEIsUUFBUSxDQUFDeC9CLENBQUQsQ0FBcEIsR0FBMEIsT0FBT3VlLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUFDLENBQUNqNUIsS0FBRixDQUFRLElBQVIsRUFBY0QsU0FBZCxDQUExQixHQUFxRGs1QixDQUZ4RjtBQUdBLGFBQU84ZixTQUFTLENBQUNuOEIsNEJBQUEsQ0FBbUIrekIsRUFBRSxDQUFDLENBQUQsQ0FBckIsRUFBMEJBLEVBQUUsQ0FBQyxDQUFELENBQTVCLEVBQWlDN3hCLEtBQWpDLENBQXVDckssQ0FBQyxDQUFDdFEsQ0FBekMsRUFBNENxYSxTQUE1QyxDQUNmLE9BQU85VixDQUFQLEtBQWEsVUFBYixHQUEwQixDQUFDQSxDQUFDLENBQUMxSSxLQUFGLENBQVEsSUFBUixFQUFjRCxTQUFkLENBQTNCLEdBQXNELENBQUMySSxDQUR4QyxFQUVmLE9BQU9ta0IsQ0FBUCxLQUFhLFVBQWIsR0FBMEIsQ0FBQ0EsQ0FBQyxDQUFDN3NCLEtBQUYsQ0FBUSxJQUFSLEVBQWNELFNBQWQsQ0FBM0IsR0FBc0QsQ0FBQzhzQixDQUZ4QyxDQUFELEVBR2JuUyxDQUhhLEVBR1ZnK0IsZUFIVSxDQUFoQjtBQUlELEtBUkQsRUFRR3pmLENBUkgsRUFRTTNrQixLQVJOO0FBU0QsR0FWRDs7QUFZQSxXQUFTd0ssS0FBVCxDQUFlakIsU0FBZixFQUEwQjFaLENBQTFCLEVBQTZCO0FBQzNCQSxJQUFBQSxDQUFDLEdBQUc0SixJQUFJLENBQUM2ZCxHQUFMLENBQVNxdEIsV0FBVyxDQUFDLENBQUQsQ0FBcEIsRUFBeUJsckMsSUFBSSxDQUFDQyxHQUFMLENBQVNpckMsV0FBVyxDQUFDLENBQUQsQ0FBcEIsRUFBeUI5MEMsQ0FBekIsQ0FBekIsQ0FBSjtBQUNBLFdBQU9BLENBQUMsS0FBSzBaLFNBQVMsQ0FBQzFaLENBQWhCLEdBQW9CMFosU0FBcEIsR0FBZ0MsSUFBSTI1QixTQUFKLENBQWNyekMsQ0FBZCxFQUFpQjBaLFNBQVMsQ0FBQ25WLENBQTNCLEVBQThCbVYsU0FBUyxDQUFDZ1AsQ0FBeEMsQ0FBdkM7QUFDRDs7QUFFRCxXQUFTck8sU0FBVCxDQUFtQlgsU0FBbkIsRUFBOEI4eUIsRUFBOUIsRUFBa0NDLEVBQWxDLEVBQXNDO0FBQ3BDLFFBQUlsb0MsQ0FBQyxHQUFHaW9DLEVBQUUsQ0FBQyxDQUFELENBQUYsR0FBUUMsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRL3lCLFNBQVMsQ0FBQzFaLENBQWxDO0FBQUEsUUFBcUMwb0IsQ0FBQyxHQUFHOGpCLEVBQUUsQ0FBQyxDQUFELENBQUYsR0FBUUMsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRL3lCLFNBQVMsQ0FBQzFaLENBQW5FO0FBQ0EsV0FBT3VFLENBQUMsS0FBS21WLFNBQVMsQ0FBQ25WLENBQWhCLElBQXFCbWtCLENBQUMsS0FBS2hQLFNBQVMsQ0FBQ2dQLENBQXJDLEdBQXlDaFAsU0FBekMsR0FBcUQsSUFBSTI1QixTQUFKLENBQWMzNUIsU0FBUyxDQUFDMVosQ0FBeEIsRUFBMkJ1RSxDQUEzQixFQUE4Qm1rQixDQUE5QixDQUE1RDtBQUNEOztBQUVELFdBQVNxdEIsUUFBVCxDQUFrQi9rQixNQUFsQixFQUEwQjtBQUN4QixXQUFPLENBQUMsQ0FBQyxDQUFDQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFELEdBQWdCLENBQUNBLE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVSxDQUFWLENBQWxCLElBQWtDLENBQW5DLEVBQXNDLENBQUMsQ0FBQ0EsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVLENBQVYsQ0FBRCxHQUFnQixDQUFDQSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVUsQ0FBVixDQUFsQixJQUFrQyxDQUF4RSxDQUFQO0FBQ0Q7O0FBRUQsV0FBUzdZLFFBQVQsQ0FBa0JnRCxVQUFsQixFQUE4QnpCLFNBQTlCLEVBQXlDc2IsS0FBekMsRUFBZ0Q3a0IsS0FBaEQsRUFBdUQ7QUFDckRnTCxJQUFBQSxVQUFVLENBQ0x6SyxFQURMLENBQ1EsWUFEUixFQUNzQixZQUFXO0FBQUVnbEMsTUFBQUEsT0FBTyxDQUFDLElBQUQsRUFBTzk1QyxTQUFQLENBQVAsQ0FBeUJ1VSxLQUF6QixDQUErQkEsS0FBL0IsRUFBc0N2USxLQUF0QztBQUFnRCxLQURuRixFQUVLOFEsRUFGTCxDQUVRLHlCQUZSLEVBRW1DLFlBQVc7QUFBRWdsQyxNQUFBQSxPQUFPLENBQUMsSUFBRCxFQUFPOTVDLFNBQVAsQ0FBUCxDQUF5QnVVLEtBQXpCLENBQStCQSxLQUEvQixFQUFzQ3hRLEdBQXRDO0FBQThDLEtBRjlGLEVBR0ttWSxLQUhMLENBR1csTUFIWCxFQUdtQixZQUFXO0FBQ3hCLFVBQUkzWSxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0l4RCxJQUFJLEdBQUdDLFNBRFg7QUFBQSxVQUVJc3JCLENBQUMsR0FBR3d1QixPQUFPLENBQUN2MkMsSUFBRCxFQUFPeEQsSUFBUCxDQUFQLENBQW9Cd1UsS0FBcEIsQ0FBMEJBLEtBQTFCLENBRlI7QUFBQSxVQUdJb0csQ0FBQyxHQUFHeWEsTUFBTSxDQUFDbjFCLEtBQVAsQ0FBYXNELElBQWIsRUFBbUJ4RCxJQUFuQixDQUhSO0FBQUEsVUFJSW01QixDQUFDLEdBQUdFLEtBQUssSUFBSSxJQUFULEdBQWdCK2dCLFFBQVEsQ0FBQ3gvQixDQUFELENBQXhCLEdBQThCLE9BQU95ZSxLQUFQLEtBQWlCLFVBQWpCLEdBQThCQSxLQUFLLENBQUNuNUIsS0FBTixDQUFZc0QsSUFBWixFQUFrQnhELElBQWxCLENBQTlCLEdBQXdEcTVCLEtBSjlGO0FBQUEsVUFLSXJGLENBQUMsR0FBRy9sQixJQUFJLENBQUM2ZCxHQUFMLENBQVNsUixDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxJQUFVQSxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUFuQixFQUE0QkEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsSUFBVUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBdEMsQ0FMUjtBQUFBLFVBTUlyVyxDQUFDLEdBQUdmLElBQUksQ0FBQzAwQyxNQU5iO0FBQUEsVUFPSTF6QyxDQUFDLEdBQUcsT0FBT3VaLFNBQVAsS0FBcUIsVUFBckIsR0FBa0NBLFNBQVMsQ0FBQzdkLEtBQVYsQ0FBZ0JzRCxJQUFoQixFQUFzQnhELElBQXRCLENBQWxDLEdBQWdFK2QsU0FQeEU7QUFBQSxVQVFJcmQsQ0FBQyxHQUFHNnRCLFdBQVcsQ0FBQ2hxQixDQUFDLENBQUM4NkIsTUFBRixDQUFTbEcsQ0FBVCxFQUFZcGdCLE1BQVosQ0FBbUJpYixDQUFDLEdBQUd6dkIsQ0FBQyxDQUFDRixDQUF6QixDQUFELEVBQThCRyxDQUFDLENBQUM2NkIsTUFBRixDQUFTbEcsQ0FBVCxFQUFZcGdCLE1BQVosQ0FBbUJpYixDQUFDLEdBQUd4dkIsQ0FBQyxDQUFDSCxDQUF6QixDQUE5QixDQVJuQjtBQVNBLGFBQU8sVUFBU3NRLENBQVQsRUFBWTtBQUNqQixZQUFJQSxDQUFDLEtBQUssQ0FBVixFQUFhQSxDQUFDLEdBQUduUSxDQUFKLENBQWIsQ0FBb0I7QUFBcEIsYUFDSztBQUFFLGNBQUlzbUIsQ0FBQyxHQUFHcHFCLENBQUMsQ0FBQ2lVLENBQUQsQ0FBVDtBQUFBLGNBQWN0USxDQUFDLEdBQUcydkIsQ0FBQyxHQUFHbEosQ0FBQyxDQUFDLENBQUQsQ0FBdkI7QUFBNEJuVyxVQUFBQSxDQUFDLEdBQUcsSUFBSStpQyxTQUFKLENBQWNyekMsQ0FBZCxFQUFpQjgwQixDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU9yTyxDQUFDLENBQUMsQ0FBRCxDQUFELEdBQU96bUIsQ0FBL0IsRUFBa0M4MEIsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPck8sQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPem1CLENBQWhELENBQUo7QUFBeUQ7QUFDNUZrbkIsUUFBQUEsQ0FBQyxDQUFDcXFCLElBQUYsQ0FBTyxJQUFQLEVBQWFqaEMsQ0FBYjtBQUNELE9BSkQ7QUFLRCxLQWxCTDtBQW1CRDs7QUFFRCxXQUFTb2xDLE9BQVQsQ0FBaUJ2MkMsSUFBakIsRUFBdUJ4RCxJQUF2QixFQUE2QjYyQixLQUE3QixFQUFvQztBQUNsQyxXQUFRLENBQUNBLEtBQUQsSUFBVXJ6QixJQUFJLENBQUMrMkMsU0FBaEIsSUFBOEIsSUFBSUMsT0FBSixDQUFZaDNDLElBQVosRUFBa0J4RCxJQUFsQixDQUFyQztBQUNEOztBQUVELFdBQVN3NkMsT0FBVCxDQUFpQmgzQyxJQUFqQixFQUF1QnhELElBQXZCLEVBQTZCO0FBQzNCLFNBQUt3RCxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLeEQsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBSzBjLE1BQUwsR0FBYyxDQUFkO0FBQ0EsU0FBS3VhLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLNUIsTUFBTCxHQUFjQSxNQUFNLENBQUNuMUIsS0FBUCxDQUFhc0QsSUFBYixFQUFtQnhELElBQW5CLENBQWQ7QUFDQSxTQUFLeTZDLElBQUwsR0FBWSxDQUFaO0FBQ0Q7O0FBRURELEVBQUFBLE9BQU8sQ0FBQ3g0QyxTQUFSLEdBQW9CO0FBQ2xCd1MsSUFBQUEsS0FBSyxFQUFFLGVBQVNBLE1BQVQsRUFBZ0I7QUFDckIsVUFBSUEsTUFBSixFQUFXLEtBQUt5aUIsV0FBTCxHQUFtQnppQixNQUFuQjtBQUNYLGFBQU8sSUFBUDtBQUNELEtBSmlCO0FBS2xCdlEsSUFBQUEsS0FBSyxFQUFFLGlCQUFXO0FBQ2hCLFVBQUksRUFBRSxLQUFLeVksTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUN2QixhQUFLbFosSUFBTCxDQUFVKzJDLFNBQVYsR0FBc0IsSUFBdEI7QUFDQSxhQUFLOWpCLElBQUwsQ0FBVSxPQUFWO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0QsS0FYaUI7QUFZbEJtZixJQUFBQSxJQUFJLEVBQUUsY0FBU3YyQyxHQUFULEVBQWMwZSxTQUFkLEVBQXlCO0FBQzdCLFVBQUksS0FBSzI4QixLQUFMLElBQWNyN0MsR0FBRyxLQUFLLE9BQTFCLEVBQW1DLEtBQUtxN0MsS0FBTCxDQUFXLENBQVgsSUFBZ0IzOEIsU0FBUyxDQUFDc2hCLE1BQVYsQ0FBaUIsS0FBS3FiLEtBQUwsQ0FBVyxDQUFYLENBQWpCLENBQWhCO0FBQ25DLFVBQUksS0FBS0MsTUFBTCxJQUFldDdDLEdBQUcsS0FBSyxPQUEzQixFQUFvQyxLQUFLczdDLE1BQUwsQ0FBWSxDQUFaLElBQWlCNThCLFNBQVMsQ0FBQ3NoQixNQUFWLENBQWlCLEtBQUtzYixNQUFMLENBQVksQ0FBWixDQUFqQixDQUFqQjtBQUNwQyxVQUFJLEtBQUtDLE1BQUwsSUFBZXY3QyxHQUFHLEtBQUssT0FBM0IsRUFBb0MsS0FBS3U3QyxNQUFMLENBQVksQ0FBWixJQUFpQjc4QixTQUFTLENBQUNzaEIsTUFBVixDQUFpQixLQUFLdWIsTUFBTCxDQUFZLENBQVosQ0FBakIsQ0FBakI7QUFDcEMsV0FBS3AzQyxJQUFMLENBQVUwMEMsTUFBVixHQUFtQm42QixTQUFuQjtBQUNBLFdBQUswWSxJQUFMLENBQVUsTUFBVjtBQUNBLGFBQU8sSUFBUDtBQUNELEtBbkJpQjtBQW9CbEJ6eUIsSUFBQUEsR0FBRyxFQUFFLGVBQVc7QUFDZCxVQUFJLEVBQUUsS0FBSzBZLE1BQVAsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIsZUFBTyxLQUFLbFosSUFBTCxDQUFVKzJDLFNBQWpCO0FBQ0EsYUFBSzlqQixJQUFMLENBQVUsS0FBVjtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNELEtBMUJpQjtBQTJCbEJBLElBQUFBLElBQUksRUFBRSxjQUFTN2hCLElBQVQsRUFBZTtBQUNuQixVQUFJL04sQ0FBQyxHQUFHK0MsVUFBTSxDQUFDLEtBQUtwRyxJQUFOLENBQU4sQ0FBa0JtSSxLQUFsQixFQUFSO0FBQ0FrcUIsTUFBQUEsU0FBUyxDQUFDMTBCLElBQVYsQ0FDRXlULElBREYsRUFFRSxLQUFLcFIsSUFGUCxFQUdFLElBQUk4ekMsU0FBSixDQUFjMWlDLElBQWQsRUFBb0I7QUFDbEJxaUIsUUFBQUEsV0FBVyxFQUFFLEtBQUtBLFdBREE7QUFFbEIveEIsUUFBQUEsTUFBTSxFQUFFMHdDLElBRlU7QUFHbEJoaEMsUUFBQUEsSUFBSSxFQUFKQSxJQUhrQjtBQUlsQm1KLFFBQUFBLFNBQVMsRUFBRSxLQUFLdmEsSUFBTCxDQUFVMDBDLE1BSkg7QUFLbEJ4L0IsUUFBQUEsUUFBUSxFQUFFbWQ7QUFMUSxPQUFwQixDQUhGLEVBVUVodkIsQ0FWRjtBQVlEO0FBekNpQixHQUFwQjs7QUE0Q0EsV0FBUzZ5QyxPQUFULENBQWlCbGxDLEtBQWpCLEVBQWlDO0FBQUEsc0NBQU54VSxJQUFNO0FBQU5BLE1BQUFBLElBQU07QUFBQTs7QUFDL0IsUUFBSSxDQUFDbUwsTUFBTSxDQUFDakwsS0FBUCxDQUFhLElBQWIsRUFBbUJELFNBQW5CLENBQUwsRUFBb0M7QUFDcEMsUUFBSXNyQixDQUFDLEdBQUd3dUIsT0FBTyxDQUFDLElBQUQsRUFBTy81QyxJQUFQLENBQVAsQ0FBb0J3VSxLQUFwQixDQUEwQkEsS0FBMUIsQ0FBUjtBQUFBLFFBQ0lHLENBQUMsR0FBRyxLQUFLdWpDLE1BRGI7QUFBQSxRQUVJN3pDLENBQUMsR0FBRzRKLElBQUksQ0FBQzZkLEdBQUwsQ0FBU3F0QixXQUFXLENBQUMsQ0FBRCxDQUFwQixFQUF5QmxyQyxJQUFJLENBQUNDLEdBQUwsQ0FBU2lyQyxXQUFXLENBQUMsQ0FBRCxDQUFwQixFQUF5QnhrQyxDQUFDLENBQUN0USxDQUFGLEdBQU00SixJQUFJLENBQUN5ZCxHQUFMLENBQVMsQ0FBVCxFQUFZd3RCLFVBQVUsQ0FBQ2g1QyxLQUFYLENBQWlCLElBQWpCLEVBQXVCRCxTQUF2QixDQUFaLENBQS9CLENBQXpCLENBRlI7QUFBQSxRQUdJazVCLENBQUMsR0FBR3ZHLFdBQU8sQ0FBQ3BlLEtBQUQsQ0FIZixDQUYrQixDQU8vQjtBQUNBOztBQUNBLFFBQUkrVyxDQUFDLENBQUNzdkIsS0FBTixFQUFhO0FBQ1gsVUFBSXR2QixDQUFDLENBQUNtdkIsS0FBRixDQUFRLENBQVIsRUFBVyxDQUFYLE1BQWtCdmhCLENBQUMsQ0FBQyxDQUFELENBQW5CLElBQTBCNU4sQ0FBQyxDQUFDbXZCLEtBQUYsQ0FBUSxDQUFSLEVBQVcsQ0FBWCxNQUFrQnZoQixDQUFDLENBQUMsQ0FBRCxDQUFqRCxFQUFzRDtBQUNwRDVOLFFBQUFBLENBQUMsQ0FBQ212QixLQUFGLENBQVEsQ0FBUixJQUFhL2xDLENBQUMsQ0FBQzBxQixNQUFGLENBQVM5VCxDQUFDLENBQUNtdkIsS0FBRixDQUFRLENBQVIsSUFBYXZoQixDQUF0QixDQUFiO0FBQ0Q7O0FBQ0RoZSxNQUFBQSxZQUFZLENBQUNvUSxDQUFDLENBQUNzdkIsS0FBSCxDQUFaO0FBQ0QsS0FMRCxDQU9BO0FBUEEsU0FRSyxJQUFJbG1DLENBQUMsQ0FBQ3RRLENBQUYsS0FBUUEsQ0FBWixFQUFlLE9BQWYsQ0FFTDtBQUZLLFNBR0E7QUFDSGtuQixNQUFBQSxDQUFDLENBQUNtdkIsS0FBRixHQUFVLENBQUN2aEIsQ0FBRCxFQUFJeGtCLENBQUMsQ0FBQzBxQixNQUFGLENBQVNsRyxDQUFULENBQUosQ0FBVjtBQUNBeGMsTUFBQUEsYUFBUyxDQUFDLElBQUQsQ0FBVDtBQUNBNE8sTUFBQUEsQ0FBQyxDQUFDdG5CLEtBQUY7QUFDRDs7QUFFRDZ1QixJQUFBQSxtQkFBTyxDQUFDdGUsS0FBRCxDQUFQO0FBQ0ErVyxJQUFBQSxDQUFDLENBQUNzdkIsS0FBRixHQUFVOWdDLFVBQVUsQ0FBQytnQyxVQUFELEVBQWF2QixVQUFiLENBQXBCO0FBQ0FodUIsSUFBQUEsQ0FBQyxDQUFDcXFCLElBQUYsQ0FBTyxPQUFQLEVBQWdCcUQsU0FBUyxDQUFDdjZCLFNBQVMsQ0FBQ00sS0FBSyxDQUFDckssQ0FBRCxFQUFJdFEsQ0FBSixDQUFOLEVBQWNrbkIsQ0FBQyxDQUFDbXZCLEtBQUYsQ0FBUSxDQUFSLENBQWQsRUFBMEJudkIsQ0FBQyxDQUFDbXZCLEtBQUYsQ0FBUSxDQUFSLENBQTFCLENBQVYsRUFBaURudkIsQ0FBQyxDQUFDOEosTUFBbkQsRUFBMkR1akIsZUFBM0QsQ0FBekI7O0FBRUEsYUFBU2tDLFVBQVQsR0FBc0I7QUFDcEJ2dkIsTUFBQUEsQ0FBQyxDQUFDc3ZCLEtBQUYsR0FBVSxJQUFWO0FBQ0F0dkIsTUFBQUEsQ0FBQyxDQUFDdm5CLEdBQUY7QUFDRDtBQUNGOztBQUVELFdBQVMyMUMsV0FBVCxDQUFxQm5sQyxLQUFyQixFQUFxQztBQUFBLHVDQUFOeFUsSUFBTTtBQUFOQSxNQUFBQSxJQUFNO0FBQUE7O0FBQ25DLFFBQUkrMUIsV0FBVyxJQUFJLENBQUM1cUIsTUFBTSxDQUFDakwsS0FBUCxDQUFhLElBQWIsRUFBbUJELFNBQW5CLENBQXBCLEVBQW1EO0FBQ25ELFFBQUl3MkMsYUFBYSxHQUFHamlDLEtBQUssQ0FBQ2lpQyxhQUExQjtBQUFBLFFBQ0lsckIsQ0FBQyxHQUFHd3VCLE9BQU8sQ0FBQyxJQUFELEVBQU8vNUMsSUFBUCxFQUFhLElBQWIsQ0FBUCxDQUEwQndVLEtBQTFCLENBQWdDQSxLQUFoQyxDQURSO0FBQUEsUUFFSXBFLENBQUMsR0FBR3hHLFVBQU0sQ0FBQzRLLEtBQUssQ0FBQ3VrQixJQUFQLENBQU4sQ0FBbUJoa0IsRUFBbkIsQ0FBc0IsZ0JBQXRCLEVBQXdDZ21DLFVBQXhDLEVBQW9ELElBQXBELEVBQTBEaG1DLEVBQTFELENBQTZELGNBQTdELEVBQTZFaW1DLFVBQTdFLEVBQXlGLElBQXpGLENBRlI7QUFBQSxRQUdJN2hCLENBQUMsR0FBR3ZHLFdBQU8sQ0FBQ3BlLEtBQUQsRUFBUWlpQyxhQUFSLENBSGY7QUFBQSxRQUlJN1IsRUFBRSxHQUFHcHdCLEtBQUssQ0FBQ21pQyxPQUpmO0FBQUEsUUFLSTlILEVBQUUsR0FBR3I2QixLQUFLLENBQUNvaUMsT0FMZjtBQU9BbGtCLElBQUFBLE1BQVcsQ0FBQ2xlLEtBQUssQ0FBQ3VrQixJQUFQLENBQVg7QUFDQWhHLElBQUFBLHlCQUFhLENBQUN2ZSxLQUFELENBQWI7QUFDQStXLElBQUFBLENBQUMsQ0FBQ212QixLQUFGLEdBQVUsQ0FBQ3ZoQixDQUFELEVBQUksS0FBSytlLE1BQUwsQ0FBWTdZLE1BQVosQ0FBbUJsRyxDQUFuQixDQUFKLENBQVY7QUFDQXhjLElBQUFBLGFBQVMsQ0FBQyxJQUFELENBQVQ7QUFDQTRPLElBQUFBLENBQUMsQ0FBQ3RuQixLQUFGOztBQUVBLGFBQVM4MkMsVUFBVCxDQUFvQnZtQyxLQUFwQixFQUEyQjtBQUN6QnNlLE1BQUFBLG1CQUFPLENBQUN0ZSxLQUFELENBQVA7O0FBQ0EsVUFBSSxDQUFDK1csQ0FBQyxDQUFDc04sS0FBUCxFQUFjO0FBQ1osWUFBSVgsRUFBRSxHQUFHMWpCLEtBQUssQ0FBQ21pQyxPQUFOLEdBQWdCL1IsRUFBekI7QUFBQSxZQUE2QnpNLEVBQUUsR0FBRzNqQixLQUFLLENBQUNvaUMsT0FBTixHQUFnQi9ILEVBQWxEO0FBQ0F0akIsUUFBQUEsQ0FBQyxDQUFDc04sS0FBRixHQUFVWCxFQUFFLEdBQUdBLEVBQUwsR0FBVUMsRUFBRSxHQUFHQSxFQUFmLEdBQW9CcWhCLGNBQTlCO0FBQ0Q7O0FBQ0RqdUIsTUFBQUEsQ0FBQyxDQUFDL1csS0FBRixDQUFRQSxLQUFSLEVBQ0VvaEMsSUFERixDQUNPLE9BRFAsRUFDZ0JxRCxTQUFTLENBQUN2NkIsU0FBUyxDQUFDNk0sQ0FBQyxDQUFDL25CLElBQUYsQ0FBTzAwQyxNQUFSLEVBQWdCM3NCLENBQUMsQ0FBQ212QixLQUFGLENBQVEsQ0FBUixJQUFhOW5CLFdBQU8sQ0FBQ3BlLEtBQUQsRUFBUWlpQyxhQUFSLENBQXBDLEVBQTREbHJCLENBQUMsQ0FBQ212QixLQUFGLENBQVEsQ0FBUixDQUE1RCxDQUFWLEVBQW1GbnZCLENBQUMsQ0FBQzhKLE1BQXJGLEVBQTZGdWpCLGVBQTdGLENBRHpCO0FBRUQ7O0FBRUQsYUFBU29DLFVBQVQsQ0FBb0J4bUMsS0FBcEIsRUFBMkI7QUFDekJwRSxNQUFBQSxDQUFDLENBQUMyRSxFQUFGLENBQUssNkJBQUwsRUFBb0MsSUFBcEM7QUFDQTRkLE1BQUFBLE9BQVUsQ0FBQ25lLEtBQUssQ0FBQ3VrQixJQUFQLEVBQWF4TixDQUFDLENBQUNzTixLQUFmLENBQVY7QUFDQS9GLE1BQUFBLG1CQUFPLENBQUN0ZSxLQUFELENBQVA7QUFDQStXLE1BQUFBLENBQUMsQ0FBQy9XLEtBQUYsQ0FBUUEsS0FBUixFQUFleFEsR0FBZjtBQUNEO0FBQ0Y7O0FBRUQsV0FBUzQxQyxVQUFULENBQW9CcGxDLEtBQXBCLEVBQW9DO0FBQUEsdUNBQU54VSxJQUFNO0FBQU5BLE1BQUFBLElBQU07QUFBQTs7QUFDbEMsUUFBSSxDQUFDbUwsTUFBTSxDQUFDakwsS0FBUCxDQUFhLElBQWIsRUFBbUJELFNBQW5CLENBQUwsRUFBb0M7QUFDcEMsUUFBSSthLEVBQUUsR0FBRyxLQUFLazlCLE1BQWQ7QUFBQSxRQUNJckgsRUFBRSxHQUFHamUsV0FBTyxDQUFDcGUsS0FBSyxDQUFDMGtCLGNBQU4sR0FBdUIxa0IsS0FBSyxDQUFDMGtCLGNBQU4sQ0FBcUIsQ0FBckIsQ0FBdkIsR0FBaUQxa0IsS0FBbEQsRUFBeUQsSUFBekQsQ0FEaEI7QUFBQSxRQUVJczhCLEVBQUUsR0FBRzkxQixFQUFFLENBQUNxa0IsTUFBSCxDQUFVd1IsRUFBVixDQUZUO0FBQUEsUUFHSXNKLEVBQUUsR0FBR24vQixFQUFFLENBQUMzVyxDQUFILElBQVFtUSxLQUFLLENBQUM4akIsUUFBTixHQUFpQixHQUFqQixHQUF1QixDQUEvQixDQUhUO0FBQUEsUUFJSXJkLEVBQUUsR0FBR2crQixTQUFTLENBQUN2NkIsU0FBUyxDQUFDTSxLQUFLLENBQUNoRSxFQUFELEVBQUttL0IsRUFBTCxDQUFOLEVBQWdCdEosRUFBaEIsRUFBb0JDLEVBQXBCLENBQVYsRUFBbUN6YixNQUFNLENBQUNuMUIsS0FBUCxDQUFhLElBQWIsRUFBbUJGLElBQW5CLENBQW5DLEVBQTZENDRDLGVBQTdELENBSmxCO0FBTUE5bEIsSUFBQUEsbUJBQU8sQ0FBQ3RlLEtBQUQsQ0FBUDtBQUNBLFFBQUk0SCxRQUFRLEdBQUcsQ0FBZixFQUFrQnhTLFVBQU0sQ0FBQyxJQUFELENBQU4sQ0FBYTRWLFVBQWIsR0FBMEJwRCxRQUExQixDQUFtQ0EsUUFBbkMsRUFBNkNqYixJQUE3QyxDQUFrRHFiLFFBQWxELEVBQTREdkIsRUFBNUQsRUFBZ0U0MUIsRUFBaEUsRUFBb0VyOEIsS0FBcEUsRUFBbEIsS0FDSzVLLFVBQU0sQ0FBQyxJQUFELENBQU4sQ0FBYXpJLElBQWIsQ0FBa0J5MEMsSUFBSSxDQUFDNzNCLFNBQXZCLEVBQWtDOUMsRUFBbEMsRUFBc0M0MUIsRUFBdEMsRUFBMENyOEIsS0FBMUM7QUFDTjs7QUFFRCxXQUFTcWxDLFlBQVQsQ0FBc0JybEMsS0FBdEIsRUFBc0M7QUFBQSx1Q0FBTnhVLElBQU07QUFBTkEsTUFBQUEsSUFBTTtBQUFBOztBQUNwQyxRQUFJLENBQUNtTCxNQUFNLENBQUNqTCxLQUFQLENBQWEsSUFBYixFQUFtQkQsU0FBbkIsQ0FBTCxFQUFvQztBQUNwQyxRQUFJaTNCLE9BQU8sR0FBRzFpQixLQUFLLENBQUMwaUIsT0FBcEI7QUFBQSxRQUNJcDFCLENBQUMsR0FBR28xQixPQUFPLENBQUM1MUIsTUFEaEI7QUFBQSxRQUVJaXFCLENBQUMsR0FBR3d1QixPQUFPLENBQUMsSUFBRCxFQUFPLzVDLElBQVAsRUFBYXdVLEtBQUssQ0FBQzBrQixjQUFOLENBQXFCNTNCLE1BQXJCLEtBQWdDUSxDQUE3QyxDQUFQLENBQXVEMFMsS0FBdkQsQ0FBNkRBLEtBQTdELENBRlI7QUFBQSxRQUdJMmhCLE9BSEo7QUFBQSxRQUdhejFCLENBSGI7QUFBQSxRQUdnQmlVLENBSGhCO0FBQUEsUUFHbUJ3a0IsQ0FIbkI7QUFLQXBHLElBQUFBLHlCQUFhLENBQUN2ZSxLQUFELENBQWI7O0FBQ0EsU0FBSzlULENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR29CLENBQWhCLEVBQW1CLEVBQUVwQixDQUFyQixFQUF3QjtBQUN0QmlVLE1BQUFBLENBQUMsR0FBR3VpQixPQUFPLENBQUN4MkIsQ0FBRCxDQUFYLEVBQWdCeTRCLENBQUMsR0FBR3ZHLFdBQU8sQ0FBQ2plLENBQUQsRUFBSSxJQUFKLENBQTNCO0FBQ0F3a0IsTUFBQUEsQ0FBQyxHQUFHLENBQUNBLENBQUQsRUFBSSxLQUFLK2UsTUFBTCxDQUFZN1ksTUFBWixDQUFtQmxHLENBQW5CLENBQUosRUFBMkJ4a0IsQ0FBQyxDQUFDK2pCLFVBQTdCLENBQUo7QUFDQSxVQUFJLENBQUNuTixDQUFDLENBQUNvdkIsTUFBUCxFQUFlcHZCLENBQUMsQ0FBQ292QixNQUFGLEdBQVd4aEIsQ0FBWCxFQUFjaEQsT0FBTyxHQUFHLElBQXhCLEVBQThCNUssQ0FBQyxDQUFDa3ZCLElBQUYsR0FBUyxJQUFJLENBQUMsQ0FBQ3JCLGFBQTdDLENBQWYsS0FDSyxJQUFJLENBQUM3dEIsQ0FBQyxDQUFDcXZCLE1BQUgsSUFBYXJ2QixDQUFDLENBQUNvdkIsTUFBRixDQUFTLENBQVQsTUFBZ0J4aEIsQ0FBQyxDQUFDLENBQUQsQ0FBbEMsRUFBdUM1TixDQUFDLENBQUNxdkIsTUFBRixHQUFXemhCLENBQVgsRUFBYzVOLENBQUMsQ0FBQ2t2QixJQUFGLEdBQVMsQ0FBdkI7QUFDN0M7O0FBRUQsUUFBSXJCLGFBQUosRUFBbUJBLGFBQWEsR0FBR2orQixZQUFZLENBQUNpK0IsYUFBRCxDQUE1Qjs7QUFFbkIsUUFBSWpqQixPQUFKLEVBQWE7QUFDWCxVQUFJNUssQ0FBQyxDQUFDa3ZCLElBQUYsR0FBUyxDQUFiLEVBQWdCcEIsVUFBVSxHQUFHbGdCLENBQUMsQ0FBQyxDQUFELENBQWQsRUFBbUJpZ0IsYUFBYSxHQUFHci9CLFVBQVUsQ0FBQyxZQUFXO0FBQUVxL0IsUUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQXVCLE9BQXJDLEVBQXVDRSxVQUF2QyxDQUE3QztBQUNoQjM4QixNQUFBQSxhQUFTLENBQUMsSUFBRCxDQUFUO0FBQ0E0TyxNQUFBQSxDQUFDLENBQUN0bkIsS0FBRjtBQUNEO0FBQ0Y7O0FBRUQsV0FBU215QixVQUFULENBQW9CNWhCLEtBQXBCLEVBQW9DO0FBQ2xDLFFBQUksQ0FBQyxLQUFLK2xDLFNBQVYsRUFBcUI7O0FBRGEsdUNBQU52NkMsSUFBTTtBQUFOQSxNQUFBQSxJQUFNO0FBQUE7O0FBRWxDLFFBQUl1ckIsQ0FBQyxHQUFHd3VCLE9BQU8sQ0FBQyxJQUFELEVBQU8vNUMsSUFBUCxDQUFQLENBQW9Cd1UsS0FBcEIsQ0FBMEJBLEtBQTFCLENBQVI7QUFBQSxRQUNJMGlCLE9BQU8sR0FBRzFpQixLQUFLLENBQUMwa0IsY0FEcEI7QUFBQSxRQUVJcDNCLENBQUMsR0FBR28xQixPQUFPLENBQUM1MUIsTUFGaEI7QUFBQSxRQUV3QlosQ0FGeEI7QUFBQSxRQUUyQmlVLENBRjNCO0FBQUEsUUFFOEJ3a0IsQ0FGOUI7QUFBQSxRQUVpQ3JPLENBRmpDO0FBSUFnSSxJQUFBQSxtQkFBTyxDQUFDdGUsS0FBRCxDQUFQOztBQUNBLFNBQUs5VCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdvQixDQUFoQixFQUFtQixFQUFFcEIsQ0FBckIsRUFBd0I7QUFDdEJpVSxNQUFBQSxDQUFDLEdBQUd1aUIsT0FBTyxDQUFDeDJCLENBQUQsQ0FBWCxFQUFnQnk0QixDQUFDLEdBQUd2RyxXQUFPLENBQUNqZSxDQUFELEVBQUksSUFBSixDQUEzQjtBQUNBLFVBQUk0VyxDQUFDLENBQUNvdkIsTUFBRixJQUFZcHZCLENBQUMsQ0FBQ292QixNQUFGLENBQVMsQ0FBVCxNQUFnQmhtQyxDQUFDLENBQUMrakIsVUFBbEMsRUFBOENuTixDQUFDLENBQUNvdkIsTUFBRixDQUFTLENBQVQsSUFBY3hoQixDQUFkLENBQTlDLEtBQ0ssSUFBSTVOLENBQUMsQ0FBQ3F2QixNQUFGLElBQVlydkIsQ0FBQyxDQUFDcXZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCam1DLENBQUMsQ0FBQytqQixVQUFsQyxFQUE4Q25OLENBQUMsQ0FBQ3F2QixNQUFGLENBQVMsQ0FBVCxJQUFjemhCLENBQWQ7QUFDcEQ7O0FBQ0R4a0IsSUFBQUEsQ0FBQyxHQUFHNFcsQ0FBQyxDQUFDL25CLElBQUYsQ0FBTzAwQyxNQUFYOztBQUNBLFFBQUkzc0IsQ0FBQyxDQUFDcXZCLE1BQU4sRUFBYztBQUNaLFVBQUkvSixFQUFFLEdBQUd0bEIsQ0FBQyxDQUFDb3ZCLE1BQUYsQ0FBUyxDQUFULENBQVQ7QUFBQSxVQUFzQk0sRUFBRSxHQUFHMXZCLENBQUMsQ0FBQ292QixNQUFGLENBQVMsQ0FBVCxDQUEzQjtBQUFBLFVBQ0k3SixFQUFFLEdBQUd2bEIsQ0FBQyxDQUFDcXZCLE1BQUYsQ0FBUyxDQUFULENBRFQ7QUFBQSxVQUNzQk0sRUFBRSxHQUFHM3ZCLENBQUMsQ0FBQ3F2QixNQUFGLENBQVMsQ0FBVCxDQUQzQjtBQUFBLFVBRUlPLEVBQUUsR0FBRyxDQUFDQSxFQUFFLEdBQUdySyxFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFELEVBQUUsQ0FBQyxDQUFELENBQWhCLElBQXVCc0ssRUFBdkIsR0FBNEIsQ0FBQ0EsRUFBRSxHQUFHckssRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRRCxFQUFFLENBQUMsQ0FBRCxDQUFoQixJQUF1QnNLLEVBRjVEO0FBQUEsVUFHSUMsRUFBRSxHQUFHLENBQUNBLEVBQUUsR0FBR0YsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRRCxFQUFFLENBQUMsQ0FBRCxDQUFoQixJQUF1QkcsRUFBdkIsR0FBNEIsQ0FBQ0EsRUFBRSxHQUFHRixFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFELEVBQUUsQ0FBQyxDQUFELENBQWhCLElBQXVCRyxFQUg1RDtBQUlBem1DLE1BQUFBLENBQUMsR0FBR3FLLEtBQUssQ0FBQ3JLLENBQUQsRUFBSTFHLElBQUksQ0FBQ29QLElBQUwsQ0FBVTg5QixFQUFFLEdBQUdDLEVBQWYsQ0FBSixDQUFUO0FBQ0FqaUIsTUFBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQzBYLEVBQUUsQ0FBQyxDQUFELENBQUYsR0FBUUMsRUFBRSxDQUFDLENBQUQsQ0FBWCxJQUFrQixDQUFuQixFQUFzQixDQUFDRCxFQUFFLENBQUMsQ0FBRCxDQUFGLEdBQVFDLEVBQUUsQ0FBQyxDQUFELENBQVgsSUFBa0IsQ0FBeEMsQ0FBSjtBQUNBaG1CLE1BQUFBLENBQUMsR0FBRyxDQUFDLENBQUNtd0IsRUFBRSxDQUFDLENBQUQsQ0FBRixHQUFRQyxFQUFFLENBQUMsQ0FBRCxDQUFYLElBQWtCLENBQW5CLEVBQXNCLENBQUNELEVBQUUsQ0FBQyxDQUFELENBQUYsR0FBUUMsRUFBRSxDQUFDLENBQUQsQ0FBWCxJQUFrQixDQUF4QyxDQUFKO0FBQ0QsS0FSRCxNQVNLLElBQUkzdkIsQ0FBQyxDQUFDb3ZCLE1BQU4sRUFBY3hoQixDQUFDLEdBQUc1TixDQUFDLENBQUNvdkIsTUFBRixDQUFTLENBQVQsQ0FBSixFQUFpQjd2QixDQUFDLEdBQUdTLENBQUMsQ0FBQ292QixNQUFGLENBQVMsQ0FBVCxDQUFyQixDQUFkLEtBQ0E7O0FBRUxwdkIsSUFBQUEsQ0FBQyxDQUFDcXFCLElBQUYsQ0FBTyxPQUFQLEVBQWdCcUQsU0FBUyxDQUFDdjZCLFNBQVMsQ0FBQy9KLENBQUQsRUFBSXdrQixDQUFKLEVBQU9yTyxDQUFQLENBQVYsRUFBcUJTLENBQUMsQ0FBQzhKLE1BQXZCLEVBQStCdWpCLGVBQS9CLENBQXpCO0FBQ0Q7O0FBRUQsV0FBU3ZpQixVQUFULENBQW9CN2hCLEtBQXBCLEVBQW9DO0FBQUEsdUNBQU54VSxJQUFNO0FBQU5BLE1BQUFBLElBQU07QUFBQTs7QUFDbEMsUUFBSSxDQUFDLEtBQUt1NkMsU0FBVixFQUFxQjtBQUNyQixRQUFJaHZCLENBQUMsR0FBR3d1QixPQUFPLENBQUMsSUFBRCxFQUFPLzVDLElBQVAsQ0FBUCxDQUFvQndVLEtBQXBCLENBQTBCQSxLQUExQixDQUFSO0FBQUEsUUFDSTBpQixPQUFPLEdBQUcxaUIsS0FBSyxDQUFDMGtCLGNBRHBCO0FBQUEsUUFFSXAzQixDQUFDLEdBQUdvMUIsT0FBTyxDQUFDNTFCLE1BRmhCO0FBQUEsUUFFd0JaLENBRnhCO0FBQUEsUUFFMkJpVSxDQUYzQjtBQUlBb2UsSUFBQUEseUJBQWEsQ0FBQ3ZlLEtBQUQsQ0FBYjtBQUNBLFFBQUl1aEIsV0FBSixFQUFpQjVhLFlBQVksQ0FBQzRhLFdBQUQsQ0FBWjtBQUNqQkEsSUFBQUEsV0FBVyxHQUFHaGMsVUFBVSxDQUFDLFlBQVc7QUFBRWdjLE1BQUFBLFdBQVcsR0FBRyxJQUFkO0FBQXFCLEtBQW5DLEVBQXFDdWpCLFVBQXJDLENBQXhCOztBQUNBLFNBQUs1NEMsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHb0IsQ0FBaEIsRUFBbUIsRUFBRXBCLENBQXJCLEVBQXdCO0FBQ3RCaVUsTUFBQUEsQ0FBQyxHQUFHdWlCLE9BQU8sQ0FBQ3gyQixDQUFELENBQVg7QUFDQSxVQUFJNnFCLENBQUMsQ0FBQ292QixNQUFGLElBQVlwdkIsQ0FBQyxDQUFDb3ZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCaG1DLENBQUMsQ0FBQytqQixVQUFsQyxFQUE4QyxPQUFPbk4sQ0FBQyxDQUFDb3ZCLE1BQVQsQ0FBOUMsS0FDSyxJQUFJcHZCLENBQUMsQ0FBQ3F2QixNQUFGLElBQVlydkIsQ0FBQyxDQUFDcXZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCam1DLENBQUMsQ0FBQytqQixVQUFsQyxFQUE4QyxPQUFPbk4sQ0FBQyxDQUFDcXZCLE1BQVQ7QUFDcEQ7O0FBQ0QsUUFBSXJ2QixDQUFDLENBQUNxdkIsTUFBRixJQUFZLENBQUNydkIsQ0FBQyxDQUFDb3ZCLE1BQW5CLEVBQTJCcHZCLENBQUMsQ0FBQ292QixNQUFGLEdBQVdwdkIsQ0FBQyxDQUFDcXZCLE1BQWIsRUFBcUIsT0FBT3J2QixDQUFDLENBQUNxdkIsTUFBOUI7QUFDM0IsUUFBSXJ2QixDQUFDLENBQUNvdkIsTUFBTixFQUFjcHZCLENBQUMsQ0FBQ292QixNQUFGLENBQVMsQ0FBVCxJQUFjLEtBQUt6QyxNQUFMLENBQVk3WSxNQUFaLENBQW1COVQsQ0FBQyxDQUFDb3ZCLE1BQUYsQ0FBUyxDQUFULENBQW5CLENBQWQsQ0FBZCxLQUNLO0FBQ0hwdkIsTUFBQUEsQ0FBQyxDQUFDdm5CLEdBQUYsR0FERyxDQUVIOztBQUNBLFVBQUl1bkIsQ0FBQyxDQUFDa3ZCLElBQUYsS0FBVyxDQUFmLEVBQWtCO0FBQ2hCOWxDLFFBQUFBLENBQUMsR0FBR2llLFdBQU8sQ0FBQ2plLENBQUQsRUFBSSxJQUFKLENBQVg7O0FBQ0EsWUFBSTFHLElBQUksQ0FBQ290QyxLQUFMLENBQVdoQyxVQUFVLENBQUMsQ0FBRCxDQUFWLEdBQWdCMWtDLENBQUMsQ0FBQyxDQUFELENBQTVCLEVBQWlDMGtDLFVBQVUsQ0FBQyxDQUFELENBQVYsR0FBZ0Ixa0MsQ0FBQyxDQUFDLENBQUQsQ0FBbEQsSUFBeUQ4a0MsV0FBN0QsRUFBMEU7QUFDeEUsY0FBSXRnQixDQUFDLEdBQUd2dkIsVUFBTSxDQUFDLElBQUQsQ0FBTixDQUFhbUwsRUFBYixDQUFnQixlQUFoQixDQUFSO0FBQ0EsY0FBSW9rQixDQUFKLEVBQU9BLENBQUMsQ0FBQ2o1QixLQUFGLENBQVEsSUFBUixFQUFjRCxTQUFkO0FBQ1I7QUFDRjtBQUNGO0FBQ0Y7O0FBRUQyMUMsRUFBQUEsSUFBSSxDQUFDc0QsVUFBTCxHQUFrQixVQUFTendDLENBQVQsRUFBWTtBQUM1QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQjQzQyxVQUFVLEdBQUcsT0FBT3p3QyxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJ3RCxvQkFBUSxDQUFDLENBQUN4RCxDQUFGLENBQW5ELEVBQXlEbXRDLElBQTdFLElBQXFGc0QsVUFBNUY7QUFDRCxHQUZEOztBQUlBdEQsRUFBQUEsSUFBSSxDQUFDenFDLE1BQUwsR0FBYyxVQUFTMUMsQ0FBVCxFQUFZO0FBQ3hCLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CNkosTUFBTSxHQUFHLE9BQU8xQyxDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJ3RCxvQkFBUSxDQUFDLENBQUMsQ0FBQ3hELENBQUgsQ0FBL0MsRUFBc0RtdEMsSUFBMUUsSUFBa0Z6cUMsTUFBekY7QUFDRCxHQUZEOztBQUlBeXFDLEVBQUFBLElBQUksQ0FBQ2pnQixTQUFMLEdBQWlCLFVBQVNsdEIsQ0FBVCxFQUFZO0FBQzNCLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CcTBCLFNBQVMsR0FBRyxPQUFPbHRCLENBQVAsS0FBYSxVQUFiLEdBQTBCQSxDQUExQixHQUE4QndELG9CQUFRLENBQUMsQ0FBQyxDQUFDeEQsQ0FBSCxDQUFsRCxFQUF5RG10QyxJQUE3RSxJQUFxRmpnQixTQUE1RjtBQUNELEdBRkQ7O0FBSUFpZ0IsRUFBQUEsSUFBSSxDQUFDdmdCLE1BQUwsR0FBYyxVQUFTNXNCLENBQVQsRUFBWTtBQUN4QixXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQit6QixNQUFNLEdBQUcsT0FBTzVzQixDQUFQLEtBQWEsVUFBYixHQUEwQkEsQ0FBMUIsR0FBOEJ3RCxvQkFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDeEQsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBRixFQUFXLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQVosQ0FBRCxFQUF1QixDQUFDLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQUYsRUFBVyxDQUFDQSxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUFaLENBQXZCLENBQUQsQ0FBL0MsRUFBK0ZtdEMsSUFBbkgsSUFBMkh2Z0IsTUFBbEk7QUFDRCxHQUZEOztBQUlBdWdCLEVBQUFBLElBQUksQ0FBQ3VELFdBQUwsR0FBbUIsVUFBUzF3QyxDQUFULEVBQVk7QUFDN0IsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0I2M0MsV0FBVyxDQUFDLENBQUQsQ0FBWCxHQUFpQixDQUFDMXdDLENBQUMsQ0FBQyxDQUFELENBQW5CLEVBQXdCMHdDLFdBQVcsQ0FBQyxDQUFELENBQVgsR0FBaUIsQ0FBQzF3QyxDQUFDLENBQUMsQ0FBRCxDQUEzQyxFQUFnRG10QyxJQUFwRSxJQUE0RSxDQUFDdUQsV0FBVyxDQUFDLENBQUQsQ0FBWixFQUFpQkEsV0FBVyxDQUFDLENBQUQsQ0FBNUIsQ0FBbkY7QUFDRCxHQUZEOztBQUlBdkQsRUFBQUEsSUFBSSxDQUFDZ0QsZUFBTCxHQUF1QixVQUFTbndDLENBQVQsRUFBWTtBQUNqQyxXQUFPeEksU0FBUyxDQUFDcUIsTUFBVixJQUFvQnMzQyxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLElBQXdCLENBQUNud0MsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBekIsRUFBa0Ntd0MsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixJQUF3QixDQUFDbndDLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBSyxDQUFMLENBQTNELEVBQW9FbXdDLGVBQWUsQ0FBQyxDQUFELENBQWYsQ0FBbUIsQ0FBbkIsSUFBd0IsQ0FBQ253QyxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUssQ0FBTCxDQUE3RixFQUFzR213QyxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLElBQXdCLENBQUNud0MsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLLENBQUwsQ0FBL0gsRUFBd0ltdEMsSUFBNUosSUFBb0ssQ0FBQyxDQUFDZ0QsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUFELEVBQXdCQSxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBQXhCLENBQUQsRUFBaUQsQ0FBQ0EsZUFBZSxDQUFDLENBQUQsQ0FBZixDQUFtQixDQUFuQixDQUFELEVBQXdCQSxlQUFlLENBQUMsQ0FBRCxDQUFmLENBQW1CLENBQW5CLENBQXhCLENBQWpELENBQTNLO0FBQ0QsR0FGRDs7QUFJQWhELEVBQUFBLElBQUksQ0FBQ3FELFNBQUwsR0FBaUIsVUFBU3h3QyxDQUFULEVBQVk7QUFDM0IsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0IyM0MsU0FBUyxHQUFHeHdDLENBQVosRUFBZW10QyxJQUFuQyxJQUEyQ3FELFNBQWxEO0FBQ0QsR0FGRDs7QUFJQXJELEVBQUFBLElBQUksQ0FBQ3g1QixRQUFMLEdBQWdCLFVBQVMzVCxDQUFULEVBQVk7QUFDMUIsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0I4YSxRQUFRLEdBQUcsQ0FBQzNULENBQVosRUFBZW10QyxJQUFuQyxJQUEyQ3g1QixRQUFsRDtBQUNELEdBRkQ7O0FBSUF3NUIsRUFBQUEsSUFBSSxDQUFDcm5CLFdBQUwsR0FBbUIsVUFBUzlsQixDQUFULEVBQVk7QUFDN0IsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0JpdEIsV0FBVyxHQUFHOWxCLENBQWQsRUFBaUJtdEMsSUFBckMsSUFBNkNybkIsV0FBcEQ7QUFDRCxHQUZEOztBQUlBcW5CLEVBQUFBLElBQUksQ0FBQzdnQyxFQUFMLEdBQVUsWUFBVztBQUNuQixRQUFJdlYsS0FBSyxHQUFHcTJCLFNBQVMsQ0FBQzlnQixFQUFWLENBQWE3VSxLQUFiLENBQW1CMjFCLFNBQW5CLEVBQThCNTFCLFNBQTlCLENBQVo7QUFDQSxXQUFPVCxLQUFLLEtBQUtxMkIsU0FBVixHQUFzQitmLElBQXRCLEdBQTZCcDJDLEtBQXBDO0FBQ0QsR0FIRDs7QUFLQW8yQyxFQUFBQSxJQUFJLENBQUMwRixhQUFMLEdBQXFCLFVBQVM3eUMsQ0FBVCxFQUFZO0FBQy9CLFdBQU94SSxTQUFTLENBQUNxQixNQUFWLElBQW9CazRDLGNBQWMsR0FBRyxDQUFDL3dDLENBQUMsR0FBRyxDQUFDQSxDQUFOLElBQVdBLENBQTVCLEVBQStCbXRDLElBQW5ELElBQTJEM25DLElBQUksQ0FBQ29QLElBQUwsQ0FBVW04QixjQUFWLENBQWxFO0FBQ0QsR0FGRDs7QUFJQTVELEVBQUFBLElBQUksQ0FBQzZELFdBQUwsR0FBbUIsVUFBU2h4QyxDQUFULEVBQVk7QUFDN0IsV0FBT3hJLFNBQVMsQ0FBQ3FCLE1BQVYsSUFBb0JtNEMsV0FBVyxHQUFHLENBQUNoeEMsQ0FBZixFQUFrQm10QyxJQUF0QyxJQUE4QzZELFdBQXJEO0FBQ0QsR0FGRDs7QUFJQSxTQUFPN0QsSUFBUDtBQUNELEM7O0FDOWJEOzs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1QkE7O0FBMEJBLElBQU04RixRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFDQyxLQUFELEVBQTJCO0FBQzFDLE1BQVEvM0MsSUFBUixHQUF5QiszQyxLQUF6QixDQUFRLzNDLElBQVI7QUFBQSxNQUFjZzRDLE1BQWQsR0FBeUJELEtBQXpCLENBQWNDLE1BQWQ7QUFDQSxNQUFRMWpCLEVBQVIsR0FBc0IwakIsTUFBdEIsQ0FBUTFqQixFQUFSO0FBQUEsTUFBWWxELEtBQVosR0FBc0I0bUIsTUFBdEIsQ0FBWTVtQixLQUFaO0FBQ0EsTUFBTWx3QixJQUFJLEdBQUdnRSxTQUFBLENBQXlDbEYsSUFBekMsQ0FBYjtBQUNBLE1BQU11MEIsRUFBRSxHQUFHbkQsS0FBSyxJQUFJbHdCLElBQUksQ0FBQ2dDLE1BQUwsR0FBYyxDQUFsQixDQUFoQjtBQUNBLFNBQU9nQyxJQUFBLEdBQXNDd3lCLFFBQXRDLENBQStDLENBQUNwRCxFQUFELEVBQUtDLEVBQUwsQ0FBL0MsRUFBeURyekIsSUFBekQsQ0FBUDtBQUNELENBTkQ7O0FBZU8sSUFBTSsyQyxJQUFJLEdBQUcsU0FBUEEsSUFBTyxDQUFDRixLQUFELEVBQXVCO0FBQ3pDLE1BQVEvM0MsSUFBUixHQUF1QyszQyxLQUF2QyxDQUFRLzNDLElBQVI7QUFBQSxNQUFjZzRDLE1BQWQsR0FBdUNELEtBQXZDLENBQWNDLE1BQWQ7QUFBQSxNQUFzQkUsWUFBdEIsR0FBdUNILEtBQXZDLENBQXNCRyxZQUF0QjtBQUNBaHpDLEVBQUFBLFVBQUEsQ0FBbUJBLE9BQW5CLEVBQTBDMDFCLE1BQTFDLENBQWlELENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FBakQ7QUFDQSxNQUFNMTVCLElBQUksR0FBRzQyQyxRQUFRLENBQUM7QUFBRTkzQyxJQUFBQSxJQUFJLEVBQUpBLElBQUY7QUFBUWc0QyxJQUFBQSxNQUFNLEVBQU5BO0FBQVIsR0FBRCxDQUFyQjtBQUNBLE1BQVExakIsRUFBUixHQUFzQjBqQixNQUF0QixDQUFRMWpCLEVBQVI7QUFBQSxNQUFZbEQsS0FBWixHQUFzQjRtQixNQUF0QixDQUFZNW1CLEtBQVo7QUFFQSxNQUFNbUQsRUFBRSxHQUFHbkQsS0FBSyxJQUFJbHdCLElBQUksQ0FBQ2dDLE1BQUwsR0FBYyxDQUFsQixDQUFoQjtBQUNBLE1BQUk4OUIsRUFBRSxHQUFHbHFCLFFBQVQ7QUFDQSxNQUFJbXFCLEVBQUUsR0FBRyxDQUFDRCxFQUFWO0FBQ0E5L0IsRUFBQUEsSUFBSSxDQUFDRSxJQUFMLENBQVUsVUFBQzZCLENBQUQsRUFBTztBQUNmLFFBQUlBLENBQUMsQ0FBQytCLENBQUYsR0FBTWk4QixFQUFWLEVBQWNBLEVBQUUsR0FBR2grQixDQUFDLENBQUMrQixDQUFQO0FBQ2QsUUFBSS9CLENBQUMsQ0FBQytCLENBQUYsR0FBTWc4QixFQUFWLEVBQWNBLEVBQUUsR0FBRy85QixDQUFDLENBQUMrQixDQUFQO0FBQ2YsR0FIRCxFQVR5QyxDQWN6Qzs7QUFDQTlELEVBQUFBLElBQUksQ0FBQ21DLFdBQUwsR0FBbUI4MEMsT0FBbkIsQ0FBMkIsVUFBQ2wxQyxDQUFELEVBQUluRyxDQUFKLEVBQVU7QUFDbkNtRyxJQUFBQSxDQUFDLENBQUNqRCxJQUFGLENBQU9BLElBQVAsQ0FBWXVGLEdBQVosR0FBa0J6SSxDQUFsQjtBQUNBbUcsSUFBQUEsQ0FBQyxDQUFDakQsSUFBRixDQUFPQSxJQUFQLENBQVl3RixTQUFaLEdBQXdCdkMsQ0FBQyxDQUFDeEQsUUFBMUI7O0FBQ0EsUUFBSXdELENBQUMsQ0FBQ0osS0FBRixHQUFVcTFDLFlBQWQsRUFBNEI7QUFDMUJqMUMsTUFBQUEsQ0FBQyxDQUFDeEQsUUFBRixHQUFhakQsU0FBYjtBQUNEO0FBQ0YsR0FORDtBQVFBLE1BQU00N0MsWUFBWSxHQUFHbHpDLElBQUEsR0FFbEJxd0MsV0FGa0IsQ0FFTixDQUFDLEdBQUQsRUFBTSxFQUFOLENBRk0sRUFHbEJwa0MsRUFIa0IsQ0FHZixNQUhlLEVBR1AsVUFBQ1AsS0FBRCxFQUFXO0FBQ3JCekYsSUFBQUEsR0FBRyxDQUFDc0osSUFBSixDQUFTLFdBQVQsRUFBc0I3RCxLQUFLLENBQUN1SixTQUE1QjtBQUNELEdBTGtCLENBQXJCO0FBT0EsTUFBTWsrQixTQUFTLEdBQUduekMsVUFBQSxDQUNSLEtBRFEsRUFFZnVQLElBRmUsQ0FFVixTQUZVLGdCQUVRMmMsS0FGUixjQUVpQjZQLEVBQUUsR0FBR0QsRUFBTCxHQUFVMU0sRUFBRSxHQUFHLENBRmhDLEdBR2Y3ZixJQUhlLENBR1YsUUFIVSxFQUdBLE1BSEEsRUFJaEI7QUFKZ0IsR0FLZmxYLElBTGUsQ0FLVjY2QyxZQUxVLENBQWxCO0FBT0EsTUFBTWp0QyxHQUFHLEdBQUdrdEMsU0FBUyxDQUFDenVDLE1BQVYsQ0FBaUIsR0FBakIsQ0FBWixDQXJDeUMsQ0F1Q3pDOztBQUNBdUIsRUFBQUEsR0FBRyxDQUFDdkIsTUFBSixDQUFXLEdBQVgsRUFBZ0I2SyxJQUFoQixDQUFxQixRQUFyQixFQUErQixTQUEvQixFQUEwQ0EsSUFBMUMsQ0FBK0MsZ0JBQS9DLEVBQWlFLEtBQWpFLEVBeEN5QyxDQTBDekM7O0FBQ0F0SixFQUFBQSxHQUFHLENBQ0F2QixNQURILENBQ1UsR0FEVixFQUVHNkssSUFGSCxDQUVRLE1BRlIsRUFFZ0IsTUFGaEIsRUFHR0EsSUFISCxDQUdRLFFBSFIsRUFHa0IsU0FIbEIsRUFJR0EsSUFKSCxDQUlRLGdCQUpSLEVBSTBCLEdBSjFCLEVBS0dBLElBTEgsQ0FLUSxjQUxSLEVBS3dCLEdBTHhCO0FBT0EsTUFBTWtULENBQUMsR0FBR3hjLEdBQUcsQ0FDVnZCLE1BRE8sQ0FDQSxHQURBLEVBRVA2SyxJQUZPLENBRUYsYUFGRSxFQUVhLFlBRmIsRUFHUEEsSUFITyxDQUdGLFdBSEUsRUFHVyxDQUhYLEVBSVBBLElBSk8sQ0FJRixXQUpFLHNCQUl3QjhmLEVBQUUsR0FBRyxDQUo3QixjQUlrQ0QsRUFBRSxHQUFHME0sRUFKdkMsT0FBVjtBQU1BLE1BQU1zWCxNQUFNLEdBQUdwekMsY0FBQSxHQUtaRixDQUxZLENBS1YsVUFBQy9CLENBQUQ7QUFBQSxXQUFPQSxDQUFDLENBQUNrbUIsQ0FBVDtBQUFBLEdBTFUsRUFNWkEsQ0FOWSxDQU1WLFVBQUNsbUIsQ0FBRDtBQUFBLFdBQU9BLENBQUMsQ0FBQytCLENBQVQ7QUFBQSxHQU5VLENBQWY7QUFRQTJpQixFQUFBQSxDQUFDLENBQUMvZCxNQUFGLENBQVMsR0FBVCxFQUNHNkssSUFESCxDQUNRLE1BRFIsRUFDZ0IsTUFEaEIsRUFFR0EsSUFGSCxDQUVRLFFBRlIsRUFFa0IsTUFGbEIsRUFHR0EsSUFISCxDQUdRLGdCQUhSLEVBRzBCLEdBSDFCLEVBSUdBLElBSkgsQ0FJUSxjQUpSLEVBSXdCLEdBSnhCLEVBS0doTixTQUxILENBS2EsTUFMYixFQU1HekgsSUFOSCxDQU1Ra0IsSUFBSSxDQUFDQyxLQUFMLEVBTlIsRUFPR2dOLElBUEgsQ0FPUSxNQVBSLEVBUUdzRyxJQVJILENBUVEsR0FSUixFQVFhNmpDLE1BUmI7QUFVQSxNQUFNLzRDLElBQUksR0FBR29vQixDQUFDLENBQ1gvZCxNQURVLENBQ0gsR0FERyxFQUVWNkssSUFGVSxDQUVMLGlCQUZLLEVBRWMsT0FGZCxFQUdWQSxJQUhVLENBR0wsY0FISyxFQUdXLENBSFgsRUFJVmhOLFNBSlUsQ0FJQSxHQUpBLEVBS1Z6SCxJQUxVLENBS0xrQixJQUFJLENBQUNtQyxXQUFMLEVBTEssRUFNVjhLLElBTlUsQ0FNTCxHQU5LLEVBT1ZzRyxJQVBVLENBT0wsV0FQSyxFQU9RLFVBQUN4UixDQUFEO0FBQUEsK0JBQW9CQSxDQUFDLENBQUNrbUIsQ0FBdEIsY0FBMkJsbUIsQ0FBQyxDQUFDK0IsQ0FBN0I7QUFBQSxHQVBSLENBQWI7QUFTQXpGLEVBQUFBLElBQUksQ0FDRHFLLE1BREgsQ0FDVSxRQURWLEVBRUU7QUFGRixHQUdHNkssSUFISCxDQUdRLE1BSFIsRUFHZ0IsVUFBQ3hSLENBQUQ7QUFBQSxXQUFRQSxDQUFDLENBQUNqRCxJQUFGLENBQU9BLElBQVAsQ0FBWXNGLEVBQVosS0FBbUIsVUFBbkIsR0FBZ0MsTUFBaEMsR0FBeUMsU0FBakQ7QUFBQSxHQUhoQixFQUlFO0FBSkYsR0FLR21QLElBTEgsQ0FLUSxHQUxSLEVBS2EsVUFBQ3hSLENBQUQ7QUFBQSxXQUFRQSxDQUFDLENBQUNqRCxJQUFGLENBQU9BLElBQVAsQ0FBWXNGLEVBQVosS0FBbUIsVUFBbkIsR0FBZ0MsR0FBaEMsR0FBc0MsR0FBOUM7QUFBQSxHQUxiLEVBTUdtUCxJQU5ILENBTVEsT0FOUixFQU1pQixVQUFDeFIsQ0FBRDtBQUFBLDJCQUFnQm9ILElBQUksQ0FBQ0MsR0FBTCxDQUFTckgsQ0FBQyxDQUFDSixLQUFYLEVBQWtCLENBQWxCLENBQWhCO0FBQUEsR0FOakI7QUFRQXRELEVBQUFBLElBQUksQ0FDRHFLLE1BREgsQ0FDVSxNQURWLEVBRUc2SyxJQUZILENBRVEsSUFGUixFQUVjLFFBRmQsRUFHR0EsSUFISCxDQUdRLEdBSFIsRUFHYSxVQUFDeFIsQ0FBRDtBQUFBLFdBQVFBLENBQUMsQ0FBQ3hELFFBQUYsR0FBYSxDQUFDLENBQWQsR0FBa0IsQ0FBMUI7QUFBQSxHQUhiLEVBSUdnVixJQUpILENBSVEsYUFKUixFQUl1QixVQUFDeFIsQ0FBRDtBQUFBLFdBQVFBLENBQUMsQ0FBQ3hELFFBQUYsR0FBYSxLQUFiLEdBQXFCLE9BQTdCO0FBQUEsR0FKdkIsRUFLR2tWLElBTEgsQ0FLUSxVQUFDMVIsQ0FBRDtBQUFBLFdBQU9BLENBQUMsQ0FBQ2pELElBQUYsQ0FBT0EsSUFBUCxDQUFZeEIsSUFBbkI7QUFBQSxHQUxSLEVBTUc2UixLQU5ILENBTVMsSUFOVCxFQU9HZixLQVBILEdBUUdtRixJQVJILENBUVEsUUFSUixFQVFrQixPQVJsQjtBQVVBLFNBQU80akMsU0FBUDtBQUNELENBdEdNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeENQLE1BQXFHO0FBQ3JHLE1BQTJGO0FBQzNGLE1BQWtHO0FBQ2xHLE1BQXFIO0FBQ3JILE1BQThHO0FBQzlHLE1BQThHO0FBQzlHLE1BQTBJO0FBQzFJO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCLDZCQUFtQjtBQUMvQyx3QkFBd0IsMENBQWE7O0FBRXJDLHVCQUF1QiwrQkFBYTtBQUNwQztBQUNBLGlCQUFpQix1QkFBTTtBQUN2Qiw2QkFBNkIsOEJBQWtCOztBQUUvQyxhQUFhLGtDQUFHLENBQUMseUJBQU87Ozs7QUFJb0Y7QUFDNUcsT0FBTyw0REFBZSx5QkFBTyxJQUFJLHVDQUFjLEdBQUcsdUNBQWMsWUFBWSxFQUFDOzs7OztBQzFCN0U7O0FBRUEsSUFBTUUsVUFBVSxHQUFHLFNBQWJBLFVBQWEsR0FBTTtBQUNyQixNQUFNQyxNQUFNLEdBQUczckMsUUFBUSxDQUFDK0MsYUFBVCxDQUF1QixJQUF2QixDQUFmO0FBQ0EsTUFBTTZvQyxhQUFhLEdBQUc1ckMsUUFBUSxDQUFDNnJDLGNBQVQsQ0FBd0IsMEJBQXhCLENBQXRCO0FBQ0FGLEVBQUFBLE1BQU0sQ0FBQ3J3QyxXQUFQLENBQW1Cc3dDLGFBQW5CO0FBQ0EsU0FBT0QsTUFBUDtBQUNILENBTEQ7O0FBT08sSUFBTUcsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsWUFBRCxFQUEwQztBQUNqRSxNQUFNSixNQUFNLEdBQUdELFVBQVUsRUFBekI7QUFDQSxNQUFNTSxPQUFPLEdBQUdoc0MsUUFBUSxDQUFDK0MsYUFBVCxDQUF1QixLQUF2QixDQUFoQjs7QUFFQSxNQUFNa3BDLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUM5aEMsQ0FBRCxFQUFxRTtBQUNuRkEsSUFBQUEsQ0FBQyxDQUFDK2hDLGVBQUY7QUFDQS9oQyxJQUFBQSxDQUFDLENBQUNvNkIsY0FBRjtBQUNILEdBSEQ7O0FBS0EsTUFBTTRILFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUNoaUMsQ0FBRCxFQUFxRTtBQUNsRkEsSUFBQUEsQ0FBQyxDQUFDK2hDLGVBQUY7QUFDQS9oQyxJQUFBQSxDQUFDLENBQUNvNkIsY0FBRjtBQUNILEdBSEQ7O0FBS0EsTUFBTTZILElBQUk7QUFBQSwwRUFBRyxpQkFBT2ppQyxDQUFQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNUQSxjQUFBQSxDQUFDLENBQUMraEMsZUFBRjtBQUNBL2hDLGNBQUFBLENBQUMsQ0FBQ282QixjQUFGO0FBRU04SCxjQUFBQSxFQUpHLEdBSUVsaUMsQ0FBQyxDQUFDbWlDLFlBSko7QUFLSEMsY0FBQUEsS0FMRyxHQUtLRixFQUFFLENBQUNFLEtBTFI7QUFBQTtBQUFBLHFCQU1IUixZQUFZLENBQUNRLEtBQUQsQ0FOVDs7QUFBQTtBQU9UQyxjQUFBQSxhQUFhOztBQVBKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEtBQUg7O0FBQUEsb0JBQUpKLElBQUk7QUFBQTtBQUFBO0FBQUEsS0FBVjs7QUFVQSxNQUFNSSxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLEdBQU07QUFDeEJSLElBQUFBLE9BQU8sQ0FBQ3huQyxtQkFBUixDQUE0QixXQUE1QixFQUF5Q3luQyxTQUF6QztBQUNBRCxJQUFBQSxPQUFPLENBQUN4bkMsbUJBQVIsQ0FBNEIsVUFBNUIsRUFBd0MybkMsUUFBeEM7QUFDQUgsSUFBQUEsT0FBTyxDQUFDeG5DLG1CQUFSLENBQTRCLE1BQTVCLEVBQW9DNG5DLElBQXBDO0FBQ0Fwc0MsSUFBQUEsUUFBUSxDQUFDeXNDLElBQVQsQ0FBY25wQyxXQUFkLENBQTBCMG9DLE9BQTFCO0FBQ0gsR0FMRDs7QUFPQUEsRUFBQUEsT0FBTyxDQUFDenNDLFlBQVIsQ0FBcUIsSUFBckIsRUFBMkIsWUFBM0I7QUFDQXlzQyxFQUFBQSxPQUFPLENBQUMxd0MsV0FBUixDQUFvQnF3QyxNQUFwQjtBQUVBSyxFQUFBQSxPQUFPLENBQUNybkMsZ0JBQVIsQ0FBeUIsV0FBekIsRUFBc0NzbkMsU0FBdEMsRUFBaUQsS0FBakQ7QUFDQUQsRUFBQUEsT0FBTyxDQUFDcm5DLGdCQUFSLENBQXlCLFVBQXpCLEVBQXFDd25DLFFBQXJDLEVBQStDLEtBQS9DO0FBQ0FILEVBQUFBLE9BQU8sQ0FBQ3JuQyxnQkFBUixDQUF5QixNQUF6QixFQUFpQ3luQyxJQUFqQyxFQUF1QyxLQUF2QztBQUNBcHNDLEVBQUFBLFFBQVEsQ0FBQ3lzQyxJQUFULENBQWNueEMsV0FBZCxDQUEwQjB3QyxPQUExQjtBQUlILENBekNNLEM7Ozs7O0FDUlAsTUFBa0c7QUFDbEcsTUFBd0Y7QUFDeEYsTUFBK0Y7QUFDL0YsTUFBa0g7QUFDbEgsTUFBMkc7QUFDM0csTUFBMkc7QUFDM0csTUFBa0k7QUFDbEk7QUFDQTs7QUFFQSxJQUFJLGdCQUFPOztBQUVYLGdCQUFPLHFCQUFxQiw2QkFBbUI7QUFDL0MsZ0JBQU8saUJBQWlCLDBDQUFhOztBQUVyQyxNQUFNLGdCQUFPLFVBQVUsK0JBQWE7QUFDcEM7QUFDQSxnQkFBTyxVQUFVLHVCQUFNO0FBQ3ZCLGdCQUFPLHNCQUFzQiw4QkFBa0I7O0FBRS9DLElBQUksZUFBTSxHQUFHLGtDQUFHLENBQUMsdUJBQU8sRUFBRSxnQkFBTzs7OztBQUltRTtBQUNwRyxPQUFPLG1EQUFlLHVCQUFPLElBQUkscUNBQWMsR0FBRyxxQ0FBYyxZQUFZLEVBQUM7Ozs7O0FDMUI3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBTVUsYUFBYSxHQUFHNW5DLE1BQU0sQ0FBQzZuQyxVQUFQLElBQXFCM3NDLFFBQVEsQ0FBQzhDLGVBQVQsQ0FBeUI4a0MsV0FBOUMsSUFBNkQ1bkMsUUFBUSxDQUFDeXNDLElBQVQsQ0FBYzdFLFdBQWpHO0FBQ0EsSUFBTWdGLGNBQWMsR0FBRzluQyxNQUFNLENBQUMrbkMsV0FBUCxJQUFzQjdzQyxRQUFRLENBQUM4QyxlQUFULENBQXlCK2tDLFlBQS9DLElBQStEN25DLFFBQVEsQ0FBQ3lzQyxJQUFULENBQWM1RSxZQUFwRztBQUVBLElBQU1pRixNQUFNLEdBQUc7QUFDWDNCLEVBQUFBLE1BQU0sRUFBRTtBQUNKNW1CLElBQUFBLEtBQUssRUFBRSxHQURIO0FBRUpsdUIsSUFBQUEsTUFBTSxFQUFFdTJDLGNBRko7QUFHSkcsSUFBQUEsTUFBTSxFQUFFO0FBQUN0RyxNQUFBQSxHQUFHLEVBQUUsRUFBTjtBQUFVdmIsTUFBQUEsS0FBSyxFQUFFLEVBQWpCO0FBQXFCQyxNQUFBQSxNQUFNLEVBQUUsRUFBN0I7QUFBaUNGLE1BQUFBLElBQUksRUFBRTtBQUF2QyxLQUhKO0FBSUp2RCxJQUFBQSxFQUFFLEVBQUVnbEIsYUFBYSxHQUFHLENBSmhCO0FBS0pqbEIsSUFBQUEsRUFBRSxFQUFFO0FBTEEsR0FERztBQVFYdWxCLEVBQUFBLE9BQU8sRUFBRUMsSUFSRTtBQVNYNUIsRUFBQUEsWUFBWSxFQUFFLEVBVEg7QUFVWCtCLEVBQUFBLGlCQUFpQixFQUFFO0FBVlIsQ0FBZjtBQVlBLElBQUlDLEtBQUo7O0FBRUEsSUFBTUMsWUFBWTtBQUFBLHdFQUFHLGlCQUFPaDdDLENBQVA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ1BpN0MsWUFBQUEsVUFETyxHQUNNajdDLENBQUMsQ0FBQyxDQUFELENBRFA7QUFFUGs3QyxZQUFBQSxhQUZPLEdBRVMxb0MsTUFBTSxDQUFDMm9DLEdBQVAsQ0FBV0MsZUFBWCxDQUEyQkgsVUFBM0IsQ0FGVDtBQUFBO0FBQUEsbUJBR1NsMUMsSUFBQSxDQUFRbTFDLGFBQVIsQ0FIVDs7QUFBQTtBQUdQRyxZQUFBQSxPQUhPO0FBQUE7QUFBQSxtQkFJWTkwQyxhQUFhLENBQUM4MEMsT0FBRCxDQUp6Qjs7QUFBQTtBQUlQQyxZQUFBQSxVQUpPO0FBS2JDLFlBQUFBLFVBQVUsQ0FBQ0QsVUFBRCxDQUFWOztBQUxhO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVpOLFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEI7O0FBUUEsSUFBTVEsWUFBWSxHQUFHLFNBQWZBLFlBQWUsR0FBTTtBQUN2QkMsRUFBQUEsT0FBTyxDQUFDcGUsR0FBUixDQUFZLGtCQUFaO0FBQ0FtYyxFQUFBQSxXQUFXLENBQUN3QixZQUFELENBQVg7QUFDSCxDQUhEOztBQUtBLElBQU1PLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUMxNkMsSUFBRCxFQUEyQztBQUMxRCxNQUFNNjZDLFVBQXNCLEdBQUc7QUFDM0I3NkMsSUFBQUEsSUFBSSxFQUFFQSxJQURxQjtBQUUzQmc0QyxJQUFBQSxNQUFNLEVBQUUyQixNQUFNLENBQUMzQixNQUZZO0FBRzNCRSxJQUFBQSxZQUFZLEVBQUV5QixNQUFNLENBQUN6QixZQUhNO0FBSTNCK0IsSUFBQUEsaUJBQWlCLEVBQUVOLE1BQU0sQ0FBQ007QUFKQyxHQUEvQjtBQU1BQyxFQUFBQSxLQUFLLEdBQUdqQyxJQUFJLENBQUM0QyxVQUFELENBQVo7O0FBQ0EsTUFBSSxDQUFDWCxLQUFMLEVBQVk7QUFDUixVQUFNLElBQUk3NkMsS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNIOztBQUNELE1BQU1FLElBQUksR0FBRzI2QyxLQUFLLENBQUMzNkMsSUFBTixFQUFiOztBQUNBLE1BQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1AsVUFBTSxJQUFJRixLQUFKLENBQVUsY0FBVixDQUFOO0FBQ0g7O0FBQ0R3TixFQUFBQSxRQUFRLENBQUN5c0MsSUFBVCxDQUFjbnhDLFdBQWQsQ0FBMEI1SSxJQUExQjtBQUVILENBakJEOztBQW1CQXNOLFFBQVEsQ0FBQzJFLGdCQUFULENBQTBCLGtCQUExQixFQUE4Q21wQyxZQUE5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanM/MWRhMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcz8wZDIxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzPzA5ZjAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcz82Yjc1Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzPzA2YzUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzPzNkOGMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcz8zODM1Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvYWNjZXNzb3JzLmpzPzIxZTUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvY291bnQuanM/ZGU5MCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoLmpzP2ViMWUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaEJlZm9yZS5qcz8zZDg3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hBZnRlci5qcz85ZTMyIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2ZpbmQuanM/OTlmMCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zdW0uanM/NmM5MCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzP2JhNjYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvcGF0aC5qcz8yNzZlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcz80YmZhIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2Rlc2NlbmRhbnRzLmpzP2Y5MzgiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGVhdmVzLmpzP2JmZmEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanM/NGEwYiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9pdGVyYXRvci5qcz9jODRlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2luZGV4LmpzPzZiY2IiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9zdHJhdGlmeS5qcz8zNTRlIiwid2VicGFjazovL2QzY2hhcnRzLy4vc3JjL3RpZHlUcmVlL2RhdGFIYW5kbGVyLnRzP2UyZWEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcz82ZmQzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcz9iYWYzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanM/YzIyNiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzPzQyMzAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzP2ZiMGYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzPzBhNzgiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanM/YjFiZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZHJlbi5qcz82YzEyIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcz8wY2RmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcz82OThkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzP2Y2ODkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcz9kMjU5Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanM/MTIwOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzP2YzYjYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcz8zZjc3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzPzhiN2IiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanM/YTE0OSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzP2NhOWYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcz8wYWRkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzPzliMDYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcz85NmUwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanM/OWFiNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcz9jYTE1Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanM/Y2VmZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanM/ZTMxMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcz82Y2Q0Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanM/Zjg3MiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcz9hMzE3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzPzM2NGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanM/Y2RjMyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbGFzc2VkLmpzPzUwYjkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcz82MWIwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanM/YjI0MSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yYWlzZS5qcz8xOTEzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzPzE3YzMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzPzU3ZjUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzP2RiN2QiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5zZXJ0LmpzPzVhNjEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzPzI1OTEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanM/ZWExMyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcz9jODAxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzPzAxNjUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanM/NGUyYiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pdGVyYXRvci5qcz9hMDBjIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzP2U0OGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzP2M2OGYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzPzc0ZjQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVvdXQuanM/M2UwNyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzP2FlZDYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzPzc1NmYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcz9kMzFjIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanM/ZTMxNyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcz8zMjU4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanM/ZGE3NSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2luZGV4LmpzPzRiNzkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcz8zNWU4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9kZWZpbmUuanM/NjNhZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanM/MTY2YSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanM/Yzg0YSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXNDbG9zZWQuanM/NGJjZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanM/YzY5OCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanM/YjA1NSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzP2UzNjAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcz85MGVmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanM/ZTVhMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanM/ZmZlZSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcz8wYzVmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanM/ODY1ZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2R1cmF0aW9uLmpzP2YyNzYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzPzU4NTUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlVmFyeWluZy5qcz8yYTkxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZmlsdGVyLmpzP2NmMjIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcz9hOTFkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanM/NjhkOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcz9mY2E4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzP2FmOTMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3RBbGwuanM/ZWQ1NiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcz83MGE5Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanM/ZDBkMCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanM/MGZmMSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanM/ZGY1NiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcz81ZTVlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcz9lMWIxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZW5kLmpzPzk4YWMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcz9kMTZmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzPzg5MjEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanM/ZGJmZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanM/NjJiNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbmRleC5qcz9iMTA4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9icnVzaC5qcz84NTM2Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWJydXNoL3NyYy9pbmRleC5qcz81ZjhmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZldGNoL3NyYy9qc29uLmpzPzlkNmEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZmV0Y2gvc3JjL2luZGV4LmpzP2IyZTkiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlLmpzPzUwNzAiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9pbmRleC5qcz9jOTQ3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcz82NzMwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kYXRlLmpzPzFiNmQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcz83MWJkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXJBcnJheS5qcz81MWRlIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcz9lYTFkIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcz81ODU3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzP2U5ODEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanM/ZDQ4YyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanM/ZWVjYiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcz8wOWI4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVjaW1hbC5qcz9hYTc0Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanM/YTdmZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcz9kOTMzIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanM/OTg3MSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzPzAxNGEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUcmltLmpzPzkxZGIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzP2NkZWQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzPzNmNzgiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRUeXBlcy5qcz9iNGVmIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanM/MTE0OSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcz9iMTcwIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcz8xMjMxIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanM/ZDk4OSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzP2RhZDEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanM/YjJjOSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzPzU0OGEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3NlcXVlbnRpYWwuanM/Y2U2YiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvaW5kZXguanM/Y2UyNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcz81MzBhIiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9jdWJlaGVsaXguanM/MTVhNyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzPzM4NzIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanM/NWZiYyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2luZGV4LmpzP2ExZWIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanM/MDBhNSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0ZS5qcz9hOGI4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvaW5kZXguanM/ZmQzMiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1wYXRoL3NyYy9wYXRoLmpzP2VhZGMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzPzgyYWMiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzP2Q4YWQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzP2ZkYTQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2xpbmsvaW5kZXguanM/MWE4OCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvaW5kZXguanM/ZjFkZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1kcmFnL3NyYy9ub2V2ZW50LmpzPzcxZDIiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtZHJhZy9zcmMvbm9kcmFnLmpzP2I1NGYiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3pvb20uanM/Y2U3NSIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzPzRmZDQiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9wb2ludGVyLmpzPzVlODEiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvY29uc3RhbnQuanM/OTQ0YyIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy9ldmVudC5qcz85NjE3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL3RyYW5zZm9ybS5qcz84NjM3Iiwid2VicGFjazovL2QzY2hhcnRzLy4vbm9kZV9tb2R1bGVzL2QzLXpvb20vc3JjL25vZXZlbnQuanM/MzkyYiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy16b29tL3NyYy96b29tLmpzPzg2NDUiLCJ3ZWJwYWNrOi8vZDNjaGFydHMvLi9ub2RlX21vZHVsZXMvZDMtem9vbS9zcmMvaW5kZXguanM/ZDkzNCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL25vZGVfbW9kdWxlcy9kMy9zcmMvaW5kZXguanM/ODk4YiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy90aWR5VHJlZS9tYWtlVHJlZS50cz8xYmM4Iiwid2VicGFjazovL2QzY2hhcnRzLy4vc3JjL3RpZHlUcmVlL0ZpbGVVcGxvYWQvRmlsZVVwbG9hZC5jc3M/MWIyZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy90aWR5VHJlZS9GaWxlVXBsb2FkL0ZpbGVVcGxvYWQudHM/NTdkZiIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy90aWR5VHJlZS9pbmRleC5jc3M/NWIwZCIsIndlYnBhY2s6Ly9kM2NoYXJ0cy8uL3NyYy90aWR5VHJlZS9pbmRleC50cz9hYzEwIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZnVuY3Rpb24gb3B0aW9uYWwoZikge1xuICByZXR1cm4gZiA9PSBudWxsID8gbnVsbCA6IHJlcXVpcmVkKGYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQoZikge1xuICBpZiAodHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZjtcbn1cbiIsImZ1bmN0aW9uIGNvdW50KG5vZGUpIHtcbiAgdmFyIHN1bSA9IDAsXG4gICAgICBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sXG4gICAgICBpID0gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoO1xuICBpZiAoIWkpIHN1bSA9IDE7XG4gIGVsc2Ugd2hpbGUgKC0taSA+PSAwKSBzdW0gKz0gY2hpbGRyZW5baV0udmFsdWU7XG4gIG5vZGUudmFsdWUgPSBzdW07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoY291bnQpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIHRoYXQpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSB7XG4gICAgY2FsbGJhY2suY2FsbCh0aGF0LCBub2RlLCArK2luZGV4LCB0aGlzKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGF0KSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV0sIGNoaWxkcmVuLCBpLCBpbmRleCA9IC0xO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgY2FsbGJhY2suY2FsbCh0aGF0LCBub2RlLCArK2luZGV4LCB0aGlzKTtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2Rlcy5wdXNoKGNoaWxkcmVuW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaywgdGhhdCkge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdLCBuZXh0ID0gW10sIGNoaWxkcmVuLCBpLCBuLCBpbmRleCA9IC0xO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgbmV4dC5wdXNoKG5vZGUpO1xuICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHdoaWxlIChub2RlID0gbmV4dC5wb3AoKSkge1xuICAgIGNhbGxiYWNrLmNhbGwodGhhdCwgbm9kZSwgKytpbmRleCwgdGhpcyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaywgdGhhdCkge1xuICBsZXQgaW5kZXggPSAtMTtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpIHtcbiAgICBpZiAoY2FsbGJhY2suY2FsbCh0aGF0LCBub2RlLCArK2luZGV4LCB0aGlzKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBzdW0gPSArdmFsdWUobm9kZS5kYXRhKSB8fCAwLFxuICAgICAgICBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4sXG4gICAgICAgIGkgPSBjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGg7XG4gICAgd2hpbGUgKC0taSA+PSAwKSBzdW0gKz0gY2hpbGRyZW5baV0udmFsdWU7XG4gICAgbm9kZS52YWx1ZSA9IHN1bTtcbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLnNvcnQoY29tcGFyZSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVuZCkge1xuICB2YXIgc3RhcnQgPSB0aGlzLFxuICAgICAgYW5jZXN0b3IgPSBsZWFzdENvbW1vbkFuY2VzdG9yKHN0YXJ0LCBlbmQpLFxuICAgICAgbm9kZXMgPSBbc3RhcnRdO1xuICB3aGlsZSAoc3RhcnQgIT09IGFuY2VzdG9yKSB7XG4gICAgc3RhcnQgPSBzdGFydC5wYXJlbnQ7XG4gICAgbm9kZXMucHVzaChzdGFydCk7XG4gIH1cbiAgdmFyIGsgPSBub2Rlcy5sZW5ndGg7XG4gIHdoaWxlIChlbmQgIT09IGFuY2VzdG9yKSB7XG4gICAgbm9kZXMuc3BsaWNlKGssIDAsIGVuZCk7XG4gICAgZW5kID0gZW5kLnBhcmVudDtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbmZ1bmN0aW9uIGxlYXN0Q29tbW9uQW5jZXN0b3IoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIGE7XG4gIHZhciBhTm9kZXMgPSBhLmFuY2VzdG9ycygpLFxuICAgICAgYk5vZGVzID0gYi5hbmNlc3RvcnMoKSxcbiAgICAgIGMgPSBudWxsO1xuICBhID0gYU5vZGVzLnBvcCgpO1xuICBiID0gYk5vZGVzLnBvcCgpO1xuICB3aGlsZSAoYSA9PT0gYikge1xuICAgIGMgPSBhO1xuICAgIGEgPSBhTm9kZXMucG9wKCk7XG4gICAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgfVxuICByZXR1cm4gYztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMsIG5vZGVzID0gW25vZGVdO1xuICB3aGlsZSAobm9kZSA9IG5vZGUucGFyZW50KSB7XG4gICAgbm9kZXMucHVzaChub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGxlYXZlcyA9IFtdO1xuICB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgbGVhdmVzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxlYXZlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgcm9vdCA9IHRoaXMsIGxpbmtzID0gW107XG4gIHJvb3QuZWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUgIT09IHJvb3QpIHsgLy8gRG9u4oCZdCBpbmNsdWRlIHRoZSByb2904oCZcyBwYXJlbnQsIGlmIGFueS5cbiAgICAgIGxpbmtzLnB1c2goe3NvdXJjZTogbm9kZS5wYXJlbnQsIHRhcmdldDogbm9kZX0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsaW5rcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBjdXJyZW50LCBuZXh0ID0gW25vZGVdLCBjaGlsZHJlbiwgaSwgbjtcbiAgZG8ge1xuICAgIGN1cnJlbnQgPSBuZXh0LnJldmVyc2UoKSwgbmV4dCA9IFtdO1xuICAgIHdoaWxlIChub2RlID0gY3VycmVudC5wb3AoKSkge1xuICAgICAgeWllbGQgbm9kZTtcbiAgICAgIGlmIChjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yIChpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICAgIG5leHQucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKG5leHQubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50LmpzXCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2guanNcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZS5qc1wiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlci5qc1wiO1xuaW1wb3J0IG5vZGVfZmluZCBmcm9tIFwiLi9maW5kLmpzXCI7XG5pbXBvcnQgbm9kZV9zdW0gZnJvbSBcIi4vc3VtLmpzXCI7XG5pbXBvcnQgbm9kZV9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBub2RlX3BhdGggZnJvbSBcIi4vcGF0aC5qc1wiO1xuaW1wb3J0IG5vZGVfYW5jZXN0b3JzIGZyb20gXCIuL2FuY2VzdG9ycy5qc1wiO1xuaW1wb3J0IG5vZGVfZGVzY2VuZGFudHMgZnJvbSBcIi4vZGVzY2VuZGFudHMuanNcIjtcbmltcG9ydCBub2RlX2xlYXZlcyBmcm9tIFwiLi9sZWF2ZXMuanNcIjtcbmltcG9ydCBub2RlX2xpbmtzIGZyb20gXCIuL2xpbmtzLmpzXCI7XG5pbXBvcnQgbm9kZV9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBkYXRhID0gW3VuZGVmaW5lZCwgZGF0YV07XG4gICAgaWYgKGNoaWxkcmVuID09PSB1bmRlZmluZWQpIGNoaWxkcmVuID0gbWFwQ2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkcmVuID0gb2JqZWN0Q2hpbGRyZW47XG4gIH1cblxuICB2YXIgcm9vdCA9IG5ldyBOb2RlKGRhdGEpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3Jvb3RdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHMsXG4gICAgICBpLFxuICAgICAgbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IChjaGlsZHMgPSBBcnJheS5mcm9tKGNoaWxkcykpLmxlbmd0aCkpIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBjaGlsZHM7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IGNoaWxkc1tpXSA9IG5ldyBOb2RlKGNoaWxkc1tpXSkpO1xuICAgICAgICBjaGlsZC5wYXJlbnQgPSBub2RlO1xuICAgICAgICBjaGlsZC5kZXB0aCA9IG5vZGUuZGVwdGggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290LmVhY2hCZWZvcmUoY29tcHV0ZUhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIG5vZGVfY29weSgpIHtcbiAgcmV0dXJuIGhpZXJhcmNoeSh0aGlzKS5lYWNoQmVmb3JlKGNvcHlEYXRhKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oZCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkKSA/IGRbMV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb3B5RGF0YShub2RlKSB7XG4gIGlmIChub2RlLmRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkgbm9kZS52YWx1ZSA9IG5vZGUuZGF0YS52YWx1ZTtcbiAgbm9kZS5kYXRhID0gbm9kZS5kYXRhLmRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlSGVpZ2h0KG5vZGUpIHtcbiAgdmFyIGhlaWdodCA9IDA7XG4gIGRvIG5vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICB3aGlsZSAoKG5vZGUgPSBub2RlLnBhcmVudCkgJiYgKG5vZGUuaGVpZ2h0IDwgKytoZWlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5vZGUoZGF0YSkge1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmRlcHRoID1cbiAgdGhpcy5oZWlnaHQgPSAwO1xuICB0aGlzLnBhcmVudCA9IG51bGw7XG59XG5cbk5vZGUucHJvdG90eXBlID0gaGllcmFyY2h5LnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IE5vZGUsXG4gIGNvdW50OiBub2RlX2NvdW50LFxuICBlYWNoOiBub2RlX2VhY2gsXG4gIGVhY2hBZnRlcjogbm9kZV9lYWNoQWZ0ZXIsXG4gIGVhY2hCZWZvcmU6IG5vZGVfZWFjaEJlZm9yZSxcbiAgZmluZDogbm9kZV9maW5kLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBub2RlX2l0ZXJhdG9yXG59O1xuIiwiaW1wb3J0IHtvcHRpb25hbH0gZnJvbSBcIi4vYWNjZXNzb3JzLmpzXCI7XG5pbXBvcnQge05vZGUsIGNvbXB1dGVIZWlnaHR9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleC5qc1wiO1xuXG52YXIgcHJlcm9vdCA9IHtkZXB0aDogLTF9LFxuICAgIGFtYmlndW91cyA9IHt9LFxuICAgIGltcHV0ZWQgPSB7fTtcblxuZnVuY3Rpb24gZGVmYXVsdElkKGQpIHtcbiAgcmV0dXJuIGQuaWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQYXJlbnRJZChkKSB7XG4gIHJldHVybiBkLnBhcmVudElkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGlkID0gZGVmYXVsdElkLFxuICAgICAgcGFyZW50SWQgPSBkZWZhdWx0UGFyZW50SWQsXG4gICAgICBwYXRoO1xuXG4gIGZ1bmN0aW9uIHN0cmF0aWZ5KGRhdGEpIHtcbiAgICB2YXIgbm9kZXMgPSBBcnJheS5mcm9tKGRhdGEpLFxuICAgICAgICBjdXJyZW50SWQgPSBpZCxcbiAgICAgICAgY3VycmVudFBhcmVudElkID0gcGFyZW50SWQsXG4gICAgICAgIG4sXG4gICAgICAgIGQsXG4gICAgICAgIGksXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbm9kZUlkLFxuICAgICAgICBub2RlS2V5LFxuICAgICAgICBub2RlQnlLZXkgPSBuZXcgTWFwO1xuXG4gICAgaWYgKHBhdGggIT0gbnVsbCkge1xuICAgICAgY29uc3QgSSA9IG5vZGVzLm1hcCgoZCwgaSkgPT4gbm9ybWFsaXplKHBhdGgoZCwgaSwgZGF0YSkpKTtcbiAgICAgIGNvbnN0IFAgPSBJLm1hcChwYXJlbnRvZik7XG4gICAgICBjb25zdCBTID0gbmV3IFNldChJKS5hZGQoXCJcIik7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgUCkge1xuICAgICAgICBpZiAoIVMuaGFzKGkpKSB7XG4gICAgICAgICAgUy5hZGQoaSk7XG4gICAgICAgICAgSS5wdXNoKGkpO1xuICAgICAgICAgIFAucHVzaChwYXJlbnRvZihpKSk7XG4gICAgICAgICAgbm9kZXMucHVzaChpbXB1dGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3VycmVudElkID0gKF8sIGkpID0+IElbaV07XG4gICAgICBjdXJyZW50UGFyZW50SWQgPSAoXywgaSkgPT4gUFtpXTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBkID0gbm9kZXNbaV0sIG5vZGUgPSBub2Rlc1tpXSA9IG5ldyBOb2RlKGQpO1xuICAgICAgaWYgKChub2RlSWQgPSBjdXJyZW50SWQoZCwgaSwgZGF0YSkpICE9IG51bGwgJiYgKG5vZGVJZCArPSBcIlwiKSkge1xuICAgICAgICBub2RlS2V5ID0gbm9kZS5pZCA9IG5vZGVJZDtcbiAgICAgICAgbm9kZUJ5S2V5LnNldChub2RlS2V5LCBub2RlQnlLZXkuaGFzKG5vZGVLZXkpID8gYW1iaWd1b3VzIDogbm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAoKG5vZGVJZCA9IGN1cnJlbnRQYXJlbnRJZChkLCBpLCBkYXRhKSkgIT0gbnVsbCAmJiAobm9kZUlkICs9IFwiXCIpKSB7XG4gICAgICAgIG5vZGUucGFyZW50ID0gbm9kZUlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGlmIChub2RlSWQgPSBub2RlLnBhcmVudCkge1xuICAgICAgICBwYXJlbnQgPSBub2RlQnlLZXkuZ2V0KG5vZGVJZCk7XG4gICAgICAgIGlmICghcGFyZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nOiBcIiArIG5vZGVJZCk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IGFtYmlndW91cykgdGhyb3cgbmV3IEVycm9yKFwiYW1iaWd1b3VzOiBcIiArIG5vZGVJZCk7XG4gICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4pIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgICBlbHNlIHBhcmVudC5jaGlsZHJlbiA9IFtub2RlXTtcbiAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocm9vdCkgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgcm9vdHNcIik7XG4gICAgICAgIHJvb3QgPSBub2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcm9vdCkgdGhyb3cgbmV3IEVycm9yKFwibm8gcm9vdFwiKTtcblxuICAgIC8vIFdoZW4gaW1wdXRpbmcgaW50ZXJuYWwgbm9kZXMsIG9ubHkgaW50cm9kdWNlIHJvb3RzIGlmIG5lZWRlZC5cbiAgICAvLyBUaGVuIHJlcGxhY2UgdGhlIGltcHV0ZWQgbWFya2VyIGRhdGEgd2l0aCBudWxsLlxuICAgIGlmIChwYXRoICE9IG51bGwpIHtcbiAgICAgIHdoaWxlIChyb290LmRhdGEgPT09IGltcHV0ZWQgJiYgcm9vdC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcm9vdCA9IHJvb3QuY2hpbGRyZW5bMF0sIC0tbjtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLmRhdGEgIT09IGltcHV0ZWQpIGJyZWFrO1xuICAgICAgICBub2RlLmRhdGEgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJvb3QucGFyZW50ID0gcHJlcm9vdDtcbiAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkgeyBub2RlLmRlcHRoID0gbm9kZS5wYXJlbnQuZGVwdGggKyAxOyAtLW47IH0pLmVhY2hCZWZvcmUoY29tcHV0ZUhlaWdodCk7XG4gICAgcm9vdC5wYXJlbnQgPSBudWxsO1xuICAgIGlmIChuID4gMCkgdGhyb3cgbmV3IEVycm9yKFwiY3ljbGVcIik7XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIHN0cmF0aWZ5LmlkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlkID0gb3B0aW9uYWwoeCksIHN0cmF0aWZ5KSA6IGlkO1xuICB9O1xuXG4gIHN0cmF0aWZ5LnBhcmVudElkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhcmVudElkID0gb3B0aW9uYWwoeCksIHN0cmF0aWZ5KSA6IHBhcmVudElkO1xuICB9O1xuXG4gIHN0cmF0aWZ5LnBhdGggPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGF0aCA9IG9wdGlvbmFsKHgpLCBzdHJhdGlmeSkgOiBwYXRoO1xuICB9O1xuXG4gIHJldHVybiBzdHJhdGlmeTtcbn1cblxuLy8gVG8gbm9ybWFsaXplIGEgcGF0aCwgd2UgY29lcmNlIHRvIGEgc3RyaW5nLCBzdHJpcCB0aGUgdHJhaWxpbmcgc2xhc2ggaWYgYW55XG4vLyAoYXMgbG9uZyBhcyB0aGUgdHJhaWxpbmcgc2xhc2ggaXMgbm90IGltbWVkaWF0ZWx5IHByZWNlZGVkIGJ5IGFub3RoZXIgc2xhc2gpLFxuLy8gYW5kIGFkZCBsZWFkaW5nIHNsYXNoIGlmIG1pc3NpbmcuXG5mdW5jdGlvbiBub3JtYWxpemUocGF0aCkge1xuICBwYXRoID0gYCR7cGF0aH1gO1xuICBsZXQgaSA9IHBhdGgubGVuZ3RoO1xuICBpZiAoc2xhc2gocGF0aCwgaSAtIDEpICYmICFzbGFzaChwYXRoLCBpIC0gMikpIHBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcbiAgcmV0dXJuIHBhdGhbMF0gPT09IFwiL1wiID8gcGF0aCA6IGAvJHtwYXRofWA7XG59XG5cbi8vIFdhbGsgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGZpcnN0IHNsYXNoIHRoYXQgaXMgbm90IHRoZSBsZWFkaW5nIHNsYXNoLCBlLmcuOlxuLy8gXCIvZm9vL2JhclwiIOKHpSBcIi9mb29cIiwgXCIvZm9vXCIg4oelIFwiL1wiLCBcIi9cIiDihqYgXCJcIi4gKFRoZSByb290IGlzIHNwZWNpYWwtY2FzZWRcbi8vIGJlY2F1c2UgdGhlIGlkIG9mIHRoZSByb290IG11c3QgYmUgYSB0cnV0aHkgdmFsdWUuKVxuZnVuY3Rpb24gcGFyZW50b2YocGF0aCkge1xuICBsZXQgaSA9IHBhdGgubGVuZ3RoO1xuICBpZiAoaSA8IDIpIHJldHVybiBcIlwiO1xuICB3aGlsZSAoLS1pID4gMSkgaWYgKHNsYXNoKHBhdGgsIGkpKSBicmVhaztcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgaSk7XG59XG5cbi8vIFNsYXNoZXMgY2FuIGJlIGVzY2FwZWQ7IHRvIGRldGVybWluZSB3aGV0aGVyIGEgc2xhc2ggaXMgYSBwYXRoIGRlbGltaXRlciwgd2Vcbi8vIGNvdW50IHRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIGJhY2tzbGFzaGVzIGVzY2FwaW5nIHRoZSBmb3J3YXJkIHNsYXNoOiBhbiBvZGRcbi8vIG51bWJlciBpbmRpY2F0ZXMgYW4gZXNjYXBlZCBmb3J3YXJkIHNsYXNoLlxuZnVuY3Rpb24gc2xhc2gocGF0aCwgaSkge1xuICBpZiAocGF0aFtpXSA9PT0gXCIvXCIpIHtcbiAgICBsZXQgayA9IDA7XG4gICAgd2hpbGUgKGkgPiAwICYmIHBhdGhbLS1pXSA9PT0gXCJcXFxcXCIpICsraztcbiAgICBpZiAoKGsgJiAxKSA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzLWhpZXJhcmNoeVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5Tm9kZSB9IGZyb20gXCJkM1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEYXRhTGlua3Mge1xuICBjaGlsZDogc3RyaW5nO1xuICBwYXJlbnQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBuczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEYXRhTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnM6IHN0cmluZztcbiAgX2lkPzogbnVtYmVyO1xuICBfY2hpbGRyZW4/OiBIaWVyYXJjaHlOb2RlPFVzZXJEYXRhTm9kZT5bXCJjaGlsZHJlblwiXVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEYXRhIHtcbiAgbGlua3M6IFVzZXJEYXRhTGlua3NbXTtcbiAgbm9kZXM6IFtudW1iZXIsIFVzZXJEYXRhTm9kZV1bXTtcbn1cblxuY29uc3QgcHJlcHJvY2Vzc05vZGVzID0gYXN5bmMgKGRhdGE6IFVzZXJEYXRhKSA9PiB7XG4gIGNvbnN0IG5vZGVzRGF0YSA9IG5ldyBNYXA8c3RyaW5nLCBVc2VyRGF0YU5vZGU+KCk7XG5cbiAgLy8gV2UgbmVlZCB0byBhdHRhY2ggZGF0YSBmcm9tIG5vZGVzIHRvIGxpbmtzXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBkYXRhLm5vZGVzKSB7XG4gICAgY29uc3QgW25vZGVJZCwgbm9kZURhdGFdID0gbm9kZTtcbiAgICBub2Rlc0RhdGEuc2V0KG5vZGVJZC50b1N0cmluZygpLCB7XG4gICAgICBuYW1lOiBub2RlRGF0YS5uYW1lLFxuICAgICAgbnM6IG5vZGVEYXRhLm5zLFxuICAgICAgX2lkOiB1bmRlZmluZWQsXG4gICAgICBfY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbGluayBvZiBkYXRhLmxpbmtzKSB7XG4gICAgbGluay5jaGlsZCA9IGxpbmsuY2hpbGQudG9TdHJpbmcoKTtcbiAgICBjb25zdCBub2RlRGF0YSA9IG5vZGVzRGF0YS5nZXQobGluay5jaGlsZCk7XG4gICAgaWYgKCFub2RlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2xpbmsuY2hpbGR9IG1pc3NpbmcgZnJvbSBub2RlRGF0YWApO1xuICAgIH1cbiAgICBsaW5rLm5hbWUgPSBub2RlRGF0YS5uYW1lO1xuICAgIGxpbmsubnMgPSBub2RlRGF0YS5ucztcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IHN0cmF0aWZ5Tm9kZXMgPSBhc3luYyAoZGF0YTogVXNlckRhdGEpID0+IHtcbiAgLyoqXG4gICAqIEdpdmVuIEpTT04gZGF0YSB3aXRoIE5vZGVzIGFuZCBMaW5rc1xuICAgKiBHZW5lcmF0ZSBhbiBFZGdlIExpc3QgZm9yIGQzLnN0cmF0aWZ5XG4gICAqIFRoZSBSb290IE5vZGUgY2Fubm90IGhhdmUgYSBwYXJlbnRJZFxuICAgKi9cblxuICBjb25zdCBwRGF0YSA9IGF3YWl0IHByZXByb2Nlc3NOb2RlcyhkYXRhKTtcblxuICBjb25zdCBzdHJhdGlmeSA9IGQzXG4gICAgLnN0cmF0aWZ5PHR5cGVvZiBkYXRhW1wibGlua3NcIl1bbnVtYmVyXT4oKVxuICAgIC5pZCgoZCkgPT4gZC5jaGlsZClcbiAgICAucGFyZW50SWQoKGQpID0+IGQucGFyZW50KTtcblxuICByZXR1cm4gc3RyYXRpZnkocERhdGEubGlua3MpO1xufTtcbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3Rvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsIi8vIEdpdmVuIHNvbWV0aGluZyBhcnJheSBsaWtlIChvciBudWxsKSwgcmV0dXJucyBzb21ldGhpbmcgdGhhdCBpcyBzdHJpY3RseSBhblxuLy8gYXJyYXkuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBhcnJheS1saWtlIG9iamVjdHMgcGFzc2VkIHRvIGQzLnNlbGVjdEFsbFxuLy8gb3Igc2VsZWN0aW9uLnNlbGVjdEFsbCBhcmUgY29udmVydGVkIGludG8gcHJvcGVyIGFycmF5cyB3aGVuIGNyZWF0aW5nIGFcbi8vIHNlbGVjdGlvbjsgd2UgZG9u4oCZdCBldmVyIHdhbnQgdG8gY3JlYXRlIGEgc2VsZWN0aW9uIGJhY2tlZCBieSBhIGxpdmVcbi8vIEhUTUxDb2xsZWN0aW9uIG9yIE5vZGVMaXN0LiBIb3dldmVyLCBub3RlIHRoYXQgc2VsZWN0aW9uLnNlbGVjdEFsbCB3aWxsIHVzZSBhXG4vLyBzdGF0aWMgTm9kZUxpc3QgYXMgYSBncm91cCwgc2luY2UgaXQgc2FmZWx5IGRlcml2ZWQgZnJvbSBxdWVyeVNlbGVjdG9yQWxsLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJyYXkoeCkge1xuICByZXR1cm4geCA9PSBudWxsID8gW10gOiBBcnJheS5pc0FycmF5KHgpID8geCA6IEFycmF5LmZyb20oeCk7XG59XG4iLCJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBhcnJheSBmcm9tIFwiLi4vYXJyYXkuanNcIjtcbmltcG9ydCBzZWxlY3RvckFsbCBmcm9tIFwiLi4vc2VsZWN0b3JBbGwuanNcIjtcblxuZnVuY3Rpb24gYXJyYXlBbGwoc2VsZWN0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJyYXkoc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgPT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gYXJyYXlBbGwoc2VsZWN0KTtcbiAgZWxzZSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHBhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG5mdW5jdGlvbiBjaGlsZHJlbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuRmlsdGVyKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3RBbGwobWF0Y2ggPT0gbnVsbCA/IGNoaWxkcmVuXG4gICAgICA6IGNoaWxkcmVuRmlsdGVyKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBtYXRjaGVyIGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odXBkYXRlKSB7XG4gIHJldHVybiBuZXcgQXJyYXkodXBkYXRlLmxlbmd0aCk7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qKCkge1xuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgeWllbGQgbm9kZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKHVuZGVmaW5lZCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHtTVEFSVElORywgRU5ESU5HLCBFTkRFRH0gZnJvbSBcIi4vdHJhbnNpdGlvbi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHNjaGVkdWxlLFxuICAgICAgYWN0aXZlLFxuICAgICAgZW1wdHkgPSB0cnVlLFxuICAgICAgaTtcblxuICBpZiAoIXNjaGVkdWxlcykgcmV0dXJuO1xuXG4gIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG5cbiAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgIGlmICgoc2NoZWR1bGUgPSBzY2hlZHVsZXNbaV0pLm5hbWUgIT09IG5hbWUpIHsgZW1wdHkgPSBmYWxzZTsgY29udGludWU7IH1cbiAgICBhY3RpdmUgPSBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HICYmIHNjaGVkdWxlLnN0YXRlIDwgRU5ESU5HO1xuICAgIHNjaGVkdWxlLnN0YXRlID0gRU5ERUQ7XG4gICAgc2NoZWR1bGUudGltZXIuc3RvcCgpO1xuICAgIHNjaGVkdWxlLm9uLmNhbGwoYWN0aXZlID8gXCJpbnRlcnJ1cHRcIiA6IFwiY2FuY2VsXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNjaGVkdWxlLmluZGV4LCBzY2hlZHVsZS5ncm91cCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgfVxuXG4gIGlmIChlbXB0eSkgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xufVxuIiwiaW1wb3J0IGludGVycnVwdCBmcm9tIFwiLi4vaW50ZXJydXB0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICBpbnRlcnJ1cHQodGhpcywgbmFtZSk7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbiAgfTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IGRlY29tcG9zZSwge2lkZW50aXR5fSBmcm9tIFwiLi9kZWNvbXBvc2UuanNcIjtcblxudmFyIHN2Z05vZGU7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgY29uc3QgbSA9IG5ldyAodHlwZW9mIERPTU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiID8gRE9NTWF0cml4IDogV2ViS2l0Q1NTTWF0cml4KSh2YWx1ZSArIFwiXCIpO1xuICByZXR1cm4gbS5pc0lkZW50aXR5ID8gaWRlbnRpdHkgOiBkZWNvbXBvc2UobS5hLCBtLmIsIG0uYywgbS5kLCBtLmUsIG0uZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi4vbnVtYmVyLmpzXCI7XG5pbXBvcnQge3BhcnNlQ3NzLCBwYXJzZVN2Z30gZnJvbSBcIi4vcGFyc2UuanNcIjtcblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2UsIHB4Q29tbWEsIHB4UGFyZW4sIGRlZ1BhcmVuKSB7XG5cbiAgZnVuY3Rpb24gcG9wKHMpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPyBzLnBvcCgpICsgXCIgXCIgOiBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKFwidHJhbnNsYXRlKFwiLCBudWxsLCBweENvbW1hLCBudWxsLCBweFBhcmVuKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgfHwgeWIpIHtcbiAgICAgIHMucHVzaChcInRyYW5zbGF0ZShcIiArIHhiICsgcHhDb21tYSArIHliICsgcHhQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcm90YXRlKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgaWYgKGEgLSBiID4gMTgwKSBiICs9IDM2MDsgZWxzZSBpZiAoYiAtIGEgPiAxODApIGEgKz0gMzYwOyAvLyBzaG9ydGVzdCBwYXRoXG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNrZXdYKGEsIGIsIHMsIHEpIHtcbiAgICBpZiAoYSAhPT0gYikge1xuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiwgbnVsbCwgZGVnUGFyZW4pIC0gMiwgeDogbnVtYmVyKGEsIGIpfSk7XG4gICAgfSBlbHNlIGlmIChiKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJza2V3WChcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiwgbnVsbCwgXCIsXCIsIG51bGwsIFwiKVwiKTtcbiAgICAgIHEucHVzaCh7aTogaSAtIDQsIHg6IG51bWJlcih4YSwgeGIpfSwge2k6IGkgLSAyLCB4OiBudW1iZXIoeWEsIHliKX0pO1xuICAgIH0gZWxzZSBpZiAoeGIgIT09IDEgfHwgeWIgIT09IDEpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiICsgeGIgKyBcIixcIiArIHliICsgXCIpXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcbiAgICBhID0gcGFyc2UoYSksIGIgPSBwYXJzZShiKTtcbiAgICB0cmFuc2xhdGUoYS50cmFuc2xhdGVYLCBhLnRyYW5zbGF0ZVksIGIudHJhbnNsYXRlWCwgYi50cmFuc2xhdGVZLCBzLCBxKTtcbiAgICByb3RhdGUoYS5yb3RhdGUsIGIucm90YXRlLCBzLCBxKTtcbiAgICBza2V3WChhLnNrZXdYLCBiLnNrZXdYLCBzLCBxKTtcbiAgICBzY2FsZShhLnNjYWxlWCwgYS5zY2FsZVksIGIuc2NhbGVYLCBiLnNjYWxlWSwgcywgcSk7XG4gICAgYSA9IGIgPSBudWxsOyAvLyBnY1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgaSA9IC0xLCBuID0gcS5sZW5ndGgsIG87XG4gICAgICB3aGlsZSAoKytpIDwgbikgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtQ3NzID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VDc3MsIFwicHgsIFwiLCBcInB4KVwiLCBcImRlZylcIik7XG5leHBvcnQgdmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPylcXFxccypcIixcbiAgICByZVAgPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KSVcXFxccypcIixcbiAgICByZUhleCA9IC9eIyhbMC05YS1mXXszLDh9KSQvLFxuICAgIHJlUmdiSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZUksIHJlSSwgcmVJXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlSSwgcmVJLCByZUksIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZVAsIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xcXFxcKFwiICsgW3JlTiwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVIc2xhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsYVxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xuXG52YXIgbmFtZWQgPSB7XG4gIGFsaWNlYmx1ZTogMHhmMGY4ZmYsXG4gIGFudGlxdWV3aGl0ZTogMHhmYWViZDcsXG4gIGFxdWE6IDB4MDBmZmZmLFxuICBhcXVhbWFyaW5lOiAweDdmZmZkNCxcbiAgYXp1cmU6IDB4ZjBmZmZmLFxuICBiZWlnZTogMHhmNWY1ZGMsXG4gIGJpc3F1ZTogMHhmZmU0YzQsXG4gIGJsYWNrOiAweDAwMDAwMCxcbiAgYmxhbmNoZWRhbG1vbmQ6IDB4ZmZlYmNkLFxuICBibHVlOiAweDAwMDBmZixcbiAgYmx1ZXZpb2xldDogMHg4YTJiZTIsXG4gIGJyb3duOiAweGE1MmEyYSxcbiAgYnVybHl3b29kOiAweGRlYjg4NyxcbiAgY2FkZXRibHVlOiAweDVmOWVhMCxcbiAgY2hhcnRyZXVzZTogMHg3ZmZmMDAsXG4gIGNob2NvbGF0ZTogMHhkMjY5MWUsXG4gIGNvcmFsOiAweGZmN2Y1MCxcbiAgY29ybmZsb3dlcmJsdWU6IDB4NjQ5NWVkLFxuICBjb3Juc2lsazogMHhmZmY4ZGMsXG4gIGNyaW1zb246IDB4ZGMxNDNjLFxuICBjeWFuOiAweDAwZmZmZixcbiAgZGFya2JsdWU6IDB4MDAwMDhiLFxuICBkYXJrY3lhbjogMHgwMDhiOGIsXG4gIGRhcmtnb2xkZW5yb2Q6IDB4Yjg4NjBiLFxuICBkYXJrZ3JheTogMHhhOWE5YTksXG4gIGRhcmtncmVlbjogMHgwMDY0MDAsXG4gIGRhcmtncmV5OiAweGE5YTlhOSxcbiAgZGFya2toYWtpOiAweGJkYjc2YixcbiAgZGFya21hZ2VudGE6IDB4OGIwMDhiLFxuICBkYXJrb2xpdmVncmVlbjogMHg1NTZiMmYsXG4gIGRhcmtvcmFuZ2U6IDB4ZmY4YzAwLFxuICBkYXJrb3JjaGlkOiAweDk5MzJjYyxcbiAgZGFya3JlZDogMHg4YjAwMDAsXG4gIGRhcmtzYWxtb246IDB4ZTk5NjdhLFxuICBkYXJrc2VhZ3JlZW46IDB4OGZiYzhmLFxuICBkYXJrc2xhdGVibHVlOiAweDQ4M2Q4YixcbiAgZGFya3NsYXRlZ3JheTogMHgyZjRmNGYsXG4gIGRhcmtzbGF0ZWdyZXk6IDB4MmY0ZjRmLFxuICBkYXJrdHVycXVvaXNlOiAweDAwY2VkMSxcbiAgZGFya3Zpb2xldDogMHg5NDAwZDMsXG4gIGRlZXBwaW5rOiAweGZmMTQ5MyxcbiAgZGVlcHNreWJsdWU6IDB4MDBiZmZmLFxuICBkaW1ncmF5OiAweDY5Njk2OSxcbiAgZGltZ3JleTogMHg2OTY5NjksXG4gIGRvZGdlcmJsdWU6IDB4MWU5MGZmLFxuICBmaXJlYnJpY2s6IDB4YjIyMjIyLFxuICBmbG9yYWx3aGl0ZTogMHhmZmZhZjAsXG4gIGZvcmVzdGdyZWVuOiAweDIyOGIyMixcbiAgZnVjaHNpYTogMHhmZjAwZmYsXG4gIGdhaW5zYm9ybzogMHhkY2RjZGMsXG4gIGdob3N0d2hpdGU6IDB4ZjhmOGZmLFxuICBnb2xkOiAweGZmZDcwMCxcbiAgZ29sZGVucm9kOiAweGRhYTUyMCxcbiAgZ3JheTogMHg4MDgwODAsXG4gIGdyZWVuOiAweDAwODAwMCxcbiAgZ3JlZW55ZWxsb3c6IDB4YWRmZjJmLFxuICBncmV5OiAweDgwODA4MCxcbiAgaG9uZXlkZXc6IDB4ZjBmZmYwLFxuICBob3RwaW5rOiAweGZmNjliNCxcbiAgaW5kaWFucmVkOiAweGNkNWM1YyxcbiAgaW5kaWdvOiAweDRiMDA4MixcbiAgaXZvcnk6IDB4ZmZmZmYwLFxuICBraGFraTogMHhmMGU2OGMsXG4gIGxhdmVuZGVyOiAweGU2ZTZmYSxcbiAgbGF2ZW5kZXJibHVzaDogMHhmZmYwZjUsXG4gIGxhd25ncmVlbjogMHg3Y2ZjMDAsXG4gIGxlbW9uY2hpZmZvbjogMHhmZmZhY2QsXG4gIGxpZ2h0Ymx1ZTogMHhhZGQ4ZTYsXG4gIGxpZ2h0Y29yYWw6IDB4ZjA4MDgwLFxuICBsaWdodGN5YW46IDB4ZTBmZmZmLFxuICBsaWdodGdvbGRlbnJvZHllbGxvdzogMHhmYWZhZDIsXG4gIGxpZ2h0Z3JheTogMHhkM2QzZDMsXG4gIGxpZ2h0Z3JlZW46IDB4OTBlZTkwLFxuICBsaWdodGdyZXk6IDB4ZDNkM2QzLFxuICBsaWdodHBpbms6IDB4ZmZiNmMxLFxuICBsaWdodHNhbG1vbjogMHhmZmEwN2EsXG4gIGxpZ2h0c2VhZ3JlZW46IDB4MjBiMmFhLFxuICBsaWdodHNreWJsdWU6IDB4ODdjZWZhLFxuICBsaWdodHNsYXRlZ3JheTogMHg3Nzg4OTksXG4gIGxpZ2h0c2xhdGVncmV5OiAweDc3ODg5OSxcbiAgbGlnaHRzdGVlbGJsdWU6IDB4YjBjNGRlLFxuICBsaWdodHllbGxvdzogMHhmZmZmZTAsXG4gIGxpbWU6IDB4MDBmZjAwLFxuICBsaW1lZ3JlZW46IDB4MzJjZDMyLFxuICBsaW5lbjogMHhmYWYwZTYsXG4gIG1hZ2VudGE6IDB4ZmYwMGZmLFxuICBtYXJvb246IDB4ODAwMDAwLFxuICBtZWRpdW1hcXVhbWFyaW5lOiAweDY2Y2RhYSxcbiAgbWVkaXVtYmx1ZTogMHgwMDAwY2QsXG4gIG1lZGl1bW9yY2hpZDogMHhiYTU1ZDMsXG4gIG1lZGl1bXB1cnBsZTogMHg5MzcwZGIsXG4gIG1lZGl1bXNlYWdyZWVuOiAweDNjYjM3MSxcbiAgbWVkaXVtc2xhdGVibHVlOiAweDdiNjhlZSxcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IDB4MDBmYTlhLFxuICBtZWRpdW10dXJxdW9pc2U6IDB4NDhkMWNjLFxuICBtZWRpdW12aW9sZXRyZWQ6IDB4YzcxNTg1LFxuICBtaWRuaWdodGJsdWU6IDB4MTkxOTcwLFxuICBtaW50Y3JlYW06IDB4ZjVmZmZhLFxuICBtaXN0eXJvc2U6IDB4ZmZlNGUxLFxuICBtb2NjYXNpbjogMHhmZmU0YjUsXG4gIG5hdmFqb3doaXRlOiAweGZmZGVhZCxcbiAgbmF2eTogMHgwMDAwODAsXG4gIG9sZGxhY2U6IDB4ZmRmNWU2LFxuICBvbGl2ZTogMHg4MDgwMDAsXG4gIG9saXZlZHJhYjogMHg2YjhlMjMsXG4gIG9yYW5nZTogMHhmZmE1MDAsXG4gIG9yYW5nZXJlZDogMHhmZjQ1MDAsXG4gIG9yY2hpZDogMHhkYTcwZDYsXG4gIHBhbGVnb2xkZW5yb2Q6IDB4ZWVlOGFhLFxuICBwYWxlZ3JlZW46IDB4OThmYjk4LFxuICBwYWxldHVycXVvaXNlOiAweGFmZWVlZSxcbiAgcGFsZXZpb2xldHJlZDogMHhkYjcwOTMsXG4gIHBhcGF5YXdoaXA6IDB4ZmZlZmQ1LFxuICBwZWFjaHB1ZmY6IDB4ZmZkYWI5LFxuICBwZXJ1OiAweGNkODUzZixcbiAgcGluazogMHhmZmMwY2IsXG4gIHBsdW06IDB4ZGRhMGRkLFxuICBwb3dkZXJibHVlOiAweGIwZTBlNixcbiAgcHVycGxlOiAweDgwMDA4MCxcbiAgcmViZWNjYXB1cnBsZTogMHg2NjMzOTksXG4gIHJlZDogMHhmZjAwMDAsXG4gIHJvc3licm93bjogMHhiYzhmOGYsXG4gIHJveWFsYmx1ZTogMHg0MTY5ZTEsXG4gIHNhZGRsZWJyb3duOiAweDhiNDUxMyxcbiAgc2FsbW9uOiAweGZhODA3MixcbiAgc2FuZHlicm93bjogMHhmNGE0NjAsXG4gIHNlYWdyZWVuOiAweDJlOGI1NyxcbiAgc2Vhc2hlbGw6IDB4ZmZmNWVlLFxuICBzaWVubmE6IDB4YTA1MjJkLFxuICBzaWx2ZXI6IDB4YzBjMGMwLFxuICBza3libHVlOiAweDg3Y2VlYixcbiAgc2xhdGVibHVlOiAweDZhNWFjZCxcbiAgc2xhdGVncmF5OiAweDcwODA5MCxcbiAgc2xhdGVncmV5OiAweDcwODA5MCxcbiAgc25vdzogMHhmZmZhZmEsXG4gIHNwcmluZ2dyZWVuOiAweDAwZmY3ZixcbiAgc3RlZWxibHVlOiAweDQ2ODJiNCxcbiAgdGFuOiAweGQyYjQ4YyxcbiAgdGVhbDogMHgwMDgwODAsXG4gIHRoaXN0bGU6IDB4ZDhiZmQ4LFxuICB0b21hdG86IDB4ZmY2MzQ3LFxuICB0dXJxdW9pc2U6IDB4NDBlMGQwLFxuICB2aW9sZXQ6IDB4ZWU4MmVlLFxuICB3aGVhdDogMHhmNWRlYjMsXG4gIHdoaXRlOiAweGZmZmZmZixcbiAgd2hpdGVzbW9rZTogMHhmNWY1ZjUsXG4gIHllbGxvdzogMHhmZmZmMDAsXG4gIHllbGxvd2dyZWVuOiAweDlhY2QzMlxufTtcblxuZGVmaW5lKENvbG9yLCBjb2xvciwge1xuICBjb3B5OiBmdW5jdGlvbihjaGFubmVscykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLCBjaGFubmVscyk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhzbCgpIHtcbiAgcmV0dXJuIGhzbENvbnZlcnQodGhpcykuZm9ybWF0SHNsKCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdFJnYigpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKGZvcm1hdCkge1xuICB2YXIgbSwgbDtcbiAgZm9ybWF0ID0gKGZvcm1hdCArIFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKG0gPSByZUhleC5leGVjKGZvcm1hdCkpID8gKGwgPSBtWzFdLmxlbmd0aCwgbSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbCA9PT0gNiA/IHJnYm4obSkgLy8gI2ZmMDAwMFxuICAgICAgOiBsID09PSAzID8gbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpLCAxKSAvLyAjZjAwXG4gICAgICA6IGwgPT09IDggPyByZ2JhKG0gPj4gMjQgJiAweGZmLCBtID4+IDE2ICYgMHhmZiwgbSA+PiA4ICYgMHhmZiwgKG0gJiAweGZmKSAvIDB4ZmYpIC8vICNmZjAwMDAwMFxuICAgICAgOiBsID09PSA0ID8gcmdiYSgobSA+PiAxMiAmIDB4ZikgfCAobSA+PiA4ICYgMHhmMCksIChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgoKG0gJiAweGYpIDw8IDQpIHwgKG0gJiAweGYpKSAvIDB4ZmYpIC8vICNmMDAwXG4gICAgICA6IG51bGwpIC8vIGludmFsaWQgaGV4XG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRSZ2I6IHJnYl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiByZ2JfZm9ybWF0UmdiXG59KSk7XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiBcIiNcIiArIGhleCh0aGlzLnIpICsgaGV4KHRoaXMuZykgKyBoZXgodGhpcy5iKTtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gIHJldHVybiAoYSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwiKVxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuZykgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmIpIHx8IDApKVxuICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbn1cblxuZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gIHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHZhbHVlKSB8fCAwKSk7XG4gIHJldHVybiAodmFsdWUgPCAxNiA/IFwiMFwiIDogXCJcIikgKyB2YWx1ZS50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIGhzbGEoaCwgcywgbCwgYSkge1xuICBpZiAoYSA8PSAwKSBoID0gcyA9IGwgPSBOYU47XG4gIGVsc2UgaWYgKGwgPD0gMCB8fCBsID49IDEpIGggPSBzID0gTmFOO1xuICBlbHNlIGlmIChzIDw9IDApIGggPSBOYU47XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhzbENvbnZlcnQoaCkgOiBuZXcgSHNsKGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIc2wsIGhzbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IHRoaXMuaCAlIDM2MCArICh0aGlzLmggPCAwKSAqIDM2MCxcbiAgICAgICAgcyA9IGlzTmFOKGgpIHx8IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zLFxuICAgICAgICBsID0gdGhpcy5sLFxuICAgICAgICBtMiA9IGwgKyAobCA8IDAuNSA/IGwgOiAxIC0gbCkgKiBzLFxuICAgICAgICBtMSA9IDIgKiBsIC0gbTI7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBoc2wycmdiKGggPj0gMjQwID8gaCAtIDI0MCA6IGggKyAxMjAsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGgsIG0xLCBtMiksXG4gICAgICBoc2wycmdiKGggPCAxMjAgPyBoICsgMjQwIDogaCAtIDEyMCwgbTEsIG0yKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKDAgPD0gdGhpcy5zICYmIHRoaXMucyA8PSAxIHx8IGlzTmFOKHRoaXMucykpXG4gICAgICAgICYmICgwIDw9IHRoaXMubCAmJiB0aGlzLmwgPD0gMSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgZm9ybWF0SHNsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcImhzbChcIiA6IFwiaHNsYShcIilcbiAgICAgICAgKyAodGhpcy5oIHx8IDApICsgXCIsIFwiXG4gICAgICAgICsgKHRoaXMucyB8fCAwKSAqIDEwMCArIFwiJSwgXCJcbiAgICAgICAgKyAodGhpcy5sIHx8IDApICogMTAwICsgXCIlXCJcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG4vKiBGcm9tIEZ2RCAxMy4zNywgQ1NTIENvbG9yIE1vZHVsZSBMZXZlbCAzICovXG5mdW5jdGlvbiBoc2wycmdiKGgsIG0xLCBtMikge1xuICByZXR1cm4gKGggPCA2MCA/IG0xICsgKG0yIC0gbTEpICogaCAvIDYwXG4gICAgICA6IGggPCAxODAgPyBtMlxuICAgICAgOiBoIDwgMjQwID8gbTEgKyAobTIgLSBtMSkgKiAoMjQwIC0gaCkgLyA2MFxuICAgICAgOiBtMSkgKiAyNTU7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYmFzaXModDEsIHYwLCB2MSwgdjIsIHYzKSB7XG4gIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTtcbiAgcmV0dXJuICgoMSAtIDMgKiB0MSArIDMgKiB0MiAtIHQzKSAqIHYwXG4gICAgICArICg0IC0gNiAqIHQyICsgMyAqIHQzKSAqIHYxXG4gICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyXG4gICAgICArIHQzICogdjMpIC8gNjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0IDw9IDAgPyAodCA9IDApIDogdCA+PSAxID8gKHQgPSAxLCBuIC0gMSkgOiBNYXRoLmZsb29yKHQgKiBuKSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sXG4gICAgICAgIHYyID0gdmFsdWVzW2kgKyAxXSxcbiAgICAgICAgdjAgPSBpID4gMCA/IHZhbHVlc1tpIC0gMV0gOiAyICogdjEgLSB2MixcbiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtiYXNpc30gZnJvbSBcIi4vYmFzaXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoKCh0ICU9IDEpIDwgMCA/ICsrdCA6IHQpICogbiksXG4gICAgICAgIHYwID0gdmFsdWVzWyhpICsgbiAtIDEpICUgbl0sXG4gICAgICAgIHYxID0gdmFsdWVzW2kgJSBuXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbKGkgKyAxKSAlIG5dLFxuICAgICAgICB2MyA9IHZhbHVlc1soaSArIDIpICUgbl07XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciByZUEgPSAvWy0rXT8oPzpcXGQrXFwuP1xcZCp8XFwuP1xcZCspKD86W2VFXVstK10/XFxkKyk/L2csXG4gICAgcmVCID0gbmV3IFJlZ0V4cChyZUEuc291cmNlLCBcImdcIik7XG5cbmZ1bmN0aW9uIHplcm8oYikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uZShiKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGIodCkgKyBcIlwiO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZVZhcnlpbmcoaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiB2ICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMuZWFjaChlYXNlVmFyeWluZyh0aGlzLl9pZCwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaS5jYWxsKHRoaXMsIHQpLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciB0LCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdCA9IChpMCA9IGkpICYmIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIiwiZnVuY3Rpb24gdGV4dEludGVycG9sYXRlKGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gaS5jYWxsKHRoaXMsIHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0VHdlZW4odmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiB0ZXh0SW50ZXJwb2xhdGUoaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcInRleHRcIjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHRleHRUd2Vlbih2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc2VsZWN0aW9uIHdhcyBlbXB0eSwgcmVzb2x2ZSBlbmQgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlVmFyeWluZyBmcm9tIFwiLi9lYXNlVmFyeWluZy5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHRUd2VlbiBmcm9tIFwiLi90ZXh0VHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmQuanNcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3Byb3RvdHlwZS5zZWxlY3RDaGlsZCxcbiAgc2VsZWN0Q2hpbGRyZW46IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHRleHRUd2VlbjogdHJhbnNpdGlvbl90ZXh0VHdlZW4sXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZSxcbiAgZWFzZVZhcnlpbmc6IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcsXG4gIGVuZDogdHJhbnNpdGlvbl9lbmQsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25fcHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl1cbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7aWR9IG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyYW5zaXRpb259IGZyb20gXCIuL3RyYW5zaXRpb24vaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBhY3RpdmV9IGZyb20gXCIuL2FjdGl2ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycnVwdH0gZnJvbSBcIi4vaW50ZXJydXB0LmpzXCI7XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7ZHJhZ0Rpc2FibGUsIGRyYWdFbmFibGV9IGZyb20gXCJkMy1kcmFnXCI7XG5pbXBvcnQge2ludGVycG9sYXRlfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7cG9pbnRlciwgc2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge2ludGVycnVwdH0gZnJvbSBcImQzLXRyYW5zaXRpb25cIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IEJydXNoRXZlbnQgZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCBub2V2ZW50LCB7bm9wcm9wYWdhdGlvbn0gZnJvbSBcIi4vbm9ldmVudC5qc1wiO1xuXG52YXIgTU9ERV9EUkFHID0ge25hbWU6IFwiZHJhZ1wifSxcbiAgICBNT0RFX1NQQUNFID0ge25hbWU6IFwic3BhY2VcIn0sXG4gICAgTU9ERV9IQU5ETEUgPSB7bmFtZTogXCJoYW5kbGVcIn0sXG4gICAgTU9ERV9DRU5URVIgPSB7bmFtZTogXCJjZW50ZXJcIn07XG5cbmNvbnN0IHthYnMsIG1heCwgbWlufSA9IE1hdGg7XG5cbmZ1bmN0aW9uIG51bWJlcjEoZSkge1xuICByZXR1cm4gWytlWzBdLCArZVsxXV07XG59XG5cbmZ1bmN0aW9uIG51bWJlcjIoZSkge1xuICByZXR1cm4gW251bWJlcjEoZVswXSksIG51bWJlcjEoZVsxXSldO1xufVxuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcIndcIiwgXCJlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiBbWyt4WzBdLCBlWzBdWzFdXSwgWyt4WzFdLCBlWzFdWzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVswXSwgeHlbMV1bMF1dOyB9XG59O1xuXG52YXIgWSA9IHtcbiAgbmFtZTogXCJ5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJzXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHksIGUpIHsgcmV0dXJuIHkgPT0gbnVsbCA/IG51bGwgOiBbW2VbMF1bMF0sICt5WzBdXSwgW2VbMV1bMF0sICt5WzFdXV07IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5ICYmIFt4eVswXVsxXSwgeHlbMV1bMV1dOyB9XG59O1xuXG52YXIgWFkgPSB7XG4gIG5hbWU6IFwieHlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcIndcIiwgXCJlXCIsIFwic1wiLCBcIm53XCIsIFwibmVcIiwgXCJzd1wiLCBcInNlXCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSA9PSBudWxsID8gbnVsbCA6IG51bWJlcjIoeHkpOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eTsgfVxufTtcblxudmFyIGN1cnNvcnMgPSB7XG4gIG92ZXJsYXk6IFwiY3Jvc3NoYWlyXCIsXG4gIHNlbGVjdGlvbjogXCJtb3ZlXCIsXG4gIG46IFwibnMtcmVzaXplXCIsXG4gIGU6IFwiZXctcmVzaXplXCIsXG4gIHM6IFwibnMtcmVzaXplXCIsXG4gIHc6IFwiZXctcmVzaXplXCIsXG4gIG53OiBcIm53c2UtcmVzaXplXCIsXG4gIG5lOiBcIm5lc3ctcmVzaXplXCIsXG4gIHNlOiBcIm53c2UtcmVzaXplXCIsXG4gIHN3OiBcIm5lc3ctcmVzaXplXCJcbn07XG5cbnZhciBmbGlwWCA9IHtcbiAgZTogXCJ3XCIsXG4gIHc6IFwiZVwiLFxuICBudzogXCJuZVwiLFxuICBuZTogXCJud1wiLFxuICBzZTogXCJzd1wiLFxuICBzdzogXCJzZVwiXG59O1xuXG52YXIgZmxpcFkgPSB7XG4gIG46IFwic1wiLFxuICBzOiBcIm5cIixcbiAgbnc6IFwic3dcIixcbiAgbmU6IFwic2VcIixcbiAgc2U6IFwibmVcIixcbiAgc3c6IFwibndcIlxufTtcblxudmFyIHNpZ25zWCA9IHtcbiAgb3ZlcmxheTogKzEsXG4gIHNlbGVjdGlvbjogKzEsXG4gIG46IG51bGwsXG4gIGU6ICsxLFxuICBzOiBudWxsLFxuICB3OiAtMSxcbiAgbnc6IC0xLFxuICBuZTogKzEsXG4gIHNlOiArMSxcbiAgc3c6IC0xXG59O1xuXG52YXIgc2lnbnNZID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogLTEsXG4gIGU6IG51bGwsXG4gIHM6ICsxLFxuICB3OiBudWxsLFxuICBudzogLTEsXG4gIG5lOiAtMSxcbiAgc2U6ICsxLFxuICBzdzogKzFcbn07XG5cbmZ1bmN0aW9uIHR5cGUodCkge1xuICByZXR1cm4ge3R5cGU6IHR9O1xufVxuXG4vLyBJZ25vcmUgcmlnaHQtY2xpY2ssIHNpbmNlIHRoYXQgc2hvdWxkIG9wZW4gdGhlIGNvbnRleHQgbWVudS5cbmZ1bmN0aW9uIGRlZmF1bHRGaWx0ZXIoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC5jdHJsS2V5ICYmICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICBpZiAoc3ZnLmhhc0F0dHJpYnV0ZShcInZpZXdCb3hcIikpIHtcbiAgICBzdmcgPSBzdmcudmlld0JveC5iYXNlVmFsO1xuICAgIHJldHVybiBbW3N2Zy54LCBzdmcueV0sIFtzdmcueCArIHN2Zy53aWR0aCwgc3ZnLnkgKyBzdmcuaGVpZ2h0XV07XG4gIH1cbiAgcmV0dXJuIFtbMCwgMF0sIFtzdmcud2lkdGguYmFzZVZhbC52YWx1ZSwgc3ZnLmhlaWdodC5iYXNlVmFsLnZhbHVlXV07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb3VjaGFibGUoKSB7XG4gIHJldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgfHwgKFwib250b3VjaHN0YXJ0XCIgaW4gdGhpcyk7XG59XG5cbi8vIExpa2UgZDMubG9jYWwsIGJ1dCB3aXRoIHRoZSBuYW1lIOKAnF9fYnJ1c2jigJ0gcmF0aGVyIHRoYW4gYXV0by1nZW5lcmF0ZWQuXG5mdW5jdGlvbiBsb2NhbChub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX2JydXNoKSBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkgcmV0dXJuO1xuICByZXR1cm4gbm9kZS5fX2JydXNoO1xufVxuXG5mdW5jdGlvbiBlbXB0eShleHRlbnQpIHtcbiAgcmV0dXJuIGV4dGVudFswXVswXSA9PT0gZXh0ZW50WzFdWzBdXG4gICAgICB8fCBleHRlbnRbMF1bMV0gPT09IGV4dGVudFsxXVsxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoU2VsZWN0aW9uKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fX2JydXNoO1xuICByZXR1cm4gc3RhdGUgPyBzdGF0ZS5kaW0ub3V0cHV0KHN0YXRlLnNlbGVjdGlvbikgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hYKCkge1xuICByZXR1cm4gYnJ1c2goWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFkoKSB7XG4gIHJldHVybiBicnVzaChZKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBicnVzaChYWSk7XG59XG5cbmZ1bmN0aW9uIGJydXNoKGRpbSkge1xuICB2YXIgZXh0ZW50ID0gZGVmYXVsdEV4dGVudCxcbiAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXIsXG4gICAgICB0b3VjaGFibGUgPSBkZWZhdWx0VG91Y2hhYmxlLFxuICAgICAga2V5cyA9IHRydWUsXG4gICAgICBsaXN0ZW5lcnMgPSBkaXNwYXRjaChcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5vbihcIm1vdXNlZG93bi5icnVzaFwiLCBzdGFydGVkKVxuICAgICAgLmZpbHRlcih0b3VjaGFibGUpXG4gICAgICAgIC5vbihcInRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZClcbiAgICAgICAgLm9uKFwidG91Y2htb3ZlLmJydXNoXCIsIHRvdWNobW92ZWQpXG4gICAgICAgIC5vbihcInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoXCIsIHRvdWNoZW5kZWQpXG4gICAgICAgIC5zdHlsZShcInRvdWNoLWFjdGlvblwiLCBcIm5vbmVcIilcbiAgICAgICAgLnN0eWxlKFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCIsIFwicmdiYSgwLDAsMCwwKVwiKTtcbiAgfVxuXG4gIGJydXNoLm1vdmUgPSBmdW5jdGlvbihncm91cCwgc2VsZWN0aW9uLCBldmVudCkge1xuICAgIGlmIChncm91cC50d2Vlbikge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJzdGFydC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydChldmVudCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbihldmVudCkgeyBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kKGV2ZW50KTsgfSlcbiAgICAgICAgICAudHdlZW4oXCJicnVzaFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoYXQuX19icnVzaCxcbiAgICAgICAgICAgICAgICBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjAgPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IHNlbGVjdGlvbiwgc3RhdGUuZXh0ZW50KSxcbiAgICAgICAgICAgICAgICBpID0gaW50ZXJwb2xhdGUoc2VsZWN0aW9uMCwgc2VsZWN0aW9uMSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHR3ZWVuKHQpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gdCA9PT0gMSAmJiBzZWxlY3Rpb24xID09PSBudWxsID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICE9PSBudWxsICYmIHNlbGVjdGlvbjEgIT09IG51bGwgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PT0gbnVsbCA/IG51bGwgOiBzZWxlY3Rpb24xO1xuICAgICAgICAgICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICAgICAgICBlbWl0LnN0YXJ0KGV2ZW50KS5icnVzaChldmVudCkuZW5kKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgYnJ1c2guY2xlYXIgPSBmdW5jdGlvbihncm91cCwgZXZlbnQpIHtcbiAgICBicnVzaC5tb3ZlKGdyb3VwLCBudWxsLCBldmVudCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGlzKSxcbiAgICAgICAgc2VsZWN0aW9uID0gbG9jYWwodGhpcykuc2VsZWN0aW9uO1xuXG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgc2VsZWN0aW9uWzBdWzBdKVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBzZWxlY3Rpb25bMF1bMV0pXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBzZWxlY3Rpb25bMV1bMF0gLSBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdKTtcblxuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlW2QudHlwZS5sZW5ndGggLSAxXSA9PT0gXCJlXCIgPyBzZWxlY3Rpb25bMV1bMF0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVswXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbMF0gPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gaGFuZGxlU2l6ZSAvIDIgOiBzZWxlY3Rpb25bMF1bMV0gLSBoYW5kbGVTaXplIC8gMjsgfSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJuXCIgfHwgZC50eXBlID09PSBcInNcIiA/IHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZSA9PT0gXCJlXCIgfHwgZC50eXBlID09PSBcIndcIiA/IHNlbGVjdGlvblsxXVsxXSAtIHNlbGVjdGlvblswXVsxXSArIGhhbmRsZVNpemUgOiBoYW5kbGVTaXplOyB9KTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIGdyb3VwLnNlbGVjdEFsbChcIi5zZWxlY3Rpb24sLmhhbmRsZVwiKVxuICAgICAgICAgIC5zdHlsZShcImRpc3BsYXlcIiwgXCJub25lXCIpXG4gICAgICAgICAgLmF0dHIoXCJ4XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB2YXIgZW1pdCA9IHRoYXQuX19icnVzaC5lbWl0dGVyO1xuICAgIHJldHVybiBlbWl0ICYmICghY2xlYW4gfHwgIWVtaXQuY2xlYW4pID8gZW1pdCA6IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MsIGNsZWFuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEVtaXR0ZXIodGhhdCwgYXJncywgY2xlYW4pIHtcbiAgICB0aGlzLnRoYXQgPSB0aGF0O1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5zdGF0ZSA9IHRoYXQuX19icnVzaDtcbiAgICB0aGlzLmFjdGl2ZSA9IDA7XG4gICAgdGhpcy5jbGVhbiA9IGNsZWFuO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0aW5nKSB0aGlzLnN0YXJ0aW5nID0gZmFsc2UsIHRoaXMuZW1pdChcInN0YXJ0XCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIGVsc2UgdGhpcy5lbWl0KFwiYnJ1c2hcIiwgZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBicnVzaDogZnVuY3Rpb24oZXZlbnQsIG1vZGUpIHtcbiAgICAgIHRoaXMuZW1pdChcImJydXNoXCIsIGV2ZW50LCBtb2RlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW5kOiBmdW5jdGlvbihldmVudCwgbW9kZSkge1xuICAgICAgaWYgKC0tdGhpcy5hY3RpdmUgPT09IDApIGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsIHRoaXMuZW1pdChcImVuZFwiLCBldmVudCwgbW9kZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uKHR5cGUsIGV2ZW50LCBtb2RlKSB7XG4gICAgICB2YXIgZCA9IHNlbGVjdCh0aGlzLnRoYXQpLmRhdHVtKCk7XG4gICAgICBsaXN0ZW5lcnMuY2FsbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdGhpcy50aGF0LFxuICAgICAgICBuZXcgQnJ1c2hFdmVudCh0eXBlLCB7XG4gICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIHRhcmdldDogYnJ1c2gsXG4gICAgICAgICAgc2VsZWN0aW9uOiBkaW0ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIGRpc3BhdGNoOiBsaXN0ZW5lcnNcbiAgICAgICAgfSksXG4gICAgICAgIGRcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoZXZlbnQpIHtcbiAgICBpZiAodG91Y2hlbmRpbmcgJiYgIWV2ZW50LnRvdWNoZXMpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChrZXlzICYmIGV2ZW50Lm1ldGFLZXkgPyB0eXBlID0gXCJvdmVybGF5XCIgOiB0eXBlKSA9PT0gXCJzZWxlY3Rpb25cIiA/IE1PREVfRFJBRyA6IChrZXlzICYmIGV2ZW50LmFsdEtleSA/IE1PREVfQ0VOVEVSIDogTU9ERV9IQU5ETEUpLFxuICAgICAgICBzaWduWCA9IGRpbSA9PT0gWSA/IG51bGwgOiBzaWduc1hbdHlwZV0sXG4gICAgICAgIHNpZ25ZID0gZGltID09PSBYID8gbnVsbCA6IHNpZ25zWVt0eXBlXSxcbiAgICAgICAgc3RhdGUgPSBsb2NhbCh0aGF0KSxcbiAgICAgICAgZXh0ZW50ID0gc3RhdGUuZXh0ZW50LFxuICAgICAgICBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIFcgPSBleHRlbnRbMF1bMF0sIHcwLCB3MSxcbiAgICAgICAgTiA9IGV4dGVudFswXVsxXSwgbjAsIG4xLFxuICAgICAgICBFID0gZXh0ZW50WzFdWzBdLCBlMCwgZTEsXG4gICAgICAgIFMgPSBleHRlbnRbMV1bMV0sIHMwLCBzMSxcbiAgICAgICAgZHggPSAwLFxuICAgICAgICBkeSA9IDAsXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBrZXlzICYmIGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBsb2NrWCxcbiAgICAgICAgbG9ja1ksXG4gICAgICAgIHBvaW50cyA9IEFycmF5LmZyb20oZXZlbnQudG91Y2hlcyB8fCBbZXZlbnRdLCB0ID0+IHtcbiAgICAgICAgICBjb25zdCBpID0gdC5pZGVudGlmaWVyO1xuICAgICAgICAgIHQgPSBwb2ludGVyKHQsIHRoYXQpO1xuICAgICAgICAgIHQucG9pbnQwID0gdC5zbGljZSgpO1xuICAgICAgICAgIHQuaWRlbnRpZmllciA9IGk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0pO1xuXG4gICAgaW50ZXJydXB0KHRoYXQpO1xuICAgIHZhciBlbWl0ID0gZW1pdHRlcih0aGF0LCBhcmd1bWVudHMsIHRydWUpLmJlZm9yZXN0YXJ0KCk7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJvdmVybGF5XCIpIHtcbiAgICAgIGlmIChzZWxlY3Rpb24pIG1vdmluZyA9IHRydWU7XG4gICAgICBjb25zdCBwdHMgPSBbcG9pbnRzWzBdLCBwb2ludHNbMV0gfHwgcG9pbnRzWzBdXTtcbiAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IFtbXG4gICAgICAgICAgdzAgPSBkaW0gPT09IFkgPyBXIDogbWluKHB0c1swXVswXSwgcHRzWzFdWzBdKSxcbiAgICAgICAgICBuMCA9IGRpbSA9PT0gWCA/IE4gOiBtaW4ocHRzWzBdWzFdLCBwdHNbMV1bMV0pXG4gICAgICAgIF0sIFtcbiAgICAgICAgICBlMCA9IGRpbSA9PT0gWSA/IEUgOiBtYXgocHRzWzBdWzBdLCBwdHNbMV1bMF0pLFxuICAgICAgICAgIHMwID0gZGltID09PSBYID8gUyA6IG1heChwdHNbMF1bMV0sIHB0c1sxXVsxXSlcbiAgICAgICAgXV07XG4gICAgICBpZiAocG9pbnRzLmxlbmd0aCA+IDEpIG1vdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3MCA9IHNlbGVjdGlvblswXVswXTtcbiAgICAgIG4wID0gc2VsZWN0aW9uWzBdWzFdO1xuICAgICAgZTAgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBzMCA9IHNlbGVjdGlvblsxXVsxXTtcbiAgICB9XG5cbiAgICB3MSA9IHcwO1xuICAgIG4xID0gbjA7XG4gICAgZTEgPSBlMDtcbiAgICBzMSA9IHMwO1xuXG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoYXQpXG4gICAgICAgIC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgdmFyIG92ZXJsYXkgPSBncm91cC5zZWxlY3RBbGwoXCIub3ZlcmxheVwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcblxuICAgIGlmIChldmVudC50b3VjaGVzKSB7XG4gICAgICBlbWl0Lm1vdmVkID0gbW92ZWQ7XG4gICAgICBlbWl0LmVuZGVkID0gZW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2aWV3ID0gc2VsZWN0KGV2ZW50LnZpZXcpXG4gICAgICAgICAgLm9uKFwibW91c2Vtb3ZlLmJydXNoXCIsIG1vdmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNldXAuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgICAgaWYgKGtleXMpIHZpZXdcbiAgICAgICAgICAub24oXCJrZXlkb3duLmJydXNoXCIsIGtleWRvd25lZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJrZXl1cC5icnVzaFwiLCBrZXl1cHBlZCwgdHJ1ZSlcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgZW1pdC5zdGFydChldmVudCwgbW9kZS5uYW1lKTtcblxuICAgIGZ1bmN0aW9uIG1vdmVkKGV2ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZXZlbnQuY2hhbmdlZFRvdWNoZXMgfHwgW2V2ZW50XSkge1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgcG9pbnRzKVxuICAgICAgICAgIGlmIChkLmlkZW50aWZpZXIgPT09IHAuaWRlbnRpZmllcikgZC5jdXIgPSBwb2ludGVyKHAsIHRoYXQpO1xuICAgICAgfVxuICAgICAgaWYgKHNoaWZ0aW5nICYmICFsb2NrWCAmJiAhbG9ja1kgJiYgcG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgaWYgKGFicyhwb2ludC5jdXJbMF0gLSBwb2ludFswXSkgPiBhYnMocG9pbnQuY3VyWzFdIC0gcG9pbnRbMV0pKVxuICAgICAgICAgIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxvY2tYID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKVxuICAgICAgICBpZiAocG9pbnQuY3VyKSBwb2ludFswXSA9IHBvaW50LmN1clswXSwgcG9pbnRbMV0gPSBwb2ludC5jdXJbMV07XG4gICAgICBtb3ZpbmcgPSB0cnVlO1xuICAgICAgbm9ldmVudChldmVudCk7XG4gICAgICBtb3ZlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3ZlKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludCA9IHBvaW50c1swXSwgcG9pbnQwID0gcG9pbnQucG9pbnQwO1xuICAgICAgdmFyIHQ7XG5cbiAgICAgIGR4ID0gcG9pbnRbMF0gLSBwb2ludDBbMF07XG4gICAgICBkeSA9IHBvaW50WzFdIC0gcG9pbnQwWzFdO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBNT0RFX1NQQUNFOlxuICAgICAgICBjYXNlIE1PREVfRFJBRzoge1xuICAgICAgICAgIGlmIChzaWduWCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIGUwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkpIGR5ID0gbWF4KE4gLSBuMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChwb2ludHNbMV0pIHtcbiAgICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBtYXgoVywgbWluKEUsIHBvaW50c1swXVswXSkpLCBlMSA9IG1heChXLCBtaW4oRSwgcG9pbnRzWzFdWzBdKSksIHNpZ25YID0gMTtcbiAgICAgICAgICAgIGlmIChzaWduWSkgbjEgPSBtYXgoTiwgbWluKFMsIHBvaW50c1swXVsxXSkpLCBzMSA9IG1heChOLCBtaW4oUywgcG9pbnRzWzFdWzFdKSksIHNpZ25ZID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZHggPSBtYXgoVyAtIHcwLCBtaW4oRSAtIHcwLCBkeCkpLCB3MSA9IHcwICsgZHgsIGUxID0gZTA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gbWF4KFcgLSBlMCwgbWluKEUgLSBlMCwgZHgpKSwgdzEgPSB3MCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgZHkgPSBtYXgoTiAtIG4wLCBtaW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgICBlbHNlIGlmIChzaWduWSA+IDApIGR5ID0gbWF4KE4gLSBzMCwgbWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCwgczEgPSBzMCArIGR5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIE1PREVfQ0VOVEVSOiB7XG4gICAgICAgICAgaWYgKHNpZ25YKSB3MSA9IG1heChXLCBtaW4oRSwgdzAgLSBkeCAqIHNpZ25YKSksIGUxID0gbWF4KFcsIG1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gbWF4KE4sIG1pbihTLCBuMCAtIGR5ICogc2lnblkpKSwgczEgPSBtYXgoTiwgbWluKFMsIHMwICsgZHkgKiBzaWduWSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlMSA8IHcxKSB7XG4gICAgICAgIHNpZ25YICo9IC0xO1xuICAgICAgICB0ID0gdzAsIHcwID0gZTAsIGUwID0gdDtcbiAgICAgICAgdCA9IHcxLCB3MSA9IGUxLCBlMSA9IHQ7XG4gICAgICAgIGlmICh0eXBlIGluIGZsaXBYKSBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlID0gZmxpcFhbdHlwZV1dKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxIDwgbjEpIHtcbiAgICAgICAgc2lnblkgKj0gLTE7XG4gICAgICAgIHQgPSBuMCwgbjAgPSBzMCwgczAgPSB0O1xuICAgICAgICB0ID0gbjEsIG4xID0gczEsIHMxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFkpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWVt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uKSBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb247IC8vIE1heSBiZSBzZXQgYnkgYnJ1c2gubW92ZSFcbiAgICAgIGlmIChsb2NrWCkgdzEgPSBzZWxlY3Rpb25bMF1bMF0sIGUxID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgaWYgKGxvY2tZKSBuMSA9IHNlbGVjdGlvblswXVsxXSwgczEgPSBzZWxlY3Rpb25bMV1bMV07XG5cbiAgICAgIGlmIChzZWxlY3Rpb25bMF1bMF0gIT09IHcxXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzBdWzFdICE9PSBuMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVswXSAhPT0gZTFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMV1bMV0gIT09IHMxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IFtbdzEsIG4xXSwgW2UxLCBzMV1dO1xuICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgZW1pdC5icnVzaChldmVudCwgbW9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRlZChldmVudCkge1xuICAgICAgbm9wcm9wYWdhdGlvbihldmVudCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJhZ0VuYWJsZShldmVudC52aWV3LCBtb3ZpbmcpO1xuICAgICAgICB2aWV3Lm9uKFwia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGdyb3VwLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKTtcbiAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpO1xuICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbikgc2VsZWN0aW9uID0gc3RhdGUuc2VsZWN0aW9uOyAvLyBNYXkgYmUgc2V0IGJ5IGJydXNoLm1vdmUgKG9uIHN0YXJ0KSFcbiAgICAgIGlmIChlbXB0eShzZWxlY3Rpb24pKSBzdGF0ZS5zZWxlY3Rpb24gPSBudWxsLCByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgIGVtaXQuZW5kKGV2ZW50LCBtb2RlLm5hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBzaGlmdGluZyA9IHNpZ25YICYmIHNpZ25ZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFKSB7XG4gICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgIGlmIChzaWduWSkgczAgPSBzMSAtIGR5ICogc2lnblksIG4wID0gbjEgKyBkeSAqIHNpZ25ZO1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0U7IHRha2VzIHByaW9yaXR5IG92ZXIgQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfSEFORExFIHx8IG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxIC0gZHg7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MSAtIGR4O1xuICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMSAtIGR5OyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjEgLSBkeTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX1NQQUNFO1xuICAgICAgICAgICAgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl1cHBlZChldmVudCkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IHsgLy8gU0hJRlRcbiAgICAgICAgICBpZiAoc2hpZnRpbmcpIHtcbiAgICAgICAgICAgIGxvY2tYID0gbG9ja1kgPSBzaGlmdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgbW92ZShldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRVxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX1NQQUNFKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCkgZTAgPSBlMSAtIGR4ICogc2lnblgsIHcwID0gdzEgKyBkeCAqIHNpZ25YO1xuICAgICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgICAgbW9kZSA9IE1PREVfQ0VOVEVSO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHNpZ25YIDwgMCkgZTAgPSBlMTsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxO1xuICAgICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0hBTkRMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGVdKTtcbiAgICAgICAgICAgIG1vdmUoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b3VjaG1vdmVkKGV2ZW50KSB7XG4gICAgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLm1vdmVkKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZW5kZWQoZXZlbnQpIHtcbiAgICBlbWl0dGVyKHRoaXMsIGFyZ3VtZW50cykuZW5kZWQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9fYnJ1c2ggfHwge3NlbGVjdGlvbjogbnVsbH07XG4gICAgc3RhdGUuZXh0ZW50ID0gbnVtYmVyMihleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgc3RhdGUuZGltID0gZGltO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHRlbnQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KG51bWJlcjIoXykpLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLnRvdWNoYWJsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0b3VjaGFibGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCEhXyksIGJydXNoKSA6IHRvdWNoYWJsZTtcbiAgfTtcblxuICBicnVzaC5oYW5kbGVTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGhhbmRsZVNpemUgPSArXywgYnJ1c2gpIDogaGFuZGxlU2l6ZTtcbiAgfTtcblxuICBicnVzaC5rZXlNb2RpZmllcnMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoa2V5cyA9ICEhXywgYnJ1c2gpIDoga2V5cztcbiAgfTtcblxuICBicnVzaC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGxpc3RlbmVycy5vbi5hcHBseShsaXN0ZW5lcnMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBsaXN0ZW5lcnMgPyBicnVzaCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBicnVzaDtcbn1cbiIsImV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgYnJ1c2gsXG4gIGJydXNoWCxcbiAgYnJ1c2hZLFxuICBicnVzaFNlbGVjdGlvblxufSBmcm9tIFwiLi9icnVzaC5qc1wiO1xuIiwiZnVuY3Rpb24gcmVzcG9uc2VKc29uKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2Uub2spIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXMgKyBcIiBcIiArIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDUpIHJldHVybjtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIGZldGNoKGlucHV0LCBpbml0KS50aGVuKHJlc3BvbnNlSnNvbik7XG59XG4iLCJleHBvcnQge2RlZmF1bHQgYXMgYmxvYn0gZnJvbSBcIi4vYmxvYi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGJ1ZmZlcn0gZnJvbSBcIi4vYnVmZmVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgZHN2LCBjc3YsIHRzdn0gZnJvbSBcIi4vZHN2LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW1hZ2V9IGZyb20gXCIuL2ltYWdlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMganNvbn0gZnJvbSBcIi4vanNvbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRleHR9IGZyb20gXCIuL3RleHQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB4bWwsIGh0bWwsIHN2Z30gZnJvbSBcIi4veG1sLmpzXCI7XG4iLCJpbXBvcnQge05vZGV9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleC5qc1wiO1xuXG5mdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuLy8gZnVuY3Rpb24gcmFkaWFsU2VwYXJhdGlvbihhLCBiKSB7XG4vLyAgIHJldHVybiAoYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDIpIC8gYS5kZXB0aDtcbi8vIH1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBsZWZ0IGNvbnRvdXIgb2YgYSBzdWJ0cmVlIChvclxuLy8gc3ViZm9yZXN0KS4gSXQgcmV0dXJucyB0aGUgc3VjY2Vzc29yIG9mIHYgb24gdGhpcyBjb250b3VyLiBUaGlzIHN1Y2Nlc3NvciBpc1xuLy8gZWl0aGVyIGdpdmVuIGJ5IHRoZSBsZWZ0bW9zdCBjaGlsZCBvZiB2IG9yIGJ5IHRoZSB0aHJlYWQgb2Ygdi4gVGhlIGZ1bmN0aW9uXG4vLyByZXR1cm5zIG51bGwgaWYgYW5kIG9ubHkgaWYgdiBpcyBvbiB0aGUgaGlnaGVzdCBsZXZlbCBvZiBpdHMgc3VidHJlZS5cbmZ1bmN0aW9uIG5leHRMZWZ0KHYpIHtcbiAgdmFyIGNoaWxkcmVuID0gdi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW5bMF0gOiB2LnQ7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gd29ya3MgYW5hbG9nb3VzbHkgdG8gbmV4dExlZnQuXG5mdW5jdGlvbiBuZXh0UmlnaHQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSA6IHYudDtcbn1cblxuLy8gU2hpZnRzIHRoZSBjdXJyZW50IHN1YnRyZWUgcm9vdGVkIGF0IHcrLiBUaGlzIGlzIGRvbmUgYnkgaW5jcmVhc2luZ1xuLy8gcHJlbGltKHcrKSBhbmQgbW9kKHcrKSBieSBzaGlmdC5cbmZ1bmN0aW9uIG1vdmVTdWJ0cmVlKHdtLCB3cCwgc2hpZnQpIHtcbiAgdmFyIGNoYW5nZSA9IHNoaWZ0IC8gKHdwLmkgLSB3bS5pKTtcbiAgd3AuYyAtPSBjaGFuZ2U7XG4gIHdwLnMgKz0gc2hpZnQ7XG4gIHdtLmMgKz0gY2hhbmdlO1xuICB3cC56ICs9IHNoaWZ0O1xuICB3cC5tICs9IHNoaWZ0O1xufVxuXG4vLyBBbGwgb3RoZXIgc2hpZnRzLCBhcHBsaWVkIHRvIHRoZSBzbWFsbGVyIHN1YnRyZWVzIGJldHdlZW4gdy0gYW5kIHcrLCBhcmVcbi8vIHBlcmZvcm1lZCBieSB0aGlzIGZ1bmN0aW9uLiBUbyBwcmVwYXJlIHRoZSBzaGlmdHMsIHdlIGhhdmUgdG8gYWRqdXN0XG4vLyBjaGFuZ2UodyspLCBzaGlmdCh3KyksIGFuZCBjaGFuZ2Uody0pLlxuZnVuY3Rpb24gZXhlY3V0ZVNoaWZ0cyh2KSB7XG4gIHZhciBzaGlmdCA9IDAsXG4gICAgICBjaGFuZ2UgPSAwLFxuICAgICAgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgIHc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIHcgPSBjaGlsZHJlbltpXTtcbiAgICB3LnogKz0gc2hpZnQ7XG4gICAgdy5tICs9IHNoaWZ0O1xuICAgIHNoaWZ0ICs9IHcucyArIChjaGFuZ2UgKz0gdy5jKTtcbiAgfVxufVxuXG4vLyBJZiB2aS3igJlzIGFuY2VzdG9yIGlzIGEgc2libGluZyBvZiB2LCByZXR1cm5zIHZpLeKAmXMgYW5jZXN0b3IuIE90aGVyd2lzZSxcbi8vIHJldHVybnMgdGhlIHNwZWNpZmllZCAoZGVmYXVsdCkgYW5jZXN0b3IuXG5mdW5jdGlvbiBuZXh0QW5jZXN0b3IodmltLCB2LCBhbmNlc3Rvcikge1xuICByZXR1cm4gdmltLmEucGFyZW50ID09PSB2LnBhcmVudCA/IHZpbS5hIDogYW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIFRyZWVOb2RlKG5vZGUsIGkpIHtcbiAgdGhpcy5fID0gbm9kZTtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5BID0gbnVsbDsgLy8gZGVmYXVsdCBhbmNlc3RvclxuICB0aGlzLmEgPSB0aGlzOyAvLyBhbmNlc3RvclxuICB0aGlzLnogPSAwOyAvLyBwcmVsaW1cbiAgdGhpcy5tID0gMDsgLy8gbW9kXG4gIHRoaXMuYyA9IDA7IC8vIGNoYW5nZVxuICB0aGlzLnMgPSAwOyAvLyBzaGlmdFxuICB0aGlzLnQgPSBudWxsOyAvLyB0aHJlYWRcbiAgdGhpcy5pID0gaTsgLy8gbnVtYmVyXG59XG5cblRyZWVOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpO1xuXG5mdW5jdGlvbiB0cmVlUm9vdChyb290KSB7XG4gIHZhciB0cmVlID0gbmV3IFRyZWVOb2RlKHJvb3QsIDApLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3RyZWVdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLl8uY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgQXJyYXkobiA9IGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV0gPSBuZXcgVHJlZU5vZGUoY2hpbGRyZW5baV0sIGkpKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAodHJlZS5wYXJlbnQgPSBuZXcgVHJlZU5vZGUobnVsbCwgMCkpLmNoaWxkcmVuID0gW3RyZWVdO1xuICByZXR1cm4gdHJlZTtcbn1cblxuLy8gTm9kZS1saW5rIHRyZWUgZGlhZ3JhbSB1c2luZyB0aGUgUmVpbmdvbGQtVGlsZm9yZCBcInRpZHlcIiBhbGdvcml0aG1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyZWUocm9vdCkge1xuICAgIHZhciB0ID0gdHJlZVJvb3Qocm9vdCk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBsYXlvdXQgdXNpbmcgQnVjaGhlaW0gZXQgYWwu4oCZcyBhbGdvcml0aG0uXG4gICAgdC5lYWNoQWZ0ZXIoZmlyc3RXYWxrKSwgdC5wYXJlbnQubSA9IC10Lno7XG4gICAgdC5lYWNoQmVmb3JlKHNlY29uZFdhbGspO1xuXG4gICAgLy8gSWYgYSBmaXhlZCBub2RlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5LlxuICAgIGlmIChub2RlU2l6ZSkgcm9vdC5lYWNoQmVmb3JlKHNpemVOb2RlKTtcblxuICAgIC8vIElmIGEgZml4ZWQgdHJlZSBzaXplIGlzIHNwZWNpZmllZCwgc2NhbGUgeCBhbmQgeSBiYXNlZCBvbiB0aGUgZXh0ZW50LlxuICAgIC8vIENvbXB1dGUgdGhlIGxlZnQtbW9zdCwgcmlnaHQtbW9zdCwgYW5kIGRlcHRoLW1vc3Qgbm9kZXMgZm9yIGV4dGVudHMuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGVmdCA9IHJvb3QsXG4gICAgICAgICAgcmlnaHQgPSByb290LFxuICAgICAgICAgIGJvdHRvbSA9IHJvb3Q7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS54IDwgbGVmdC54KSBsZWZ0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUueCA+IHJpZ2h0LngpIHJpZ2h0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUuZGVwdGggPiBib3R0b20uZGVwdGgpIGJvdHRvbSA9IG5vZGU7XG4gICAgICB9KTtcbiAgICAgIHZhciBzID0gbGVmdCA9PT0gcmlnaHQgPyAxIDogc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICAgIHR4ID0gcyAtIGxlZnQueCxcbiAgICAgICAgICBreCA9IGR4IC8gKHJpZ2h0LnggKyBzICsgdHgpLFxuICAgICAgICAgIGt5ID0gZHkgLyAoYm90dG9tLmRlcHRoIHx8IDEpO1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O1xuICAgICAgICBub2RlLnkgPSBub2RlLmRlcHRoICoga3k7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGEgcHJlbGltaW5hcnkgeC1jb29yZGluYXRlIGZvciB2LiBCZWZvcmUgdGhhdCwgRklSU1QgV0FMSyBpc1xuICAvLyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIHRoZSBjaGlsZHJlbiBvZiB2LCBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvblxuICAvLyBBUFBPUlRJT04uIEFmdGVyIHNwYWNpbmcgb3V0IHRoZSBjaGlsZHJlbiBieSBjYWxsaW5nIEVYRUNVVEUgU0hJRlRTLCB0aGVcbiAgLy8gbm9kZSB2IGlzIHBsYWNlZCB0byB0aGUgbWlkcG9pbnQgb2YgaXRzIG91dGVybW9zdCBjaGlsZHJlbi5cbiAgZnVuY3Rpb24gZmlyc3RXYWxrKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgICBzaWJsaW5ncyA9IHYucGFyZW50LmNoaWxkcmVuLFxuICAgICAgICB3ID0gdi5pID8gc2libGluZ3Nbdi5pIC0gMV0gOiBudWxsO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZXhlY3V0ZVNoaWZ0cyh2KTtcbiAgICAgIHZhciBtaWRwb2ludCA9IChjaGlsZHJlblswXS56ICsgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0ueikgLyAyO1xuICAgICAgaWYgKHcpIHtcbiAgICAgICAgdi56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7XG4gICAgICAgIHYubSA9IHYueiAtIG1pZHBvaW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdi56ID0gbWlkcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3KSB7XG4gICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICB9XG4gICAgdi5wYXJlbnQuQSA9IGFwcG9ydGlvbih2LCB3LCB2LnBhcmVudC5BIHx8IHNpYmxpbmdzWzBdKTtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGFsbCByZWFsIHgtY29vcmRpbmF0ZXMgYnkgc3VtbWluZyB1cCB0aGUgbW9kaWZpZXJzIHJlY3Vyc2l2ZWx5LlxuICBmdW5jdGlvbiBzZWNvbmRXYWxrKHYpIHtcbiAgICB2Ll8ueCA9IHYueiArIHYucGFyZW50Lm07XG4gICAgdi5tICs9IHYucGFyZW50Lm07XG4gIH1cblxuICAvLyBUaGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLiBIZXJlLCBhIG5ldyBzdWJ0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlXG4gIC8vIHByZXZpb3VzIHN1YnRyZWVzLiBUaHJlYWRzIGFyZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBpbnNpZGUgYW5kIG91dHNpZGVcbiAgLy8gY29udG91cnMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWUgdXAgdG8gdGhlIGhpZ2hlc3QgY29tbW9uIGxldmVsLiBUaGVcbiAgLy8gdmVydGljZXMgdXNlZCBmb3IgdGhlIHRyYXZlcnNhbHMgYXJlIHZpKywgdmktLCB2by0sIGFuZCB2byssIHdoZXJlIHRoZVxuICAvLyBzdXBlcnNjcmlwdCBvIG1lYW5zIG91dHNpZGUgYW5kIGkgbWVhbnMgaW5zaWRlLCB0aGUgc3Vic2NyaXB0IC0gbWVhbnMgbGVmdFxuICAvLyBzdWJ0cmVlIGFuZCArIG1lYW5zIHJpZ2h0IHN1YnRyZWUuIEZvciBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgYWxvbmcgdGhlXG4gIC8vIGNvbnRvdXIsIHdlIHVzZSByZXNwZWN0aXZlIHZhcmlhYmxlcyBzaSssIHNpLSwgc28tLCBhbmQgc28rLiBXaGVuZXZlciB0d29cbiAgLy8gbm9kZXMgb2YgdGhlIGluc2lkZSBjb250b3VycyBjb25mbGljdCwgd2UgY29tcHV0ZSB0aGUgbGVmdCBvbmUgb2YgdGhlXG4gIC8vIGdyZWF0ZXN0IHVuY29tbW9uIGFuY2VzdG9ycyB1c2luZyB0aGUgZnVuY3Rpb24gQU5DRVNUT1IgYW5kIGNhbGwgTU9WRVxuICAvLyBTVUJUUkVFIHRvIHNoaWZ0IHRoZSBzdWJ0cmVlIGFuZCBwcmVwYXJlIHRoZSBzaGlmdHMgb2Ygc21hbGxlciBzdWJ0cmVlcy5cbiAgLy8gRmluYWxseSwgd2UgYWRkIGEgbmV3IHRocmVhZCAoaWYgbmVjZXNzYXJ5KS5cbiAgZnVuY3Rpb24gYXBwb3J0aW9uKHYsIHcsIGFuY2VzdG9yKSB7XG4gICAgaWYgKHcpIHtcbiAgICAgIHZhciB2aXAgPSB2LFxuICAgICAgICAgIHZvcCA9IHYsXG4gICAgICAgICAgdmltID0gdyxcbiAgICAgICAgICB2b20gPSB2aXAucGFyZW50LmNoaWxkcmVuWzBdLFxuICAgICAgICAgIHNpcCA9IHZpcC5tLFxuICAgICAgICAgIHNvcCA9IHZvcC5tLFxuICAgICAgICAgIHNpbSA9IHZpbS5tLFxuICAgICAgICAgIHNvbSA9IHZvbS5tLFxuICAgICAgICAgIHNoaWZ0O1xuICAgICAgd2hpbGUgKHZpbSA9IG5leHRSaWdodCh2aW0pLCB2aXAgPSBuZXh0TGVmdCh2aXApLCB2aW0gJiYgdmlwKSB7XG4gICAgICAgIHZvbSA9IG5leHRMZWZ0KHZvbSk7XG4gICAgICAgIHZvcCA9IG5leHRSaWdodCh2b3ApO1xuICAgICAgICB2b3AuYSA9IHY7XG4gICAgICAgIHNoaWZ0ID0gdmltLnogKyBzaW0gLSB2aXAueiAtIHNpcCArIHNlcGFyYXRpb24odmltLl8sIHZpcC5fKTtcbiAgICAgICAgaWYgKHNoaWZ0ID4gMCkge1xuICAgICAgICAgIG1vdmVTdWJ0cmVlKG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSwgdiwgc2hpZnQpO1xuICAgICAgICAgIHNpcCArPSBzaGlmdDtcbiAgICAgICAgICBzb3AgKz0gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2ltICs9IHZpbS5tO1xuICAgICAgICBzaXAgKz0gdmlwLm07XG4gICAgICAgIHNvbSArPSB2b20ubTtcbiAgICAgICAgc29wICs9IHZvcC5tO1xuICAgICAgfVxuICAgICAgaWYgKHZpbSAmJiAhbmV4dFJpZ2h0KHZvcCkpIHtcbiAgICAgICAgdm9wLnQgPSB2aW07XG4gICAgICAgIHZvcC5tICs9IHNpbSAtIHNvcDtcbiAgICAgIH1cbiAgICAgIGlmICh2aXAgJiYgIW5leHRMZWZ0KHZvbSkpIHtcbiAgICAgICAgdm9tLnQgPSB2aXA7XG4gICAgICAgIHZvbS5tICs9IHNpcCAtIHNvbTtcbiAgICAgICAgYW5jZXN0b3IgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBzaXplTm9kZShub2RlKSB7XG4gICAgbm9kZS54ICo9IGR4O1xuICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBkeTtcbiAgfVxuXG4gIHRyZWUuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgdHJlZSkgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIHRyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCB0cmVlKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgdHJlZS5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gdHJlZTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjbHVzdGVyfSBmcm9tIFwiLi9jbHVzdGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaGllcmFyY2h5LCBOb2RlfSBmcm9tIFwiLi9oaWVyYXJjaHkvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwYWNrfSBmcm9tIFwiLi9wYWNrL2luZGV4LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja1NpYmxpbmdzfSBmcm9tIFwiLi9wYWNrL3NpYmxpbmdzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcGFja0VuY2xvc2V9IGZyb20gXCIuL3BhY2svZW5jbG9zZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBhcnRpdGlvbn0gZnJvbSBcIi4vcGFydGl0aW9uLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RyYXRpZnl9IGZyb20gXCIuL3N0cmF0aWZ5LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgdHJlZX0gZnJvbSBcIi4vdHJlZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXB9IGZyb20gXCIuL3RyZWVtYXAvaW5kZXguanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwQmluYXJ5fSBmcm9tIFwiLi90cmVlbWFwL2JpbmFyeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBEaWNlfSBmcm9tIFwiLi90cmVlbWFwL2RpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2V9IGZyb20gXCIuL3RyZWVtYXAvc2xpY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB0cmVlbWFwU2xpY2VEaWNlfSBmcm9tIFwiLi90cmVlbWFwL3NsaWNlRGljZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBTcXVhcmlmeX0gZnJvbSBcIi4vdHJlZW1hcC9zcXVhcmlmeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHRyZWVtYXBSZXNxdWFyaWZ5fSBmcm9tIFwiLi90cmVlbWFwL3Jlc3F1YXJpZnkuanNcIjtcbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZS5qc1wiO1xuaW1wb3J0IG51bWJlckFycmF5LCB7aXNOdW1iZXJBcnJheX0gZnJvbSBcIi4vbnVtYmVyQXJyYXkuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gKGlzTnVtYmVyQXJyYXkoYikgPyBudW1iZXJBcnJheSA6IGdlbmVyaWNBcnJheSkoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmljQXJyYXkoYSwgYikge1xuICB2YXIgbmIgPSBiID8gYi5sZW5ndGggOiAwLFxuICAgICAgbmEgPSBhID8gTWF0aC5taW4obmIsIGEubGVuZ3RoKSA6IDAsXG4gICAgICB4ID0gbmV3IEFycmF5KG5hKSxcbiAgICAgIGMgPSBuZXcgQXJyYXkobmIpLFxuICAgICAgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgeFtpXSA9IHZhbHVlKGFbaV0sIGJbaV0pO1xuICBmb3IgKDsgaSA8IG5iOyArK2kpIGNbaV0gPSBiW2ldO1xuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG5hOyArK2kpIGNbaV0gPSB4W2ldKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgZCA9IG5ldyBEYXRlO1xuICByZXR1cm4gYSA9ICthLCBiID0gK2IsIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZC5zZXRUaW1lKGEgKiAoMSAtIHQpICsgYiAqIHQpLCBkO1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHVuaXQgPSBbMCwgMV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGlzTmFOKGIpID8gTmFOIDogMC41KTtcbn1cblxuZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XG4gIHZhciB0O1xuICBpZiAoYSA+IGIpIHQgPSBhLCBhID0gYiwgYiA9IHQ7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG59XG5cbi8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcbiAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICByID0gbmV3IEFycmF5KGopLFxuICAgICAgaSA9IC0xO1xuXG4gIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIH1cblxuICB3aGlsZSAoKytpIDwgaikge1xuICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpID0gYmlzZWN0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xuICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcbiAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcbiAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICB1bmtub3duLFxuICAgICAgY2xhbXAgPSBpZGVudGl0eSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpO1xuICAgIGlmIChjbGFtcCAhPT0gaWRlbnRpdHkpIGNsYW1wID0gY2xhbXBlcihkb21haW5bMF0sIGRvbWFpbltuIC0gMV0pO1xuICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xuICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gQXJyYXkuZnJvbShfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gdHJ1ZSA6IGlkZW50aXR5LCByZXNjYWxlKCkpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cygpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKCkoaWRlbnRpdHksIGlkZW50aXR5KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpbml0UmFuZ2UoZG9tYWluLCByYW5nZSkge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMTogdGhpcy5yYW5nZShkb21haW4pOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aGlzLnJhbmdlKHJhbmdlKS5kb21haW4oZG9tYWluKTsgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0SW50ZXJwb2xhdG9yKGRvbWFpbiwgaW50ZXJwb2xhdG9yKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB7XG4gICAgICBpZiAodHlwZW9mIGRvbWFpbiA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihkb21haW4pO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGRvbWFpbik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhpcy5kb21haW4oZG9tYWluKTtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJwb2xhdG9yID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGludGVycG9sYXRvcik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlLFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBzdG9wID0gK3N0b3AsIHN0YXJ0ID0gK3N0YXJ0LCBjb3VudCA9ICtjb3VudDtcbiAgaWYgKHN0YXJ0ID09PSBzdG9wICYmIGNvdW50ID4gMCkgcmV0dXJuIFtzdGFydF07XG4gIGlmIChyZXZlcnNlID0gc3RvcCA8IHN0YXJ0KSBuID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IG47XG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgbGV0IHIwID0gTWF0aC5yb3VuZChzdGFydCAvIHN0ZXApLCByMSA9IE1hdGgucm91bmQoc3RvcCAvIHN0ZXApO1xuICAgIGlmIChyMCAqIHN0ZXAgPCBzdGFydCkgKytyMDtcbiAgICBpZiAocjEgKiBzdGVwID4gc3RvcCkgLS1yMTtcbiAgICB0aWNrcyA9IG5ldyBBcnJheShuID0gcjEgLSByMCArIDEpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChyMCArIGkpICogc3RlcDtcbiAgfSBlbHNlIHtcbiAgICBzdGVwID0gLXN0ZXA7XG4gICAgbGV0IHIwID0gTWF0aC5yb3VuZChzdGFydCAqIHN0ZXApLCByMSA9IE1hdGgucm91bmQoc3RvcCAqIHN0ZXApO1xuICAgIGlmIChyMCAvIHN0ZXAgPCBzdGFydCkgKytyMDtcbiAgICBpZiAocjEgLyBzdGVwID4gc3RvcCkgLS1yMTtcbiAgICB0aWNrcyA9IG5ldyBBcnJheShuID0gcjEgLSByMCArIDEpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChyMCArIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsIi8vIFtbZmlsbF1hbGlnbl1bc2lnbl1bc3ltYm9sXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bfl1bdHlwZV1cbnZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoe1xuICAgIGZpbGw6IG1hdGNoWzFdLFxuICAgIGFsaWduOiBtYXRjaFsyXSxcbiAgICBzaWduOiBtYXRjaFszXSxcbiAgICBzeW1ib2w6IG1hdGNoWzRdLFxuICAgIHplcm86IG1hdGNoWzVdLFxuICAgIHdpZHRoOiBtYXRjaFs2XSxcbiAgICBjb21tYTogbWF0Y2hbN10sXG4gICAgcHJlY2lzaW9uOiBtYXRjaFs4XSAmJiBtYXRjaFs4XS5zbGljZSgxKSxcbiAgICB0cmltOiBtYXRjaFs5XSxcbiAgICB0eXBlOiBtYXRjaFsxMF1cbiAgfSk7XG59XG5cbmZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUgPSBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlOyAvLyBpbnN0YW5jZW9mXG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIHRoaXMuZmlsbCA9IHNwZWNpZmllci5maWxsID09PSB1bmRlZmluZWQgPyBcIiBcIiA6IHNwZWNpZmllci5maWxsICsgXCJcIjtcbiAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xuICB0aGlzLnNpZ24gPSBzcGVjaWZpZXIuc2lnbiA9PT0gdW5kZWZpbmVkID8gXCItXCIgOiBzcGVjaWZpZXIuc2lnbiArIFwiXCI7XG4gIHRoaXMuc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci5zeW1ib2wgKyBcIlwiO1xuICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xuICB0aGlzLndpZHRoID0gc3BlY2lmaWVyLndpZHRoID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLndpZHRoO1xuICB0aGlzLmNvbW1hID0gISFzcGVjaWZpZXIuY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XG4gIHRoaXMudHJpbSA9ICEhc3BlY2lmaWVyLnRyaW07XG4gIHRoaXMudHlwZSA9IHNwZWNpZmllci50eXBlID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnR5cGUgKyBcIlwiO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArICh0aGlzLnRyaW0gPyBcIn5cIiA6IFwiXCIpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyAtIGV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihncm91cGluZywgdGhvdXNhbmRzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgd2lkdGgpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgdCA9IFtdLFxuICAgICAgICBqID0gMCxcbiAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICBsZW5ndGggPSAwO1xuXG4gICAgd2hpbGUgKGkgPiAwICYmIGcgPiAwKSB7XG4gICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgIHQucHVzaCh2YWx1ZS5zdWJzdHJpbmcoaSAtPSBnLCBpICsgZykpO1xuICAgICAgaWYgKChsZW5ndGggKz0gZyArIDEpID4gd2lkdGgpIGJyZWFrO1xuICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdC5yZXZlcnNlKCkuam9pbih0aG91c2FuZHMpO1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obnVtZXJhbHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1swLTldL2csIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHJldHVybiBudW1lcmFsc1sraV07XG4gICAgfSk7XG4gIH07XG59XG4iLCIvLyBUcmltcyBpbnNpZ25pZmljYW50IHplcm9zLCBlLmcuLCByZXBsYWNlcyAxLjIwMDBrIHdpdGggMS4yay5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHMpIHtcbiAgb3V0OiBmb3IgKHZhciBuID0gcy5sZW5ndGgsIGkgPSAxLCBpMCA9IC0xLCBpMTsgaSA8IG47ICsraSkge1xuICAgIHN3aXRjaCAoc1tpXSkge1xuICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgY2FzZSBcIjBcIjogaWYgKGkwID09PSAwKSBpMCA9IGk7IGkxID0gaTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG59XG4iLCJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgIGkgPSBleHBvbmVudCAtIChwcmVmaXhFeHBvbmVudCA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50IC8gMykpKSAqIDMpICsgMSxcbiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XG4gIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgIDogaSA+IG4gPyBjb2VmZmljaWVudCArIG5ldyBBcnJheShpIC0gbiArIDEpLmpvaW4oXCIwXCIpXG4gICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXG4gICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsUGFydHMoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5pbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6ICh4LCBwKSA9PiAoeCAqIDEwMCkudG9GaXhlZChwKSxcbiAgXCJiXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpLFxuICBcImNcIjogKHgpID0+IHggKyBcIlwiLFxuICBcImRcIjogZm9ybWF0RGVjaW1hbCxcbiAgXCJlXCI6ICh4LCBwKSA9PiB4LnRvRXhwb25lbnRpYWwocCksXG4gIFwiZlwiOiAoeCwgcCkgPT4geC50b0ZpeGVkKHApLFxuICBcImdcIjogKHgsIHApID0+IHgudG9QcmVjaXNpb24ocCksXG4gIFwib1wiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KSxcbiAgXCJwXCI6ICh4LCBwKSA9PiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApLFxuICBcInJcIjogZm9ybWF0Um91bmRlZCxcbiAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gIFwiWFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxcbiAgXCJ4XCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIuKIklwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcbiAgICAgIG5hbiA9IGxvY2FsZS5uYW4gPT09IHVuZGVmaW5lZCA/IFwiTmFOXCIgOiBsb2NhbGUubmFuICsgXCJcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lQcmVmaXggOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVN1ZmZpeCA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxuICAgICAgICB2YXIgdmFsdWVOZWdhdGl2ZSA9IHZhbHVlIDwgMCB8fCAxIC8gdmFsdWUgPCAwO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcblxuICAgICAgICAvLyBUcmltIGluc2lnbmlmaWNhbnQgemVyb3MuXG4gICAgICAgIGlmICh0cmltKSB2YWx1ZSA9IGZvcm1hdFRyaW0odmFsdWUpO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDAgJiYgc2lnbiAhPT0gXCIrXCIpIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9ICh0eXBlID09PSBcInNcIiA/IHByZWZpeGVzWzggKyBwcmVmaXhFeHBvbmVudCAvIDNdIDogXCJcIikgKyB2YWx1ZVN1ZmZpeCArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2Zvcm1hdCwgZm9ybWF0UHJlZml4LCBmb3JtYXRTcGVjaWZpZXIsIHByZWNpc2lvbkZpeGVkLCBwcmVjaXNpb25QcmVmaXgsIHByZWNpc2lvblJvdW5kfSBmcm9tIFwiZDMtZm9ybWF0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2tGb3JtYXQoc3RhcnQsIHN0b3AsIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLFxuICAgICAgcHJlY2lzaW9uO1xuICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyID09IG51bGwgPyBcIixmXCIgOiBzcGVjaWZpZXIpO1xuICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgY2FzZSBcInNcIjoge1xuICAgICAgdmFyIHZhbHVlID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSk7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgIHJldHVybiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNhc2UgXCJcIjpcbiAgICBjYXNlIFwiZVwiOlxuICAgIGNhc2UgXCJnXCI6XG4gICAgY2FzZSBcInBcIjpcbiAgICBjYXNlIFwiclwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25Sb3VuZChzdGVwLCBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcImVcIik7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcImZcIjpcbiAgICBjYXNlIFwiJVwiOiB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBwcmVjaXNpb25GaXhlZChzdGVwKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiJVwiKSAqIDI7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvcm1hdChzcGVjaWZpZXIpO1xufVxuIiwiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZSwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2lkZW50aXR5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRJbnRlcnBvbGF0b3J9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCB7bGluZWFyaXNofSBmcm9tIFwiLi9saW5lYXIuanNcIjtcbmltcG9ydCB7bG9nZ2lzaH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5pbXBvcnQge3N5bWxvZ2lzaH0gZnJvbSBcIi4vc3ltbG9nLmpzXCI7XG5pbXBvcnQge3Bvd2lzaH0gZnJvbSBcIi4vcG93LmpzXCI7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgeDAgPSAwLFxuICAgICAgeDEgPSAxLFxuICAgICAgdDAsXG4gICAgICB0MSxcbiAgICAgIGsxMCxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIGludGVycG9sYXRvciA9IGlkZW50aXR5LFxuICAgICAgY2xhbXAgPSBmYWxzZSxcbiAgICAgIHVua25vd247XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiBpbnRlcnBvbGF0b3IoazEwID09PSAwID8gMC41IDogKHggPSAodHJhbnNmb3JtKHgpIC0gdDApICogazEwLCBjbGFtcCA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHgpKSA6IHgpKTtcbiAgfVxuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChbeDAsIHgxXSA9IF8sIHQwID0gdHJhbnNmb3JtKHgwID0gK3gwKSwgdDEgPSB0cmFuc2Zvcm0oeDEgPSAreDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKSwgc2NhbGUpIDogW3gwLCB4MV07XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSAhIV8sIHNjYWxlKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0b3IgPSBfLCBzY2FsZSkgOiBpbnRlcnBvbGF0b3I7XG4gIH07XG5cbiAgZnVuY3Rpb24gcmFuZ2UoaW50ZXJwb2xhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oXykge1xuICAgICAgdmFyIHIwLCByMTtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKFtyMCwgcjFdID0gXywgaW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdGUocjAsIHIxKSwgc2NhbGUpIDogW2ludGVycG9sYXRvcigwKSwgaW50ZXJwb2xhdG9yKDEpXTtcbiAgICB9O1xuICB9XG5cbiAgc2NhbGUucmFuZ2UgPSByYW5nZShpbnRlcnBvbGF0ZSk7XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IHJhbmdlKGludGVycG9sYXRlUm91bmQpO1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB0MCA9IHQoeDApLCB0MSA9IHQoeDEpLCBrMTAgPSB0MCA9PT0gdDEgPyAwIDogMSAvICh0MSAtIHQwKTtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXRcbiAgICAgIC5kb21haW4oc291cmNlLmRvbWFpbigpKVxuICAgICAgLmludGVycG9sYXRvcihzb3VyY2UuaW50ZXJwb2xhdG9yKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VxdWVudGlhbCgpIHtcbiAgdmFyIHNjYWxlID0gbGluZWFyaXNoKHRyYW5zZm9ybWVyKCkoaWRlbnRpdHkpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWwoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsTG9nKCkge1xuICB2YXIgc2NhbGUgPSBsb2dnaXNoKHRyYW5zZm9ybWVyKCkpLmRvbWFpbihbMSwgMTBdKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxMb2coKSkuYmFzZShzY2FsZS5iYXNlKCkpO1xuICB9O1xuXG4gIHJldHVybiBpbml0SW50ZXJwb2xhdG9yLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVudGlhbFN5bWxvZygpIHtcbiAgdmFyIHNjYWxlID0gc3ltbG9naXNoKHRyYW5zZm9ybWVyKCkpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgc2VxdWVudGlhbFN5bWxvZygpKS5jb25zdGFudChzY2FsZS5jb25zdGFudCgpKTtcbiAgfTtcblxuICByZXR1cm4gaW5pdEludGVycG9sYXRvci5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbnRpYWxQb3coKSB7XG4gIHZhciBzY2FsZSA9IHBvd2lzaCh0cmFuc2Zvcm1lcigpKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIHNlcXVlbnRpYWxQb3coKSkuZXhwb25lbnQoc2NhbGUuZXhwb25lbnQoKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluaXRJbnRlcnBvbGF0b3IuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW50aWFsU3FydCgpIHtcbiAgcmV0dXJuIHNlcXVlbnRpYWxQb3cuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5leHBvbmVudCgwLjUpO1xufVxuIiwiZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUJhbmQsXG4gIHBvaW50IGFzIHNjYWxlUG9pbnRcbn0gZnJvbSBcIi4vYmFuZC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlSWRlbnRpdHlcbn0gZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUxpbmVhclxufSBmcm9tIFwiLi9saW5lYXIuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZUxvZ1xufSBmcm9tIFwiLi9sb2cuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVN5bWxvZ1xufSBmcm9tIFwiLi9zeW1sb2cuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZU9yZGluYWwsXG4gIGltcGxpY2l0IGFzIHNjYWxlSW1wbGljaXRcbn0gZnJvbSBcIi4vb3JkaW5hbC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlUG93LFxuICBzcXJ0IGFzIHNjYWxlU3FydFxufSBmcm9tIFwiLi9wb3cuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVJhZGlhbFxufSBmcm9tIFwiLi9yYWRpYWwuanNcIjtcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBzY2FsZVF1YW50aWxlXG59IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVRdWFudGl6ZVxufSBmcm9tIFwiLi9xdWFudGl6ZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVGhyZXNob2xkXG59IGZyb20gXCIuL3RocmVzaG9sZC5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlVGltZVxufSBmcm9tIFwiLi90aW1lLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVVdGNcbn0gZnJvbSBcIi4vdXRjVGltZS5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHNjYWxlU2VxdWVudGlhbCxcbiAgc2VxdWVudGlhbExvZyBhcyBzY2FsZVNlcXVlbnRpYWxMb2csXG4gIHNlcXVlbnRpYWxQb3cgYXMgc2NhbGVTZXF1ZW50aWFsUG93LFxuICBzZXF1ZW50aWFsU3FydCBhcyBzY2FsZVNlcXVlbnRpYWxTcXJ0LFxuICBzZXF1ZW50aWFsU3ltbG9nIGFzIHNjYWxlU2VxdWVudGlhbFN5bWxvZ1xufSBmcm9tIFwiLi9zZXF1ZW50aWFsLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVTZXF1ZW50aWFsUXVhbnRpbGVcbn0gZnJvbSBcIi4vc2VxdWVudGlhbFF1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCB7XG4gIGRlZmF1bHQgYXMgc2NhbGVEaXZlcmdpbmcsXG4gIGRpdmVyZ2luZ0xvZyBhcyBzY2FsZURpdmVyZ2luZ0xvZyxcbiAgZGl2ZXJnaW5nUG93IGFzIHNjYWxlRGl2ZXJnaW5nUG93LFxuICBkaXZlcmdpbmdTcXJ0IGFzIHNjYWxlRGl2ZXJnaW5nU3FydCxcbiAgZGl2ZXJnaW5nU3ltbG9nIGFzIHNjYWxlRGl2ZXJnaW5nU3ltbG9nXG59IGZyb20gXCIuL2RpdmVyZ2luZy5qc1wiO1xuXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIHRpY2tGb3JtYXRcbn0gZnJvbSBcIi4vdGlja0Zvcm1hdC5qc1wiO1xuIiwiZXhwb3J0IGNvbnN0IHJhZGlhbnMgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IGNvbnN0IGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2IsIGRhcmtlciwgYnJpZ2h0ZXJ9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxudmFyIEEgPSAtMC4xNDg2MSxcbiAgICBCID0gKzEuNzgyNzcsXG4gICAgQyA9IC0wLjI5MjI3LFxuICAgIEQgPSAtMC45MDY0OSxcbiAgICBFID0gKzEuOTcyOTQsXG4gICAgRUQgPSBFICogRCxcbiAgICBFQiA9IEUgKiBCLFxuICAgIEJDX0RBID0gQiAqIEMgLSBEICogQTtcblxuZnVuY3Rpb24gY3ViZWhlbGl4Q29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgQ3ViZWhlbGl4KSByZXR1cm4gbmV3IEN1YmVoZWxpeChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBsID0gKEJDX0RBICogYiArIEVEICogciAtIEVCICogZykgLyAoQkNfREEgKyBFRCAtIEVCKSxcbiAgICAgIGJsID0gYiAtIGwsXG4gICAgICBrID0gKEUgKiAoZyAtIGwpIC0gQyAqIGJsKSAvIEQsXG4gICAgICBzID0gTWF0aC5zcXJ0KGsgKiBrICsgYmwgKiBibCkgLyAoRSAqIGwgKiAoMSAtIGwpKSwgLy8gTmFOIGlmIGw9MCBvciBsPTFcbiAgICAgIGggPSBzID8gTWF0aC5hdGFuMihrLCBibCkgKiBkZWdyZWVzIC0gMTIwIDogTmFOO1xuICByZXR1cm4gbmV3IEN1YmVoZWxpeChoIDwgMCA/IGggKyAzNjAgOiBoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGN1YmVoZWxpeENvbnZlcnQoaCkgOiBuZXcgQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoQ3ViZWhlbGl4LCBjdWJlaGVsaXgsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSBpc05hTih0aGlzLmgpID8gMCA6ICh0aGlzLmggKyAxMjApICogcmFkaWFucyxcbiAgICAgICAgbCA9ICt0aGlzLmwsXG4gICAgICAgIGEgPSBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyAqIGwgKiAoMSAtIGwpLFxuICAgICAgICBjb3NoID0gTWF0aC5jb3MoaCksXG4gICAgICAgIHNpbmggPSBNYXRoLnNpbihoKTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIDI1NSAqIChsICsgYSAqIChBICogY29zaCArIEIgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoQyAqIGNvc2ggKyBEICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEUgKiBjb3NoKSksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG4iLCJpbXBvcnQge2N1YmVoZWxpeCBhcyBjb2xvckN1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IsIHtodWV9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeChodWUpIHtcbiAgcmV0dXJuIChmdW5jdGlvbiBjdWJlaGVsaXhHYW1tYSh5KSB7XG4gICAgeSA9ICt5O1xuXG4gICAgZnVuY3Rpb24gY3ViZWhlbGl4KHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBoID0gaHVlKChzdGFydCA9IGNvbG9yQ3ViZWhlbGl4KHN0YXJ0KSkuaCwgKGVuZCA9IGNvbG9yQ3ViZWhlbGl4KGVuZCkpLmgpLFxuICAgICAgICAgIHMgPSBjb2xvcihzdGFydC5zLCBlbmQucyksXG4gICAgICAgICAgbCA9IGNvbG9yKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gY29sb3Ioc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICAgIHN0YXJ0LnMgPSBzKHQpO1xuICAgICAgICBzdGFydC5sID0gbChNYXRoLnBvdyh0LCB5KSk7XG4gICAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjdWJlaGVsaXguZ2FtbWEgPSBjdWJlaGVsaXhHYW1tYTtcblxuICAgIHJldHVybiBjdWJlaGVsaXg7XG4gIH0pKDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdWJlaGVsaXgoaHVlKTtcbmV4cG9ydCB2YXIgY3ViZWhlbGl4TG9uZyA9IGN1YmVoZWxpeChjb2xvcik7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCB2YXIgd2FybSA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoLTEwMCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbmV4cG9ydCB2YXIgY29vbCA9IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMjYwLCAwLjc1LCAwLjM1KSwgY3ViZWhlbGl4KDgwLCAxLjUwLCAwLjgpKTtcblxudmFyIGMgPSBjdWJlaGVsaXgoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odCkge1xuICBpZiAodCA8IDAgfHwgdCA+IDEpIHQgLT0gTWF0aC5mbG9vcih0KTtcbiAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gIGMuaCA9IDM2MCAqIHQgLSAxMDA7XG4gIGMucyA9IDEuNSAtIDEuNSAqIHRzO1xuICBjLmwgPSAwLjggLSAwLjkgKiB0cztcbiAgcmV0dXJuIGMgKyBcIlwiO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZUNhdGVnb3J5MTB9IGZyb20gXCIuL2NhdGVnb3JpY2FsL2NhdGVnb3J5MTAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVBY2NlbnR9IGZyb20gXCIuL2NhdGVnb3JpY2FsL0FjY2VudC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZURhcmsyfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9EYXJrMi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVBhaXJlZH0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFpcmVkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lUGFzdGVsMX0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvUGFzdGVsMS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVBhc3RlbDJ9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1Bhc3RlbDIuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVTZXQxfSBmcm9tIFwiLi9jYXRlZ29yaWNhbC9TZXQxLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2NoZW1lU2V0Mn0gZnJvbSBcIi4vY2F0ZWdvcmljYWwvU2V0Mi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNjaGVtZVNldDN9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1NldDMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzY2hlbWVUYWJsZWF1MTB9IGZyb20gXCIuL2NhdGVnb3JpY2FsL1RhYmxlYXUxMC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnJCRywgc2NoZW1lIGFzIHNjaGVtZUJyQkd9IGZyb20gXCIuL2RpdmVyZ2luZy9CckJHLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVQUkduLCBzY2hlbWUgYXMgc2NoZW1lUFJHbn0gZnJvbSBcIi4vZGl2ZXJnaW5nL1BSR24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVBpWUcsIHNjaGVtZSBhcyBzY2hlbWVQaVlHfSBmcm9tIFwiLi9kaXZlcmdpbmcvUGlZRy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVPciwgc2NoZW1lIGFzIHNjaGVtZVB1T3J9IGZyb20gXCIuL2RpdmVyZ2luZy9QdU9yLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZEJ1LCBzY2hlbWUgYXMgc2NoZW1lUmRCdX0gZnJvbSBcIi4vZGl2ZXJnaW5nL1JkQnUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJkR3ksIHNjaGVtZSBhcyBzY2hlbWVSZEd5fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRHeS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRZbEJ1LCBzY2hlbWUgYXMgc2NoZW1lUmRZbEJ1fSBmcm9tIFwiLi9kaXZlcmdpbmcvUmRZbEJ1LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVSZFlsR24sIHNjaGVtZSBhcyBzY2hlbWVSZFlsR259IGZyb20gXCIuL2RpdmVyZ2luZy9SZFlsR24uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVNwZWN0cmFsLCBzY2hlbWUgYXMgc2NoZW1lU3BlY3RyYWx9IGZyb20gXCIuL2RpdmVyZ2luZy9TcGVjdHJhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnVHbiwgc2NoZW1lIGFzIHNjaGVtZUJ1R259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvQnVHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQnVQdSwgc2NoZW1lIGFzIHNjaGVtZUJ1UHV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvQnVQdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlR25CdSwgc2NoZW1lIGFzIHNjaGVtZUduQnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvR25CdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlT3JSZCwgc2NoZW1lIGFzIHNjaGVtZU9yUmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvT3JSZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVCdUduLCBzY2hlbWUgYXMgc2NoZW1lUHVCdUdufSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1B1QnVHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVCdSwgc2NoZW1lIGFzIHNjaGVtZVB1QnV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVCdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVSZCwgc2NoZW1lIGFzIHNjaGVtZVB1UmR9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUHVSZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmRQdSwgc2NoZW1lIGFzIHNjaGVtZVJkUHV9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvUmRQdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxHbkJ1LCBzY2hlbWUgYXMgc2NoZW1lWWxHbkJ1fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsR25CdS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxHbiwgc2NoZW1lIGFzIHNjaGVtZVlsR259IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvWWxHbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxPckJyLCBzY2hlbWUgYXMgc2NoZW1lWWxPckJyfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsT3JCci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlWWxPclJkLCBzY2hlbWUgYXMgc2NoZW1lWWxPclJkfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL1lsT3JSZC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQmx1ZXMsIHNjaGVtZSBhcyBzY2hlbWVCbHVlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvQmx1ZXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZUdyZWVucywgc2NoZW1lIGFzIHNjaGVtZUdyZWVuc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvR3JlZW5zLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVHcmV5cywgc2NoZW1lIGFzIHNjaGVtZUdyZXlzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9HcmV5cy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUHVycGxlcywgc2NoZW1lIGFzIHNjaGVtZVB1cnBsZXN9IGZyb20gXCIuL3NlcXVlbnRpYWwtc2luZ2xlL1B1cnBsZXMuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVJlZHMsIHNjaGVtZSBhcyBzY2hlbWVSZWRzfSBmcm9tIFwiLi9zZXF1ZW50aWFsLXNpbmdsZS9SZWRzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVPcmFuZ2VzLCBzY2hlbWUgYXMgc2NoZW1lT3Jhbmdlc30gZnJvbSBcIi4vc2VxdWVudGlhbC1zaW5nbGUvT3Jhbmdlcy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlQ2l2aWRpc30gZnJvbSBcIi4vc2VxdWVudGlhbC1tdWx0aS9jaXZpZGlzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0fSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL2N1YmVoZWxpeC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlUmFpbmJvdywgd2FybSBhcyBpbnRlcnBvbGF0ZVdhcm0sIGNvb2wgYXMgaW50ZXJwb2xhdGVDb29sfSBmcm9tIFwiLi9zZXF1ZW50aWFsLW11bHRpL3JhaW5ib3cuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVNpbmVib3d9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvc2luZWJvdy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGludGVycG9sYXRlVHVyYm99IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvdHVyYm8uanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBpbnRlcnBvbGF0ZVZpcmlkaXMsIG1hZ21hIGFzIGludGVycG9sYXRlTWFnbWEsIGluZmVybm8gYXMgaW50ZXJwb2xhdGVJbmZlcm5vLCBwbGFzbWEgYXMgaW50ZXJwb2xhdGVQbGFzbWF9IGZyb20gXCIuL3NlcXVlbnRpYWwtbXVsdGkvdmlyaWRpcy5qc1wiO1xuIiwiaW1wb3J0IHtTZWxlY3Rpb24sIHJvb3R9IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4vY3JlYXRvci5qc1wiO1xuaW1wb3J0IHNlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0KGNyZWF0b3IobmFtZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKTtcbn1cbiIsImV4cG9ydCB7ZGVmYXVsdCBhcyBjcmVhdGV9IGZyb20gXCIuL2NyZWF0ZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGNyZWF0b3J9IGZyb20gXCIuL2NyZWF0b3IuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBsb2NhbH0gZnJvbSBcIi4vbG9jYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBtYXRjaGVyfSBmcm9tIFwiLi9tYXRjaGVyLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgbmFtZXNwYWNlfSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBuYW1lc3BhY2VzfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgcG9pbnRlcn0gZnJvbSBcIi4vcG9pbnRlci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHBvaW50ZXJzfSBmcm9tIFwiLi9wb2ludGVycy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdH0gZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc2VsZWN0QWxsfSBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzZWxlY3Rpb259IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yfSBmcm9tIFwiLi9zZWxlY3Rvci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHNlbGVjdG9yQWxsfSBmcm9tIFwiLi9zZWxlY3RvckFsbC5qc1wiO1xuZXhwb3J0IHtzdHlsZVZhbHVlIGFzIHN0eWxlfSBmcm9tIFwiLi9zZWxlY3Rpb24vc3R5bGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyB3aW5kb3d9IGZyb20gXCIuL3dpbmRvdy5qc1wiO1xuIiwiY29uc3QgcGkgPSBNYXRoLlBJLFxuICAgIHRhdSA9IDIgKiBwaSxcbiAgICBlcHNpbG9uID0gMWUtNixcbiAgICB0YXVFcHNpbG9uID0gdGF1IC0gZXBzaWxvbjtcblxuZnVuY3Rpb24gUGF0aCgpIHtcbiAgdGhpcy5feDAgPSB0aGlzLl95MCA9IC8vIHN0YXJ0IG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICB0aGlzLl8gPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gbmV3IFBhdGg7XG59XG5cblBhdGgucHJvdG90eXBlID0gcGF0aC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQYXRoLFxuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fICs9IFwiWlwiO1xuICAgIH1cbiAgfSxcbiAgbGluZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIHF1YWRyYXRpY0N1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIlFcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGJlemllckN1cnZlVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiQ1wiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAoK3gyKSArIFwiLFwiICsgKCt5MikgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBhcmNUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHIpIHtcbiAgICB4MSA9ICt4MSwgeTEgPSAreTEsIHgyID0gK3gyLCB5MiA9ICt5MiwgciA9ICtyO1xuICAgIHZhciB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MSx5MSkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPciwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgwLHkwKT8gRG8gbm90aGluZy5cbiAgICBlbHNlIGlmICghKGwwMV8yID4gZXBzaWxvbikpO1xuXG4gICAgLy8gT3IsIGFyZSAoeDAseTApLCAoeDEseTEpIGFuZCAoeDIseTIpIGNvbGxpbmVhcj9cbiAgICAvLyBFcXVpdmFsZW50bHksIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4Mix5Mik/XG4gICAgLy8gT3IsIGlzIHRoZSByYWRpdXMgemVybz8gTGluZSB0byAoeDEseTEpLlxuICAgIGVsc2UgaWYgKCEoTWF0aC5hYnMoeTAxICogeDIxIC0geTIxICogeDAxKSA+IGVwc2lsb24pIHx8ICFyKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl8gKz0gXCJMXCIgKyAoeDEgKyB0MDEgKiB4MDEpICsgXCIsXCIgKyAoeTEgKyB0MDEgKiB5MDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwwLFwiICsgKCsoeTAxICogeDIwID4geDAxICogeTIwKSkgKyBcIixcIiArICh0aGlzLl94MSA9IHgxICsgdDIxICogeDIxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEgKyB0MjEgKiB5MjEpO1xuICAgIH1cbiAgfSxcbiAgYXJjOiBmdW5jdGlvbih4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3IsIGNjdyA9ICEhY2N3O1xuICAgIHZhciBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDAseTApLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiTFwiICsgeDAgKyBcIixcIiArIHkwO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIGVtcHR5PyBXZeKAmXJlIGRvbmUuXG4gICAgaWYgKCFyKSByZXR1cm47XG5cbiAgICAvLyBEb2VzIHRoZSBhbmdsZSBnbyB0aGUgd3Jvbmcgd2F5PyBGbGlwIHRoZSBkaXJlY3Rpb24uXG4gICAgaWYgKGRhIDwgMCkgZGEgPSBkYSAlIHRhdSArIHRhdTtcblxuICAgIC8vIElzIHRoaXMgYSBjb21wbGV0ZSBjaXJjbGU/IERyYXcgdHdvIGFyY3MgdG8gY29tcGxldGUgdGhlIGNpcmNsZS5cbiAgICBpZiAoZGEgPiB0YXVFcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh4IC0gZHgpICsgXCIsXCIgKyAoeSAtIGR5KSArIFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsMSxcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4MCkgKyBcIixcIiArICh0aGlzLl95MSA9IHkwKTtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fICs9IFwiQVwiICsgciArIFwiLFwiICsgciArIFwiLDAsXCIgKyAoKyhkYSA+PSBwaSkpICsgXCIsXCIgKyBjdyArIFwiLFwiICsgKHRoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSkpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKSk7XG4gICAgfVxuICB9LFxuICByZWN0OiBmdW5jdGlvbih4LCB5LCB3LCBoKSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpICsgXCJoXCIgKyAoK3cpICsgXCJ2XCIgKyAoK2gpICsgXCJoXCIgKyAoLXcpICsgXCJaXCI7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXRoO1xuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHgocCkge1xuICByZXR1cm4gcFswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkocCkge1xuICByZXR1cm4gcFsxXTtcbn1cbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCB7c2xpY2V9IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuLi9wb2ludC5qc1wiO1xuaW1wb3J0IHBvaW50UmFkaWFsIGZyb20gXCIuLi9wb2ludFJhZGlhbC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5rU291cmNlKGQpIHtcbiAgcmV0dXJuIGQuc291cmNlO1xufVxuXG5mdW5jdGlvbiBsaW5rVGFyZ2V0KGQpIHtcbiAgcmV0dXJuIGQudGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBsaW5rKGN1cnZlKSB7XG4gIHZhciBzb3VyY2UgPSBsaW5rU291cmNlLFxuICAgICAgdGFyZ2V0ID0gbGlua1RhcmdldCxcbiAgICAgIHggPSBwb2ludFgsXG4gICAgICB5ID0gcG9pbnRZLFxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluaygpIHtcbiAgICB2YXIgYnVmZmVyLCBhcmd2ID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBzID0gc291cmNlLmFwcGx5KHRoaXMsIGFyZ3YpLCB0ID0gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3YpO1xuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcbiAgICBjdXJ2ZShjb250ZXh0LCAreC5hcHBseSh0aGlzLCAoYXJndlswXSA9IHMsIGFyZ3YpKSwgK3kuYXBwbHkodGhpcywgYXJndiksICt4LmFwcGx5KHRoaXMsIChhcmd2WzBdID0gdCwgYXJndikpLCAreS5hcHBseSh0aGlzLCBhcmd2KSk7XG4gICAgaWYgKGJ1ZmZlcikgcmV0dXJuIGNvbnRleHQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5rLnNvdXJjZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3VyY2UgPSBfLCBsaW5rKSA6IHNvdXJjZTtcbiAgfTtcblxuICBsaW5rLnRhcmdldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0YXJnZXQgPSBfLCBsaW5rKSA6IHRhcmdldDtcbiAgfTtcblxuICBsaW5rLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5rKSA6IHg7XG4gIH07XG5cbiAgbGluay55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluaykgOiB5O1xuICB9O1xuXG4gIGxpbmsuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICgoY29udGV4dCA9IF8gPT0gbnVsbCA/IG51bGwgOiBfKSwgbGluaykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUhvcml6b250YWwoY29udGV4dCwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgY29udGV4dC5tb3ZlVG8oeDAsIHkwKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwID0gKHgwICsgeDEpIC8gMiwgeTAsIHgwLCB5MSwgeDEsIHkxKTtcbn1cblxuZnVuY3Rpb24gY3VydmVWZXJ0aWNhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICBjb250ZXh0Lm1vdmVUbyh4MCwgeTApO1xuICBjb250ZXh0LmJlemllckN1cnZlVG8oeDAsIHkwID0gKHkwICsgeTEpIC8gMiwgeDEsIHkwLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZVJhZGlhbChjb250ZXh0LCB4MCwgeTAsIHgxLCB5MSkge1xuICB2YXIgcDAgPSBwb2ludFJhZGlhbCh4MCwgeTApLFxuICAgICAgcDEgPSBwb2ludFJhZGlhbCh4MCwgeTAgPSAoeTAgKyB5MSkgLyAyKSxcbiAgICAgIHAyID0gcG9pbnRSYWRpYWwoeDEsIHkwKSxcbiAgICAgIHAzID0gcG9pbnRSYWRpYWwoeDEsIHkxKTtcbiAgY29udGV4dC5tb3ZlVG8ocDBbMF0sIHAwWzFdKTtcbiAgY29udGV4dC5iZXppZXJDdXJ2ZVRvKHAxWzBdLCBwMVsxXSwgcDJbMF0sIHAyWzFdLCBwM1swXSwgcDNbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0hvcml6b250YWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlSG9yaXpvbnRhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rVmVydGljYWwoKSB7XG4gIHJldHVybiBsaW5rKGN1cnZlVmVydGljYWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua1JhZGlhbCgpIHtcbiAgdmFyIGwgPSBsaW5rKGN1cnZlUmFkaWFsKTtcbiAgbC5hbmdsZSA9IGwueCwgZGVsZXRlIGwueDtcbiAgbC5yYWRpdXMgPSBsLnksIGRlbGV0ZSBsLnk7XG4gIHJldHVybiBsO1xufVxuIiwiZXhwb3J0IHtkZWZhdWx0IGFzIGFyY30gZnJvbSBcIi4vYXJjLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgYXJlYX0gZnJvbSBcIi4vYXJlYS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGxpbmV9IGZyb20gXCIuL2xpbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwaWV9IGZyb20gXCIuL3BpZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGFyZWFSYWRpYWwsIGRlZmF1bHQgYXMgcmFkaWFsQXJlYX0gZnJvbSBcIi4vYXJlYVJhZGlhbC5qc1wiOyAvLyBOb3RlOiByYWRpYWxBcmVhIGlzIGRlcHJlY2F0ZWQhXG5leHBvcnQge2RlZmF1bHQgYXMgbGluZVJhZGlhbCwgZGVmYXVsdCBhcyByYWRpYWxMaW5lfSBmcm9tIFwiLi9saW5lUmFkaWFsLmpzXCI7IC8vIE5vdGU6IHJhZGlhbExpbmUgaXMgZGVwcmVjYXRlZCFcbmV4cG9ydCB7ZGVmYXVsdCBhcyBwb2ludFJhZGlhbH0gZnJvbSBcIi4vcG9pbnRSYWRpYWwuanNcIjtcbmV4cG9ydCB7bGlua0hvcml6b250YWwsIGxpbmtWZXJ0aWNhbCwgbGlua1JhZGlhbH0gZnJvbSBcIi4vbGluay9pbmRleC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sLCBzeW1ib2xzfSBmcm9tIFwiLi9zeW1ib2wuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xDaXJjbGV9IGZyb20gXCIuL3N5bWJvbC9jaXJjbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xDcm9zc30gZnJvbSBcIi4vc3ltYm9sL2Nyb3NzLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3ltYm9sRGlhbW9uZH0gZnJvbSBcIi4vc3ltYm9sL2RpYW1vbmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xTcXVhcmV9IGZyb20gXCIuL3N5bWJvbC9zcXVhcmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xTdGFyfSBmcm9tIFwiLi9zeW1ib2wvc3Rhci5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN5bWJvbFRyaWFuZ2xlfSBmcm9tIFwiLi9zeW1ib2wvdHJpYW5nbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzeW1ib2xXeWV9IGZyb20gXCIuL3N5bWJvbC93eWUuanNcIjtcblxuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXNDbG9zZWR9IGZyb20gXCIuL2N1cnZlL2Jhc2lzQ2xvc2VkLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVCYXNpc09wZW59IGZyb20gXCIuL2N1cnZlL2Jhc2lzT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQmFzaXN9IGZyb20gXCIuL2N1cnZlL2Jhc2lzLmpzXCI7XG5leHBvcnQge2J1bXBYIGFzIGN1cnZlQnVtcFgsIGJ1bXBZIGFzIGN1cnZlQnVtcFl9IGZyb20gXCIuL2N1cnZlL2J1bXAuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUJ1bmRsZX0gZnJvbSBcIi4vY3VydmUvYnVuZGxlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbENsb3NlZH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhcmRpbmFsT3Blbn0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWxPcGVuLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgY3VydmVDYXJkaW5hbH0gZnJvbSBcIi4vY3VydmUvY2FyZGluYWwuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21DbG9zZWR9IGZyb20gXCIuL2N1cnZlL2NhdG11bGxSb21DbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUNhdG11bGxSb21PcGVufSBmcm9tIFwiLi9jdXJ2ZS9jYXRtdWxsUm9tT3Blbi5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlQ2F0bXVsbFJvbX0gZnJvbSBcIi4vY3VydmUvY2F0bXVsbFJvbS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTGluZWFyQ2xvc2VkfSBmcm9tIFwiLi9jdXJ2ZS9saW5lYXJDbG9zZWQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBjdXJ2ZUxpbmVhcn0gZnJvbSBcIi4vY3VydmUvbGluZWFyLmpzXCI7XG5leHBvcnQge21vbm90b25lWCBhcyBjdXJ2ZU1vbm90b25lWCwgbW9ub3RvbmVZIGFzIGN1cnZlTW9ub3RvbmVZfSBmcm9tIFwiLi9jdXJ2ZS9tb25vdG9uZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlTmF0dXJhbH0gZnJvbSBcIi4vY3VydmUvbmF0dXJhbC5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIGN1cnZlU3RlcCwgc3RlcEFmdGVyIGFzIGN1cnZlU3RlcEFmdGVyLCBzdGVwQmVmb3JlIGFzIGN1cnZlU3RlcEJlZm9yZX0gZnJvbSBcIi4vY3VydmUvc3RlcC5qc1wiO1xuXG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2t9IGZyb20gXCIuL3N0YWNrLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRFeHBhbmR9IGZyb20gXCIuL29mZnNldC9leHBhbmQuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldERpdmVyZ2luZ30gZnJvbSBcIi4vb2Zmc2V0L2RpdmVyZ2luZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT2Zmc2V0Tm9uZX0gZnJvbSBcIi4vb2Zmc2V0L25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09mZnNldFNpbGhvdWV0dGV9IGZyb20gXCIuL29mZnNldC9zaWxob3VldHRlLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPZmZzZXRXaWdnbGV9IGZyb20gXCIuL29mZnNldC93aWdnbGUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyQXBwZWFyYW5jZX0gZnJvbSBcIi4vb3JkZXIvYXBwZWFyYW5jZS5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJBc2NlbmRpbmd9IGZyb20gXCIuL29yZGVyL2FzY2VuZGluZy5qc1wiO1xuZXhwb3J0IHtkZWZhdWx0IGFzIHN0YWNrT3JkZXJEZXNjZW5kaW5nfSBmcm9tIFwiLi9vcmRlci9kZXNjZW5kaW5nLmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlckluc2lkZU91dH0gZnJvbSBcIi4vb3JkZXIvaW5zaWRlT3V0LmpzXCI7XG5leHBvcnQge2RlZmF1bHQgYXMgc3RhY2tPcmRlck5vbmV9IGZyb20gXCIuL29yZGVyL25vbmUuanNcIjtcbmV4cG9ydCB7ZGVmYXVsdCBhcyBzdGFja09yZGVyUmV2ZXJzZX0gZnJvbSBcIi4vb3JkZXIvcmV2ZXJzZS5qc1wiO1xuIiwiLy8gVGhlc2UgYXJlIHR5cGljYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbm9ldmVudCB0byBlbnN1cmUgdGhhdCB3ZSBjYW5cbi8vIHByZXZlbnREZWZhdWx0IG9uIHRoZSBldmVudC5cbmV4cG9ydCBjb25zdCBub25wYXNzaXZlID0ge3Bhc3NpdmU6IGZhbHNlfTtcbmV4cG9ydCBjb25zdCBub25wYXNzaXZlY2FwdHVyZSA9IHtjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZX07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3Byb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgbm9ldmVudCwge25vbnBhc3NpdmVjYXB0dXJlfSBmcm9tIFwiLi9ub2V2ZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZpZXcpIHtcbiAgdmFyIHJvb3QgPSB2aWV3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdCh2aWV3KS5vbihcImRyYWdzdGFydC5kcmFnXCIsIG5vZXZlbnQsIG5vbnBhc3NpdmVjYXB0dXJlKTtcbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG5vZXZlbnQsIG5vbnBhc3NpdmVjYXB0dXJlKTtcbiAgfSBlbHNlIHtcbiAgICByb290Ll9fbm9zZWxlY3QgPSByb290LnN0eWxlLk1velVzZXJTZWxlY3Q7XG4gICAgcm9vdC5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gXCJub25lXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHllc2RyYWcodmlldywgbm9jbGljaykge1xuICB2YXIgcm9vdCA9IHZpZXcuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgc2VsZWN0aW9uID0gc2VsZWN0KHZpZXcpLm9uKFwiZHJhZ3N0YXJ0LmRyYWdcIiwgbnVsbCk7XG4gIGlmIChub2NsaWNrKSB7XG4gICAgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBub2V2ZW50LCBub25wYXNzaXZlY2FwdHVyZSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZWN0aW9uLm9uKFwiY2xpY2suZHJhZ1wiLCBudWxsKTsgfSwgMCk7XG4gIH1cbiAgaWYgKFwib25zZWxlY3RzdGFydFwiIGluIHJvb3QpIHtcbiAgICBzZWxlY3Rpb24ub24oXCJzZWxlY3RzdGFydC5kcmFnXCIsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHJvb3Quc3R5bGUuTW96VXNlclNlbGVjdCA9IHJvb3QuX19ub3NlbGVjdDtcbiAgICBkZWxldGUgcm9vdC5fX25vc2VsZWN0O1xuICB9XG59XG4iLCJ2YXIgZXBzaWxvbjIgPSAxZS0xMjtcblxuZnVuY3Rpb24gY29zaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgKyAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiBzaW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSAtIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHRhbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoMiAqIHgpKSAtIDEpIC8gKHggKyAxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHpvb21SaG8ocmhvLCByaG8yLCByaG80KSB7XG5cbiAgLy8gcDAgPSBbdXgwLCB1eTAsIHcwXVxuICAvLyBwMSA9IFt1eDEsIHV5MSwgdzFdXG4gIGZ1bmN0aW9uIHpvb20ocDAsIHAxKSB7XG4gICAgdmFyIHV4MCA9IHAwWzBdLCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSxcbiAgICAgICAgdXgxID0gcDFbMF0sIHV5MSA9IHAxWzFdLCB3MSA9IHAxWzJdLFxuICAgICAgICBkeCA9IHV4MSAtIHV4MCxcbiAgICAgICAgZHkgPSB1eTEgLSB1eTAsXG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHksXG4gICAgICAgIGksXG4gICAgICAgIFM7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHUwIOKJhSB1MS5cbiAgICBpZiAoZDIgPCBlcHNpbG9uMikge1xuICAgICAgUyA9IE1hdGgubG9nKHcxIC8gdzApIC8gcmhvO1xuICAgICAgaSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB1eDAgKyB0ICogZHgsXG4gICAgICAgICAgdXkwICsgdCAqIGR5LFxuICAgICAgICAgIHcwICogTWF0aC5leHAocmhvICogdCAqIFMpXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhbCBjYXNlLlxuICAgIGVsc2Uge1xuICAgICAgdmFyIGQxID0gTWF0aC5zcXJ0KGQyKSxcbiAgICAgICAgICBiMCA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIHJobzQgKiBkMikgLyAoMiAqIHcwICogcmhvMiAqIGQxKSxcbiAgICAgICAgICBiMSA9ICh3MSAqIHcxIC0gdzAgKiB3MCAtIHJobzQgKiBkMikgLyAoMiAqIHcxICogcmhvMiAqIGQxKSxcbiAgICAgICAgICByMCA9IE1hdGgubG9nKE1hdGguc3FydChiMCAqIGIwICsgMSkgLSBiMCksXG4gICAgICAgICAgcjEgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1xuICAgICAgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgIHZhciBzID0gdCAqIFMsXG4gICAgICAgICAgICBjb3NocjAgPSBjb3NoKHIwKSxcbiAgICAgICAgICAgIHUgPSB3MCAvIChyaG8yICogZDEpICogKGNvc2hyMCAqIHRhbmgocmhvICogcyArIHIwKSAtIHNpbmgocjApKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB1eDAgKyB1ICogZHgsXG4gICAgICAgICAgdXkwICsgdSAqIGR5LFxuICAgICAgICAgIHcwICogY29zaHIwIC8gY29zaChyaG8gKiBzICsgcjApXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwICogcmhvIC8gTWF0aC5TUVJUMjtcblxuICAgIHJldHVybiBpO1xuICB9XG5cbiAgem9vbS5yaG8gPSBmdW5jdGlvbihfKSB7XG4gICAgdmFyIF8xID0gTWF0aC5tYXgoMWUtMywgK18pLCBfMiA9IF8xICogXzEsIF80ID0gXzIgKiBfMjtcbiAgICByZXR1cm4gem9vbVJobyhfMSwgXzIsIF80KTtcbiAgfTtcblxuICByZXR1cm4gem9vbTtcbn0pKE1hdGguU1FSVDIsIDIsIDQpO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXZlbnQpIHtcbiAgbGV0IHNvdXJjZUV2ZW50O1xuICB3aGlsZSAoc291cmNlRXZlbnQgPSBldmVudC5zb3VyY2VFdmVudCkgZXZlbnQgPSBzb3VyY2VFdmVudDtcbiAgcmV0dXJuIGV2ZW50O1xufVxuIiwiaW1wb3J0IHNvdXJjZUV |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment