File manager - Edit - /home/wwwroot/camplus.hk/master.camplus.hk/public_html_20190103/assets/custom/survey-editor/surveyeditor.js
Back
/*! * surveyjs Builder(Editor) v1.0.24 * (c) Devsoft Baltic O� - http://surveyjs.io/ * Github: https://github.com/surveyjs/editor * License: https://surveyjs.io/Licenses#BuildSurvey */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("knockout"), require("survey-knockout")); else if(typeof define === 'function' && define.amd) define("SurveyEditor", ["knockout", "survey-knockout"], factory); else if(typeof exports === 'object') exports["SurveyEditor"] = factory(require("knockout"), require("survey-knockout")); else root["SurveyEditor"] = factory(root["ko"], root["Survey"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // identity function for calling harmony imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 113); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_english__ = __webpack_require__(23); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return editorLocalization; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return defaultStrings; }); var editorLocalization = { currentLocale: "", locales: {}, getString: function (strName, locale) { if (locale === void 0) { locale = null; } var loc = this.getLocale(locale); var path = strName.split("."); var obj = loc; for (var i = 0; i < path.length; i++) { obj = obj[path[i]]; if (!obj) { if (loc === defaultStrings) return path[i]; return this.getString(strName, "en"); } } return obj; }, hasString: function (strName, locale) { if (locale === void 0) { locale = null; } var loc = this.getLocale(locale); var path = strName.split("."); var obj = loc; for (var i = 0; i < path.length; i++) { obj = obj[path[i]]; if (!obj) return false; } return true; }, getPropertyName: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getProperty(strName, locale); if (obj["name"]) return obj["name"]; return obj; }, getPropertyTitle: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getProperty(strName, locale); if (obj["title"]) return obj["title"]; return ""; }, getProperty: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getString("p." + strName, locale); if (obj !== strName) return obj; var pos = strName.indexOf("_"); if (pos < -1) return obj; strName = strName.substr(pos + 1); return this.getString("p." + strName, locale); }, getPropertyValue: function (value, locale) { if (locale === void 0) { locale = null; } return this.getValueInternal(value, "pv", locale); }, getValidatorName: function (name, locale) { if (locale === void 0) { locale = null; } return this.getValueInternal(name, "validators", locale); }, getTriggerName: function (name, locale) { if (locale === void 0) { locale = null; } return this.getValueInternal(name, "triggers", locale); }, getLocale: function (locale) { if (!locale) locale = this.currentLocale; var loc = locale ? this.locales[locale] : defaultStrings; if (!loc) loc = defaultStrings; return loc; }, getValueInternal: function (value, prefix, locale) { if (locale === void 0) { locale = null; } if (value === "" || value === null || value === undefined) return ""; value = value.toString(); var loc = this.getLocale(locale); var res = loc[prefix] ? loc[prefix][value] : null; if (!res) res = defaultStrings[prefix][value]; return res ? res : value; }, getLocales: function () { var res = []; res.push(""); for (var key in this.locales) { res.push(key); } return res; } }; var defaultStrings = __WEBPACK_IMPORTED_MODULE_0__localization_english__["a" /* enStrings */]; /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_2__; /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export __assign */ /* harmony export (immutable) */ __webpack_exports__["a"] = __extends; var __assign = Object["assign"] || function (target) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) target[p] = s[p]; } return target; }; function __extends(thisClass, baseClass) { for (var p in baseClass) if (baseClass.hasOwnProperty(p)) thisClass[p] = baseClass[p]; function __() { this.constructor = thisClass; } thisClass.prototype = baseClass === null ? Object.create(baseClass) : ((__.prototype = baseClass.prototype), new __()); } /***/ }), /* 4 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(12); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyCustomEditor__ = __webpack_require__(24); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorFactory; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyStringPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyDropdownPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyBooleanPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyNumberPropertyEditor; }); var SurveyPropertyEditorFactory = (function () { function SurveyPropertyEditorFactory() { } SurveyPropertyEditorFactory.getOperators = function () { var operators = [ "empty", "notempty", "equal", "notequal", "contains", "notcontains", "greater", "less", "greaterorequal", "lessorequal" ]; var result = []; for (var i = 0; i < operators.length; i++) { var name = operators[i]; result.push({ name: name, text: __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("op." + name) }); } return result; }; SurveyPropertyEditorFactory.registerEditor = function (name, creator, editableClassName) { if (editableClassName === void 0) { editableClassName = null; } SurveyPropertyEditorFactory.creatorList[name] = creator; var className = editableClassName ? editableClassName : name; SurveyPropertyEditorFactory.creatorByClassList[className] = creator; }; SurveyPropertyEditorFactory.registerCustomEditor = function (name, widgetJSON) { SurveyPropertyEditorFactory.widgetRegisterList[name] = widgetJSON; }; SurveyPropertyEditorFactory.createEditor = function (property, func) { var editorType = property.type; if (property.choices != null && (!editorType || editorType == SurveyPropertyEditorFactory.defaultEditor)) { editorType = "dropdown"; } var propertyEditor = SurveyPropertyEditorFactory.createCustomEditor(editorType, property); if (!propertyEditor) { var creator = SurveyPropertyEditorFactory.creatorList[editorType]; if (creator) propertyEditor = creator(property); } if (!propertyEditor) { creator = SurveyPropertyEditorFactory.findParentCreator(editorType); propertyEditor = creator(property); } propertyEditor.onChanged = func; return propertyEditor; }; SurveyPropertyEditorFactory.createCustomEditor = function (name, property) { var widgetJSON = SurveyPropertyEditorFactory.widgetRegisterList[name]; if (!widgetJSON) return null; return new __WEBPACK_IMPORTED_MODULE_4__propertyCustomEditor__["a" /* SurveyPropertyCustomEditor */](property, widgetJSON); }; SurveyPropertyEditorFactory.findParentCreator = function (name) { var jsonClass = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.findClass(name); while (jsonClass && jsonClass.parentName) { var creator = SurveyPropertyEditorFactory.creatorByClassList[jsonClass.parentName]; if (creator) return creator; jsonClass = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.findClass(jsonClass.parentName); } return SurveyPropertyEditorFactory.creatorList[SurveyPropertyEditorFactory.defaultEditor]; }; return SurveyPropertyEditorFactory; }()); SurveyPropertyEditorFactory.defaultEditor = "string"; SurveyPropertyEditorFactory.creatorList = {}; SurveyPropertyEditorFactory.creatorByClassList = {}; SurveyPropertyEditorFactory.widgetRegisterList = {}; var SurveyStringPropertyEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyStringPropertyEditor, _super); function SurveyStringPropertyEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyStringPropertyEditor.prototype, "editorType", { get: function () { return "string"; }, enumerable: true, configurable: true }); return SurveyStringPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyDropdownPropertyEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyDropdownPropertyEditor, _super); function SurveyDropdownPropertyEditor(property) { var _this = _super.call(this, property) || this; _this.koChoices = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.getLocalizableChoices()); return _this; } Object.defineProperty(SurveyDropdownPropertyEditor.prototype, "editorType", { get: function () { return "dropdown"; }, enumerable: true, configurable: true }); SurveyDropdownPropertyEditor.prototype.getValueText = function (value) { if (this.property.name === "locale") { var localeNames = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"]["localeNames"]; if (localeNames) { var text = localeNames[value]; if (text) return text; } } if (this.property.name === "cellType") { var text = __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("qt." + value); if (text) return text; } return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getPropertyValue(value); }; SurveyDropdownPropertyEditor.prototype.setObject = function (value) { _super.prototype.setObject.call(this, value); this.beginValueUpdating(); if (this.koChoices().length == 0) { this.koChoices(this.getLocalizableChoices()); } this.endValueUpdating(); }; SurveyDropdownPropertyEditor.prototype.getLocalizableChoices = function () { var choices = this.getPropertyChoices(); if (!choices || choices.length == 0) return []; var res = new Array(); __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].setData(res, choices); for (var i = 0; i < res.length; i++) { var value = res[i].value; var text = this.getValueText(value); if (text != value) { res[i].text = text; } } return res; }; SurveyDropdownPropertyEditor.prototype.getPropertyChoices = function () { if (!this.property) return []; return this.property["getChoices"] ? this.property["getChoices"](this.object) : this.property.choices; }; return SurveyDropdownPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyBooleanPropertyEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyBooleanPropertyEditor, _super); function SurveyBooleanPropertyEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "editorType", { get: function () { return "boolean"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "alwaysShowEditor", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "canShowDisplayNameOnTop", { get: function () { return false; }, enumerable: true, configurable: true }); SurveyBooleanPropertyEditor.prototype.getValueText = function (value) { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getPropertyValue(value); }; return SurveyBooleanPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyNumberPropertyEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyNumberPropertyEditor, _super); function SurveyNumberPropertyEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyNumberPropertyEditor.prototype, "editorType", { get: function () { return "number"; }, enumerable: true, configurable: true }); SurveyNumberPropertyEditor.prototype.getCorrectedValue = function (value) { if (!value) return value; if (typeof value === "string" || value instanceof String) { value = Number(value); if (!value) value = 0; } return value; }; return SurveyNumberPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); SurveyPropertyEditorFactory.registerEditor("string", function (property) { return new SurveyStringPropertyEditor(property); }); SurveyPropertyEditorFactory.registerEditor("dropdown", function (property) { return new SurveyDropdownPropertyEditor(property); }); SurveyPropertyEditorFactory.registerEditor("boolean", function (property) { return new SurveyBooleanPropertyEditor(property); }); SurveyPropertyEditorFactory.registerEditor("number", function (property) { return new SurveyNumberPropertyEditor(property); }); /***/ }), /* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ObjType; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyHelper; }); var ObjType; (function (ObjType) { ObjType[ObjType["Unknown"] = 0] = "Unknown"; ObjType[ObjType["Survey"] = 1] = "Survey"; ObjType[ObjType["Page"] = 2] = "Page"; ObjType[ObjType["Panel"] = 3] = "Panel"; ObjType[ObjType["Question"] = 4] = "Question"; })(ObjType || (ObjType = {})); var SurveyHelper = (function () { function SurveyHelper() { } SurveyHelper.getNewPageName = function (objs) { return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newPageName")); }; SurveyHelper.getNewQuestionName = function (objs) { return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newQuestionName")); }; SurveyHelper.getNewPanelName = function (objs) { return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newPanelName")); }; SurveyHelper.getNewName = function (objs, baseName) { var hash = {}; for (var i = 0; i < objs.length; i++) { hash[objs[i].name] = true; } var num = 1; while (true) { if (!hash[baseName + num.toString()]) break; num++; } return baseName + num.toString(); }; SurveyHelper.getObjectType = function (obj) { if (!obj || !obj["getType"]) return ObjType.Unknown; if (obj.getType() == "page") return ObjType.Page; if (obj.getType() == "panel") return ObjType.Panel; if (obj.getType() == "survey") return ObjType.Survey; if (obj["name"]) return ObjType.Question; return ObjType.Unknown; }; SurveyHelper.getObjectTypeStr = function (obj) { var objType = SurveyHelper.getObjectType(obj); if (objType === ObjType.Survey) return "survey"; if (objType === ObjType.Page) return "page"; if (objType === ObjType.Panel) return "panel"; if (objType === ObjType.Question) return "question"; return "unknown"; }; SurveyHelper.getObjectName = function (obj) { if (obj["name"]) return obj["name"]; var objType = SurveyHelper.getObjectType(obj); if (objType != ObjType.Page) return ""; var data = obj["data"]; if (!data) data = obj["survey"]; //TODO var index = data.pages.indexOf(obj); return "[Page " + (index + 1) + "]"; }; SurveyHelper.getElements = function (element, includeHidden) { if (includeHidden === void 0) { includeHidden = false; } if (!element) return []; if (element.getElementsInDesign) return element.getElementsInDesign(includeHidden); if (element.elements) return element.elements; return []; }; SurveyHelper.isPropertyVisible = function (obj, property, onCanShowPropertyCallback) { if (onCanShowPropertyCallback === void 0) { onCanShowPropertyCallback = null; } if (!property || !property.visible) return false; if (onCanShowPropertyCallback && !onCanShowPropertyCallback(obj, property)) return false; return true; }; SurveyHelper.scrollIntoViewIfNeeded = function (el, pageEl) { if (!el || !el.scrollIntoView || !pageEl) return; var rect = el.getBoundingClientRect(); var height = pageEl.offsetParent ? pageEl.offsetParent.clientHeight : pageEl.clientHeight; if (rect.top < pageEl.offsetTop) { el.scrollIntoView(); } else { if (rect.bottom > height && (rect.top > pageEl.offsetTop + height || rect.height < height)) { el.scrollIntoView(false); } } }; return SurveyHelper; }()); /***/ }), /* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__ = __webpack_require__(12); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rmodal__ = __webpack_require__(32); /* unused harmony export SurveyPropertyModalEditorCustomWidget */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyModalEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyTextEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyPropertyHtmlEditor; }); var SurveyPropertyModalEditorCustomWidget = (function () { function SurveyPropertyModalEditorCustomWidget(json) { this.json = json; } SurveyPropertyModalEditorCustomWidget.prototype.afterRender = function (editor, el) { if (this.json && this.json.afterRender) { if (!el.id) { el.id = SurveyPropertyModalEditorCustomWidget.customWidgetName + SurveyPropertyModalEditorCustomWidget.customWidgetId; SurveyPropertyModalEditorCustomWidget.customWidgetId++; } this.json.afterRender(editor, el); if (this.json.destroy) { var self = this; __WEBPACK_IMPORTED_MODULE_1_knockout__["utils"].domNodeDisposal.addDisposeCallback(el, function () { self.destroy(editor, el); }); } } }; SurveyPropertyModalEditorCustomWidget.prototype.destroy = function (editor, el) { if (this.json && this.json.destroy) { this.json.destroy(editor, el); } }; return SurveyPropertyModalEditorCustomWidget; }()); SurveyPropertyModalEditorCustomWidget.customWidgetId = 1; SurveyPropertyModalEditorCustomWidget.customWidgetName = "modalEditorCustomWidget"; var SurveyPropertyModalEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyModalEditor, _super); function SurveyPropertyModalEditor(property) { var _this = _super.call(this, property) || this; _this.isShowingModalValue = false; _this.koTitleCaption = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koHtmlTop = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koHtmlBottom = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); if (_this.property) { _this.koTitleCaption(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */] .getString("pe.editProperty")["format"](_this.property.name)); } var name = property ? property.name : ""; _this.modalName = "modelEditor" + _this.editorType + SurveyPropertyModalEditor.idCounter; SurveyPropertyModalEditor.idCounter++; _this.modalNameTarget = "#" + _this.modalName; var self = _this; _this.koShowApplyButton = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); self.onHideModal = function () { }; self.onApplyClick = function () { self.apply(); }; self.onOkClick = function () { self.apply(); if (!self.koHasError()) self.onHideModal(); }; self.onResetClick = function () { self.updateValue(); self.onHideModal(); }; self.onShowModal = function () { self.beforeShow(); var modal = new __WEBPACK_IMPORTED_MODULE_6_rmodal__["a" /* default */](document.querySelector(self.modalNameTarget), { bodyClass: "", closeTimeout: 100, dialogOpenClass: "animated fadeInDown", focus: false }); modal.open(); document.addEventListener("keydown", function (ev) { modal.keydown(ev); }, false); self.onHideModal = function () { self.beforeCloseModal(); modal.close(); }; if (!!this.elements) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["c" /* focusFirstControl */])(this.elements); } }; self.koAfterRender = function (el, con) { return self.afterRender(el, con); }; return _this; } SurveyPropertyModalEditor.registerCustomWidget = function (editorType, json) { if (!SurveyPropertyModalEditor.customWidgets) SurveyPropertyModalEditor.customWidgets = {}; SurveyPropertyModalEditor.customWidgets[editorType] = new SurveyPropertyModalEditorCustomWidget(json); }; SurveyPropertyModalEditor.getCustomWidget = function (editorType) { if (!SurveyPropertyModalEditor.customWidgets) return null; return SurveyPropertyModalEditor.customWidgets[editorType]; }; SurveyPropertyModalEditor.prototype.setup = function () { _super.prototype.setup.call(this); this.beforeShow(); }; Object.defineProperty(SurveyPropertyModalEditor.prototype, "isModal", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyModalEditor.prototype, "isShowingModal", { get: function () { return this.isShowingModalValue; }, enumerable: true, configurable: true }); SurveyPropertyModalEditor.prototype.beforeShow = function () { this.isShowingModalValue = true; this.updateValue(); }; SurveyPropertyModalEditor.prototype.beforeCloseModal = function () { this.isShowingModalValue = false; }; SurveyPropertyModalEditor.prototype.onOptionsChanged = function () { this.koShowApplyButton = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](!this.options || this.options.showApplyButtonInEditors); }; SurveyPropertyModalEditor.prototype.setObject = function (value) { this.editingObject = value; _super.prototype.setObject.call(this, value); if (this.options && this.property) { var html = this.options.onPropertyEditorModalShowDescriptionCallback(this.property.name, value); if (html) { if (html.top) this.koHtmlTop(html.top); if (html.bottom) this.koHtmlBottom(html.bottom); } } }; Object.defineProperty(SurveyPropertyModalEditor.prototype, "isEditable", { get: function () { return false; }, enumerable: true, configurable: true }); SurveyPropertyModalEditor.prototype.afterRender = function (elements, con) { this.elements = elements; var customWidget = SurveyPropertyModalEditor.getCustomWidget(this.editorType); if (!!customWidget) { var el = this.GetFirstNonTextElement(elements); var tEl = elements[0]; if (tEl.nodeName == "#text") tEl.data = ""; tEl = elements[elements.length - 1]; if (tEl.nodeName == "#text") tEl.data = ""; customWidget.afterRender(this, el); } __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["c" /* focusFirstControl */])(elements); }; SurveyPropertyModalEditor.prototype.GetFirstNonTextElement = function (elements) { if (!elements || !elements.length) return; for (var i = 0; i < elements.length; i++) { if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") return elements[i]; } return null; }; return SurveyPropertyModalEditor; }(__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); SurveyPropertyModalEditor.idCounter = 1; var SurveyPropertyTextEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTextEditor, _super); function SurveyPropertyTextEditor(property) { var _this = _super.call(this, property) || this; _this.koTextValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); var self = _this; _this.koTextValue.subscribe(function (newValue) { self.onkoTextValueChanged(newValue); }); return _this; } Object.defineProperty(SurveyPropertyTextEditor.prototype, "editorType", { get: function () { return "text"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyTextEditor.prototype, "isEditable", { get: function () { return true; }, enumerable: true, configurable: true }); SurveyPropertyTextEditor.prototype.getValueText = function (value) { if (!value) return null; var str = value; if (str.length > 20) { str = str.substr(0, 20) + "..."; } return str; }; SurveyPropertyTextEditor.prototype.onkoTextValueChanged = function (newValue) { }; SurveyPropertyTextEditor.prototype.onValueChanged = function () { this.koTextValue(this.editingValue); }; SurveyPropertyTextEditor.prototype.onBeforeApply = function () { this.setValueCore(this.koTextValue()); }; return SurveyPropertyTextEditor; }(SurveyPropertyModalEditor)); var SurveyPropertyHtmlEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyHtmlEditor, _super); function SurveyPropertyHtmlEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyHtmlEditor.prototype, "editorType", { get: function () { return "html"; }, enumerable: true, configurable: true }); return SurveyPropertyHtmlEditor; }(SurveyPropertyTextEditor)); __WEBPACK_IMPORTED_MODULE_3__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("text", function (property) { return new SurveyPropertyTextEditor(property); }); __WEBPACK_IMPORTED_MODULE_3__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("html", function (property) { return new SurveyPropertyHtmlEditor(property); }); /***/ }), /* 7 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__stylesmanager__ = __webpack_require__(18); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyForDesigner; }); /* harmony export (immutable) */ __webpack_exports__["b"] = registerAdorner; /* harmony export (immutable) */ __webpack_exports__["c"] = removeAdorners; /* unused harmony export applyAdornerClass */ var SurveyForDesigner = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyForDesigner, _super); function SurveyForDesigner(jsonObj, renderedElement, css) { if (jsonObj === void 0) { jsonObj = null; } if (renderedElement === void 0) { renderedElement = null; } if (css === void 0) { css = null; } var _this = _super.call(this, jsonObj, renderedElement, css) || this; _this.onSelectedElementChanged = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); _this.onEditButtonClick = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); _this.onGetMenuItems = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); _this.onElementDoubleClick = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); var self = _this; _this.setDesignMode(true); _this.onAfterRenderPage.add(function (sender, options) { options.page["onAfterRenderPage"](options.htmlElement); }); _this.onAfterRenderQuestion.add(function (sender, options) { options.question["onAfterRenderQuestion"](options.htmlElement); }); _this.onAfterRenderPanel.add(function (sender, options) { options.panel["onAfterRenderPanel"](options.htmlElement); }); _this.editQuestionClick = function () { self.onEditButtonClick.fire(self, null); }; _this.onUpdateQuestionCssClasses.add(onUpdateQuestionCssClasses); _this.onUpdatePanelCssClasses.add(onUpdateQuestionCssClasses); return _this; } SurveyForDesigner.prototype.updateElementAllowingOptions = function (obj) { if (this.onUpdateElementAllowingOptions && obj["allowingOptions"]) { obj["allowingOptions"].obj = obj; this.onUpdateElementAllowingOptions(obj["allowingOptions"]); } }; SurveyForDesigner.prototype.getMenuItems = function (obj) { var items = []; var options = { obj: obj, items: items }; this.onGetMenuItems.fire(this, options); return options.items; }; Object.defineProperty(SurveyForDesigner.prototype, "selectedElement", { get: function () { return this.selectedElementValue; }, set: function (value) { if (value && value.selectedElementInDesign) value = value.selectedElementInDesign; if (value == this.selectedElementValue) return; var oldValue = this.selectedElementValue; this.selectedElementValue = value; if (oldValue != null && oldValue["onSelectedElementChanged"]) { oldValue["onSelectedElementChanged"](); } if (this.selectedElementValue != null && this.selectedElementValue["onSelectedElementChanged"]) { this.selectedElementValue["onSelectedElementChanged"](); } this.onSelectedElementChanged.fire(this, { oldElement: oldValue, newElement: value }); }, enumerable: true, configurable: true }); SurveyForDesigner.prototype.doElementDoubleClick = function (obj) { this.onElementDoubleClick.fire(this, { element: obj }); }; SurveyForDesigner.prototype.getEditorLocString = function (value) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(value); }; return SurveyForDesigner; }(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Survey"])); function getSurvey(el) { if (!el) return null; var res = el["survey"]; if (res) return res; return el["data"]; } function panelBaseOnCreating(self) { self.dragEnterCounter = 0; self.emptyElement = null; self.koRows.subscribe(function (changes) { if (self.emptyElement) { self.emptyElement.style.display = self.koRows().length > 0 ? "none" : ""; } }); } function elementOnCreating(surveyElement) { surveyElement.allowingOptions = { allowDelete: true, allowEdit: true, allowCopy: true, allowAddToToolbox: true, allowDragging: true, allowChangeType: true, allowShowHideTitle: true, allowChangeRequired: true }; surveyElement.dragDropHelperValue = null; surveyElement.dragDropHelper = function () { if (surveyElement.dragDropHelperValue == null) { surveyElement.dragDropHelperValue = getSurvey(surveyElement)["dragDropHelper"]; } return surveyElement.dragDropHelperValue; }; surveyElement.renderedElement = null; surveyElement.koIsDragging = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); surveyElement.koIsSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); surveyElement.koIsDragging.subscribe(function (newValue) { if (surveyElement.renderedElement) { surveyElement.renderedElement.style.opacity = newValue ? 0.4 : 1; } }); surveyElement.koIsSelected.subscribe(function (newValue) { if (surveyElement.renderedElement) { if (newValue) { surveyElement.renderedElement.classList.add("svd_q_selected", "svd-main-border-color"); } else { surveyElement.renderedElement.classList.remove("svd_q_selected", "svd-main-border-color"); } } }); } function addEmptyPanelElement(root, dragDropHelper, self) { var eDiv = document.createElement("div"); eDiv.className = "well card card-block"; eDiv.ondragover = function (e) { dragDropHelper.doDragDropOver(e, self); }; var eSpan = document.createElement("span"); eSpan.textContent = getSurvey(self).getEditorLocString("survey.dropQuestion"); eDiv.appendChild(eSpan); root.appendChild(eDiv); return eDiv; } function createQuestionDesignItem(obj, item) { var res = document.createElement("li"); var btn = document.createElement("button"); btn.innerText = item.text; var onClick = item.onClick; btn.onclick = function () { onClick(obj, item); }; btn.className = "btn btn-primary btn-sm btn-xs"; res.appendChild(btn); return res; } function elementOnAfterRendering(domElement, surveyElement, isPanel, disable) { surveyElement.renderedElement = domElement; surveyElement.renderedElement.classList.add("svd_question"); if (__WEBPACK_IMPORTED_MODULE_5__stylesmanager__["a" /* StylesManager */].currentTheme() === "bootstrap") { surveyElement.renderedElement.classList.add("svd-dark-bg-color"); } surveyElement.renderedElement.classList.add("svd_q_design_border"); getSurvey(surveyElement).updateElementAllowingOptions(surveyElement); if (surveyElement.koIsSelected()) surveyElement.renderedElement.classList.add("svd_q_selected", "svd-main-border-color"); surveyElement.dragDropHelper().attachToElement(domElement, surveyElement); domElement.onclick = function (e) { if (!e["markEvent"]) { e["markEvent"] = true; if (surveyElement.parent) { getSurvey(surveyElement)["selectedElement"] = surveyElement; } } }; // el.onkeydown = function(e) { // if (e.witch == 46) getSurvey(surveyElement).deleteCurrentObjectClick(); // return true; // }; domElement.ondblclick = function (e) { getSurvey(surveyElement).doElementDoubleClick(surveyElement); }; disable = disable && !(surveyElement.getType() == "paneldynamic"); //TODO if (disable) { var childs = domElement.childNodes; for (var i = 0; i < childs.length; i++) { if (childs[i].style) childs[i].style.pointerEvents = "none"; } } addAdorner(domElement, surveyElement); } var adornersConfig = {}; function registerAdorner(name, adorner) { if (!adornersConfig[name]) { adornersConfig[name] = []; } adornersConfig[name].push(adorner); } function removeAdorners(names) { if (names === void 0) { names = undefined; } if (names !== undefined) { (names || []).forEach(function (name) { return delete adornersConfig[name]; }); } else { adornersConfig = {}; } } function onUpdateQuestionCssClasses(survey, options) { var classes = options.panel ? options.cssClasses.panel : options.cssClasses; Object.keys(adornersConfig).forEach(function (element) { adornersConfig[element].forEach(function (adorner) { var adornerMarkerClass = adorner.getMarkerClass(options.question || options.panel); classes[element] = applyAdornerClass(classes[element], adornerMarkerClass); }); }); } function applyAdornerClass(classes, adornerClass) { var result = classes; if (!!adornerClass) { result = !!result ? result + " " + adornerClass : adornerClass; } return result; } function filterNestedQuestions(rootQuestionNode, elements) { var targetElements = []; for (var i = 0; i < elements.length; i++) { var questionElement = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils_utils__["b" /* findParentNode */])("svd_question", elements[i]); if (questionElement === rootQuestionNode) { targetElements.push(elements[i]); } } return targetElements; } function addAdorner(node, model) { Object.keys(adornersConfig).forEach(function (element) { adornersConfig[element].forEach(function (adorner) { var elementClass = adorner.getMarkerClass(model); if (!!elementClass) { var elements = node.querySelectorAll("." + elementClass.replace(/\s/g, ".")); elements = filterNestedQuestions(node, elements); if (elements.length === 0 && node.className.indexOf(elementClass) !== -1) { elements = [node]; } if (elements.length > 0) { adorner.afterRender(elements, model, getSurvey(model).getEditor()); } } }); }); } __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Page"].prototype["onCreating"] = function () { panelBaseOnCreating(this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Page"].prototype["onAfterRenderPage"] = function (el) { if (!getSurvey(this).isDesignMode) return; var self = this; var dragDropHelper = getSurvey(this)["dragDropHelper"]; this.dragEnterCounter = 0; el.ondragenter = function (e) { e.preventDefault(); self.dragEnterCounter++; }; el.ondragleave = function (e) { self.dragEnterCounter--; if (self.dragEnterCounter === 0) dragDropHelper.doLeavePage(e); }; el.ondragover = function (e) { return false; }; el.ondrop = function (e) { dragDropHelper.doDrop(e); }; // if (this.elements.length == 0) { // this.emptyElement = addEmptyPanelElement(el, dragDropHelper, self); // } }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onCreating"] = function () { panelBaseOnCreating(this); elementOnCreating(this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onAfterRenderPanel"] = function (el) { if (!getSurvey(this).isDesignMode) return; var rows = this.koRows(); var self = this; if (this.elements.length == 0) { this.emptyElement = addEmptyPanelElement(el, self.dragDropHelper(), self); } elementOnAfterRendering(el, this, true, this.koIsDragging()); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onSelectedElementChanged"] = function () { if (getSurvey(this) == null) return; this.koIsSelected(getSurvey(this)["selectedElementValue"] == this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype["onCreating"] = function () { elementOnCreating(this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype["onAfterRenderQuestion"] = function (el) { if (!getSurvey(this).isDesignMode) return; elementOnAfterRendering(el, this, false, true); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype["onSelectedElementChanged"] = function () { if (getSurvey(this) == null) return; this.koIsSelected(getSurvey(this)["selectedElementValue"] == this); }; /***/ }), /* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (immutable) */ __webpack_exports__["a"] = getNextValue; /* harmony export (immutable) */ __webpack_exports__["b"] = findParentNode; /* harmony export (immutable) */ __webpack_exports__["c"] = focusFirstControl; function getNextValue(prefix, values) { var index = values.reduce(function (res, val) { if (typeof val === "string" && val.indexOf(prefix) === 0) { try { var candidate = parseInt(val.substring(prefix.length)); if (candidate >= res) { return candidate + 1; } } catch (e) { } } return res; }, 1); return prefix + index; } function findParentNode(className, sourceNode) { var parent = sourceNode; while ((parent = parent.parentElement) && !parent.classList.contains(className)) ; return parent; } function focusFirstControl(renderedElements) { for (var i = 0; i < renderedElements.length; i++) { if (typeof renderedElements[i].getElementsByClassName === "function") { var elements = renderedElements[i].getElementsByClassName("form-control"); if (elements.length === 0 && renderedElements[i].className.indexOf("form-control") !== -1) { elements = [renderedElements[i]]; } if (elements.length > 0) { var element = elements[0]; if (element.tagName.toLowerCase() !== "a") { setTimeout(function () { return element.focus({ preventScroll: true }); }, 10); break; } } } } } /***/ }), /* 9 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionEditorProperties__ = __webpack_require__(25); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__ = __webpack_require__(15); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rmodal__ = __webpack_require__(32); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_utils__ = __webpack_require__(8); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorShowWindow; }); /* unused harmony export SurveyQuestionProperties */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyQuestionEditorTab; }); var SurveyPropertyEditorShowWindow = (function () { function SurveyPropertyEditorShowWindow() { this.koVisible = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koEditor = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](null); } SurveyPropertyEditorShowWindow.prototype.show = function (questionBase, elWindow, onChanged, options, onClosed) { if (options === void 0) { options = null; } if (onClosed === void 0) { onClosed = null; } var editor = new SurveyQuestionEditor(questionBase, this.onCanShowPropertyCallback, null, options); editor.onChanged = onChanged; this.koEditor(editor); this.koVisible(true); var modal = new __WEBPACK_IMPORTED_MODULE_5_rmodal__["a" /* default */](elWindow, { bodyClass: "", closeTimeout: 100, dialogOpenClass: "animated fadeIn", focus: false, afterClose: function () { if (onClosed) onClosed(); } }); modal.open(); document.addEventListener("keydown", function (ev) { modal.keydown(ev); }, false); editor.onHideWindow = function () { modal.close(); }; }; return SurveyPropertyEditorShowWindow; }()); var SurveyQuestionProperties = (function () { function SurveyQuestionProperties(obj, onCanShowPropertyCallback) { this.obj = obj; this.onCanShowPropertyCallback = onCanShowPropertyCallback; this.properties = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"].metaData["getPropertiesByObj"] ? __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"].metaData["getPropertiesByObj"](this.obj) : __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"].metaData.getProperties(this.obj.getType()); this.editorDefinition = __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getAllDefinitionsByClass(this.obj.getType()); } SurveyQuestionProperties.prototype.getProperty = function (propertyName) { var property = this.getPropertyCore(propertyName); if (!property) return null; return __WEBPACK_IMPORTED_MODULE_6__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(this.obj, property, this.onCanShowPropertyCallback) ? property : null; }; SurveyQuestionProperties.prototype.getPropertyCore = function (propertyName) { var property = null; for (var i = 0; i < this.properties.length; i++) { if (this.properties[i].name == propertyName) return this.properties[i]; } return null; }; SurveyQuestionProperties.prototype.getProperties = function (tab) { var _this = this; return this.editorDefinition .reduce(function (a, b) { return a.concat(b.properties); }, [ { name: tab.name, tab: tab.name } ]) .filter(function (prop) { return prop !== undefined && typeof prop !== "string" && prop.tab === tab.name; }) .map(function (prop) { return typeof prop !== "string" && _this.getPropertyCore(prop.name); }) .filter(function (prop) { return !!prop && ((prop.name == tab.name && tab.visible === true) || __WEBPACK_IMPORTED_MODULE_6__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(_this.obj, prop, _this.onCanShowPropertyCallback)); }); }; return SurveyQuestionProperties; }()); var SurveyQuestionEditor = (function () { function SurveyQuestionEditor(obj, onCanShowPropertyCallback, className, options) { if (className === void 0) { className = null; } if (options === void 0) { options = null; } this.obj = obj; this.onCanShowPropertyCallback = onCanShowPropertyCallback; this.className = className; this.options = options; this.koActiveTab = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koTitle = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); var self = this; if (!this.className && this.obj.getType) { this.className = this.obj.getType(); } this.properties = new SurveyQuestionProperties(obj, onCanShowPropertyCallback); self.onApplyClick = function () { self.apply(); }; self.onOkClick = function () { self.doCloseWindow(false); }; self.onResetClick = function () { self.doCloseWindow(true); }; this.onTabClick = function (tab) { self.koActiveTab(tab.name); }; var tabs = this.buildTabs(); tabs.forEach(function (tab) { return tab.beforeShow(); }); this.koTabs = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](tabs); if (tabs.length > 0) { this.koActiveTab(tabs[0].name); } this.koShowApplyButton = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](!this.options || this.options.showApplyButtonInEditors); this.koTitle(this.getTitle()); } SurveyQuestionEditor.prototype.getTitle = function () { var res; if (this.obj["name"]) { res = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */] .getString("pe.qEditorTitle")["format"](this.obj["name"]); } else { res = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.surveyEditorTitle"); } if (this.options && this.options.onGetElementEditorTitleCallback) { res = this.options.onGetElementEditorTitleCallback(this.obj, res); } return res; }; SurveyQuestionEditor.prototype.doCloseWindow = function (isCancel) { if (isCancel) { this.reset(); } else { this.apply(); } if (isCancel || !this.hasError()) { var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { tabs[i].doCloseWindow(); } if (this.onHideWindow) this.onHideWindow(); } }; SurveyQuestionEditor.prototype.hasError = function () { var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { if (tabs[i].hasError()) { this.koActiveTab(tabs[i].name); return true; } } return false; }; SurveyQuestionEditor.prototype.reset = function () { var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { tabs[i].reset(); } }; SurveyQuestionEditor.prototype.apply = function () { if (this.hasError()) return; var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { tabs[i].apply(); } if (this.onChanged) { this.onChanged(this.obj); } }; SurveyQuestionEditor.prototype.buildTabs = function () { var tabs = []; var properties = new __WEBPACK_IMPORTED_MODULE_2__questionEditorProperties__["a" /* SurveyQuestionEditorProperties */](this.obj, __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(this.className), this.onCanShowPropertyCallback, this.options); if (__WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].isGeneralTabVisible(this.className)) { tabs.push(new SurveyQuestionEditorTab(this.obj, properties, "general")); } this.addPropertiesTabs(tabs); for (var i = 0; i < tabs.length; i++) { tabs[i].onCanShowPropertyCallback = this.onCanShowPropertyCallback; } return tabs; }; SurveyQuestionEditor.prototype.addPropertiesTabs = function (tabs) { var tabNames = __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getTabs(this.className); for (var i = 0; i < tabNames.length; i++) { var tabItem = tabNames[i]; var properties = this.properties.getProperties(tabItem); if (properties.length > 0) { var propertyTab = new SurveyQuestionEditorTab(this.obj, new __WEBPACK_IMPORTED_MODULE_2__questionEditorProperties__["a" /* SurveyQuestionEditorProperties */](this.obj, properties, this.onCanShowPropertyCallback, this.options, tabItem), tabItem.name); propertyTab.title = tabItem.title; tabs.push(propertyTab); } } }; return SurveyQuestionEditor; }()); var SurveyQuestionEditorTab = (function () { function SurveyQuestionEditorTab(obj, properties, _name) { if (properties === void 0) { properties = null; } this.obj = obj; this.properties = properties; this._name = _name; } SurveyQuestionEditorTab.prototype.koAfterRender = function (elements, context) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_utils__["c" /* focusFirstControl */])(elements); }; Object.defineProperty(SurveyQuestionEditorTab.prototype, "name", { get: function () { return this._name; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorTab.prototype, "title", { get: function () { if (this.titleValue) return this.titleValue; var str = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.tabs." + this.name); return str ? str : this.name; }, set: function (value) { this.titleValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorTab.prototype, "htmlTemplate", { get: function () { return "questioneditortab"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorTab.prototype, "templateObject", { get: function () { return this; }, enumerable: true, configurable: true }); SurveyQuestionEditorTab.prototype.hasError = function () { return this.properties.hasError(); }; SurveyQuestionEditorTab.prototype.beforeShow = function () { this.properties.beforeShow(); }; SurveyQuestionEditorTab.prototype.reset = function () { this.properties.reset(); }; SurveyQuestionEditorTab.prototype.apply = function () { this.properties.apply(); }; SurveyQuestionEditorTab.prototype.doCloseWindow = function () { }; SurveyQuestionEditorTab.prototype.getValue = function (property) { return property.getPropertyValue(this.obj); }; return SurveyQuestionEditorTab; }()); /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**! * Sortable * @author RubaXa <trash@rubaxa.org> * @license MIT */ (function sortableModule(factory) { "use strict"; if (true) { !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (typeof module != "undefined" && typeof module.exports != "undefined") { module.exports = factory(); } else { /* jshint sub:true */ window["Sortable"] = factory(); } })(function sortableFactory() { "use strict"; if (typeof window == "undefined" || !window.document) { return function sortableError() { throw new Error("Sortable.js requires a window with a document"); }; } var dragEl, parentEl, ghostEl, cloneEl, rootEl, nextEl, lastDownEl, scrollEl, scrollParentEl, scrollCustomFn, lastEl, lastCSS, lastParentCSS, oldIndex, newIndex, activeGroup, putSortable, autoScroll = {}, tapEvt, touchEvt, moved, /** @const */ R_SPACE = /\s+/g, R_FLOAT = /left|right|inline/, expando = 'Sortable' + (new Date).getTime(), win = window, document = win.document, parseInt = win.parseInt, $ = win.jQuery || win.Zepto, Polymer = win.Polymer, captureMode = false, supportDraggable = !!('draggable' in document.createElement('div')), supportCssPointerEvents = (function (el) { // false when IE11 if (!!navigator.userAgent.match(/Trident.*rv[ :]?11\./)) { return false; } el = document.createElement('x'); el.style.cssText = 'pointer-events:auto'; return el.style.pointerEvents === 'auto'; })(), _silent = false, abs = Math.abs, min = Math.min, savedInputChecked = [], touchDragOverListeners = [], _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (rootEl && options.scroll) { var _this = rootEl[expando], el, rect, sens = options.scrollSensitivity, speed = options.scrollSpeed, x = evt.clientX, y = evt.clientY, winWidth = window.innerWidth, winHeight = window.innerHeight, vx, vy, scrollOffsetX, scrollOffsetY ; // Delect scrollEl if (scrollParentEl !== rootEl) { scrollEl = options.scroll; scrollParentEl = rootEl; scrollCustomFn = options.scrollFn; if (scrollEl === true) { scrollEl = rootEl; do { if ((scrollEl.offsetWidth < scrollEl.scrollWidth) || (scrollEl.offsetHeight < scrollEl.scrollHeight) ) { break; } /* jshint boss:true */ } while (scrollEl = scrollEl.parentNode); } } if (scrollEl) { el = scrollEl; rect = scrollEl.getBoundingClientRect(); vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens); vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens); } if (!(vx || vy)) { vx = (winWidth - x <= sens) - (x <= sens); vy = (winHeight - y <= sens) - (y <= sens); /* jshint expr:true */ (vx || vy) && (el = win); } if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) { autoScroll.el = el; autoScroll.vx = vx; autoScroll.vy = vy; clearInterval(autoScroll.pid); if (el) { autoScroll.pid = setInterval(function () { scrollOffsetY = vy ? vy * speed : 0; scrollOffsetX = vx ? vx * speed : 0; if ('function' === typeof(scrollCustomFn)) { return scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt); } if (el === win) { win.scrollTo(win.pageXOffset + scrollOffsetX, win.pageYOffset + scrollOffsetY); } else { el.scrollTop += scrollOffsetY; el.scrollLeft += scrollOffsetX; } }, 24); } } } }, 30), _prepareGroup = function (options) { function toFn(value, pull) { if (value === void 0 || value === true) { value = group.name; } if (typeof value === 'function') { return value; } else { return function (to, from) { var fromGroup = from.options.group.name; return pull ? value : value && (value.join ? value.indexOf(fromGroup) > -1 : (fromGroup == value) ); }; } } var group = {}; var originalGroup = options.group; if (!originalGroup || typeof originalGroup != 'object') { originalGroup = {name: originalGroup}; } group.name = originalGroup.name; group.checkPull = toFn(originalGroup.pull, true); group.checkPut = toFn(originalGroup.put); group.revertClone = originalGroup.revertClone; options.group = group; } ; /** * @class Sortable * @param {HTMLElement} el * @param {Object} [options] */ function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { throw 'Sortable: `el` must be HTMLElement, and not ' + {}.toString.call(el); } this.el = el; // root element this.options = options = _extend({}, options); // Export instance el[expando] = this; // Default options var defaults = { group: Math.random(), sort: true, disabled: false, store: null, handle: null, scroll: true, scrollSensitivity: 30, scrollSpeed: 10, draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*', ghostClass: 'sortable-ghost', chosenClass: 'sortable-chosen', dragClass: 'sortable-drag', ignore: 'a, img', filter: null, preventOnFilter: true, animation: 0, setData: function (dataTransfer, dragEl) { dataTransfer.setData('Text', dragEl.textContent); }, dropBubble: false, dragoverBubble: false, dataIdAttr: 'data-id', delay: 0, forceFallback: false, fallbackClass: 'sortable-fallback', fallbackOnBody: false, fallbackTolerance: 0, fallbackOffset: {x: 0, y: 0} }; // Set default options for (var name in defaults) { !(name in options) && (options[name] = defaults[name]); } _prepareGroup(options); // Bind all private methods for (var fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } } // Setup drag mode this.nativeDraggable = options.forceFallback ? false : supportDraggable; // Bind events _on(el, 'mousedown', this._onTapStart); _on(el, 'touchstart', this._onTapStart); _on(el, 'pointerdown', this._onTapStart); if (this.nativeDraggable) { _on(el, 'dragover', this); _on(el, 'dragenter', this); } touchDragOverListeners.push(this._onDragOver); // Restore sorting options.store && this.sort(options.store.get(this)); } Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, _onTapStart: function (/** Event|TouchEvent */evt) { var _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, type = evt.type, touch = evt.touches && evt.touches[0], target = (touch || evt).target, originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0]) || target, filter = options.filter, startIndex; _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. if (dragEl) { return; } if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { return; // only left button or enabled } target = _closest(target, options.draggable, el); if (!target) { return; } if (lastDownEl === target) { // Ignoring duplicate `down` return; } // Get the index of the dragged element within its parent startIndex = _index(target, options.draggable); // Check filter if (typeof filter === 'function') { if (filter.call(this, evt, target, this)) { _dispatchEvent(_this, originalTarget, 'filter', target, el, startIndex); preventOnFilter && evt.preventDefault(); return; // cancel dnd } } else if (filter) { filter = filter.split(',').some(function (criteria) { criteria = _closest(originalTarget, criteria.trim(), el); if (criteria) { _dispatchEvent(_this, criteria, 'filter', target, el, startIndex); return true; } }); if (filter) { preventOnFilter && evt.preventDefault(); return; // cancel dnd } } if (options.handle && !_closest(originalTarget, options.handle, el)) { return; } // Prepare `dragstart` this._prepareDragStart(evt, touch, target, startIndex); }, _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex) { var _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && (target.parentNode === el)) { tapEvt = evt; rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; oldIndex = startIndex; this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; dragEl.style['will-change'] = 'transform'; dragStartFn = function () { // Delayed drag has been triggered // we can re-enable the events: touchmove/mousemove _this._disableDelayedDrag(); // Make the element draggable dragEl.draggable = _this.nativeDraggable; // Chosen item _toggleClass(dragEl, options.chosenClass, true); // Bind the events: dragstart/dragend _this._triggerDragStart(evt, touch); // Drag start event _dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, oldIndex); }; // Disable "draggable" options.ignore.split(',').forEach(function (criteria) { _find(dragEl, criteria.trim(), _disableDraggable); }); _on(ownerDocument, 'mouseup', _this._onDrop); _on(ownerDocument, 'touchend', _this._onDrop); _on(ownerDocument, 'touchcancel', _this._onDrop); _on(ownerDocument, 'pointercancel', _this._onDrop); _on(ownerDocument, 'selectstart', _this); if (options.delay) { // If the user moves the pointer or let go the click or touch // before the delay has been reached: // disable the delayed drag _on(ownerDocument, 'mouseup', _this._disableDelayedDrag); _on(ownerDocument, 'touchend', _this._disableDelayedDrag); _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); _on(ownerDocument, 'mousemove', _this._disableDelayedDrag); _on(ownerDocument, 'touchmove', _this._disableDelayedDrag); _on(ownerDocument, 'pointermove', _this._disableDelayedDrag); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, _disableDelayedDrag: function () { var ownerDocument = this.el.ownerDocument; clearTimeout(this._dragStartTimer); _off(ownerDocument, 'mouseup', this._disableDelayedDrag); _off(ownerDocument, 'touchend', this._disableDelayedDrag); _off(ownerDocument, 'touchcancel', this._disableDelayedDrag); _off(ownerDocument, 'mousemove', this._disableDelayedDrag); _off(ownerDocument, 'touchmove', this._disableDelayedDrag); _off(ownerDocument, 'pointermove', this._disableDelayedDrag); }, _triggerDragStart: function (/** Event */evt, /** Touch */touch) { touch = touch || (evt.pointerType == 'touch' ? evt : null); if (touch) { // Touch device support tapEvt = { target: dragEl, clientX: touch.clientX, clientY: touch.clientY }; this._onDragStart(tapEvt, 'touch'); } else if (!this.nativeDraggable) { this._onDragStart(tapEvt, true); } else { _on(dragEl, 'dragend', this); _on(rootEl, 'dragstart', this._onDragStart); } try { if (document.selection) { // Timeout neccessary for IE9 setTimeout(function () { document.selection.empty(); }); } else { window.getSelection().removeAllRanges(); } } catch (err) { } }, _dragStarted: function () { if (rootEl && dragEl) { var options = this.options; // Apply effect _toggleClass(dragEl, options.ghostClass, true); _toggleClass(dragEl, options.dragClass, false); Sortable.active = this; // Drag start event _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); } else { this._nulling(); } }, _emulateDragOver: function () { if (touchEvt) { if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) { return; } this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; if (!supportCssPointerEvents) { _css(ghostEl, 'display', 'none'); } var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), parent = target, i = touchDragOverListeners.length; if (parent) { do { if (parent[expando]) { while (i--) { touchDragOverListeners[i]({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target: target, rootEl: parent }); } break; } target = parent; // store last element } /* jshint boss:true */ while (parent = parent.parentNode); } if (!supportCssPointerEvents) { _css(ghostEl, 'display', ''); } } }, _onTouchMove: function (/**TouchEvent*/evt) { if (tapEvt) { var options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, dx = (touch.clientX - tapEvt.clientX) + fallbackOffset.x, dy = (touch.clientY - tapEvt.clientY) + fallbackOffset.y, translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; // only set the status to dragging, when we are actually dragging if (!Sortable.active) { if (fallbackTolerance && min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance ) { return; } this._dragStarted(); } // as well as creating the ghost element on the document body this._appendGhost(); moved = true; touchEvt = touch; _css(ghostEl, 'webkitTransform', translate3d); _css(ghostEl, 'mozTransform', translate3d); _css(ghostEl, 'msTransform', translate3d); _css(ghostEl, 'transform', translate3d); evt.preventDefault(); } }, _appendGhost: function () { if (!ghostEl) { var rect = dragEl.getBoundingClientRect(), css = _css(dragEl), options = this.options, ghostRect; ghostEl = dragEl.cloneNode(true); _toggleClass(ghostEl, options.ghostClass, false); _toggleClass(ghostEl, options.fallbackClass, true); _toggleClass(ghostEl, options.dragClass, true); _css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10)); _css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10)); _css(ghostEl, 'width', rect.width); _css(ghostEl, 'height', rect.height); _css(ghostEl, 'opacity', '0.8'); _css(ghostEl, 'position', 'fixed'); _css(ghostEl, 'zIndex', '100000'); _css(ghostEl, 'pointerEvents', 'none'); options.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl); // Fixing dimensions. ghostRect = ghostEl.getBoundingClientRect(); _css(ghostEl, 'width', rect.width * 2 - ghostRect.width); _css(ghostEl, 'height', rect.height * 2 - ghostRect.height); } }, _onDragStart: function (/**Event*/evt, /**boolean*/useFallback) { var dataTransfer = evt.dataTransfer, options = this.options; this._offUpEvents(); if (activeGroup.checkPull(this, this, dragEl, evt)) { cloneEl = _clone(dragEl); cloneEl.draggable = false; cloneEl.style['will-change'] = ''; _css(cloneEl, 'display', 'none'); _toggleClass(cloneEl, this.options.chosenClass, false); rootEl.insertBefore(cloneEl, dragEl); _dispatchEvent(this, rootEl, 'clone', dragEl); } _toggleClass(dragEl, options.dragClass, true); if (useFallback) { if (useFallback === 'touch') { // Bind touch events _on(document, 'touchmove', this._onTouchMove); _on(document, 'touchend', this._onDrop); _on(document, 'touchcancel', this._onDrop); _on(document, 'pointermove', this._onTouchMove); _on(document, 'pointerup', this._onDrop); } else { // Old brwoser _on(document, 'mousemove', this._onTouchMove); _on(document, 'mouseup', this._onDrop); } this._loopId = setInterval(this._emulateDragOver, 50); } else { if (dataTransfer) { dataTransfer.effectAllowed = 'move'; options.setData && options.setData.call(this, dataTransfer, dragEl); } _on(document, 'drop', this); setTimeout(this._dragStarted, 0); } }, _onDragOver: function (/**Event*/evt) { var el = this.el, target, dragRect, targetRect, revert, options = this.options, group = options.group, activeSortable = Sortable.active, isOwner = (activeGroup === group), isMovingBetweenSortable = false, canSort = options.sort; if (evt.preventDefault !== void 0) { evt.preventDefault(); !options.dragoverBubble && evt.stopPropagation(); } if (dragEl.animated) { return; } moved = true; if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list : ( putSortable === this || ( (activeSortable.lastPullMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt) ) ) ) && (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback ) { // Smart auto-scrolling _autoScroll(evt, options, this.el); if (_silent) { return; } target = _closest(evt.target, options.draggable, el); dragRect = dragEl.getBoundingClientRect(); if (putSortable !== this) { putSortable = this; isMovingBetweenSortable = true; } if (revert) { _cloneHide(activeSortable, true); parentEl = rootEl; // actualization if (cloneEl || nextEl) { rootEl.insertBefore(dragEl, cloneEl || nextEl); } else if (!canSort) { rootEl.appendChild(dragEl); } return; } if ((el.children.length === 0) || (el.children[0] === ghostEl) || (el === evt.target) && (_ghostIsLast(el, evt)) ) { //assign target only if condition is true if (el.children.length !== 0 && el.children[0] !== ghostEl && el === evt.target) { target = el.lastElementChild; } if (target) { if (target.animated) { return; } targetRect = target.getBoundingClientRect(); } _cloneHide(activeSortable, isOwner); if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt) !== false) { if (!dragEl.contains(el)) { el.appendChild(dragEl); parentEl = el; // actualization } this._animate(dragRect, dragEl); target && this._animate(targetRect, target); } } else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) { if (lastEl !== target) { lastEl = target; lastCSS = _css(target); lastParentCSS = _css(target.parentNode); } targetRect = target.getBoundingClientRect(); var width = targetRect.right - targetRect.left, height = targetRect.bottom - targetRect.top, floating = R_FLOAT.test(lastCSS.cssFloat + lastCSS.display) || (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0), isWide = (target.offsetWidth > dragEl.offsetWidth), isLong = (target.offsetHeight > dragEl.offsetHeight), halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5, nextSibling = target.nextElementSibling, after = false ; if (floating) { var elTop = dragEl.offsetTop, tgTop = target.offsetTop; if (elTop === tgTop) { after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide; } else if (target.previousElementSibling === dragEl || dragEl.previousElementSibling === target) { after = (evt.clientY - targetRect.top) / height > 0.5; } else { after = tgTop > elTop; } } else if (!isMovingBetweenSortable) { after = (nextSibling !== dragEl) && !isLong || halfway && isLong; } var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { after = (moveVector === 1); } _silent = true; setTimeout(_unsilent, 30); _cloneHide(activeSortable, isOwner); if (!dragEl.contains(el)) { if (after && !nextSibling) { el.appendChild(dragEl); } else { target.parentNode.insertBefore(dragEl, after ? nextSibling : target); } } parentEl = dragEl.parentNode; // actualization this._animate(dragRect, dragEl); this._animate(targetRect, target); } } } }, _animate: function (prevRect, target) { var ms = this.options.animation; if (ms) { var currentRect = target.getBoundingClientRect(); if (prevRect.nodeType === 1) { prevRect = prevRect.getBoundingClientRect(); } _css(target, 'transition', 'none'); _css(target, 'transform', 'translate3d(' + (prevRect.left - currentRect.left) + 'px,' + (prevRect.top - currentRect.top) + 'px,0)' ); target.offsetWidth; // repaint _css(target, 'transition', 'all ' + ms + 'ms'); _css(target, 'transform', 'translate3d(0,0,0)'); clearTimeout(target.animated); target.animated = setTimeout(function () { _css(target, 'transition', ''); _css(target, 'transform', ''); target.animated = false; }, ms); } }, _offUpEvents: function () { var ownerDocument = this.el.ownerDocument; _off(document, 'touchmove', this._onTouchMove); _off(document, 'pointermove', this._onTouchMove); _off(ownerDocument, 'mouseup', this._onDrop); _off(ownerDocument, 'touchend', this._onDrop); _off(ownerDocument, 'pointerup', this._onDrop); _off(ownerDocument, 'touchcancel', this._onDrop); _off(ownerDocument, 'pointercancel', this._onDrop); _off(ownerDocument, 'selectstart', this); }, _onDrop: function (/**Event*/evt) { var el = this.el, options = this.options; clearInterval(this._loopId); clearInterval(autoScroll.pid); clearTimeout(this._dragStartTimer); // Unbind events _off(document, 'mousemove', this._onTouchMove); if (this.nativeDraggable) { _off(document, 'drop', this); _off(el, 'dragstart', this._onDragStart); } this._offUpEvents(); if (evt) { if (moved) { evt.preventDefault(); !options.dropBubble && evt.stopPropagation(); } ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); if (rootEl === parentEl || Sortable.active.lastPullMode !== 'clone') { // Remove clone cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { _off(dragEl, 'dragend', this); } _disableDraggable(dragEl); dragEl.style['will-change'] = ''; // Remove class's _toggleClass(dragEl, this.options.ghostClass, false); _toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event _dispatchEvent(this, rootEl, 'unchoose', dragEl, rootEl, oldIndex); if (rootEl !== parentEl) { newIndex = _index(dragEl, options.draggable); if (newIndex >= 0) { // Add event _dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex); // Remove event _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); // drag from one list and drop into another _dispatchEvent(null, parentEl, 'sort', dragEl, rootEl, oldIndex, newIndex); _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); } } else { if (dragEl.nextSibling !== nextEl) { // Get the index of the dragged element within its parent newIndex = _index(dragEl, options.draggable); if (newIndex >= 0) { // drag & drop within the same list _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); } } } if (Sortable.active) { /* jshint eqnull:true */ if (newIndex == null || newIndex === -1) { newIndex = oldIndex; } _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); // Save sorting this.save(); } } } this._nulling(); }, _nulling: function() { rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = scrollEl = scrollParentEl = tapEvt = touchEvt = moved = newIndex = lastEl = lastCSS = putSortable = activeGroup = Sortable.active = null; savedInputChecked.forEach(function (el) { el.checked = true; }); savedInputChecked.length = 0; }, handleEvent: function (/**Event*/evt) { switch (evt.type) { case 'drop': case 'dragend': this._onDrop(evt); break; case 'dragover': case 'dragenter': if (dragEl) { this._onDragOver(evt); _globalDragOver(evt); } break; case 'selectstart': evt.preventDefault(); break; } }, /** * Serializes the item into an array of string. * @returns {String[]} */ toArray: function () { var order = [], el, children = this.el.children, i = 0, n = children.length, options = this.options; for (; i < n; i++) { el = children[i]; if (_closest(el, options.draggable, this.el)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } } return order; }, /** * Sorts the elements according to the array. * @param {String[]} order order of the items */ sort: function (order) { var items = {}, rootEl = this.el; this.toArray().forEach(function (id, i) { var el = rootEl.children[i]; if (_closest(el, this.options.draggable, rootEl)) { items[id] = el; } }, this); order.forEach(function (id) { if (items[id]) { rootEl.removeChild(items[id]); rootEl.appendChild(items[id]); } }); }, /** * Save the current sorting */ save: function () { var store = this.options.store; store && store.set(this); }, /** * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. * @param {HTMLElement} el * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ closest: function (el, selector) { return _closest(el, selector || this.options.draggable, this.el); }, /** * Set/get option * @param {string} name * @param {*} [value] * @returns {*} */ option: function (name, value) { var options = this.options; if (value === void 0) { return options[name]; } else { options[name] = value; if (name === 'group') { _prepareGroup(options); } } }, /** * Destroy */ destroy: function () { var el = this.el; el[expando] = null; _off(el, 'mousedown', this._onTapStart); _off(el, 'touchstart', this._onTapStart); _off(el, 'pointerdown', this._onTapStart); if (this.nativeDraggable) { _off(el, 'dragover', this); _off(el, 'dragenter', this); } // Remove draggable attributes Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { el.removeAttribute('draggable'); }); touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1); this._onDrop(); this.el = el = null; } }; function _cloneHide(sortable, state) { if (sortable.lastPullMode !== 'clone') { state = true; } if (cloneEl && (cloneEl.state !== state)) { _css(cloneEl, 'display', state ? 'none' : ''); if (!state) { if (cloneEl.state) { if (sortable.options.group.revertClone) { rootEl.insertBefore(cloneEl, nextEl); sortable._animate(dragEl, cloneEl); } else { rootEl.insertBefore(cloneEl, dragEl); } } } cloneEl.state = state; } } function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) { if (el) { ctx = ctx || document; do { if ((selector === '>*' && el.parentNode === ctx) || _matches(el, selector)) { return el; } /* jshint boss:true */ } while (el = _getParentOrHost(el)); } return null; } function _getParentOrHost(el) { var parent = el.host; return (parent && parent.nodeType) ? parent : el.parentNode; } function _globalDragOver(/**Event*/evt) { if (evt.dataTransfer) { evt.dataTransfer.dropEffect = 'move'; } evt.preventDefault(); } function _on(el, event, fn) { el.addEventListener(event, fn, captureMode); } function _off(el, event, fn) { el.removeEventListener(event, fn, captureMode); } function _toggleClass(el, name, state) { if (el) { if (el.classList) { el.classList[state ? 'add' : 'remove'](name); } else { var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); } } } function _css(el, prop, val) { var style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { val = document.defaultView.getComputedStyle(el, ''); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { if (!(prop in style)) { prop = '-webkit-' + prop; } style[prop] = val + (typeof val === 'string' ? '' : 'px'); } } } function _find(ctx, tagName, iterator) { if (ctx) { var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; if (iterator) { for (; i < n; i++) { iterator(list[i], i); } } return list; } return []; } function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { sortable = (sortable || rootEl[expando]); var evt = document.createEvent('Event'), options = sortable.options, onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); evt.initEvent(name, true, true); evt.to = rootEl; evt.from = fromEl || rootEl; evt.item = targetEl || rootEl; evt.clone = cloneEl; evt.oldIndex = startIndex; evt.newIndex = newIndex; rootEl.dispatchEvent(evt); if (options[onName]) { options[onName].call(sortable, evt); } } function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) { var evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; evt = document.createEvent('Event'); evt.initEvent('move', true, true); evt.to = toEl; evt.from = fromEl; evt.dragged = dragEl; evt.draggedRect = dragRect; evt.related = targetEl || toEl; evt.relatedRect = targetRect || toEl.getBoundingClientRect(); evt.willInsertAfter = willInsertAfter; fromEl.dispatchEvent(evt); if (onMoveFn) { retVal = onMoveFn.call(sortable, evt, originalEvt); } return retVal; } function _disableDraggable(el) { el.draggable = false; } function _unsilent() { _silent = false; } /** @returns {HTMLElement|false} */ function _ghostIsLast(el, evt) { var lastEl = el.lastElementChild, rect = lastEl.getBoundingClientRect(); // 5 — min delta // abs — нельзя добавлять, а то глюки при наведении сверху return (evt.clientY - (rect.top + rect.height) > 5) || (evt.clientX - (rect.left + rect.width) > 5); } /** * Generate id * @param {HTMLElement} el * @returns {String} * @private */ function _generateId(el) { var str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; while (i--) { sum += str.charCodeAt(i); } return sum.toString(36); } /** * Returns the index of an element within its parent for a selected set of * elements * @param {HTMLElement} el * @param {selector} selector * @return {number} */ function _index(el, selector) { var index = 0; if (!el || !el.parentNode) { return -1; } while (el && (el = el.previousElementSibling)) { if ((el.nodeName.toUpperCase() !== 'TEMPLATE') && (selector === '>*' || _matches(el, selector))) { index++; } } return index; } function _matches(/**HTMLElement*/el, /**String*/selector) { if (el) { selector = selector.split('.'); var tag = selector.shift().toUpperCase(), re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g'); return ( (tag === '' || el.nodeName.toUpperCase() == tag) && (!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length) ); } return false; } function _throttle(callback, ms) { var args, _this; return function () { if (args === void 0) { args = arguments; _this = this; setTimeout(function () { if (args.length === 1) { callback.call(_this, args[0]); } else { callback.apply(_this, args); } args = void 0; }, ms); } }; } function _extend(dst, src) { if (dst && src) { for (var key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } } } return dst; } function _clone(el) { return $ ? $(el).clone(true)[0] : (Polymer && Polymer.dom ? Polymer.dom(el).cloneNode(true) : el.cloneNode(true) ); } function _saveInputCheckedState(root) { var inputs = root.getElementsByTagName('input'); var idx = inputs.length; while (idx--) { var el = inputs[idx]; el.checked && savedInputChecked.push(el); } } // Fixed #973: _on(document, 'touchmove', function (evt) { if (Sortable.active) { evt.preventDefault(); } }); try { window.addEventListener('test', null, Object.defineProperty({}, 'passive', { get: function () { captureMode = { capture: false, passive: false }; } })); } catch (err) {} // Export utils Sortable.utils = { on: _on, off: _off, css: _css, find: _find, is: function (el, selector) { return !!_closest(el, selector, el); }, extend: _extend, throttle: _throttle, closest: _closest, toggleClass: _toggleClass, clone: _clone, index: _index }; /** * Create sortable instance * @param {HTMLElement} el * @param {Object} [options] */ Sortable.create = function (el, options) { return new Sortable(el, options); }; // Export Sortable.version = '1.6.1'; return Sortable; }); /***/ }), /* 11 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyEditors_propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjectProperty; }); var SurveyObjectProperty = (function () { function SurveyObjectProperty(property, onPropertyChanged, propertyEditorOptions) { if (onPropertyChanged === void 0) { onPropertyChanged = null; } if (propertyEditorOptions === void 0) { propertyEditorOptions = null; } this.property = property; this.koIsShowEditor = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.onPropertyChanged = onPropertyChanged; this.name = this.property.name; this.disabled = property["readOnly"]; var self = this; var onItemChanged = function (newValue) { self.onEditorValueChanged(newValue); }; this.editor = __WEBPACK_IMPORTED_MODULE_1__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].createEditor(property, onItemChanged); this.editor.onGetLocale = this.doOnGetLocale; this.editor.options = propertyEditorOptions; this.editorType = this.editor.editorType; this.isActive = false; } Object.defineProperty(SurveyObjectProperty.prototype, "displayName", { get: function () { return this.editor.displayName; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "title", { get: function () { return this.editor.title; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "isActive", { get: function () { return this.isActiveValue; }, set: function (val) { if (this.isActive == val) return; this.isActiveValue = val; this.koIsShowEditor(!this.disabled && (this.editor.alwaysShowEditor || this.isActive)); this.editor.activate(); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "koValue", { get: function () { return this.editor.koValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "koText", { get: function () { return this.editor.koText; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "koIsDefault", { get: function () { return this.editor.koIsDefault; }, enumerable: true, configurable: true }); SurveyObjectProperty.prototype.doOnGetLocale = function () { if (this.object && this.object["getLocale"]) return this.object.getLocale(); return ""; }; Object.defineProperty(SurveyObjectProperty.prototype, "object", { get: function () { return this.objectValue; }, set: function (value) { this.objectValue = value; this.editor.object = value; }, enumerable: true, configurable: true }); SurveyObjectProperty.prototype.onEditorValueChanged = function (newValue) { if (this.onPropertyChanged && this.object) this.onPropertyChanged(this, newValue); }; return SurveyObjectProperty; }()); /***/ }), /* 12 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorBase; }); var SurveyPropertyEditorBase = (function () { function SurveyPropertyEditorBase(property) { this.editingValue_ = null; this.isApplyinNewValue = false; this.valueUpdatingCounter = 0; this.optionsValue = null; this.isRequriedValue = false; this.isCustomDisplayName = false; this.isTabProperty = false; this.isInplaceProperty = false; this.iskoValueChanging = false; this.property_ = property; var self = this; this.koValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koValue.subscribe(function (newValue) { self.onkoValueChanged(newValue); }); this.koText = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.getValueText(self.koValue()); }); this.koIsDefault = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.property ? self.property.isDefaultValue(self.koValue()) : false; }); this.koHasError = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koErrorText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.setIsRequired(); this.setTitleAndDisplayName(); } SurveyPropertyEditorBase.prototype.setup = function () { }; SurveyPropertyEditorBase.prototype.beforeShow = function () { }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "editorType", { get: function () { throw "editorType is not defined"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "property", { get: function () { return this.property_; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "defaultValue", { get: function () { return this.property.defaultValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "editablePropertyName", { get: function () { return this.property ? this.property.name : ""; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "readOnly", { get: function () { return this.property ? this.property.readOnly : false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "alwaysShowEditor", { get: function () { return false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "title", { get: function () { return this.titleValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "isDiplayNameVisible", { get: function () { return ((!this.isTabProperty || !this.isModal) && !this.isInplaceProperty && this.displayName !== "."); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "displayName", { get: function () { return this.displayNameValue; }, set: function (val) { this.isCustomDisplayName = true; this.displayNameValue = val; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "showDisplayNameOnTop", { get: function () { return this.isDiplayNameVisible && this.canShowDisplayNameOnTop; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "canShowDisplayNameOnTop", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "contentTemplateName", { get: function () { var res = "propertyeditor"; if (this.isModal) { res += "-modalcontent"; } else { res += "-" + this.editorType; } return res; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "isModal", { get: function () { return false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "object", { get: function () { return this.objectValue; }, set: function (value) { var _this = this; this.objectValue = value; if (typeof value.registerFunctionOnPropertyValueChanged === "function") { value.registerFunctionOnPropertyValueChanged(this.property.name, function () { return _this.updateValue(); }, this.property.name); } this.setIsRequired(); this.setTitleAndDisplayName(); this.setObject(this.object); this.updateValue(); if (this.options && this.property) { this.options.onPropertyEditorObjectSetCallback(this.property.name, this.object, this); } }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.getValueText = function (value) { return value; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "editingValue", { get: function () { return this.editingValue_; }, set: function (value) { value = this.getCorrectedValue(value); this.setValueCore(value); this.onValueChanged(); }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.hasError = function () { this.koHasError(this.checkForErrors()); return this.koHasError(); }; SurveyPropertyEditorBase.prototype.getLocString = function (name) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(name); }; SurveyPropertyEditorBase.prototype.hasLocString = function (name) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].hasString(name); }; SurveyPropertyEditorBase.prototype.checkForErrors = function () { var errorText = ""; if (this.isRequired) { var er = this.isValueEmpty(this.koValue()); if (er) { errorText = this.getLocString("pe.propertyIsEmpty"); } } if (!errorText && this.property && this.options && this.options.onGetErrorTextOnValidationCallback) { errorText = this.options.onGetErrorTextOnValidationCallback(this.property.name, this.object, this.koValue()); } this.koErrorText(errorText); return errorText !== ""; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "isRequired", { get: function () { return this.isRequriedValue; }, enumerable: true, configurable: true }); //TODO remove this function, replace it with property.isRequired later SurveyPropertyEditorBase.prototype.setIsRequired = function () { this.isRequriedValue = false; if (!this.property || !this.object || !this.object.getType) return; var jsonClass = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData.findClass(this.object.getType()); while (jsonClass) { var reqProperties = jsonClass.requiredProperties; if (reqProperties) { this.isRequriedValue = reqProperties.indexOf(this.property.name) > -1; if (this.isRequriedValue) return; } if (!jsonClass.parentName) return; jsonClass = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData.findClass(jsonClass.parentName); } }; SurveyPropertyEditorBase.prototype.setTitleAndDisplayName = function () { if (this.isCustomDisplayName) return; this.displayNameValue = this.property ? this.property.name : ""; this.titleValue = ""; if (!this.property) return; var locName = this.property.name; this.displayNameValue = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getPropertyName(locName); var title = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getPropertyTitle(locName); this.titleValue = title; }; SurveyPropertyEditorBase.prototype.onBeforeApply = function () { }; SurveyPropertyEditorBase.prototype.apply = function () { if (this.hasError()) return; this.onBeforeApply(); this.isApplyinNewValue = true; this.koValue(this.editingValue); this.isApplyinNewValue = false; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "locale", { get: function () { if (this.onGetLocale) return this.onGetLocale(); return ""; }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.getLocale = function () { return this.locale; }; SurveyPropertyEditorBase.prototype.getMarkdownHtml = function (text) { return text; }; SurveyPropertyEditorBase.prototype.getProcessedText = function (text) { return text; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "options", { get: function () { return this.optionsValue; }, set: function (value) { this.optionsValue = value; this.onOptionsChanged(); }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.onOptionsChanged = function () { }; SurveyPropertyEditorBase.prototype.setValueCore = function (value) { this.editingValue_ = value; }; SurveyPropertyEditorBase.prototype.setObject = function (value) { if (this.options) { var editorOptions = this.createEditorOptions(); this.options.onSetPropertyEditorOptionsCallback(this.editablePropertyName, value, editorOptions); this.onSetEditorOptions(editorOptions); } }; SurveyPropertyEditorBase.prototype.activate = function () { }; SurveyPropertyEditorBase.prototype.createEditorOptions = function () { return {}; }; SurveyPropertyEditorBase.prototype.onSetEditorOptions = function (editorOptions) { }; SurveyPropertyEditorBase.prototype.onValueChanged = function () { }; SurveyPropertyEditorBase.prototype.getCorrectedValue = function (value) { return value; }; SurveyPropertyEditorBase.prototype.beginValueUpdating = function () { this.valueUpdatingCounter++; }; SurveyPropertyEditorBase.prototype.endValueUpdating = function () { if (this.valueUpdatingCounter > 0) { this.valueUpdatingCounter--; } }; SurveyPropertyEditorBase.prototype.updateValue = function () { this.beginValueUpdating(); this.koValue(this.getValue()); this.editingValue = this.koValue(); if (this.onValueUpdated) this.onValueUpdated(this.editingValue); this.endValueUpdating(); }; SurveyPropertyEditorBase.prototype.getValue = function () { return this.property && this.object ? this.property.getPropertyValue(this.object) : null; }; SurveyPropertyEditorBase.prototype.onkoValueChanged = function (newValue) { if (this.valueUpdatingCounter > 0 || this.iskoValueChanging) return; this.iskoValueChanging = true; newValue = this.getCorrectedValue(newValue); if (this.options && this.property && this.object) { var options = { propertyName: this.property.name, obj: this.object, value: newValue, newValue: null, doValidation: false }; this.options.onValueChangingCallback(options); if (!this.isValueEmpty(options.newValue)) { this.koValue(options.newValue); } if (options.doValidation) { this.hasError(); } } if (!this.isApplyinNewValue) { this.editingValue = newValue; } this.iskoValueChanging = false; if (this.property && this.object && this.getValue() == newValue) return; if (this.onChanged != null) this.onChanged(newValue); }; SurveyPropertyEditorBase.prototype.isValueEmpty = function (val) { //TODO remove the line if (__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Base"]["isValueEmpty"]) return __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Base"]["isValueEmpty"](val); return __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isValueEmpty(val); }; return SurveyPropertyEditorBase; }()); /***/ }), /* 13 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyItemsEditor; }); var SurveyPropertyItemsEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyItemsEditor, _super); function SurveyPropertyItemsEditor(property) { var _this = _super.call(this, property) || this; _this.sortableOptions = { handle: ".svd-drag-handle", animation: 150 }; _this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.editingValue = []; _this.koAllowAddRemoveItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); var self = _this; self.onDeleteClick = function (item) { self.koItems.remove(item); }; self.onClearClick = function (item) { self.koItems.removeAll(); }; self.onAddClick = function () { self.AddItem(); }; return _this; } SurveyPropertyItemsEditor.prototype.getValueText = function (value) { var len = value ? value.length : 0; return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("pe.items")["format"](len); }; SurveyPropertyItemsEditor.prototype.getCorrectedValue = function (value) { if (value == null || !Array.isArray(value)) value = []; return value; }; SurveyPropertyItemsEditor.prototype.createEditorOptions = function () { return { allowAddRemoveItems: true }; }; SurveyPropertyItemsEditor.prototype.onSetEditorOptions = function (editorOptions) { this.koAllowAddRemoveItems(editorOptions.allowAddRemoveItems); }; SurveyPropertyItemsEditor.prototype.AddItem = function () { this.koItems.push(this.createNewEditorItem()); }; SurveyPropertyItemsEditor.prototype.setupItems = function () { this.koItems(this.getItemsFromValue(this.editingValue)); }; SurveyPropertyItemsEditor.prototype.onValueChanged = function () { if (this.isShowingModal) { this.setupItems(); } }; SurveyPropertyItemsEditor.prototype.setup = function () { _super.prototype.setup.call(this); this.updateValue(); }; SurveyPropertyItemsEditor.prototype.getItemsFromValue = function (value) { if (value === void 0) { value = null; } var items = []; if (!value) value = this.editingValue; for (var i = 0; i < value.length; i++) { items.push(this.createEditorItem(value[i])); } return items; }; SurveyPropertyItemsEditor.prototype.onBeforeApply = function () { var items = []; var internalItems = this.koItems(); for (var i = 0; i < internalItems.length; i++) { items.push(this.createItemFromEditorItem(internalItems[i])); } this.setValueCore(items); }; SurveyPropertyItemsEditor.prototype.createNewEditorItem = function () { throw "Override 'createNewEditorItem' method"; }; SurveyPropertyItemsEditor.prototype.createEditorItem = function (item) { return item; }; SurveyPropertyItemsEditor.prototype.createItemFromEditorItem = function (editorItem) { return editorItem; }; return SurveyPropertyItemsEditor; }(__WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); /***/ }), /* 14 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__ = __webpack_require__(13); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__objectProperty__ = __webpack_require__(11); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNestedPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyNestedPropertyEditorItem; }); /* unused harmony export SurveyNestedPropertyEditorColumn */ /* unused harmony export SurveyNestedPropertyEditorEditorCell */ var SurveyNestedPropertyEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyNestedPropertyEditor, _super); function SurveyNestedPropertyEditor(property) { var _this = _super.call(this, property) || this; var self = _this; _this.koEditItem = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); _this.koIsList = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); _this.koEditItem.subscribe(function (newValue) { self.koIsList(self.koEditItem() == null); self.onListDetailViewChanged(); }); _this.onEditItemClick = function (item) { self.koEditItem(item); }; _this.onCancelEditItemClick = function () { var editItem = self.koEditItem(); if (editItem.itemEditor && editItem.itemEditor.hasError()) return; self.koEditItem(null); }; _this.koEditorName = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.getEditorName(); }); return _this; } SurveyNestedPropertyEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.koEditItem(null); }; SurveyNestedPropertyEditor.prototype.createColumns = function () { var result = []; var properties = this.getProperties(); for (var i = 0; i < properties.length; i++) { result.push(new SurveyNestedPropertyEditorColumn(properties[i])); } return result; }; SurveyNestedPropertyEditor.prototype.getProperties = function () { return []; }; SurveyNestedPropertyEditor.prototype.getPropertiesByNames = function (className, names) { var res = []; for (var i = 0; i < names.length; i++) { var name = names[i]; name.name ? name.name : name; var prop = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.findProperty(className, name); if (prop && prop.visible) { res.push(prop); } } return res; }; SurveyNestedPropertyEditor.prototype.getEditorName = function () { return ""; }; SurveyNestedPropertyEditor.prototype.onListDetailViewChanged = function () { }; SurveyNestedPropertyEditor.prototype.checkForErrors = function () { var result = false; for (var i = 0; i < this.koItems().length; i++) { result = result || this.koItems()[i].hasError(); } return result; }; SurveyNestedPropertyEditor.prototype.onBeforeApply = function () { var internalItems = this.koItems(); for (var i = 0; i < internalItems.length; i++) { internalItems[i].apply(); } _super.prototype.onBeforeApply.call(this); }; return SurveyNestedPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); var SurveyNestedPropertyEditorItem = (function () { function SurveyNestedPropertyEditorItem(obj, columns) { this.obj = obj; this.columns = columns; this.cellsValue = []; for (var i = 0; i < columns.length; i++) { this.cellsValue.push(new SurveyNestedPropertyEditorEditorCell(obj, columns[i].property)); } } Object.defineProperty(SurveyNestedPropertyEditorItem.prototype, "itemEditor", { get: function () { if (!this.itemEditorValue) this.itemEditorValue = this.createSurveyQuestionEditor(); return this.itemEditorValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorItem.prototype, "cells", { get: function () { return this.cellsValue; }, enumerable: true, configurable: true }); SurveyNestedPropertyEditorItem.prototype.hasError = function () { if (this.itemEditorValue && this.itemEditorValue.hasError()) return true; var res = false; for (var i = 0; i < this.cells.length; i++) { res = this.cells[i].hasError || res; } return res; }; SurveyNestedPropertyEditorItem.prototype.resetSurveyQuestionEditor = function () { this.itemEditorValue = null; }; SurveyNestedPropertyEditorItem.prototype.createSurveyQuestionEditor = function () { return null; }; SurveyNestedPropertyEditorItem.prototype.apply = function () { if (this.itemEditorValue) this.itemEditorValue.apply(); }; return SurveyNestedPropertyEditorItem; }()); var SurveyNestedPropertyEditorColumn = (function () { function SurveyNestedPropertyEditorColumn(property) { this.property = property; } Object.defineProperty(SurveyNestedPropertyEditorColumn.prototype, "text", { get: function () { var text = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].hasString("pel." + this.property.name) ? this.getLocText("pel.") : this.getLocText("pe."); return text ? text : this.property.name; }, enumerable: true, configurable: true }); SurveyNestedPropertyEditorColumn.prototype.getLocText = function (prefix) { return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString(prefix + this.property.name); }; return SurveyNestedPropertyEditorColumn; }()); var SurveyNestedPropertyEditorEditorCell = (function () { function SurveyNestedPropertyEditorEditorCell(obj, property) { this.obj = obj; this.property = property; var self = this; var propEvent = function (property, newValue) { self.value = newValue; }; this.objectPropertyValue = new __WEBPACK_IMPORTED_MODULE_5__objectProperty__["a" /* SurveyObjectProperty */](this.property, propEvent); this.objectPropertyValue.editor.isInplaceProperty = true; this.objectProperty.object = obj; } Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "objectProperty", { get: function () { return this.objectPropertyValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "editor", { get: function () { return this.objectProperty.editor; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "koValue", { get: function () { return this.objectProperty.editor.koValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "value", { get: function () { return this.property.getValue(this.obj); }, set: function (val) { this.property.setValue(this.obj, val, null); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "hasError", { get: function () { return this.editor.hasError(); }, enumerable: true, configurable: true }); return SurveyNestedPropertyEditorEditorCell; }()); /***/ }), /* 15 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionEditorDefinition; }); var SurveyQuestionEditorDefinition = (function () { function SurveyQuestionEditorDefinition() { } SurveyQuestionEditorDefinition.getProperties = function (className) { var properties = []; var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); for (var i = allDefinitions.length - 1; i >= 0; i--) { var def = allDefinitions[i]; if (def.properties) { for (var j = 0; j < def.properties.length; j++) { if (!def.properties[j]["tab"] || def.properties[j]["tab"] === "general") { properties.push(def.properties[j]); } } } } return properties; }; SurveyQuestionEditorDefinition.isGeneralTabVisible = function (className) { var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); for (var i = allDefinitions.length - 1; i >= 0; i--) { var def = allDefinitions[i]; if (def.tabs) { for (var j = 0; j < def.tabs.length; j++) { var tab = def.tabs[j]; if (tab.name == "general") return tab.visible !== false; } } } return true; }; SurveyQuestionEditorDefinition.getTabs = function (className) { var tabs = []; var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); var tabsNamesHash = {}; for (var i = 0; i < allDefinitions.length; i++) { var def = allDefinitions[i]; if (def.tabs) { for (var j = 0; j < def.tabs.length; j++) { var tab = def.tabs[j]; if (tabsNamesHash[tab.name]) continue; tabsNamesHash[tab.name] = true; if (tab.visible !== false) { tabs.push(tab); } } } } tabs.sort(function (a, b) { return a.index < b.index ? -1 : a.index > b.index ? 1 : 0; }); return tabs; }; SurveyQuestionEditorDefinition.getAllDefinitionsByClass = function (className) { var result = []; if (className.indexOf("@") > -1 && SurveyQuestionEditorDefinition.definition[className]) { result.push(SurveyQuestionEditorDefinition.definition[className]); return result; } while (className) { var metaClass = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData["findClass"](className); if (!metaClass) break; if (SurveyQuestionEditorDefinition.definition[metaClass.name]) { result.push(SurveyQuestionEditorDefinition.definition[metaClass.name]); } className = metaClass.parentName; } return result; }; return SurveyQuestionEditorDefinition; }()); SurveyQuestionEditorDefinition.definition = { questionbase: { properties: [ "name", "title", { name: "visible", category: "checks" }, { name: "isRequired", category: "checks" }, { name: "startWithNewLine", category: "checks" } ], tabs: [ { name: "visibleIf", index: 100 }, { name: "enableIf", index: 110 } ] }, comment: { properties: ["rows", "placeHolder"] }, file: { properties: [ { name: "showPreview", category: "imageChecks" }, { name: "storeDataAsText", category: "imageChecks" }, "maxSize", "imageHeight", "imageWidth" ] }, html: { tabs: [{ name: "html", index: 10 }] }, matrixdropdownbase: { properties: ["cellType", "columnsLocation"], tabs: [ { name: "columns", index: 10 }, { name: "rows", index: 11 }, { name: "choices", index: 12 } ] }, matrixdynamic: { properties: ["rowCount", "addRowLocation", "addRowText", "removeRowText"] }, matrix: { tabs: [{ name: "columns", index: 10 }, { name: "rows", index: 11 }] }, multipletext: { properties: ["colCount"], tabs: [{ name: "items", index: 10 }] }, rating: { properties: ["minRateDescription", "maxRateDescription"], tabs: [{ name: "rateValues", index: 10 }] }, selectbase: { properties: [ { name: "hasOther", tab: "choices" }, { name: "otherText", tab: "choices" }, "choicesOrder", "colCount" ], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 } ] }, "itemvalues@choices": { title: "Rules", tabs: [ { name: "general", visible: false }, { name: "visibleIf", visible: true } ] }, dropdown: { properties: ["optionsCaption"] }, text: { properties: ["inputType", "placeHolder"] }, boolean: { properties: ["label"] }, expression: { tabs: [{ name: "expression", index: 10 }] }, matrixdropdowncolumn: { properties: ["isRequired", "cellType", "name", "title"] }, "matrixdropdowncolumn@default": { tabs: [ { name: "general", visible: false }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 } ] }, "matrixdropdowncolumn@checkbox": { properties: ["hasOther", "otherText", "choicesOrder", "colCount"], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 } ] }, "matrixdropdowncolumn@radiogroup": { properties: ["hasOther", "otherText", "choicesOrder", "colCount"], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 } ] }, "matrixdropdowncolumn@dropdown": { properties: ["hasOther", "otherText", "choicesOrder", "optionsCaption"], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 } ] }, "matrixdropdowncolumn@text": { properties: ["inputType", "placeHolder"], tabs: [ { name: "validators", index: 10 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 } ] }, "matrixdropdowncolumn@comment": { properties: ["placeHolder"], tabs: [ { name: "validators", index: 10 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 } ] }, "matrixdropdowncolumn@boolean": { properties: ["defaultValue"], tabs: [{ name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }] }, "matrixdropdowncolumn@expression": { properties: ["name"], tabs: [{ name: "expression", index: 10 }] }, multipletextitem: { properties: ["inputType", "maxLength", "placeHolder"], tabs: [{ name: "validators", index: 10 }] }, paneldynamic: { properties: [ { name: "renderMode", category: "render" }, { name: "allowAddPanel", category: "render" }, { name: "allowRemovePanel", category: "render" }, "panelAddText", "panelRemoveText" ], tabs: [{ name: "templateTitle", index: 10 }] }, panel: { properties: ["name", "title", { name: "visible", category: "checks" }], tabs: [{ name: "visibleIf", index: 100 }] }, page: { properties: [ "name", "title", { name: "visible", category: "checks" }, "questionsOrder" ], tabs: [{ name: "visibleIf", index: 100 }] }, survey: { properties: [ "title", "showTitle", "locale", "mode", "clearInvisibleValues", "cookieName", { name: "sendResultOnPageNext", category: "data" }, { name: "storeOthersAsComment", category: "data" }, { name: "showPageTitles", category: "page" }, { name: "showPageNumbers", category: "page" }, { name: "pagePrevText", tab: "navigation" }, { name: "pageNextText", tab: "navigation" }, { name: "completeText", tab: "navigation" }, { name: "startSurveyText", tab: "navigation" }, { name: "showNavigationButtons", tab: "navigation", category: "navbuttons" }, { name: "showPrevButton", tab: "navigation", category: "navbuttons" }, { name: "firstPageIsStarted", tab: "navigation", category: "navpages" }, { name: "showCompletedPage", tab: "navigation", category: "navpages" }, { name: "goNextPageAutomatic", tab: "navigation", category: "navopt" }, { name: "showProgressBar", tab: "navigation", category: "navopt" }, { name: "isSinglePage", tab: "navigation" }, { name: "questionTitleLocation", tab: "question" }, { name: "requiredText", tab: "question" }, { name: "questionStartIndex", tab: "question" }, { name: "showQuestionNumbers", tab: "question" }, { name: "questionTitleTemplate", tab: "question" }, { name: "questionErrorLocation", tab: "question" }, { name: "focusFirstQuestionAutomatic", tab: "question" }, { name: "questionsOrder", tab: "question" }, { name: "maxTimeToFinish", tab: "timer" }, { name: "maxTimeToFinishPage", tab: "timer" }, { name: "showTimerPanel", tab: "timer", category: "check" }, { name: "showTimerPanelMode", tab: "timer", category: "check" } ], tabs: [ { name: "navigation", index: 10 }, { name: "question", index: 20 }, { name: "completedHtml", index: 70 }, { name: "loadingHtml", index: 80 }, { name: "timer", index: 90 }, { name: "triggers", index: 100 } ] } }; /***/ }), /* 16 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__title_editor_scss__ = __webpack_require__(68); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__title_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__title_editor_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return TitleInplaceEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return titleAdorner; }); /* unused harmony export itemTitleAdorner */ var templateHtml = __webpack_require__(109); function resizeInput(target) { target.size = target.value.length || 5; } var TitleInplaceEditor = (function () { function TitleInplaceEditor(name, rootElement) { var _this = this; this.rootElement = rootElement; this.editingName = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.prevName = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.isEditing = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.hideEditor = function () { _this.isEditing(false); _this.forNeibours(function (element) { element.style.display = element.style["oldDisplay"]; }); }; this.startEdit = function (model, event) { _this.editingName(_this.prevName()); _this.isEditing(true); _this.forNeibours(function (element) { element.style["oldDisplay"] = element.style.display; element.style.display = "none"; }); var inputElem = _this.rootElement.getElementsByTagName("input")[0]; inputElem.focus(); resizeInput(inputElem); }; this.postEdit = function () { if (_this.prevName() !== _this.editingName()) { _this.prevName(_this.editingName()); !!_this.valueChanged && _this.valueChanged(_this.editingName()); } _this.hideEditor(); }; this.cancelEdit = function () { _this.editingName(_this.prevName()); _this.hideEditor(); }; this.nameEditorKeypress = function (model, event) { resizeInput(event.target); if (event.keyCode === 13) { _this.postEdit(); } else if (event.keyCode === 27) { _this.cancelEdit(); } }; this.editingName(name); this.prevName(name); this.forNeibours(function (element) { return (element.onclick = function (e) { _this.startEdit(_this, e); e.preventDefault(); }); }); } TitleInplaceEditor.prototype.forNeibours = function (func) { var holder = this.rootElement.parentElement.parentElement; for (var i = 0; i < holder.children.length - 1; i++) { var element = holder.children[i]; func(element); } }; TitleInplaceEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(str); }; return TitleInplaceEditor; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("title-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new TitleInplaceEditor(params.model[params.name], componentInfo.element); var property = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["JsonObject"].metaData.findProperty(params.model.getType(), params.name); model.valueChanged = function (newValue) { params.model[params.name] = newValue; params.editor.onPropertyValueChanged(property, params.model, newValue); }; return model; } }, template: templateHtml }); var titleAdorner = { getMarkerClass: function (model) { return "title_editable"; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("span"); decoration.innerHTML = "<title-editor params='name: \"title\", model: model, editor: editor'></title-editor>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("title", titleAdorner); var itemTitleAdorner = { getMarkerClass: function (model) { return !!model.items ? "item_title_editable title_editable" : ""; }, afterRender: function (elements, model, editor) { for (var i = 0; i < elements.length; i++) { var decoration = document.createElement("span"); decoration.innerHTML = "<title-editor params='name: \"title\", model: model, editor: editor'></title-editor>"; elements[i].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model.items[i], editor: editor }, decoration); } } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("itemTitle", itemTitleAdorner); /***/ }), /* 17 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectProperty__ = __webpack_require__(11); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(5); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjectEditor; }); var SurveyObjectEditor = (function () { function SurveyObjectEditor(propertyEditorOptions) { if (propertyEditorOptions === void 0) { propertyEditorOptions = null; } var _this = this; this.propertyEditorOptions = propertyEditorOptions; this.oldActiveProperty = null; this.koProperties = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koActiveProperty = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koHasObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.onPropertyValueChanged = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Event"](); this.koActiveProperty.subscribe(function (newValue) { if (_this.oldActiveProperty === newValue) return; if (_this.oldActiveProperty) _this.oldActiveProperty.isActive = false; _this.oldActiveProperty = newValue; if (newValue) newValue.isActive = true; }); var self = this; this.koAfterRender = function (el, con) { self.afterRender(el, con); }; } Object.defineProperty(SurveyObjectEditor.prototype, "selectedObject", { get: function () { return this.selectedObjectValue; }, set: function (value) { if (this.selectedObjectValue == value) return; this.koHasObject(value != null); this.selectedObjectValue = value; this.updateProperties(); this.updatePropertiesObject(); }, enumerable: true, configurable: true }); SurveyObjectEditor.prototype.getPropertyEditor = function (name) { var properties = this.koProperties(); for (var i = 0; i < properties.length; i++) { if (properties[i].name == name) return properties[i]; } return null; }; SurveyObjectEditor.prototype.changeActiveProperty = function (property) { this.koActiveProperty(property); }; SurveyObjectEditor.prototype.objectChanged = function () { this.updatePropertiesObject(); }; SurveyObjectEditor.prototype.afterRender = function (elements, prop) { if (!__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["SurveyElement"] || !__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["SurveyElement"].GetFirstNonTextElement || !this.onAfterRenderCallback) return; var el = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["SurveyElement"].GetFirstNonTextElement(elements); var tEl = elements[0]; if (tEl.nodeName === "#text") tEl.data = ""; tEl = elements[elements.length - 1]; if (tEl.nodeName === "#text") tEl.data = ""; this.onAfterRenderCallback(this.selectedObject, el, prop); }; SurveyObjectEditor.prototype.updateProperties = function () { var _this = this; if (!this.selectedObject || !this.selectedObject.getType) { this.koProperties([]); this.koActiveProperty(null); return; } var properties = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData["getPropertiesByObj"] ? __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData["getPropertiesByObj"](this.selectedObject) : __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData.getProperties(this.selectedObject.getType()); var objectProperties = []; var self = this; var propEvent = function (property, newValue) { self.onPropertyValueChanged.fire(_this, { property: property.property, object: property.object, newValue: newValue }); }; var visibleProperties = []; for (var i = 0; i < properties.length; i++) { if (!this.canShowProperty(properties[i])) continue; visibleProperties.push(properties[i]); } var sortEvent = function (a, b) { var res = 0; if (self.onSortPropertyCallback) { res = self.onSortPropertyCallback(self.selectedObject, a, b); } if (res) return res; if (a.name == b.name) return 0; if (a.name > b.name) return 1; return -1; }; visibleProperties = visibleProperties.sort(sortEvent); for (var i = 0; i < visibleProperties.length; i++) { var objectProperty = new __WEBPACK_IMPORTED_MODULE_2__objectProperty__["a" /* SurveyObjectProperty */](visibleProperties[i], propEvent, this.propertyEditorOptions); objectProperty.editor.isInplaceProperty = true; objectProperties.push(objectProperty); } this.koProperties(objectProperties); var propEditor = this.getPropertyEditor("name"); if (!propEditor && objectProperties.length > 0) { propEditor = this.getPropertyEditor(objectProperties[0].name); } if (propEditor) { this.koActiveProperty(propEditor); } }; SurveyObjectEditor.prototype.canShowProperty = function (property) { return __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(this.selectedObject, property, this.onCanShowPropertyCallback); }; SurveyObjectEditor.prototype.updatePropertiesObject = function () { var properties = this.koProperties(); for (var i = 0; i < properties.length; i++) { properties[i].object = this.selectedObject; } }; return SurveyObjectEditor; }()); /***/ }), /* 18 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return StylesManager; }); var StylesManager = (function () { function StylesManager() { this.sheet = null; this.sheet = StylesManager.findSheet(StylesManager.SurveyJSStylesSheetId); if (!this.sheet) { this.sheet = StylesManager.createSheet(StylesManager.SurveyJSStylesSheetId); this.initializeStyles(this.sheet); } } StylesManager.findSheet = function (styleSheetId) { for (var i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].ownerNode["id"] === styleSheetId) { return document.styleSheets[i]; } } return null; }; StylesManager.createSheet = function (styleSheetId) { var style = document.createElement("style"); style.id = styleSheetId; // Add a media (and/or media query) here if you'd like! // style.setAttribute("media", "screen") // style.setAttribute("media", "only screen and (max-width : 1024px)") style.appendChild(document.createTextNode("")); document.head.appendChild(style); return style.sheet; }; StylesManager.applyTheme = function (themeName, themeSelector) { if (themeName === void 0) { themeName = "default"; } if (themeSelector === void 0) { themeSelector = ".svd_container"; } StylesManager.currentTheme(themeName); __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Survey"].cssType = this.currentTheme() === "bootstrap" ? "bootstrap" : "default"; __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["StylesManager"].applyTheme(themeName); var sheet = StylesManager.findSheet(themeName + themeSelector); if (!sheet) { sheet = StylesManager.createSheet(themeName + themeSelector); var theme_1 = StylesManager.ThemeColors[themeName] || StylesManager.ThemeColors["default"]; Object.keys(StylesManager.ThemeCss).forEach(function (selector) { var cssRuleText = StylesManager.ThemeCss[selector]; Object.keys(theme_1).forEach(function (colorVariableName) { return (cssRuleText = cssRuleText.replace(new RegExp("\\" + colorVariableName, "g"), theme_1[colorVariableName])); }); sheet.insertRule(themeSelector + selector + " { " + cssRuleText + " }", 0); }); } }; StylesManager.prototype.initializeStyles = function (sheet) { Object.keys(StylesManager.Styles).forEach(function (selector) { return sheet.insertRule(selector + " { " + StylesManager.Styles[selector] + " }", 0); }); }; return StylesManager; }()); StylesManager.SurveyJSStylesSheetId = "surveyjs"; StylesManager.Styles = {}; StylesManager.ThemeColors = { default: { "$primary-color": "#1ab394", "$secondary-color": "#1ab394", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#18a689", "$selection-border-color": "#1ab394", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, orange: { "$primary-color": "#f78119", "$secondary-color": "#4a4a4a", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#e77109", "$selection-border-color": "#4a4a4a", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, darkblue: { "$primary-color": "#3c4f6d", "$secondary-color": "#3c4f6d", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#2c3f5d", "$selection-border-color": "#4a4a4a", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, darkrose: { "$primary-color": "#68656e", "$secondary-color": "#68656e", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#57545e", "$selection-border-color": "#4a4a4a", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, stone: { "$primary-color": "#0f0f33", "$secondary-color": "#0f0f33", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#000023", "$selection-border-color": "#cdccd2", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, winter: { "$primary-color": "#5ac8fa", "$secondary-color": "#5ac8fa", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#4ad8ea", "$selection-border-color": "#82b8da", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, winterstone: { "$primary-color": "#3c3b40", "$secondary-color": "#3c3b40", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#1c1b20", "$selection-border-color": "#b8b8b8", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" } }; StylesManager.ThemeCss = { ".svd_container": "color: $primary-text-color;", ".svd_container a": "color: $primary-color;", ".svd_container a:hover": "color: $primary-hover-color;", ".svd_container .svd-main-color": "color: $primary-color;", ".svd_container .svd-main-border-color": "border-color: $selection-border-color;", ".svd_container .svd-main-background-color": "background-color: $primary-color;", ".svd_container .svd-light-background-color": "background-color: $primary-border-color;", ".svd_container .btn-primary": "color: $inverted-text-color; background-color: $secondary-color; border-color: $secondary-color;", ".svd_container .btn-link": "color: $primary-text-color; background-color: $secondary-bg-color; border-color: $secondary-bg-color;", ".svd_container .svd-svg-icon": "fill: $primary-icon-color;", ".svd_container .svd-primary-icon .svd-svg-icon": "fill: $primary-color;", ".svd_container .svd-secondary-icon .svd-svg-icon": "fill: $secondary-color;", ".svd_container .icon-gearactive .svd-svg-icon": "fill: $primary-color;", ".svd_container .nav-tabs a": "color: $primary-text-color", ".svd_container .nav-tabs > li.active > a": "color: $primary-color", ".svd_container .nav-item.active .nav-link": "background-color: $primary-bg-color;", ".svd_container .sjs-cb-container:hover input ~ .checkmark": "background-color: $dd-menu-border", ".svd_container .sjs-cb-container:hover input:checked ~ .checkmark": "background-color: $primary-hover-color", ".svd_container .svd_custom_select:before": "background-color: $primary-color;", ".svd_container .form-control:focus": "border-color: $primary-color;", ".svd_container .svd-light-text-color": "color: $secondary-text-color;", ".svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container .svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container .svd_toolbar li.active a": "background-color: $primary-color; color: $primary-bg-color;", ".svd_container .svd_selected_page": "border-bottom: 1px solid $primary-bg-color;", ".svd_container .editor-tabs > li > a:hover": "background-color: $secondary-bg-color; border-bottom: 1px solid $secondary-bg-color;", ".svd_container .editor-tabs > li > a:focus": "background-color: $secondary-bg-color; border-bottom: 1px solid $secondary-bg-color;", ".svd_container .editor-tabs > li.active > a": "color: $primary-color; background-color: $secondary-bg-color; border: 1px solid $primary-border-color; border-bottom-color: $secondary-bg-color;", ".svd_container .svd-light-border-color": "border-color: $primary-border-color", ".svd_container .svd-dark-border-color": "border-color: $secondary-border-color", ".svd_container .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container .select2-container .select2-selection--single .select2-selection__arrow": "background: $primary-color;" }; StylesManager.currentTheme = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("bootstrap"); /***/ }), /* 19 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__json5__ = __webpack_require__(20); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTextWorker; }); var TextParserPropery = (function () { function TextParserPropery() { } return TextParserPropery; }()); var SurveyForTextWorker = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyForTextWorker, _super); function SurveyForTextWorker(jsonObj) { return _super.call(this, jsonObj) || this; } Object.defineProperty(SurveyForTextWorker.prototype, "isDesignMode", { get: function () { return true; }, enumerable: true, configurable: true }); return SurveyForTextWorker; }(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"])); var SurveyTextWorker = (function () { function SurveyTextWorker(text) { this.text = text; if (!this.text || this.text.trim() == "") { this.text = "{}"; } this.errors = []; this.process(); } Object.defineProperty(SurveyTextWorker.prototype, "survey", { get: function () { return this.surveyValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyTextWorker.prototype, "isJsonCorrect", { get: function () { return this.surveyValue != null; }, enumerable: true, configurable: true }); SurveyTextWorker.prototype.process = function () { try { this.jsonValue = new __WEBPACK_IMPORTED_MODULE_1__json5__["a" /* SurveyJSON5 */](1).parse(this.text); } catch (error) { this.errors.push({ pos: { start: error.at, end: -1 }, text: error.message }); } if (this.jsonValue != null) { this.updateJsonPositions(this.jsonValue); this.surveyValue = new SurveyForTextWorker(this.jsonValue); if (this.surveyValue.jsonErrors != null) { for (var i = 0; i < this.surveyValue.jsonErrors.length; i++) { var error = this.surveyValue.jsonErrors[i]; this.errors.push({ pos: { start: error.at, end: -1 }, text: error.getFullDescription() }); } } } this.surveyObjects = this.createSurveyObjects(); this.setEditorPositionByChartAt(this.surveyObjects); this.setEditorPositionByChartAt(this.errors); }; SurveyTextWorker.prototype.updateJsonPositions = function (jsonObj) { jsonObj["pos"]["self"] = jsonObj; for (var key in jsonObj) { var obj = jsonObj[key]; if (obj && obj["pos"]) { jsonObj["pos"][key] = obj["pos"]; this.updateJsonPositions(obj); } } }; SurveyTextWorker.prototype.createSurveyObjects = function () { var result = []; if (this.surveyValue == null) return result; this.isSurveyAsPage = false; for (var i = 0; i < this.surveyValue.pages.length; i++) { var page = this.surveyValue.pages[i]; if (i == 0 && !page["pos"]) { page["pos"] = this.surveyValue["pos"]; this.isSurveyAsPage = true; } result.push(page); for (var j = 0; j < page.questions.length; j++) { result.push(page.questions[j]); } } return result; }; SurveyTextWorker.prototype.setEditorPositionByChartAt = function (objects) { if (objects == null || objects.length == 0) return; var position = { row: 0, column: 0 }; var atObjectsArray = this.getAtArray(objects); var startAt = 0; for (var i = 0; i < atObjectsArray.length; i++) { var at = atObjectsArray[i].at; position = this.getPostionByChartAt(position, startAt, at); var obj = atObjectsArray[i].obj; if (!obj.position) obj.position = {}; if (at == obj.pos.start) { obj.position.start = position; } else { if (at == obj.pos.end) { obj.position.end = position; } } startAt = at; } }; SurveyTextWorker.prototype.getPostionByChartAt = function (startPosition, startAt, at) { var result = { row: startPosition.row, column: startPosition.column }; var curChar = startAt; while (curChar < at) { if (this.text.charAt(curChar) == SurveyTextWorker.newLineChar) { result.row++; result.column = 0; } else { result.column++; } curChar++; } return result; }; SurveyTextWorker.prototype.getAtArray = function (objects) { var result = []; for (var i = 0; i < objects.length; i++) { var obj = objects[i]; var pos = obj.pos; if (!pos) continue; result.push({ at: pos.start, obj: obj }); if (pos.end > 0) { result.push({ at: pos.end, obj: obj }); } } return result.sort(function (el1, el2) { if (el1.at > el2.at) return 1; if (el1.at < el2.at) return -1; return 0; }); }; return SurveyTextWorker; }()); /***/ }), /* 20 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyJSON5; }); // This file is based on JSON5, http://json5.org/ // The modification for getting object and properties location 'at' were maden. var SurveyJSON5 = (function () { function SurveyJSON5(parseType) { if (parseType === void 0) { parseType = 0; } this.parseType = parseType; } SurveyJSON5.prototype.parse = function (source, reviver, startFrom, endAt) { if (reviver === void 0) { reviver = null; } if (startFrom === void 0) { startFrom = 0; } if (endAt === void 0) { endAt = -1; } var result; this.text = String(source); this.at = startFrom; this.endAt = endAt; this.ch = " "; result = this.value(); this.white(); if (this.ch) { this.error("Syntax error"); } // If there is a reviver function, we recursively walk the new structure, // passing each name/value pair to the reviver function for possible // transformation, starting with a temporary root object that holds the result // in an empty key. If there is not a reviver function, we simply return the // result. return typeof reviver === "function" ? (function walk(holder, key) { var k, v, value = holder[key]; if (value && typeof value === "object") { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); })({ "": result }, "") : result; }; SurveyJSON5.prototype.error = function (m) { // Call error when something is wrong. var error = new SyntaxError(); error.message = m; error["at"] = this.at; throw error; }; SurveyJSON5.prototype.next = function (c) { if (c === void 0) { c = null; } // If a c parameter is provided, verify that it matches the current character. if (c && c !== this.ch) { this.error("Expected '" + c + "' instead of '" + this.ch + "'"); } // Get the this.next character. When there are no more characters, // return the empty string. this.ch = this.chartAt(); this.at += 1; return this.ch; }; SurveyJSON5.prototype.peek = function () { // Get the this.next character without consuming it or // assigning it to the this.ch varaible. return this.chartAt(); }; SurveyJSON5.prototype.chartAt = function () { if (this.endAt > -1 && this.at >= this.endAt) return ""; return this.text.charAt(this.at); }; SurveyJSON5.prototype.identifier = function () { // Parse an identifier. Normally, reserved words are disallowed here, but we // only use this for unquoted object keys, where reserved words are allowed, // so we don't check for those here. References: // - http://es5.github.com/#x7.6 // - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables // - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm // TODO Identifiers can have Unicode "letters" in them; add support for those. var key = this.ch; // Identifiers must start with a letter, _ or $. if (this.ch !== "_" && this.ch !== "$" && (this.ch < "a" || this.ch > "z") && (this.ch < "A" || this.ch > "Z")) { this.error("Bad identifier"); } // Subsequent characters can contain digits. while (this.next() && (this.ch === "_" || this.ch === "$" || (this.ch >= "a" && this.ch <= "z") || (this.ch >= "A" && this.ch <= "Z") || (this.ch >= "0" && this.ch <= "9"))) { key += this.ch; } return key; }; SurveyJSON5.prototype.number = function () { // Parse a number value. var number, sign = "", string = "", base = 10; if (this.ch === "-" || this.ch === "+") { sign = this.ch; this.next(this.ch); } // support for Infinity (could tweak to allow other words): if (this.ch === "I") { number = this.word(); if (typeof number !== "number" || isNaN(number)) { this.error("Unexpected word for number"); } return sign === "-" ? -number : number; } // support for NaN if (this.ch === "N") { number = this.word(); if (!isNaN(number)) { this.error("expected word to be NaN"); } // ignore sign as -NaN also is NaN return number; } if (this.ch === "0") { string += this.ch; this.next(); if (this.ch === "x" || this.ch === "X") { string += this.ch; this.next(); base = 16; } else if (this.ch >= "0" && this.ch <= "9") { this.error("Octal literal"); } } switch (base) { case 10: while (this.ch >= "0" && this.ch <= "9") { string += this.ch; this.next(); } if (this.ch === ".") { string += "."; while (this.next() && this.ch >= "0" && this.ch <= "9") { string += this.ch; } } if (this.ch === "e" || this.ch === "E") { string += this.ch; this.next(); if (this.ch === "-" || this.ch === "+") { string += this.ch; this.next(); } while (this.ch >= "0" && this.ch <= "9") { string += this.ch; this.next(); } } break; case 16: while ((this.ch >= "0" && this.ch <= "9") || (this.ch >= "A" && this.ch <= "F") || (this.ch >= "a" && this.ch <= "f")) { string += this.ch; this.next(); } break; } if (sign === "-") { number = -string; } else { number = +string; } if (!isFinite(number)) { this.error("Bad number"); } else { return number; } }; SurveyJSON5.prototype.string = function () { // Parse a string value. var hex, i, string = "", delim, // double quote or single quote uffff; // When parsing for string values, we must look for ' or " and \ characters. if (this.ch === '"' || this.ch === "'") { delim = this.ch; while (this.next()) { if (this.ch === delim) { this.next(); return string; } else if (this.ch === "\\") { this.next(); if (this.ch === "u") { uffff = 0; for (i = 0; i < 4; i += 1) { hex = parseInt(this.next(), 16); if (!isFinite(hex)) { break; } uffff = uffff * 16 + hex; } string += String.fromCharCode(uffff); } else if (this.ch === "\r") { if (this.peek() === "\n") { this.next(); } } else if (typeof SurveyJSON5.escapee[this.ch] === "string") { string += SurveyJSON5.escapee[this.ch]; } else { break; } } else if (this.ch === "\n") { // unescaped newlines are invalid; see: // https://github.com/aseemk/json5/issues/24 // TODO this feels special-cased; are there other // invalid unescaped chars? break; } else { string += this.ch; } } } this.error("Bad string"); }; SurveyJSON5.prototype.inlineComment = function () { // Skip an inline comment, assuming this is one. The current character should // be the second / character in the // pair that begins this inline comment. // To finish the inline comment, we look for a newline or the end of the text. if (this.ch !== "/") { this.error("Not an inline comment"); } do { this.next(); if (this.ch === "\n" || this.ch === "\r") { this.next(); return; } } while (this.ch); }; SurveyJSON5.prototype.blockComment = function () { // Skip a block comment, assuming this is one. The current character should be // the * character in the /* pair that begins this block comment. // To finish the block comment, we look for an ending */ pair of characters, // but we also watch for the end of text before the comment is terminated. if (this.ch !== "*") { this.error("Not a block comment"); } do { this.next(); while (this.ch === "*") { this.next("*"); if (this.ch === "/") { this.next("/"); return; } } } while (this.ch); this.error("Unterminated block comment"); }; SurveyJSON5.prototype.comment = function () { // Skip a comment, whether inline or block-level, assuming this is one. // Comments always begin with a / character. if (this.ch !== "/") { this.error("Not a comment"); } this.next("/"); if (this.ch === "/") { this.inlineComment(); } else if (this.ch === "*") { this.blockComment(); } else { this.error("Unrecognized comment"); } }; SurveyJSON5.prototype.white = function () { // Skip whitespace and comments. // Note that we're detecting comments by only a single / character. // This works since regular expressions are not valid JSON(5), but this will // break if there are other valid values that begin with a / character! while (this.ch) { if (this.ch === "/") { this.comment(); } else if (SurveyJSON5.ws.indexOf(this.ch) >= 0) { this.next(); } else { return; } } }; SurveyJSON5.prototype.word = function () { // true, false, or null. switch (this.ch) { case "t": this.next("t"); this.next("r"); this.next("u"); this.next("e"); return true; case "f": this.next("f"); this.next("a"); this.next("l"); this.next("s"); this.next("e"); return false; case "n": this.next("n"); this.next("u"); this.next("l"); this.next("l"); return null; case "I": this.next("I"); this.next("n"); this.next("f"); this.next("i"); this.next("n"); this.next("i"); this.next("t"); this.next("y"); return Infinity; case "N": this.next("N"); this.next("a"); this.next("N"); return NaN; } this.error("Unexpected '" + this.ch + "'"); }; SurveyJSON5.prototype.array = function () { // Parse an array value. var array = []; if (this.ch === "[") { this.next("["); this.white(); while (this.ch) { if (this.ch === "]") { this.next("]"); return array; // Potentially empty array } // ES5 allows omitting elements in arrays, e.g. [,] and // [,null]. We don't allow this in JSON5. if (this.ch === ",") { this.error("Missing array element"); } else { array.push(this.value()); } this.white(); // If there's no comma after this value, this needs to // be the end of the array. if (this.ch !== ",") { this.next("]"); return array; } this.next(","); this.white(); } } this.error("Bad array"); }; SurveyJSON5.prototype.object = function () { // Parse an object value. var key, start, isFirstProperty = true, object = {}; if (this.parseType > 0) { object[SurveyJSON5.positionName] = { start: this.at - 1 }; } if (this.ch === "{") { this.next("{"); this.white(); start = this.at - 1; while (this.ch) { if (this.ch === "}") { if (this.parseType > 0) { object[SurveyJSON5.positionName].end = start; } this.next("}"); return object; // Potentially empty object } // Keys can be unquoted. If they are, they need to be // valid JS identifiers. if (this.ch === '"' || this.ch === "'") { key = this.string(); } else { key = this.identifier(); } this.white(); if (this.parseType > 1) { object[SurveyJSON5.positionName][key] = { start: start, valueStart: this.at }; } this.next(":"); object[key] = this.value(); if (this.parseType > 1) { start = this.at - 1; object[SurveyJSON5.positionName][key].valueEnd = start; object[SurveyJSON5.positionName][key].end = start; } this.white(); // If there's no comma after this pair, this needs to be // the end of the object. if (this.ch !== ",") { if (this.parseType > 1) { object[SurveyJSON5.positionName][key].valueEnd--; object[SurveyJSON5.positionName][key].end--; } if (this.parseType > 0) { object[SurveyJSON5.positionName].end = this.at - 1; } this.next("}"); return object; } if (this.parseType > 1) { object[SurveyJSON5.positionName][key].valueEnd--; if (!isFirstProperty) { object[SurveyJSON5.positionName][key].end--; } } this.next(","); this.white(); isFirstProperty = false; } } this.error("Bad object"); }; SurveyJSON5.prototype.value = function () { // Parse a JSON value. It could be an object, an array, a string, a number, // or a word. this.white(); switch (this.ch) { case "{": return this.object(); case "[": return this.array(); case '"': case "'": return this.string(); case "-": case "+": case ".": return this.number(); default: return this.ch >= "0" && this.ch <= "9" ? this.number() : this.word(); } }; SurveyJSON5.prototype.stringify = function (obj, replacer, space) { if (replacer === void 0) { replacer = null; } if (space === void 0) { space = null; } if (replacer && (typeof replacer !== "function" && !this.isArray(replacer))) { throw new Error("Replacer must be a function or an array"); } this.replacer = replacer; this.indentStr = this.getIndent(space); this.objStack = []; // special case...when undefined is used inside of // a compound object/array, return null. // but when top-level, return undefined var topLevelHolder = { "": obj }; if (obj === undefined) { return this.getReplacedValueOrUndefined(topLevelHolder, "", true); } return this.internalStringify(topLevelHolder, "", true); }; SurveyJSON5.prototype.getIndent = function (space) { if (space) { if (typeof space === "string") { return space; } else if (typeof space === "number" && space >= 0) { return this.makeIndent(" ", space, true); } } return ""; }; SurveyJSON5.prototype.getReplacedValueOrUndefined = function (holder, key, isTopLevel) { var value = holder[key]; // Replace the value with its toJSON value first, if possible if (value && value.toJSON && typeof value.toJSON === "function") { value = value.toJSON(); } // If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for // presence in the array (removing the key/value pair from the resulting JSON if the key is missing). if (typeof this.replacer === "function") { return this.replacer.call(holder, key, value); } else if (this.replacer) { if (isTopLevel || this.isArray(holder) || this.replacer.indexOf(key) >= 0) { return value; } else { return undefined; } } else { return value; } }; SurveyJSON5.prototype.isWordChar = function (char) { return ((char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9") || char === "_" || char === "$"); }; SurveyJSON5.prototype.isWordStart = function (char) { return ((char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || char === "_" || char === "$"); }; SurveyJSON5.prototype.isWord = function (key) { if (typeof key !== "string") { return false; } if (!this.isWordStart(key[0])) { return false; } var i = 1, length = key.length; while (i < length) { if (!this.isWordChar(key[i])) { return false; } i++; } return true; }; // polyfills SurveyJSON5.prototype.isArray = function (obj) { if (Array.isArray) { return Array.isArray(obj); } else { return Object.prototype.toString.call(obj) === "[object Array]"; } }; SurveyJSON5.prototype.isDate = function (obj) { return Object.prototype.toString.call(obj) === "[object Date]"; }; SurveyJSON5.prototype.isNaN = function (val) { return typeof val === "number" && val !== val; }; SurveyJSON5.prototype.checkForCircular = function (obj) { for (var i = 0; i < this.objStack.length; i++) { if (this.objStack[i] === obj) { throw new TypeError("Converting circular structure to JSON"); } } }; SurveyJSON5.prototype.makeIndent = function (str, num, noNewLine) { if (noNewLine === void 0) { noNewLine = false; } if (!str) { return ""; } // indentation no more than 10 chars if (str.length > 10) { str = str.substring(0, 10); } var indent = noNewLine ? "" : "\n"; for (var i = 0; i < num; i++) { indent += str; } return indent; }; SurveyJSON5.prototype.escapeString = function (str) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. SurveyJSON5.escapable.lastIndex = 0; return SurveyJSON5.escapable.test(str) ? '"' + str.replace(SurveyJSON5.escapable, function (a) { var c = SurveyJSON5.meta[a]; return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); }) + '"' : '"' + str + '"'; }; // End SurveyJSON5.prototype.internalStringify = function (holder, key, isTopLevel) { var buffer, res; // Replace the value, if necessary var obj_part = this.getReplacedValueOrUndefined(holder, key, isTopLevel); if (obj_part && !this.isDate(obj_part)) { // unbox objects // don't unbox dates, since will turn it into number obj_part = obj_part.valueOf(); } switch (typeof obj_part) { case "boolean": return obj_part.toString(); case "number": if (isNaN(obj_part) || !isFinite(obj_part)) { return "null"; } return obj_part.toString(); case "string": return this.escapeString(obj_part.toString()); case "object": if (obj_part === null) { return "null"; } else if (this.isArray(obj_part)) { this.checkForCircular(obj_part); buffer = "["; this.objStack.push(obj_part); for (var i = 0; i < obj_part.length; i++) { res = this.internalStringify(obj_part, i, false); buffer += this.makeIndent(this.indentStr, this.objStack.length); if (res === null || typeof res === "undefined") { buffer += "null"; } else { buffer += res; } if (i < obj_part.length - 1) { buffer += ","; } else if (this.indentStr) { buffer += "\n"; } } this.objStack.pop(); buffer += this.makeIndent(this.indentStr, this.objStack.length, true) + "]"; } else { this.checkForCircular(obj_part); buffer = "{"; var nonEmpty = false; this.objStack.push(obj_part); for (var prop in obj_part) { if (obj_part.hasOwnProperty(prop)) { var value = this.internalStringify(obj_part, prop, false); isTopLevel = false; if (typeof value !== "undefined" && value !== null) { buffer += this.makeIndent(this.indentStr, this.objStack.length); nonEmpty = true; var propKey = this.isWord(prop) ? prop : this.escapeString(prop); buffer += propKey + ":" + (this.indentStr ? " " : "") + value + ","; } } } this.objStack.pop(); if (nonEmpty) { buffer = buffer.substring(0, buffer.length - 1) + this.makeIndent(this.indentStr, this.objStack.length) + "}"; } else { buffer = "{}"; } } return buffer; default: // functions and undefined should be ignored return undefined; } }; return SurveyJSON5; }()); SurveyJSON5.positionName = "pos"; SurveyJSON5.escapee = { "'": "'", '"': '"', "\\": "\\", "/": "/", "\n": "", b: "\b", f: "\f", n: "\n", r: "\r", t: "\t" }; SurveyJSON5.ws = [" ", "\t", "\r", "\n", "\v", "\f", "\xA0", "\uFEFF"]; // Copied from Crokford's implementation of JSON // See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195 // Begin SurveyJSON5.cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; SurveyJSON5.escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; SurveyJSON5.meta = { // table of character substitutions "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }; /***/ }), /* 21 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_sortablejs__ = __webpack_require__(10); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_sortablejs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_sortablejs__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__title_editor__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__item_editor_scss__ = __webpack_require__(63); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__item_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__item_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return itemAdorner; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return createAddItemHandler; }); /* unused harmony export itemDraggableAdorner */ var templateHtml = __webpack_require__(105); var ItemInplaceEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](ItemInplaceEditor, _super); function ItemInplaceEditor(name, question, item, rootElement, editor) { var _this = _super.call(this, name, rootElement) || this; _this.question = question; _this.item = item; _this.editor = editor; return _this; } ItemInplaceEditor.prototype.deleteItem = function (model, event) { if (this.notOther) { var index = model.question.choices.indexOf(model.item); model.question.choices.splice(index, 1); var item = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_utils__["b" /* findParentNode */])("item_draggable", this.rootElement); item.parentElement.removeChild(item); } else { this.question.hasOther = false; } this.editor.onQuestionEditorChanged(this.question); }; Object.defineProperty(ItemInplaceEditor.prototype, "notOther", { get: function () { return this.question.otherItem !== this.item; }, enumerable: true, configurable: true }); return ItemInplaceEditor; }(__WEBPACK_IMPORTED_MODULE_6__title_editor__["b" /* TitleInplaceEditor */])); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("item-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new ItemInplaceEditor(params.target[params.name], params.question, params.item, componentInfo.element, params.editor); var property = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.findProperty(params.target.getType(), params.name); model.valueChanged = function (newValue) { params.target[params.name] = newValue; params.editor.onPropertyValueChanged(property, params.target, newValue); }; return model; } }, template: templateHtml }); var itemAdorner = { getMarkerClass: function (model) { return !!model.parent && !!model.choices ? "item_editable" : ""; }, afterRender: function (elements, model, editor) { for (var i = 0; i < elements.length; i++) { elements[i].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("span"); if (i === elements.length - 1 && model.hasOther) { decoration.innerHTML = "<item-editor params='name: \"otherText\", target: target, item: item, question: question, editor: editor'></item-editor>"; elements[i].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"]({ item: model.otherItem, question: model, target: model, editor: editor }, decoration); } else { decoration.innerHTML = "<item-editor params='name: \"text\", target: target, item: item, question: question, editor: editor'></item-editor>"; elements[i].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"]({ item: model.choices[i], question: model, target: model.choices[i], editor: editor }, decoration); } } } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("controlLabel", itemAdorner); var createAddItemHandler = function (question, onItemAdded) { return function () { var nextValue = null; var values = question.choices.map(function (item) { return item.itemValue; }); nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_utils__["a" /* getNextValue */])("item", values); var itemValue = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](nextValue); itemValue.locOwner = { getLocale: function () { if (!!question["getLocale"]) return question.getLocale(); return ""; }, getMarkdownHtml: function (text) { return text; }, getProcessedText: function (text) { return text; } }; question.choices = question.choices.concat([itemValue]); !!onItemAdded && onItemAdded(itemValue); }; }; var itemDraggableAdorner = { getMarkerClass: function (model) { return !!model.parent && !!model.choices ? "item_draggable" : ""; }, afterRender: function (elements, model, editor) { var itemsRoot = elements[0].parentElement; if (model.hasOther) { elements[elements.length - 1].classList.remove("item_draggable"); } var sortable = __WEBPACK_IMPORTED_MODULE_5_sortablejs___default.a.create(itemsRoot, { handle: ".svda-drag-handle", draggable: ".item_draggable", animation: 150, onEnd: function (evt) { var choices = model.choices; var choice = choices[evt.oldIndex]; choices.splice(evt.oldIndex, 1); choices.splice(evt.newIndex, 0, choice); editor.onQuestionEditorChanged(model); } }); var addNew = document.createElement("div"); addNew.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addItem"); addNew.className = "svda-add-new-item svd-primary-icon"; addNew.onclick = createAddItemHandler(model, function (itemValue) { return editor.onQuestionEditorChanged(model); }); var svgElem = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElem.setAttribute("class", "svd-svg-icon"); svgElem.style.width = "12px"; svgElem.style.height = "12px"; var useElem = document.createElementNS("http://www.w3.org/2000/svg", "use"); useElem.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#icon-inplaceplus"); svgElem.appendChild(useElem); addNew.appendChild(svgElem); itemsRoot.appendChild(addNew); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("item", itemDraggableAdorner); /***/ }), /* 22 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(5); /* unused harmony export DragDropTargetElement */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DragDropHelper; }); var DragDropTargetElement = (function () { function DragDropTargetElement(page, target, source) { this.page = page; this.target = target; this.source = source; this.nestedPanelDepth = -1; } DragDropTargetElement.prototype.moveTo = function (destination, isBottom, isEdge) { if (isEdge === void 0) { isEdge = false; } //console.log("dest: " + destination.name + ", isBottom:" + isBottom + ", isEdge:" + isEdge); isEdge = isEdge || !destination.isPanel; if (destination === this.target) return !this.target.isPanel; var destInfo = this.findInfo(destination, isEdge); if (!destInfo) { this.clear(); return false; } var targetInfo = this.findInfo(this.target, true); this.updateInfo(destInfo, isBottom, isEdge); if (this.isInfoEquals(targetInfo, destInfo)) return true; this.clearByInfo(targetInfo); destInfo = this.findInfo(destination, isEdge); if (!destInfo) return false; this.updateInfo(destInfo, isBottom, isEdge); if (!this.canMove(destInfo)) return false; this.addInfo(destInfo); return true; }; DragDropTargetElement.prototype.doDrop = function () { var destInfo = this.findInfo(this.target); if (!destInfo) return; var index = this.getIndexByInfo(destInfo); var newElement = this.getNewTargetElement(); this.moveToParent = destInfo.panel; this.moveToIndex = index; destInfo.panel.addElement(newElement, index); if (this.source) { var srcInfo = this.findInfo(this.source, true); var panel = srcInfo ? srcInfo.panel : this.page; panel.removeElement(this.source); } return newElement; }; DragDropTargetElement.prototype.clear = function () { this.clearByInfo(this.findInfo(this.target, true)); }; DragDropTargetElement.prototype.getIndexByInfo = function (info) { if (!info) return 0; var rows = info.panel.koRows(); var index = 0; for (var i = 0; i < info.rIndex; i++) { index += rows[i]["koElements"]().length; } return index + info.elIndex; }; DragDropTargetElement.prototype.canMove = function (destInfo) { if (this.target.isPanel && destInfo.element) { if (this.target == destInfo.element || this.target.containsElement(destInfo.element)) return false; if (this.source && (this.source == destInfo.element || this.source.containsElement(destInfo.element))) return false; } if (!this.source) return true; var srcInfo = this.findInfo(this.source); if (srcInfo == null || srcInfo.panel != destInfo.panel) return true; var srcIndex = this.getIndexByInfo(srcInfo); var destIndex = this.getIndexByInfo(destInfo); var diff = destIndex - srcIndex; return diff < 0 || diff > 1; }; DragDropTargetElement.prototype.isLastElementInRow = function (info) { return (info.elIndex == info.panel["koRows"]()[info.rIndex]["koElements"]().length - 1); }; DragDropTargetElement.prototype.updateInfo = function (info, isBottom, isEdge) { if (info.rIndex < 0) return; if (this.target.startWithNewLine) { if (isBottom) info.rIndex++; } else { if (isBottom) { info.elIndex++; } else { if (info.elIndex == 0 && info.rIndex > 0) { info.rIndex--; info.elIndex = info.panel["koRows"]()[info.rIndex]["koElements"]().length; } } } }; DragDropTargetElement.prototype.addInfo = function (info) { if (this.target.isPanel) { this.target.parent = info.panel; } if (this.target.startWithNewLine || info.elIndex < 1 || info.rIndex < 0 || info.rIndex >= info.panel.koRows().length) { this.AddInfoAsRow(info); } else { var row = info.panel.koRows()[info.rIndex]; var elements = row["koElements"](); if (info.elIndex < elements.length) { elements.splice(info.elIndex, 0, this.target); } else { elements.push(this.target); } row["koElements"](elements); row.updateVisible(); } }; DragDropTargetElement.prototype.AddInfoAsRow = function (info) { var row = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["QuestionRow"](info.panel); row.addElement(this.target); var rows = info.panel.koRows(); if (info.rIndex >= 0 && info.rIndex < info.panel.koRows().length) { rows.splice(info.rIndex, 0, row); } else { rows.push(row); } info.panel.koRows(rows); }; DragDropTargetElement.prototype.clearByInfo = function (info) { if (info == null) return; var rows = info.panel.koRows(); if (info.rIndex < 0 || info.rIndex >= rows.length) return; var row = rows[info.rIndex]; var elements = row["koElements"](); if (row["koElements"]().length > 1) { elements.splice(info.elIndex, 1); row["koElements"](elements); row.updateVisible(); } else { rows.splice(info.rIndex, 1); info.panel.koRows(rows); } }; DragDropTargetElement.prototype.isInfoEquals = function (a, b) { if (a == null || b == null) return false; return (a.panel === b.panel && a.rIndex === b.rIndex && a.elIndex === b.elIndex); }; DragDropTargetElement.prototype.findInfo = function (el, isEdge) { if (isEdge === void 0) { isEdge = false; } var res = this.findInfoInPanel(this.page, el, isEdge, el); if (res && this.target && this.target.isPanel && this.nestedPanelDepth > -1) { var parents = this.getParentElements(res.panel); if (this.nestedPanelDepth + 1 < parents.length) { res.panel = parents[this.nestedPanelDepth]; res.element = parents[this.nestedPanelDepth + 1]; } } return res; }; DragDropTargetElement.prototype.getParentElements = function (panel) { var res = []; while (panel) { res.unshift(panel); panel = panel.parent; } return res; }; DragDropTargetElement.prototype.findInfoInPanel = function (panel, el, isEdge, root) { if (el == panel) { var parent = panel; if (panel.parent && (isEdge || (root && this.target && root.name == this.target.name && this.target.isPanel))) { parent = panel.parent; } return { panel: parent, rIndex: 0, elIndex: 0, element: panel }; } var rows = panel["koRows"](); for (var i = 0; i < rows.length; i++) { var row = rows[i]; var elements = row["koElements"](); for (var j = 0; j < elements.length; j++) { var element = elements[j]; if (element.isPanel) { var res = this.findInfoInPanel(element, el, isEdge, root); if (res) { if (res.element == element) { res.rIndex = i; res.elIndex = j; } return res; } } if (element == el) return { panel: panel, rIndex: i, elIndex: j, element: element }; //TODO refactor!!! if (!element.isPanel) { var childElements = this.getElements(element); for (var k = 0; k < childElements.length; k++) { if (childElements[k].isPanel) { var res = this.findInfoInPanel(childElements[k], el, isEdge, root); if (res) return res; } } } } } return null; }; DragDropTargetElement.prototype.getNewTargetElement = function () { var result = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData.createClass(this.target.getType()); var json = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toJsonObject(this.target); new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toObject(json, result); return result; }; DragDropTargetElement.prototype.getElements = function (element) { return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getElements(element, true); }; return DragDropTargetElement; }()); var DragDropHelper = (function () { function DragDropHelper(data, onModifiedCallback, parent) { if (parent === void 0) { parent = null; } this.data = data; this.scrollableElement = null; this.ddTarget = null; this.id = DragDropHelper.counter++; this.isScrollStop = true; this.onModifiedCallback = onModifiedCallback; this.scrollableElement = parent && parent.querySelector("#scrollableDiv"); this.prevCoordinates = { x: -1, y: -1 }; } DragDropHelper.prototype.attachToElement = function (domElement, surveyElement) { domElement.style.opacity = surveyElement.koIsDragging() ? 0.4 : 1; domElement.draggable = surveyElement.allowingOptions.allowDragging; domElement.ondragover = function (e) { if (!surveyElement.allowingOptions.allowDragging) return false; if (!e["markEvent"]) { e["markEvent"] = true; surveyElement.dragDropHelper().doDragDropOver(e, surveyElement, true); return false; } }; domElement.ondrop = function (e) { if (!e["markEvent"]) { e["markEvent"] = true; surveyElement.dragDropHelper().doDrop(e); } }; domElement.ondragstart = function (e) { var target = e.target || e.srcElement; if (target.contains(document.activeElement)) { e.preventDefault(); return false; } if (!surveyElement.allowingOptions.allowDragging) return false; if (!e["markEvent"]) { e["markEvent"] = true; surveyElement.dragDropHelper().startDragQuestion(e, surveyElement); } }; domElement.ondragend = function (e) { surveyElement.dragDropHelper().end(); }; }; Object.defineProperty(DragDropHelper.prototype, "survey", { get: function () { return this.data; }, enumerable: true, configurable: true }); DragDropHelper.prototype.startDragQuestion = function (event, element) { var json = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toJsonObject(element); json["type"] = element.getType(); this.prepareData(event, element.name, json); this.ddTarget.source = element; }; DragDropHelper.prototype.startDragToolboxItem = function (event, elementName, elementJson) { this.prepareData(event, elementName, elementJson); }; DragDropHelper.prototype.isSurveyDragging = function (event) { if (!event) return false; var data = this.getData(event).text; return data && data.indexOf(DragDropHelper.dataStart) == 0; }; DragDropHelper.prototype.doDragDropOver = function (event, element, isEdge) { if (isEdge === void 0) { isEdge = false; } event = this.getEvent(event); if (this.isSameCoordinates(event)) return; this.checkScrollY(event); if (!element || !this.isSurveyDragging(event) || this.isSamePlace(event, element)) return; element = this.replaceTargetElement(element); var bottomInfo = this.isBottom(event, element); isEdge = element.isPanel ? isEdge && bottomInfo.isEdge : true; if (element.isPanel && !isEdge && element.elements.length > 0) return; this.ddTarget.moveTo(element, bottomInfo.isBottom, isEdge); }; DragDropHelper.prototype.replaceTargetElement = function (element) { if (element.getType && element.getType() === "page" && element.elements.length !== 0) { var elements = element.elements; element = elements[elements.length - 1]; } return element; }; DragDropHelper.prototype.end = function () { if (this.ddTarget) { this.ddTarget.clear(); } this.isScrollStop = true; this.clearData(); }; Object.defineProperty(DragDropHelper.prototype, "isMoving", { get: function () { return this.ddTarget && this.ddTarget.source; }, enumerable: true, configurable: true }); DragDropHelper.prototype.doDrop = function (event) { if (event.stopPropagation) { event.stopPropagation(); } if (this.isSurveyDragging(event)) { event.preventDefault(); var newElement = this.ddTarget.doDrop(); if (this.onModifiedCallback) this.onModifiedCallback({ type: "DO_DROP", page: this.ddTarget.page, source: this.ddTarget.source, target: this.ddTarget.target, newElement: this.ddTarget.source ? null : newElement, moveToParent: this.ddTarget.moveToParent, moveToIndex: this.ddTarget.moveToIndex }); } this.end(); }; DragDropHelper.prototype.doLeavePage = function (event) { this.ddTarget.clear(); }; DragDropHelper.prototype.scrollToElement = function (el) { if (!this.scrollableElement || !el) return; el.scrollIntoView(false); }; DragDropHelper.prototype.createTargetElement = function (elementName, json) { if (!elementName || !json) return null; var targetElement = null; targetElement = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData.createClass(json["type"]); new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toObject(json, targetElement); targetElement.name = elementName; if (targetElement["setSurveyImpl"]) { targetElement["setSurveyImpl"](this.survey); } else { targetElement["setData"](this.survey); } targetElement.renderWidth = "100%"; targetElement["koIsDragging"](true); return targetElement; }; DragDropHelper.prototype.isBottom = function (event, surveyEl) { event = this.getEvent(event); var height = event.currentTarget["clientHeight"]; var y = event.offsetY; if (event.hasOwnProperty("layerX")) { y = event.layerY - event.currentTarget["offsetTop"]; } return { isBottom: y > height / 2, isEdge: y <= DragDropHelper.edgeHeight || height - y <= DragDropHelper.edgeHeight }; }; DragDropHelper.prototype.isSameCoordinates = function (event) { var res = Math.abs(event.pageX - this.prevCoordinates.x) > 5 || Math.abs(event.pageY - this.prevCoordinates.y) > 5; if (res) { this.prevCoordinates.x = event.pageX; this.prevCoordinates.y = event.pageY; } return !res; }; DragDropHelper.prototype.isSamePlace = function (event, element) { var prev = DragDropHelper.prevEvent; if (prev.element != element || Math.abs(event.clientX - prev.x) > 5 || Math.abs(event.clientY - prev.y) > 5) { prev.element = element; prev.x = event.clientX; prev.y = event.clientY; return false; } return true; }; DragDropHelper.prototype.checkScrollY = function (e) { if (!this.scrollableElement) return; var y = this.getScrollableElementPosY(e); if (y < 0) return; this.isScrollStop = true; var height = this.scrollableElement["clientHeight"]; if (y < DragDropHelper.ScrollOffset && y >= 0) { this.isScrollStop = false; this.doScrollY(-1); } if (height - y < DragDropHelper.ScrollOffset && height >= y) { this.isScrollStop = false; this.doScrollY(1); } }; DragDropHelper.prototype.doScrollY = function (step) { var el = this.scrollableElement; var scrollY = el.scrollTop + step; if (scrollY < 0) { this.isScrollStop = true; return; } el.scrollTop = scrollY; var self = this; if (!this.isScrollStop) { setTimeout(function () { self.doScrollY(step); }, DragDropHelper.ScrollDelay); } }; DragDropHelper.prototype.getScrollableElementPosY = function (e) { if (!this.scrollableElement || !e.currentTarget) return -1; var el = e.currentTarget; var offsetTop = 0; while (el && el != this.scrollableElement) { offsetTop += el["offsetTop"]; el = el["offsetParent"]; } return (e.offsetY + e.currentTarget["offsetTop"] - this.scrollableElement.offsetTop - this.scrollableElement.scrollTop); }; DragDropHelper.prototype.getEvent = function (event) { return event["originalEvent"] ? event["originalEvent"] : event; }; DragDropHelper.prototype.getY = function (element) { var result = 0; while (element) { result += element.offsetTop - element.scrollTop + element.clientTop; element = element.offsetParent; } return result; }; DragDropHelper.prototype.prepareData = function (event, elementName, json) { var str = DragDropHelper.dataStart + "questionname:" + elementName; this.setData(event, str); var targetElement = this.createTargetElement(elementName, json); this.ddTarget = new DragDropTargetElement(this.survey.currentPage, targetElement, null); this.ddTarget.nestedPanelDepth = DragDropHelper.nestedPanelDepth; }; DragDropHelper.prototype.setData = function (event, text) { if (event["originalEvent"]) { event = event["originalEvent"]; } if (event.dataTransfer) { event.dataTransfer.setData("Text", text); event.dataTransfer.effectAllowed = "copy"; } DragDropHelper.dragData = { text: text }; }; DragDropHelper.prototype.getData = function (event) { if (event["originalEvent"]) { event = event["originalEvent"]; } if (event.dataTransfer) { var text = event.dataTransfer.getData("Text"); if (text) { DragDropHelper.dragData.text = text; } } return DragDropHelper.dragData; }; DragDropHelper.prototype.clearData = function () { //this.ddTarget = null; DragDropHelper.dragData = { text: "", json: null }; var prev = DragDropHelper.prevEvent; prev.element = null; prev.x = -1; prev.y = -1; this.prevCoordinates.x = -1; this.prevCoordinates.y = -1; }; return DragDropHelper; }()); DragDropHelper.edgeHeight = 20; DragDropHelper.nestedPanelDepth = -1; DragDropHelper.dataStart = "surveyjs,"; DragDropHelper.dragData = { text: "", json: null }; DragDropHelper.prevEvent = { element: null, x: -1, y: -1 }; DragDropHelper.counter = 1; DragDropHelper.ScrollDelay = 30; DragDropHelper.ScrollOffset = 100; /***/ }), /* 23 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return enStrings; }); //Uncomment this line on creating a translation file //import { editorLocalization, defaultStrings } from "../editorLocalization"; //Uncomment this line on creating a translation file var enStrings = { //survey templates survey: { edit: "Edit", dropQuestion: "Please drop a question here from the Toolbox on the left.", copy: "Copy", addToToolbox: "Add to toolbox", deletePanel: "Delete Panel", deleteQuestion: "Delete Question", convertTo: "Convert to", drag: "Drag element" }, //questionTypes qt: { default: "Default", checkbox: "Checkbox", comment: "Comment", dropdown: "Dropdown", file: "File", html: "Html", matrix: "Matrix (single choice)", matrixdropdown: "Matrix (multiple choice)", matrixdynamic: "Matrix (dynamic rows)", multipletext: "Multiple Text", panel: "Panel", paneldynamic: "Panel (dynamic panels)", radiogroup: "Radiogroup", rating: "Rating", text: "Single Input", boolean: "Boolean", expression: "Expression" }, //Strings in Editor ed: { survey: "Survey", settings: "Survey Settings", editSurvey: "Edit Survey", addNewPage: "Add New Page", moveRight: "Scroll to the Right", moveLeft: "Scroll to the Left", deletePage: "Delete Page", editPage: "Edit Page", edit: "Edit", newPageName: "page", newQuestionName: "question", newPanelName: "panel", testSurvey: "Test Survey", testSurveyAgain: "Test Survey Again", testSurveyWidth: "Survey width: ", embedSurvey: "Embed Survey", saveSurvey: "Save Survey", designer: "Survey Designer", jsonEditor: "JSON Editor", undo: "Undo", redo: "Redo", options: "Options", generateValidJSON: "Generate Valid JSON", generateReadableJSON: "Generate Readable JSON", toolbox: "Toolbox", toolboxGeneralCategory: "General", delSelObject: "Delete selected object", editSelObject: "Edit selected object", correctJSON: "Please correct JSON.", surveyResults: "Survey Result: ", modified: "Modified", saving: "Saving", saved: "Saved" }, //Property names in table headers pel: { isRequired: "Required?" }, //Property Editors pe: { apply: "Apply", ok: "OK", cancel: "Cancel", reset: "Reset", close: "Close", delete: "Delete", addNew: "Add New", addItem: "Click to add an item...", removeAll: "Remove All", edit: "Edit", itemValueEdit: "Visible If", editChoices: "Edit Choices", move: "Move", empty: "<empty>", notEmpty: "<edit value>", fastEntry: "Fast Entry", formEntry: "Form Entry", testService: "Test the service", conditionSelectQuestion: "Select question...", conditionValueQuestionTitle: "Please enter/select the value", conditionButtonAdd: "Add", conditionButtonReplace: "Replace", conditionHelp: "Please enter a boolean expression. It should return true to keep the question/page visible. For example: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "Please enter an expression. You may use curly brackets to get access to the question values: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Press ctrl+space to get expression completion hint", aceEditorRowTitle: "Current row", aceEditorPanelTitle: "Current panel", showMore: "For more details please check the documentation", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=QuestionBase¶meter=visibleIf", assistantTitle: "Available questions:", cellsEmptyRowsColumns: "There is should be at least one column or row", propertyIsEmpty: "Please enter a value", value: "Value", text: "Text", columnEdit: "Edit column: {0}", itemEdit: "Edit item: {0}", url: "URL", path: "Path", valueName: "Value name", titleName: "Title name", hasOther: "Has other item", otherText: "Other item text", name: "Name", title: "Title", cellType: "Cell type", colCount: "Column count", choicesOrder: "Select choices order", visible: "Is visible?", isRequired: "Is required?", startWithNewLine: "Is start with new line?", rows: "Row count", placeHolder: "Input place holder", showPreview: "Is image preview shown?", storeDataAsText: "Store file content in JSON result as text", maxSize: "Maximum file size in bytes", imageHeight: "Image height", imageWidth: "Image width", rowCount: "Row count", columnsLocation: "Columns location", addRowLocation: "Add row button location", addRowText: "Add row button text", removeRowText: "Remove row button text", minRateDescription: "Minimum rate description", maxRateDescription: "Maximum rate description", inputType: "Input type", optionsCaption: "Options caption", defaultValue: "Default value", cellsDefaultRow: "Default cells texts", surveyEditorTitle: "Edit survey settings", qEditorTitle: "Edit: {0}", //survey showTitle: "Show/hide title", locale: "Default language", mode: "Mode (edit/read only)", clearInvisibleValues: "Clear invisible values", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "Show page titles", showPageNumbers: "Show page numbers", pagePrevText: "Page previous button text", pageNextText: "Page next button text", completeText: "Complete button text", startSurveyText: "Start button text", showNavigationButtons: "Show navigation buttons (default navigation)", showPrevButton: "Show previous button (user may return on previous page)", firstPageIsStarted: "The first page in the survey is a started page.", showCompletedPage: "Show the completed page at the end (completedHtml)", goNextPageAutomatic: "On answering all questions, go to the next page automatically", showProgressBar: "Show progress bar", questionTitleLocation: "Question title location", requiredText: "The question required symbol(s)", questionStartIndex: "Question start index (1, 2 or 'A', 'a')", showQuestionNumbers: "Show question numbers", questionTitleTemplate: "Question title template, default is: '{no}. {require} {title}'", questionErrorLocation: "Question error location", focusFirstQuestionAutomatic: "Focus first question on changing the page", questionsOrder: "Elements order on the page", maxTimeToFinish: "Maximum time to finish the survey", maxTimeToFinishPage: "Maximum time to finish a page in the survey", showTimerPanel: "Show timer panel", showTimerPanelMode: "Show timer panel mode", renderMode: "Render mode", allowAddPanel: "Allow adding a panel", allowRemovePanel: "Allow removing the panel", panelAddText: "Adding panel text", panelRemoveText: "Removing panel text", isSinglePage: "Show all elements on one page", tabs: { general: "General", fileOptions: "Options", html: "Html Editor", columns: "Columns", rows: "Rows", choices: "Choices", items: "Items", visibleIf: "Visible If", enableIf: "Enable If", rateValues: "Rate Values", choicesByUrl: "Choices from Web", matrixChoices: "Default Choices", multipleTextItems: "Text Inputs", validators: "Validators", navigation: "Navigation", question: "Question", completedHtml: "Completed Html", loadingHtml: "Loading Html", timer: "Timer/Quiz", triggers: "Triggers", templateTitle: "Template title" }, editProperty: "Edit property '{0}'", items: "[ Items: {0} ]", enterNewValue: "Please, enter the value.", noquestions: "There is no any question in the survey.", createtrigger: "Please create a trigger", triggerOn: "On ", triggerMakePagesVisible: "Make pages visible:", triggerMakeQuestionsVisible: "Make elements visible:", triggerCompleteText: "Complete the survey if succeed.", triggerNotSet: "The trigger is not set", triggerRunIf: "Run if", triggerSetToName: "Change value of: ", triggerSetValue: "to: ", triggerIsVariable: "Do not put the variable into the survey result." }, //Property values pv: { true: "true", false: "false", inherit: "inherit", show: "show", hide: "hide", default: "default", initial: "initial", random: "random", collapsed: "collapsed", expanded: "expanded", none: "none", asc: "ascending", desc: "descending", indeterminate: "indeterminate", decimal: "decimal", currency: "currency", percent: "percent", firstExpanded: "firstExpanded", off: "off", onPanel: "onPanel", onSurvey: "onSurvey", list: "list", progressTop: "progressTop", progressBottom: "progressBottom", progressTopBottom: "progressTopBottom", horizontal: "horizontal", vertical: "vertical", top: "top", bottom: "bottom", topBottom: "top and bottom", left: "left", color: "color", date: "date", datetime: "datetime", "datetime-local": "datetime-local", email: "email", month: "month", number: "number", password: "password", range: "range", tel: "tel", text: "text", time: "time", url: "url", week: "week", hidden: "hidden", on: "on", onPage: "onPage", edit: "edit", display: "display", onComplete: "onComplete", onHidden: "onHidden", all: "all", page: "page", survey: "survey", onNextPage: "onNextPage", onValueChanged: "onValueChanged" }, //Operators op: { empty: "is empty", notempty: "is not empty", equal: "equals", notequal: "not equals", contains: "contains", notcontains: "not contains", greater: "greater", less: "less", greaterorequal: "greater or equals", lessorequal: "less or equals" }, //Embed window ew: { angular: "Use Angular version", jquery: "Use jQuery version", knockout: "Use Knockout version", react: "Use React version", vue: "Use Vue version", bootstrap: "For bootstrap framework", standard: "No bootstrap", showOnPage: "Show survey on a page", showInWindow: "Show survey in a window", loadFromServer: "Load Survey JSON from server", titleScript: "Scripts and styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Select the page to test it:" }, validators: { answercountvalidator: "answer count", emailvalidator: "e-mail", expressionvalidator: "expression", numericvalidator: "numeric", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "complete survey", setvaluetrigger: "set value", visibletrigger: "change visibility" }, //Properties p: { name: "name", title: { name: "title", title: "Leave it empty, if it is the same as 'Name'" }, navigationButtonsVisibility: "navigationButtonsVisibility", questionsOrder: "questionsOrder", maxTimeToFinish: "maxTimeToFinish", visible: "visible", visibleIf: "visibleIf", questionTitleLocation: "questionTitleLocation", description: "description", state: "state", isRequired: "isRequired", indent: "indent", requiredErrorText: "requiredErrorText", startWithNewLine: "startWithNewLine", innerIndent: "innerIndent", page: "page", width: "width", commentText: "commentText", valueName: "valueName", enableIf: "enableIf", defaultValue: "defaultValue", correctAnswer: "correctAnswer", readOnly: "readOnly", validators: "validators", titleLocation: "titleLocation", hasComment: "hasComment", hasOther: "hasOther", choices: "choices", choicesOrder: "choicesOrder", choicesByUrl: "choicesByUrl", otherText: "otherText", otherErrorText: "otherErrorText", storeOthersAsComment: "storeOthersAsComment", label: "label", showTitle: "showTitle", valueTrue: "valueTrue", valueFalse: "valueFalse", cols: "cols", rows: "rows", placeHolder: "placeHolder", optionsCaption: "optionsCaption", expression: "expression", format: "format", displayStyle: "displayStyle", currency: "currency", useGrouping: "useGrouping", showPreview: "showPreview", allowMultiple: "allowMultiple", imageHeight: "imageHeight", imageWidth: "imageWidth", storeDataAsText: "storeDataAsText", maxSize: "maxSize", html: "html", columns: "columns", cells: "cells", isAllRowRequired: "isAllRowRequired", horizontalScroll: "horizontalScroll", cellType: "cellType", columnsLocation: "columnsLocation", columnColCount: "columnColCount", columnMinWidth: "columnMinWidth", rowCount: "rowCount", minRowCount: "minRowCount", maxRowCount: "maxRowCount", keyName: "keyName", keyDuplicationError: "keyDuplicationError", confirmDelete: "confirmDelete", confirmDeleteText: "confirmDeleteText", addRowLocation: "addRowLocation", addRowText: "addRowText", removeRowText: "removeRowText", items: "items", itemSize: "itemSize", colCount: "colCount", templateTitle: "templateTitle", templateDescription: "templateDescription", allowAddPanel: "allowAddPanel", allowRemovePanel: "allowRemovePanel", panelCount: "panelCount", minPanelCount: "minPanelCount", maxPanelCount: "maxPanelCount", panelsState: "panelsState", panelAddText: "panelAddText", panelRemoveText: "panelRemoveText", panelPrevText: "panelPrevText", panelNextText: "panelNextText", showQuestionNumbers: "showQuestionNumbers", showRangeInProgress: "showRangeInProgress", renderMode: "renderMode", templateTitleLocation: "templateTitleLocation", rateValues: "rateValues", rateMin: "rateMin", rateMax: "rateMax", rateStep: "rateStep", minRateDescription: "minRateDescription", maxRateDescription: "maxRateDescription", inputType: "inputType", size: "size", locale: "locale", focusFirstQuestionAutomatic: "focusFirstQuestionAutomatic", completedHtml: "completedHtml", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "loadingHtml", triggers: "triggers", cookieName: "cookieName", sendResultOnPageNext: "sendResultOnPageNext", showNavigationButtons: "showNavigationButtons", showPrevButton: "showPrevButton", showPageTitles: "showPageTitles", showCompletedPage: "showCompletedPage", showPageNumbers: "showPageNumbers", questionErrorLocation: "questionErrorLocation", showProgressBar: "showProgressBar", mode: "mode", goNextPageAutomatic: "goNextPageAutomatic", checkErrorsMode: "checkErrorsMode", clearInvisibleValues: "clearInvisibleValues", startSurveyText: "startSurveyText", pagePrevText: "pagePrevText", pageNextText: "pageNextText", completeText: "completeText", requiredText: "requiredText", questionStartIndex: "questionStartIndex", questionTitleTemplate: "questionTitleTemplate", firstPageIsStarted: "firstPageIsStarted", isSinglePage: "isSinglePage", maxTimeToFinishPage: "maxTimeToFinishPage", showTimerPanel: "showTimerPanel", showTimerPanelMode: "showTimerPanelMode", text: "text", minValue: "minimum value", maxValue: "maximum value", minLength: "minumum length", maxLength: "maximum length", allowDigits: "allow digits", minCount: "minumum count", maxCount: "maximum count", regex: "regular expression" } }; //Uncomment this line on creating a translation file. You should replace "en" and enStrings with your locale ("fr", "de" and so on) and your variable. //editorLocalization.locales["en"] = enStrings; /***/ }), /* 24 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyEditorBase__ = __webpack_require__(12); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyCustomEditor; }); var SurveyPropertyCustomEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyCustomEditor, _super); function SurveyPropertyCustomEditor(property, widgetJSON) { if (widgetJSON === void 0) { widgetJSON = null; } var _this = _super.call(this, property) || this; _this.isValueChanging = false; _this.widgetJSONValue = widgetJSON; var self = _this; _this["koAfterRender"] = function (el, con) { self.doAfterRender(el, con); }; return _this; } Object.defineProperty(SurveyPropertyCustomEditor.prototype, "editorType", { get: function () { return "custom"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyCustomEditor.prototype, "widgetJSON", { get: function () { return this.widgetJSONValue; }, enumerable: true, configurable: true }); SurveyPropertyCustomEditor.prototype.onValueChanged = function () { if (this.isValueChanging) return; this.isValueChanging = true; _super.prototype.onValueChanged.call(this); if (this.onValueChangedCallback) this.onValueChangedCallback(this.editingValue); this.isValueChanging = false; }; Object.defineProperty(SurveyPropertyCustomEditor.prototype, "widgetRender", { get: function () { return this.widgetJSON ? this.widgetJSON.render : null; }, enumerable: true, configurable: true }); SurveyPropertyCustomEditor.prototype.doAfterRender = function (elements, con) { var el = elements[0]; if (el && this.widgetRender) this.widgetRender(this, el); }; return SurveyPropertyCustomEditor; }(__WEBPACK_IMPORTED_MODULE_1__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); /***/ }), /* 25 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectProperty__ = __webpack_require__(11); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(5); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyQuestionEditorProperty; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionEditorRow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionEditorProperties; }); var SurveyQuestionEditorProperty = (function () { function SurveyQuestionEditorProperty(obj, property, displayName, options, isTabProperty) { if (options === void 0) { options = null; } if (isTabProperty === void 0) { isTabProperty = false; } this.obj = obj; this.property = property; var self = this; this.objectPropertyValue = new __WEBPACK_IMPORTED_MODULE_2__objectProperty__["a" /* SurveyObjectProperty */](this.property, null); this.editor.isTabProperty = isTabProperty; this.editor.options = options; if (!displayName) { displayName = __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("pe." + this.property.name); } if (displayName) this.editor.displayName = displayName; this.objectProperty.object = obj; this.editor.setup(); } Object.defineProperty(SurveyQuestionEditorProperty.prototype, "objectProperty", { get: function () { return this.objectPropertyValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorProperty.prototype, "editor", { get: function () { return this.objectProperty.editor; }, enumerable: true, configurable: true }); SurveyQuestionEditorProperty.prototype.hasError = function () { return this.editor.hasError(); }; SurveyQuestionEditorProperty.prototype.apply = function () { this.editor.apply(); this.obj[this.property.name] = this.editor.koValue(); }; SurveyQuestionEditorProperty.prototype.reset = function () { this.editor.koValue(this.property.getPropertyValue(this.obj)); }; SurveyQuestionEditorProperty.prototype.beforeShow = function () { this.editor.beforeShow(); }; return SurveyQuestionEditorProperty; }()); var SurveyQuestionEditorRow = (function () { function SurveyQuestionEditorRow(obj) { this.obj = obj; this.properties = []; } SurveyQuestionEditorRow.prototype.addProperty = function (property, displayName, options, isTabProperty) { this.properties.push(new SurveyQuestionEditorProperty(this.obj, property, displayName, options, isTabProperty)); }; SurveyQuestionEditorRow.prototype.hasError = function () { var isError = false; for (var i = 0; i < this.properties.length; i++) { isError = this.properties[i].hasError() || isError; } return isError; }; return SurveyQuestionEditorRow; }()); var SurveyQuestionEditorProperties = (function () { function SurveyQuestionEditorProperties(obj, properties, onCanShowPropertyCallback, options, tab) { if (onCanShowPropertyCallback === void 0) { onCanShowPropertyCallback = null; } if (options === void 0) { options = null; } if (tab === void 0) { tab = null; } this.obj = obj; this.options = options; this.tab = tab; this.isTabProperty = false; this.rows = []; this.isTabProperty = !!tab; this.onCanShowPropertyCallback = onCanShowPropertyCallback; this.properties = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData["getPropertiesByObj"] ? __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData["getPropertiesByObj"](this.obj) : __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData.getProperties(this.obj.getType()); this.buildRows(properties); } SurveyQuestionEditorProperties.prototype.apply = function () { this.performForAllProperties(function (p) { return p.apply(); }); }; SurveyQuestionEditorProperties.prototype.reset = function () { this.performForAllProperties(function (p) { return p.reset(); }); }; SurveyQuestionEditorProperties.prototype.beforeShow = function () { this.performForAllProperties(function (p) { return p.beforeShow(); }); }; SurveyQuestionEditorProperties.prototype.hasError = function () { var isError = false; for (var i = 0; i < this.rows.length; i++) { isError = this.rows[i].hasError() || isError; } return isError; }; SurveyQuestionEditorProperties.prototype.performForAllProperties = function (func) { for (var i = 0; i < this.rows.length; i++) { for (var j = 0; j < this.rows[i].properties.length; j++) { var property = this.rows[i].properties[j]; func(property); } } }; SurveyQuestionEditorProperties.prototype.buildRows = function (properties) { for (var i = 0; i < properties.length; i++) { var name = this.getName(properties[i]); var jsonProperty = this.getProperty(name); if (!jsonProperty) continue; var row = this.getRowByCategory(properties[i].category); if (!row) { row = new SurveyQuestionEditorRow(this.obj); if (properties[i].category) row.category = properties[i].category; this.rows.push(row); } row.addProperty(jsonProperty, properties[i].title, this.options, this.isTabProperty); } }; SurveyQuestionEditorProperties.prototype.getName = function (prop) { if (!prop) return null; if (typeof prop === "string") return prop; if (prop.name) return prop.name; return null; }; SurveyQuestionEditorProperties.prototype.getRowByCategory = function (category) { if (!category) return null; for (var i = 0; i < this.rows.length; i++) { if (this.rows[i].category == category) return this.rows[i]; } return null; }; SurveyQuestionEditorProperties.prototype.getProperty = function (propertyName) { if (!propertyName) return null; var property = null; for (var i = 0; i < this.properties.length; i++) { if (this.properties[i].name == propertyName) { property = this.properties[i]; break; } } if (!property) return null; if (!!this.tab && property.name == this.tab.name && this.tab.visible === true) return property; return __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(this.obj, property, this.onCanShowPropertyCallback) ? property : null; }; return SurveyQuestionEditorProperties; }()); /***/ }), /* 26 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionToolbox; }); /** * The list of Toolbox items. */ var QuestionToolbox = (function () { function QuestionToolbox(supportedQuestions) { if (supportedQuestions === void 0) { supportedQuestions = null; } this.supportedQuestions = supportedQuestions; this._orderedQuestions = [ "text", "checkbox", "radiogroup", "dropdown", "comment", "rating", "boolean", "html" ]; /** * The maximum number of copied toolbox items. If an user adding copiedItemMaxCount + 1 item, the first added item will be removed. */ this.copiedItemMaxCount = 3; this.allowExpandMultipleCategoriesValue = false; this.itemsValue = []; this.koItems = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koCategories = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koActiveCategory = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koHasCategories = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.createDefaultItems(supportedQuestions); var self = this; this.koActiveCategory.subscribe(function (newValue) { for (var i = 0; i < self.koCategories().length; i++) { var category = self.koCategories()[i]; category.koCollapsed(category.name !== newValue); } }); } Object.defineProperty(QuestionToolbox.prototype, "orderedQuestions", { /** * Modify this array to change the toolbox items order. */ get: function () { return this._orderedQuestions; }, set: function (questions) { this._orderedQuestions = questions; this.reorderItems(); }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "jsonText", { /** * The Array of Toolbox items as Text JSON. */ get: function () { return JSON.stringify(this.itemsValue); }, set: function (value) { this.itemsValue = value ? JSON.parse(value) : []; this.onItemsChanged(); }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "copiedJsonText", { /** * The Array of copied Toolbox items as Text JSON. */ get: function () { return JSON.stringify(this.copiedItems); }, set: function (value) { var newItems = value ? JSON.parse(value) : []; this.clearCopiedItems(); for (var i = 0; i < newItems.length; i++) { newItems[i].isCopied = true; this.addItem(newItems[i]); } }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "items", { /** * The Array of Toolbox items */ get: function () { return this.itemsValue; }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "copiedItems", { /** * The Array of copied Toolbox items */ get: function () { var result = []; for (var i = 0; i < this.itemsValue.length; i++) { if (this.itemsValue[i].isCopied) result.push(this.itemsValue[i]); } return result; }, enumerable: true, configurable: true }); /** * Add toolbox items into the Toolbox * @param items the list of new items * @param clearAll set it to true to clear all previous items. */ QuestionToolbox.prototype.addItems = function (items, clearAll) { if (clearAll === void 0) { clearAll = false; } if (clearAll) { this.clearItems(); } for (var i = 0; i < items.length; i++) { this.itemsValue.push(items[i]); } this.onItemsChanged(); }; /** * Add a copied Question into Toolbox * @param question a copied Survey.Question */ QuestionToolbox.prototype.addCopiedItem = function (question) { var item = { name: question.name, title: question.name, isCopied: true, iconName: "icon-default", json: this.getQuestionJSON(question), category: "" }; if (this.replaceItem(item)) return; var copied = this.copiedItems; if (this.copiedItemMaxCount > 0 && copied.length == this.copiedItemMaxCount) this.removeItem(copied[this.copiedItemMaxCount - 1].name); this.addItem(item); }; /** * Add a toolbox item * @param item the toolbox item description * @see IQuestionToolboxItem */ QuestionToolbox.prototype.addItem = function (item) { this.itemsValue.push(item); this.onItemsChanged(); }; /** * Add a new toolbox item, add delete the old item with the same name * @param item the toolbox item description * @see IQuestionToolboxItem */ QuestionToolbox.prototype.replaceItem = function (item) { var index = this.indexOf(item.name); if (index < 0) return; this.itemsValue[index] = item; this.onItemsChanged(); return true; }; /** * Remove a toolbox item by it's name * @param name toolbox item name * @see IQuestionToolboxItem */ QuestionToolbox.prototype.removeItem = function (name) { var index = this.indexOf(name); if (index < 0) return false; this.itemsValue.splice(index, 1); this.onItemsChanged(); return true; }; /** * Remove all toolbox items. */ QuestionToolbox.prototype.clearItems = function () { this.itemsValue = []; this.onItemsChanged(); }; /** * Remove all copied toolbox items. */ QuestionToolbox.prototype.clearCopiedItems = function () { var removedItems = this.copiedItems; for (var i = 0; i < removedItems.length; i++) { this.removeItem(removedItems[i].name); } }; /** * Returns toolbox item by its name. Returns null if there is no toolbox item with this name * @param name */ QuestionToolbox.prototype.getItemByName = function (name) { var index = this.indexOf(name); return index > -1 ? this.itemsValue[index] : null; }; Object.defineProperty(QuestionToolbox.prototype, "allowExpandMultipleCategories", { /** * Set it to true, to allow end-user to expand more than one category. There will no active category in this case * @see activeCategory */ get: function () { return this.allowExpandMultipleCategoriesValue; }, set: function (val) { this.allowExpandMultipleCategoriesValue = val; if (val) { this.activeCategory = ""; } else { if (this.koCategories().length > 0) { this.activeCategory = this.koCategories()[0].name; } } }, enumerable: true, configurable: true }); /** * Change the category of the toolbox item * @param name the toolbox item name * @param category new category name */ QuestionToolbox.prototype.changeCategory = function (name, category) { this.changeCategories([{ name: name, category: category }]); }; /** * Change categories for several toolbox items. * @param changedItems the array of objects {name: "your toolbox item name", category: "new category name"} */ QuestionToolbox.prototype.changeCategories = function (changedItems) { for (var i = 0; i < changedItems.length; i++) { var item = changedItems[i]; var toolboxItem = this.getItemByName(item.name); if (toolboxItem) { toolboxItem.category = item.category; } } this.onItemsChanged(); }; Object.defineProperty(QuestionToolbox.prototype, "activeCategory", { /** * Set and get and active category. This property doesn't work if allowExpandMultipleCategories is true. Its default value is empty. * @see allowExpandMultipleCategories * @see expandCategory * @see collapseCategory */ get: function () { return this.koActiveCategory(); }, set: function (val) { this.koActiveCategory(val); }, enumerable: true, configurable: true }); QuestionToolbox.prototype.doCategoryClick = function (categoryName) { if (this.allowExpandMultipleCategories) { var category = this.getCategoryByName(categoryName); if (category) { category.koCollapsed(!category.koCollapsed()); } } else { this.activeCategory = categoryName; } }; /** * Expand a category by its name. If allowExpandMultipleCategories is false (default value), all other categories become collapsed * @param categoryName the category name * @see allowExpandMultipleCategories * @see collapseCategory */ QuestionToolbox.prototype.expandCategory = function (categoryName) { if (this.allowExpandMultipleCategories) { var category = this.getCategoryByName(categoryName); if (category) { category.koCollapsed(false); } } else { this.activeCategory = categoryName; } }; /** * Collapse a category by its name. If allowExpandMultipleCategories is false (default value) this function does nothing * @param categoryName the category name * @see allowExpandMultipleCategories */ QuestionToolbox.prototype.collapseCategory = function (categoryName) { if (!this.allowExpandMultipleCategories) return; var category = this.getCategoryByName(categoryName); if (category) { category.koCollapsed(true); } }; /** * Expand all categories. If allowExpandMultipleCategories is false (default value) this function does nothing * @see allowExpandMultipleCategories */ QuestionToolbox.prototype.expandAllCategories = function () { this.expandCollapseAllCategories(false); }; /** * Collapse all categories. If allowExpandMultipleCategories is false (default value) this function does nothing * @see allowExpandMultipleCategories */ QuestionToolbox.prototype.collapseAllCategories = function () { this.expandCollapseAllCategories(true); }; QuestionToolbox.prototype.expandCollapseAllCategories = function (isCollapsed) { var categories = this.koCategories(); for (var i = 0; i < categories.length; i++) { categories[i].koCollapsed(isCollapsed); } }; QuestionToolbox.prototype.getCategoryByName = function (categoryName) { var categories = this.koCategories(); for (var i = 0; i < categories.length; i++) { var category = categories[i]; if (category.name === categoryName) return category; } return null; }; QuestionToolbox.prototype.onItemsChanged = function () { this.koItems(this.itemsValue); var categories = []; var categoriesHash = {}; var prevActiveCategory = this.koActiveCategory(); var self = this; for (var i = 0; i < this.itemsValue.length; i++) { var item = this.itemsValue[i]; var categoryName = item.category ? item.category : __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.toolboxGeneralCategory"); //TODO if (!categoriesHash[categoryName]) { var category = { name: categoryName, items: [], koCollapsed: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](categoryName !== prevActiveCategory), expand: function () { self.doCategoryClick(this.name); } }; categoriesHash[categoryName] = category; categories.push(category); } categoriesHash[categoryName].items.push(item); } this.koCategories(categories); if (!this.allowExpandMultipleCategories) { if (prevActiveCategory && categoriesHash[prevActiveCategory]) { this.koActiveCategory(prevActiveCategory); } else { this.koActiveCategory(categories.length > 0 ? categories[0].name : ""); } } else { if (categories.length > 0) { categories[0].koCollapsed(false); } } this.koHasCategories(categories.length > 1); }; QuestionToolbox.prototype.indexOf = function (name) { for (var i = 0; i < this.itemsValue.length; i++) { if (this.itemsValue[i].name == name) return i; } return -1; }; QuestionToolbox.prototype.reorderItems = function () { var _this = this; this.itemsValue.sort(function (i1, i2) { var index1 = _this._orderedQuestions.indexOf(i1.name); if (index1 === -1) index1 = Number.MAX_VALUE; var index2 = _this._orderedQuestions.indexOf(i2.name); if (index2 === -1) index2 = Number.MAX_VALUE; return index1 - index2; }); this.onItemsChanged(); }; QuestionToolbox.prototype.createDefaultItems = function (supportedQuestions) { this.clearItems(); var questions = this.getQuestionTypes(supportedQuestions); for (var i = 0; i < questions.length; i++) { var name = questions[i]; var question = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ElementFactory"].Instance.createElement(name, "q1"); if (!question) { question = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"].metaData.createClass(name); } var json = this.getQuestionJSON(question); var item = { name: name, iconName: "icon-" + name, title: __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("qt." + name), json: json, isCopied: false, category: "" }; this.itemsValue.push(item); } this.registerCustomWidgets(); this.onItemsChanged(); }; QuestionToolbox.prototype.registerCustomWidgets = function () { var inst = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["CustomWidgetCollection"].Instance; if (!inst.getActivatedBy) return; var widgets = inst.widgets; for (var i = 0; i < widgets.length; i++) { if (inst.getActivatedBy(widgets[i].name) != "customtype") continue; var widgetJson = widgets[i].widgetJson; if (!widgetJson.widgetIsLoaded || !widgetJson.widgetIsLoaded()) continue; var iconName = widgetJson.iconName ? widgetJson.iconName : "icon-default"; var title = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("qt." + widgetJson.name); if (!title || title == widgetJson.name) title = widgetJson.title; if (!title) title = widgetJson.name; var json = widgetJson.defaultJSON ? widgetJson.defaultJSON : {}; if (!json.type) { json.type = widgetJson.name; } var item = { name: widgetJson.name, iconName: iconName, title: title, json: json, isCopied: false, category: "" }; this.itemsValue.push(item); } }; QuestionToolbox.prototype.getQuestionJSON = function (question) { var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(question); json.type = question.getType(); return json; }; QuestionToolbox.prototype.getQuestionTypes = function (supportedQuestions) { var allTypes = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ElementFactory"].Instance.getAllTypes(); if (!supportedQuestions || supportedQuestions.length == 0) supportedQuestions = allTypes; var questions = []; for (var i = 0; i < this.orderedQuestions.length; i++) { var name = this.orderedQuestions[i]; if (supportedQuestions.indexOf(name) > -1 && allTypes.indexOf(name) > -1) questions.push(name); } for (var i = 0; i < supportedQuestions.length; i++) { var name = supportedQuestions[i]; if (questions.indexOf(supportedQuestions[i]) < 0 && allTypes.indexOf(name) > -1) questions.push(name); } return questions; }; return QuestionToolbox; }()); /***/ }), /* 27 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionConverter; }); var QuestionConverter = (function () { function QuestionConverter() { } QuestionConverter.addConvertInfo = function (className, convertToClassName) { if (!QuestionConverter.convertInfo[className]) { QuestionConverter.convertInfo[className] = []; } QuestionConverter.convertInfo[className].push(convertToClassName); }; QuestionConverter.getConvertToClasses = function (className) { var res = QuestionConverter.convertInfo[className]; return res ? res : []; }; QuestionConverter.convertObject = function (obj, convertToClass) { if (!obj || !obj.parent || convertToClass == obj.getType()) return null; var newQuestion = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["QuestionFactory"].Instance.createQuestion(convertToClass, obj.name); var jsonObj = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"](); var json = jsonObj.toJsonObject(obj); jsonObj.toObject(json, newQuestion); var panel = obj.parent; var index = panel.elements.indexOf(obj); panel.removeElement(obj); panel.addElement(newQuestion, index); return newQuestion; }; return QuestionConverter; }()); QuestionConverter.convertInfo = {}; function createDefaultQuestionConverterItems() { var classes = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"].metaData.getChildrenClasses("selectbase", true); for (var i = 0; i < classes.length; i++) { for (var j = 0; j < classes.length; j++) { if (i == j) continue; QuestionConverter.addConvertInfo(classes[i].name, classes[j].name); } } QuestionConverter.addConvertInfo("text", "comment"); QuestionConverter.addConvertInfo("comment", "text"); } createDefaultQuestionConverterItems(); /***/ }), /* 28 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__json5__ = __webpack_require__(20); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyEmbedingWindow; }); var SurveyEmbedingWindow = (function () { function SurveyEmbedingWindow() { this.surveyId = null; this.surveyPostId = null; this.generateValidJSON = false; this.surveyJSVersion = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Version"]; this.surveyCDNPath = "https://surveyjs.azureedge.net/"; this.platformSurveyJSPrefix = { angular: "angular", jquery: "jquery", knockout: "ko", react: "react", vue: "vue" }; this.platformJSonPage = { angular: "@Component({\n selector: 'ng-app',\n template: \n <div id='surveyElement'></div>\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyNG.render(\"surveyElement\", { model: survey });\n }\n}", jquery: 'var survey = new Survey.Model(surveyJSON);\n$("#surveyContainer").Survey({\n model: survey,\n onComplete: sendDataToServer\n});', knockout: 'var survey = new Survey.Model(surveyJSON, "surveyContainer");\nsurvey.onComplete.add(sendDataToServer);', react: 'ReactDOM.render(\n <Survey.Survey json={ surveyJSON } onComplete={ sendDataToServer } />, document.getElementById("surveyContainer"));', vue: "var survey = new Survey.Model(surveyJSON);\nnew Vue({ el: '#surveyContainer', data: { survey: survey } });" }; this.platformJSonWindow = { angular: "@Component({\n selector: 'ng-app',\n template: \n <div id='surveyElement'></div>\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyWindowNG.render(\"surveyElement\", { model: survey });\n }\n}", jquery: 'var survey = new Survey.Model(surveyJSON);\n$("#surveyContainer").SurveyWindow({\n model: survey,\n onComplete: sendDataToServer\n});', knockout: "var survey = new Survey.Model(surveyJSON);\nsurveyWindow.show();\nsurvey.onComplete.add(sendDataToServer);", react: 'ReactDOM.render(\n <Survey.SurveyWindow json={ surveyJSON } onComplete={ sendDataToServer } />, document.getElementById("surveyContainer"));', vue: "" }; this.platformHtmlonPage = { angular: "<ng-app></ng-app>", jquery: '<div id="surveyContainer"></div>', knockout: '<div id="surveyContainer"></div>', react: '<div id="surveyContainer"></div>', vue: '<div id="surveyContainer"><survey :survey="survey"></survey></div>' }; this.platformHtmlonWindow = { angular: "<ng-app></ng-app>", jquery: '<div id="surveyContainer"></div>', knockout: "", react: '<div id="surveyContainer"></div>', vue: "<div id='surveyContainer'><survey-window :survey='survey'></survey-window></div>" }; var self = this; this.koLibraryVersion = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("jquery"); this.koShowAsWindow = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("page"); this.koScriptUsing = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("bootstrap"); this.koHasIds = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koLoadSurvey = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koHeadText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koJavaText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koBodyText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koVisibleHtml = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return (self.koShowAsWindow() == "page" || self.platformHtmlonWindow[self.koLibraryVersion()] != ""); }); this.koLibraryVersion.subscribe(function (newValue) { self.setHeadText(); self.setJavaTest(); self.setBodyText(); }); this.koShowAsWindow.subscribe(function (newValue) { self.setJavaTest(); self.setBodyText(); }); this.koScriptUsing.subscribe(function (newValue) { self.setHeadText(); self.setJavaTest(); }); this.koLoadSurvey.subscribe(function (newValue) { self.setJavaTest(); }); this.surveyEmbedingHead = null; } Object.defineProperty(SurveyEmbedingWindow.prototype, "json", { get: function () { return this.jsonValue; }, set: function (value) { this.jsonValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEmbedingWindow.prototype, "hasAceEditor", { get: function () { return typeof ace !== "undefined"; }, enumerable: true, configurable: true }); SurveyEmbedingWindow.prototype.show = function () { if (this.hasAceEditor && this.surveyEmbedingHead == null) { this.surveyEmbedingHead = this.createEditor("surveyEmbedingHead"); this.surveyEmbedingBody = this.createEditor("surveyEmbedingBody"); this.surveyEmbedingJava = this.createEditor("surveyEmbedingJava"); } this.koHasIds(this.surveyId && this.surveyPostId); this.setBodyText(); this.setHeadText(); this.setJavaTest(); }; SurveyEmbedingWindow.prototype.setBodyText = function () { this.setTextToEditor(this.surveyEmbedingBody, this.koBodyText, this.platformHtmlonPage[this.koLibraryVersion()]); }; Object.defineProperty(SurveyEmbedingWindow.prototype, "getCDNPath", { get: function () { return this.surveyCDNPath + this.surveyJSVersion + "/"; }, enumerable: true, configurable: true }); SurveyEmbedingWindow.prototype.setHeadText = function () { var str = "<!-- Your platform (" + this.koLibraryVersion() + ") scripts. -->\n"; if (this.koScriptUsing() != "bootstrap") { str += '\n<link href="' + this.getCDNPath + 'survey.css" type="text/css" rel="stylesheet" />'; } str += '\n<script src="' + this.getCDNPath + "survey." + this.platformSurveyJSPrefix[this.koLibraryVersion()] + '.min.js"></script>'; this.setTextToEditor(this.surveyEmbedingHead, this.koHeadText, str); }; SurveyEmbedingWindow.prototype.setJavaTest = function () { this.setTextToEditor(this.surveyEmbedingJava, this.koJavaText, this.getJavaText()); }; SurveyEmbedingWindow.prototype.createEditor = function (elementName) { var editor = ace.edit(elementName); editor.setTheme("ace/theme/monokai"); editor.session.setMode("ace/mode/json"); editor.setShowPrintMargin(false); editor.renderer.setShowGutter(false); editor.setReadOnly(true); return editor; }; SurveyEmbedingWindow.prototype.getJavaText = function () { var isOnPage = this.koShowAsWindow() == "page"; var str = this.getSaveFunc() + "\n\n"; str += isOnPage ? this.platformJSonPage[this.koLibraryVersion()] : this.platformJSonWindow[this.koLibraryVersion()]; var jsonText = "var surveyJSON = " + this.getJsonText() + "\n\n"; return this.getSetCss() + "\n" + jsonText + str; }; SurveyEmbedingWindow.prototype.getSetCss = function () { if (this.koScriptUsing() != "bootstrap") return ""; return "Survey.Survey.cssType = \"bootstrap\";\n"; }; SurveyEmbedingWindow.prototype.getSaveFunc = function () { return ("function sendDataToServer(survey) {\n" + this.getSaveFuncCode() + "\n}"); }; SurveyEmbedingWindow.prototype.getSaveFuncCode = function () { if (this.koHasIds()) return " survey.sendResult('" + this.surveyPostId + "');"; return " //send Ajax request to your web server.\n alert(\"The results are:\" + JSON.stringify(survey.data));"; }; SurveyEmbedingWindow.prototype.getJsonText = function () { if (this.koHasIds() && this.koLoadSurvey()) { return "{ surveyId: '" + this.surveyId + "'}"; } if (this.generateValidJSON) return JSON.stringify(this.json); return new __WEBPACK_IMPORTED_MODULE_2__json5__["a" /* SurveyJSON5 */]().stringify(this.json); }; SurveyEmbedingWindow.prototype.setTextToEditor = function (editor, koText, text) { if (editor) editor.setValue(text); if (koText) koText(text); }; return SurveyEmbedingWindow; }()); /***/ }), /* 29 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* unused harmony export SurveyObjectItem */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjects; }); var SurveyObjectItem = (function () { function SurveyObjectItem() { this.level = 0; } return SurveyObjectItem; }()); var SurveyObjects = (function () { function SurveyObjects(koObjects, koSelected) { this.koObjects = koObjects; this.koSelected = koSelected; } Object.defineProperty(SurveyObjects.prototype, "survey", { get: function () { return this.surveyValue; }, set: function (value) { if (this.survey == value) return; this.surveyValue = value; this.rebuild(); }, enumerable: true, configurable: true }); SurveyObjects.prototype.addPage = function (page) { this.addElement(page, null); }; SurveyObjects.prototype.addElement = function (element, parent) { var parentIndex = parent != null ? this.getItemIndex(parent) : 0; if (parentIndex < 0) return; var elements = parent != null ? this.getElements(parent) : this.survey.pages; var elementIndex = elements.indexOf(element); var newIndex = elementIndex + 1 + parentIndex; if (elementIndex > 0) { var prevElement = elements[elementIndex - 1]; newIndex = this.getItemIndex(prevElement) + this.getAllElementCount(prevElement) + 1; } var item = this.createItem(element, this.koObjects()[parentIndex]); this.addItem(item, newIndex); var objs = []; this.buildElements(objs, this.getElements(element), item); for (var i = 0; i < objs.length; i++) { this.koObjects.splice(newIndex + 1 + i, 0, objs[i]); } this.koSelected(item); }; SurveyObjects.prototype.selectObject = function (obj) { var objs = this.koObjects(); for (var i = 0; i < objs.length; i++) { if (objs[i].value == obj) { this.koSelected(objs[i]); return; } } }; SurveyObjects.prototype.getSelectedObjectPage = function (obj) { if (obj === void 0) { obj = null; } if (!this.survey) return null; if (!obj) { if (!this.koSelected()) return; obj = this.koSelected().value; } var objs = this.koObjects(); var index = this.getItemIndex(obj); while (index > 0) { var item = objs[index]; if (item.level == 1) return item.value; index--; } return null; }; SurveyObjects.prototype.removeObject = function (obj) { var index = this.getItemIndex(obj); if (index < 0) return; var countToRemove = 1 + this.getAllElementCount(obj); this.koObjects.splice(index, countToRemove); }; SurveyObjects.prototype.nameChanged = function (obj) { var index = this.getItemIndex(obj); if (index < 0) return; this.koObjects()[index].text(this.getText(this.koObjects()[index])); }; SurveyObjects.prototype.selectNextQuestion = function (isUp) { var question = this.getSelectedQuestion(); var itemIndex = this.getItemIndex(question); if (itemIndex < 0) return question; var objs = this.koObjects(); var newItemIndex = itemIndex + (isUp ? -1 : 1); if (newItemIndex < objs.length && __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(objs[newItemIndex].value) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question) { itemIndex = newItemIndex; } else { newItemIndex = itemIndex; while (newItemIndex < objs.length && __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(objs[newItemIndex].value) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question) { itemIndex = newItemIndex; newItemIndex += isUp ? 1 : -1; } } this.koSelected(objs[itemIndex]); }; SurveyObjects.prototype.getAllElementCount = function (element) { var elements = this.getElements(element); var res = 0; for (var i = 0; i < elements.length; i++) { res += 1 + this.getAllElementCount(elements[i]); } return res; }; SurveyObjects.prototype.getSelectedQuestion = function () { if (!this.koSelected()) return null; var obj = this.koSelected().value; if (!obj) return null; return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question ? obj : null; }; SurveyObjects.prototype.addItem = function (item, index) { if (index > this.koObjects().length) { this.koObjects.push(item); } else { this.koObjects.splice(index, 0, item); } }; SurveyObjects.prototype.rebuild = function () { var objs = []; if (this.survey == null) { this.koObjects(objs); this.selectObject(null); return; } var root = this.createItem(this.survey, null); objs.push(root); for (var i = 0; i < this.survey.pages.length; i++) { var page = this.survey.pages[i]; var pageItem = this.createItem(page, root); objs.push(pageItem); this.buildElements(objs, this.getElements(page), pageItem); } this.koObjects(objs); this.selectObject(this.survey); }; SurveyObjects.prototype.getElements = function (element) { return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getElements(element); }; SurveyObjects.prototype.buildElements = function (objs, elements, parentItem) { for (var i = 0; i < elements.length; i++) { var el = elements[i]; var item = this.createItem(el, parentItem); objs.push(item); this.buildElements(objs, this.getElements(el), item); } }; SurveyObjects.prototype.createItem = function (value, parent) { var item = new SurveyObjectItem(); item.value = value; item.level = parent != null ? parent.level + 1 : 0; item.text = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.getText(item)); return item; }; SurveyObjects.prototype.getItemIndex = function (value) { if (!value) return -1; if (value["selectedElementInDesign"]) value = value["selectedElementInDesign"]; var objs = this.koObjects(); for (var i = 0; i < objs.length; i++) { if (objs[i].value == value) return i; } return -1; }; SurveyObjects.prototype.getText = function (item) { if (item.level == 0) return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.survey"); var intend = SurveyObjects.intend; for (var i = 1; i < item.level; i++) { intend += SurveyObjects.intend; } var text = __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectName(item.value); if (this.getItemTextCallback) { text = this.getItemTextCallback(item.value, text); } return intend + text; }; return SurveyObjects; }()); SurveyObjects.intend = "."; /***/ }), /* 30 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyLiveTester; }); var SurveyLiveTester = (function () { function SurveyLiveTester() { this.koIsRunning = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koResultText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koPages = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"]([]); this.koActivePage = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](null); var self = this; this.selectTestClick = function () { self.testAgain(); }; this.selectPageClick = function (pageItem) { if (self.survey) { if (self.survey.state == "starting") { self.survey["start"](); //TODO } self.survey.currentPage = pageItem.page; } }; this.koActivePage.subscribe(function (newValue) { self.survey.currentPage = newValue; }); this.setPageDisable = function (option, item) { __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindingsToNode"](option, { disable: item.koDisabled }, item); }; this.survey = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Survey"](); this.koSurvey = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.survey); } SurveyLiveTester.prototype.setJSON = function (json) { this.json = json; if (json != null) { if (json.cookieName) { delete json.cookieName; } } this.survey = json ? new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Survey"](json) : new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Survey"](); if (this.onSurveyCreatedCallback) this.onSurveyCreatedCallback(this.survey); var self = this; this.survey.onComplete.add(function (sender) { self.koIsRunning(false); self.koResultText(self.surveyResultsText + JSON.stringify(self.survey.data)); }); //TODO if (this.survey["onStarted"]) { this.survey["onStarted"].add(function (sender) { self.setActivePageItem(self.survey.currentPage, true); }); } this.survey.onCurrentPageChanged.add(function (sender, options) { self.koActivePage(options.newCurrentPage); self.setActivePageItem(options.oldCurrentPage, false); self.setActivePageItem(options.newCurrentPage, true); }); this.survey.onPageVisibleChanged.add(function (sender, options) { var item = self.getPageItemByPage(options.page); if (item) { item.koVisible(options.visible); item.koDisabled(!options.visible); } }); }; SurveyLiveTester.prototype.show = function () { var pages = []; for (var i = 0; i < this.survey.pages.length; i++) { var page = this.survey.pages[i]; pages.push({ page: page, title: __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectName(page), koVisible: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](page.isVisible), koDisabled: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](!page.isVisible), koActive: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.survey.state == "running" && page === this.survey.currentPage) }); } this.koPages(pages); this.koSurvey(this.survey); this.koActivePage(this.survey.currentPage); this.koIsRunning(true); }; Object.defineProperty(SurveyLiveTester.prototype, "testSurveyAgainText", { get: function () { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.testSurveyAgain"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "surveyResultsText", { get: function () { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.surveyResults"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "selectPageText", { get: function () { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ts.selectPage"); }, enumerable: true, configurable: true }); SurveyLiveTester.prototype.testAgain = function () { this.setJSON(this.json); this.show(); }; SurveyLiveTester.prototype.setActivePageItem = function (page, val) { var item = this.getPageItemByPage(page); if (item) { item.koActive(val); } }; SurveyLiveTester.prototype.getPageItemByPage = function (page) { var items = this.koPages(); for (var i = 0; i < items.length; i++) { if (items[i].page === page) return items[i]; } return null; }; return SurveyLiveTester; }()); /***/ }), /* 31 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyUndoRedo; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return UndoRedoItem; }); var SurveyUndoRedo = (function () { function SurveyUndoRedo() { this.index = -1; this.maximumCount = 10; this.items = []; this.koCanUndo = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koCanRedo = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); } SurveyUndoRedo.prototype.clear = function () { this.items = []; this.koCanUndo(false); this.koCanRedo(false); }; SurveyUndoRedo.prototype.setCurrent = function (survey, selectedObjName) { var item = new UndoRedoItem(); item.surveyJSON = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(survey); item.selectedObjName = selectedObjName; if (this.index < this.items.length - 1) { this.items.splice(this.index + 1); } this.items.push(item); this.removeOldData(); this.index = this.items.length - 1; this.updateCanUndoRedo(); }; SurveyUndoRedo.prototype.undo = function () { if (!this.canUndo) return null; return this.doUndoRedo(-1); }; SurveyUndoRedo.prototype.redo = function () { if (!this.canRedo) return null; return this.doUndoRedo(1); }; SurveyUndoRedo.prototype.updateCanUndoRedo = function () { this.koCanUndo(this.canUndo); this.koCanRedo(this.canRedo); }; SurveyUndoRedo.prototype.doUndoRedo = function (dIndex) { this.index += dIndex; this.updateCanUndoRedo(); return this.index >= 0 && this.index < this.items.length ? this.items[this.index] : null; }; Object.defineProperty(SurveyUndoRedo.prototype, "canUndo", { get: function () { return this.index >= 1 && this.index < this.items.length; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyUndoRedo.prototype, "canRedo", { get: function () { return this.items.length > 1 && this.index < this.items.length - 1; }, enumerable: true, configurable: true }); SurveyUndoRedo.prototype.removeOldData = function () { if (this.items.length - 1 < this.maximumCount) return; this.items.splice(0, this.items.length - this.maximumCount - 1); }; return SurveyUndoRedo; }()); var UndoRedoItem = (function () { function UndoRedoItem() { } return UndoRedoItem; }()); /***/ }), /* 32 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; var is = function (obj, type) { return Object.prototype.toString.call(obj).toLowerCase() === ("[object " + type + "]"); }; var addClass = function (el, cls) { var arr = el.className .split(/\s+/) .filter(function (c) { return !!c && c == cls; }); if (!arr.length) { el.className += " " + cls; } }; var removeClass = function (el, cls) { el.className = el.className .split(/\s+/) .filter(function (c) { return !!c && c != cls; }) .join(' '); }; var RModal = function RModal(el, opts) { var this$1 = this; this.opened = false; this.opts = { bodyClass: 'modal-open' , dialogClass: 'modal-dialog' , dialogOpenClass: 'bounceInDown' , dialogCloseClass: 'bounceOutUp' , focus: true , focusElements: [ 'a[href]', 'area[href]', 'input:not([disabled]):not([type=hidden])' , 'button:not([disabled])', 'select:not([disabled])' , 'textarea:not([disabled])', 'iframe', 'object', 'embed' , '*[tabindex]', '*[contenteditable]' ] , escapeClose: true , content: null , closeTimeout: 500 }; Object.keys(opts || {}) .forEach(function (key) { /* istanbul ignore else */ if (opts[key] !== undefined) { this$1.opts[key] = opts[key]; } }); this.overlay = el; this.dialog = el.querySelector(("." + (this.opts.dialogClass))); if (this.opts.content) { this.content(this.opts.content); } }; RModal.prototype.open = function open (content) { var this$1 = this; this.content(content); if (!is(this.opts.beforeOpen, 'function')) { return this._doOpen(); } this.opts.beforeOpen(function () { this$1._doOpen(); }); }; RModal.prototype._doOpen = function _doOpen () { addClass(document.body, this.opts.bodyClass); removeClass(this.dialog, this.opts.dialogCloseClass); addClass(this.dialog, this.opts.dialogOpenClass); this.overlay.style.display = 'block'; if (this.opts.focus) { this.focusOutElement = document.activeElement; this.focus(); } if (is(this.opts.afterOpen, 'function')) { this.opts.afterOpen(); } this.opened = true; }; RModal.prototype.close = function close () { var this$1 = this; if (!is(this.opts.beforeClose, 'function')) { return this._doClose(); } this.opts.beforeClose(function () { this$1._doClose(); }); }; RModal.prototype._doClose = function _doClose () { var this$1 = this; removeClass(this.dialog, this.opts.dialogOpenClass); addClass(this.dialog, this.opts.dialogCloseClass); removeClass(document.body, this.opts.bodyClass); if (this.opts.focus) { this.focus(this.focusOutElement); } if (is(this.opts.afterClose, 'function')) { this.opts.afterClose(); } this.opened = false; setTimeout(function () { this$1.overlay.style.display = 'none'; }, this.opts.closeTimeout); }; RModal.prototype.content = function content (html) { if (html === undefined) { return this.dialog.innerHTML; } this.dialog.innerHTML = html; }; RModal.prototype.elements = function elements (selector, fallback) { fallback = fallback || window.navigator.appVersion.indexOf('MSIE 9.0') > -1; selector = is(selector, 'array') ? selector.join(',') : selector; return [].filter.call( this.dialog.querySelectorAll(selector) , function (element) { if (fallback) { var style = window.getComputedStyle(element); return style.display !== 'none' && style.visibility !== 'hidden'; } return element.offsetParent !== null; } ); }; RModal.prototype.focus = function focus (el) { el = el || this.elements(this.opts.focusElements)[0] || this.dialog.firstChild; if (el && is(el.focus, 'function')) { el.focus(); } }; RModal.prototype.keydown = function keydown (ev) { if (this.opts.escapeClose && ev.which == 27) { this.close(); } function stopEvent() { ev.preventDefault(); ev.stopPropagation(); } if (this.opened && ev.which == 9 && this.dialog.contains(ev.target)) { var elements = this.elements(this.opts.focusElements) , first = elements[0] , last = elements[elements.length - 1]; if (first == last) { stopEvent(); } else if (ev.target == first && ev.shiftKey) { stopEvent(); last.focus(); } else if (ev.target == last && !ev.shiftKey) { stopEvent(); first.focus(); } } }; RModal.prototype.version = '1.0.30'; RModal.version = '1.0.30'; /* harmony default export */ __webpack_exports__["a"] = RModal; //# sourceMappingURL=index.es.js.map /***/ }), /* 33 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 34 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 35 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 36 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 37 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__label_editor_scss__ = __webpack_require__(64); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__label_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__label_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return labelAdorner; }); var labelAdorner = { getMarkerClass: function (model) { if (model.getType() === "boolean") { return "label_editable"; } return ""; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("span"); decoration.innerHTML = "<title-editor params='name: \"label\", model: model, editor: editor'></title-editor>"; elements[0].onclick = function (e) { return e.preventDefault(); }; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("label", labelAdorner); /***/ }), /* 38 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_actions_scss__ = __webpack_require__(65); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_actions_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__question_actions_scss__); /* unused harmony export QuestionActionsAdorner */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return questionActionsAdorner; }); /* unused harmony export panelActionsAdorner */ var templateHtml = __webpack_require__(106); var QuestionActionsAdorner = (function () { function QuestionActionsAdorner(question, editor) { this.question = question; this.editor = editor; this.actions = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); var surveyForDesigner = editor.survey; this.actions(surveyForDesigner.getMenuItems(question)); } QuestionActionsAdorner.prototype.getStyle = function (model) { if (!!model.icon) { return __WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](model.icon); } return "icon-action" + model.name; }; QuestionActionsAdorner.prototype.localize = function (entryString) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(entryString); }; return QuestionActionsAdorner; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("question-actions", { viewModel: { createViewModel: function (params, componentInfo) { var model = new QuestionActionsAdorner(params.question, params.editor); return model; } }, template: templateHtml }); var questionActionsAdorner = { getMarkerClass: function (model) { return !model.isPanel ? "question_actions" : ""; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("div"); decoration.className = "svda-question-actions"; decoration.innerHTML = "<question-actions params='question: model, editor: editor'></question-actions>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("mainRoot", questionActionsAdorner); var panelActionsAdorner = { getMarkerClass: function (model) { return !!model.isPanel ? "panel_actions" : ""; }, afterRender: questionActionsAdorner.afterRender }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("container", panelActionsAdorner); /***/ }), /* 39 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__title_editor__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__rating_item_editor_scss__ = __webpack_require__(66); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__rating_item_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__rating_item_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ratingItemAdorner; }); var templateHtml = __webpack_require__(107); var RatingItemEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](RatingItemEditor, _super); function RatingItemEditor(name, question, item, rootElement, editor) { var _this = _super.call(this, name, rootElement) || this; _this.question = question; _this.item = item; _this.editor = editor; return _this; } RatingItemEditor.prototype.deleteItem = function (model, event) { var question = model.question; var index = question.visibleRateValues .map(function (item) { return item.value; }) .indexOf(model.item.value); if (question.rateValues.length === 0 && index === question.visibleRateValues.length - 1) { question.rateMax -= question.rateStep; } else { if (question.rateValues.length === 0) { question.rateValues = question.visibleRateValues; } question.rateValues.splice(index, 1); } model.editor.onQuestionEditorChanged(question); }; return RatingItemEditor; }(__WEBPACK_IMPORTED_MODULE_5__title_editor__["b" /* TitleInplaceEditor */])); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("rating-item-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new RatingItemEditor(params.target[params.name], params.question, params.item, componentInfo.element, params.editor); var question = params.question; var property = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.findProperty(params.target.getType(), params.name); model.valueChanged = function (newValue) { if (question.rateValues.length === 0) { question.rateValues = question.visibleRateValues; var index = question.rateValues .map(function (item) { return item.value; }) .indexOf(params.item.value); question.rateValues[index] = params.target; } params.target[params.name] = newValue; params.editor.onQuestionEditorChanged(question); }; return model; } }, template: templateHtml }); var createAddItemHandler = function (question, onItemAdded) { return function () { if (question.rateValues.length === 0) { question.rateMax += question.rateStep; } else { var nextValue = null; var values = question.rateValues.map(function (item) { return item.itemValue; }); nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__utils_utils__["a" /* getNextValue */])("item", values); var itemValue = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](nextValue); itemValue.locOwner = { getLocale: function () { if (!!question["getLocale"]) return question.getLocale(); return ""; }, getMarkdownHtml: function (text) { return text; }, getProcessedText: function (text) { return text; } }; question.rateValues = question.rateValues.concat([itemValue]); } !!onItemAdded && onItemAdded(itemValue); }; }; var ratingItemAdorner = { getMarkerClass: function (model) { return !!model.visibleRateValues ? "item_editable" : ""; }, afterRender: function (elements, model, editor) { for (var i = 0; i < elements.length; i++) { elements[i].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("span"); decoration.innerHTML = "<rating-item-editor params='name: \"text\", target: target, item: item, question: question, editor: editor'></rating-item-editor>"; elements[i].appendChild(decoration); var item = model.visibleRateValues[i]; __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"]({ item: item, question: model, target: item, editor: editor }, decoration); } var addNew = document.createElement("span"); addNew.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addItem"); addNew.className = "svda-add-new-rating-item icon-inplace-add-item svd-primary-icon"; addNew.onclick = createAddItemHandler(model, function (itemValue) { return editor.onQuestionEditorChanged(model); }); var svgElem = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElem.setAttribute("class", "svd-svg-icon"); svgElem.style.width = "12px"; svgElem.style.height = "12px"; var useElem = document.createElementNS("http://www.w3.org/2000/svg", "use"); useElem.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#icon-inplaceplus"); svgElem.appendChild(useElem); addNew.appendChild(svgElem); var parent = elements[0].parentElement.parentElement; parent.appendChild(addNew); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("itemText", ratingItemAdorner); /***/ }), /* 40 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_sortablejs__ = __webpack_require__(10); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_sortablejs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_sortablejs__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__item_editor__ = __webpack_require__(21); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__select_items_editor_scss__ = __webpack_require__(67); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__select_items_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5__select_items_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return selectItemsEditorAdorner; }); var templateHtml = __webpack_require__(108); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("select-items-editor", { viewModel: { createViewModel: function (params, componentInfo) { var isExpanded = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); var choices = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](params.question.choices); var sortableElement = componentInfo.element.parentElement.getElementsByClassName("svda-select-items-collection")[0]; var sortable = null; return { choices: choices, question: params.question, editor: params.editor, isExpanded: isExpanded, toggle: function () { return isExpanded(!isExpanded()); }, addItem: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__item_editor__["b" /* createAddItemHandler */])(params.question, function (itemValue) { return choices(params.question.choices); }), getLocString: function (str) { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString(str); }, choicesRendered: function () { if (sortable) { sortable.destroy(); } sortable = __WEBPACK_IMPORTED_MODULE_1_sortablejs___default.a.create(sortableElement, { handle: ".svda-drag-handle", draggable: ".item_draggable", animation: 150, onEnd: function (evt) { var newChoices = [].concat(params.question.choices); var choice = newChoices[evt.oldIndex]; newChoices.splice(evt.oldIndex, 1); newChoices.splice(evt.newIndex, 0, choice); params.question.choices = newChoices; choices(newChoices); } }); } }; } }, template: templateHtml }); var selectItemsEditorAdorner = { getMarkerClass: function (model) { return !!model.parent && !!model.choices ? "select_items_editor" : ""; }, afterRender: function (elements, model, editor) { elements[0].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("div"); decoration.innerHTML = "<select-items-editor params='question: question, editor: editor'></select-items-editor>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ question: model, editor: editor }, decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__["b" /* registerAdorner */])("selectWrapper", selectItemsEditorAdorner); /***/ }), /* 41 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectEditor__ = __webpack_require__(17); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveylive__ = __webpack_require__(30); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveyEmbedingWindow__ = __webpack_require__(28); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyObjects__ = __webpack_require__(29); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionconverter__ = __webpack_require__(27); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditor__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__surveyJSONEditor__ = __webpack_require__(111); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__textWorker__ = __webpack_require__(19); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__undoredo__ = __webpack_require__(31); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__dragdrophelper__ = __webpack_require__(22); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__questionToolbox__ = __webpack_require__(26); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__json5__ = __webpack_require__(20); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__surveyjsObjects__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__stylesmanager__ = __webpack_require__(18); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyEditor; }); var templateEditorHtml = __webpack_require__(110); /** * Survey Editor is WYSIWYG editor. */ var SurveyEditor = (function () { /** * The Survey Editor constructor. * @param renderedElement HtmlElement or html element id where Survey Editor will be rendered * @param options Survey Editor options. The following options are available: showJSONEditorTab, showTestSurveyTab, showEmbededSurveyTab, showPropertyGrid, questionTypes, showOptions, generateValidJSON, isAutoSave, designerHeight. */ function SurveyEditor(renderedElement, options) { if (renderedElement === void 0) { renderedElement = null; } if (options === void 0) { options = null; } var _this = this; this._haveCommercialLicense = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.surveyValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.stateValue = ""; this.dragDropHelper = null; this.select2 = null; this.alwaySaveTextInPropertyEditorsValue = false; this.showApplyButtonValue = true; this.isRTLValue = false; /** * If set to true (default value) the Editor scrolls to a new element. A new element can be added from Toolbox or by copying. */ this.scrollToNewElement = true; /** * This property is assign to the survey.surveyId property on showing in the "Embed Survey" tab. * @see showEmbededSurveyTab */ this.surveyId = null; /** * This property is assign to the survey.surveyPostId property on showing in the "Embed Survey" tab. * @see showEmbededSurveyTab */ this.surveyPostId = null; /** * The event is called before showing a property in the Property Grid or in Question Editor. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.property the object property (Survey.JsonObjectProperty object). It has name, className, type, visible, readOnly and other properties. * <br/> options.canShow a boolean value. It is true by default. Set it false to hide the property from the Property Grid or in Question Editor */ this.onCanShowProperty = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event allows you to custom sort properties in the Property Grid. It is a compare function. You should set options.result to -1 or 1 by comparing options.property1 and options.property2. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.property1 the left object property (Survey.JsonObjectProperty object). * <br/> options.property2 the right object property (Survey.JsonObjectProperty object). * <br/> options.result the result of comparing. It can be 0 (use default behavior), -1 options.property1 is less than options.property2 or 1 options.property1 is more than options.property2 */ this.onCustomSortProperty = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event allows you modify DOM element for a property in the Property Grid. For example, you may change it's styles. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.htmlElement the html element (html table row in our case) that renders the property display name and it's editor. * <br/> options.property object property (Survey.JsonObjectProperty object). * <br/> options.propertyEditor the property Editor. */ this.onPropertyAfterRender = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called on deleting an element (question/panel/page) from the survey. Typically, when a user click the delete from the element menu. * <br/> sender the survey editor object that fires the event * <br/> options.element an instance of the deleting element * <br/> options.elementType the type of the element: 'question', 'panel' or 'page'. * <br/> options.allowing set it to false to cancel the element deleting */ this.onElementDeleting = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called on adding a new question into the survey. Typically, when a user dropped a Question from the Question Toolbox into designer Survey area. * <br/> sender the survey editor object that fires the event * <br/> options.question a new added survey question. Survey.QuestionBase object * <br/> options.page the survey Page object where question has been added. */ this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called when an end-user double click on an element (question/panel). * <br/> sender the survey editor object that fires the event * <br/> options.element an instance of the element */ this.onElementDoubleClick = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called on adding a new Survey.ItemValue object. It uses as an element in choices array in Radiogroup, checkbox and dropdown questions or Matrix columns and rows properties. * Use this event, to set ItemValue.value and ItemValue.text properties by default or set a value to the custom property. * <br/> sender the survey editor object that fires the event * <br/> options.property the object property (Survey.JsonObjectProperty object). It has name, className, type, visible, readOnly and other properties. * <br/> options.newItem a new created Survey.ItemValue object. */ this.onItemValueAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called when a user adds a new column into MatrixDropdown or MatrixDynamic questions. Use it to set some properties of Survey.MatrixDropdownColumn by default, for example name or a custom property. * <br/> sender the survey editor object that fires the event * <br/> options.newColumn a new created Survey.MatrixDropdownColumn object. */ this.onMatrixColumnAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called on adding a new panel into the survey. Typically, when a user dropped a Panel from the Question Toolbox into designer Survey area. * <br/> sender the survey editor object that fires the event * <br/> options.panel a new added survey panel. Survey.Panel object * <br/> options.page the survey Page object where question has been added. */ this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called on adding a new page into the survey. * <br/> sender the survey editor object that fires the event * <br/> options.page the new survey Page object. */ this.onPageAdded = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is called when a survey is changed in the designer. A new page/question/page is added or existing is removed, a property is changed and so on. * <br/> sender the survey editor object that fires the event * <br/> options object contains the information about certain modifications * <br/> options.type contains string constant describing certain modification * <br/> Available values: * <br/> * <br/> options.type: "ADDED_FROM_TOOLBOX" * <br/> options.question: newly added question * <br/> * <br/> options.type: "PAGE_ADDED" * <br/> options.newValue: newly created page * <br/> * <br/> options.type: "PAGE_MOVED" * <br/> options.page: page has been moved * <br/> options.indexFrom: pevious index * <br/> options.indexTo: new index * <br/> * <br/> options.type: "QUESTION_CONVERTED" * <br/> options.className: the converted class name * <br/> options.oldValue: pevious object * <br/> options.newValue: the new object, converted from oldVale to the given class name * <br/> * <br/> options.type: "QUESTION_CHANGED_BY_EDITOR" * <br/> options.question: question has been edited in the popup question editor * <br/> * <br/> options.type: "PROPERTY_CHANGED" * <br/> options.name: the name of the property has been changed * <br/> options.target: the object containing the changed property * <br/> options.oldValue: the previous value of the changed property * <br/> options.newValue: the new value of the changed property * <br/> * <br/> options.type: "OBJECT_DELETED" * <br/> options.target: deleted object * <br/> * <br/> options.type: "VIEW_TYPE_CHANGED" * <br/> options.newType: new type of the editor view: editor or designer * <br/> * <br/> options.type: "DO_DROP" * <br/> options.page: the page of the drap/drop operation * <br/> options.source: the source dragged object * <br/> options.target: the drop target * <br/> options.newElement: a new element. It is defined if a user drops question or panel from the toolbox */ this.onModified = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is fired when the Survey Editor is initialized and a survey object (Survey.Survey) is created. * <br/> sender the survey editor object that fires the event * <br/> options.survey the survey object showing in the editor. */ this.onDesignerSurveyCreated = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * The event is fired when the Survey Editor runs the survey in the test mode. * <br/> sender the survey editor object that fires the event * <br/> options.survey the survey object showing in the "Test survey" tab. */ this.onTestSurveyCreated = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to control Property Editors UI. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editorOptions options that can be changed. * <br/> options.editorOptions.allowAddRemoveItems a boolean property, true by default. Set it false to disable add/remove items in array properties. For example 'choices', 'columns', 'rows'. * <br/> options.editorOptions.showTextView a boolean property, true by default. Set it false to disable "Fast Entry" tab for "choices" property. * <br/> options.editorOptions.itemsEntryType a string property, 'form' by default. Set it 'fast' to show "Fast Entry" tab for "choices" property by default. */ this.onSetPropertyEditorOptions = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to show a custom error in the Question Editor on pressing Apply or OK buttons, if the values are not set correctly. The error will be displayed under the property editor. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.value the property value. * <br/> options.error the error you want to display. Set the empty string (the default value) or null if there is no errors. * @see onPropertyValueChanging */ this.onPropertyValidationCustomError = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to change the value entered in the property editor. You may call a validation, so an end user sees the error immediately * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.value the property value. * <br/> options.newValue set the corrected value into this property. Leave it null if you are ok with the entered value. * <br/> options.doValidation set the value to true to call the property validation. If there is an error, the user sees it immediately. * @see onPropertyValidationCustomError */ this.onPropertyValueChanging = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to change the value entered in the property editor. You may call a validation, so an end user sees the error immediately * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editor the instance of Property Editor. * @see onPropertyValueChanging */ this.onPropertyEditorObjectAssign = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to disable some operations for an element (question/panel). * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object question/panel * <br/> options.allowDelete set it to false to disable deleting the object * <br/> options.allowEdit set it to false to disable calling the modal Editor * <br/> options.allowCopy set it to false to disable copying the object * <br/> options.allowAddToToolbox set it to false to disable adding element to Toolbox * <br/> options.allowDragging set it to false to disable adding element to Toolbox * <br/> options.allowChangeType set it to false to disable changing element type */ this.onElementAllowOperations = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to add/remove/modify the element (question/panel) menu items. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.items the list of menu items. It has two requried fields: text and onClick: function(obj: Survey.Base) {} and optional name field. * @see onElementAllowOperations */ this.onDefineElementMenuItems = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to show the description on the top or/and bottom of the property modal editor. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the property name * <br/> options.htmlTop the html that you want to see on the top of the modal window * <br/> options.htmlBottom the html that you want to see on the bottom of the modal window */ this.onShowPropertyModalEditorDescription = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); /** * Use this event to change the text showing in the dropdown of the property grid. * <br/> sender the survey editor object that fires the event * <br/> options.obj the survey object. * <br/> options.text the current object text, commonly it is a name. You must change this attribute */ this.onGetObjectTextInPropertyGrid = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["Event"](); this.koAutoSave = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koShowState = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koState = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.themeCss = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return __WEBPACK_IMPORTED_MODULE_17__stylesmanager__["a" /* StylesManager */].currentTheme() === "bootstrap" ? "sv_bootstrap_css" : "sv_default_css"; }); /** * The list of toolbar items. You may add/remove/replace them. * @see IToolbarItem */ this.toolbarItems = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.saveNo = 0; /** * Add a new page into the editing survey. */ this.addPage = function () { var name = __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewPageName(_this.pages()); var page = _this.survey.addNewPage(name); _this.pages.valueHasMutated(); //TODO why this is need ? (ko problem) _this.addPageToUI(page); _this.setModified({ type: "PAGE_ADDED", newValue: page }); }; this.deletePage = function () { _this.deleteCurrentObject(); _this.pages.valueHasMutated(); //TODO why this is need ? (ko problem) }; this.movePage = function (indexFrom, indexTo) { var page = _this.pages()[indexTo]; _this.surveyObjects.survey = null; // TODO may be we don't need this hack _this.surveyObjects.survey = _this.survey; _this.surveyObjects.selectObject(page); _this.setModified({ type: "PAGE_MOVED", page: page, indexFrom: indexFrom, indexTo: indexTo }); }; this.newQuestions = []; this.newPanels = []; this.isCurrentPageEmpty = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return !!_this.surveyValue() && !!_this.surveyValue().koCurrentPage() && _this.surveyValue() .koCurrentPage() .koRows().length === 0; }); this.showQuestionEditor = function (element, onClose) { if (onClose === void 0) { onClose = null; } var self = _this; var elWindow = _this.renderedElement ? _this.renderedElement.querySelector("#surveyquestioneditorwindow") : null; var isCanceled = true; _this.questionEditorWindow.show(element, elWindow, function (question) { self.onQuestionEditorChanged(question); isCanceled = false; }, _this, function () { if (onClose) onClose(isCanceled); }); }; //TODO why this is need ? (ko problem) this.dirtyPageUpdate = function () { var selectedObject = _this.koSelectedObject().value; if (__WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(selectedObject) !== __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Page) return; var index = _this.pages.indexOf(selectedObject); _this.pages.splice(index, 1); _this.pages.splice(index, 0, selectedObject); _this.surveyObjects.selectObject(selectedObject); }; /** * Create a new page with the same elements and place it next to the current one. It returns the new created Survey.Page * @param page A copied Survey.Page */ this.copyPage = function (page) { var newPage = _this.copyElement(page); var index = _this.pages.indexOf(page); if (index > -1) { _this.pages.splice(index + 1, 0, newPage); } else { _this.pages.push(newPage); } _this.addPageToUI(newPage); _this.setModified({ type: "PAGE_ADDED", newValue: newPage }); return newPage; }; this.koShowOptions = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koGenerateValidJSON = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koShowPropertyGrid = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koDesignerHeight = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koShowPagesToolbox = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.setOptions(options); this.koCanDeleteObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); var self = this; __WEBPACK_IMPORTED_MODULE_17__stylesmanager__["a" /* StylesManager */].applyTheme(__WEBPACK_IMPORTED_MODULE_17__stylesmanager__["a" /* StylesManager */].currentTheme()); this.pages = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koShowSaveButton = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koTestSurveyWidth = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("100%"); this.saveButtonClick = function () { self.doSave(); }; this.koObjects = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); window["sel"] = this.koSelectedObject; this.koSelectedObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koSelectedObject.subscribe(function (newValue) { self.selectedObjectChanged(newValue != null ? newValue.value : null); }); this.koGenerateValidJSON.subscribe(function (newValue) { if (!self.options) self.options = {}; self.options.generateValidJSON = newValue; if (self.generateValidJSONChangedCallback) self.generateValidJSONChangedCallback(newValue); }); this.surveyObjects = new __WEBPACK_IMPORTED_MODULE_5__surveyObjects__["a" /* SurveyObjects */](this.koObjects, this.koSelectedObject); this.surveyObjects.getItemTextCallback = function (obj, text) { var options = { obj: obj, text: text }; self.onGetObjectTextInPropertyGrid.fire(self, options); return options.text; }; this.selectPage = function (page) { _this.surveyObjects.selectObject(page); }; this.undoRedo = new __WEBPACK_IMPORTED_MODULE_10__undoredo__["a" /* SurveyUndoRedo */](); this.selectedObjectEditorValue = new __WEBPACK_IMPORTED_MODULE_2__objectEditor__["a" /* SurveyObjectEditor */](this); this.selectedObjectEditorValue.onCanShowPropertyCallback = function (object, property) { return self.onCanShowObjectProperty(object, property); }; this.selectedObjectEditorValue.onSortPropertyCallback = function (obj, property1, property2) { return self.onCustomSortPropertyObjectProperty(obj, property1, property2); }; this.selectedObjectEditorValue.onPropertyValueChanged.add(function (sender, options) { self.onPropertyValueChanged(options.property, options.object, options.newValue); }); this.selectedObjectEditorValue.onAfterRenderCallback = function (obj, htmlElement, prop) { if (self.onPropertyAfterRender.isEmpty) return; var options = { obj: obj, htmlElement: htmlElement, property: prop.property, propertyEditor: prop.editor }; self.onPropertyAfterRender.fire(self, options); }; this.questionEditorWindow = new __WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditor__["a" /* SurveyPropertyEditorShowWindow */](); this.questionEditorWindow.onCanShowPropertyCallback = function (object, property) { return self.onCanShowObjectProperty(object, property); }; this.surveyLive = new __WEBPACK_IMPORTED_MODULE_3__surveylive__["a" /* SurveyLiveTester */](); this.surveyEmbeding = new __WEBPACK_IMPORTED_MODULE_4__surveyEmbedingWindow__["a" /* SurveyEmbedingWindow */](); this.toolboxValue = new __WEBPACK_IMPORTED_MODULE_13__questionToolbox__["a" /* QuestionToolbox */](this.options && this.options.questionTypes ? this.options.questionTypes : null); this.koViewType = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("designer"); this.koIsShowDesigner = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.koViewType() == "designer"; }); this.selectDesignerClick = function () { self.showDesigner(); }; this.selectEditorClick = function () { self.showJsonEditor(); }; this.selectTestClick = function () { self.showTestSurvey(); }; this.selectEmbedClick = function () { self.showEmbedEditor(); }; this.generateValidJSONClick = function () { self.koGenerateValidJSON(true); }; this.generateReadableJSONClick = function () { self.koGenerateValidJSON(false); }; this.runSurveyClick = function () { self.showLiveSurvey(); }; this.embedingSurveyClick = function () { self.showSurveyEmbeding(); }; this.deleteObjectClick = function () { self.deleteCurrentObject(); }; this.draggingToolboxItem = function (item, e) { self.doDraggingToolboxItem(item.json, e); }; this.clickToolboxItem = function (item) { self.doClickToolboxItem(item.json); }; this.dragEnd = function (item, e) { self.dragDropHelper.end(); }; this.doUndoClick = function () { self.doUndoRedo(self.undoRedo.undo()); }; this.doRedoClick = function () { self.doUndoRedo(self.undoRedo.redo()); }; this.jsonEditor = new __WEBPACK_IMPORTED_MODULE_8__surveyJSONEditor__["a" /* SurveyJSONEditor */](); if (renderedElement) { this.render(renderedElement); } this.text = ""; this.addToolbarItems(); } Object.defineProperty(SurveyEditor.prototype, "haveCommercialLicense", { /** * You have right to set this property to true if you have bought the commercial licence only. * It will remove the text about non-commerical usage on the top of the widget. * Setting this property true without having a commercial licence is illegal. * @see haveCommercialLicense */ get: function () { return this._haveCommercialLicense(); }, set: function (val) { this._haveCommercialLicense(val); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "isAutoSave", { /** * A boolean property, false by default. Set it to true to call protected doSave method automatically on survey changing. */ get: function () { return this.koAutoSave(); }, set: function (newVal) { this.koAutoSave(newVal); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showState", { /** * A boolean property, false by default. Set it to true to show the state in the toolbar (saving/saved). */ get: function () { return this.koShowState(); }, set: function (newVal) { this.koShowState(newVal); }, enumerable: true, configurable: true }); SurveyEditor.prototype.addToolbarItems = function () { var _this = this; this.toolbarItems.push({ id: "svd-undo", visible: this.koIsShowDesigner, enabled: this.undoRedo.koCanUndo, action: this.doUndoClick, title: this.getLocString("ed.undo") }); this.toolbarItems.push({ id: "svd-redo", visible: this.koIsShowDesigner, enabled: this.undoRedo.koCanRedo, action: this.doRedoClick, title: this.getLocString("ed.redo") }); this.toolbarItems.push({ id: "svd-survey-settings", visible: this.koIsShowDesigner, enabled: false, action: function () { _this.surveyObjects.selectObject(_this.survey); _this.showQuestionEditor(_this.survey); }, title: this.getLocString("ed.settings") }); this.toolbarItems.push({ id: "svd-options", visible: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return _this.koIsShowDesigner() && _this.koShowOptions(); }), title: this.getLocString("ed.options"), template: "svd-toolbar-options", items: __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"]([ { id: "svd-valid-json", visible: true, css: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return (_this.koGenerateValidJSON() ? "active" : ""); }), action: this.generateValidJSONClick, title: this.getLocString("ed.generateValidJSON") }, { id: "svd-readable-json", visible: true, css: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return (!_this.koGenerateValidJSON() ? "active" : ""); }), action: this.generateReadableJSONClick, title: this.getLocString("ed.generateReadableJSON") } ]) }); this.toolbarItems.push({ id: "svd-test", visible: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return _this.koViewType() === "test"; }), title: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return _this.getLocString("ed.testSurveyWidth") + " " + _this.koTestSurveyWidth(); }), template: "svd-toolbar-options", items: __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"]([ { id: "svd-100-json", visible: true, action: function () { return _this.koTestSurveyWidth("100%"); }, title: "100%" }, { id: "svd-1200px-json", visible: true, action: function () { return _this.koTestSurveyWidth("1200px"); }, title: "1200px" }, { id: "svd-1000px-json", visible: true, action: function () { return _this.koTestSurveyWidth("1000px"); }, title: "1000px" }, { id: "svd-800px-json", visible: true, action: function () { return _this.koTestSurveyWidth("800px"); }, title: "800px" }, { id: "svd-600px-json", visible: true, action: function () { return _this.koTestSurveyWidth("600px"); }, title: "600px" }, { id: "svd-400px-json", visible: true, action: function () { return _this.koTestSurveyWidth("400px"); }, title: "400px" } ]) }); this.toolbarItems.push({ id: "svd-save", visible: this.koShowSaveButton, action: this.saveButtonClick, innerCss: "svd_save_btn", title: this.getLocString("ed.saveSurvey") }); this.toolbarItems.push({ id: "svd-state", visible: this.koShowState, css: "svd_state", innerCss: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return "icon-" + _this.koState(); }), title: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return _this.getLocString("ed." + _this.koState()); }), template: "svd-toolbar-state" }); }; SurveyEditor.prototype.setOptions = function (options) { if (!options) options = {}; if (!options.hasOwnProperty("generateValidJSON")) options.generateValidJSON = true; this.options = options; this.showJSONEditorTabValue = typeof options.showJSONEditorTab !== "undefined" ? options.showJSONEditorTab : true; this.showTestSurveyTabValue = typeof options.showTestSurveyTab !== "undefined" ? options.showTestSurveyTab : true; this.showEmbededSurveyTabValue = typeof options.showEmbededSurveyTab !== "undefined" ? options.showEmbededSurveyTab : false; this.haveCommercialLicense = typeof options.haveCommercialLicense !== "undefined" ? options.haveCommercialLicense : false; this.koShowOptions(typeof options.showOptions !== "undefined" ? options.showOptions : false); this.koShowPropertyGrid(typeof options.showPropertyGrid !== "undefined" ? options.showPropertyGrid : true); this.koGenerateValidJSON(this.options.generateValidJSON); this.isAutoSave = typeof options.isAutoSave !== "undefined" ? options.isAutoSave : false; this.isRTLValue = typeof options.isRTL !== "undefined" ? options.isRTL : false; this.scrollToNewElement = typeof options.scrollToNewElement !== "undefined" ? options.scrollToNewElement : true; if (options.designerHeight) { this.koDesignerHeight(options.designerHeight); } if (options.objectsIntend) { __WEBPACK_IMPORTED_MODULE_5__surveyObjects__["a" /* SurveyObjects */].intend = options.objectsIntend; } if (typeof options.showPagesToolbox !== "undefined") { this.koShowPagesToolbox(options.showPagesToolbox); } }; Object.defineProperty(SurveyEditor.prototype, "survey", { /** * The editing survey object (Survey.Survey) */ get: function () { return this.surveyValue(); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "selectedObjectEditor", { get: function () { return this.selectedObjectEditorValue; }, enumerable: true, configurable: true }); /** * Call this method to render the survey editor. * @param element HtmlElement or html element id where Survey Editor will be rendered * @param options Survey Editor options. The following options are available: showJSONEditorTab, showTestSurveyTab, showEmbededSurveyTab, showOptions, generateValidJSON, isAutoSave, designerHeight. */ SurveyEditor.prototype.render = function (element, options) { if (element === void 0) { element = null; } if (options === void 0) { options = null; } if (options) this.setOptions(options); var self = this; if (element && typeof element == "string") { element = document.getElementById(element); } if (element) { this.renderedElement = element; } element = this.renderedElement; if (!element) return; element.innerHTML = templateEditorHtml; self.applyBinding(); }; SurveyEditor.prototype.loadSurvey = function (surveyId) { var self = this; new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["dxSurveyService"]().loadSurvey(surveyId, function (success, result, response) { if (success && result) { self.text = JSON.stringify(result); } }); }; Object.defineProperty(SurveyEditor.prototype, "text", { /** * The Survey JSON as a text. Use it to get Survey JSON or change it. */ get: function () { if (this.koIsShowDesigner()) return this.getSurveyTextFromDesigner(); return this.jsonEditor.text; }, set: function (value) { this.changeText(value, true); }, enumerable: true, configurable: true }); /** * Set JSON as text into survey. Clear undo/redo states optionally. * @param value JSON as text * @param clearState default false. Set this parameter to true to clear undo/redo states. */ SurveyEditor.prototype.changeText = function (value, clearState) { if (clearState === void 0) { clearState = false; } var textWorker = new __WEBPACK_IMPORTED_MODULE_9__textWorker__["a" /* SurveyTextWorker */](value); if (textWorker.isJsonCorrect) { this.initSurvey(new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(textWorker.survey)); this.showDesigner(); this.setUndoRedoCurrentState(clearState); } else { this.setTextValue(value); this.koViewType("editor"); } }; Object.defineProperty(SurveyEditor.prototype, "toolbox", { /** * Toolbox object. Contains information about Question toolbox items. * @see QuestionToolbox */ get: function () { return this.toolboxValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "customToolboxQuestionMaxCount", { /** * Get and set the maximum of copied questions/panels in the toolbox. The default value is 3 */ get: function () { return this.toolbox.copiedItemMaxCount; }, set: function (value) { this.toolbox.copiedItemMaxCount = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "state", { /** * Returns the Editor state. It may return empty string or "saving" and "saved". */ get: function () { return this.stateValue; }, enumerable: true, configurable: true }); SurveyEditor.prototype.setState = function (value) { this.stateValue = value; this.koState(this.state); }; SurveyEditor.prototype.doSave = function () { this.setState("saving"); if (this.saveSurveyFunc) { this.saveNo++; var self = this; this.saveSurveyFunc(this.saveNo, function doSaveCallback(no, isSuccess) { self.setState("saved"); if (self.saveNo == no) { if (isSuccess) self.setState("saved"); //else TODO } }); } }; SurveyEditor.prototype.setModified = function (options) { if (options === void 0) { options = null; } this.setState("modified"); this.setUndoRedoCurrentState(); this.onModified.fire(this, options); this.isAutoSave && this.doSave(); }; SurveyEditor.prototype.setUndoRedoCurrentState = function (clearState) { if (clearState === void 0) { clearState = false; } if (clearState) { this.undoRedo.clear(); } var selObj = this.koSelectedObject() ? this.koSelectedObject().value : null; this.undoRedo.setCurrent(this.surveyValue(), selObj ? selObj.name : null); }; Object.defineProperty(SurveyEditor.prototype, "saveSurveyFunc", { /** * Assign to this property a function that will be called on clicking the 'Save' button or on any change if isAutoSave equals true. * @see isAutoSave */ get: function () { return this.saveSurveyFuncValue; }, set: function (value) { this.saveSurveyFuncValue = value; this.koShowSaveButton(value != null && !this.isAutoSave); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showOptions", { /** * Set it to true to show "Options" menu and to false to hide the menu */ get: function () { return this.koShowOptions(); }, set: function (value) { this.koShowOptions(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showPropertyGrid", { /** * Set it to false to hide the Property Grid on the right. It allows to edit the properties of the selected object (question/panel/page/survey). */ get: function () { return this.koShowPropertyGrid(); }, set: function (value) { this.koShowPropertyGrid(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showJSONEditorTab", { /** * Set it to true to show "JSON Editor" tab and to false to hide the tab */ get: function () { return this.showJSONEditorTabValue; }, set: function (value) { this.showJSONEditorTabValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showTestSurveyTab", { /** * Set it to true to show "Test Survey" tab and to false to hide the tab */ get: function () { return this.showTestSurveyTabValue; }, set: function (value) { this.showTestSurveyTabValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showEmbededSurveyTab", { /** * Set it to true to show "Embed Survey" tab and to false to hide the tab */ get: function () { return this.showEmbededSurveyTabValue; }, set: function (value) { this.showEmbededSurveyTabValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "isRTL", { /** * Set it to true to activate RTL support */ get: function () { return this.isRTLValue; }, set: function (value) { this.isRTLValue = value; }, enumerable: true, configurable: true }); SurveyEditor.prototype.onCanShowObjectProperty = function (object, property) { var options = { obj: object, property: property, canShow: true }; this.onCanShowProperty.fire(this, options); return options.canShow; }; SurveyEditor.prototype.onCustomSortPropertyObjectProperty = function (object, property1, property2) { if (this.onCustomSortProperty.isEmpty) return 0; var options = { obj: object, property1: property1, property2: property2, result: 0 }; this.onCustomSortProperty.fire(this, options); return options.result; }; SurveyEditor.prototype.setTextValue = function (value) { this.jsonEditor.text = value; }; /** * Returns the localized string by it's id * @param str the string id. */ SurveyEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString(str); }; SurveyEditor.prototype.addPageToUI = function (page) { this.surveyObjects.addPage(page); }; SurveyEditor.prototype.doOnQuestionAdded = function (question, parentPanel) { if (!this.dragDropHelper.isMoving) { var page = this.getPageByElement(question); var options = { question: question, page: page }; this.onQuestionAdded.fire(this, options); } this.surveyObjects.addElement(question, parentPanel); this.survey.render(); }; SurveyEditor.prototype.doOnElementRemoved = function (question) { this.surveyObjects.removeObject(question); this.survey.render(); }; SurveyEditor.prototype.doOnPanelAdded = function (panel, parentPanel) { var page = this.getPageByElement(panel); var options = { panel: panel, page: page }; this.onPanelAdded.fire(this, options); this.surveyObjects.addElement(panel, parentPanel); this.survey.render(); }; SurveyEditor.prototype.doOnPageAdded = function (page) { var options = { page: page }; this.onPageAdded.fire(this, options); }; SurveyEditor.prototype.onPropertyValueChanged = function (property, obj, newValue) { var isDefault = property.isDefaultValue(newValue); var oldValue = obj[property.name]; obj[property.name] = newValue; if (property.name == "name" || property.name == "title") { this.surveyObjects.nameChanged(obj); } if (property.name === "name") { this.dirtyPageUpdate(); //TODO why this is need ? (ko problem) } else if (property.name === "page") { this.selectPage(newValue); this.surveyObjects.selectObject(obj); } this.setModified({ type: "PROPERTY_CHANGED", name: property.name, target: obj, oldValue: oldValue, newValue: newValue }); //TODO add a flag to a property, may change other properties if (property.name == "locale" || property.name == "hasComment" || property.name == "hasOther") { this.selectedObjectEditorValue.objectChanged(); } this.survey.render(); }; SurveyEditor.prototype.doUndoRedo = function (item) { this.initSurvey(item.surveyJSON); if (item.selectedObjName) { var selObj = this.findObjByName(item.selectedObjName); if (selObj) { this.surveyObjects.selectObject(selObj); } } this.setState("modified"); this.isAutoSave && this.doSave(); }; SurveyEditor.prototype.findObjByName = function (name) { var page = this.survey.getPageByName(name); if (page) return page; var question = this.survey.getQuestionByName(name); if (question) return question; return null; }; SurveyEditor.prototype.canSwitchViewType = function (newType) { if (newType && this.koViewType() == newType) return false; if (this.koViewType() == "designer") { this.jsonEditor.text = this.getSurveyTextFromDesigner(); } if (this.koViewType() != "editor") return true; if (!this.jsonEditor.isJsonCorrect) { alert(this.getLocString("ed.correctJSON")); return false; } this.initSurvey(new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.jsonEditor.survey)); this.setModified({ type: "VIEW_TYPE_CHANGED", newType: newType }); return true; }; /** * Make a "Survey Designer" tab active. */ SurveyEditor.prototype.showDesigner = function () { if (!this.canSwitchViewType("designer")) return; this.koViewType("designer"); }; /** * Make a "JSON Editor" tab active. */ SurveyEditor.prototype.showJsonEditor = function () { if (this.koViewType() == "editor") return; this.jsonEditor.show(this.getSurveyTextFromDesigner()); this.koViewType("editor"); }; /** * Make a "Test Survey" tab active. */ SurveyEditor.prototype.showTestSurvey = function () { if (!this.canSwitchViewType(null)) return; this.showLiveSurvey(); this.koViewType("test"); }; /** * Make a Embed Survey" tab active. */ SurveyEditor.prototype.showEmbedEditor = function () { if (!this.canSwitchViewType("embed")) return; this.showSurveyEmbeding(); this.koViewType("embed"); }; SurveyEditor.prototype.getSurveyTextFromDesigner = function () { var json = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.survey); if (this.options && this.options.generateValidJSON) return JSON.stringify(json, null, 1); return new __WEBPACK_IMPORTED_MODULE_14__json5__["a" /* SurveyJSON5 */]().stringify(json, null, 1); }; SurveyEditor.prototype.getPageByElement = function (obj) { var page = this.survey.getPageByElement(obj); if (page) return page; return this.surveyObjects.getSelectedObjectPage(obj); }; SurveyEditor.prototype.selectedObjectChanged = function (obj) { var canDeleteObject = false; this.selectedObjectEditorValue.selectedObject = obj; var objType = __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj); if (objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Page) { this.survey.currentPage = obj; canDeleteObject = this.pages().length > 1; } if (objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Question || objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Panel) { this.survey.selectedElement = obj; canDeleteObject = true; this.survey.currentPage = this.getPageByElement(obj); var id = obj["id"]; if (this.renderedElement && id && this.survey.currentPage) { var el_1 = this.renderedElement.querySelector("#" + id); var pageEl = this.renderedElement.querySelector("#" + this.survey.currentPage.id); __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].scrollIntoViewIfNeeded(el_1, pageEl); } } else { this.survey.selectedElement = null; } this.koCanDeleteObject(canDeleteObject); //Select2 work-around if (this.renderedElement && this.select2) { var el = this.renderedElement.querySelector("#select2-objectSelector-container"); //TODO if (el) { var item = this.surveyObjects.koSelected(); if (item && item.text) { el.innerText = item.text(); } } } }; SurveyEditor.prototype.applyBinding = function () { if (this.renderedElement == null) return; __WEBPACK_IMPORTED_MODULE_0_knockout__["cleanNode"](this.renderedElement); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"](this, this.renderedElement); this.surveyjs = this.renderedElement.querySelector("#surveyjs"); if (this.surveyjs) { var self = this; this.surveyjs.onkeydown = function (e) { if (!e) return; // if (e.keyCode == 46) self.deleteQuestion(); if (e.keyCode == 38 || e.keyCode == 40) { self.selectQuestion(e.keyCode == 38); } }; } this.initSurvey(this.getDefaultSurveyJson()); this.setUndoRedoCurrentState(true); this.jsonEditor.init(this.renderedElement.querySelector("#surveyjsJSONEditor")); if (typeof jQuery !== "undefined" && jQuery()["select2"]) { var options = { width: "100%" }; if (this.isRTLValue) { options.dir = "rtl"; } this.select2 = jQuery("#objectSelector")["select2"](options); } }; SurveyEditor.prototype.getDefaultSurveyJson = function () { var json = new __WEBPACK_IMPORTED_MODULE_14__json5__["a" /* SurveyJSON5 */]().parse(SurveyEditor.defaultNewSurveyText); if (json["pages"] && json["pages"]["length"] > 0 && json["pages"][0]["name"]) { json["pages"][0]["name"] = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.newPageName") + "1"; } return json; }; SurveyEditor.prototype.initSurvey = function (json) { var _this = this; var self = this; this.surveyValue(new __WEBPACK_IMPORTED_MODULE_16__surveyjsObjects__["a" /* SurveyForDesigner */]()); this.dragDropHelper = new __WEBPACK_IMPORTED_MODULE_12__dragdrophelper__["a" /* DragDropHelper */](this.survey, function (options) { self.setModified(options); }, this.renderedElement); this.surveyValue()["getEditor"] = function () { return self; }; this.surveyValue()["setJsonObject"](json); //TODO if (this.surveyValue().isEmpty) { this.surveyValue()["setJsonObject"](this.getDefaultSurveyJson()); //TODO } this.surveyValue()["dragDropHelper"] = this.dragDropHelper; this.surveyValue().onUpdateElementAllowingOptions = function (options) { self.onElementAllowOperations.fire(self, options); }; this.surveyValue().onGetMenuItems.add(function (sender, options) { var opts = options.obj.allowingOptions; if (!opts) opts = {}; if (opts.allowEdit) { options.items.push({ name: "editelement", text: _this.getLocString("survey.edit"), hasTitle: true, onClick: function (question) { return _this.showQuestionEditor(question); } }); } if (opts.allowDelete) { var deleteLocaleName = options.obj.isPanel ? "survey.deletePanel" : "survey.deleteQuestion"; options.items.push({ name: "delete", text: self.getLocString(deleteLocaleName), onClick: function (selObj) { self.deleteCurrentObject(); } }); } if (opts.allowShowHideTitle && typeof options.obj.titleLocation !== "undefined") { var isShowTitle = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](options.obj.titleLocation !== "hidden"); options.items.push({ name: "showtitle", text: _this.getLocString("pe.showTitle"), icon: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { if (isShowTitle()) { return "icon-actionshowtitle"; } return "icon-actionhidetitle"; }), onClick: function (question) { if (question.titleLocation !== "hidden") { question.titleLocation = "hidden"; if (question.getType() === "boolean") { question["showTitle"] = false; } } else { question.titleLocation = "default"; if (question.getType() === "boolean") { question["showTitle"] = true; } } isShowTitle(question.titleLocation !== "hidden"); _this.onQuestionEditorChanged(question); } }); } if (opts.allowChangeRequired && typeof options.obj.isRequired !== "undefined") { var isRequired = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](options.obj.isRequired); options.items.push({ name: "isrequired", text: _this.getLocString("pe.isRequired"), icon: __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { if (isRequired()) { return "icon-actionisrequired"; } return "icon-actionnotrequired"; }), onClick: function (question) { question.isRequired = !question.isRequired; isRequired(question.isRequired); _this.onQuestionEditorChanged(question); } }); } if (options.items.length > 0) { options.items.push({ template: "action-separator" }); } if (opts.allowCopy) { options.items.push({ name: "copy", text: self.getLocString("survey.copy"), onClick: function (selObj) { self.fastCopyQuestion(selObj); } }); } if (opts.allowAddToToolbox) { options.items.push({ name: "addtotoolbox", text: self.getLocString("survey.addToToolbox"), onClick: function (selObj) { self.addCustomToolboxQuestion(selObj); } }); } if (opts.allowChangeType) { if (options.items.length > 0) { options.items.push({ template: "action-separator" }); } var currentType = options.obj.getType(); var convertClasses = __WEBPACK_IMPORTED_MODULE_6__questionconverter__["a" /* QuestionConverter */].getConvertToClasses(currentType); var allowChangeType = convertClasses.length > 0; var createTypeByClass = function (className) { return { name: _this.getLocString("qt." + className), value: className }; }; var availableTypes = [createTypeByClass(currentType)]; for (var i = 0; i < convertClasses.length; i++) { var className = convertClasses[i]; availableTypes.push(createTypeByClass(className)); } options.items.push({ text: _this.getLocString("qt." + currentType), title: _this.getLocString("survey.convertTo"), type: currentType, allowChangeType: allowChangeType, template: "convert-action", availableTypes: availableTypes, onConvertType: function (data, event) { var newType = event.target.value; _this.convertCurrentObject(options.obj, newType); } }); } if (opts.allowDragging) { options.items.push({ name: "dragelement", text: self.getLocString("survey.drag"), onClick: function (selObj) { } }); } self.onDefineElementMenuItems.fire(self, options); }); this.onDesignerSurveyCreated.fire(this, { survey: this.surveyValue() }); this.survey.render(this.surveyjs); this.surveyObjects.survey = this.survey; this.pages(this.survey.pages); this.surveyValue().onSelectedElementChanged.add(function (sender, options) { self.surveyObjects.selectObject(sender["selectedElement"]); }); this.surveyValue().onEditButtonClick.add(function (sender) { self.showQuestionEditor(self.koSelectedObject().value); }); this.surveyValue().onElementDoubleClick.add(function (sender, options) { self.onElementDoubleClick.fire(self, options); }); this.surveyValue().onProcessHtml.add(function (sender, options) { options.html = self.processHtml(options.html); }); this.surveyValue().onQuestionAdded.add(function (sender, options) { self.doOnQuestionAdded(options.question, options.parentPanel); }); this.surveyValue().onQuestionRemoved.add(function (sender, options) { self.doOnElementRemoved(options.question); }); this.surveyValue().onPanelAdded.add(function (sender, options) { self.doOnPanelAdded(options.panel, options.parentPanel); }); this.surveyValue().onPanelRemoved.add(function (sender, options) { self.doOnElementRemoved(options.panel); }); var pAdded = this.surveyValue()["onPageAdded"]; if (pAdded && pAdded.add) { pAdded.add(function (sender, options) { self.doOnPageAdded(options.page); }); } }; SurveyEditor.prototype.processHtml = function (html) { if (!html) return html; var scriptRegEx = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi; while (scriptRegEx.test(html)) { html = html.replace(scriptRegEx, ""); } return html; }; SurveyEditor.prototype.doDraggingToolboxItem = function (json, e) { this.dragDropHelper.startDragToolboxItem(e, this.getNewName(json["type"]), json); }; SurveyEditor.prototype.doClickToolboxItem = function (json) { var newElement = this.createNewElement(json); this.doClickQuestionCore(newElement); }; SurveyEditor.prototype.copyElement = function (element) { var json = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(element); json.type = element.getType(); return this.createNewElement(json); }; SurveyEditor.prototype.dragOverQuestionsEditor = function (data, e) { data.survey.dragDropHelper.doDragDropOver(e, data.survey.currentPage); return false; }; SurveyEditor.prototype.dropOnQuestionsEditor = function (data, e) { data.survey.dragDropHelper.doDrop(e); }; SurveyEditor.prototype.createNewElement = function (json) { var newElement = __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"].metaData.createClass(json["type"]); new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toObject(json, newElement); this.setNewNames(newElement); return newElement; }; SurveyEditor.prototype.setNewNames = function (element) { this.newQuestions = []; this.newPanels = []; this.setNewNamesCore(element); }; SurveyEditor.prototype.setNewNamesCore = function (element) { var elType = element["getType"](); element.name = this.getNewName(elType); if (element.isPanel || elType == "page") { if (element.isPanel) { this.newPanels.push(element); } var panel = element; for (var i = 0; i < panel.elements.length; i++) { this.setNewNamesCore(panel.elements[i]); } } else { this.newQuestions.push(element); } }; SurveyEditor.prototype.getNewName = function (type) { if (type == "page") return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewPageName(this.pages()); return type == "panel" ? this.getNewPanelName() : this.getNewQuestionName(); }; SurveyEditor.prototype.getNewQuestionName = function () { return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewQuestionName(this.getAllQuestions()); }; SurveyEditor.prototype.getNewPanelName = function () { return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getNewPanelName(this.getAllPanels()); }; SurveyEditor.prototype.getAllQuestions = function () { var result = []; for (var i = 0; i < this.pages().length; i++) { this.addElements(this.pages()[i].elements, false, result); } this.addElements(this.newPanels, false, result); this.addElements(this.newQuestions, false, result); return result; }; SurveyEditor.prototype.getAllPanels = function () { var result = []; for (var i = 0; i < this.pages().length; i++) { this.addElements(this.pages()[i].elements, true, result); } this.addElements(this.newPanels, true, result); this.addElements(this.newQuestions, true, result); return result; }; SurveyEditor.prototype.addElements = function (elements, isPanel, result) { for (var i = 0; i < elements.length; i++) { if (elements[i].isPanel === isPanel) { result.push(elements[i]); } this.addElements(__WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getElements(elements[i]), isPanel, result); } }; SurveyEditor.prototype.doClickQuestionCore = function (element, modifiedType) { if (modifiedType === void 0) { modifiedType = "ADDED_FROM_TOOLBOX"; } var parent = this.survey.currentPage; var index = -1; var elElement = this.survey.selectedElement; if (elElement && elElement.parent) { parent = elElement.parent; index = parent.elements.indexOf(this.survey.selectedElement); if (index > -1) index++; } parent.addElement(element, index); if (this.renderedElement && this.scrollToNewElement) { this.dragDropHelper.scrollToElement(this.renderedElement.querySelector("#" + element["id"])); } this.setModified({ type: modifiedType, question: element }); }; SurveyEditor.prototype.deleteQuestion = function () { var question = this.getSelectedObjAsQuestion(); if (question) { this.deleteCurrentObject(); } }; SurveyEditor.prototype.selectQuestion = function (isUp) { var question = this.getSelectedObjAsQuestion(); if (question) { this.surveyObjects.selectNextQuestion(isUp); } }; SurveyEditor.prototype.getSelectedObjAsQuestion = function () { var obj = this.koSelectedObject().value; if (!obj) return null; return __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Question ? obj : null; }; SurveyEditor.prototype.deleteCurrentObject = function () { this.deleteObject(this.koSelectedObject().value); }; SurveyEditor.prototype.editCurrentObject = function () { this.showQuestionEditor(this.koSelectedObject().value); }; SurveyEditor.prototype.convertCurrentObject = function (obj, className) { var newQuestion = __WEBPACK_IMPORTED_MODULE_6__questionconverter__["a" /* QuestionConverter */].convertObject(obj, className); this.setModified({ type: "QUESTION_CONVERTED", className: className, oldValue: obj, newValue: newQuestion }); }; /** * Show the Editor dialog. The element can be a question, panel, page or survey * @param element The survey element */ SurveyEditor.prototype.showElementEditor = function (element, onClose) { this.showQuestionEditor(element, onClose); }; SurveyEditor.prototype.onQuestionEditorChanged = function (question) { this.surveyObjects.nameChanged(question); this.selectedObjectEditorValue.objectChanged(); this.dirtyPageUpdate(); //TODO why this is need ? (ko problem) this.setModified({ type: "QUESTION_CHANGED_BY_EDITOR", question: question }); this.survey.endLoadingFromJson(); this.survey.render(); }; /** * Add a question into Toolbox object * @param question an added Survey.Question * @see toolbox */ SurveyEditor.prototype.addCustomToolboxQuestion = function (question) { this.toolbox.addCopiedItem(question); }; /** * Copy a question to the active page * @param question A copied Survey.Question */ SurveyEditor.prototype.fastCopyQuestion = function (question) { var newElement = this.copyElement(question); this.doClickQuestionCore(newElement, "ELEMENT_COPIED"); }; /** * Delete an element in the survey. It can be a question, a panel or a page. * @param element a survey element. */ SurveyEditor.prototype.deleteElement = function (element) { this.deleteObject(element); }; SurveyEditor.prototype.deleteObject = function (obj) { var options = { element: obj, elementType: __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj), allowing: true }; this.onElementDeleting.fire(this, options); if (!options.allowing) return; this.surveyObjects.removeObject(obj); var objType = __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj); if (objType == __WEBPACK_IMPORTED_MODULE_11__surveyHelper__["a" /* ObjType */].Page) { this.survey.removePage(obj); } else { this.survey.currentPage.removeElement(obj); this.survey.selectedElement = null; this.surveyObjects.selectObject(this.survey.currentPage); } this.setModified({ type: "OBJECT_DELETED", target: obj }); this.survey.render(); }; SurveyEditor.prototype.showLiveSurvey = function () { var self = this; this.surveyLive.onSurveyCreatedCallback = function (survey) { self.onTestSurveyCreated.fire(self, { survey: survey }); }; this.surveyLive.setJSON(this.getSurveyJSON()); this.surveyLive.show(); }; SurveyEditor.prototype.showSurveyEmbeding = function () { var json = this.getSurveyJSON(); this.surveyEmbeding.json = json; this.surveyEmbeding.surveyId = this.surveyId; this.surveyEmbeding.surveyPostId = this.surveyPostId; this.surveyEmbeding.generateValidJSON = this.options && this.options.generateValidJSON; this.surveyEmbeding.show(); }; SurveyEditor.prototype.getSurveyJSON = function () { if (this.koIsShowDesigner()) return new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.survey); if (this.jsonEditor.isJsonCorrect) return new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["JsonObject"]().toJsonObject(this.jsonEditor.survey); return null; }; SurveyEditor.prototype.createAnnotations = function (text, errors) { var annotations = new Array(); for (var i = 0; i < errors.length; i++) { var error = errors[i]; var annotation = { row: error.position.start.row, column: error.position.start.column, text: error.text, type: "error" }; annotations.push(annotation); } return annotations; }; Object.defineProperty(SurveyEditor.prototype, "alwaySaveTextInPropertyEditors", { //implements ISurveyObjectEditorOptions get: function () { return this.alwaySaveTextInPropertyEditorsValue; }, set: function (value) { this.alwaySaveTextInPropertyEditorsValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEditor.prototype, "showApplyButtonInEditors", { get: function () { return this.showApplyButtonValue; }, set: function (value) { this.showApplyButtonValue = value; }, enumerable: true, configurable: true }); SurveyEditor.prototype.onItemValueAddedCallback = function (propertyName, itemValue) { var options = { propertyName: propertyName, newItem: itemValue }; this.onItemValueAdded.fire(this, options); }; SurveyEditor.prototype.onMatrixDropdownColumnAddedCallback = function (column) { var options = { newColumn: column }; this.onMatrixColumnAdded.fire(this, options); }; SurveyEditor.prototype.onSetPropertyEditorOptionsCallback = function (propertyName, obj, editorOptions) { var options = { propertyName: propertyName, obj: obj, editorOptions: editorOptions }; this.onSetPropertyEditorOptions.fire(this, options); }; SurveyEditor.prototype.onGetErrorTextOnValidationCallback = function (propertyName, obj, value) { var options = { propertyName: propertyName, obj: obj, value: value, error: "" }; this.onPropertyValidationCustomError.fire(this, options); return options.error; }; SurveyEditor.prototype.onValueChangingCallback = function (options) { this.onPropertyValueChanging.fire(this, options); }; SurveyEditor.prototype.onPropertyEditorObjectSetCallback = function (propertyName, obj, editor) { var options = { propertyName: propertyName, obj: obj, editor: editor }; this.onPropertyEditorObjectAssign.fire(this, options); }; SurveyEditor.prototype.onPropertyEditorModalShowDescriptionCallback = function (propertyName, obj) { var options = { obj: obj, propertyName: propertyName, htmlTop: "", htmlBottom: "" }; this.onShowPropertyModalEditorDescription.fire(this, options); var res = { top: options.htmlTop, bottom: options.htmlBottom }; return res; }; SurveyEditor.prototype.onGetElementEditorTitleCallback = function (obj, title) { return title; }; return SurveyEditor; }()); SurveyEditor.defaultNewSurveyText = "{ pages: [ { name: 'page1'}] }"; var koSurveyTemplate = new __WEBPACK_IMPORTED_MODULE_15_survey_knockout__["SurveyTemplateText"]()["text"]; koSurveyTemplate = koSurveyTemplate.replace("name: 'survey-content', afterRender: koEventAfterRender", "name: 'survey-content', data: survey"); //koSurveyTemplate = "<div data-bind='data: survey'>" + koSurveyTemplate + "</div>"; __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("survey-widget", { viewModel: function (params) { this.survey = params.survey; }, template: koSurveyTemplate }); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("svg-icon", { viewModel: { createViewModel: function (params, componentInfo) { __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { var size = (__WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](params.size) || 16) + "px"; var svgElem = componentInfo.element.childNodes[0]; svgElem.style.width = size; svgElem.style.height = size; var node = svgElem.childNodes[0]; node.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#" + __WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](params.iconName)); }); } }, template: "<svg class='svd-svg-icon'><use></use></svg>" }); /***/ }), /* 42 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Extentions; }); var Extentions = (function () { function Extentions() { } Extentions.registerCustomPropertyEditor = function (name, widgetJSON) { __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerCustomEditor(name, widgetJSON); }; Extentions.registerPropertyEditor = function (name, creator) { __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor(name, creator); }; return Extentions; }()); /***/ }), /* 43 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var frenchTranslation = { //Survey templates survey: { edit: "Éditer", dropQuestion: "Déposer votre question ici.", copy: "Copier", addToToolbox: "Ajouter à la boîte à outils", deletePanel: "Supprimer le panneau", deleteQuestion: "Supprimer la question", convertTo: "Convertir en" }, //questionTypes qt: { checkbox: "Cases à cocher", comment: "Commentaire", dropdown: "Liste déroulante", file: "Fichier", html: "HTML", matrix: "Matrice (choix unique)", matrixdropdown: "Matrice (choix multiples)", matrixdynamic: "Matrice (lignes dynamiques)", multipletext: "Champ multilignes", panel: "Panneau", paneldynamic: "Panneau (panneaux dynamiques)", radiogroup: "Boutons radio", rating: "Évaluation", text: "Champ texte", boolean: "Booléen", expression: "Expression" }, //Strings in Editor ed: { survey: "Questionnaire", editSurvey: "Éditer le questionnaire", addNewPage: "Ajouter une page", deletePage: "Supprimer une page", editPage: "Éditer une page", newPageName: "page", newQuestionName: "question", newPanelName: "panneau", testSurvey: "Tester le questionnaire", testSurveyAgain: "Tester à nouveau le questionnaire", testSurveyWidth: "Largeur du questionnaire : ", embedSurvey: "Intégrer le questionnaire", saveSurvey: "Sauvegarder le questionnaire", designer: "Éditeur de questionnaire", jsonEditor: "Éditer JSON", undo: "Annuler", redo: "Rétablir", options: "Options", generateValidJSON: "Générer un JSON valide", generateReadableJSON: "Générer un JSON lisible", toolbox: "Boîte à outils", toolboxGeneralCategory: "Général", delSelObject: "Supprimer l'objet sélectionné", editSelObject: "Éditer l'objet sélectionné", correctJSON: "SVP corrigez le JSON", surveyResults: "Résultat du questionnaire : ", modified: "Modifié", saving: "Sauvegarde en cours", saved: "Sauvegardé" }, //Property names in table headers pel: { isRequired: "Obligatoire ?" }, //Property Editors pe: { apply: "Appliquer", ok: "OK", cancel: "Annuler", reset: "Réinitialiser", close: "Fermer", delete: "Supprimer", addNew: "Ajouter un nouveau", addItem: "Cliquer pour ajouter un item...", removeAll: "Tout supprimer", edit: "Éditer", move: "Déplacer", empty: "<vide>", notEmpty: "<éditer la valeur>", fastEntry: "Ajout rapide", formEntry: "Ajout via formulaire", testService: "Tester le service", conditionSelectQuestion: "Sélectionner une question...", conditionButtonAdd: "Ajouter", conditionButtonReplace: "Remplacer", conditionHelp: 'Veuillez entrer une expression booléenne. Elle doit retourner Vrai(true) pour garder la question/page visible. Par exemple: {question1} = "valeur1" or ({question2} = 3 and {question3} < 5)', expressionHelp: "Veuillez entrer une expression. Vous pouvez utiliser des accolades pour accéder aux valeurs des questions '{question1} + {question2}', '({prix}*{quantite}) * (100 - {remise})'", aceEditorHelp: "Appuyer sur Ctrl + espace pour obtenir une aide pour la saisie d'expression", aceEditorRowTitle: "Ligne courante", aceEditorPanelTitle: "Panneau courant", showMore: "Pour plus d'informations, veuillez vous référer à la documentation", assistantTitle: "Questions disponibles :", cellsEmptyRowsColumns: "Il faut au minimum une ligne ou une colonne", propertyIsEmpty: "Veuillez entrer une valeur pour la propriété", value: "Valeur", text: "Texte", columnEdit: "Éditer la colonne: {0}", itemEdit: "Éditer l'item: {0}", url: "URL", path: "Chemin", valueName: "Nom de la valeur", titleName: "Nom du titre", hasOther: "Contient un autre item", otherText: "Autre item texte", name: "Nom", title: "Titre", cellType: "Type de cellule", colCount: "Nombre de colonnes", choicesOrder: "Sélectionner l'ordre des choix", visible: "Est visible ?", isRequired: "Est obligatoire ?", startWithNewLine: "Commencer avec une nouvelle ligne ?", rows: "Nombre de lignes", placeHolder: "Placeholder (indice dans le champ)", showPreview: "L'aperçu d'image est-il affiché ?", storeDataAsText: "Stocker le contenu du fichier dans le résultat JSON sous forme de texte", maxSize: "Taille maximum du fichier en octets", imageHeight: "Hauteur de l'image", imageWidth: "Largeur de l'image", rowCount: "Nombre de lignes", addRowText: 'Texte bouton "Ajouter une ligne"', removeRowText: 'Texte bouton "Supprimer une ligne"', minRateDescription: "Description note minimum", maxRateDescription: "Description note maximum", inputType: "Type de champ", optionsCaption: "Texte par défaut", defaultValue: "Valeur par défaut", cellsDefaultRow: "Texte de cellule par défaut", surveyEditorTitle: "Éditer les préférences du questionnaire", qEditorTitle: "Éditer la question: {0}", //survey showTitle: "Afficher/cacher le titre", locale: "Langue par défaut", mode: "Mode (édition/lecture seule)", clearInvisibleValues: "Effacer les valeurs invisibles", cookieName: "Nom du cookie (pour empêcher de compléter 2 fois le questionnaire localement)", sendResultOnPageNext: "Envoyer les résultats au changement de page", storeOthersAsComment: 'Sauvegarder la valeur "Autres" dans un champ séparé', showPageTitles: "Afficher les titres de pages", showPageNumbers: "Afficher les numéros de pages", pagePrevText: "Texte bouton page précédente", pageNextText: "Texte bouton page suivante", completeText: "Texte bouton terminer", startSurveyText: "Texte bouton commencer", showNavigationButtons: "Afficher les boutons de navigation (navigation par défaut)", showPrevButton: "Afficher le bouton précédent (l'utilisateur pourra retourner sur la page précédente)", firstPageIsStarted: "La première page du questionnaire est une page de démarrage.", showCompletedPage: 'Afficher la page "terminé" à la fin (completedHtml)', goNextPageAutomatic: "Aller à la page suivante automatiquement pour toutes les questions", showProgressBar: "Afficher la barre de progression", questionTitleLocation: "Emplacement du titre de la question", requiredText: "La question requiert un/des symbole(s)", questionStartIndex: "Index de départ de la question (1, 2 ou 'A', 'a')", showQuestionNumbers: "Afficher les numéros de questions", questionTitleTemplate: "Gabarit du titre de question, par défaut : '{no}. {require} {title}'", questionErrorLocation: "Emplacement de l'erreur", focusFirstQuestionAutomatic: "Focus sur la première question au changement de page", questionsOrder: "Ordre des éléments sur la page", maxTimeToFinish: "Temps maximum pour terminer le questionnaire", maxTimeToFinishPage: "Temps maximum pour terminer une page", showTimerPanel: "Afficher le panneau chronomètre", showTimerPanelMode: "Mode d'affichage du panneau chronomètre", renderMode: "Mode de rendu", allowAddPanel: "Autoriser l'ajout du panneau", allowRemovePanel: "Autoriser la suppression du panneau", panelAddText: "Ajouter un panneau texte", panelRemoveText: "Supprimer le panneau texte", isSinglePage: "Afficher tous les éléments sur une seule page", tabs: { general: "Général", fileOptions: "Options", html: "Éditeur HTML", columns: "Colonnes", rows: "Lignes", choices: "Choix", visibleIf: "Visible si", enableIf: "Actif si", rateValues: "Barème", choicesByUrl: "Choix depuis API web", matrixChoices: "Choix par défaut", multipleTextItems: "Champs texte multiples", validators: "Validateurs", navigation: "Navigation", question: "Question", completedHtml: "HTML de fin", loadingHtml: "HTML de chargement", timer: "Chronomètre/Quiz", triggers: "Déclencheurs", templateTitle: "Titre de gabarit" }, editProperty: 'Éditer la propriété "{0}"', items: "[ Éléments: {0} ]", enterNewValue: "Veuillez saisir la valeur.", noquestions: "Il n'y a aucune question dans le questionnaire.", createtrigger: "Veuillez créer un déclencheur", triggerOn: "Quand ", triggerMakePagesVisible: "Rendre les pages visibles :", triggerMakeQuestionsVisible: "Rendre les questions visibles :", triggerCompleteText: "Terminer le questionnaire en cas de succès.", triggerNotSet: "Le déclencheur n'est pas défini", triggerRunIf: "Exécuter si", triggerSetToName: "Changer la valeur de: ", triggerSetValue: "à: ", triggerIsVariable: "Ne placez pas la variable dans le résultat du questionnaire." }, //Property values pv: { true: "vrai", false: "faux", inherit: "hérité", show: "afficher", hide: "masquer", default: "par défaut", initial: "initial", random: "aléatoire", collapsed: "replié", expanded: "déployé", none: "aucun", asc: "ascendant", desc: "descendant", indeterminate: "indeterminé", decimal: "décimal", currency: "monnaie", percent: "pourcentage", firstExpanded: "déployé en premier", off: "désactivé", onPanel: "panneau", onSurvey: "questionnaire", list: "liste", progressTop: "Progression en haut", progressBottom: "Progression en bas", progressTopBottom: "Progression en haut et en bas", top: "haut", bottom: "bas", left: "gauche", color: "couleur", date: "date", datetime: "heure", "datetime-local": "heure locale", email: "email", month: "mois", number: "nombre", password: "mot de passe", range: "jauge", tel: "tél.", text: "texte", time: "heure", url: "URL", week: "semaine", hidden: "masqué", on: "activé", onPage: "page", edit: "éditer", display: "affichage", onComplete: "onComplete", onHidden: "onHidden", all: "tous", page: "page", survey: "questionnaire" }, //Operators op: { empty: "est vide", notempty: "n'est pas vide", equal: "égal", notequal: "n'est pas égal", contains: "contient", notcontains: "ne contient pas", greater: "supérieur", less: "inférieur", greaterorequal: "supérieur ou égal", lessorequal: "inférieur ou égal" }, //Embed window ew: { angular: "Utiliser la version Angular", jquery: "Utiliser la version jQuery", knockout: "Utiliser la version Knockout", react: "Utiliser la version React", vue: "Utiliser la version Vue", bootstrap: "Pour le framework Bootstrap", standard: "Sans Bootstrap", showOnPage: "Afficher le questionnaire dans une page", showInWindow: "Afficher le questionnaire dans une fenêtre", loadFromServer: "Charger le JSON du questionnaire depuis un serveur", titleScript: "Scripts et styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Sélectionner une page pour la tester" }, //Validators validators: { answercountvalidator: "total de réponses", emailvalidator: "e-mail", numericvalidator: "numérique", regexvalidator: "regex", textvalidator: "texte" }, //Triggers triggers: { completetrigger: "terminer le questionnaire", setvaluetrigger: "définir la valeur", visibletrigger: "modifier la visibilité" }, //Properties p: { name: "Nom", title: { name: "Titre", title: 'Laissez vide, si même texte que le "Nom"' }, navigationButtonsVisibility: "Visibilité des boutons de navigation", questionsOrder: "Ordre des questions", maxTimeToFinish: "Temps maximum pour terminer", visible: "Visible", visibleIf: "Visible si ", questionTitleLocation: "Emplacement titre question", description: "Description", state: "État", isRequired: "Obligatoire ?", requiredErrorText: "Message d'erreur text obligatoire", startWithNewLine: "Commencer avec une nouvelle ligne", innerIndent: "Indentation", page: "page", width: "largeur", commentText: "Description champ commentaire", valueName: "Nom de la valeur", enableIf: "Activer si", defaultValue: "Valeur par défaut", correctAnswer: "Bonne réponse", readOnly: "Lecture seule", validators: "Validateurs", titleLocation: "Emplacement du titre", hasComment: "Champ commentaire ?", hasOther: "Choix autre ?", choices: "Choix", choicesOrder: "Ordre des choix", choicesByUrl: "Choix par API", otherText: "Autre texte", otherErrorText: 'Texte d\'erreur champ "Autre"', storeOthersAsComment: "Sauvegarder choix autre comme commentaire", label: "Intitulé", showTitle: "Afficher le titre", valueTrue: "Valeur vrai", valueFalse: "Valeur faux", cols: "Colonnes", rows: "Nombre de lignes", placeHolder: "PlaceHolder (indice dans le champ)", optionsCaption: "Texte par défaut", expression: "Expression", format: "Format", displayStyle: "Style d'affichage", currency: "Monnaie", useGrouping: "Utiliser les groupes", showPreview: "Voir la prévisualisation", allowMultiple: "Autoriser multiples", imageHeight: "Hauteur de l'image", imageWidth: "Largeur de l'image", storeDataAsText: "Stocker les données comme du texte", maxSize: "Taille maximum", html: "HTML", columns: "Colonnes", cells: "Cellules", horizontalScroll: "Scroll horizontal", cellType: "Type de cellule", columnColCount: "Nombre de colonnes", columnMinWidth: "Largeur minimale des colonnes", rowCount: "Nombre de lignes", minRowCount: "Nombre de lignes minimum", maxRowCount: "Nombre de lignes maximum", keyName: "Nom de la clé", keyDuplicationError: "Erreur de clés multiples", confirmDelete: "Confirmation de suppression", confirmDeleteText: "Texte de confirmation de suppression", addRowText: "Bouton ajouter une ligne", removeRowText: "Bouton supprimer une ligne", items: "Items", itemSize: "Nombre maximum de caractères", colCount: "Nombre de colonnes", templateTitle: "Titre de gabarit", templateDescription: "Description du gabarit", allowAddPanel: "Autoriser l'ajout de panneau", allowRemovePanel: "Autoriser la suppression de panneau", panelCount: "Nombre de panneaux", minPanelCount: "Nombre minimum de panneaux", maxPanelCount: "Nombre maximum de panneaux", panelsState: "État des panneaux", panelAddText: "Texte d'ajout des panneaux", panelRemoveText: "Texte de suppression des panneaux", panelPrevText: "Texte panneau précédent", panelNextText: "Texte panneau suivant", showQuestionNumbers: "Numérotation des questions", showRangeInProgress: "Afficher la progression", renderMode: "Mode de rendu", templateTitleLocation: "Emplacement du titre de gabarit", rateValues: "Barème", rateMin: "Valeur minimum", rateMax: "Valeur maximum", rateStep: "Pas", minRateDescription: "Description note minimum", maxRateDescription: "Description note maximum", inputType: "Type de champ", size: "Nombre maximum de caractères", focusFirstQuestionAutomatic: "Focus automatique sur la première question", completedHtml: "HTML questionnaire finalisé", completedBeforeHtml: "HTML avant complétion du questionnaire", loadingHtml: "HTML de chargement", triggers: "Déclencheurs", cookieName: "Nom du cookie", sendResultOnPageNext: "Envoyer les résultats au changement de page", showNavigationButtons: "Boutons de navigation", showPrevButton: "Afficher le bouton précédent", showPageTitles: "Titre des pages", showCompletedPage: "Voir la page formulaire complété ?", showPageNumbers: "Numérotation des pages", questionErrorLocation: "Emplacement des erreurs", showProgressBar: "Barre de progression", mode: "Mode d'affichage", goNextPageAutomatic: "Aller à la page suivante automatiquement", clearInvisibleValues: "Cacher les valeurs invisibles", startSurveyText: "Texte de démarrage du questionnaire", pagePrevText: "Bouton page précédente", pageNextText: "Bouton page suivante", completeText: "Texte questionnaire finalisé", requiredText: "Texte pour les champs obligatoires", questionStartIndex: "Index de numérotation des questions", questionTitleTemplate: "Template d'affichage des questions", firstPageIsStarted: "Commence à la première page", isSinglePage: "Affiché sur une page", maxTimeToFinishPage: "Temps maximum pour finir la page", showTimerPanel: "Afficher le panneau chronomètre", showTimerPanelMode: "Mode d'affichage du panneau chronomètre", indent: "Indentation", isAllRowRequired: "Toutes les lignes sont-elle obligatoires ?", locale: "Langue" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["fr"] = frenchTranslation; /***/ }), /* 44 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var germanTranslation = { //survey templates survey: { edit: "Bearbeiten", dropQuestion: "Frage bitte hier platzieren.", copy: "Kopieren", addToToolbox: "Zur Werkzeugleiste hinzufügen", deletePanel: "Panel löschen", deleteQuestion: "Frage löschen" }, //questionTypes qt: { checkbox: "Checkbox", comment: "Kommentar", dropdown: "Aufklappmenü", file: "Datei", html: "Html", matrix: "Matrix (einfache Auswahl)", matrixdropdown: "Matrix (mehrfache Auswahl)", matrixdynamic: "Matrix (dynamische Zeilen)", multipletext: "Mehrzeiliger Text", panel: "Panel", paneldynamic: "Panel (dynamische Panels)", radiogroup: "Radiogruppe", rating: "Bewertung", text: "Einfache Eingabe", boolean: "Boolean" }, //Strings in Editor ed: { survey: "Umfrage", addNewPage: "Neue Seite hinzufügen", newPageName: "Seite", newQuestionName: "Frage", newPanelName: "Panel", testSurvey: "Testumfrage", testSurveyAgain: "Testumfrage wiederholen", testSurveyWidth: "Umfragebreite: ", embedSurvey: "Umfrage einfügen", saveSurvey: " Umfrage speichern", designer: "Umfrage Designer", jsonEditor: "JSON Editor", undo: "Rückgängig", redo: "Wiederherstellen", options: "Optionen", generateValidJSON: "Generiere gültiges JSON", generateReadableJSON: "Generiere lesbares JSON", toolbox: "Werkzeugleiste", delSelObject: "Lösche markiertes Objekt", correctJSON: "Bitte JSON korrigieren.", surveyResults: "Umfrageergebnis: " }, //Property names in table headers pel: { isRequired: "Erforderlich?" }, //Property Editors pe: { apply: "Anwenden", ok: "OK", cancel: "Abbrechen", reset: "Zurücksetzen", close: "Schliessen", delete: "Löschen", addNew: "Neu hinzufügen", removeAll: "Alles löschen", edit: "Bearbeiten", empty: "<leer>", fastEntry: "Schnell-Eintrag", formEntry: "Formular-Eintrag", testService: "Service testen", expressionHelp: "Bitte geben Sie eine booleschen Ausdruck ein. Es muss 'true' retournieren um die Frage/Seite anzuzeigen. zum Beispiel: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", propertyIsEmpty: "Bitte geben Sie einen Wert ein", value: "Wert", text: "Text", columnEdit: "Spalte bearbeiten: {0}", itemEdit: "Element bearbeiten: {0}", hasOther: "Hat ein anderes Element", name: "Name", title: "Titel", cellType: "Zellentyp", colCount: "Spaltenanzahl", choicesOrder: "Wähle Auswahlreihenfolge", visible: "Ist es sichtbar?", isRequired: "Ist es erforderlich?", startWithNewLine: "In neuer Zeile beginnen?", rows: "Zeilenanzahl", placeHolder: "Platzhalter eingeben", showPreview: "Wird eine Bildvorschau angezeigt?", storeDataAsText: "Speicher Dateininhalt des JSON-Resultats als Text", maxSize: "Maximale Dateigrösse in Bytes", imageHeight: "Bildhöhe", imageWidth: "Bildbreite", rowCount: "Zeilenanzahl", addRowText: "Zeilenknopftext hinzufügen", removeRowText: "Zeilenknopftext löschen", minRateDescription: "Bewertungsbeschreibung minimieren", maxRateDescription: "Bewertungsbeschreibung maximieren", inputType: "Eingabetyp", optionsCaption: "Auswahlbeschriftung", qEditorTitle: "Frage bearbeiten: {0}", tabs: { general: "Allgemein", fileOptions: "Optionen", html: "Html Editor", columns: "Spalten", rows: "Zeilen", choices: "Auswahlmöglichkeiten", visibleIf: "Sichtbar wenn", rateValues: "Bewertungswerte", choicesByUrl: "Auswahlmöglichkeiten vom Internet", matrixChoices: "Standardauswahl", multipleTextItems: "Texteingabe", validators: "Überprüfung" }, editProperty: "Eigenschaft bearbeiten '{0}'", items: "[ Gegenstand: {0} ]", enterNewValue: "Bitte einen Wert eingeben.", noquestions: "Die Umfrage enthält keine Frage.", createtrigger: "Bitte einen Trigger eingeben.", triggerOn: "Ein ", triggerMakePagesVisible: "Seiten sichtbar machen:", triggerMakeQuestionsVisible: "Elemente sichtbar machen:", triggerCompleteText: "Bei Erfolg die Umfrage abschliessen.", triggerNotSet: "Kein Trigger eingerichtet", triggerRunIf: "Ausführen wenn", triggerSetToName: "Ändere Wert von: ", triggerSetValue: "auf: ", triggerIsVariable: "Variable nicht im Umfrageergebnis einbinden." }, //Property values pv: { true: "true", false: "false" }, //Operators op: { empty: "ist leer", notempty: "ist nicht leer", equal: "ist gleich", notequal: "ist ungleich", contains: "enthält", notcontains: "enthält nicht", greater: "grösser als", less: "kleiner als", greaterorequal: "grösser oder kleiner als", lessorequal: "kleiner oder ist gleich" }, //Embed window ew: { angular: "Angular-Version benutzen", jquery: "jQuery-Version benutzen", knockout: "Knockout-Version benutzen", react: "React-Version benutzen", vue: "Vue-Version benutzen", bootstrap: "Als Bootstrap Framework", standard: "Kein Bootstrap", showOnPage: "Zeige Umfrage auf Seite", showInWindow: "Zeige Umfrage als Fenster", loadFromServer: "Lade Umfrage als JSON vom Server", titleScript: "Skripte und Styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, validators: { answercountvalidator: "Anzahl Antworten", emailvalidator: "E-Mail", numericvalidator: "numerisch", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "Umfrage abschliessen", setvaluetrigger: "Wert setzen", visibletrigger: "Sichtbarkeit ändern" }, //Properties p: { name: "Name", title: { name: "Titel", title: "Bitte leer lassen, falls gleich wie 'Name'" }, survey_title: { name: "Titel", title: "Wird auf jeder Seite angezeigt." }, page_title: { name: "title", title: "Seitentitel" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["de"] = germanTranslation; /***/ }), /* 45 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var italianTranslation = { // strings for survey templates survey: { edit: "Modifica", dropQuestion: "Aggiungi una domanda qui", copy: "Copia", addToToolbox: "Aggiungi alla toolbox", deletePanel: "Elimina pannello", deleteQuestion: "Elimina domanda", convertTo: "Converti a" }, // strings for question types qt: { checkbox: "Casella di controllo ", comment: "Commento", dropdown: "Combo", file: "Archivio", html: "Html", matrix: "Matrice (unica opzione)", matrixdropdown: "Matrice (opzioni multiple)", matrixdynamic: "Matrice (dinamica)", multipletext: "Testo multiplo", panel: "Pannello", paneldynamic: "Pannello (dinamico)", radiogroup: "Opzione multipla", rating: "Valutazione", text: "Testo semplice", expression: "Espressione" }, // strings for editor ed: { survey: "Questionario", editSurvey: "Modifica Questionario", addNewPage: "Aggiungi Nuova Pagina", deletePage: "Elimina Pagina", editPage: "Modifica Pagina", newPageName: "pagina", newQuestionName: "domanda", newPanelName: "pannello", testSurvey: "Testa questionario", testSurveyAgain: "Testa questionario di nuovo", testSurveyWidth: "Larghezza questionario:", embedSurvey: "Includi questionario", saveSurvey: "Salva questionario", designer: "Disegna", jsonEditor: "Modifica JSON", undo: "Annulla", redo: "Ripeti", options: "Opzioni", generateValidJSON: "Genera JSON valido", generateReadableJSON: "Genera JSON leggibile", toolbox: "Strumenti", delSelObject: "Elimina oggetto selezionato", editSelObject: "Modifica oggetto selezionato", correctJSON: "Per favore, correggi il tuo JSON", surveyResults: "Risultati del questionario: ", modified: "Modificato", saving: "Salvataggio", saved: "Salvato" }, //Property names in table headers pel: { isRequired: "Richiesto" }, // strings for property editors pe: { apply: "Applica", ok: "Accetta", cancel: "Annulla", reset: "Reimposta", close: "Chiudi", delete: "Elimina", addNew: "Nuovo", removeAll: "Elimina tutto", edit: "Modifica", empty: "<vuoto>", notEmpty: "<modifica valore>", fastEntry: "Inserimento rapido", formEntry: "Inserimento con dati ", testService: "Test del servizio", conditionSelectQuestion: "Seleziona domanda...", conditionButtonAdd: "Aggiungi", conditionButtonReplace: "Sostituisci", conditionHelp: "Per favore, inserire una espressione booleana. Dovrebbe restituire true per mantenere la domanda/pagina visibile. Ad esempio: {domanda1} = 'valore1' or ({domanda2} * {domanda4} > 20 and {domanda3} < 5)", expressionHelp: "Per favore inserire una espressione. Puoi usare parentesi graffe per ottenere l'accesso ai valori delle domande: '{domanda1} + {domanda2}', '({prezzo}*{qta}) * (100 - {sconto})'", aceEditorHelp: "Premi ctrl+space per ottenere un suggerimento sul completamento dell'espressione", aceEditorRowTitle: "Riga corrente", aceEditorPanelTitle: "Pannello Corrente", showMore: "Per favore, per maggiori dettagli guardare la documentazione", assistantTitle: "Domande disponibili:", cellsEmptyRowsColumns: "Dovrebbe esserci almeno una colonna o riga", propertyIsEmpty: "Per favore, inserire un valore per la propietà", value: "Valore", text: "Testo", columnEdit: "Modifica colonna: {0}", itemEdit: "Modifica elemento: {0}", url: "URL", path: "Percorso", valueName: "Nome Valore", titleName: "Nome Titolo", hasOther: "Altri elementi", otherText: "Testo altri elementi", name: "Nome", title: "Titolo", cellType: "Tipo di cella", colCount: "Numero di colonne", choicesOrder: "Seleziona altre opzioni", visible: "Visibile", isRequired: "Richiesto", startWithNewLine: "Nuova linea", rows: "Numero di righe", placeHolder: "Testo di riferimento", showPreview: "Mostra anteprima", storeDataAsText: "Vedi il contenuto JSON come testo", maxSize: "Dimensione massima in bytes", imageHeight: "Altezza immagine", imageWidth: "Larghezza immagine", rowCount: "Numero delle righe", addRowText: "Testo del pulsante per aggiungere una nuova righa", removeRowText: "Testo del pulsante per eliminare una righa", minRateDescription: "Descrizione del valore minimo", maxRateDescription: "Descrizione del valore massimo", inputType: "Tipo di inserimento", optionsCaption: "Titolo dell'opzione", defaultValue: "Valore default", cellsDefaultRow: "Valore default celle", surveyEditorTitle: "Edit survey settings", qEditorTitle: "Modifica domanda: {0}", //survey showTitle: "Mostra/nascondi titolo", locale: "Lingua Default", mode: "Modalità (modifica/sola lettura)", clearInvisibleValues: "Pulischi valori non visibili", cookieName: "Nome cookie (per disabilitare esegui il questionario due volte in locale)", sendResultOnPageNext: "Invia i risultati del sondaggio alla pagina successiva", storeOthersAsComment: "Memorizza il valore 'altri' in campi separati", showPageTitles: "Visualizza titoli pagina", showPageNumbers: "Visualizza numeri pagina", pagePrevText: "Testo bottone pagina precedente", pageNextText: "Testo bottone pagina successiva", completeText: "Testo bottone Completato", startSurveyText: "Testo bottone Inizia", showNavigationButtons: "Visualizza bottoni di navigazione (navigazione di default)", showPrevButton: "Visualizza bottone precedente(l'utente può tornare alla pagina precedente)", firstPageIsStarted: "La prima pagina nel questionario è la pagina iniziale.", showCompletedPage: "Visualizza la pagina completata alla fine del questionario (completedHtml)", goNextPageAutomatic: "Rispondendo a tutte le domande, vai alla pagina successiva in automatico.", showProgressBar: "Visualizza barra di avanzamento", questionTitleLocation: "Posizione titolo domanda", requiredText: "Simbolo domanda obbligatoria, esempio (*)", questionStartIndex: "La domanda inizia con l'indice (1, 2 oppure 'A', 'a')", showQuestionNumbers: "Visualizza i numeri di domanda", questionTitleTemplate: "Template titolo della domanda, il default è: '{no}. {require} {title}'", questionErrorLocation: "Posizione notifica errore sulla domanda", focusFirstQuestionAutomatic: "Sul cambio pagina, posiziona il cursore sulla prima domanda", questionsOrder: "Ordine di elementi sulla pagina", maxTimeToFinish: "Tempo massimo per terminare il sondaggio", maxTimeToFinishPage: "Tempo massimo per terminare una pagina del sondaggio", showTimerPanel: "Visualizza pannello timer", showTimerPanelMode: "Visualizza modalità timer pannello", renderMode: "Modalità di rendering", allowAddPanel: "Consenti l'aggiunta di un pannello", allowRemovePanel: "Consenti la rimozione di un pannello", panelAddText: "Aggiungi testo pannello", panelRemoveText: "Remuovi testo pannello", isSinglePage: "Visualizza tutti gli elementi su una pagina", tabs: { general: "Generale", fileOptions: "Opzioni", html: "Modifica Html", columns: "Colonne", rows: "Righe", choices: "Scelte", visibleIf: "Visibile se", rateValues: "Volori della classifica", choicesByUrl: "Opzioni dal Web", matrixChoices: "Opzioni predefinite", multipleTextItems: "Voci di testo", validators: "Validazioni", navigation: "Navigazione", question: "Domanda", completedHtml: "Html questionario completato", loadingHtml: "Html caricamento questionario", timer: "Timer/Quiz", triggers: "Triggers", templateTitle: "Template titolo" }, editProperty: "Modifca propietà '{0}'", items: "[ Elemento: {0} ]", enterNewValue: "Si prega di inserire il valore.", noquestions: "Non c'è alcun dubbio nel questionario.", createtrigger: "Si prega di creare un trigger", triggerOn: "Attivazione ", triggerMakePagesVisible: "Rendere visibili le pagine:", triggerMakeQuestionsVisible: "Rendere visibili le domande:", triggerCompleteText: "Completare il questionario, in caso di successo.", triggerNotSet: "Non impostato", triggerRunIf: "Esegui se", triggerSetToName: "Cambia il valore a: ", triggerSetValue: "a: ", triggerIsVariable: "Non posizionare la variabile del risultato del questionario" }, // strings for operators op: { empty: "è vuoto", notempty: "non è vuoto ", equal: "è uguale a", notequal: "non è uguale a", contains: "contiene", notcontains: "non contiene", greater: "maggiore", less: "minore", greaterorequal: "maggiore o uguale", lessorequal: "minore o uguale" }, // strings for embed window ew: { angular: "Versione per Angular", jquery: "Versione per jQuery", knockout: "Versione per Knockout", react: "Versione per React", vue: "Versione per Vue", bootstrap: "Per framework bootstrap", standard: "No bootstrap", showOnPage: "Visualizza in questa pagina", showInWindow: "Visualizza in una finestra", loadFromServer: "Carica JSON dal server", titleScript: "Scripts e stili", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Seleziona la pagina da testare:" }, validators: { answercountvalidator: "numero risposte", emailvalidator: "e-mail", numericvalidator: "numerico", regexvalidator: "regex", textvalidator: "testo" }, triggers: { completetrigger: "completa questionario", setvaluetrigger: "setta valore", visibletrigger: "cambia visibilità" }, // strings of properties p: { name: "nome", title: { name: "titolo", title: "Lascia vuoto se è lo stesso di 'Nome'" }, page_title: { name: "titolo", title: "Titolo della pagina" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["it"] = italianTranslation; /***/ }), /* 46 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var persianStrings = { //survey templates survey: { edit: "ویرایش", dropQuestion: "لطفا از جعبه ابزار سوالی در اینجا قرار دهید", copy: "کپی", addToToolbox: "افزودن به جعبه ابزار", deletePanel: "حذف پنل", deleteQuestion: "حذف سوال", convertTo: "تبدیل به" }, //questionTypes qt: { checkbox: "چند انتخابی", comment: "نظر", dropdown: "لیست انتخابی", file: "فایل", html: "Html", matrix: "ماتریس (تک انتخابی)", matrixdropdown: "ماتریس (چند انتخابی)", matrixdynamic: "ماتریس (سطرهای داینامیک)", multipletext: "متن چند خطی", panel: "پنل", paneldynamic: "پنل (پنل های داینامیک)", radiogroup: "تک انتخابی", rating: "رتبه بندی", text: "متن تک خطی", boolean: "صحیح و غلط", expression: "توصیفی" }, //Strings in Editor ed: { survey: "نظرسنجی", editSurvey: "ویرایش نظرسنجی", addNewPage: "درج صفحه جدید", deletePage: "حذف صفحه", editPage: "ویرایش صفحه", newPageName: "صفحه", newQuestionName: "سوال", newPanelName: "پنل", testSurvey: "پیش نمایش", testSurveyAgain: "پیش نمایش مجدد", testSurveyWidth: "عرض پرسشنامه: ", embedSurvey: "کد پرسشنامه", saveSurvey: "ذخیره نظرسنجی", designer: "طراح پرسشنامه", jsonEditor: "ویرایشگر JSON", undo: "بازگردانی", redo: "بازانجام", options: "انتخاب ها", generateValidJSON: "تولید کد معتبر JSON", generateReadableJSON: "تولید کد خوانا JSON", toolbox: "جعبه ابزار", delSelObject: "حذف مورد انتخابی", editSelObject: "ویرایش مورد انتخابی", correctJSON: "کد JSON را تصحیح کنید", surveyResults: "نتایج نظرسنجی: ", modified: "تغییر داده شده", saving: "در حال ذخیره سازی", saved: "ذخیره شد" }, //Property names in table headers pel: { isRequired: "اجباری؟" }, //Property Editors pe: { apply: "اعمال", ok: "تایید", cancel: "لغو", reset: "بازنشانی", close: "بستن", delete: "حذف", addNew: "افزودن", removeAll: "حذف همه", edit: "ویرایش", empty: "<خالی>", fastEntry: "تکمیل سریع", formEntry: "تکمیل فرم", testService: "بررسی سرویس", conditionHelp: "لطفا یک مقدار بولین توصیفی وارد کنید که صحیح یا غلط را برگرداند تا صفحه سوالات نمایش داده شود. برای مثال: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "لطفا یک عبارت توصیفی را وارد کنید. شما ممکن است از کروشه برای دسترسی به مقدار سوالات استفاده کنید. برای مثال: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", aceEditorHelp: "برای مشاهده نکات تکمیلی ctrl+space را بفشارید", aceEditorRowTitle: "سطر فعلی", aceEditorPanelTitle: "پنل فعلی", showMore: "برای اطلاعات بیشتر لطفا سند راهنما را مطالعه کنید", assistantTitle: "سوالات موجود:", propertyIsEmpty: "لطفا یک مقدار وارد کنید", value: "مقدار", text: "متن", columnEdit: "ویرایش ستون: {0}", itemEdit: "ویرایش آیتم: {0}", url: "URL", path: "Path", valueName: "نام مقدار", titleName: "نام عنوان", hasOther: "دارای آیتم دیگر", name: "نام", title: "عنوان", cellType: "نوع سلول", colCount: "تعداد ستون", choicesOrder: "ترتیب گزینه را انتخاب کنید", visible: "نمایش داده شود؟", isRequired: "ضروری است؟", startWithNewLine: "با سطر جدید شروع شود؟", rows: "تعداد سطر", placeHolder: "نگهدارنده متن", showPreview: "پیش نمایش تصویر نشان داده شود؟", storeDataAsText: "ذخیره کردن محتوای فایل در JSON به عنوان متن", maxSize: "حداکثر سایز به بایت", imageHeight: "ارتفاع تصویر", imageWidth: "عرض تصویر", rowCount: "تعداد سطر", addRowText: "متن دکمه درج سطر", removeRowText: "متن دکمه حذف سطر", minRateDescription: "توضیح حداقل امتیاز", maxRateDescription: "توضیح حداکثر امتیاز", inputType: "نوع ورودی", optionsCaption: "نوشته انتخاب ها", defaultValue: "مقدار پیش فرض", surveyEditorTitle: "ویرایش نظرسنجی", qEditorTitle: "ویرایش سوال: {0}", //survey showTitle: "نمایش/پنهان کردن عنوان", locale: "زبان پیش فرض", mode: "حالت (ویرایش/خواندن)", clearInvisibleValues: "پاکسازی مقادیر پنهان", cookieName: "نام کوکی (به منظور جلوگیری از اجرای دوباره نظرسنجی)", sendResultOnPageNext: "ارسال نتایج نظرسنجی در صفحه بعدی", storeOthersAsComment: "ذخیره مقدار 'سایر' در فیلد جداگانه", showPageTitles: "نمایش عنوان صفحات", showPageNumbers: "نمایش شماره صفحات", pagePrevText: "متن دکمه صفحه قبلی", pageNextText: "متن دکمه صفحه بعدی", completeText: "متن دکمه تکمیل نظرسنجی", startSurveyText: "متن دکمه شروع نظرسنجی", showNavigationButtons: "نمایش دکمه های ناوبری (ناوبری پیش فرض)", showPrevButton: "نمایش دکمه قبلی (کاربر ممکن است به صفحه قبل برگردد)", firstPageIsStarted: "صفحه اول در نظرسنجی نقطه آغازین آن است.", showCompletedPage: "نمایش صفحه اتمام نظرسنجی در پایان (completedHtml)", goNextPageAutomatic: "با پاسخگویی به تمام سوالات، به صورت اتوماتیک به صفحه بعد برود", showProgressBar: "نمایش نشانگر پیشرفت", questionTitleLocation: "محل عنوان سوال", requiredText: "سوالات نشان دار اجباری هستند", questionStartIndex: "نمایه شروع سوالات (۱،۲ یا a و b)", showQuestionNumbers: "نمایش شماره های سوالات", questionTitleTemplate: "قالب عنوان سوال، به صورت پیش فرض: '{no}. {require} {title}'", questionErrorLocation: "محل خطای سوال", focusFirstQuestionAutomatic: "تمرکز بر روی اولین سوال با تغییر صفحه", questionsOrder: "ترتیب المان ها در صفحه", maxTimeToFinish: "نهایت زمان برای اتمام نظرسنجی", maxTimeToFinishPage: "نهایت زمان برای اتمام این صفحه نظرسنجی", showTimerPanel: "نمایش پنل زمان سنج", showTimerPanelMode: "نمایش حالت پنل زمان سنج", renderMode: "حالت رندر", allowAddPanel: "اجازه افزودن پنل", allowRemovePanel: "اجازه حذف پنل", panelAddText: "متن افزودن پنل", panelRemoveText: "متن حذف پنل", isSinglePage: "نمایش تمام المان ها در یک صفحه", tabs: { general: "عمومی", fileOptions: "انتخاب ها", html: "ویرایشگر HTML", columns: "ستون ها", rows: "سطرها", choices: "انتخاب ها", visibleIf: "نمایش در صورت", rateValues: "مقادیر رتبه بندی", choicesByUrl: "انتخاب ها از وب", matrixChoices: "انتخاب های پیشفرض", multipleTextItems: "فیلدهای متنی", validators: "اعتبارسنجی ها", navigation: "ناوبری", question: "سوال", completedHtml: "HTML صفحه تکمیل نظرسنجی", loadingHtml: "HTML بارگزاری", timer: "زمان سنج/کوئیز", triggers: "اجرا کننده", templateTitle: "عنوان قالب" }, editProperty: "ویرایش خصوصیت '{0}'", items: "[ آیتم ها: {0} ]", enterNewValue: "لطفا یک مقدار وارد کنید", noquestions: "سوالی در پرسشنامه درج نشده", createtrigger: "اجرا کننده ای بسازید", triggerOn: "در ", triggerMakePagesVisible: "صفحات را قابل نمایش کن:", triggerMakeQuestionsVisible: "سوالات را قابل نمایش کن:", triggerCompleteText: "پرسشنامه را تکمیل کن اگر موفق بود.", triggerNotSet: "اجرا کننده تنظیم نشده.", triggerRunIf: "اجرا در صورت", triggerSetToName: "تعییر مقدار از: ", triggerSetValue: "به: ", triggerIsVariable: "عدم درج متغییر در نتایج پرسشنامه" }, //Property values pv: { true: "صحیح", false: "نادرست" }, //Operators op: { empty: "خالی باشد", notempty: "خالی نباشد", equal: "مساوی باشد", notequal: "مساوی نباشد", contains: "شامل", notcontains: "شامل نباشد", greater: "بزرگتر", less: "کوچکتر", greaterorequal: "بزرگتر یا مساوی", lessorequal: "کوچکتر یا مساوی" }, //Embed window ew: { angular: "استفاده از نسخه Angular", jquery: "استفاده از نسخه jQuery", knockout: "استفاده از نسخه ناک اوت", react: "استفاده از نسخه React", vue: "استفاده از نسخه Vue", bootstrap: "برای فریم ورک بوتسترپ", standard: "بدون بوتسترپ", showOnPage: "نمایش نظرسنجی در یک صفحه", showInWindow: "نمایش نظرسنجی در یک پنجره", loadFromServer: "بارگزاری JSON از سرور", titleScript: "اسکریپت و شیوه نمایش", titleHtml: "HTML", titleJavaScript: "جاوااسکریپت" }, //Test Survey ts: { selectPage: "صفحه ای را برای آزمایش انتخاب کنید:" }, validators: { answercountvalidator: "تعداد پاسخ", emailvalidator: "ایمیل", numericvalidator: "عدد", regexvalidator: "regex", textvalidator: "متن" }, triggers: { completetrigger: "تکمیل نظرسنجی", setvaluetrigger: "تنظیم مقدار", visibletrigger: "تغییر وضعیت دیده شدن" }, //Properties p: { name: "نام", title: { name: "عنوان", title: "اگر خالی باشد مانند نام درج می شود" }, survey_title: { name: "عنوان", title: "در تمام صفحات دیده می شود" }, page_title: { name: "عنوان", title: "عنوان صفحه" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["fa"] = persianStrings; /***/ }), /* 47 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var polishStrings = { //survey templates survey: { edit: "Edytuj", dropQuestion: "Przeciągnij pytanie.", copy: "Kopiuj", addToToolbox: "Dodaj do palety", deletePanel: "Usuń panel", deleteQuestion: "Usuń pytanie", convertTo: "Konwertuj na" }, //questionTypes qt: { checkbox: "Wielokrotny wybór", comment: "Komentarz", dropdown: "Lista wyboru", file: "Plik", html: "Html", matrix: "Macierz (jednokrotny wybór)", matrixdropdown: "Matrix (wielokrotny wybór)", matrixdynamic: "Matrix (dynamiczne wiersze)", multipletext: "Wiele linii tekstu", panel: "Panel", paneldynamic: "Panel (dynamiczne panele)", radiogroup: "Jednokrotny wybór", rating: "Ocena", text: "Pojedyncza odpowiedź", boolean: "Prawda/Fałsz", expression: "Wyrażenie" }, //Strings in Editor ed: { survey: "Ankieta", Survey: "Ankieta", editSurvey: "Edytuj ankietę", addNewPage: "Dodaj nową sekcję", deletePage: "Usuń sekcję", editPage: "Edytuj sekcję", newPageName: "sekcja", newQuestionName: "pytanie", newPanelName: "panel", testSurvey: "Testuj ankietę", testSurveyAgain: "Testuj ponownie", testSurveyWidth: "Szerokość ankiety: ", embedSurvey: "Embed Survey", saveSurvey: "Zapisz ankietę", designer: "Projektant ankiety", jsonEditor: "JSON Editor", undo: "Cofnij", redo: "Ponów", options: "Opcje", generateValidJSON: "Generate Valid JSON", generateReadableJSON: "Generate Readable JSON", toolbox: "Paleta", delSelObject: "Usuń wybrany element", correctJSON: "Please correct JSON.", surveyResults: "Wynik ankiety: ", modified: "Zmodyfikowana", saving: "Trwa zapis", saved: "Zapisano" }, //Property names in table headers pel: { isRequired: "Wymagane?" }, //Property Editors pe: { apply: "Zastosuj", ok: "OK", cancel: "Anuluj", reset: "Resetuj", close: "Zamknij", delete: "Usuń", addNew: "Dodaj nową", removeAll: "Usuń wszystkie", edit: "Edytuj", empty: "<pusty>", fastEntry: "Szybkie wprowadzanie", formEntry: "Formularz", testService: "Testuj usługę", conditionHelp: "Podaj wyrażenie, które zwróci wartość prawda/fałsz. Jeśli chcesz, aby sekcja lub pytanie pozostały widoczne - powinno zwrócić prawdę. Przykład: {pytanie1} = 'wartość1' or ({pytanie2} * {pytanie4} > 20 and {pytanie3} < 5)", expressionHelp: "Please enter an expression. You may use curly brackets to get access to the question values: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Press ctrl+space to get expression completion hint", aceEditorRowTitle: "Current row", aceEditorPanelTitle: "Current panel", showMore: "For more details please check the documentation", assistantTitle: "Available questions:", propertyIsEmpty: "Podaj wartość", value: "Wartość", text: "Etykieta", columnEdit: "Edit column: {0}", itemEdit: "Edit item: {0}", url: "URL", path: "Path", valueName: "Value name", titleName: "Title name", hasOther: "Czy możliwa własna odpowiedź", otherText: "Other item text", name: "Nazwa", title: "Etykieta", cellType: "Typ komórki", colCount: "Liczba kolumn", choicesOrder: "Kolejność odpowiedzi", visible: "Czy widoczne?", isRequired: "Czy wymagalne?", startWithNewLine: "Czy rozpoczyna się nową linią?", rows: "Liczba wierszy", placeHolder: "Input place holder", showPreview: "Is image preview shown?", storeDataAsText: "Store file content in JSON result as text", maxSize: "Maximum file size in bytes", imageHeight: "Image height", imageWidth: "Image width", rowCount: "Row count", addRowText: "Add row button text", removeRowText: "Remove row button text", minRateDescription: "Opis najniższej oceny", maxRateDescription: "Opis najwyższej oceny", inputType: "Input type", optionsCaption: "Options caption", defaultValue: "Default value", surveyEditorTitle: "Edytuj ankietę", qEditorTitle: "Edytuj: {0}", //survey showTitle: "Pokaż/ukryj tytuł", locale: "Domyślny język", mode: "Tryb (edycja/podgląd)", clearInvisibleValues: "Usuń niewidoczne odpowiedzi", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "Show page titles", showPageNumbers: "Show page numbers", pagePrevText: "Page previous button text", pageNextText: "Page next button text", completeText: "Complete button text", startSurveyText: "Start button text", showNavigationButtons: "Show navigation buttons (default navigation)", showPrevButton: "Show previous button (user may return on previous page)", firstPageIsStarted: "The first page in the survey is a started page.", showCompletedPage: "Show the completed page at the end (completedHtml)", goNextPageAutomatic: "On answering all questions, go to the next page automatically", showProgressBar: "Show progress bar", questionTitleLocation: "Question title location", requiredText: "The question required symbol(s)", questionStartIndex: "Question start index (1, 2 or 'A', 'a')", showQuestionNumbers: "Show question numbers", questionTitleTemplate: "Question title template, default is: '{no}. {require} {title}'", questionErrorLocation: "Question error location", focusFirstQuestionAutomatic: "Focus first question on changing the page", questionsOrder: "Elements order on the page", maxTimeToFinish: "Maximum time to finish the survey", maxTimeToFinishPage: "Maximum time to finish a page in the survey", showTimerPanel: "Show timer panel", showTimerPanelMode: "Show timer panel mode", renderMode: "Render mode", allowAddPanel: "Allow adding a panel", allowRemovePanel: "Allow removing the panel", panelAddText: "Adding panel text", panelRemoveText: "Removing panel text", isSinglePage: "Show all elements on one page", tabs: { general: "Ogólne", fileOptions: "Options", html: "Html Editor", columns: "Kolumny", rows: "Wiersze", choices: "Odpowiedzi", visibleIf: "Widoczne jeśli", enableIf: "Enable If", rateValues: "Wartość oceny", choicesByUrl: "Odpowiedzi z webserwisu", matrixChoices: "Default Choices", multipleTextItems: "Text Inputs", validators: "Validators", navigation: "Navigation", question: "Question", completedHtml: "Completed Html", loadingHtml: "Loading Html", timer: "Timer/Quiz", triggers: "Triggers", templateTitle: "Template title" }, editProperty: "Edit property '{0}'", items: "[ Items: {0} ]", enterNewValue: "Please, enter the value.", noquestions: "There is no any question in the survey.", createtrigger: "Please create a trigger", triggerOn: "On ", triggerMakePagesVisible: "Make pages visible:", triggerMakeQuestionsVisible: "Make elements visible:", triggerCompleteText: "Complete the survey if succeed.", triggerNotSet: "The trigger is not set", triggerRunIf: "Run if", triggerSetToName: "Change value of: ", triggerSetValue: "to: ", triggerIsVariable: "Do not put the variable into the survey result." }, //Property values pv: { true: "prawda", false: "fałsz" }, //Operators op: { empty: "is empty", notempty: "is not empty", equal: "equals", notequal: "not equals", contains: "contains", notcontains: "not contains", greater: "greater", less: "less", greaterorequal: "greater or equals", lessorequal: "Less or Equals" }, //Embed window ew: { angular: "Use Angular version", jquery: "Use jQuery version", knockout: "Use Knockout version", react: "Use React version", vue: "Use Vue version", bootstrap: "For bootstrap framework", standard: "No bootstrap", showOnPage: "Show survey on a page", showInWindow: "Show survey in a window", loadFromServer: "Load Survey JSON from server", titleScript: "Scripts and styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Wybierz stronę, aby ją przetestować:" }, validators: { answercountvalidator: "answer count", emailvalidator: "e-mail", numericvalidator: "numeric", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "complete survey", setvaluetrigger: "set value", visibletrigger: "change visibility" }, //Properties p: { name: "nazwa", title: { name: "tytuł", title: "Pozostaw pusty, jeśli ma być taki sam, jak 'Nazwa'" }, page_title: { name: "tytuł", title: "Tytuł sekcji" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["pl"] = polishStrings; /***/ }), /* 48 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var portugueseTranslation = { //survey templates survey: { dropQuestion: "Por favor arraste uma pergunta aqui.", copy: "Copiar", addToToolbox: "Adicionar à toolbox", deletePanel: "Remover Painel", deleteQuestion: "Remover Pergunta" }, //questionTypes qt: { checkbox: "Checkbox", comment: "Comentário", dropdown: "Dropdown", file: "Arquivo", html: "Html", matrix: "Matriz (opção única)", matrixdropdown: "Matriz (multiplas opções)", matrixdynamic: "Matriz (linhas dinâmicas)", multipletext: "Texto múltiplo", panel: "Painel", radiogroup: "Radiogroup", rating: "Rating", text: "Texto único" }, //Strings in Editor ed: { addNewPage: "Adicionar Nova Página", newPageName: "página", newQuestionName: "pergunta", newPanelName: "painel", testSurvey: "Testar pesquisa", testSurveyAgain: "Testar pesquisa novamente", testSurveyWidth: "Tamanho do pesquisa: ", embedSurvey: "Incorporar Pesquisa", saveSurvey: "Salvar Pesquisa", designer: "Designer de Pesquisa", jsonEditor: "Editor de JSON", undo: "Desfazer", redo: "Refazer", options: "Opções", generateValidJSON: "Gerar JSON válido", generateReadableJSON: "Gerar JSON legível", toolbox: "Toolbox", delSelObject: "Apagar objeto selecionado", correctJSON: "Por favor corrija o JSON.", surveyResults: "Resultado da pesquisa: " }, //Property names in table headers pel: { isRequired: "Obrigatório?" }, //Property Editors pe: { apply: "Aplicar", ok: "OK", cancel: "Cancelar", reset: "Limpar", close: "Fechar", delete: "Apagar", addNew: "Adicionar Novo", removeAll: "Remover Todos", edit: "Editar", empty: "<vazio>", fastEntry: "Entrada Rápida", formEntry: "Entrada com formulário", testService: "Testar o serviço", expressionHelp: "Por favor informe uma expressão boleana. Ela deve retornar verdadeiro para manter a pergunta/página visível. Por exemplo: {´pergunta1} = 'valor1' or ({pergunta2} = 3 and {pergunta3} < 5)", propertyIsEmpty: "Por favor informe um valor na propriedade", value: "Valor", text: "Texto", columnEdit: "Editar coluna: {0}", itemEdit: "Editar item: {0}", hasOther: "Tem outro item", name: "Nome", title: "Título", cellType: "Tipo de célula", colCount: "Contagem de células", choicesOrder: "Selecione a ordem das alternativas", visible: "É visível?", isRequired: "É obrigatório?", startWithNewLine: "Começa com uma nova linha?", rows: "Contagem de linhas", placeHolder: "Texto de referência", showPreview: "Mostra pré-visualização de imagem?", storeDataAsText: "Gravar conteúdo de arquivo no resultado JSON como texto", maxSize: "Tamanho máximo de arquivo em bytes", imageHeight: "Altura da imagem", imageWidth: "Largura da imagem", rowCount: "Contagem de linhas", addRowText: "Texto do botão para adicionar linhas", removeRowText: "Texto do botão para remover linhas", minRateDescription: "Descrição de qualificação mínima", maxRateDescription: "Descrição de qualificação máxima", inputType: "Tipo de entrada", optionsCaption: "Título de opção", qEditorTitle: "Editar pergunta: {0}", tabs: { general: "Geral", fileOptions: "Opções", html: "Editor Html", columns: "Colunas", rows: "Linhas", choices: "Opções", visibleIf: "Visível se", rateValues: "Valores de qualificação", choicesByUrl: "Opções com origem na Web", matrixChoices: "Opções padrão", multipleTextItems: "Entradas de texto", validators: "Validadores" }, editProperty: "Editar propriedade '{0}'", items: "[ Items: {0} ]", enterNewValue: "Por favor, informe o valor.", noquestions: "Não há nenhuma pergunta na pesquisa.", createtrigger: "Por favor, crie um gatilho", triggerOn: "Ligado ", triggerMakePagesVisible: "Tornar páginas visíveis:", triggerMakeQuestionsVisible: "Tornar perguntas visíves:", triggerCompleteText: "Completar a pesquisa se obtiver êxito.", triggerNotSet: "O gatilho não está definido", triggerRunIf: "Executar se", triggerSetToName: "Mudar o valor de: ", triggerSetValue: "para: ", triggerIsVariable: "Não colocar a variável no resultado da pesquisa." }, //Operators op: { empty: "está vazio", notempty: "não está vazio", equal: "é igual", notequal: "não é igual", contains: "contém", notcontains: "não contém", greater: "maior", less: "menor", greaterorequal: "maior ou igual", lessorequal: "menor ou igual" }, //Embed window ew: { angular: "Usar versão Angular", jquery: "Usar versão jQuery", knockout: "Usar versão Knockout", react: "Usar versão React", vue: "Usar versão Vue", bootstrap: "Para framework bootstrap", standard: "Sem bootstrap", showOnPage: "Mostrar pesquisa em uma página", showInWindow: "Mostrar pesquisa em uma janela", loadFromServer: "Carregar JSON da pesquisa de um servidor", titleScript: "Scripts e estilos", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Properties p: { name: "nome", title: { name: "título", title: "Deixar vazio se for o mesmo que 'Nome'" }, survey_title: { name: "título", title: "Será mostrado em cada página." }, page_title: { name: "título", title: "Título de página" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["pt"] = portugueseTranslation; /***/ }), /* 49 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var simplifiedChineseTranslation = { // strings for survey templates survey: { edit: "编辑", dropQuestion: "请将问题放置于此", copy: "复制", addToToolbox: "添加到工具箱", deletePanel: "删除面板", deleteQuestion: "删除题目", convertTo: "转变为" }, // strings for question types qt: { checkbox: "多项选择", comment: "多行文本框", dropdown: "下拉框", file: "文件上传", html: "Html 代码", matrix: "矩阵 (单选题)", matrixdropdown: "矩阵 (下拉框)", matrixdynamic: "矩阵 (动态问题)", multipletext: "文本框组", panel: "面板", paneldynamic: "面板(动态)", radiogroup: "单项选择", rating: "评分", text: "文本框", boolean: "布尔选择", expression: "表达式" }, // strings for editor ed: { survey: "调查问卷", editSurvey: "修改", addNewPage: "添加新页面", deletePage: "删除页面", editPage: "编辑页面", newPageName: "页面", newQuestionName: "问题", newPanelName: "面板", testSurvey: "测试问卷", testSurveyAgain: "再次测试问卷", testSurveyWidth: "问卷宽度: ", embedSurvey: "将问卷嵌入网页", saveSurvey: "保存问卷", designer: "问卷设计器", jsonEditor: "JSON 编辑器", undo: "撤销", redo: "恢复", options: "选项", generateValidJSON: "生成 JSON 数据", generateReadableJSON: "生成易读的 JSON 数据", toolbox: "工具箱", delSelObject: "删除所选对象", editSelObject: "编辑所选对象", correctJSON: "请修正 JSON 数据", surveyResults: "问卷结果: ", modified: "已修改", saving: "保存中...", saved: "已保存" }, //Property names in table headers pel: { isRequired: "是否为必填项?" }, // strings for property editors pe: { apply: "应用", ok: "确定", cancel: "取消", reset: "重置", close: "关闭", delete: "删除", addNew: "新建", removeAll: "全部删除", edit: "编辑器", empty: "<空>", fastEntry: "快速输入", formEntry: "表单输入", testService: "测试服务", showMore: "更多细节请查看文档", conditionHelp: "请输入一个布尔表达式。当布尔值为真,问题/页面可见。例如:{question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "请输入一项条件判断。当条件判断为真时问题/页面将可见。例如: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", propertyIsEmpty: "请为该属性设定一个值", value: "值", text: "显示文本", columnEdit: "编辑列: {0}", itemEdit: "编辑选项: {0}", hasOther: "可添加其他答案?", otherText: "其他答案文本", url: "URL", path: "Path", valueName: "Value name", titleName: "Title name", name: "题目名", title: "题目文本", cellType: "单元格类型", colCount: "列数", choicesOrder: "设置选项顺序", visible: "是否可见?", isRequired: "是否为必填项?", startWithNewLine: "问题是否新起一行?", rows: "文本框行数", placeHolder: "占位文本", showPreview: "是否显示图像预览?", storeDataAsText: "以 JSON 文本方式存储文件", maxSize: "文件最大尺寸 (Bytes)", imageHeight: "图片高度", imageWidth: "图片宽度", rowCount: "默认行数", addRowText: "添加条目按钮文本", removeRowText: "删除条目按钮文本", minRateDescription: "最小值提示", maxRateDescription: "最大值提示", inputType: "文本框类型", optionsCaption: "下拉框提示语", qEditorTitle: "编辑问题: {0}", //survey showTitle: "显示/隐藏 标题", locale: "默认语言", mode: "模式 (编辑/只读)", clearInvisibleValues: "清除隐藏值", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "显示页面标题", showPageNumbers: "显示页数", pagePrevText: "前一页按钮文本", pageNextText: "后一页按钮文本", completeText: "完成按钮文本", startSurveyText: "开始按钮文本", showNavigationButtons: "显示导航按钮 (默认导航)", showPrevButton: "显示前一页按钮 (用户可返回至前一页面)", firstPageIsStarted: "调查的第一页面为起始页.", showCompletedPage: "结尾展示完成后的页面 (completedHtml)", goNextPageAutomatic: "回答本页所有问题后,自动跳转到下一页", showProgressBar: "显示进度条", questionTitleLocation: "问题的标题位置", requiredText: "The question required symbol(s)", questionStartIndex: "问题起始标志 (1, 2 or 'A', 'a')", showQuestionNumbers: "显示问题编号", questionTitleTemplate: "问题标题模板, 默认为: '{no}. {require} {title}'", questionErrorLocation: "问题错误定位", focusFirstQuestionAutomatic: "改变页面时聚焦在第一个问题", questionsOrder: "Elements order on the page", maxTimeToFinish: "完成调查的最长时间", maxTimeToFinishPage: "完成调查中页面的最长时间", showTimerPanel: "显示计时器面板", showTimerPanelMode: "显示计时器面板模式", renderMode: "渲染模式", allowAddPanel: "允许添加面板", allowRemovePanel: "允许删除面板", panelAddText: "添加面板文本", panelRemoveText: "删除面板文本", isSinglePage: "在一个页面上展示所有元素", tabs: { general: "通用项", navigation: "导航", question: "问题", completedHtml: "完成后的Html", loadingHtml: "加载中的Html", timer: "问卷计时器", trigger: "触发器", fileOptions: "选项", html: "HTML 编辑器", columns: "设置列", rows: "设置行", choices: "设置选项", visibleIf: "设置可见条件", enableIf: "Enable If", rateValues: "设置评分值", choicesByUrl: "通过 URL 导入选项", matrixChoices: "默认选项", multipleTextItems: "文本输入", validators: "校验规则" }, editProperty: "编辑属性: '{0}'", items: "[ 项目数量: {0} ]", enterNewValue: "请设定值", noquestions: "问卷中还没有创建任何问题", createtrigger: "请创建触发器", triggerOn: "当 ", triggerMakePagesVisible: "使页面可见:", triggerMakeQuestionsVisible: "使问题可见:", triggerCompleteText: "如果满足条件,则完成问卷", triggerNotSet: "触发器尚未设置", triggerRunIf: "满足下列条件时执行", triggerSetToName: "修改下列问题值: ", triggerSetValue: "修改为: ", triggerIsVariable: "在问卷提交结果中不要包含该变量" }, // strings for operators op: { empty: "为空", notempty: "不为空", equal: "等于", notequal: "不等于", contains: "包含", notcontains: "不包含", greater: "大于", less: "小于", greaterorequal: "大于等于", lessorequal: "小于等于" }, // strings for embed window ew: { angular: "使用 Angular 时", jquery: "使用 JQuery 时", knockout: "使用 Knockout 时", react: "使用 React 时", vue: "使用 Vue 时", bootstrap: "使用 Bootstrap 时", standard: "不使用 Bootstrap 时", showOnPage: "嵌入页面显示", showInWindow: "使用单独的问卷窗口", loadFromServer: "从服务器加载问卷 JSON 数据", titleScript: "脚本和样式", titleHtml: "HTML", titleJavaScript: "JavaScript" }, validators: { answercountvalidator: "数量检查", emailvalidator: "Email", numericvalidator: "数字", regexvalidator: "正则表达式", textvalidator: "文本" }, triggers: { completetrigger: "完成问卷", setvaluetrigger: "设置问题值", visibletrigger: "修改可见性" }, // strings of properties p: { commentText: "备注文本", choices: "选项", choicesByUrl: "Url选项", choicesOrder: "选项排序", colCount: "列数", correctAnswer: "正确答案", defaultVaule: "默认选项", description: "说明", enableIf: "允许判断", hasComment: "hasComment", hasOther: "允许其他答案", otherText: "其他答案文本", page: "所在页面", readOnly: "只读", indent: "缩进", isRequired: "必选", requiredErrorText: "requiredErrorText", otherErrorText: "requiredErrorText", startWithNewLine: "允许问题在新行", //survey showTitle: "显示/隐藏 标题", locale: "默认语言", mode: "模式 (编辑/只读)", clearInvisibleValues: "清除隐藏值", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "显示页面标题", showPageNumbers: "显示页数", pagePrevText: "前一页按钮文本", pageNextText: "后一页按钮文本", completeText: "完成按钮文本", startSurveyText: "开始按钮文本", showNavigationButtons: "显示导航按钮 (默认导航)", showPrevButton: "显示前一页按钮 (用户可返回至前一页面)", firstPageIsStarted: "调查的第一页面为起始页.", showCompletedPage: "结尾展示完成后的页面 (completedHtml)", goNextPageAutomatic: "回答本页所有问题后,自动跳转到下一页", showProgressBar: "显示进度条", questionTitleLocation: "问题的标题位置", requiredText: "The question required symbol(s)", questionStartIndex: "问题起始标志 (1, 2 or 'A', 'a')", showQuestionNumbers: "显示问题编号", questionTitleTemplate: "问题标题模板, 默认为: '{no}. {require} {title}'", questionErrorLocation: "问题错误定位", focusFirstQuestionAutomatic: "改变页面时聚焦在第一个问题", questionsOrder: "页面中元素的顺序", maxTimeToFinish: "完成调查的最长时间", maxTimeToFinishPage: "完成调查中页面的最长时间", showTimerPanel: "显示计时器面板", showTimerPanelMode: "显示计时器面板模式", renderMode: "渲染模式", allowAddPanel: "允许添加面板", allowRemovePanel: "允许删除面板", panelAddText: "添加面板文本", panelRemoveText: "删除面板文本", isSinglePage: "在一个页面上展示所有元素", name: "名字", title: { name: "标题", title: "如果与名字相同,请设置为空值" }, survey_title: { name: "标题", title: "问卷标题在每页上都会显示" }, page_title: { name: "标题", title: "页面标题" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["zh-cn"] = simplifiedChineseTranslation; /***/ }), /* 50 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var spanishTranslation = { // strings for survey templates survey: { edit: "Editar", dropQuestion: "Por favor coloque una pregunta aquí de la caja de herramientas en la izquierda.", copy: "Copiar", addToToolbox: "Añadir a la caja de herramientas", deletePanel: "Eliminar Panel", deleteQuestion: "Borrar Pregunta", convertTo: "Convertir a" }, //questionTypes qt: { checkbox: "Checkbox", comment: "Comentario", dropdown: "Dropdown", file: "Archivo", html: "Html", matrix: "Matriz (elección única)", matrixdropdown: "Matriz (elección múltiple)", matrixdynamic: "Matriz (filas dinámicas)", multipletext: "Texto múltiple", panel: "Panel", paneldynamic: "Panel (paneles dinámicos)", radiogroup: "Grupo de radio", rating: "Rating", text: "Entrada sencilla", boolean: "Booleano", expression: "Expresión" }, //Strings in Editor ed: { survey: "Encuesta", editSurvey: "Editar Encuesta", addNewPage: "Añadir Nueva Página", deletePage: "Borrar Página", editPage: "Editar Página", newPageName: "página", newQuestionName: "pregunta", newPanelName: "panel", testSurvey: "Probar Encuesta", testSurveyAgain: "Probar Encuesta Otra Vez", testSurveyWidth: "Ancho de Encuesta: ", embedSurvey: "Empotrar Encuesta", saveSurvey: "Guardar Encuesta", designer: "Diseñador de Encuesta", jsonEditor: "Editor de JSON", undo: "Deshacer", redo: "Rehacer", options: "Opciones", generateValidJSON: "Generar JSON válido", generateReadableJSON: "Generar JSON legible", toolbox: "Caja de herramientas", delSelObject: "Borrar objeto seleccionado", editSelObject: "Editar objeto seleccionado", correctJSON: "Por favor corrija JSON.", surveyResults: "Resultado de Encuesta: ", modified: "Modificado", saving: "Salvando", saved: "Salvado" }, //Property names in table headers pel: { isRequired: "Requerido?" }, //Property Editors pe: { apply: "Aplicar", ok: "OK", cancel: "Cancelar", reset: "Restaurar", close: "Cerrar", delete: "Borrar", addNew: "Añadir nuevo", addItem: "Click para añadir articulo...", removeAll: "Quitar todos", edit: "Editar", move: "Mover", empty: "<vacío>", fastEntry: "Entrada rápida", formEntry: "Entrar en forma", testService: "Pruebe el servicio", conditionSelectQuestion: "Seleccionar pregunta...", conditionButtonAdd: "Añadir", conditionButtonReplace: "Reemplazar", conditionHelp: "Por favor proporcione una expresión booleana. Debería regresar verdadero para mantener la pregunta/página visible. Por ejemplo: {pregunta1} = 'valor1' or ({pregunta2} * {pregunta4} > 20 and {pregunta3} < 5)", expressionHelp: "Por favor proporcione una expresión. Puede hacer uso de llaves para tener acceso a los valores de la pregunta: '{pregunta1} + {pregunta2}', '({precio}*{cantidad}) * (100 - {descuento})'", aceEditorHelp: "Presione ctrl+espacio para obtener un indicio de completado de expresión", aceEditorRowTitle: "Fila actual", aceEditorPanelTitle: "Panel actual", showMore: "Por favor use la documentación para más detalles", assistantTitle: "Preguntas disponibles:", propertyIsEmpty: "Por favor proporcione un valor", value: "Valor", text: "Texto", columnEdit: "Editar columna: {0}", itemEdit: "Editar artículo: {0}", url: "URL", path: "trayecto", valueName: "Nombre del valor", titleName: "Título", hasOther: "Tiene otro artículo", otherText: "Texto de otro artículo", name: "Nombre", title: "Título", cellType: "Tipo de celda", colCount: "Conteo de columnas", choicesOrder: "Orden de selección de elecciones", visible: "Es visible?", isRequired: "Es requerido?", startWithNewLine: "Es inicio con nueva línea?", rows: "Conteo de filas", placeHolder: "Marcador de entrada", showPreview: "Se muestra avance de imagen?", storeDataAsText: "Guardar contenido de archivo en resultado JSON como texto", maxSize: "Tamaño máximo de archivo en bytes", imageHeight: "Altura de imagen", imageWidth: "Ancho de imagen", rowCount: "Conteo de filas", addRowText: "Añadir texto de boton de fila", removeRowText: "Quitar texto de boton de fila", minRateDescription: "Descripción de la tasa mínima", maxRateDescription: "Descripción de la tarifa máxima", inputType: "Tipo de entrada", optionsCaption: "Leyenda de opciones", defaultValue: "Valor de defecto", surveyEditorTitle: "Editar ajustes de encuesta", qEditorTitle: "Editar: {0}", //survey showTitle: "Mostrar/esconder título", locale: "Lenguaje de defecto", mode: "Modo (editar/solo lectura)", clearInvisibleValues: "Borrar valores invisibles", cookieName: "Nombre de Cookie (para deshabilitar corra encuesta dos veces localmente)", sendResultOnPageNext: "Mandar resultados de encuesta en página siguiente", storeOthersAsComment: "Guardar valor 'otros' en campo separado", showPageTitles: "Mostrar títulos de página", showPageNumbers: "Mostrar números de página", pagePrevText: "Texto de botón de página previa", pageNextText: "Texto de botón de página próxima", completeText: "Texto de botón de completado", startSurveyText: "Texto de botón de inicio", showNavigationButtons: "Mostrar botones de navigación (navegación de defecto)", showPrevButton: "Mostrar botón previo (el usuario puede regresar en página previa)", firstPageIsStarted: "La primera página en la encuesta es una página iniciada.", showCompletedPage: "Mostrar la página completada al final (completedHtml)", goNextPageAutomatic: "Al contestar todas las preguntas, ir a la próxima página automáticamente", showProgressBar: "Mostrar barra de progreso", questionTitleLocation: "Localización de título de pregunta", requiredText: "La pregunta requiere de símbolo(s)", questionStartIndex: "Índice de inicio de pregunta (1, 2 o 'A', 'a')", showQuestionNumbers: "Mostrar números de preguntas", questionTitleTemplate: "Plantilla de título de pregunta, defecto es: '{no}. {require} {title}'", questionErrorLocation: "Localización de error de pregunta", focusFirstQuestionAutomatic: "Foco en primera pregunta al cambiar la página", questionsOrder: "Órden de elementos en la página", maxTimeToFinish: "Tiempo máximo para finalizar la encuesta", maxTimeToFinishPage: "Tiempo máximo para finalizar una página en la encuesta", showTimerPanel: "Mostrar panel de temporizador", showTimerPanelMode: "Modo de muestra de panel de temporizador", renderMode: "Modo de interpretador", allowAddPanel: "Permitir adición de un panel", allowRemovePanel: "Permitir remoción del panel", panelAddText: "Añadiendo texto de panel", panelRemoveText: "Quitando texto de panel", isSinglePage: "Mostrar todos los elementos en una página", tabs: { general: "General", fileOptions: "Opciones", html: "Editor Html", columns: "Columnas", rows: "Filas", choices: "Opciones", visibleIf: "Visible Si", enableIf: "Habilitar Si", rateValues: "Valores de tasa", choicesByUrl: "Opciones de la Web", matrixChoices: "Opciones de defecto", multipleTextItems: "Entradas de texto", validators: "Validadores", navigation: "Navegación", question: "Pregunta", completedHtml: "Html Completado", loadingHtml: "Cargando Html", timer: "Temporizador/Quiz", triggers: "Disparadores", templateTitle: "Título de plantilla" }, editProperty: "Editar propiedad '{0}'", items: "[ Items: {0} ]", enterNewValue: "Por favor, proporcione el valor.", noquestions: "No hay ni una pregunta en la encuesta.", createtrigger: "Por favor cree un disparador", triggerOn: "En ", triggerMakePagesVisible: "Hacer páginas visibles:", triggerMakeQuestionsVisible: "Hacer elementos visibles:", triggerCompleteText: "Complete la encuesta en caso de éxito.", triggerNotSet: "El disparador no está configurado", triggerRunIf: "Correr si", triggerSetToName: "Cambiar valor de: ", triggerSetValue: "a: ", triggerIsVariable: "No poner la variable en el resultado de la encuesta." }, //Property values pv: { true: "verdadero", false: "falso" }, //Operators op: { empty: "es vacío", notempty: "no es vacío", equal: "igual a", notequal: "no igual a", contains: "contiene", notcontains: "no contiene", greater: "mayor", less: "menor", greaterorequal: "mayor o igual a", lessorequal: "menor or igual a" }, //Embed window ew: { angular: "Use versión Angular", jquery: "Use versión jQuery", knockout: "Use versión Knockout", react: "Use versión React", vue: "Use versión Vue", bootstrap: "Para entorno bootstrap", standard: "No bootstrap", showOnPage: "Mostrar encuesta en una página", showInWindow: "Mostrar encuesta en una ventana", loadFromServer: "Cargar JSON de encuesta del servidor", titleScript: "Scripts y estilos", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Seleccione la página para probarla:" }, validators: { answercountvalidator: "cuenta de respuestas", emailvalidator: "e-mail", numericvalidator: "numerico", regexvalidator: "regex", textvalidator: "texto" }, triggers: { completetrigger: "encuesta completa", setvaluetrigger: "valor ajustado", visibletrigger: "cambio de visibilidad" }, //Properties p: { name: "nombre", title: { name: "título", title: "Dejarlo vacío, si es igual que 'Nombre'" }, page_title: { name: "título", title: "Título de página" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["es"] = spanishTranslation; /***/ }), /* 51 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* unused harmony export SurveyDescription */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveysManager; }); var ServiceAPI = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](ServiceAPI, _super); function ServiceAPI(baseUrl, accessKey) { var _this = _super.call(this) || this; _this.baseUrl = baseUrl; _this.accessKey = accessKey; return _this; } ServiceAPI.prototype.getActiveSurveys = function (onLoad) { var xhr = new XMLHttpRequest(); xhr.open("GET", this.baseUrl + "/getActive?accessKey=" + this.accessKey); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; onLoad(xhr.status == 200, result, xhr.response); }; xhr.send(); }; ServiceAPI.prototype.createSurvey = function (name, onCreate) { var xhr = new XMLHttpRequest(); xhr.open("GET", this.baseUrl + "/create?accessKey=" + this.accessKey + "&name=" + name); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; onCreate(xhr.status == 200, result, xhr.response); }; xhr.send(); }; ServiceAPI.prototype.saveSurvey = function (id, json, onSave) { var xhr = new XMLHttpRequest(); xhr.open("POST", this.baseUrl + "/changeJson?accessKey=" + this.accessKey); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; !!onSave && onSave(xhr.status == 200, result, xhr.response); }; xhr.send(JSON.stringify({ Id: id, Json: json, Text: json })); }; ServiceAPI.prototype.updateSurveyName = function (id, name, onUpdate) { var xhr = new XMLHttpRequest(); xhr.open("GET", this.baseUrl + "/changeName/" + id + "?accessKey=" + this.accessKey + "&name=" + name); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; !!onUpdate && onUpdate(xhr.status == 200, result, xhr.response); }; xhr.send(); }; return ServiceAPI; }(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["dxSurveyService"])); var SurveyDescription = (function () { function SurveyDescription(name, createdAt, id, resultId, postId) { if (name === void 0) { name = ko.observable(""); } if (createdAt === void 0) { createdAt = new Date(Date.now()).toDateString(); } if (id === void 0) { id = ""; } if (resultId === void 0) { resultId = ""; } if (postId === void 0) { postId = ""; } this.name = name; this.createdAt = createdAt; this.id = id; this.resultId = resultId; this.postId = postId; } return SurveyDescription; }()); var SurveysManager = (function () { function SurveysManager(baseUrl, accessKey, editor) { var _this = this; this.baseUrl = baseUrl; this.accessKey = accessKey; this.editor = editor; this.isEditMode = ko.observable(false); this.surveyId = ko.observable(); this.surveys = ko.observableArray(); this.currentSurvey = ko.observable(); this.currentSurveyName = ko.observable(""); this.isLoading = ko.observable(false); this.nameEditorKeypress = function (model, event) { if (event.keyCode === 13) { _this.edit(model, event); } else if (event.keyCode === 27) { _this.isEditMode(false); } }; var hash = window.location.hash; if (hash.indexOf("#") === 0) { this.surveyId(hash.slice(1)); } this.api = new ServiceAPI(baseUrl + SurveysManager.serviceUrlPath, accessKey); editor.isAutoSave = true; editor.showState = true; editor.saveSurveyFunc = function (saveNo, callback) { if (!editor.surveyId && !_this.surveyId()) { _this.addHandler(function (success) { return callback(saveNo, success); }); } if (!!editor.surveyId || !!_this.surveyId()) { _this.api.saveSurvey(editor.surveyId || _this.surveyId(), editor.text, function (success) { return callback(saveNo, success); }); } }; this.surveys(this.getSurveys()); if (!this.surveyId()) { this.currentSurvey(this.surveys()[0]); } else { var survey = this.surveys().filter(function (s) { return s.id === _this.surveyId(); })[0]; if (!!survey) { this.currentSurvey(survey); this.surveyId(undefined); } else { editor.loadSurvey(this.surveyId()); } } var onCurrentSurveyChanged = function (survey) { if (!!survey) { _this.surveyId(undefined); window.location.hash = "#" + survey.id; if (editor.surveyId === survey.id) return; editor.loadSurvey(survey.id); editor.surveyId = survey.id; editor.surveyPostId = survey.postId; } else { if (!_this.surveyId()) { editor.surveyId = ""; editor.surveyPostId = ""; window.location.hash = ""; editor.text = ""; } } }; this.currentSurvey.subscribe(onCurrentSurveyChanged); onCurrentSurveyChanged(this.currentSurvey()); var currentSurveyCanBeAttached = ko.observable(false); ko.computed(function () { var survey = _this.currentSurvey(); currentSurveyCanBeAttached(false); if (!!survey) { _this.api.updateSurveyName(survey.id, survey.name.peek(), function (success) { currentSurveyCanBeAttached(success); }); } }); this.toolbarItem = { id: "svd-attach-survey", template: "attach-survey", visible: currentSurveyCanBeAttached, action: ko.computed(function () { return "https://dxsurvey.com/Home/AttachSurvey/" + (_this.currentSurvey() && _this.currentSurvey().id); }), css: "link-to-attach", innerCss: "icon-cloud", title: "Attach survey to your SurveyJS service account..." }; } SurveysManager.prototype.getSurveys = function () { return JSON.parse(window.localStorage.getItem(SurveysManager.StorageKey) || "[]").map(function (item) { return new SurveyDescription(ko.observable(item.name), item.createdAt, item.id, item.resultId, item.postId); }); }; SurveysManager.prototype.setSurveys = function (surveys) { window.localStorage.setItem(SurveysManager.StorageKey, ko.toJSON(surveys)); }; SurveysManager.prototype.edit = function (model, event) { var survey = this.currentSurvey(); if (!!survey) { if (this.isEditMode()) { survey.name(this.currentSurveyName()); this.setSurveys(this.surveys()); this.api.updateSurveyName(survey.id, survey.name()); this.isEditMode(false); } else { this.currentSurveyName(survey.name()); this.isEditMode(true); $(event.target) .parents(".svd-manage") .find("input") .focus(); } } }; SurveysManager.prototype.addHandler = function (onAdd) { var _this = this; this.isLoading(true); this.api.createSurvey("NewSurvey", function (success, result, response) { var newSurveyDescription = new SurveyDescription(ko.observable(result.Name), result.CreatedAt, result.Id, result.ResultId, result.PostId); _this.surveys.push(newSurveyDescription); _this.setSurveys(_this.surveys()); _this.editor.surveyId = result.Id; _this.editor.surveyPostId = result.PostId; _this.api.saveSurvey(result.Id, _this.editor.text); _this.currentSurvey(newSurveyDescription); _this.isLoading(false); onAdd && onAdd(success, result, response); }); }; SurveysManager.prototype.add = function () { this.addHandler(); }; SurveysManager.prototype.remove = function () { if (confirm("Do you really want to remove current survey?")) { this.surveys.remove(this.currentSurvey()); this.setSurveys(this.surveys()); this.currentSurvey(this.surveys()[0]); } }; Object.defineProperty(SurveysManager.prototype, "cssEdit", { get: function () { return this.isEditMode() ? "icon-saved" : "icon-edit"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveysManager.prototype, "cssAdd", { get: function () { return !this.surveyId() ? "icon-new" : "icon-fork"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveysManager.prototype, "titleEdit", { get: function () { return this.isEditMode() ? "Save survey name" : "Edit survey name"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveysManager.prototype, "titleAdd", { get: function () { return !this.surveyId() ? "Add new survey" : "Fork this survey"; }, enumerable: true, configurable: true }); return SurveysManager; }()); SurveysManager.serviceUrlPath = "/api/MySurveys"; SurveysManager.StorageKey = "mySurveys"; /***/ }), /* 52 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__vendor_knockout_sortable_js__ = __webpack_require__(112); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__vendor_knockout_sortable_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__vendor_knockout_sortable_js__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PagesEditor; }); var PagesEditor = (function () { function PagesEditor(editor, element) { var _this = this; this.editor = editor; this.element = element; this.isNeedAutoScroll = true; this._selectedPage = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.pageSelection = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"]({ read: function () { return _this._selectedPage(); }, write: function (newVal) { if (!!newVal && typeof newVal.getType === "function") { _this.selectedPage = newVal; } else { if (_this.editor.pages().length > 0) { _this.addPage(); } } } }); this.onPageClick = function (model, event) { _this.isNeedAutoScroll = false; _this.editor.selectPage(model); event.stopPropagation(); _this.updateMenuPosition(); }; this.getPageClass = function (page) { var result = page === _this.selectedPage ? "svd_selected_page svd-light-bg-color" : ""; if (_this.editor.pages().indexOf(page) !== _this.editor.pages().length - 1) { result += " svd-border-right-none"; } return result; }; this.getPageMenuIconClass = function (page) { return page === _this.selectedPage && _this.isActive() ? "icon-gearactive" : "icon-gear"; }; this.showActions = function (page) { return page === _this.selectedPage && _this.isActive(); }; this.pagesSelection = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return _this.editor .pages() .concat([{ name: _this.getLocString("ed.addNewPage") }]); }); this._selectedPage(this.editor.pages()[0]); this.editor.koSelectedObject.subscribe(function (newVal) { if (!_this.isActive()) return; _this._selectedPage(newVal.value); if (_this.isNeedAutoScroll) { _this.scrollToSelectedPage(); } else { _this.isNeedAutoScroll = true; } }); } PagesEditor.prototype.addPage = function () { this.editor.addPage(); }; PagesEditor.prototype.copyPage = function (page) { this.editor.copyPage(page); }; PagesEditor.prototype.deletePage = function () { this.editor.deletePage(); }; PagesEditor.prototype.showPageSettings = function (page) { this.editor.showQuestionEditor(page); }; Object.defineProperty(PagesEditor.prototype, "sortableOptions", { get: function () { var _this = this; return { onEnd: function (evt) { _this.isNeedAutoScroll = false; _this.editor.movePage(evt.oldIndex, evt.newIndex); }, handle: ".svd-page-name", animation: 150 }; }, enumerable: true, configurable: true }); Object.defineProperty(PagesEditor.prototype, "selectedPage", { get: function () { return this._selectedPage(); }, set: function (newPage) { this.editor.selectPage(newPage); }, enumerable: true, configurable: true }); PagesEditor.prototype.isLastPage = function () { return this.editor.pages().length === 1; }; PagesEditor.prototype.moveLeft = function (model, event) { var pagesElement = this.element.querySelector(".svd-pages"); pagesElement.scrollLeft -= 50; this.updateMenuPosition(); }; PagesEditor.prototype.moveRight = function (model, event) { var pagesElement = this.element.querySelector(".svd-pages"); pagesElement.scrollLeft += 50; this.updateMenuPosition(); }; PagesEditor.prototype.scrollToSelectedPage = function () { var pagesElement = this.element.querySelector(".svd-pages"); if (!pagesElement) return; var index = this.editor.pages().indexOf(this.selectedPage); var pageElement = pagesElement.children[index]; if (!pageElement) return; pagesElement.scrollLeft = pageElement.offsetLeft - pagesElement.offsetLeft - pagesElement.offsetWidth / 2; this.updateMenuPosition(); }; // onKeyDown(el: any, e: KeyboardEvent) { // if (this.koPages().length <= 1) return; // var pages = this.koPages(); // var pageIndex = -1; // for (var i = 0; i < pages.length; i++) { // if (pages[i].page && pages[i].koSelected()) { // pageIndex = i; // } // } // if (pageIndex < 0) return; // if (e.keyCode == 46 && this.onDeletePageCallback) // this.onDeletePageCallback(el.page); // if ((e.keyCode == 37 || e.keyCode == 39) && this.onSelectPageCallback) { // pageIndex += e.keyCode == 37 ? -1 : 1; // if (pageIndex < 0) pageIndex = pages.length - 1; // if (pageIndex >= pages.length) pageIndex = 0; // var page = pages[pageIndex].page; // this.onSelectPageCallback(page); // this.setSelectedPage(page); // } // } PagesEditor.prototype.onWheel = function (model, event) { var pagesElement = model.element.querySelector(".svd-pages"); event = event || window.event; if (!!event.originalEvent) { event = event.originalEvent; } var delta = event.deltaY || event.detail || event.wheelDelta; pagesElement.scrollLeft -= delta; event.preventDefault ? event.preventDefault() : (event.returnValue = false); this.updateMenuPosition(); }; PagesEditor.prototype.updateMenuPosition = function () { var pagesElement = this.element.querySelector(".svd-pages"); var menuElements = pagesElement.getElementsByClassName("svd-page-actions"); for (var i = 0; i < menuElements.length; i++) { menuElements[i].style.left = menuElements[i].parentElement.offsetLeft - pagesElement.scrollLeft + "px"; } }; PagesEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(str); }; PagesEditor.prototype.isActive = function () { var selectedObject = this.editor.koSelectedObject(); if (!selectedObject) return; return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(selectedObject.value) === __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Page; }; return PagesEditor; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("pages-editor", { viewModel: { createViewModel: function (params, componentInfo) { return new PagesEditor(params.editor, componentInfo.element); } }, template: { element: "svd-page-selector-template" } }); /***/ }), /* 53 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyCellsEditor; }); var SurveyPropertyCellsEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyCellsEditor, _super); function SurveyPropertyCellsEditor(property) { var _this = _super.call(this, property) || this; _this.koRows = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koColumns = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koCanEdit = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); return _this; } SurveyPropertyCellsEditor.prototype.getValueText = function (value) { var strName = !value ? "empty" : "notEmpty"; return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe." + strName); }; SurveyPropertyCellsEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.setupCells(); }; SurveyPropertyCellsEditor.prototype.onBeforeApply = function () { if (!this.canEdit) return; var matrix = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionMatrix"](""); matrix.setSurveyImpl(this.object.survey); matrix.rows = this.rows; matrix.columns = this.columns; matrix.cells = this.object.cells; var rows = this.koRows(); for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cells = row.koCells(); for (var j = 0; j < matrix.columns.length; j++) { if (row.rowIndex < 0) { matrix.setDefaultCellText(j, cells[j].text()); } else { matrix.setCellText(rows[i].rowIndex, j, cells[j].text()); } } } if (!matrix.cells.isEmpty) { this.koValue(matrix.cells); } else { this.koValue(null); } }; Object.defineProperty(SurveyPropertyCellsEditor.prototype, "editorType", { get: function () { return "cells"; }, enumerable: true, configurable: true }); SurveyPropertyCellsEditor.prototype.onValueChanged = function () { if (this.isShowingModal) { this.setupCells(); } }; Object.defineProperty(SurveyPropertyCellsEditor.prototype, "canEdit", { get: function () { return this.rows.length > 0 && this.columns.length > 0; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyCellsEditor.prototype, "rows", { get: function () { return this.object && this.object.rows ? this.object.rows : []; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyCellsEditor.prototype, "columns", { get: function () { return this.object && this.object.columns ? this.object.columns : []; }, enumerable: true, configurable: true }); SurveyPropertyCellsEditor.prototype.getCellText = function (rowIndex, columnIndex) { if (rowIndex < 0) return this.object.getDefaultCellText(columnIndex); return this.object.getCellText(rowIndex, columnIndex); }; SurveyPropertyCellsEditor.prototype.setupCells = function () { this.koRows([]); this.koColumns([]); this.koCanEdit(this.canEdit); if (!this.canEdit) return; var cols = []; for (var i = 0; i < this.columns.length; i++) { cols.push(this.columns[i].text); } var rows = []; rows.push(this.createRow(-1, __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.cellsDefaultRow"))); for (var i = 0; i < this.rows.length; i++) { rows.push(this.createRow(i, this.rows[i].text)); } this.koColumns(cols); this.koRows(rows); }; SurveyPropertyCellsEditor.prototype.createRow = function (rowIndex, rowText) { var row = { rowIndex: rowIndex, rowText: rowText, koCells: __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]() }; var cells = []; for (var i = 0; i < this.columns.length; i++) { cells.push({ text: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.getCellText(rowIndex, i)) }); } row.koCells(cells); return row; }; return SurveyPropertyCellsEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("cells", function (property) { return new SurveyPropertyCellsEditor(property); }); /***/ }), /* 54 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyConditionEditor; }); /* unused harmony export doGetCompletions */ /* unused harmony export insertMatch */ var SurveyPropertyConditionEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyConditionEditor, _super); function SurveyPropertyConditionEditor(property, _type, syntaxCheckMethodName) { if (_type === void 0) { _type = "condition"; } if (syntaxCheckMethodName === void 0) { syntaxCheckMethodName = "createCondition"; } var _this = _super.call(this, property) || this; _this._type = _type; _this.syntaxCheckMethodName = syntaxCheckMethodName; _this.availableOperators = []; _this.isValueChanging = false; _this.availableOperators = __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].getOperators(); _this.koIsValid = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); _this.koAddConditionQuestions = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koAddConditionQuestion = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koAddConditionOperator = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koAddConditionValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koAddConditionType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("and"); _this.koHasValueSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); _this.koValueSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](SurveyPropertyConditionEditor.emptySurvey); var self = _this; _this.koAddConditionQuestion.subscribe(function (newValue) { self.onValueSurveyChanged(newValue, self.koAddConditionOperator()); }); _this.koAddConditionOperator.subscribe(function (newValue) { self.onValueSurveyChanged(self.koAddConditionQuestion(), newValue); }); _this.koAddConditionValue.subscribe(function (newValue) { if (self.koHasValueSurvey()) { self.isValueChanging = true; self.koValueSurvey().setValue("question", JSON.parse(newValue)); self.isValueChanging = false; } }); _this.koCanAddCondition = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return (this.koAddConditionQuestion() != "" && this.koAddConditionQuestion() != undefined && this.koAddConditionOperator() != "" && (!this.koAddContionValueEnabled() || this.koAddConditionValue() != "")); }, _this); _this.koShowAddConditionType = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (!this.koIsValid()) return false; var text = this.koTextValue(); if (text) text = text.trim(); return text; }, _this); _this.koAddConditionButtonText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var name = this.koIsValid() ? "conditionButtonAdd" : "conditionButtonReplace"; return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("pe." + name); }, _this); _this.koAddContionValueEnabled = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.canShowValueByOperator(self.koAddConditionOperator()); }, _this); _this.onConditionAddClick = function () { self.addCondition(); }; _this.resetAddConditionValues(); return _this; } SurveyPropertyConditionEditor.prototype.setObject = function (value) { _super.prototype.setObject.call(this, value); this.koAddConditionQuestions(this.allCondtionQuestions); }; Object.defineProperty(SurveyPropertyConditionEditor.prototype, "editorType", { get: function () { return this._type; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyConditionEditor.prototype, "availableQuestions", { get: function () { if (this.object instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"]) { return this.object.colOwner["survey"].getAllQuestions(); } return ((this.object && this.object.survey && this.object.survey.getAllQuestions()) || []); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyConditionEditor.prototype, "allCondtionQuestions", { get: function () { if (!this.object) return []; var names = []; var questions = this.availableQuestions; for (var i = 0; i < questions.length; i++) { this.addConditionQuestionNames(questions[i], names); } this.addMatrixColumnsToCondtion(names); this.addPanelDynamicQuestionsToCondition(names); names.sort(); return names; }, enumerable: true, configurable: true }); SurveyPropertyConditionEditor.prototype.addConditionQuestionNames = function (question, names) { if (question == this.object) return; question.addConditionNames(names); }; SurveyPropertyConditionEditor.prototype.addMatrixColumnsToCondtion = function (names) { if (!(this.object instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"]) || !this.object || !this.object.colOwner || !this.object.colOwner["columns"]) return; var columns = this.object.colOwner["columns"]; for (var i = 0; i < columns.length; i++) { if (columns[i] == this.object) continue; names.push("row." + columns[i].name); } }; SurveyPropertyConditionEditor.prototype.addPanelDynamicQuestionsToCondition = function (names) { if (!(this.object.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"])) return; var panel = this.object.data.panel; var questionNames = []; for (var i = 0; i < panel.questions.length; i++) { var q = panel.questions[i]; if (q.name == this.object.name) continue; this.addConditionQuestionNames(q, questionNames); } for (var i = 0; i < questionNames.length; i++) { names.push("panel." + questionNames[i]); } }; SurveyPropertyConditionEditor.prototype.onValueSurveyChanged = function (questionName, operator) { if (!this.canShowValueByOperator(operator) || !questionName || !this.object || !this.object.survey) { this.koHasValueSurvey(false); return; } var json = this.getQuestionConditionJson(questionName, operator); this.koHasValueSurvey(json && json.type); if (this.koHasValueSurvey()) { this.koValueSurvey(this.createValueSurvey(json)); } }; SurveyPropertyConditionEditor.prototype.createValueSurvey = function (qjson) { qjson.name = "question"; qjson.title = __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("pe.conditionValueQuestionTitle"); delete qjson["visible"]; delete qjson["visibleIf"]; delete qjson["enable"]; delete qjson["enableIf"]; var json = { questions: [], showNavigationButtons: false, showQuestionNumbers: "off" }; json.questions.push(qjson); var survey = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](json); var self = this; survey.onValueChanged.add(function (survey, options) { if (!self.isValueChanging) { self.koAddConditionValue(JSON.stringify(options.value)); } }); return survey; }; SurveyPropertyConditionEditor.prototype.getQuestionConditionJson = function (questionName, operator) { var path = ""; var pos = questionName.indexOf("."); if (pos > -1) { path = questionName.substr(pos + 1); questionName = questionName.substr(0, pos); pos = questionName.indexOf("["); if (pos > -1) { questionName = questionName.substr(0, pos); } } var question = this.object.survey.getQuestionByName(questionName); var json = question && question.getConditionJson ? question.getConditionJson(operator, path) : null; return json && (json.type !== "text" || json.inputType) ? json : null; }; SurveyPropertyConditionEditor.prototype.canShowValueByOperator = function (operator) { return operator != "empty" && operator != "notempty"; }; Object.defineProperty(SurveyPropertyConditionEditor.prototype, "hasAceEditor", { get: function () { return (typeof ace !== "undefined" && typeof ace.require("ace/ext/language_tools") !== "undefined"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyConditionEditor.prototype, "addConditionQuestionOptions", { get: function () { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("pe.conditionSelectQuestion"); }, enumerable: true, configurable: true }); SurveyPropertyConditionEditor.prototype.addCondition = function () { if (!this.koCanAddCondition()) return; var text = ""; if (this.koShowAddConditionType()) { text = this.koTextValue() + " " + this.koAddConditionType() + " "; } text += "{" + this.koAddConditionQuestion() + "} " + this.getAddConditionOperator(); if (this.koAddContionValueEnabled()) { text += " " + this.getAddConditionValue(); } this.koTextValue(text); this.resetAddConditionValues(); }; SurveyPropertyConditionEditor.prototype.getAddConditionOperator = function () { var op = this.koAddConditionOperator(); if (op == "equal") return "="; if (op == "notequal") return "<>"; if (op == "greater") return ">"; if (op == "less") return "<"; if (op == "greaterorequal") return ">="; if (op == "lessorequal") return "<="; return op; }; SurveyPropertyConditionEditor.prototype.getAddConditionValue = function () { var val = this.koAddConditionValue(); if (!val) return val; if (val == "true" || val == "false") return val; if (!isNaN(val)) return val; if (val[0] == "[") return val; if (!this.isQuote(val[0])) val = "'" + val; if (!this.isQuote(val[val.length - 1])) val = val + "'"; return val; }; SurveyPropertyConditionEditor.prototype.isQuote = function (ch) { return ch == "'" || ch == '"'; }; SurveyPropertyConditionEditor.prototype.onkoTextValueChanged = function (newValue) { if (!newValue) { this.koIsValid(true); } else { var conditionParser = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ConditionsParser"](); conditionParser[this.syntaxCheckMethodName](newValue); this.koIsValid(!conditionParser.error); } }; SurveyPropertyConditionEditor.prototype.resetAddConditionValues = function () { this.koAddConditionQuestion(""); this.koAddConditionOperator("equal"); this.koAddConditionValue(""); }; return SurveyPropertyConditionEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["b" /* SurveyPropertyTextEditor */])); SurveyPropertyConditionEditor.emptySurvey = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("condition", function (property) { return new SurveyPropertyConditionEditor(property, "condition", "createCondition"); }); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("expression", function (property) { return new SurveyPropertyConditionEditor(property, "expression", "parseExpression"); }); var operations = [ { value: "and", title: "logical 'and' operator" }, { value: "&&", title: "logical 'and' operator" }, { value: "or", title: "logical 'or' operator" }, { value: "||", title: "logical 'or' operator" }, { value: "empty", title: "returns true if the left operand is empty {questionName} empty" }, { value: "notempty", title: "returns true if the left operand is not empty {questionName} notempty" }, { value: "=", title: "returns true if two values are equal {questionName} = 5, {questionName} == 'abc', {questionName} equal 124" }, { value: "==", title: "returns true if two values are equal {questionName} = 5, {questionName} == 'abc', {questionName} equal 124" }, { value: "equal", title: "returns true if two values are equal {questionName} = 5, {questionName} == 'abc', {questionName} equal 124" }, { value: "<>", title: "returns true if two values are not equal {questionName} <> 5, {questionName} != 'abc', {questionName} notequal 124" }, { value: "!=", title: "returns true if two values are not equal {questionName} <> 5, {questionName} != 'abc', {questionName} notequal 124" }, { value: "notequal", title: "returns true if two values are not equal {questionName} <> 5, {questionName} != 'abc', {questionName} notequal 124" }, { value: ">", title: "returns true if the left operand greater then the second operand {questionName} > 2, {questionName} greater 'a'" }, { value: "greater", title: "returns true if the left operand greater then the second operand {questionName} > 2, {questionName} greater 'a'" }, { value: "<", title: "returns true if the left operand less then the second operand {questionName} < 2, {questionName} less 'a'" }, { value: "less", title: "returns true if the left operand less then the second operand {questionName} < 2, {questionName} less 'a'" }, { value: ">=", title: "returns true if the left operand equal or greater then the second operand {questionName} >= 2, {questionName} greaterorequal 'a'" }, { value: "greaterorequal", title: "returns true if the left operand equal or greater then the second operand {questionName} >= 2, {questionName} greaterorequal 'a'" }, { value: "<=", title: "returns true if the left operand equal or less then the second operand {questionName} <= 2, {questionName} lessorequal 'a'" }, { value: "lessorequal", title: "returns true if the left operand equal or less then the second operand {questionName} <= 2, {questionName} lessorequal 'a'" }, { value: "contains", title: "return true if the left operand is an array and it contains a value of the second operand {questionName} contains 'a'" }, { value: "notcontains", title: "return true if the left operand is an array and it does not contain a value of the second operand" } ]; var createAnnotations = function (condition, syntaxCheckMethodName) { condition = condition || ""; var annotations = new Array(); var conditionParser = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ConditionsParser"](); conditionParser[syntaxCheckMethodName](condition); if (!!condition && conditionParser.error) { var toErrorSubstring = condition.substring(0, conditionParser.error.at); var column = toErrorSubstring.length - toErrorSubstring.lastIndexOf("\n"); var annotation = { row: condition.match(/\n/g) ? condition.match(/\n/g).length : 0, column: column, text: conditionParser.error.code + " (" + column + ")", type: "error" }; annotations.push(annotation); } return annotations; }; var ID_REGEXP = /[a-zA-Z_0-9{\*\/\<\>\=\!\$\.\-\u00A2-\uFFFF]/; function doGetCompletions(prevIdentifier, prefix, config, completer) { if (completer === void 0) { completer = null; } var completions = []; var currentQuestion = config.question; var usableQuestions = (config.questions || []).filter(function (q) { return q !== currentQuestion; }); if (!!usableQuestions || currentQuestion instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"] || currentQuestion.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"]) { if (prevIdentifier === "row" && currentQuestion instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"]) { completions = currentQuestion.colOwner["columns"] .filter(function (e) { return e.name !== currentQuestion.name; }) .map(function (column) { return { name: "", value: "{row." + column.name + "}", some: "", meta: column.title, identifierRegex: ID_REGEXP }; }); } else if (prevIdentifier === "panel" && currentQuestion.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"]) { var panel = currentQuestion.data.panel; completions = panel.elements .filter(function (e) { return e.name !== currentQuestion.name; }) .map(function (element) { return { name: "", value: "{panel." + element.name + "}", some: "", meta: element.name, identifierRegex: ID_REGEXP }; }); } else { var operationsFiltered = operations.filter(function (op) { return !prefix || op.value.indexOf(prefix) !== -1; }); var questionsFiltered = usableQuestions.filter(function (op) { return !prefix || op.name.indexOf(prefix) !== -1; }); if (currentQuestion instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"]) { completions.push({ name: "", value: "{row.", some: "", meta: __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString(__WEBPACK_IMPORTED_MODULE_5__editorLocalization__["b" /* defaultStrings */].pe.aceEditorRowTitle), identifierRegex: ID_REGEXP }); } else if (currentQuestion.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"]) { completions.push({ name: "", value: "{panel.", some: "", meta: __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString(__WEBPACK_IMPORTED_MODULE_5__editorLocalization__["b" /* defaultStrings */].pe.aceEditorPanelTitle), identifierRegex: ID_REGEXP }); } completions = completions .concat(questionsFiltered.map(function (q) { return { completer: completer, name: "", value: "{" + q.name + "}", some: "", meta: q.title, identifierRegex: ID_REGEXP }; })) .concat(operationsFiltered.map(function (op) { return { name: "", value: op.value, some: "", meta: op.title, identifierRegex: ID_REGEXP }; })); } } return completions; } function insertMatch(editor, data) { if (editor.completer.completions.filterText) { var allRanges = editor.selection.getAllRanges(); for (var rangeIndex = 0, range; (range = allRanges[rangeIndex]); rangeIndex++) { range.start.column -= editor.completer.completions.filterText.length; var rangeText = editor.session.getTextRange(range); if (rangeText.indexOf("{") !== 0) { var extRange = range.clone(); extRange.start.column--; if (editor.session.getTextRange(extRange).indexOf("{") === 0) { range = extRange; } } editor.session.remove(range); } } editor.execCommand("insertstring", data.value || data); } __WEBPACK_IMPORTED_MODULE_1_knockout__["bindingHandlers"].aceEditor = { init: function (element, options) { var configs = options(); var langTools = ace.require("ace/ext/language_tools"); var langUtils = ace.require("ace/autocomplete/util"); var editor = ace.edit(element); var objectEditor = configs.editor; var isUpdating = false; editor.setOption("useWorker", false); editor.getSession().on("change", function () { var errors = createAnnotations(editor.getValue(), objectEditor.syntaxCheckMethodName); isUpdating = true; objectEditor.koTextValue(editor.getValue()); isUpdating = false; // objectEditor.koHasError(errors.length > 0); // if (errors.length > 0) { // objectEditor.koErrorText(errors[0].text); // } editor.getSession().setAnnotations(errors); }); var updateCallback = function () { if (!isUpdating) { editor.setValue(objectEditor.koTextValue() || ""); } }; var valueSubscription = objectEditor.koTextValue.subscribe(updateCallback); updateCallback(); var completer = { identifierRegexps: [ID_REGEXP], insertMatch: insertMatch, getCompletions: function (editor, session, pos, prefix, callback) { var prevIdentifier = langUtils.retrievePrecedingIdentifier(session.getLine(pos.row), pos.column - 1); var completions = doGetCompletions(prevIdentifier, prefix, configs, completer); callback(null, completions); }, getDocTooltip: function (item) { item.docHTML = "<div style='max-width: 300px; white-space: normal;'>" + item.meta + "</div>"; } }; langTools.setCompleters([completer]); editor.setOptions({ enableBasicAutocompletion: true, enableLiveAutocompletion: true }); __WEBPACK_IMPORTED_MODULE_1_knockout__["utils"].domNodeDisposal.addDisposeCallback(element, function () { editor.destroy(); valueSubscription.dispose(); }); editor.focus(); } }; /***/ }), /* 55 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyDefaultValueEditor; }); var SurveyPropertyDefaultValueEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyDefaultValueEditor, _super); function SurveyPropertyDefaultValueEditor(property) { var _this = _super.call(this, property) || this; _this.koSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"]()); return _this; } SurveyPropertyDefaultValueEditor.prototype.getValueText = function (value) { if (!value) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); return JSON.stringify(value); }; SurveyPropertyDefaultValueEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.createSurvey(); }; SurveyPropertyDefaultValueEditor.prototype.onBeforeApply = function () { if (!this.survey) return; this.setValueCore(this.survey.getValue(this.object.name)); }; Object.defineProperty(SurveyPropertyDefaultValueEditor.prototype, "editorType", { get: function () { return "value"; }, enumerable: true, configurable: true }); SurveyPropertyDefaultValueEditor.prototype.createSurvey = function () { var qjson = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"]().toJsonObject(this.object); qjson.type = this.getJsonType(this.object.getType()); qjson.titleLocation = "hidden"; delete qjson["visible"]; delete qjson["visibleIf"]; delete qjson["enable"]; delete qjson["enableIf"]; var json = { questions: [], showNavigationButtons: false }; json.questions.push(qjson); this.survey = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](json); this.survey.setValue(this.object.name, this.editingValue); this.koSurvey(this.survey); }; SurveyPropertyDefaultValueEditor.prototype.getJsonType = function (type) { return type != "expression" ? type : "text"; }; return SurveyPropertyDefaultValueEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("value", function (property) { return new SurveyPropertyDefaultValueEditor(property); }); /***/ }), /* 56 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__ = __webpack_require__(15); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyNestedPropertyEditor__ = __webpack_require__(14); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionEditors_questionEditor__ = __webpack_require__(9); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyItemValuesEditor; }); /* unused harmony export SurveyPropertyItemValuesEditorItem */ var SurveyPropertyItemValuesEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyItemValuesEditor, _super); function SurveyPropertyItemValuesEditor(property) { var _this = _super.call(this, property) || this; _this.optionsShowTextView = true; _this.koShowTextView = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); var self = _this; if (property) { _this.detailDefinition = __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].definition[_this.getItemValueClassName()]; } _this.columnsValue = _this.createColumns(); _this.koActiveView = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("form"); _this.koItemsText = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koActiveView.subscribe(function (newValue) { if (newValue == "form") self.updateItems(self.koItemsText()); else self.koItemsText(self.getItemsText()); }); _this.changeToTextViewClick = function () { self.koActiveView("text"); }; _this.changeToFormViewClick = function () { self.koActiveView("form"); }; return _this; } Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "editorType", { get: function () { return "itemvalues"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "hasDetailButton", { get: function () { return !!this.detailDefinition; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "columns", { get: function () { return this.columnsValue; }, enumerable: true, configurable: true }); SurveyPropertyItemValuesEditor.prototype.getItemValueClassName = function () { return this.property ? this.editorType + "@" + this.property.name : ""; }; SurveyPropertyItemValuesEditor.prototype.getEditorName = function () { if (!this.koEditItem() || !this.koEditItem().item) return ""; return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */] .getString("pe.itemEdit")["format"](this.koEditItem().item.value); }; SurveyPropertyItemValuesEditor.prototype.checkForErrors = function () { var result = false; for (var i = 0; i < this.koItems().length; i++) { var item = this.koItems()[i]; result = item.hasError() || result; } return result; }; SurveyPropertyItemValuesEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); var props = this.getDefinedProperties(); if (!!props && props.length > 0) { this.columnsValue = this.createColumns(); } }; SurveyPropertyItemValuesEditor.prototype.getProperties = function () { var props = this.getDefinedProperties(); if (!!props && props.length > 0) return props; return this.getDefaultProperties(); }; Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "itemValueClasseName", { get: function () { var className = this.property ? this.property.type : "itemvalue"; if (className == this.editorType) className = "itemvalue"; return className; }, enumerable: true, configurable: true }); SurveyPropertyItemValuesEditor.prototype.getDefinedProperties = function () { if (this.property && this.object && this.object.getType) { var properties = __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(this.object.getType() + "@" + this.property.name); if (properties && properties.length > 0) { return this.getPropertiesByNames(this.itemValueClasseName, properties); } } return []; }; SurveyPropertyItemValuesEditor.prototype.getDefaultProperties = function () { var properties = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.getProperties(this.itemValueClasseName); var res = []; for (var i = 0; i < properties.length; i++) { if (!properties[i].visible) continue; res.push(properties[i]); } return res; }; SurveyPropertyItemValuesEditor.prototype.createEditorOptions = function () { var options = _super.prototype.createEditorOptions.call(this); options.showTextView = true; options.itemsEntryType = (this.options["options"] && this.options["options"].itemValuesEditorEntryType) || "form"; return options; }; SurveyPropertyItemValuesEditor.prototype.onSetEditorOptions = function (editorOptions) { _super.prototype.onSetEditorOptions.call(this, editorOptions); this.optionsShowTextView = editorOptions.showTextView; this.updateShowTextViewVisibility(); this.koActiveView(editorOptions.itemsEntryType || "form"); }; SurveyPropertyItemValuesEditor.prototype.createNewEditorItem = function () { var nextValue = null; var values = this.koItems().map(function (item) { return item.item.itemValue; }); nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["a" /* getNextValue */])("item", values); var itemValue = this.createEditorItemCore(nextValue); if (this.options) { this.options.onItemValueAddedCallback(this.editablePropertyName, itemValue); } return new SurveyPropertyItemValuesEditorItem(itemValue, this.columns, this.getItemValueClassName()); }; SurveyPropertyItemValuesEditor.prototype.createEditorItem = function (item) { var itemValue = this.createEditorItemCore(null); itemValue.setData(item); return new SurveyPropertyItemValuesEditorItem(itemValue, this.columns, this.getItemValueClassName()); }; SurveyPropertyItemValuesEditor.prototype.createEditorItemCore = function (item) { var itemValue = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](item); if (itemValue["visibleIf"]) { itemValue["survey"] = this.object.survey; } itemValue.locOwner = this; return itemValue; }; SurveyPropertyItemValuesEditor.prototype.createItemFromEditorItem = function (editorItem) { var item = editorItem.item; var alwaySaveTextInPropertyEditors = this.options && this.options.alwaySaveTextInPropertyEditors; if (!alwaySaveTextInPropertyEditors && item.text == item.value) { item.text = null; } var itemValue = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](null); itemValue.setData(item); return itemValue; }; SurveyPropertyItemValuesEditor.prototype.onValueChanged = function () { _super.prototype.onValueChanged.call(this); if (this.isShowingModal) { if (this.koActiveView() !== "form") { this.koItemsText(this.getItemsText()); } } this.updateShowTextViewVisibility(); }; SurveyPropertyItemValuesEditor.prototype.onBeforeApply = function () { if (this.koActiveView() !== "form") { this.updateItems(this.koItemsText()); } _super.prototype.onBeforeApply.call(this); }; SurveyPropertyItemValuesEditor.prototype.onListDetailViewChanged = function () { _super.prototype.onListDetailViewChanged.call(this); this.updateShowTextViewVisibility(); }; SurveyPropertyItemValuesEditor.prototype.updateItems = function (text) { var items = []; if (text) { var properties = this.getProperties(); var texts = text.split("\n"); for (var i = 0; i < texts.length; i++) { if (!texts[i]) continue; var elements = texts[i].split(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].Separator); var valueItem = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](""); var item = {}; properties.forEach(function (p, i) { valueItem[p.name] = elements[i]; item[p.name] = elements[i]; }); item.text = valueItem.hasText ? valueItem.text : ""; items.push(item); } } this.koItems(this.getItemsFromValue(items)); }; SurveyPropertyItemValuesEditor.prototype.getItemsText = function () { return this.koItems() .filter(function (item) { return !item.cells[0].hasError; }) .map(function (item) { return item.cells .map(function (cell) { return cell.value || ""; }) .join(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].Separator) .replace(/\|$/, ""); }) .join("\n"); }; SurveyPropertyItemValuesEditor.prototype.updateShowTextViewVisibility = function () { if (!this.koShowTextView) return; if (!this.optionsShowTextView || this.columns.length == 0) { this.koShowTextView(false); return; } this.koShowTextView(!this.hasVisibleIf()); }; SurveyPropertyItemValuesEditor.prototype.hasVisibleIf = function () { var items = this.koItems(); for (var i = 0; i < items.length; i++) { if (items[i].item.visibleIf) return true; } return false; }; return SurveyPropertyItemValuesEditor; }(__WEBPACK_IMPORTED_MODULE_7__propertyNestedPropertyEditor__["a" /* SurveyNestedPropertyEditor */])); var SurveyPropertyItemValuesEditorItem = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyItemValuesEditorItem, _super); function SurveyPropertyItemValuesEditorItem(item, columns, className) { if (className === void 0) { className = ""; } var _this = _super.call(this, item, columns) || this; _this.item = item; _this.columns = columns; _this.className = className; return _this; } SurveyPropertyItemValuesEditorItem.prototype.createSurveyQuestionEditor = function () { return new __WEBPACK_IMPORTED_MODULE_8__questionEditors_questionEditor__["b" /* SurveyQuestionEditor */](this.item, null, this.className, null); }; return SurveyPropertyItemValuesEditorItem; }(__WEBPACK_IMPORTED_MODULE_7__propertyNestedPropertyEditor__["b" /* SurveyNestedPropertyEditorItem */])); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("itemvalues", function (property) { return new SurveyPropertyItemValuesEditor(property); }, "itemvalue"); /***/ }), /* 57 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionEditors_questionEditor__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyNestedPropertyEditor__ = __webpack_require__(14); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__ = __webpack_require__(15); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyDropdownColumnsEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyMatrixDropdownColumnsItem; }); var SurveyPropertyDropdownColumnsEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyDropdownColumnsEditor, _super); function SurveyPropertyDropdownColumnsEditor(property) { var _this = _super.call(this, property) || this; _this.columnsValue = _this.createColumns(); return _this; } Object.defineProperty(SurveyPropertyDropdownColumnsEditor.prototype, "editorType", { get: function () { return "matrixdropdowncolumns"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyDropdownColumnsEditor.prototype, "columns", { get: function () { return this.columnsValue; }, enumerable: true, configurable: true }); SurveyPropertyDropdownColumnsEditor.prototype.getEditorName = function () { if (!this.koEditItem()) return ""; return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */] .getString("pe.columnEdit")["format"](this.koEditItem().column.name); }; SurveyPropertyDropdownColumnsEditor.prototype.createNewEditorItem = function () { var newColumn = this.createEditorItemCore(null); if (this.options) { this.options.onMatrixDropdownColumnAddedCallback(newColumn); } return new SurveyPropertyMatrixDropdownColumnsItem(newColumn, this.columns, this.options); }; SurveyPropertyDropdownColumnsEditor.prototype.createEditorItem = function (item) { var newColumn = this.createEditorItemCore(item); return new SurveyPropertyMatrixDropdownColumnsItem(newColumn, this.columns, this.options); }; SurveyPropertyDropdownColumnsEditor.prototype.createItemFromEditorItem = function (editorItem) { return editorItem.column; }; SurveyPropertyDropdownColumnsEditor.prototype.createEditorItemCore = function (item) { var newColumn = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["MatrixDropdownColumn"](""); if (item) { var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(item); new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toObject(json, newColumn); } newColumn.colOwner = this.object; return newColumn; }; SurveyPropertyDropdownColumnsEditor.prototype.getProperties = function () { var names = this.getPropertiesNames(); return this.getPropertiesByNames("matrixdropdowncolumn", names); }; SurveyPropertyDropdownColumnsEditor.prototype.getPropertiesNames = function () { var res = []; var properties = __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties("matrixdropdowncolumn"); if (properties) { for (var i = 0; i < properties.length; i++) { var prop = properties[i]; res.push(prop.name ? prop.name : prop); } } if (res.length == 0) { res = ["isRequired", "cellType", "name", "title"]; } return res; }; return SurveyPropertyDropdownColumnsEditor; }(__WEBPACK_IMPORTED_MODULE_4__propertyNestedPropertyEditor__["a" /* SurveyNestedPropertyEditor */])); var SurveyPropertyMatrixDropdownColumnsItem = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyMatrixDropdownColumnsItem, _super); function SurveyPropertyMatrixDropdownColumnsItem(column, columns, options) { if (options === void 0) { options = null; } var _this = _super.call(this, column, columns) || this; _this.column = column; _this.columns = columns; _this.options = options; var self = _this; column.registerFunctionOnPropertyValueChanged("cellType", function () { self.resetSurveyQuestionEditor(); }, "colEdit"); return _this; } SurveyPropertyMatrixDropdownColumnsItem.prototype.createSurveyQuestionEditor = function () { return new __WEBPACK_IMPORTED_MODULE_2__questionEditors_questionEditor__["b" /* SurveyQuestionEditor */](this.column, null, "matrixdropdowncolumn@" + this.column.cellType, this.options); }; return SurveyPropertyMatrixDropdownColumnsItem; }(__WEBPACK_IMPORTED_MODULE_4__propertyNestedPropertyEditor__["b" /* SurveyNestedPropertyEditorItem */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("matrixdropdowncolumns", function (property) { return new SurveyPropertyDropdownColumnsEditor(property); }); /***/ }), /* 58 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyMultipleValuesEditor; }); var SurveyPropertyMultipleValuesEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyMultipleValuesEditor, _super); function SurveyPropertyMultipleValuesEditor(property) { var _this = _super.call(this, property) || this; _this.items = []; _this.koEditingValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.setItems(); return _this; } SurveyPropertyMultipleValuesEditor.prototype.getValueText = function (value) { if (!value) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); if (!Array.isArray(value)) value = [value]; var str = "["; for (var i = 0; i < value.length; i++) { if (i > 0) str += ", "; str += this.getTextByItemValue(value[i]); } str += "]"; return str; }; SurveyPropertyMultipleValuesEditor.prototype.setObject = function (value) { _super.prototype.setObject.call(this, value); this.setItems(); this.setEditingValue(); }; SurveyPropertyMultipleValuesEditor.prototype.updateValue = function () { _super.prototype.updateValue.call(this); this.setEditingValue(); }; SurveyPropertyMultipleValuesEditor.prototype.onBeforeApply = function () { this.koValue(this.koEditingValue()); }; Object.defineProperty(SurveyPropertyMultipleValuesEditor.prototype, "editorType", { get: function () { return "multiplevalues"; }, enumerable: true, configurable: true }); SurveyPropertyMultipleValuesEditor.prototype.setItems = function () { __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].setData(this.items, this.property.choices); this.koItems(this.items); }; SurveyPropertyMultipleValuesEditor.prototype.getTextByItemValue = function (val) { for (var i = 0; i < this.items.length; i++) { if (this.items[i].value == val) return this.items[i].text; } return val; }; SurveyPropertyMultipleValuesEditor.prototype.setEditingValue = function () { var val = this.koValue(); if (val == null || val == undefined) val = []; if (!Array.isArray(val)) val = [val]; this.koEditingValue(val); }; return SurveyPropertyMultipleValuesEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("multiplevalues", function (property) { return new SurveyPropertyMultipleValuesEditor(property); }); /***/ }), /* 59 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyResultfullEditor; }); /* unused harmony export SurveyPropertyResultfullEditorItem */ var SurveyPropertyResultfullEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyResultfullEditor, _super); function SurveyPropertyResultfullEditor(property) { var _this = _super.call(this, property) || this; _this.items = []; _this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.createSurvey(); return _this; } Object.defineProperty(SurveyPropertyResultfullEditor.prototype, "editorType", { get: function () { return "restfull"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyResultfullEditor.prototype, "restfullValue", { get: function () { if (this.editingObject) return this.editingObject[this.property.name]; if (this.editingValue) return this.editingValue; return null; }, enumerable: true, configurable: true }); SurveyPropertyResultfullEditor.prototype.getValueText = function (value) { if (!value || !value.url) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); var str = value.url; if (str.length > 20) { str = str.substr(0, 20) + "..."; } return str; }; SurveyPropertyResultfullEditor.prototype.addItem = function (propName, val) { var self = this; this.items.push(new SurveyPropertyResultfullEditorItem(propName, val ? val[propName] : "", function (item) { self.onItemValueChanged(item); })); }; SurveyPropertyResultfullEditor.prototype.onItemValueChanged = function (item) { this.question.choicesByUrl[item.name] = item.koValue(); this.run(); }; SurveyPropertyResultfullEditor.prototype.onValueChanged = function () { var val = this.restfullValue; this.items = []; this.addItem("url", val); this.addItem("path", val); this.addItem("valueName", val); this.addItem("titleName", val); if (val && val["getCustomPropertiesNames"]) { var customProperties = val["getCustomPropertiesNames"](); for (var i = 0; i < customProperties.length; i++) { var propName = customProperties[i]; if (propName === "visibleIfName") continue; //TODO remove later this.addItem(propName, val); } } this.koItems(this.items); }; SurveyPropertyResultfullEditor.prototype.onBeforeApply = function () { var val = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ChoicesRestfull"](); val["owner"] = this.editingObject; for (var i = 0; i < this.items.length; i++) { var item = this.items[i]; val[item.name] = item.koValue(); } this.setValueCore(val); }; SurveyPropertyResultfullEditor.prototype.run = function () { this.question.choicesByUrl.run(); }; SurveyPropertyResultfullEditor.prototype.createSurvey = function () { this.survey = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](); this.survey.showNavigationButtons = false; this.survey.showQuestionNumbers = "off"; var page = this.survey.addNewPage("page1"); this.question = page.addNewQuestion("dropdown", "q1"); this.question.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.testService"); this.question.choices = []; }; return SurveyPropertyResultfullEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); var SurveyPropertyResultfullEditorItem = (function () { function SurveyPropertyResultfullEditorItem(name, val, onValueChanged) { this.name = name; this.onValueChanged = onValueChanged; this.isSetttingValue = false; this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](val ? val : ""); var self = this; this.koValue.subscribe(function (newValue) { if (!self.isSetttingValue) { self.onValueChanged(self); } }); } SurveyPropertyResultfullEditorItem.prototype.setValue = function (val) { this.isSetttingValue = true; this.koValue(val); this.isSetttingValue = false; }; return SurveyPropertyResultfullEditorItem; }()); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("restfull", function (property) { return new SurveyPropertyResultfullEditor(property); }); /***/ }), /* 60 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__questionEditors_questionEditor__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__propertyNestedPropertyEditor__ = __webpack_require__(14); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyTextItemsEditor; }); /* unused harmony export SurveyPropertyTextItemsItem */ var SurveyPropertyTextItemsEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTextItemsEditor, _super); function SurveyPropertyTextItemsEditor(property) { var _this = _super.call(this, property) || this; _this.isTitleVisible = _this.getIsTitleVisible(); return _this; } Object.defineProperty(SurveyPropertyTextItemsEditor.prototype, "editorType", { get: function () { return "textitems"; }, enumerable: true, configurable: true }); SurveyPropertyTextItemsEditor.prototype.getEditorName = function () { if (!this.koEditItem()) return ""; return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */] .getString("pe.columnEdit")["format"](this.koEditItem().koName()); }; SurveyPropertyTextItemsEditor.prototype.createNewEditorItem = function () { var newItem = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MultipleTextItem"](this.getNewName()); //newColumn.colOwner = TODO set colOwner. return new SurveyPropertyTextItemsItem(newItem); }; SurveyPropertyTextItemsEditor.prototype.createEditorItem = function (item) { return new SurveyPropertyTextItemsItem(item); }; SurveyPropertyTextItemsEditor.prototype.createItemFromEditorItem = function (editorItem) { return editorItem.item; }; SurveyPropertyTextItemsEditor.prototype.getNewName = function () { var objs = []; var items = this.koItems(); for (var i = 0; i < items.length; i++) { objs.push({ name: items[i].koName() }); } return __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].getNewName(objs, "text"); }; SurveyPropertyTextItemsEditor.prototype.getIsTitleVisible = function () { var property = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.findProperty("multipletextitem", "title"); return property != null && property.visible; }; return SurveyPropertyTextItemsEditor; }(__WEBPACK_IMPORTED_MODULE_6__propertyNestedPropertyEditor__["a" /* SurveyNestedPropertyEditor */])); var SurveyPropertyTextItemsItem = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTextItemsItem, _super); function SurveyPropertyTextItemsItem(item) { var _this = _super.call(this, item, []) || this; _this.item = item; _this.koName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](item.name); _this.koTitle = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](item.name === item.title ? "" : item.title); _this.koIsRequired = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](_this.item.isRequired); _this.koHasError = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); return _this; } SurveyPropertyTextItemsItem.prototype.createSurveyQuestionEditor = function () { return new __WEBPACK_IMPORTED_MODULE_5__questionEditors_questionEditor__["b" /* SurveyQuestionEditor */](this.item, null, "multipletextitem"); }; SurveyPropertyTextItemsItem.prototype.hasError = function () { if (_super.prototype.hasError.call(this)) return true; this.koHasError(!this.koName()); return this.koHasError(); }; SurveyPropertyTextItemsItem.prototype.apply = function () { _super.prototype.apply.call(this); this.item.name = this.koName(); this.item.title = this.koTitle(); this.item.isRequired = this.koIsRequired(); }; return SurveyPropertyTextItemsItem; }(__WEBPACK_IMPORTED_MODULE_6__propertyNestedPropertyEditor__["b" /* SurveyNestedPropertyEditorItem */])); __WEBPACK_IMPORTED_MODULE_7__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("textitems", function (property) { return new SurveyPropertyTextItemsEditor(property); }); /***/ }), /* 61 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__ = __webpack_require__(13); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyTriggersEditor; }); /* unused harmony export SurveyPropertyTrigger */ /* unused harmony export SurveyPropertyVisibleTrigger */ /* unused harmony export SurveyPropertySetValueTrigger */ /* unused harmony export SurveyPropertyTriggerObjects */ var SurveyPropertyTriggersEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyTriggersEditor, _super); function SurveyPropertyTriggersEditor(property) { var _this = _super.call(this, property) || this; _this.availableTriggers = []; _this.triggerClasses = []; var self = _this; _this.onDeleteClick = function () { self.koItems.remove(self.koSelected()); }; _this.onAddClick = function (item) { self.addItem(item.value); }; _this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); _this.koPages = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koQuestions = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koQuestionNames = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koElements = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.triggerClasses = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.getChildrenClasses("surveytrigger", true); _this.availableTriggers = _this.getAvailableTriggers(); _this.koTriggers = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.getLocalizedTriggers()); return _this; } Object.defineProperty(SurveyPropertyTriggersEditor.prototype, "editorType", { get: function () { return "triggers"; }, enumerable: true, configurable: true }); SurveyPropertyTriggersEditor.prototype.onValueChanged = function () { if (this.editingObject) { var allQuestions = this.editingObject.getAllQuestions(); this.koPages(this.getNames(this.editingObject.pages)); this.koQuestions(this.getNames(allQuestions)); this.koQuestionNames(this.getQuestionNames(allQuestions)); this.koElements(this.getNames(this.getAllElements())); } _super.prototype.onValueChanged.call(this); if (this.koSelected) { this.koSelected(this.koItems().length > 0 ? this.koItems()[0] : null); } }; //TODO this code should be in the library SurveyPropertyTriggersEditor.prototype.getAllElements = function () { var res = []; var pages = this.editingObject.pages; for (var i = 0; i < pages.length; i++) { this.addElemenetsIntoList(pages[i], res); } return res; }; SurveyPropertyTriggersEditor.prototype.addElemenetsIntoList = function (element, list) { var elements = element.getElementsInDesign(false); if (!elements) return; for (var i = 0; i < elements.length; i++) { list.push(elements[i]); this.addElemenetsIntoList(elements[i], list); } }; SurveyPropertyTriggersEditor.prototype.addItem = function (triggerType) { var trigger = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.createClass(triggerType); var triggerItem = this.createPropertyTrigger(trigger); this.koItems.push(triggerItem); this.koSelected(triggerItem); }; SurveyPropertyTriggersEditor.prototype.createEditorItem = function (item) { var jsonObj = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"](); var trigger = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.createClass(item.getType()); jsonObj.toObject(item, trigger); return this.createPropertyTrigger(trigger); }; SurveyPropertyTriggersEditor.prototype.createItemFromEditorItem = function (editorItem) { var editorTrigger = editorItem; return editorTrigger.createTrigger(); }; SurveyPropertyTriggersEditor.prototype.getLocalizedTriggers = function () { var res = []; for (var i = 0; i < this.availableTriggers.length; i++) { var name = this.availableTriggers[i]; res.push({ value: name, text: __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getTriggerName(name) }); } return res; }; SurveyPropertyTriggersEditor.prototype.getAvailableTriggers = function () { var result = []; for (var i = 0; i < this.triggerClasses.length; i++) { result.push(this.triggerClasses[i].name); } return result; }; SurveyPropertyTriggersEditor.prototype.getNames = function (items) { var names = []; for (var i = 0; i < items.length; i++) { var item = items[i]; if (item["name"]) { names.push(item["name"]); } } return names; }; SurveyPropertyTriggersEditor.prototype.getQuestionNames = function (questions) { var items = []; for (var i = 0; i < questions.length; i++) { questions[i].addConditionNames(items); } var names = []; for (var i = 0; i < items.length; i++) { if (items[i].indexOf("[") < 0) { names.push(items[i]); } } return names; }; SurveyPropertyTriggersEditor.prototype.createPropertyTrigger = function (trigger) { var triggerItem = null; if (trigger.getType() == "visibletrigger") { triggerItem = new SurveyPropertyVisibleTrigger(trigger, this.koPages, this.koElements); } if (trigger.getType() == "setvaluetrigger") { triggerItem = new SurveyPropertySetValueTrigger(trigger, this.koQuestions); } if (!triggerItem) { triggerItem = new SurveyPropertyTrigger(trigger); } return triggerItem; }; return SurveyPropertyTriggersEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); var SurveyPropertyTrigger = (function () { function SurveyPropertyTrigger(trigger) { this.trigger = trigger; this.availableOperators = []; this.availableOperators = __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].getOperators(); this.triggerType = trigger.getType(); this.koType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.triggerType); this.koName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.name); this.koOperator = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.operator); this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.value); var self = this; this.koRequireValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.koOperator() != "empty" && self.koOperator() != "notempty"; }); this.koIsValid = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (self.koName() && (!self.koRequireValue() || self.koValue())) return true; return false; }); this.koText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { self.koName(); self.koOperator(); self.koValue(); return self.getText(); }); } SurveyPropertyTrigger.prototype.createTrigger = function () { var trigger = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.createClass(this.triggerType); trigger.name = this.koName(); trigger.operator = this.koOperator(); trigger.value = this.koValue(); return trigger; }; SurveyPropertyTrigger.prototype.getText = function () { if (!this.koIsValid()) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerNotSet"); return (__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerRunIf") + " '" + this.koName() + "' " + this.getOperatorText() + this.getValueText()); }; SurveyPropertyTrigger.prototype.getOperatorText = function () { var op = this.koOperator(); for (var i = 0; i < this.availableOperators.length; i++) { if (this.availableOperators[i].name == op) return this.availableOperators[i].text; } return op; }; SurveyPropertyTrigger.prototype.getValueText = function () { if (!this.koRequireValue()) return ""; return " " + this.koValue(); }; return SurveyPropertyTrigger; }()); var SurveyPropertyVisibleTrigger = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyVisibleTrigger, _super); function SurveyPropertyVisibleTrigger(trigger, koPages, koQuestions) { var _this = _super.call(this, trigger) || this; _this.trigger = trigger; _this.pages = new SurveyPropertyTriggerObjects(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerMakePagesVisible"), koPages(), trigger.pages); _this.questions = new SurveyPropertyTriggerObjects(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerMakeQuestionsVisible"), koQuestions(), trigger.questions); return _this; } SurveyPropertyVisibleTrigger.prototype.createTrigger = function () { var trigger = _super.prototype.createTrigger.call(this); trigger.pages = this.pages.koChoosen(); trigger.questions = this.questions.koChoosen(); return trigger; }; return SurveyPropertyVisibleTrigger; }(SurveyPropertyTrigger)); var SurveyPropertySetValueTrigger = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertySetValueTrigger, _super); function SurveyPropertySetValueTrigger(trigger, koQuestions) { var _this = _super.call(this, trigger) || this; _this.trigger = trigger; _this.koQuestions = koQuestions; _this.kosetToName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.setToName); _this.kosetValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.setValue); _this.koisVariable = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.isVariable); return _this; } SurveyPropertySetValueTrigger.prototype.createTrigger = function () { var trigger = _super.prototype.createTrigger.call(this); trigger.setToName = this.kosetToName(); trigger.setValue = this.kosetValue(); trigger.isVariable = this.koisVariable(); return trigger; }; return SurveyPropertySetValueTrigger; }(SurveyPropertyTrigger)); var SurveyPropertyTriggerObjects = (function () { function SurveyPropertyTriggerObjects(title, allObjects, choosenObjects) { this.title = title; this.koChoosen = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](choosenObjects); var array = []; for (var i = 0; i < allObjects.length; i++) { var item = allObjects[i]; if (choosenObjects.indexOf(item) < 0) { array.push(item); } } this.koObjects = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](array); this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.koChoosenSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); var self = this; this.onDeleteClick = function () { self.deleteItem(); }; this.onAddClick = function () { self.addItem(); }; } SurveyPropertyTriggerObjects.prototype.deleteItem = function () { this.changeItems(this.koChoosenSelected(), this.koChoosen, this.koObjects); }; SurveyPropertyTriggerObjects.prototype.addItem = function () { this.changeItems(this.koSelected(), this.koObjects, this.koChoosen); }; SurveyPropertyTriggerObjects.prototype.changeItems = function (item, removedFrom, addTo) { removedFrom.remove(item); addTo.push(item); removedFrom.sort(); addTo.sort(); }; return SurveyPropertyTriggerObjects; }()); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("triggers", function (property) { return new SurveyPropertyTriggersEditor(property); }); /***/ }), /* 62 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__ = __webpack_require__(13); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__objectEditor__ = __webpack_require__(17); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyValidatorsEditor; }); /* unused harmony export SurveyPropertyValidatorItem */ var SurveyPropertyValidatorsEditor = (function (_super) { __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SurveyPropertyValidatorsEditor, _super); function SurveyPropertyValidatorsEditor(property) { var _this = _super.call(this, property) || this; _this.availableValidators = []; _this.validatorClasses = []; var self = _this; _this.selectedObjectEditor = new __WEBPACK_IMPORTED_MODULE_4__objectEditor__["a" /* SurveyObjectEditor */](); _this.selectedObjectEditor.onPropertyValueChanged.add(function (sender, options) { self.onPropertyValueChanged(options.property, options.object, options.newValue); }); _this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); _this.koSelected.subscribe(function (newValue) { self.selectedObjectEditor.selectedObject = newValue != null ? newValue.validator : null; }); _this.validatorClasses = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.getChildrenClasses("surveyvalidator", true); _this.availableValidators = _this.getAvailableValidators(); _this.koValidators = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.getLocalizedValidators()); _this.onDeleteClick = function () { self.koItems.remove(self.koSelected()); }; _this.onAddClick = function (item) { self.addItem(item.value); }; return _this; } Object.defineProperty(SurveyPropertyValidatorsEditor.prototype, "editorType", { get: function () { return "validators"; }, enumerable: true, configurable: true }); SurveyPropertyValidatorsEditor.prototype.onValueChanged = function () { _super.prototype.onValueChanged.call(this); if (this.koSelected) { this.koSelected(this.koItems().length > 0 ? this.koItems()[0] : null); } }; SurveyPropertyValidatorsEditor.prototype.createEditorItem = function (item) { var jsonObj = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"](); var validator = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.createClass(item.getType()); jsonObj.toObject(item, validator); this.setItemProperties(validator); return new SurveyPropertyValidatorItem(validator); }; SurveyPropertyValidatorsEditor.prototype.createItemFromEditorItem = function (editorItem) { var item = editorItem; delete item.validator["survey"]; return item.validator; }; SurveyPropertyValidatorsEditor.prototype.addItem = function (validatorType) { var newValidator = new SurveyPropertyValidatorItem(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"].metaData.createClass(validatorType)); this.setItemProperties(newValidator.validator); this.koItems.push(newValidator); this.koSelected(newValidator); }; SurveyPropertyValidatorsEditor.prototype.setItemProperties = function (validator) { if (this.object) { validator["survey"] = this.object.survey; } validator.locOwner = this; }; SurveyPropertyValidatorsEditor.prototype.getLocalizedValidators = function () { var res = []; for (var i = 0; i < this.availableValidators.length; i++) { var name = this.availableValidators[i]; res.push({ value: name, text: __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getValidatorName(name) }); } return res; }; SurveyPropertyValidatorsEditor.prototype.getAvailableValidators = function () { var res = []; for (var i = 0; i < this.validatorClasses.length; i++) { res.push(this.validatorClasses[i].name); } return res; }; SurveyPropertyValidatorsEditor.prototype.onPropertyValueChanged = function (property, obj, newValue) { if (this.koSelected() == null) return; this.koSelected().validator[property.name] = newValue; }; return SurveyPropertyValidatorsEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); var SurveyPropertyValidatorItem = (function () { function SurveyPropertyValidatorItem(validator) { this.validator = validator; this.text = __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getValidatorName(validator.getType()); } return SurveyPropertyValidatorItem; }()); __WEBPACK_IMPORTED_MODULE_6__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("validators", function (property) { return new SurveyPropertyValidatorsEditor(property); }); /***/ }), /* 63 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 64 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 65 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 66 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 67 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 68 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 69 */ /***/ (function(module, exports) { module.exports = "<svg style=\"display:none;\"><symbol viewBox=\"0 0 16 16\" id=\"icon-actionaddtotoolbox\"><path d=\"M7.3 8H1v2h5.2c.2-.7.6-1.4 1.1-2zM10 6.2V5H1v2h7.3c.5-.3 1.1-.6 1.7-.8zM1 2h9v2H1zM11.5 7C9 7 7 9 7 11.5S9 16 11.5 16s4.5-2 4.5-4.5S14 7 11.5 7zm2.5 5h-2v2h-1v-2H9v-1h2V9h1v2h2v1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionconvertto\"><path d=\"M3 10L0 7h6zM13 7l3 3h-6z\"></path><path d=\"M8 4c1.5 0 2.8.8 3.4 2h2.2c-.8-2.3-3-4-5.7-4C4.7 2 2 4.7 2 8h2c0-2.2 1.8-4 4-4zM11.9 9c-.4 1.7-2 3-3.9 3-1 0-1.9-.4-2.6-1H2.8c1 1.8 3 3 5.2 3 3 0 5.4-2.2 5.9-5h-2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actioncopy\"><path d=\"M2 6h9v9H2z\"></path><path d=\"M5 3v2h7v7h2V3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actiondelete\"><path d=\"M8 2C4.7 2 2 4.7 2 8s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm3 8l-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2 2 2z\"></path></symbol><symbol viewBox=\"0 0 32 32\" id=\"icon-actiondragelement\"><path d=\"M4 10h24a2 2 0 0 0 0-4H4a2 2 0 0 0 0 4zm24 4H4a2 2 0 0 0 0 4h24a2 2 0 0 0 0-4zm0 8H4a2 2 0 0 0 0 4h24a2 2 0 0 0 0-4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actioneditelement\"><path d=\"M1 15h4l-4-4zM7 5l-5 5 4 4 5-5zM14 6l-4-4-2 2 4 4zM9 14h5v1H9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionhidetitle\"><path d=\"M15.7 7.7c-.1-.1-1.5-1.7-3.4-3L15 2l-1-1-2.9 2.9C10.1 3.4 9 3 8 3 4.3 3 .4 7.5.3 7.7L0 8l.3.3c.1.1 1.5 1.7 3.4 3L1 14l1 1 2.9-2.9c1 .5 2.1.9 3.1.9 3.7 0 7.6-4.5 7.7-4.7L16 8l-.3-.3zM2 8c.8-.8 3.4-3 6-3 .6 0 .6 0 0 0-1.7 0-3 1.3-3 3 0 .6.2 1.1.4 1.6l-.6.6C3.5 9.4 2.5 8.5 2 8zm6 3c-.6 0-.6 0 0 0 1.7 0 3-1.3 3-3 0-.6-.2-1.1-.4-1.6l.6-.6c1.3.8 2.3 1.7 2.8 2.2-.8.8-3.4 3-6 3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionisrequired\"><circle cx=\"7.5\" cy=\"13.5\" r=\"1.5\"></circle><path d=\"M8 10l1-9H6l1 9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionnotrequired\"><path d=\"M14 1L8.4 6.6 9 1H6l.8 7.2L1 14l1 1L15 2z\"></path><circle cx=\"7.5\" cy=\"13.5\" r=\"1.5\"></circle></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionshowtitle\"><path d=\"M15.7 7.7C15.6 7.5 11.7 3 8 3S.4 7.5.3 7.7L0 8l.3.3c.1.2 4 4.7 7.7 4.7s7.6-4.5 7.7-4.7L16 8l-.3-.3zM8 11c-2.6 0-5.2-2.2-6-3 .8-.8 3.4-3 6-3s5.2 2.2 6 3c-.8.8-3.4 3-6 3z\"></path><circle cx=\"8\" cy=\"8\" r=\"3\"></circle></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-add\"><path d=\"M14 7h-4V3H7v4H3v3h4v4h3v-4h4z\"></path></symbol><symbol viewBox=\"0 0 10 10\" id=\"icon-arrow_down_10x10\"><path d=\"M2 2L0 4l5 5 5-5-2-2-3 3z\"></path></symbol><symbol viewBox=\"0 0 10 10\" id=\"icon-arrow_up_10x10\"><path d=\"M8 9l2-2-5-5-5 5 2 2 3-3z\"></path></symbol><symbol viewBox=\"0 0 34 34\" id=\"icon-arrowdown_34x34\"><style><![CDATA[.st0{fill:#fff}]]></style><path class=\"st0\" d=\"M12 16l2-2 3 3 3-3 2 2-5 5z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-cloud_24x24\"><style><![CDATA[.st0{fill:#1ab394}]]></style><path class=\"st0\" d=\"M75 6.5C75 4.6 73.4 3 71.5 3S68 4.6 68 6.5c0 1.4.8 2.6 2 3.2-.2 1-.7 1.8-1.7 2.3-.4.2-.9.4-1.3.6-.8.3-1.7.6-2.5.9-.2.1-.3.1-.5.2v-6c1.2-.6 2-1.8 2-3.2C66 2.6 64.4 1 62.5 1S59 2.6 59 4.5c0 1.4.8 2.6 2 3.2v9.7c-1.2.6-2 1.8-2 3.2 0 1.8 1.6 3.4 3.5 3.4s3.5-1.6 3.5-3.5c0-1.4-.8-2.6-2-3.2.1-.5.4-1 .9-1.2.3-.1.6-.3 1-.4 1.1-.4 2.1-.7 3.2-1.2 1.4-.6 2.5-1.5 3.1-2.9.2-.4.3-1.1.4-1.8C74 9.3 75 8.1 75 6.5zM62.5 3c.8 0 1.5.7 1.5 1.5S63.3 6 62.5 6 61 5.3 61 4.5 61.7 3 62.5 3zm0 19c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zM70 6.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5S72.3 8 71.5 8 70 7.3 70 6.5zM9 18l1 1 2-2v6h2v-6l2 2 1-1-4-4z\"></path><path class=\"st0\" d=\"M20.9 7.9c.1-.3.1-.6.1-.9 0-2.8-2.2-5-5-5-2.6 0-4.7 1.9-4.9 4.4C10.3 5.6 9.2 5 8 5 5.8 5 4 6.8 4 9v.2c-1.7.4-3 1.3-3 3.8 0 2.3 2.4 3 4 3h3l5-5 5 5c2.8 0 5-1.2 5-4 0-1.7-.8-3.1-2.1-4.1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-autocomplete\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M15 6H7v10h9v-1H8v-2h7v2h1V6h-1zm0 6H8v-2h7v2zm0-3H8V7h7v2zM3 10H1V4h2V3H0v8h3zM14 5h1V3H6v1h8zM5 1h1V0H3v1h1v11H3v1h3v-1H5z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-barrating\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M12.1 15l-4.6-2.4L2.9 15l.9-5.1L0 6.3l5.2-.7L7.5 1l2.3 4.6 5.2.7-3.8 3.6.9 5.1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-datepicker\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M3 7h2v2H3zM7 11h2v2H7zM3 11h2v2H3zM11 11h2v2h-2zM11 7h2v2h-2zM10 6H6v4h4V6zM9 9H7V7h2v2zM4 0h1v3H4zM11 0h1v3h-1z\"></path><path class=\"st0\" d=\"M13 2v2h-3V2H6v2H3V2H0v14h16V2h-3zm2 13H1V5h14v10z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-editor\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M1 3h2v5H2v1h4V8H5V3h2v1h1V1H0v3h1zM10 5h6v1h-6zM10 8h6v1h-6zM0 11h16v1H0zM0 14h16v1H0z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-imagepicker\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M15 14H0V1h15v13zM1 13h13V2H1v11z\"></path><path class=\"st0\" d=\"M2 3v9h11V3H2zm4 1c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1zm-3 7l2-3 1 1 2-3 4 5H3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-nouislider\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M0 10h16v2H0zM2 4v3l2 2 2-2V4zM10 4v3l2 2 2-2V4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-singaturepad\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M0 0v15h16V0H0zm15 14H1V1h14v13z\"></path><path class=\"st0\" d=\"M2.6 10.2c.1.1.1.2.2.3-.2.3-.4.6-.7.8l.7.7c.2-.3.5-.6.7-.9h.1c.2.1.9.1 1.1.1 1.5-.1 2.3-.5 2.8-.8h.1l.6.3h.6c.7-.1 1.9-.8 2.5-1.2.2-.1.5-.3.5-.3v.2c0 .2 0 .3.1.5.1.3.3.4.6.5.2 0 .4 0 .5-.1.1-.3.8-1 1-1.3V8c-.1.1-.3.2-.4.4-.2.2-.5.4-.8.6l-.1.1v-.3c0-.2 0-.4-.1-.5-.1-.4-.5-.6-.9-.4-.1.1-.4.2-.6.4-.9.6-2 1.2-2.2 1.3-.1 0-.2.1-.4.1l.1-.1c.3-.3.7-.6.9-1 .2-.3.3-.6.3-.9 0-.4 0-.7-.2-1.1-.1-.3-.4-.6-.8-.7-.2-.1-.4-.1-.7 0-.2.1-.5.2-.7.4-.3.3-.5.6-.6 1-.1.2-.1.5-.1.7 0 .4 0 .7.1 1.1 0 .2.1.3.2.5-.6.3-1.5.7-2.8.6v-.1c0-.1.1-.3.2-.4.4-.7.7-1.4.9-2.1.2-.6.3-1.3.3-1.9V4.3c0-.3-.1-.6-.3-.8-.2-.4-.6-.6-1-.5-.3.1-.5.2-.7.4-.3.2-.6.5-.8.9-.2.5-.4 1-.6 1.6-.1.5-.2 1-.2 1.5s0 1 .1 1.4c.1.6.3 1 .5 1.4zm5-2.5c.1-.2.2-.5.4-.6.2-.2.4-.2.7-.2.1 0 .2.1.2.2.1.3.1.6-.1.8-.2.3-.4.6-.6.8-.2.2-.3.3-.5.4-.1-.1-.1-.2-.1-.4v-1zM3 6.7c.1-.6.3-1.3.6-1.8.1-.3.3-.5.5-.8.1 0 .2-.1.2-.1.1-.1.2 0 .3.1.1.1.1.3.1.4 0 .4.1.9 0 1.3 0 .8-.2 1.6-.5 2.3-.3.5-.5 1-.8 1.5-.1 0-.2-.1-.2-.2-.2-.6-.3-1.2-.3-1.8 0-.3.1-.6.1-.9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-sortablejs\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M7 1h9v2H7zM9 6h7v2H9zM11 11h5v2h-5zM5 10l1 1c-2.2 0-4-1.8-4-4 0-1.9 1.3-3.4 3-3.9v-2C2.2 1.5 0 4 0 7c0 3.3 2.7 6 5.9 6H6l-1 1 1 1 3-3-3-3-1 1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-tagbox\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M15 11H0V5h15v6zM1 10h13V6H1v4z\"></path><path class=\"st0\" d=\"M2 7h4v2H2zM7 7h4v2H7z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-delete_24x24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#1AB394\" d=\"M6 8l2-2 4 4 4-4 2 2-4 4 4 4-2 2-4-4-4 4-2-2 4-4-4-4z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-edit\"><g fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path d=\"M19 4l-9 9 4 4 9-9-4-4zM8 15v4h4l-4-4zM1 17v2h4v-2H1z\"></path></g></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-boolean\"><path d=\"M0 16h10V6H0v10zm2-6l2 2 4-4 1 1-5 5-3-3 1-1z\"></path><path d=\"M5 1v4h1V2h8v8h-3v1h4V1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-checkbox\"><path d=\"M1 1v14h14V1H1zm6 10L4 8l1-1 2 2 4-4 1 1-5 5z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-comment\"><path d=\"M8 2C4.1 2 1 4.2 1 7c0 1.9 1.5 3.6 3.8 4.4C4.6 13.1 3 14 3 14s1.5-.2 2.7-.9c.4-.2.9-.8 1.3-1.2.3.1.6.1 1 .1 3.9 0 7-2.2 7-5s-3.1-5-7-5zM4 8c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm4 0c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm4 0c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-default\"><path d=\"M0 4h4V0H0v4zm6 0h4V0H6v4zm6-4v4h4V0h-4zM0 10h4V6H0v4zm6 0h4V6H6v4zm6 0h4V6h-4v4zM0 16h4v-4H0v4zm6 0h4v-4H6v4zm6 0h4v-4h-4v4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-dropdown\"><path d=\"M1 1v6h14V1H1zm10 5L8 3l1-1 2 2 2-2 1 1-3 3zm-8 5h12V9H3v2zm0 4h12v-2H3v2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-expression\"><path d=\"M15 9l-4 4-2-2-1 1 3 3 5-5zM4 4v1h2v1H3v3h4V4H4zm2 4H4V7h2v1zM8 8h1v1H8z\"></path><path d=\"M1 1h13v7l1-1V0H0v12h6l1-1H1z\"></path><path d=\"M10 4h1v1h-1zM9 5h1v1H9zM11 5h1v1h-1zM11 3h1v1h-1zM9 3h1v1H9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-file\"><path d=\"M9 0v5h5z\"></path><path d=\"M8 0H2v16h12V6H8z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-html\"><path d=\"M4 4L0 8l4 4 1-1-3-3 3-3zM11 4l-1 1 3 3-3 3 1 1 4-4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-matrix\"><path d=\"M4 1C2.3 1 1 2.3 1 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"4\" cy=\"4\" r=\"1\"></circle><path d=\"M12 7c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3zm0-5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zM4 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM12 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-matrixdropdown\"><path d=\"M4 1C2.3 1 1 2.3 1 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"4\" cy=\"4\" r=\"1\"></circle><path d=\"M12 7c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3zm0-5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zM4 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"4\" cy=\"12\" r=\"1\"></circle><path d=\"M12 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-matrixdynamic\"><path d=\"M3 1C1.3 1 0 2.3 0 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"3\" cy=\"4\" r=\"1\"></circle><path d=\"M11 7c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3zm0-5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zM3 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM8 15h2l-2-2zM9.03 11.99l4.03-4.03 1.98 1.98-4.03 4.03z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-multipletext\"><path d=\"M0 2v12h16V2H0zm5 9H2V9h3v2zm0-4H2V5h3v2zm9 4H7V9h7v2zm0-4H7V5h7v2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-panel_dynamic\"><path d=\"M2 8h10v1H2zM2 11h8l1-1H2zM9 16h2l-2-2zM14 9l-4 4 2 2 4-4zM3 3v2H2l2 2 2-2H5V3zM11 5V3H9v2H8l2 2 2-2z\"></path><path d=\"M1 1h12v7l1-1V0H0v14h7l1-1H1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-panel\"><path d=\"M0 0v16h16V0H0zm15 15H1V1h14v14z\"></path><path d=\"M2 12h12v2H2zM2 9h12v2H2zM11 8L8 5h2V2h2v3h2zM5 8L2 5h2V2h2v3h2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-paneldynamic\"><path d=\"M2 8h10v1H2zM2 11h8l1-1H2zM9 16h2l-2-2zM14 9l-4 4 2 2 4-4zM3 3v2H2l2 2 2-2H5V3zM11 5V3H9v2H8l2 2 2-2z\"></path><path d=\"M1 1h12v7l1-1V0H0v14h7l1-1H1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-radiogroup\"><path d=\"M3 1C1.3 1 0 2.3 0 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm0 4c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zM8 3v2h8V3H8zm0 10h8v-2H8v2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-rating\"><path d=\"M0 7h1l1-1v5h1V5H2L0 7zm5 5h5V4H5v8zm1-5h2V6H6V5h3v3H7v2h2v1H6V7zm6-2v1h2v1h-2v1h2v2h-2v1h3V5h-3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-text\"><path d=\"M2 1v3h1V3h4v10H5v1h6v-1H9V3h4v1h1V1H2z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-fork_24x24\"><path opacity=\".9\" d=\"M-40-20c-1.2 0-2-.9-2-2v-2c0-1.1.9-2 2-2h.1c1.1 0 2 .9 2 2v2.1c-.1 1-1 1.9-2.1 1.9z\"></path><path opacity=\".5\" d=\"M-40-2c-1.2 0-2-.9-2-2v-2c0-1.1.9-2 2-2h.1c1.1 0 2 .9 2 2v2c-.1 1.1-1 2-2.1 2z\"></path><path opacity=\".2\" d=\"M-52-14c0-1.2.9-2 2-2h2.1c1.1 0 2 .9 2 2v.1c0 1.1-.9 2-2 2H-50c-1.1-.1-2-1-2-2.1z\"></path><path opacity=\".7\" d=\"M-34-14c0-1.2.9-2 2-2h2.1c1.1 0 2 .9 2 2v.1c0 1.1-.9 2-2 2H-32c-1.1-.1-2-1-2-2.1z\"></path><path opacity=\".1\" d=\"M-44.5-18.6c-.8.8-2.1.8-2.8.1l-1.2-1.2c-.8-.8-.8-2 0-2.8l.1-.1c.8-.8 2-.8 2.8 0l1.2 1.2c.7.8.7 2.1-.1 2.8z\"></path><path opacity=\".6\" d=\"M-31.5-5.5c-.8.8-2.1.8-2.8.1l-1.2-1.2c-.8-.8-.8-2 0-2.8l.1-.1c.8-.8 2-.8 2.8 0l1.2 1.2c.7.8.7 2-.1 2.8z\"></path><path opacity=\".3\" d=\"M-48.5-5.5c-.8-.8-.8-2.1-.1-2.8l1.2-1.2c.8-.8 2-.8 2.8 0l.1.1c.8.8.8 2 0 2.8l-1.2 1.2c-.7.7-2 .7-2.8-.1z\"></path><path opacity=\".8\" d=\"M-35.4-18.5c-.8-.8-.8-2.1-.1-2.8l1.2-1.2c.8-.8 2-.8 2.8 0l.1.1c.8.8.8 2 0 2.8l-1.2 1.2c-.8.7-2.1.7-2.8-.1z\"></path><path opacity=\".9\" fill=\"#9D9FA1\" d=\"M-22-13l2-2 4 4 9-9 2 2-11 11z\"></path><path d=\"M41-19h-1.2c-.2-.7-.4-1.3-.8-1.9l.8-.8c.4-.4.4-1 0-1.4l-.7-.7c-.4-.4-1-.4-1.4 0l-.8.8c-.6-.4-1.2-.6-1.9-.8V-25c0-.5-.5-1-1-1h-1c-.5 0-1 .5-1 1v1.2c-.7.2-1.3.4-1.9.8l-.8-.8c-.4-.4-1-.4-1.4 0l-.7.7c-.4.4-.4 1 0 1.4l.8.8c-.4.6-.6 1.2-.8 1.9H26c-.5 0-1 .5-1 1v1c0 .5.5 1 1 1h1.2c.2.7.4 1.3.8 1.9l-.8.8c-.4.4-.4 1 0 1.4l.7.7c.4.4 1 .4 1.4 0l.8-.8c.6.4 1.2.6 1.9.8v1.2c0 .5.5 1 1 1h1c.5 0 1-.5 1-1v-1.2c.7-.2 1.3-.4 1.9-.8l.8.8c.4.4 1 .4 1.4 0l.7-.7c.4-.4.4-1 0-1.4l-.8-.8c.4-.6.6-1.2.8-1.9H41c.5 0 1-.5 1-1v-1c0-.5-.5-1-1-1zm-7.5 5.5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z\"></path><path opacity=\".9\" fill=\"#9D9FA1\" d=\"M13-15v-3h-1.2c-.1-.4-.3-.8-.5-1.2l.9-.9-2.2-2-.9.9c-.4-.2-.8-.4-1.2-.5V-23H5v1.2c-.4.1-.8.3-1.2.5l-.8-.8L.8-20l.9.9c-.2.4-.4.8-.5 1.2H0v3h1.2c.1.4.3.8.5 1.2l-.9.7L3-10.8l.9-.9c.4.2.8.4 1.2.5v1.2h3v-1.2c.4-.1.8-.3 1.2-.5l.9.9 2.1-2.1-.9-.9c.2-.4.4-.8.5-1.2H13zm-6.5 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z\"></path><path opacity=\".6\" fill=\"#9D9FA1\" d=\"M23-9v-2h-1.1c-.1-.4-.2-.7-.4-1l.8-.8-1.4-1.4-.9.8c-.3-.2-.7-.3-1-.4V-15h-2v1.1c-.4.1-.7.2-1 .4l-.8-.8-1.4 1.4.8.8c-.2.3-.3.7-.4 1H13v2h1.1c.1.4.2.7.4 1l-.8.8 1.4 1.4.9-.7c.3.2.7.3 1 .4V-5h2v-1.1c.4-.1.7-.2 1-.4l.8.8 1.4-1.4-.8-.9c.2-.3.3-.7.4-1H23zm-5 1c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><path opacity=\".5\" fill=\"#9D9FA1\" d=\"M-69-7h3v5h-3z\"></path><path opacity=\".9\" fill=\"#9D9FA1\" d=\"M-69-23h3v5h-3z\"></path><path opacity=\".2\" fill=\"#9D9FA1\" d=\"M-72.993-13.993v3h-5v-3z\"></path><path opacity=\".7\" fill=\"#9D9FA1\" d=\"M-56.993-13.993v3h-5v-3z\"></path><path opacity=\".6\" fill=\"#9D9FA1\" d=\"M-64.615-7.549l2.121-2.12 3.536 3.535-2.122 2.121z\"></path><path opacity=\".1\" fill=\"#9D9FA1\" d=\"M-75.98-18.791l2.121-2.122 3.536 3.536-2.122 2.121z\"></path><path opacity=\".3\" fill=\"#9D9FA1\" d=\"M-72.505-9.669l2.121 2.121-3.535 3.536-2.122-2.121z\"></path><path opacity=\".8\" fill=\"#9D9FA1\" d=\"M-61.14-20.912l2.121 2.121-3.535 3.536-2.122-2.121z\"></path><path fill=\"#1AB394\" d=\"M21 6.5C21 4.6 19.4 3 17.5 3S14 4.6 14 6.5c0 1.4.8 2.6 2 3.2-.2 1-.7 1.8-1.7 2.3-.4.2-.9.4-1.3.6-.8.3-1.7.6-2.5.9-.2.1-.3.1-.5.2v-6c1.2-.6 2-1.8 2-3.2C12 2.6 10.4 1 8.5 1S5 2.6 5 4.5c0 1.4.8 2.6 2 3.2v9.7c-1.2.6-2 1.8-2 3.2C5 22.4 6.6 24 8.5 24s3.5-1.6 3.5-3.5c0-1.4-.8-2.6-2-3.2.1-.5.4-1 .9-1.2.3-.1.6-.3 1-.4 1.1-.4 2.1-.7 3.2-1.2 1.4-.6 2.5-1.5 3.1-2.9.2-.4.3-1.1.4-1.8C20 9.3 21 8.1 21 6.5zM8.5 3c.8 0 1.5.7 1.5 1.5S9.3 6 8.5 6 7 5.3 7 4.5 7.7 3 8.5 3zm0 19c-.8 0-1.5-.7-1.5-1.5S7.7 19 8.5 19s1.5.7 1.5 1.5S9.3 22 8.5 22zM16 6.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5S18.3 8 17.5 8 16 7.3 16 6.5z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-gear\"><path d=\"M12 7V5H9.9c-.1-.4-.3-.7-.5-1l1.5-1.5-1.4-1.4L8 2.6c-.3-.2-.6-.4-1-.5V0H5v2.1c-.4.1-.7.3-1 .5L2.5 1.1 1.1 2.5 2.6 4c-.2.3-.4.6-.5 1H0v2h2.1c.1.4.2.7.4 1L1.1 9.5l1.4 1.4L4 9.4c.3.2.7.3 1 .4V12h2V9.9c.4-.1.7-.2 1-.4L9.5 11l1.4-1.4L9.4 8c.2-.3.3-.7.4-1H12zM6 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-gearactive\"><path d=\"M12 7V5H9.9c-.1-.4-.3-.7-.5-1l1.5-1.5-1.4-1.4L8 2.6c-.3-.2-.6-.4-1-.5V0H5v2.1c-.4.1-.7.3-1 .5L2.5 1.1 1.1 2.5 2.6 4c-.2.3-.4.6-.5 1H0v2h2.1c.1.4.2.7.4 1L1.1 9.5l1.4 1.4L4 9.4c.3.2.7.3 1 .4V12h2V9.9c.4-.1.7-.2 1-.4L9.5 11l1.4-1.4L9.4 8c.2-.3.3-.7.4-1H12zM6 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplacecheck\"><path d=\"M2 7l1-1 2 2 5-5 1 1-6 6z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplacedelete\"><path d=\"M3 2L2 3l3 3-3 3 1 1 3-3 3 3 1-1-3-3 3-3-1-1-3 3z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplacedraggable\"><path d=\"M0 4h7v7H0z\"></path><path d=\"M2 3h6v6h1V2H2z\"></path><path d=\"M4 1h6v6h1V0H4z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplaceedit\"><path d=\"M1 11h3L1 8zM6 3L2 7l3 3 4-4zM11 4L8 1 7 2l3 3zM7 10h5v1H7z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplaceplus\"><path d=\"M11 5H7V1H5v4H1v2h4v4h2V7h4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-left\"><path d=\"M11 12l-2 2-6-6 6-6 2 2-4 4z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-new_24x24\"><path fill=\"#1AB394\" d=\"M18 11h-5V6h-3v5H5v3h5v5h3v-5h5z\"></path></symbol><symbol viewBox=\"0 0 20 20\" id=\"icon-noncommercial\"><path d=\"M10 0C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10S15.5 0 10 0zM2 10c0-1.4.4-2.8 1.1-3.9l7.6 7.6c-.3.1-.6.2-.9.2-1.1 0-2.1-.4-3-1.1l-1 1.8c.2.2.5.5.9.7s.9.4 1.4.5c.3.1.6.1.9.2v1h2v-1.3c.5-.1.9-.3 1.2-.5l1.7 1.7c-1.1.7-2.5 1.1-3.9 1.1-4.4 0-8-3.6-8-8zm14.1 5.1l-2.4-2.4v-.3c0-.6-.1-1.2-.3-1.6s-.5-.7-.8-.9c-.3-.2-.7-.4-1.1-.5l-1.2-.3c-.1-.1-.2-.1-.4-.2L8.4 7.4c0-.3.2-.6.4-.8.3-.2.7-.3 1.3-.3.8 0 1.6.3 2.4 1l.9-1.8c-.5-.4-1-.7-1.6-.9-.3-.1-.6-.2-.9-.2V3H9v1.4c-.7.1-1.3.3-1.7.7-.2.2-.4.4-.5.7L4.9 3.9C6.3 2.7 8 2 10 2c4.4 0 8 3.6 8 8 0 2-.7 3.7-1.9 5.1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-right\"><path d=\"M5 4l2-2 6 6-6 6-2-2 4-4z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-modified\"><path opacity=\".9\" d=\"M14 11V8h-1.2c-.1-.4-.3-.8-.5-1.2l.9-.8L11 3.8l-.9.9c-.3-.2-.7-.4-1.1-.5V3H6v1.2c-.4.1-.8.3-1.2.5L4 3.8 1.8 6l.9.9c-.2.3-.4.7-.5 1.1H1v3h1.2c.1.4.3.8.5 1.2l-.9.8L4 15.2l.9-.9c.4.2.8.4 1.2.5V16h3v-1.2c.4-.1.8-.3 1.2-.5l.9.9 2.1-2.1-.9-.9c.2-.4.4-.8.5-1.2H14zm-6.5 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z\"></path><path opacity=\".6\" d=\"M24 17v-2h-1.1c-.1-.4-.2-.7-.4-1l.8-.8-1.4-1.4-.9.8c-.3-.2-.7-.3-1-.4V11h-2v1.1c-.4.1-.7.2-1 .4l-.8-.8-1.4 1.4.8.8c-.2.3-.3.7-.4 1H14v2h1.1c.1.4.2.7.4 1l-.8.8 1.4 1.4.8-.8c.3.2.7.3 1 .4V21h2v-1.1c.4-.1.7-.2 1-.4l.8.8 1.4-1.4-.7-.9c.2-.3.3-.7.4-1H24zm-5 1c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-saved\"><path opacity=\".9\" d=\"M4 13l2-2 4 4 9-9 2 2-11 11z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-saving\"><path opacity=\".5\" d=\"M10 17h3v5h-3z\"></path><path opacity=\".9\" d=\"M10 1h3v5h-3z\"></path><path opacity=\".2\" d=\"M6 10v3H1v-3z\"></path><path opacity=\".7\" d=\"M22 10v3h-5v-3z\"></path><path opacity=\".6\" d=\"M14.39 16.45l2.12-2.121 3.536 3.535-2.121 2.121z\"></path><path opacity=\".1\" d=\"M2.954 5.136l2.121-2.121L8.61 6.55 6.49 8.672z\"></path><path opacity=\".3\" d=\"M6.49 14.328l2.12 2.122-3.535 3.535-2.121-2.121z\"></path><path opacity=\".8\" d=\"M17.925 3.015l2.121 2.12-3.535 3.536-2.122-2.12z\"></path></symbol></svg>"; /***/ }), /* 70 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"convert-action\">\n <span class=\"svda_question_action\">\n <!-- ko if: allowChangeType -->\n <select class=\"svda_current_type svd-main-color svd-light-bg-color\" data-bind=\"foreach: availableTypes, event: { change: onConvertType }, attr: {title: title}\">\n <option class=\"svd-light-bg-color\" data-bind=\"text: $data.name, value: $data.value, attr:{selected: $data.value === $parent.type ? 'selected': null}\"></option>\n </select>\n <!-- /ko -->\n <!-- ko ifnot: allowChangeType -->\n <span data-bind=\"text: text\" class=\"svda_current_type svd-main-color\"> </span>\n <!-- /ko -->\n </span>\n</script>\n\n<script type=\"text/html\" id=\"action-separator\">\n <span class=\"svda_action_separator svd-dark-border-color\">\n </span>\n</script>"; /***/ }), /* 71 */ /***/ (function(module, exports) { module.exports = "<div class=\"svd_container svd-light-bg-color\" data-bind=\"css: themeCss\">\n <!-- ko ifnot: haveCommercialLicense -->\n <div class=\"svd_commercial_container\">\n <a class=\"svd_commercial_text\" href=\"https://surveyjs.io/Licenses#BuildSurvey\" target=\"_blank\">\n <span>\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-noncommercial', size: 20\"></svg-icon>\n </span>\n <span class=\"svd_commercial_product svd-main-color\">SurveyJS Builder</span>\n <span class=\"svd_noncommercial_use svd-light-text-color\">for non-commercial use only</span>\n </a>\n </div>\n <!-- /ko -->\n <ul class=\"navbar-default container-fluid nav nav-tabs editor-tabs svd-light-bg-color\">\n <li class=\"nav-item\" data-bind=\"css: {active: koViewType() == 'designer'}\">\n <a class=\"nav-link\" href=\"#\" data-bind=\"click:selectDesignerClick, text: $root.getLocString('ed.designer')\"></a>\n </li>\n <li class=\"nav-item\" data-bind=\"visible: showJSONEditorTab, css: {active: koViewType() == 'editor'}\">\n <a class=\"nav-link\" href=\"#\" data-bind=\"click:selectEditorClick, text: $root.getLocString('ed.jsonEditor')\"></a>\n </li>\n <li class=\"nav-item\" data-bind=\"visible: showTestSurveyTab, css: {active: koViewType() == 'test'}\">\n <a class=\"nav-link\" href=\"#\" data-bind=\"click:selectTestClick, text: $root.getLocString('ed.testSurvey')\"></a>\n </li>\n <li class=\"nav-item\" data-bind=\"visible: showEmbededSurveyTab, css: {active: koViewType() == 'embed'}\">\n <a class=\"nav-link\" href=\"#\" data-bind=\"click:selectEmbedClick, text: $root.getLocString('ed.embedSurvey')\"></a>\n </li>\n </ul>\n\n <div class=\"panel card svd_content svd-dark-bg-color\">\n <div class=\"row svd_survey_designer\" data-bind=\"visible: koViewType() == 'designer'\">\n <div class=\"col-lg-2 col-md-2 col-sm-1 col-xs-1 svd_toolbox svd-dark-bg-color\">\n <!-- ko if: toolbox.koHasCategories -->\n <div class=\"panel-group\" role=\"tablist\" data-bind=\"foreach: toolbox.koCategories\">\n <div class=\"panel panel-info\">\n <div class=\"svd-toolbox-category-header\" role=\"tab\" data-bind=\"click: expand\">\n <span data-bind=\"css: { 'svd-main-color': !koCollapsed() }, text: name\"></span>\n <!-- ko if: koCollapsed -->\n <svg-icon class=\"icon-toolbox-arrow\" params=\"iconName: 'icon-arrow_down_10x10', size: 10\"></svg-icon>\n <!-- /ko -->\n <!-- ko ifnot: koCollapsed -->\n <svg-icon class=\"icon-toolbox-arrow svd-primary-icon\" params=\"iconName: 'icon-arrow_up_10x10', size: 10\"></svg-icon>\n <!-- /ko -->\n </div>\n <div role=\"tabpanel\" data-bind=\"css: { 'panel-collapse collapse': koCollapsed}\">\n <!-- ko foreach: items -->\n <div draggable=\"true\" class=\"svd_toolbox_item svd-light-border-color\" data-bind=\"click: $root.clickToolboxItem, event:{dragstart: function(el, e) { $root.draggingToolboxItem($data, e); return true;}, dragend: function(el, e) { $root.dragEnd(); }}\">\n <span data-bind=\"attr: {title: title}\">\n <svg-icon params=\"iconName: iconName\"></svg-icon>\n </span>\n <span class=\"svd_toolbox_item_text hidden-sm hidden-xs\" data-bind=\"text:title\"></span>\n </div>\n <!-- /ko -->\n </div>\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: !toolbox.koHasCategories() -->\n <div class=\"svd_toolbox_title hidden-sm hidden-xs\" data-bind=\"text: $root.getLocString('ed.toolbox')\"></div>\n <!-- ko foreach: toolbox.koItems -->\n <div draggable=\"true\" class=\"svd_toolbox_item svd-light-border-color\" data-bind=\"click: $root.clickToolboxItem, event:{dragstart: function(el, e) { $root.draggingToolboxItem($data, e); return true;}, dragend: function(el, e) { $root.dragEnd(); }}\">\n <span data-bind=\"attr: {title: title}\">\n <svg-icon params=\"iconName: iconName\"></svg-icon>\n </span>\n <span class=\"svd_toolbox_item_text hidden-sm hidden-xs\" data-bind=\"text:title\"></span>\n </div>\n <!-- /ko -->\n <!-- /ko -->\n </div>\n <div class=\"col-xs-11 svd_editors\" data-bind=\"css: {'col-lg-7 col-md-7 col-sm-8': koShowPropertyGrid, 'col-lg-10 col-md-10 col-sm-11': !koShowPropertyGrid(), 'svd_wide': !koShowPropertyGrid()}\">\n <div class=\"svd_toolbar\">\n <!-- ko foreach: toolbarItems -->\n <span class=\"svd_action\" data-bind=\"css: $data.css, visible: visible, attr: { id: id }\">\n <!-- ko template: { name: $data.template || 'svd-toolbar-button', data: $data.data || $data } -->\n <!-- /ko -->\n </span>\n <!-- /ko -->\n </div>\n <pages-editor params=\"editor:$data\" data-bind=\"visible: koShowPagesToolbox\">\n </pages-editor>\n <div class=\"svd_questions_editor svd-light-bg-color\" id=\"scrollableDiv\" data-bind=\"style: { height: koDesignerHeight }, event: { dragover: dragOverQuestionsEditor, drop: dropOnQuestionsEditor }\">\n <div id=\"surveyjs\"></div>\n <!-- ko if: isCurrentPageEmpty -->\n <div class=\"empty-message\" data-bind=\"text: $root.getLocString('survey.dropQuestion')\"></div>\n <!-- /ko -->\n </div>\n </div>\n <div class=\"col-lg-3 col-md-3 col-sm-3 hidden-xs svd_properties svd-light-border-color svd-light-bg-color\" data-bind=\"visible: koShowPropertyGrid\">\n <div class=\"svd_object_selector svd-light-border-color\">\n <div class=\"svd_custom_select\">\n <select id=\"objectSelector\" class=\"form-control\" data-bind=\"options: koObjects, optionsText: 'text', value: koSelectedObject\"></select>\n </div>\n <span data-bind=\"click: editCurrentObject, attr: { title: $root.getLocString('ed.editSelObject')}\">\n <svg-icon class=\"svd-primary-icon icon-edit\" params=\"iconName: 'icon-edit', size:24\"></svg-icon>\n </span>\n </div>\n <div class=\"svd_object_editor\" data-bind=\"style: {height: koDesignerHeight}\">\n <div data-bind=\"template: { name: 'objecteditor', data: selectedObjectEditor }\"></div>\n </div>\n </div>\n </div>\n\n <div data-bind=\"visible: koViewType() == 'editor'\">\n <div data-bind=\"template: { name: 'jsoneditor', data: jsonEditor }\"></div>\n </div>\n\n <div data-bind=\"visible: koViewType() == 'test', style: {width: koTestSurveyWidth}\">\n <div id=\"surveyjsExample\" data-bind=\"template: { name: 'surveylive', data: surveyLive }\"></div>\n </div>\n\n <div data-bind=\"visible: koViewType() == 'embed'\">\n <div data-bind=\"template: { name: 'surveyembeding', data: surveyEmbeding }\"></div>\n </div>\n </div>\n <div data-bind=\"template: { name: 'questioneditor', data: questionEditorWindow }\"></div>\n</div>"; /***/ }), /* 72 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"jsoneditor\">\n <div data-bind=\"visible: !hasAceEditor\">\n <textarea class=\"svd_json_editor_area\" data-bind=\"textInput:koText\"></textarea>\n <!-- ko foreach: koErrors -->\n <div>\n <span>Error: </span><span data-bind=\"text: text\"></span>\n </div>\n <!-- /ko -->\n </div>\n <div id=\"surveyjsJSONEditor\" class=\"svd_json_editor\"></div>\n</script>"; /***/ }), /* 73 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"surveys-manage\">\n <div class=\"svd-manage\">\n <div class=\"svd-manage-mask\" data-bind=\"visible: isLoading\"></div>\n <div class=\"svd-manage-control svd-light-border-color\">\n <select class=\"svd-manage-select\" data-bind=\"visible: !isEditMode(), options: surveys,\n optionsText: 'name',\n value: currentSurvey,\n optionsCaption: 'Choose survey to edit or start editing and survey will be saved automatically...'\"></select>\n <input type=\"text\" class=\"svd-manage-name\" data-bind=\"visible: isEditMode, value: currentSurveyName, event: { keyup: nameEditorKeypress }\"\n />\n </div>\n <div class=\"svd-manage-buttons\">\n <span class=\"icon\" data-bind=\"visible: currentSurvey, click: edit, css: cssEdit, attr: { title: titleEdit }\"></span>\n <span class=\"icon\" data-bind=\"visible: !isEditMode(), click: add, css: cssAdd, attr: { title: titleAdd }\"></span>\n <span class=\"icon icon-delete\" title=\"Delete current survey\" data-bind=\"visible: !isEditMode() && !surveyId() && currentSurvey(), click:remove\"></span>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"attach-survey\">\n <a target=\"_blank\" href=\"#\" data-bind=\"attr: { href: action, title: title }\">\n <span class=\"icon\" data-bind=\"css: innerCss\"></span>\n <span data-bind=\"text: title\"></span>\n </a>\n</script>"; /***/ }), /* 74 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"objecteditor\">\n <table class=\"table svd_table-nowrap svd_properties_grid\">\n <tbody data-bind=\"foreach: koProperties\">\n <!-- ko template: { name: 'objecteditorproperty', afterRender: $parent.koAfterRender } -->\n <!-- /ko -->\n </tbody>\n </table>\n</script>\n<script type=\"text/html\" id=\"objecteditorproperty\">\n <tr data-bind=\"click: $parent.changeActiveProperty($data), css: {'active': $parent.koActiveProperty() == $data}\">\n <td width=\"50%\">\n <span data-bind=\"text: displayName, attr: {title: title || displayName}\"></span>\n </td>\n <td class=\"svd-light-text-color\" width=\"50%\">\n <span data-bind=\"css: {'form-control': !editor.alwaysShowEditor && (koText() === '' || koText() === null) }, text: koText, visible: !koIsShowEditor(), attr: {title: koText}\"\n style=\"text-overflow:ellipsis;white-space:nowrap;overflow:hidden\"></span>\n <div data-bind=\"visible: koIsShowEditor()\">\n <!-- ko template: { name: 'propertyeditor-' + editorType, data: $data.editor } -->\n <!-- /ko -->\n </div>\n </td>\n </tr>\n</script>"; /***/ }), /* 75 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"svd-page-selector-template\">\n <div class=\"svd-page-selector svd_custom_select svd-light-bg-color svd-light-border-color\">\n <select data-bind=\"options: pagesSelection, value: pageSelection, optionsText:'name'\"></select>\n </div>\n <div class=\"svd-page-scroller-arrow\" data-bind=\"click: moveLeft, attr: {title: getLocString('ed.moveLeft')}\">\n <span>\n <svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-left'\"></svg-icon>\n </span>\n </div>\n\n <div class=\"svd-pages\" data-bind=\"sortable: {foreach: editor.pages, options: sortableOptions}, event: {wheel: onWheel}\">\n <div class=\"svd-page svd-light-border-color\" data-bind=\"css: $parent.getPageClass($data), click: $parent.onPageClick\">\n <span class=\"svd-page-name\" data-bind=\"text: name\"></span>\n <span class=\"svd-page-actions-container\">\n <svg-icon data-bind=\"css: $parent.getPageMenuIconClass($data)\" params=\"iconName: $parent.getPageMenuIconClass($data), size: 12\"></svg-icon>\n <div style=\"position: static\">\n <div class=\"svd-page-actions svd-dark-border-color svd-light-bg-color\" data-bind=\"visible: $parent.showActions($data)\">\n <span class=\"svd-page-action\" data-bind=\"click: function(model, event) {$parent.showPageSettings($data); event.stopPropagation();}, attr: {title: $parent.getLocString('ed.editPage')}\">\n <span>\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actioneditelement'\"></svg-icon>\n </span>\n <span class=\"svd-main-color\" data-bind=\"text: $parent.getLocString('ed.edit')\"></span>\n </span>\n <span class=\"svd-page-action\" data-bind=\"click: function(model, event) {$parent.deletePage($data); event.stopPropagation();}, attr: {title: $parent.getLocString('ed.deletePage')}, visible: !$parent.isLastPage()\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actiondelete'\"></svg-icon>\n </span>\n <span class=\"svda_action_separator svd-dark-border-color\" data-bind=\"visible: !$parent.isLastPage()\"></span>\n <span class=\"svd-page-action\" data-bind=\"click: function(model, event) {$parent.copyPage($data); event.stopPropagation();}, attr: {title: $parent.getLocString('survey.Copy')}\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actioncopy'\"></svg-icon>\n </span>\n </div>\n </div>\n </span>\n </div>\n </div>\n <div class=\"svd-page-scroller-arrow\" data-bind=\"click: moveRight, attr: {title: getLocString('ed.moveRight')}\">\n <span>\n <svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-right'\"></svg-icon>\n </span>\n </div>\n <div class=\"svd-page-add\" data-bind=\"click: addPage, attr: {title: getLocString('ed.addNewPage')}\">\n <span>\n <svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-add'\"></svg-icon>\n </span>\n </div>\n</script>"; /***/ }), /* 76 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-boolean\">\n <div class=\"sjs-cb-wrapper\">\n <label>\n <div class=\"sjs-cb-container\">\n <input class=\"svd_editor_control\" type=\"checkbox\" data-bind=\"checked: koValue, disable: $data.readOnly\">\n <span class=\"checkmark\" data-bind=\"css: { 'svd-main-background-color': koValue, 'svd-light-background-color': !koValue() }\"></span>\n <!-- ko if: $data.isDiplayNameVisible -->\n <span class=\"sjs-cb-label\" data-bind=\"text: $data.displayName\"></span>\n <!-- /ko -->\n </div>\n </label>\n </div>\n</script>"; /***/ }), /* 77 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-cells\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-cells\">\n <div class=\"panel card\">\n <div data-bind=\"visible:!koCanEdit(), text: $root.getLocString('pe.cellsEmptyRowsColumns')\"></div>\n <div data-bind=\"visible: koCanEdit\" style=\"overflow:auto\">\n <table class=\"table\">\n <thead>\n <tr>\n <th></th>\n <!-- ko foreach: koColumns -->\n <th>\n <span data-bind=\"text:$data\"></span>\n </th>\n <!-- /ko -->\n </tr>\n </thead>\n <tbody>\n <!-- ko foreach: koRows -->\n <tr>\n <td>\n <span data-bind=\"text:rowText\"></span>\n </td>\n <!-- ko foreach: koCells -->\n <td style=\"min-width:120px\">\n <textarea rows=\"2\" cols=\"25\" class=\"form-control\" data-bind=\"textInput:text\"></textarea>\n </td>\n <!-- /ko -->\n </tr>\n <!-- /ko -->\n </tbody>\n </table>\n </div>\n </div>\n</script>"; /***/ }), /* 78 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-condition\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-condition\">\n <div class=\"propertyeditor-condition\">\n <div class=\"form-inline form-group\">\n <div class=\"form-control svd_custom_select\">\n <select style=\"max-width:200px\" data-bind=\"options: koAddConditionQuestions, value: koAddConditionQuestion, optionsCaption: addConditionQuestionOptions\"></select>\n </div>\n <div class=\"form-control svd_custom_select\">\n <select data-bind=\"options:availableOperators, optionsValue: 'name', optionsText: 'text', value:koAddConditionOperator\"></select>\n </div>\n <input class=\"form-control\" type=\"text\" data-bind=\"textInput:koAddConditionValue, enable: koAddContionValueEnabled\" style=\"width:120px\"\n />\n <input type=\"button\" class=\"form-control btn btn-primary\" data-bind=\"enable: koCanAddCondition, click: onConditionAddClick, value: koAddConditionButtonText\"\n />\n <div class=\"svd_wrap_elements\" data-bind=\"visible:koHasValueSurvey\">\n <survey-widget params=\"survey: koValueSurvey\"></survey-widget>\n </div>\n </div>\n <!-- ko if: $parent.hasAceEditor -->\n <span data-bind=\"text:$data.getLocString('pe.aceEditorHelp')\"></span>\n <div id=\"expression-ace-editor\" style=\"height: 200px; width: 100%;\" data-bind=\"value:koValue, aceEditor:{questions: $parent.availableQuestions, question: $data.editingObject, editor: $parent}\"></div>\n <!-- /ko -->\n\n <!-- ko if: !$parent.hasAceEditor -->\n <textarea class=\"svd-dark-border-color\" data-bind=\"value:koValue\" rows=\"8\" autofocus=\"autofocus\"></textarea>\n <!-- /ko -->\n\n <!-- <div class=\"assistant\">\n <div class=\"assistant-title\" data-bind=\"text:$data.getLocString('pe.assistantTitle')\"></div>\n <div class=\"assistant-content\" data-bind=\"foreach:availableQuestions\">\n <div class=\"assistant-item\" data-bind=\" text:name, click:function () { $parent.insertQuestion($data, $element); } \"></div>\n </div>\n </div> -->\n <span data-bind=\"text:$data.getLocString('pe.conditionHelp')\" style=\"white-space:normal \"></span>\n <div data-bind=\"visible: $data.hasLocString('pe.conditionShowMoreUrl')\">\n <a data-bind=\"attr: { href: $data.getLocString('pe.conditionShowMoreUrl')}, text:$data.getLocString('pe.showMore')\" target=\"_blank\"></a>\n </div>\n </div>\n</script>"; /***/ }), /* 79 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-custom\">\n <!-- ko template: { name: \"propertyeditor-customcontent\", data: $data, afterRender: $data.koAfterRender } --><!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditor-customcontent\"><div></div></script>"; /***/ }), /* 80 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-value\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-value\">\n <form>\n <div class=\"svd_wrap_elements\">\n <survey-widget params=\"survey: koSurvey\"></survey-widget>\n </div>\n </form>\n</script>"; /***/ }), /* 81 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-dropdown\">\n <div class=\"svd_custom_select svd_property_editor_dropdown\">\n <select class=\"form-control svd_editor_control\" data-bind=\"value: koValue, disable: readOnly, options: koChoices, optionsValue: 'value', optionsText: 'text'\" style=\"width:100%\"></select>\n </div>\n</script> "; /***/ }), /* 82 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-expression\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-expression\">\n <div class=\"propertyeditor-expression\">\n <!-- ko if: $parent.hasAceEditor -->\n <span data-bind=\"text:$root.getLocString('pe.aceEditorHelp')\"></span>\n <div id=\"expression-ace-editor\" style=\"height: 400px; width: 100%;\" data-bind=\"value:koValue, aceEditor: {questions: $parent.availableQuestions, question: $data.editingObject, editor: $parent}\"></div>\n <!-- /ko -->\n\n <!-- ko if: !$parent.hasAceEditor -->\n <textarea class=\"svd-dark-border-color\" data-bind=\"value:koValue\" rows=\"8\" autofocus=\"autofocus\"></textarea>\n <!-- /ko -->\n\n <!-- <div class=\"assistant\">\n <div class=\"assistant-title\" data-bind=\"text:$root.getLocString('pe.assistantTitle')\"></div>\n <div class=\"assistant-content\" data-bind=\"foreach:availableQuestions\">\n <div class=\"assistant-item\" data-bind=\"text:name, click:function () { $parent.insertQuestion($data, $element); } \"></div>\n </div>\n </div> -->\n <span data-bind=\"text:$root.getLocString('pe.expressionHelp')\" style=\"white-space:normal\"></span>\n <!-- <div>\n <a data-bind=\"text:$root.getLocString('pe.showMore')\" target=\"_blank\" href=\"https://surveyjs.io/Documentation/LibraryParameter?id=QuestionBase¶meter=visibleIf\"></a>\n </div> -->\n </div>\n</script>"; /***/ }), /* 83 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-html\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } --><!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-html\">\n <textarea class=\"form-control\" data-bind=\"value:koValue, disable: readOnly\" style=\"width:100%\" rows=\"10\" autofocus=\"autofocus\"></textarea>\n</script>\n"; /***/ }), /* 84 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-itemvalues\">\n <!-- ko template: { name: 'propertyeditor-modal' } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-itemvalues\">\n <div data-bind=\"visible: koIsList\">\n <div style=\"margin-bottom:3px\" data-bind=\"visible: koShowTextView\">\n <button class=\"btn btn-sm btn-xs\" data-bind=\"css: {'btn-primary': koActiveView() === 'form', 'btn-link': koActiveView() !== 'form'}, click:changeToFormViewClick, text: $root.getLocString('pe.formEntry')\"></button>\n <button class=\"btn btn-sm btn-xs\" data-bind=\"css: {'btn-primary': koActiveView() !== 'form', 'btn-link': koActiveView() === 'form'}, click:changeToTextViewClick, text: $root.getLocString('pe.fastEntry')\"></button>\n </div>\n <div data-bind=\"visible:koActiveView() == 'form'\" style=\"overflow-y: auto; overflow-x:hidden; max-height:400px;min-height:200px\">\n <table class=\"svd_items_table\">\n <thead>\n <tr>\n <th></th>\n <!-- ko foreach: columns -->\n <th data-bind=\"text: text\"></th>\n <!-- /ko -->\n <th></th>\n </tr>\n </thead>\n <!-- ko template: { name: 'propertyeditor-itemvalues-items' } -->\n <!-- /ko -->\n </table>\n </div>\n <div class=\"svd-items-control-footer\" data-bind=\"visible:koActiveView() == 'form'\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: koAllowAddRemoveItems, click: onAddClick, value: $root.getLocString('pe.addNew')\"\n />\n <input type=\"button\" class=\"btn btn-danger\" data-bind=\"visible: koAllowAddRemoveItems, click: onClearClick, value: $root.getLocString('pe.removeAll')\"\n />\n </div>\n <div data-bind=\"visible:koActiveView() != 'form'\">\n <textarea class=\"form-control\" data-bind=\"textInput: koItemsText\" style=\"overflow-y: auto; overflow-x:hidden; max-height:400px; min-height:250px; width:100%\"></textarea>\n </div>\n </div>\n <!-- ko if: !koIsList() -->\n <!-- ko template: { name: \"propertyeditorcontent-nested\", data: $data } -->\n <!-- /ko -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditor-itemvalues-items\">\n <tbody data-bind=\"sortable: { foreach: koItems, options: sortableOptions }\">\n <tr>\n <td class=\"svd-itemvalue-actions-container\">\n <div class=\"svd-drag-handle svd-itemvalue-action\">\n ☰\n </div>\n <button type=\"button\" class=\"btn btn-sm svd-textitems-edit svd-itemvalue-action\" data-bind=\"visible: $parent.hasDetailButton, click: $parent.onEditItemClick\">\n <span class=\"glyphicon glyphicon-edit\" data-bind=\"text: $root.getLocString('pe.itemValueEdit')\"></span>\n </button>\n </td>\n <!-- ko foreach: cells -->\n <td>\n <!-- ko template: { name: 'propertyeditor', data: objectProperty.editor } -->\n <!-- /ko -->\n </td>\n <!-- /ko -->\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-xs btn-danger\" data-bind=\"visible: $parent.koAllowAddRemoveItems, click: $parent.onDeleteClick\">\n <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span>\n </button>\n </td>\n </tr>\n </tbody>\n</script>"; /***/ }), /* 85 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-matrixdropdowncolumns\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-matrixdropdowncolumns\">\n <div data-bind=\"visible: koIsList\">\n <table class=\"svd_items_table svd-matrixdropdowncolumns-table\">\n <thead>\n <tr>\n <th></th>\n <!-- ko foreach: columns -->\n <th data-bind=\"text: text\"></th>\n <!-- /ko -->\n <th></th>\n </tr>\n </thead>\n <tbody data-bind=\"sortable: { foreach: koItems, options: { handle: '.svd-drag-handle', animation: 150 } }\">\n <tr>\n <td class=\"svd-itemvalue-actions-container\">\n <div class=\"svd-drag-handle svd-itemvalue-action\">\n ☰\n </div>\n <button type=\"button\" class=\"btn btn-sm svd-textitems-edit svd-itemvalue-action\" data-bind=\"click: $parent.onEditItemClick\">\n <span class=\"glyphicon glyphicon-edit\" data-bind=\"text: $root.getLocString('pe.edit')\"></span>\n </button>\n </td>\n <!-- ko foreach: cells -->\n <td>\n <!-- ko template: { name: 'propertyeditor', data: objectProperty.editor } -->\n <!-- /ko -->\n </td>\n <!-- /ko -->\n <td class=\"svd-textitems-column\">\n <button type=\"button\" class=\"btn btn-sm btn-danger\" data-bind=\"visible: $parent.koAllowAddRemoveItems, click: $parent.onDeleteClick\">\n <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"svd-items-control-footer\" data-bind=\"visible: koAllowAddRemoveItems\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: onAddClick, value: $root.getLocString('pe.addNew')\" />\n <input type=\"button\" class=\"btn btn-danger\" data-bind=\"click: onClearClick, value: $root.getLocString('pe.removeAll')\" />\n </div>\n </div>\n <!-- ko if: !koIsList() -->\n <!-- ko template: { name: \"propertyeditorcontent-nested\", data: $data } -->\n <!-- /ko -->\n <!-- /ko -->\n</script>"; /***/ }), /* 86 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-modal\">\n <div class=\"input-group\" data-bind=\"visible:!$data.isEditable\">\n <a class=\"form-control\" data-bind=\"click: $data.onShowModal, attr: {'data-target' : modalNameTarget}\">\n <span data-bind=\"text: koText\"></span>\n </a>\n <div class=\"input-group-addon\">\n <span class=\"glyphicon glyphicon-edit\" aria-hidden=\"true\" data-bind=\"click: $data.onShowModal, attr: {'data-target' : modalNameTarget}, text: $root.getLocString('pe.edit')\"></span>\n </div>\n </div>\n <div class=\"input-group\" data-bind=\"visible:$data.isEditable\">\n <input class=\"form-control svd_editor_control\" type=\"text\" data-bind=\"value: koValue\" />\n <div class=\"input-group-addon\">\n <span class=\"glyphicon glyphicon-edit\" aria-hidden=\"true\" data-bind=\"click: $data.onShowModal, attr: {'data-target' : modalNameTarget}, text: $root.getLocString('pe.edit')\"></span>\n </div>\n </div>\n\n <div data-bind=\"attr: {id : modalName}\" class=\"modal\" role=\"dialog\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" data-bind=\"click: onResetClick\">×</button>\n <h4 class=\"modal-title\" data-bind=\"text:$data.koTitleCaption\"></h4>\n </div>\n <div class=\"modal-body svd_notopbottompaddings\">\n <!-- ko template: { name: 'propertyeditor-modalcontent', data: $data } -->\n <!-- /ko -->\n </div>\n <div class=\"modal-footer\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: $data.koShowApplyButton, click: $data.onApplyClick, value: $root.getLocString('pe.apply')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-default btn-secondary\" data-bind=\"click: $data.onOkClick, value: $root.getLocString('pe.ok')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $data.onResetClick, value: $root.getLocString('pe.cancel')\"\n style=\"width:100px\" />\n </div>\n </div>\n </div>\n </div>\n</script>"; /***/ }), /* 87 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-modalcontent\">\n <div data-bind=\"html: $data.koHtmlTop\"></div>\n <!-- ko template: { name: 'propertyeditorcontent-' + editorType, data: $data, afterRender: $data.koAfterRender } -->\n <!-- /ko -->\n <div data-bind=\"html: $data.koHtmlBottom\"></div>\n</script>"; /***/ }), /* 88 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-multiplevalues\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" class=\"btn-xs\" id=\"propertyeditorcontent-multiplevalues\">\n <div style=\"max-height:300px; overflow-y:scroll;\">\n <!-- ko foreach: { data: koItems, as: 'item'} -->\n <div data-bind=\"style:{display: 'inline-block'\">\n <label>\n <input type=\"checkbox\" data-bind=\"attr: {value: item.value}, checked: $parent.koEditingValue\" />\n <span class=\"checkbox-material\">\n <span class=\"check\"></span>\n </span>\n <span style=\"position: static;\" data-bind=\"text: item.text\"></span>\n </label>\n </div>\n <!-- /ko -->\n </div>\n</script>"; /***/ }), /* 89 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditorcontent-nested\">\n <div style=\"padding: 5px\">\n <button type=\"button\" class=\"btn btn-sm\" data-bind=\"click: onCancelEditItemClick\">\n <span class=\"glyphicon glyphicon-list-alt\"></span>\n </button>\n <span data-bind=\"text: koEditorName\"></span>\n </div>\n <!-- ko template: { name: \"questioneditor-content\", data: koEditItem().itemEditor } -->\n <!-- /ko -->\n</script>"; /***/ }), /* 90 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-number\">\n <input class=\"form-control svd_editor_control\" type=\"number\" data-bind=\"value: koValue, disable: readOnly\" style=\"width:100%\" />\n</script>"; /***/ }), /* 91 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-restfull\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-restfull\">\n <form>\n <div class=\"form-group\" data-bind=\"foreach: koItems\">\n <label data-bind=\"attr: {for: name}, text: $root.getLocString('pe.'+name)\"></label>\n <input type=\"text\" data-bind=\"attr: {id: name}, value:koValue\" class=\"form-control\"></input>\n </div>\n <div class=\"form-group\">\n <label for=\"titleName\">\n <span data-bind=\"text:$root.getLocString('pe.testService')\"></span>\n </label>\n <div class=\"form-control svd_custom_select\" style=\"display: block;\">\n <select data-bind=\"options: question.koVisibleChoices, optionsText: 'text', optionsValue: 'value', optionsCaption: question.optionsCaption\"></select>\n </div>\n </div>\n </form>\n</script>"; /***/ }), /* 92 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-string\">\n <input class=\"form-control svd_editor_control\" type=\"text\" data-bind=\"value: koValue, disable: readOnly, attr: {placeholder: defaultValue}\" style=\"width:100%\" />\n</script>"; /***/ }), /* 93 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-text\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } --><!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-text\">\n <textarea class=\"form-control\" data-bind=\"value:koValue, disable: readOnly, attr: {rows: isDiplayNameVisible ? '2' : '5'}\" style=\"width:100%\" autofocus=\"autofocus\"></textarea>\n</script>"; /***/ }), /* 94 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-textitems\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-textitems\">\n <div class=\"panel card\">\n <table class=\"table\" data-bind=\"visible: koIsList\">\n <thead>\n <tr>\n <th data-bind=\"text: $root.getLocString('pe.isRequired')\"></th>\n <th data-bind=\"text: $root.getLocString('pe.name'), style: {width: isTitleVisible? '': '100%'}\"></th>\n <th data-bind=\"visible: isTitleVisible, text: $root.getLocString('pe.title')\"></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <!-- ko foreach: koItems -->\n <tr>\n <td class=\"svd-textitems-column\" style=\"width: 130px;\">\n <div class=\"svd-textitems-isrequired\">\n <!-- ko template: { name: \"propertyeditor-boolean\", data: { koValue: koIsRequired } } -->\n <!-- /ko -->\n </div>\n <button type=\"button\" class=\"btn btn-sm svd-textitems-edit\" data-bind=\"click: $parent.onEditItemClick, attr: { title: $root.getLocString('pe.edit') }\">\n <span class=\"glyphicon glyphicon-edit\" data-bind=\"text: $root.getLocString('pe.edit')\"></span>\n </button>\n </td>\n <td>\n <input type=\"text\" class=\"form-control\" data-bind=\"value:koName, style: {width: $parent.isTitleVisible? '180px': '100%'}\"\n />\n </td>\n <td data-bind=\"visible: $parent.isTitleVisible\">\n <input type=\"text\" class=\"form-control\" data-bind=\"value:koTitle\" style=\"width:180px\" />\n </td>\n <td class=\"svd-textitems-column\">\n <button type=\"button\" class=\"btn btn-sm btn-danger\" data-bind=\"visible: $parent.koAllowAddRemoveItems, click: $parent.onDeleteClick, attr: { title: $root.getLocString('pe.delete') }\">\n <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span>\n </button>\n </td>\n </tr>\n <!-- /ko -->\n <tr>\n <td colspan=\"4\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: koAllowAddRemoveItems, click: onAddClick, value: $root.getLocString('pe.addNew')\"\n />\n <input type=\"button\" class=\"btn btn-danger\" data-bind=\"visible: koAllowAddRemoveItems, click: onClearClick, value: $root.getLocString('pe.removeAll')\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n <!-- ko if: !koIsList() -->\n <!-- ko template: { name: \"propertyeditorcontent-nested\", data: $data } -->\n <!-- /ko -->\n <!-- /ko -->\n </div>\n</script>"; /***/ }), /* 95 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-triggers\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-triggers\">\n <div class=\"propertyeditor-triggers\">\n <div class=\"input-group form-group\">\n <div class=\"input-group-addon first-addon\" data-bind=\"visible: koAllowAddRemoveItems\">\n <div class=\"ddmenu-container\">\n <div style=\"-webkit-tap-highlight-color:rgba(0,0,0,0)\" onclick=\"return true\"></div>\n\n <div class=\"ddmenu\">\n <span tabindex=\"0\" data-bind=\"attr: { title: $root.getLocString('pe.addNew') }\">\n <span class=\"glyphicon glyphicon-plus svd-main-color\"></span>\n </span>\n <div tabindex=\"0\" onclick=\"return true\"></div>\n <ul class=\"svd-light-bg-color\">\n <!-- ko foreach: koTriggers -->\n <li>\n <a data-bind=\"click: $parent.onAddClick, text:$data.text\"></a>\n </li>\n <!-- /ko -->\n </ul>\n </div>\n </div>\n </div>\n <div class=\"form-control svd_custom_select\">\n <select data-bind=\"options: koItems, optionsText: 'koText', value: koSelected\"></select>\n </div>\n <span data-bind=\"visible: koAllowAddRemoveItems, attr: { title: $root.getLocString('pe.delete') }, enable: koSelected() != null, click: onDeleteClick\"\n class=\"input-group-addon btn-danger\">\n <span class=\"glyphicon glyphicon-remove\"></span>\n </span>\n </div>\n <div data-bind=\"visible: koSelected() == null\">\n <div data-bind=\"visible: koQuestionNames().length == 0, text: $root.getLocString('pe.noquestions')\"></div>\n <div data-bind=\"visible: koQuestionNames().length > 0, text: $root.getLocString('pe.createtrigger')\"></div>\n </div>\n <div data-bind=\"visible: koSelected() != null\">\n <div data-bind=\"with: koSelected\">\n <div class=\"form-inline form-group\">\n <span class=\"input-group\" data-bind=\"text: $root.getLocString('pe.triggerOn')\"></span>\n <div class=\"form-control svd_custom_select\">\n <select data-bind=\"options:$parent.koQuestionNames, value: koName\"></select>\n </div>\n <div class=\"form-control svd_custom_select\">\n <select data-bind=\"options:availableOperators, optionsValue: 'name', optionsText: 'text', value:koOperator\"></select>\n </div>\n <input class=\"form-control\" type=\"text\" data-bind=\"visible: koRequireValue, value:koValue\" />\n </div>\n\n <!-- ko if: koType() == 'visibletrigger' -->\n <div class=\"row\">\n <div class=\"col-lg-6 col-sm-6\">\n <!-- ko template: { name: 'propertyeditor-triggersitems', data: pages } -->\n <!-- /ko -->\n </div>\n <div class=\"col-lg-6 col-sm-6\">\n <!-- ko template: { name: 'propertyeditor-triggersitems', data: questions } -->\n <!-- /ko -->\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'completetrigger' -->\n <div class=\"row\">\n <div style=\"margin: 10px\" data-bind=\"text: $root.getLocString('pe.triggerCompleteText')\"></div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'setvaluetrigger' -->\n <div class=\"row\">\n <div class=\"col-lg-6 col-sm-6\">\n <div class=\"form-group\">\n <div data-bind=\"text: $root.getLocString('pe.triggerSetToName')\"></div>\n <input class=\"form-control\" type=\"text\" data-bind=\"value:kosetToName\" />\n </div>\n </div>\n <div class=\"col-lg-6 col-sm-6\">\n <div class=\"form-group\">\n <div data-bind=\"text: $root.getLocString('pe.triggerSetValue')\">\n </div>\n <input class=\"form-control\" type=\"text\" data-bind=\"value:kosetValue\" />\n </div>\n </div>\n </div>\n <!-- ko template: { name: \"propertyeditor-boolean\", data: { koValue: koisVariable, displayName: $root.getLocString('pe.triggerIsVariable') } } -->\n <!-- /ko -->\n <!-- /ko -->\n </div>\n </div>\n </div>\n</script>"; /***/ }), /* 96 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-triggersitems\">\n <div>\n <div class=\"form-group\" data-bind=\"text: title\"></div>\n <div class=\"form-group input-group\">\n <select class=\"form-control\" multiple=\"multiple\" data-bind=\"options:koChoosen, value: koChoosenSelected\"></select>\n <span class=\"input-group-addon btn-danger\" data-bind=\"enable: koChoosenSelected() != null, click: onDeleteClick\">\n <span class=\"glyphicon glyphicon-remove\"></span>\n </span>\n </div>\n <div class=\"form-group input-group\">\n <div class=\"form-control svd_custom_select\">\n <select data-bind=\"options:koObjects, value: koSelected\"></select>\n </div>\n <span class=\"input-group-addon btn-default\" data-bind=\"enable: koSelected() != null, click: onAddClick\">\n <span class=\"glyphicon glyphicon-plus svd-main-color\"></span>\n </span>\n </div>\n </div>\n</script>"; /***/ }), /* 97 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-validators\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-validators\">\n <div class=\"propertyeditor-validators\">\n <div class=\"input-group form-group\">\n <div class=\"input-group-addon first-addon\" data-bind=\"visible: koAllowAddRemoveItems\">\n <div class=\"ddmenu-container\">\n <div style=\"-webkit-tap-highlight-color:rgba(0,0,0,0)\" onclick=\"return true\"></div>\n\n <div class=\"ddmenu\">\n <span tabindex=\"0\">\n <span class=\"glyphicon glyphicon-plus svd-main-color\"></span>\n </span>\n\n <div tabindex=\"0\" onclick=\"return true\"></div>\n <ul class=\"svd-light-bg-color\">\n <!-- ko foreach: koValidators -->\n <li>\n <a href=\"#\" data-bind=\"click: $parent.onAddClick\">\n <span data-bind=\"text:$data.text\"></span>\n </a>\n </li>\n <!-- /ko -->\n </ul>\n </div>\n </div>\n </div>\n <div class=\"form-control svd_custom_select\">\n <select data-bind=\"options: koItems, optionsText: 'text', value: koSelected\"></select>\n </div>\n <span class=\"input-group-addon btn-danger\" data-bind=\"visible: koAllowAddRemoveItems, enable: koSelected() != null, click: onDeleteClick\">\n <span class=\"glyphicon glyphicon-remove\"></span>\n </span>\n </div>\n <div data-bind=\"template: { name: 'objecteditor', data: selectedObjectEditor }\"></div>\n </div>\n</script>"; /***/ }), /* 98 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor\">\n <label data-bind=\"text:displayName, visible: showDisplayNameOnTop\"></label>\n <div class=\"alert alert-danger\" role=\"alert\" data-bind=\"visible:koHasError\">\n <span class=\"glyphicon glyphicon-exclamation-sign\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Error:</span>\n <span data-bind=\"text:koErrorText\"></span>\n </div>\n <!-- ko template: {name: $data.contentTemplateName, data: $data} -->\n <!-- /ko -->\n</script>"; /***/ }), /* 99 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"questioneditor-content\">\n <ul class=\"nav nav-tabs\" data-bind=\"foreach: koTabs\">\n <li class=\"nav-item\" role=\"presentation\" data-bind=\"css: {active: $parent.koActiveTab() == $data.name}, click: $parent.onTabClick\">\n <a class=\"nav-link\" data-bind=\"css: {active: $parent.koActiveTab() == $data.name}\">\n <span data-bind=\"text:$data.title\"></span>\n </a>\n </li>\n </ul>\n <!-- ko foreach: koTabs -->\n <div data-bind=\"if: $parent.koActiveTab() === $data.name\" style=\"margin-top:5px\">\n <!-- ko template: { name: $data.htmlTemplate, data: $data.templateObject, afterRender: $data.koAfterRender } -->\n <!-- /ko -->\n </div>\n <!-- /ko -->\n</script>"; /***/ }), /* 100 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"questioneditor\">\n <div id=\"surveyquestioneditorwindow\" class=\"modal\" data-bind=\"with:koEditor\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" data-bind=\"click: onResetClick\">×</button>\n <h4 class=\"modal-title\" data-bind=\"text:koTitle\"></h4>\n </div>\n <div class=\"modal-body svd_notopbottompaddings\">\n <!-- ko template: { name: \"questioneditor-content\", data: $data } -->\n <!-- /ko -->\n </div>\n <div class=\"modal-footer\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: koShowApplyButton, click: onApplyClick, value: $root.getLocString('pe.apply')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-default btn-secondary\" data-bind=\"click: onOkClick, value: $root.getLocString('pe.ok')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: onResetClick, value: $root.getLocString('pe.cancel')\" style=\"width:100px\"\n />\n </div>\n </div>\n </div>\n </div>\n</script>"; /***/ }), /* 101 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"questioneditortab\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <!-- ko foreach: properties.rows -->\n <div class=\"form-group\">\n <!-- ko foreach: properties -->\n <!-- ko template: { name: 'propertyeditor', data: objectProperty.editor } --><!-- /ko -->\n <!-- /ko -->\n </div>\n <!-- /ko -->\n </div>\n </div>\n</script>"; /***/ }), /* 102 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"surveyembeding\">\n <div class=\"row\">\n <div class=\"form-control svd_custom_select svd_embed_tab\">\n <select data-bind=\"value:koLibraryVersion\">\n <option value=\"angular\" data-bind=\"text: $root.getLocString('ew.angular')\"></option>\n <option value=\"jquery\" data-bind=\"text: $root.getLocString('ew.jquery')\"></option>\n <option value=\"knockout\" data-bind=\"text: $root.getLocString('ew.knockout')\"></option>\n <option value=\"react\" data-bind=\"text: $root.getLocString('ew.react')\"></option>\n <option value=\"vue\" data-bind=\"text: $root.getLocString('ew.vue')\"></option>\n </select>\n </div>\n <div class=\"form-control svd_custom_select svd_embed_tab\">\n <select data-bind=\"value:koScriptUsing\">\n <option value=\"bootstrap\" data-bind=\"text: $root.getLocString('ew.bootstrap')\"></option>\n <option value=\"standard\" data-bind=\"text: $root.getLocString('ew.standard')\"></option>\n </select>\n </div>\n <div class=\"form-control svd_custom_select svd_embed_tab\">\n <select data-bind=\"value:koShowAsWindow\">\n <option value=\"page\" data-bind=\"text: $root.getLocString('ew.showOnPage')\"></option>\n <option value=\"window\" data-bind=\"text: $root.getLocString('ew.showInWindow')\"></option>\n </select>\n </div>\n <label class=\"checkbox-inline form-check-label\" data-bind=\"visible:koHasIds\">\n <input type=\"checkbox\" data-bind=\"checked:koLoadSurvey\" />\n <span data-bind=\"text: $root.getLocString('ew.loadFromServer')\"></span>\n </label>\n </div>\n <div class=\"panel card\">\n <div class=\"panel-heading card-header\" data-bind=\"text: $root.getLocString('ew.titleScript')\"></div>\n <div data-bind=\"visible:hasAceEditor\">\n <div id=\"surveyEmbedingHead\" style=\"height:70px;width:100%\"></div>\n </div>\n <textarea data-bind=\"visible:!hasAceEditor, text: koHeadText\" style=\"height:70px;width:100%\"></textarea>\n </div>\n <div class=\"panel card\" data-bind=\"visible: koVisibleHtml\">\n <div class=\"panel-heading card-header\" data-bind=\"text: $root.getLocString('ew.titleHtml')\"></div>\n <div data-bind=\"visible:hasAceEditor\">\n <div id=\"surveyEmbedingBody\" style=\"height:30px;width:100%\"></div>\n </div>\n <textarea data-bind=\"visible:!hasAceEditor, text: koBodyText\" style=\"height:30px;width:100%\"></textarea>\n </div>\n <div class=\"panel card\">\n <div class=\"panel-heading card-header\" data-bind=\"text: $root.getLocString('ew.titleJavaScript')\"></div>\n <div data-bind=\"visible:hasAceEditor\">\n <div id=\"surveyEmbedingJava\" style=\"height:300px;width:100%\"></div>\n </div>\n <textarea data-bind=\"visible:!hasAceEditor, text: koJavaText\" style=\"height:300px;width:100%\"></textarea>\n </div>\n</script>"; /***/ }), /* 103 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"surveylive\">\n <div data-bind=\"visible: koIsRunning() && koPages().length > 1\">\n <label for=\"testSurveyPageChanged\" data-bind=\"text: selectPageText\"></label>\n <span id=\"testSurveyPageChanged\">\n <select class=\"form-control\" data-bind=\"options: koPages, optionsText: 'title', optionsValue: 'page', value: koActivePage, optionsAfterRender: setPageDisable\"></select>\n </span>\n </div>\n <survey-widget params=\"survey: koSurvey\"></survey-widget>\n <div data-bind=\"text: koResultText, visible: koIsRunning() == false\"></div>\n <button data-bind=\"visible: koIsRunning() == false, click:selectTestClick, text: testSurveyAgainText\">Test Again</button>\n</script>"; /***/ }), /* 104 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"svd-toolbar-button\">\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"enable: $data.enabled || true, click: action, css: $data.innerCss\">\n <span data-bind=\"text: title\"></span>\n </button>\n</script>\n<script type=\"text/html\" id=\"svd-toolbar-options\">\n <div class=\"ddmenu-container toolbar-options btn-group inline\">\n <div style=\"-webkit-tap-highlight-color:rgba(0,0,0,0)\" onclick=\"return true\"></div>\n\n <div class=\"ddmenu\">\n <span class=\"btn btn-primary\" tabindex=\"0\">\n <span data-bind=\"text: title\"></span>\n <span class=\"caret\"></span>\n </span>\n <div tabindex=\"0\" onclick=\"return true\"></div>\n <ul class=\"svd-light-bg-color\">\n <!-- ko foreach: items -->\n <li data-bind=\"css: $data.css\">\n <a href=\"#\" data-bind=\"click: action, text: title\"></a>\n </li>\n <!-- /ko -->\n </ul>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"svd-toolbar-state\">\n <span class=\"icon\">\n <svg-icon class=\"icon-status\" params=\"iconName: innerCss, size: 24\"></svg-icon>\n </span>\n <span class=\"svd-light-text-color\" data-bind=\"text: title\"></span>\n</script>"; /***/ }), /* 105 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span class=\"svda-title-editor-content\" data-bind=\"visible: isEditing\" style=\"display: none;\">\n <input data-bind=\"textInput: editingName, event: { keyup: nameEditorKeypress, blur: postEdit }\" style=\"border-top: none; border-left: none; border-right: none; outline: none; background-color: transparent; display: inline-block;\"\n />\n <span class=\"svda-edit-button\" data-bind=\"click: postEdit, enable: editingName() != ''\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplacecheck', size: 12\"></svg-icon>\n </span>\n <!-- <span class=\"svda-edit-button\" data-bind=\"click: cancelEdit\">✕</span> -->\n </span>\n <span class=\"svda-title-editor-content svda-title-editor-start\" data-bind=\"visible: !isEditing()\">\n <span style=\"display: none;\" data-bind=\"text: editingName\"></span>\n <span class=\"edit-survey-name\" data-bind=\"click: startEdit, attr: { title: getLocString('pe.edit') }\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplaceedit', size: 12\"></svg-icon>\n </span>\n </span>\n <!-- ko if: notOther -->\n <span class=\"svda-drag-handle\" data-bind=\"attr: { title: getLocString('pe.move') }, visible: !isEditing()\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplacedraggable', size: 12\"></svg-icon>\n </span>\n <!-- /ko -->\n <span class=\"svda-delete-item\" data-bind=\"click: deleteItem, attr: { title: getLocString('pe.delete') }, visible: !isEditing()\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplacedelete', size: 12\"></svg-icon>\n </span>\n</div>"; /***/ }), /* 106 */ /***/ (function(module, exports) { module.exports = "<div>\n <!-- ko foreach: actions -->\n <!-- ko if: !$data.template -->\n <span class=\"svda_question_action svd-main-color\" data-bind=\"click: function() { onClick($parent.question); }, attr: {title: text}\">\n <span>\n <svg-icon class=\"svd-primary-icon\" data-bind=\"css: $parent.getStyle($data)\" params=\"iconName: $parent.getStyle($data)\"></svg-icon>\n </span>\n <span data-bind=\"text: $data.hasTitle ? text: ''\"></span>\n </span>\n <!-- /ko -->\n <!-- ko if: !!$data.template -->\n <!-- ko template: template -->\n <!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n</div>"; /***/ }), /* 107 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span class=\"svda-title-editor-content\" data-bind=\"visible: isEditing\" style=\"display: none;\">\n <input data-bind=\"textInput: editingName, event: { keyup: nameEditorKeypress, blur: postEdit }\" style=\"border-top: none; border-left: none; border-right: none; outline: none; background-color: transparent; display: inline-block; margin: -6px;\"\n />\n <span class=\"svda-edit-button\" data-bind=\"click: postEdit, enable: editingName() != ''\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplacecheck', size: 12\"></svg-icon>\n </span>\n <!-- <span class=\"svda-edit-button\" data-bind=\"click: cancelEdit\">✕</span> -->\n </span>\n <span class=\"svda-title-editor-content svda-title-editor-start\" data-bind=\"visible: !isEditing()\">\n <span style=\"display: none;\" data-bind=\"text: editingName\"></span>\n <span class=\"edit-survey-name\" data-bind=\"click: startEdit, attr: { title: getLocString('pe.edit') }\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplaceedit', size: 12\"></svg-icon>\n </span>\n </span>\n <span class=\"svda-delete-item\" data-bind=\"click: deleteItem, attr: { title: getLocString('pe.delete') }, visible: !isEditing()\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplacedelete', size: 12\"></svg-icon>\n </span>\n</div>"; /***/ }), /* 108 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-select-items-editor\">\n <div class=\"svda-select-items-title\" data-bind=\"click: toggle\">\n <span class=\"svd-main-color\" data-bind=\"text: getLocString('pe.editChoices')\"></span>\n </div>\n <div class=\"svda-select-items-content svd-dark-border-color svd-light-bg-color\" data-bind=\"visible: isExpanded\">\n <div class=\"svda-select-items-collection\">\n <!-- ko foreach: { data: choices, afterRender: choicesRendered } -->\n <div class=\"item_editable item_draggable\">\n <span data-bind=\"text: text\"></span>\n <span>\n <item-editor params='name: \"text\", target: $data, item: $data, question: $parent.question, editor: $parent.editor'></item-editor>\n </span>\n </div>\n <!-- /ko -->\n </div>\n <!-- ko if: question.hasOther -->\n <div class=\"item_editable\">\n <span data-bind=\"text: question.otherText\"></span>\n <span>\n <item-editor params='name: \"otherText\", target: question, item: question.otherItem, question: question, editor: editor'></item-editor>\n </span>\n </div>\n <!-- /ko -->\n <div class=\"svda-add-new-item\" data-bind=\"click: addItem, attr: { title: getLocString('pe.addItem') }\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplaceplus', size: 12\"></svg-icon>\n </div>\n </div>\n</div>"; /***/ }), /* 109 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span class=\"svda-title-editor-content\" data-bind=\"visible: isEditing\" style=\"display: none;\">\n <input data-bind=\"textInput: editingName, event: { keyup: nameEditorKeypress, blur: postEdit }\" style=\"border-top: none; border-left: none; border-right: none; outline: none; background-color: transparent; display: inline-block;\"\n />\n <span class=\"svda-edit-button\" data-bind=\"click: postEdit, enable: editingName() != ''\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplacecheck', size: 12\"></svg-icon>\n </span>\n <!-- <span class=\"svda-edit-button\" data-bind=\"click: cancelEdit\">✕</span> -->\n </span>\n <span class=\"svda-title-editor-content svda-title-editor-start\" data-bind=\"visible: !isEditing()\">\n <span style=\"display: none;\" data-bind=\"text: editingName\"></span>\n <span class=\"edit-survey-name\" data-bind=\"click: startEdit, attr: { title: getLocString('pe.edit') }\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-inplaceedit', size: 12\"></svg-icon>\n </span>\n </span>\n</div>"; /***/ }), /* 110 */ /***/ (function(module, exports, __webpack_require__) { module.exports = "" + __webpack_require__(71) + " " + __webpack_require__(72) + " " + __webpack_require__(74) + " " + __webpack_require__(75) + "\n" + __webpack_require__(103) + " " + __webpack_require__(102) + " " + __webpack_require__(100) + " " + __webpack_require__(99) + "\n" + __webpack_require__(101) + " " + __webpack_require__(98) + " " + __webpack_require__(76) + "\n" + __webpack_require__(81) + " " + __webpack_require__(83) + " " + __webpack_require__(78) + "\n" + __webpack_require__(82) + " " + __webpack_require__(84) + "\n" + __webpack_require__(88) + " " + __webpack_require__(89) + "\n" + __webpack_require__(85) + " " + __webpack_require__(86) + "" + __webpack_require__(87) + "\n" + __webpack_require__(90) + " " + __webpack_require__(91) + " " + __webpack_require__(80) + "\n" + __webpack_require__(92) + " " + __webpack_require__(93) + " " + __webpack_require__(77) + "\n" + __webpack_require__(94) + " " + __webpack_require__(95) + "\n" + __webpack_require__(96) + " " + __webpack_require__(97) + "\n" + __webpack_require__(79) + " " + __webpack_require__(73) + " " + __webpack_require__(104) + " " + __webpack_require__(70) + "\n" + __webpack_require__(69) + ""; /***/ }), /* 111 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__textWorker__ = __webpack_require__(19); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyJSONEditor; }); var SurveyJSONEditor = (function () { function SurveyJSONEditor() { this.isProcessingImmediately = false; this.timeoutId = -1; this.koText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koErrors = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); var self = this; this.koText.subscribe(function (newValue) { self.onJsonEditorChanged(); }); } SurveyJSONEditor.prototype.init = function (editorElement) { if (!this.hasAceEditor) return; this.aceEditor = ace.edit(editorElement); var self = this; //TODO add event to change ace theme and mode //this.aceEditor.setTheme("ace/theme/monokai"); //this.aceEditor.session.setMode("ace/mode/json"); this.aceEditor.setShowPrintMargin(false); this.aceEditor.getSession().on("change", function () { self.onJsonEditorChanged(); }); this.aceEditor.getSession().setUseWorker(true); __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */].newLineChar = this.aceEditor.session.doc.getNewLineCharacter(); }; Object.defineProperty(SurveyJSONEditor.prototype, "hasAceEditor", { get: function () { return typeof ace !== "undefined"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyJSONEditor.prototype, "text", { get: function () { if (!this.hasAceEditor) return this.koText(); return this.aceEditor.getValue(); }, set: function (value) { this.isProcessingImmediately = true; this.koText(value); if (this.aceEditor) { this.aceEditor.setValue(value); this.aceEditor.renderer.updateFull(true); } this.processJson(value); this.isProcessingImmediately = false; }, enumerable: true, configurable: true }); SurveyJSONEditor.prototype.show = function (value) { this.text = value; if (this.aceEditor) { this.aceEditor.focus(); } }; Object.defineProperty(SurveyJSONEditor.prototype, "isJsonCorrect", { get: function () { this.textWorker = new __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */](this.text); return this.textWorker.isJsonCorrect; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyJSONEditor.prototype, "survey", { get: function () { return this.textWorker.survey; }, enumerable: true, configurable: true }); SurveyJSONEditor.prototype.onJsonEditorChanged = function () { if (this.timeoutId > -1) { clearTimeout(this.timeoutId); } if (this.isProcessingImmediately) { this.timeoutId = -1; } else { var self = this; this.timeoutId = window.setTimeout(function () { self.timeoutId = -1; self.processJson(self.text); }, SurveyJSONEditor.updateTextTimeout); } }; SurveyJSONEditor.prototype.processJson = function (text) { this.textWorker = new __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */](text); if (this.aceEditor) { this.aceEditor .getSession() .setAnnotations(this.createAnnotations(text, this.textWorker.errors)); } else { this.koErrors(this.textWorker.errors); } }; SurveyJSONEditor.prototype.createAnnotations = function (text, errors) { var annotations = new Array(); for (var i = 0; i < errors.length; i++) { var error = errors[i]; var annotation = { row: error.position.start.row, column: error.position.start.column, text: error.text, type: "error" }; annotations.push(annotation); } return annotations; }; return SurveyJSONEditor; }()); SurveyJSONEditor.updateTextTimeout = 1000; /***/ }), /* 112 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* fork of the https://github.com/SortableJS/knockout-sortablejs because of es modules build error waiting for approve pullrequests: * https://github.com/SortableJS/knockout-sortablejs/pull/9) * https://github.com/SortableJS/knockout-sortablejs/pull/1/files */ /*global ko*/ (function(factory) { "use strict"; //get ko ref via global or require var koRef; if (typeof ko !== "undefined") { //global ref already defined koRef = ko; } else if ( true ) { //commonjs / node.js koRef = __webpack_require__(1); } //get sortable ref via global or require var sortableRef; if (typeof Sortable !== "undefined") { //global ref already defined sortableRef = Sortable; } else if ( true ) { //commonjs / node.js sortableRef = __webpack_require__(10); } //use references if we found them if (koRef !== undefined && sortableRef !== undefined) { factory(koRef, sortableRef); } else if (true) { //if both references aren't found yet, get via AMD if available //we may have a reference to only 1, or none if (koRef !== undefined && sortableRef === undefined) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(10)], __WEBPACK_AMD_DEFINE_RESULT__ = function(amdSortableRef) { factory(koRef, amdSortableRef); }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (koRef === undefined && sortableRef !== undefined) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(amdKnockout) { factory(amdKnockout, sortableRef); }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (koRef === undefined && sortableRef === undefined) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(10)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } } else { //no more routes to get references //report specific error if (koRef !== undefined && sortableRef === undefined) { throw new Error("knockout-sortable could not get reference to Sortable"); } else if (koRef === undefined && sortableRef !== undefined) { throw new Error("knockout-sortable could not get reference to Knockout"); } else if (koRef === undefined && sortableRef === undefined) { throw new Error( "knockout-sortable could not get reference to Knockout or Sortable" ); } } })(function(ko, Sortable) { "use strict"; var init = function( element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions ) { var options = buildOptions(valueAccessor, sortableOptions); // It's seems that we cannot update the eventhandlers after we've created // the sortable, so define them in init instead of update [ "onStart", "onEnd", "onRemove", "onAdd", "onUpdate", "onSort", "onFilter", "onMove", "onClone" ].forEach(function(e) { if (options[e] || eventHandlers[e]) options[e] = function( eventType, parentVM, parentBindings, handler, e ) { var itemVM = ko.dataFor(e.item), // All of the bindings on the parent element bindings = ko.utils.peekObservable(parentBindings()), // The binding options for the draggable/sortable binding of the parent element bindingHandlerBinding = bindings.sortable || bindings.draggable, // The collection that we should modify collection = bindingHandlerBinding.collection || bindingHandlerBinding.foreach; if (handler) handler(e, itemVM, parentVM, collection, bindings); if (eventHandlers[eventType]) eventHandlers[eventType]( e, itemVM, parentVM, collection, bindings ); }.bind(undefined, e, viewModel, allBindings, options[e]); }); var sortableElement = Sortable.create(element, options); // Destroy the sortable if knockout disposes the element it's connected to ko.utils.domNodeDisposal.addDisposeCallback(element, function() { sortableElement.destroy(); }); return ko.bindingHandlers.template.init(element, valueAccessor); }, update = function( element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions ) { // There seems to be some problems with updating the options of a sortable // Tested to change eventhandlers and the group options without any luck return ko.bindingHandlers.template.update( element, valueAccessor, allBindings, viewModel, bindingContext ); }, eventHandlers = (function(handlers) { var moveOperations = [], tryMoveOperation = function( e, itemVM, parentVM, collection, parentBindings ) { // A move operation is the combination of a add and remove event, // this is to make sure that we have both the target and origin collections var currentOperation = { event: e, itemVM: itemVM, parentVM: parentVM, collection: collection, parentBindings: parentBindings }, existingOperation = moveOperations.filter(function(op) { return op.itemVM === currentOperation.itemVM; })[0]; if (!existingOperation) { moveOperations.push(currentOperation); } else { // We're finishing the operation and already have a handle on // the operation item meaning that it's safe to remove it moveOperations.splice(moveOperations.indexOf(existingOperation), 1); var removeOperation = currentOperation.event.type === "remove" ? currentOperation : existingOperation, addOperation = currentOperation.event.type === "add" ? currentOperation : existingOperation; moveItem( itemVM, removeOperation.collection, addOperation.collection, addOperation.event.clone, addOperation.event ); } }, // Moves an item from the "from" collection to the "to" collection, these // can be references to the same collection which means it's a sort. // clone indicates if we should move or copy the item into the new collection moveItem = function(itemVM, from, to, clone, e) { // Unwrapping this allows us to manipulate the actual array var fromArray = from(), // It's not certain that the items actual index is the same // as the index reported by sortable due to filtering etc. originalIndex = fromArray.indexOf(itemVM), newIndex = e.newIndex; // We have to find out the actual desired index of the to array, // as this might be a computed array. We could otherwise potentially // drop an item above the 3rd visible item, but the 2nd visible item // has an actual index of 5. if (e.item.previousElementSibling) { newIndex = to().indexOf(ko.dataFor(e.item.previousElementSibling)); newIndex += newIndex > originalIndex ? 0 : 1; } // Remove sortables "unbound" element e.item.parentNode.removeChild(e.item); // This splice is necessary for both clone and move/sort // In sort/move since it shouldn't be at this index/in this array anymore // In clone since we have to work around knockouts valuHasMutated // when manipulating arrays and avoid a "unbound" item added by sortable fromArray.splice(originalIndex, 1); // Update the array, this will also remove sortables "unbound" clone from.valueHasMutated(); if (clone && from !== to) { // Read the item fromArray.splice(originalIndex, 0, itemVM); // Force knockout to update from.valueHasMutated(); } // Force deferred tasks to run now, registering the removal !!ko.tasks && ko.tasks.runEarly(); // Insert the item on its new position to().splice(newIndex, 0, itemVM); // Make sure to tell knockout that we've modified the actual array. to.valueHasMutated(); }; handlers.onRemove = tryMoveOperation; handlers.onAdd = tryMoveOperation; handlers.onUpdate = function( e, itemVM, parentVM, collection, parentBindings ) { // This will be performed as a sort since the to/from collections // reference the same collection and clone is set to false moveItem(itemVM, collection, collection, false, e); }; return handlers; })({}), // bindingOptions are the options set in the "data-bind" attribute in the ui. // options are custom options, for instance draggable/sortable specific options buildOptions = function(bindingOptions, options) { // deep clone/copy of properties from the "from" argument onto // the "into" argument and returns the modified "into" var merge = function(into, from) { for (var prop in from) { if ( Object.prototype.toString.call(from[prop]) === "[object Object]" ) { if ( Object.prototype.toString.call(into[prop]) !== "[object Object]" ) { into[prop] = {}; } into[prop] = merge(into[prop], from[prop]); } else into[prop] = from[prop]; } return into; }, // unwrap the supplied options unwrappedOptions = ko.utils.peekObservable(bindingOptions()).options || {}; // Make sure that we don't modify the provided settings object options = merge({}, options); // group is handled differently since we should both allow to change // a draggable to a sortable (and vice versa), but still be able to set // a name on a draggable without it becoming a drop target. if ( unwrappedOptions.group && Object.prototype.toString.call(unwrappedOptions.group) !== "[object Object]" ) { // group property is a name string declaration, convert to object. unwrappedOptions.group = { name: unwrappedOptions.group }; } return merge(options, unwrappedOptions); }; ko.bindingHandlers.draggable = { sortableOptions: { group: { pull: "clone", put: false }, sort: false }, init: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return init( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions ); }, update: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return update( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions ); } }; ko.bindingHandlers.sortable = { sortableOptions: { group: { pull: true, put: true } }, init: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return init( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions ); }, update: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return update( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions ); } }; }); /***/ }), /* 113 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_custom_checkbox_scss__ = __webpack_require__(34); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_custom_checkbox_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__utils_custom_checkbox_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_custom_select_scss__ = __webpack_require__(35); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_custom_select_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__utils_custom_select_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_ddmenu_scss__ = __webpack_require__(36); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_ddmenu_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__utils_ddmenu_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__main_scss__ = __webpack_require__(33); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__main_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_english__ = __webpack_require__(23); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "enStrings", function() { return __WEBPACK_IMPORTED_MODULE_4__localization_english__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "editorLocalization", function() { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStrings", function() { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dragdrophelper__ = __webpack_require__(22); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "DragDropHelper", function() { return __WEBPACK_IMPORTED_MODULE_6__dragdrophelper__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyEditors_propertyEditorBase__ = __webpack_require__(12); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorBase", function() { return __WEBPACK_IMPORTED_MODULE_7__propertyEditors_propertyEditorBase__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__propertyEditors_propertyCustomEditor__ = __webpack_require__(24); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyCustomEditor", function() { return __WEBPACK_IMPORTED_MODULE_8__propertyEditors_propertyCustomEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorFactory__ = __webpack_require__(4); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorFactory", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorFactory__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyStringPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorFactory__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyDropdownPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorFactory__["c"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyBooleanPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorFactory__["d"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNumberPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorFactory__["e"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__propertyEditors_propertyTextItemsEditor__ = __webpack_require__(60); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTextItemsEditor", function() { return __WEBPACK_IMPORTED_MODULE_10__propertyEditors_propertyTextItemsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyItemsEditor__ = __webpack_require__(13); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyItemsEditor", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyItemsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__propertyEditors_propertyItemValuesEditor__ = __webpack_require__(56); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyItemValuesEditor", function() { return __WEBPACK_IMPORTED_MODULE_12__propertyEditors_propertyItemValuesEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__propertyEditors_propertyMultipleValuesEditor__ = __webpack_require__(58); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyMultipleValuesEditor", function() { return __WEBPACK_IMPORTED_MODULE_13__propertyEditors_propertyMultipleValuesEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__propertyEditors_propertyNestedPropertyEditor__ = __webpack_require__(14); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNestedPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_14__propertyEditors_propertyNestedPropertyEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNestedPropertyEditorItem", function() { return __WEBPACK_IMPORTED_MODULE_14__propertyEditors_propertyNestedPropertyEditor__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__propertyEditors_propertyMatrixDropdownColumnsEditor__ = __webpack_require__(57); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDropdownColumnsEditor", function() { return __WEBPACK_IMPORTED_MODULE_15__propertyEditors_propertyMatrixDropdownColumnsEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyMatrixDropdownColumnsItem", function() { return __WEBPACK_IMPORTED_MODULE_15__propertyEditors_propertyMatrixDropdownColumnsEditor__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyModalEditor__ = __webpack_require__(6); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyModalEditor", function() { return __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyModalEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTextEditor", function() { return __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyModalEditor__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyHtmlEditor", function() { return __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyModalEditor__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__propertyEditors_propertyConditionEditor__ = __webpack_require__(54); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyConditionEditor", function() { return __WEBPACK_IMPORTED_MODULE_17__propertyEditors_propertyConditionEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__propertyEditors_propertyRestfullEditor__ = __webpack_require__(59); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyResultfullEditor", function() { return __WEBPACK_IMPORTED_MODULE_18__propertyEditors_propertyRestfullEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__propertyEditors_propertyDefaultValueEditor__ = __webpack_require__(55); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDefaultValueEditor", function() { return __WEBPACK_IMPORTED_MODULE_19__propertyEditors_propertyDefaultValueEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__propertyEditors_propertyTriggersEditor__ = __webpack_require__(61); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTriggersEditor", function() { return __WEBPACK_IMPORTED_MODULE_20__propertyEditors_propertyTriggersEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyValidatorsEditor__ = __webpack_require__(62); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyValidatorsEditor", function() { return __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyValidatorsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__propertyEditors_propertyCellsEditor__ = __webpack_require__(53); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyCellsEditor", function() { return __WEBPACK_IMPORTED_MODULE_22__propertyEditors_propertyCellsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__surveyObjects__ = __webpack_require__(29); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjects", function() { return __WEBPACK_IMPORTED_MODULE_23__surveyObjects__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__questionEditors_questionEditorProperties__ = __webpack_require__(25); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorProperties", function() { return __WEBPACK_IMPORTED_MODULE_24__questionEditors_questionEditorProperties__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorRow", function() { return __WEBPACK_IMPORTED_MODULE_24__questionEditors_questionEditorProperties__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorProperty", function() { return __WEBPACK_IMPORTED_MODULE_24__questionEditors_questionEditorProperties__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__questionEditors_questionEditorDefinition__ = __webpack_require__(15); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorDefinition", function() { return __WEBPACK_IMPORTED_MODULE_25__questionEditors_questionEditorDefinition__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__questionEditors_questionEditor__ = __webpack_require__(9); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorShowWindow", function() { return __WEBPACK_IMPORTED_MODULE_26__questionEditors_questionEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditor", function() { return __WEBPACK_IMPORTED_MODULE_26__questionEditors_questionEditor__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorTab", function() { return __WEBPACK_IMPORTED_MODULE_26__questionEditors_questionEditor__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__questionToolbox__ = __webpack_require__(26); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionToolbox", function() { return __WEBPACK_IMPORTED_MODULE_27__questionToolbox__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__objectProperty__ = __webpack_require__(11); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_28__objectProperty__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__objectEditor__ = __webpack_require__(17); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjectEditor", function() { return __WEBPACK_IMPORTED_MODULE_29__objectEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__pagesEditor__ = __webpack_require__(52); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "PagesEditor", function() { return __WEBPACK_IMPORTED_MODULE_30__pagesEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__textWorker__ = __webpack_require__(19); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyTextWorker", function() { return __WEBPACK_IMPORTED_MODULE_31__textWorker__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__surveyHelper__ = __webpack_require__(5); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ObjType", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyHelper__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyHelper", function() { return __WEBPACK_IMPORTED_MODULE_32__surveyHelper__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__surveylive__ = __webpack_require__(30); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyLiveTester", function() { return __WEBPACK_IMPORTED_MODULE_33__surveylive__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__surveyEmbedingWindow__ = __webpack_require__(28); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEmbedingWindow", function() { return __WEBPACK_IMPORTED_MODULE_34__surveyEmbedingWindow__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__questionconverter__ = __webpack_require__(27); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionConverter", function() { return __WEBPACK_IMPORTED_MODULE_35__questionconverter__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__undoredo__ = __webpack_require__(31); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyUndoRedo", function() { return __WEBPACK_IMPORTED_MODULE_36__undoredo__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "UndoRedoItem", function() { return __WEBPACK_IMPORTED_MODULE_36__undoredo__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__surveyjsObjects__ = __webpack_require__(7); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyForDesigner", function() { return __WEBPACK_IMPORTED_MODULE_37__surveyjsObjects__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "registerAdorner", function() { return __WEBPACK_IMPORTED_MODULE_37__surveyjsObjects__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "removeAdorners", function() { return __WEBPACK_IMPORTED_MODULE_37__surveyjsObjects__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__extentions__ = __webpack_require__(42); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Extentions", function() { return __WEBPACK_IMPORTED_MODULE_38__extentions__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__editor__ = __webpack_require__(41); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEditor", function() { return __WEBPACK_IMPORTED_MODULE_39__editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__manage__ = __webpack_require__(51); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveysManager", function() { return __WEBPACK_IMPORTED_MODULE_40__manage__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__stylesmanager__ = __webpack_require__(18); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return __WEBPACK_IMPORTED_MODULE_41__stylesmanager__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__localization_french__ = __webpack_require__(43); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__localization_german__ = __webpack_require__(44); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__localization_italian__ = __webpack_require__(45); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__localization_persian__ = __webpack_require__(46); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__localization_polish__ = __webpack_require__(47); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__localization_portuguese__ = __webpack_require__(48); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__localization_simplified_chinese__ = __webpack_require__(49); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__localization_spanish__ = __webpack_require__(50); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__adorners_title_editor__ = __webpack_require__(16); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "titleAdorner", function() { return __WEBPACK_IMPORTED_MODULE_50__adorners_title_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__adorners_item_editor__ = __webpack_require__(21); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "itemAdorner", function() { return __WEBPACK_IMPORTED_MODULE_51__adorners_item_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__adorners_label_editor__ = __webpack_require__(37); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "labelAdorner", function() { return __WEBPACK_IMPORTED_MODULE_52__adorners_label_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__adorners_question_actions__ = __webpack_require__(38); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "questionActionsAdorner", function() { return __WEBPACK_IMPORTED_MODULE_53__adorners_question_actions__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__adorners_select_items_editor__ = __webpack_require__(40); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "selectItemsEditorAdorner", function() { return __WEBPACK_IMPORTED_MODULE_54__adorners_select_items_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__adorners_rating_item_editor__ = __webpack_require__(39); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ratingItemAdorner", function() { return __WEBPACK_IMPORTED_MODULE_55__adorners_rating_item_editor__["a"]; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return Version; }); // styles var Version; Version = "" + "1.0.24"; //editorLocalization //adorners /***/ }) /******/ ]); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA4Yjc0ZTUwYTdmZDk5MjA5YjAwOCIsIndlYnBhY2s6Ly8vLi9zcmMvZWRpdG9yTG9jYWxpemF0aW9uLnRzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJrb1wiLFwiY29tbW9uanMyXCI6XCJrbm9ja291dFwiLFwiY29tbW9uanNcIjpcImtub2Nrb3V0XCIsXCJhbWRcIjpcImtub2Nrb3V0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWtub2Nrb3V0XCIsXCJjb21tb25qc1wiOlwic3VydmV5LWtub2Nrb3V0XCIsXCJhbWRcIjpcInN1cnZleS1rbm9ja291dFwifSIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9oZWxwZXJzLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JGYWN0b3J5LnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlIZWxwZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1vZGFsRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlqc09iamVjdHMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3V0aWxzLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vfi9zb3J0YWJsZWpzL1NvcnRhYmxlLmpzIiwid2VicGFjazovLy8uL3NyYy9vYmplY3RQcm9wZXJ0eS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yQmFzZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5SXRlbXNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU5lc3RlZFByb3BlcnR5RWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLnRzIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy90aXRsZS1lZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL29iamVjdEVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3R5bGVzbWFuYWdlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdGV4dFdvcmtlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvanNvbjUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL2l0ZW0tZWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9kcmFnZHJvcGhlbHBlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2VuZ2xpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUN1c3RvbUVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yUHJvcGVydGllcy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25Ub29sYm94LnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbmNvbnZlcnRlci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5RW1iZWRpbmdXaW5kb3cudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleU9iamVjdHMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleWxpdmUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3VuZG9yZWRvLnRzIiwid2VicGFjazovLy8uL34vcm1vZGFsL2luZGV4LmVzLmpzIiwid2VicGFjazovLy8uL3NyYy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL2N1c3RvbS1jaGVja2JveC5zY3NzIiwid2VicGFjazovLy8uL3NyYy91dGlscy9jdXN0b20tc2VsZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL2RkbWVudS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9sYWJlbC1lZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3JhdGluZy1pdGVtLWVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvc2VsZWN0LWl0ZW1zLWVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9leHRlbnRpb25zLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9wb2xpc2gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vc3BhbmlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFuYWdlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q2VsbHNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUNvbmRpdGlvbkVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNYXRyaXhEcm9wZG93bkNvbHVtbnNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU11bHRpcGxlVmFsdWVzRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlSZXN0ZnVsbEVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VGV4dEl0ZW1zRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlUcmlnZ2Vyc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VmFsaWRhdG9yc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvaXRlbS1lZGl0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvbGFiZWwtZWRpdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvcmF0aW5nLWl0ZW0tZWRpdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3NlbGVjdC1pdGVtcy1lZGl0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvdGl0bGUtZWRpdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N2Z2J1bmRsZS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvY29udmVydC1hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL2luZGV4Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9qc29uZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9tYW5hZ2UuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL29iamVjdGVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcGFnZWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWJvb2xlYW4uaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jZWxscy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWNvbmRpdGlvbi5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWN1c3RvbS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRlZmF1bHR2YWx1ZS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRyb3Bkb3duLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZXhwcmVzc2lvbi5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWh0bWwuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbWF0cml4ZHJvcGRvd25jb2x1bW5zLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWwuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tb2RhbGNvbnRlbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tdWx0aXBsZXZhbHVlcy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW5lc3RlZC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW51bWJlci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXJlc3RmdWxsLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3Itc3RyaW5nLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdGV4dC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHRpdGVtcy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtcy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXZhbGlkYXRvcnMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9yLWNvbnRlbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9ydGFiLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9zdXJ2ZXllbWJlZGluZy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvc3VydmV5bGl2ZS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvdG9vbGJhci5odG1sIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9pdGVtLWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9xdWVzdGlvbi1hY3Rpb25zLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3JhdGluZy1pdGVtLWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9zZWxlY3QtaXRlbXMtZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3RpdGxlLWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvZW50cnkuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5SlNPTkVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi92ZW5kb3Iva25vY2tvdXQtc29ydGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VudHJpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVztBQUNYOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7O0FBRXZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLGNBQWMsU0FBUztBQUN2QjtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsZUFBZSxZQUFZO0FBQzNCLGVBQWUsT0FBTztBQUN0QixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixlQUFlLEVBQUU7QUFDakIsZUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxPQUFPO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7Ozs7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7QUFHQSxlQUFlLGtCQUFrQjtBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLGNBQWMsWUFBWTtBQUMxQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QixhQUFhLFNBQVM7QUFDdEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBLGdFQUFnRTtBQUNoRTtB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ZixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2QsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2YsS0FBSyxHQUFHO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNkLEtBQUssR0FBRztnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsQixLQUFLLEdBQUc7Z0JBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztn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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLE9BQU87O0FBRVA7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyw0QkFBNEI7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdFhEO0FBQUEsU0FBUztBQUM4QjtBQUNGO0FBQ1A7QUFDUjtBQUVmLElBQUksT0FBZSxDQUFDO0FBQzNCLE9BQU8sR0FBRyxLQUFHLFFBQXFCLENBQUM7QUFFaUI7QUFDdUI7QUFFeEI7QUFHSjtBQUdFO0FBR0M7QUFNQTtBQUdFO0FBR0o7QUFHSztBQUdJO0FBSUE7QUFJTztBQUdoQjtBQUlBO0FBR0k7QUFHRDtBQUdJO0FBR0o7QUFHRTtBQUdMO0FBQ0M7QUFNSTtBQUdBO0FBS1Y7QUFFVTtBQUNJO0FBQ0o7QUFDUjtBQUNJO0FBQ087QUFDUDtBQUNjO0FBQ047QUFDRTtBQUsvQjtBQUNlO0FBQ0Y7QUFFRTtBQUVNO0FBRWpELG9CQUFvQjtBQUNZO0FBQ0E7QUFDQztBQUNBO0FBQ0Q7QUFDSTtBQUNRO0FBQ1g7QUFFakMsVUFBVTtBQUM4QztBQUNGO0FBQ0U7QUFDYztBQUNLO0FBQ1IiLCJmaWxlIjoiLi9wYWNrYWdlL3N1cnZleWVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpLCByZXF1aXJlKFwic3VydmV5LWtub2Nrb3V0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5RWRpdG9yXCIsIFtcImtub2Nrb3V0XCIsIFwic3VydmV5LWtub2Nrb3V0XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlN1cnZleUVkaXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpLCByZXF1aXJlKFwic3VydmV5LWtub2Nrb3V0XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlFZGl0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJrb1wiXSwgcm9vdFtcIlN1cnZleVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEzKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA4Yjc0ZTUwYTdmZDk5MjA5YjAwOCIsImltcG9ydCB7IGVuU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5cbmV4cG9ydCB2YXIgZWRpdG9yTG9jYWxpemF0aW9uID0ge1xuICBjdXJyZW50TG9jYWxlOiBcIlwiLFxuICBsb2NhbGVzOiB7fSxcbiAgZ2V0U3RyaW5nOiBmdW5jdGlvbihzdHJOYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldExvY2FsZShsb2NhbGUpO1xuICAgIHZhciBwYXRoID0gc3RyTmFtZS5zcGxpdChcIi5cIik7XG4gICAgdmFyIG9iaiA9IGxvYztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iaiA9IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIGlmIChsb2MgPT09IGRlZmF1bHRTdHJpbmdzKSByZXR1cm4gcGF0aFtpXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHN0ck5hbWUsIFwiZW5cIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGhhc1N0cmluZzogZnVuY3Rpb24oc3RyTmFtZTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZyA9IG51bGwpIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRMb2NhbGUobG9jYWxlKTtcbiAgICB2YXIgcGF0aCA9IHN0ck5hbWUuc3BsaXQoXCIuXCIpO1xuICAgIHZhciBvYmogPSBsb2M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmogPSBvYmpbcGF0aFtpXV07XG4gICAgICBpZiAoIW9iaikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZ2V0UHJvcGVydHlOYW1lOiBmdW5jdGlvbihzdHJOYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHZhciBvYmogPSB0aGlzLmdldFByb3BlcnR5KHN0ck5hbWUsIGxvY2FsZSk7XG4gICAgaWYgKG9ialtcIm5hbWVcIl0pIHJldHVybiBvYmpbXCJuYW1lXCJdO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGdldFByb3BlcnR5VGl0bGU6IGZ1bmN0aW9uKHN0ck5hbWU6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuZ2V0UHJvcGVydHkoc3RyTmFtZSwgbG9jYWxlKTtcbiAgICBpZiAob2JqW1widGl0bGVcIl0pIHJldHVybiBvYmpbXCJ0aXRsZVwiXTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfSxcbiAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uKHN0ck5hbWU6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuZ2V0U3RyaW5nKFwicC5cIiArIHN0ck5hbWUsIGxvY2FsZSk7XG4gICAgaWYgKG9iaiAhPT0gc3RyTmFtZSkgcmV0dXJuIG9iajtcbiAgICB2YXIgcG9zID0gc3RyTmFtZS5pbmRleE9mKFwiX1wiKTtcbiAgICBpZiAocG9zIDwgLTEpIHJldHVybiBvYmo7XG4gICAgc3RyTmFtZSA9IHN0ck5hbWUuc3Vic3RyKHBvcyArIDEpO1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZyhcInAuXCIgKyBzdHJOYW1lLCBsb2NhbGUpO1xuICB9LFxuICBnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbih2YWx1ZTogYW55LCBsb2NhbGU6IHN0cmluZyA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUludGVybmFsKHZhbHVlLCBcInB2XCIsIGxvY2FsZSk7XG4gIH0sXG4gIGdldFZhbGlkYXRvck5hbWU6IGZ1bmN0aW9uKG5hbWU6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVJbnRlcm5hbChuYW1lLCBcInZhbGlkYXRvcnNcIiwgbG9jYWxlKTtcbiAgfSxcbiAgZ2V0VHJpZ2dlck5hbWU6IGZ1bmN0aW9uKG5hbWU6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVJbnRlcm5hbChuYW1lLCBcInRyaWdnZXJzXCIsIGxvY2FsZSk7XG4gIH0sXG4gIGdldExvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIGlmICghbG9jYWxlKSBsb2NhbGUgPSB0aGlzLmN1cnJlbnRMb2NhbGU7XG4gICAgdmFyIGxvYyA9IGxvY2FsZSA/IHRoaXMubG9jYWxlc1tsb2NhbGVdIDogZGVmYXVsdFN0cmluZ3M7XG4gICAgaWYgKCFsb2MpIGxvYyA9IGRlZmF1bHRTdHJpbmdzO1xuICAgIHJldHVybiBsb2M7XG4gIH0sXG4gIGdldFZhbHVlSW50ZXJuYWwodmFsdWU6IGFueSwgcHJlZml4OiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0TG9jYWxlKGxvY2FsZSk7XG4gICAgdmFyIHJlcyA9IGxvY1twcmVmaXhdID8gbG9jW3ByZWZpeF1bdmFsdWVdIDogbnVsbDtcbiAgICBpZiAoIXJlcykgcmVzID0gZGVmYXVsdFN0cmluZ3NbcHJlZml4XVt2YWx1ZV07XG4gICAgcmV0dXJuIHJlcyA/IHJlcyA6IHZhbHVlO1xuICB9LFxuICBnZXRMb2NhbGVzOiBmdW5jdGlvbigpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgcmVzLnB1c2goXCJcIik7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMubG9jYWxlcykge1xuICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufTtcblxuZXhwb3J0IHZhciBkZWZhdWx0U3RyaW5ncyA9IGVuU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9lZGl0b3JMb2NhbGl6YXRpb24udHMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcImtvXCIsXCJjb21tb25qczJcIjpcImtub2Nrb3V0XCIsXCJjb21tb25qc1wiOlwia25vY2tvdXRcIixcImFtZFwiOlwia25vY2tvdXRcIn1cbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWtub2Nrb3V0XCIsXCJjb21tb25qc1wiOlwic3VydmV5LWtub2Nrb3V0XCIsXCJhbWRcIjpcInN1cnZleS1rbm9ja291dFwifVxuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJleHBvcnQgdmFyIF9fYXNzaWduID1cbiAgT2JqZWN0W1wiYXNzaWduXCJdIHx8XG4gIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3MsIGJhc2VDbGFzcykge1xuICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcylcbiAgICBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7XG4gIH1cbiAgdGhpc0NsYXNzLnByb3RvdHlwZSA9XG4gICAgYmFzZUNsYXNzID09PSBudWxsXG4gICAgICA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKVxuICAgICAgOiAoKF9fLnByb3RvdHlwZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUpLCBuZXcgX18oKSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9oZWxwZXJzLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUN1c3RvbUVkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5Q3VzdG9tRWRpdG9yXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0UHJvcGVydHkgfSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIGRlZmF1bHRFZGl0b3I6IHN0cmluZyA9IFwic3RyaW5nXCI7XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0b3JMaXN0ID0ge307XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0b3JCeUNsYXNzTGlzdCA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyB3aWRnZXRSZWdpc3Rlckxpc3QgPSB7fTtcbiAgcHVibGljIHN0YXRpYyBnZXRPcGVyYXRvcnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIG9wZXJhdG9ycyA9IFtcbiAgICAgIFwiZW1wdHlcIixcbiAgICAgIFwibm90ZW1wdHlcIixcbiAgICAgIFwiZXF1YWxcIixcbiAgICAgIFwibm90ZXF1YWxcIixcbiAgICAgIFwiY29udGFpbnNcIixcbiAgICAgIFwibm90Y29udGFpbnNcIixcbiAgICAgIFwiZ3JlYXRlclwiLFxuICAgICAgXCJsZXNzXCIsXG4gICAgICBcImdyZWF0ZXJvcmVxdWFsXCIsXG4gICAgICBcImxlc3NvcmVxdWFsXCJcbiAgICBdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wZXJhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBvcGVyYXRvcnNbaV07XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHRleHQ6IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvcC5cIiArIG5hbWUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRWRpdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVhdG9yOiAocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpID0+IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSxcbiAgICBlZGl0YWJsZUNsYXNzTmFtZTogc3RyaW5nID0gbnVsbFxuICApIHtcbiAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRvckxpc3RbbmFtZV0gPSBjcmVhdG9yO1xuICAgIHZhciBjbGFzc05hbWUgPSBlZGl0YWJsZUNsYXNzTmFtZSA/IGVkaXRhYmxlQ2xhc3NOYW1lIDogbmFtZTtcbiAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRvckJ5Q2xhc3NMaXN0W2NsYXNzTmFtZV0gPSBjcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgcmVnaXN0ZXJDdXN0b21FZGl0b3IobmFtZTogc3RyaW5nLCB3aWRnZXRKU09OOiBhbnkpIHtcbiAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3Rvcnkud2lkZ2V0UmVnaXN0ZXJMaXN0W25hbWVdID0gd2lkZ2V0SlNPTjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUVkaXRvcihcbiAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBmdW5jOiAobmV3VmFsdWU6IGFueSkgPT4gYW55XG4gICk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gICAgdmFyIGVkaXRvclR5cGUgPSBwcm9wZXJ0eS50eXBlO1xuICAgIGlmIChcbiAgICAgIHByb3BlcnR5LmNob2ljZXMgIT0gbnVsbCAmJlxuICAgICAgKCFlZGl0b3JUeXBlIHx8IGVkaXRvclR5cGUgPT0gU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmRlZmF1bHRFZGl0b3IpXG4gICAgKSB7XG4gICAgICBlZGl0b3JUeXBlID0gXCJkcm9wZG93blwiO1xuICAgIH1cbiAgICB2YXIgcHJvcGVydHlFZGl0b3IgPSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRlQ3VzdG9tRWRpdG9yKFxuICAgICAgZWRpdG9yVHlwZSxcbiAgICAgIHByb3BlcnR5XG4gICAgKTtcbiAgICBpZiAoIXByb3BlcnR5RWRpdG9yKSB7XG4gICAgICB2YXIgY3JlYXRvciA9IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5jcmVhdG9yTGlzdFtlZGl0b3JUeXBlXTtcbiAgICAgIGlmIChjcmVhdG9yKSBwcm9wZXJ0eUVkaXRvciA9IGNyZWF0b3IocHJvcGVydHkpO1xuICAgIH1cbiAgICBpZiAoIXByb3BlcnR5RWRpdG9yKSB7XG4gICAgICBjcmVhdG9yID0gU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmZpbmRQYXJlbnRDcmVhdG9yKGVkaXRvclR5cGUpO1xuICAgICAgcHJvcGVydHlFZGl0b3IgPSBjcmVhdG9yKHByb3BlcnR5KTtcbiAgICB9XG4gICAgcHJvcGVydHlFZGl0b3Iub25DaGFuZ2VkID0gZnVuYztcbiAgICByZXR1cm4gcHJvcGVydHlFZGl0b3I7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQ3VzdG9tRWRpdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICB2YXIgd2lkZ2V0SlNPTiA9IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS53aWRnZXRSZWdpc3Rlckxpc3RbbmFtZV07XG4gICAgaWYgKCF3aWRnZXRKU09OKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5Q3VzdG9tRWRpdG9yKHByb3BlcnR5LCB3aWRnZXRKU09OKTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBmaW5kUGFyZW50Q3JlYXRvcihcbiAgICBuYW1lOiBzdHJpbmdcbiAgKTogKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSA9PiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICAgIHZhciBqc29uQ2xhc3MgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5maW5kQ2xhc3MobmFtZSk7XG4gICAgd2hpbGUgKGpzb25DbGFzcyAmJiBqc29uQ2xhc3MucGFyZW50TmFtZSkge1xuICAgICAgdmFyIGNyZWF0b3IgPVxuICAgICAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRvckJ5Q2xhc3NMaXN0W2pzb25DbGFzcy5wYXJlbnROYW1lXTtcbiAgICAgIGlmIChjcmVhdG9yKSByZXR1cm4gY3JlYXRvcjtcbiAgICAgIGpzb25DbGFzcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmZpbmRDbGFzcyhqc29uQ2xhc3MucGFyZW50TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRvckxpc3RbXG4gICAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuZGVmYXVsdEVkaXRvclxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVN0cmluZ1Byb3BlcnR5RWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlEcm9wZG93blByb3BlcnR5RWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcHVibGljIGtvQ2hvaWNlczogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvQ2hvaWNlcyA9IGtvLm9ic2VydmFibGVBcnJheSh0aGlzLmdldExvY2FsaXphYmxlQ2hvaWNlcygpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJkcm9wZG93blwiO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcGVydHkubmFtZSA9PT0gXCJsb2NhbGVcIikge1xuICAgICAgdmFyIGxvY2FsZU5hbWVzID0gU3VydmV5LnN1cnZleUxvY2FsaXphdGlvbltcImxvY2FsZU5hbWVzXCJdO1xuICAgICAgaWYgKGxvY2FsZU5hbWVzKSB7XG4gICAgICAgIHZhciB0ZXh0ID0gbG9jYWxlTmFtZXNbdmFsdWVdO1xuICAgICAgICBpZiAodGV4dCkgcmV0dXJuIHRleHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BlcnR5Lm5hbWUgPT09IFwiY2VsbFR5cGVcIikge1xuICAgICAgdmFyIHRleHQgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicXQuXCIgKyB2YWx1ZSk7XG4gICAgICBpZiAodGV4dCkgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0UHJvcGVydHlWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIHNldE9iamVjdCh2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0T2JqZWN0KHZhbHVlKTtcbiAgICB0aGlzLmJlZ2luVmFsdWVVcGRhdGluZygpO1xuICAgIGlmICh0aGlzLmtvQ2hvaWNlcygpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmtvQ2hvaWNlcyh0aGlzLmdldExvY2FsaXphYmxlQ2hvaWNlcygpKTtcbiAgICB9XG4gICAgdGhpcy5lbmRWYWx1ZVVwZGF0aW5nKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRMb2NhbGl6YWJsZUNob2ljZXMoKSB7XG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldFByb3BlcnR5Q2hvaWNlcygpO1xuICAgIGlmICghY2hvaWNlcyB8fCBjaG9pY2VzLmxlbmd0aCA9PSAwKSByZXR1cm4gW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPigpO1xuICAgIFN1cnZleS5JdGVtVmFsdWUuc2V0RGF0YShyZXMsIGNob2ljZXMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSByZXNbaV0udmFsdWU7XG4gICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VmFsdWVUZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0ZXh0ICE9IHZhbHVlKSB7XG4gICAgICAgIHJlc1tpXS50ZXh0ID0gdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnR5Q2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICBpZiAoIXRoaXMucHJvcGVydHkpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVtcImdldENob2ljZXNcIl1cbiAgICAgID8gdGhpcy5wcm9wZXJ0eVtcImdldENob2ljZXNcIl0odGhpcy5vYmplY3QpXG4gICAgICA6IHRoaXMucHJvcGVydHkuY2hvaWNlcztcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleUJvb2xlYW5Qcm9wZXJ0eUVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGFsd2F5c1Nob3dFZGl0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TaG93RGlzcGxheU5hbWVPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlVGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFByb3BlcnR5VmFsdWUodmFsdWUpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5TnVtYmVyUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdGVkVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICghdmFsdWUpIHZhbHVlID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInN0cmluZ1wiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5U3RyaW5nUHJvcGVydHlFZGl0b3IocHJvcGVydHkpO1xufSk7XG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJkcm9wZG93blwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5RHJvcGRvd25Qcm9wZXJ0eUVkaXRvcihwcm9wZXJ0eSk7XG59KTtcblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcImJvb2xlYW5cIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleUJvb2xlYW5Qcm9wZXJ0eUVkaXRvcihwcm9wZXJ0eSk7XG59KTtcblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcIm51bWJlclwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5TnVtYmVyUHJvcGVydHlFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yRmFjdG9yeS50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmV4cG9ydCBlbnVtIE9ialR5cGUge1xuICBVbmtub3duLFxuICBTdXJ2ZXksXG4gIFBhZ2UsXG4gIFBhbmVsLFxuICBRdWVzdGlvblxufVxuZXhwb3J0IGNsYXNzIFN1cnZleUhlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0TmV3UGFnZU5hbWUob2JqczogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShcbiAgICAgIG9ianMsXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3UGFnZU5hbWVcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0TmV3UXVlc3Rpb25OYW1lKG9ianM6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE5ld05hbWUoXG4gICAgICBvYmpzLFxuICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLm5ld1F1ZXN0aW9uTmFtZVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXROZXdQYW5lbE5hbWUob2JqczogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShcbiAgICAgIG9ianMsXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3UGFuZWxOYW1lXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE5ld05hbWUob2JqczogQXJyYXk8YW55PiwgYmFzZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIGhhc2ggPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGhhc2hbb2Jqc1tpXS5uYW1lXSA9IHRydWU7XG4gICAgfVxuICAgIHZhciBudW0gPSAxO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoIWhhc2hbYmFzZU5hbWUgKyBudW0udG9TdHJpbmcoKV0pIGJyZWFrO1xuICAgICAgbnVtKys7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZSArIG51bS50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0T2JqZWN0VHlwZShvYmo6IGFueSk6IE9ialR5cGUge1xuICAgIGlmICghb2JqIHx8ICFvYmpbXCJnZXRUeXBlXCJdKSByZXR1cm4gT2JqVHlwZS5Vbmtub3duO1xuICAgIGlmIChvYmouZ2V0VHlwZSgpID09IFwicGFnZVwiKSByZXR1cm4gT2JqVHlwZS5QYWdlO1xuICAgIGlmIChvYmouZ2V0VHlwZSgpID09IFwicGFuZWxcIikgcmV0dXJuIE9ialR5cGUuUGFuZWw7XG4gICAgaWYgKG9iai5nZXRUeXBlKCkgPT0gXCJzdXJ2ZXlcIikgcmV0dXJuIE9ialR5cGUuU3VydmV5O1xuICAgIGlmIChvYmpbXCJuYW1lXCJdKSByZXR1cm4gT2JqVHlwZS5RdWVzdGlvbjtcbiAgICByZXR1cm4gT2JqVHlwZS5Vbmtub3duO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0T2JqZWN0VHlwZVN0cihvYmo6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIG9ialR5cGUgPSBTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0VHlwZShvYmopO1xuICAgIGlmIChvYmpUeXBlID09PSBPYmpUeXBlLlN1cnZleSkgcmV0dXJuIFwic3VydmV5XCI7XG4gICAgaWYgKG9ialR5cGUgPT09IE9ialR5cGUuUGFnZSkgcmV0dXJuIFwicGFnZVwiO1xuICAgIGlmIChvYmpUeXBlID09PSBPYmpUeXBlLlBhbmVsKSByZXR1cm4gXCJwYW5lbFwiO1xuICAgIGlmIChvYmpUeXBlID09PSBPYmpUeXBlLlF1ZXN0aW9uKSByZXR1cm4gXCJxdWVzdGlvblwiO1xuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE9iamVjdE5hbWUob2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChvYmpbXCJuYW1lXCJdKSByZXR1cm4gb2JqW1wibmFtZVwiXTtcbiAgICB2YXIgb2JqVHlwZSA9IFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaik7XG4gICAgaWYgKG9ialR5cGUgIT0gT2JqVHlwZS5QYWdlKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgZGF0YSA9IDxTdXJ2ZXkuU3VydmV5Pig8U3VydmV5LlBhZ2U+b2JqKVtcImRhdGFcIl07XG4gICAgaWYgKCFkYXRhKSBkYXRhID0gPFN1cnZleS5TdXJ2ZXk+KDxTdXJ2ZXkuUGFnZT5vYmopW1wic3VydmV5XCJdOyAvL1RPRE9cbiAgICB2YXIgaW5kZXggPSBkYXRhLnBhZ2VzLmluZGV4T2YoPFN1cnZleS5QYWdlPm9iaik7XG4gICAgcmV0dXJuIFwiW1BhZ2UgXCIgKyAoaW5kZXggKyAxKSArIFwiXVwiO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0RWxlbWVudHMoXG4gICAgZWxlbWVudDogYW55LFxuICAgIGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxhbnk+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBbXTtcbiAgICBpZiAoZWxlbWVudC5nZXRFbGVtZW50c0luRGVzaWduKVxuICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0RWxlbWVudHNJbkRlc2lnbihpbmNsdWRlSGlkZGVuKTtcbiAgICBpZiAoZWxlbWVudC5lbGVtZW50cykgcmV0dXJuIGVsZW1lbnQuZWxlbWVudHM7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNQcm9wZXJ0eVZpc2libGUoXG4gICAgb2JqOiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgb25DYW5TaG93UHJvcGVydHlDYWxsYmFjazogKFxuICAgICAgb2JqZWN0OiBhbnksXG4gICAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuICAgICkgPT4gYm9vbGVhbiA9IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHkudmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrICYmICFvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrKG9iaiwgcHJvcGVydHkpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChlbDogSFRNTEVsZW1lbnQsIHBhZ2VFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIWVsIHx8ICFlbC5zY3JvbGxJbnRvVmlldyB8fCAhcGFnZUVsKSByZXR1cm47XG4gICAgdmFyIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB2YXIgaGVpZ2h0ID0gcGFnZUVsLm9mZnNldFBhcmVudFxuICAgICAgPyBwYWdlRWwub2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodFxuICAgICAgOiBwYWdlRWwuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChyZWN0LnRvcCA8IHBhZ2VFbC5vZmZzZXRUb3ApIHtcbiAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVjdC5ib3R0b20gPiBoZWlnaHQgJiZcbiAgICAgICAgKHJlY3QudG9wID4gcGFnZUVsLm9mZnNldFRvcCArIGhlaWdodCB8fCByZWN0LmhlaWdodCA8IGhlaWdodClcbiAgICAgICkge1xuICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5SGVscGVyLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlDb25kaXRpb25FZGl0b3JcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IGZvY3VzRmlyc3RDb250cm9sIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgUk1vZGFsIGZyb20gXCJybW9kYWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3JDdXN0b21XaWRnZXQge1xuICBwcml2YXRlIHN0YXRpYyBjdXN0b21XaWRnZXRJZCA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGN1c3RvbVdpZGdldE5hbWUgPSBcIm1vZGFsRWRpdG9yQ3VzdG9tV2lkZ2V0XCI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBqc29uOiBhbnkpIHt9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihlZGl0b3I6IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IsIGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmpzb24gJiYgdGhpcy5qc29uLmFmdGVyUmVuZGVyKSB7XG4gICAgICBpZiAoIWVsLmlkKSB7XG4gICAgICAgIGVsLmlkID1cbiAgICAgICAgICBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yQ3VzdG9tV2lkZ2V0LmN1c3RvbVdpZGdldE5hbWUgK1xuICAgICAgICAgIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3JDdXN0b21XaWRnZXQuY3VzdG9tV2lkZ2V0SWQ7XG4gICAgICAgIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3JDdXN0b21XaWRnZXQuY3VzdG9tV2lkZ2V0SWQrKztcbiAgICAgIH1cbiAgICAgIHRoaXMuanNvbi5hZnRlclJlbmRlcihlZGl0b3IsIGVsKTtcbiAgICAgIGlmICh0aGlzLmpzb24uZGVzdHJveSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWwsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNlbGYuZGVzdHJveShlZGl0b3IsIGVsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZXN0cm95KGVkaXRvcjogU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciwgZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuanNvbiAmJiB0aGlzLmpzb24uZGVzdHJveSkge1xuICAgICAgdGhpcy5qc29uLmRlc3Ryb3koZWRpdG9yLCBlbCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY3VzdG9tV2lkZ2V0cztcbiAgcHVibGljIHN0YXRpYyByZWdpc3RlckN1c3RvbVdpZGdldChlZGl0b3JUeXBlOiBzdHJpbmcsIGpzb246IGFueSkge1xuICAgIGlmICghU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5jdXN0b21XaWRnZXRzKVxuICAgICAgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5jdXN0b21XaWRnZXRzID0ge307XG4gICAgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5jdXN0b21XaWRnZXRzW1xuICAgICAgZWRpdG9yVHlwZVxuICAgIF0gPSBuZXcgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvckN1c3RvbVdpZGdldChqc29uKTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBpZENvdW50ZXIgPSAxO1xuICBwdWJsaWMgc3RhdGljIGdldEN1c3RvbVdpZGdldChcbiAgICBlZGl0b3JUeXBlOiBzdHJpbmdcbiAgKTogU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvckN1c3RvbVdpZGdldCB7XG4gICAgaWYgKCFTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yLmN1c3RvbVdpZGdldHMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yLmN1c3RvbVdpZGdldHNbZWRpdG9yVHlwZV07XG4gIH1cbiAgcHJpdmF0ZSBpc1Nob3dpbmdNb2RhbFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZWxlbWVudHM6IEhUTUxFbGVtZW50W107XG4gIHB1YmxpYyBlZGl0aW5nT2JqZWN0OiBhbnk7XG4gIHB1YmxpYyBvbkFwcGx5Q2xpY2s6IGFueTtcbiAgcHVibGljIG9uT2tDbGljazogYW55O1xuICBwdWJsaWMgb25SZXNldENsaWNrOiBhbnk7XG4gIHB1YmxpYyBvblNob3dNb2RhbDogYW55O1xuICBwdWJsaWMgb25IaWRlTW9kYWw6IGFueTtcbiAgcHVibGljIG1vZGFsTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbW9kYWxOYW1lVGFyZ2V0OiBzdHJpbmc7XG4gIGtvU2hvd0FwcGx5QnV0dG9uOiBhbnk7XG4gIGtvVGl0bGVDYXB0aW9uOiBhbnk7XG4gIGtvQWZ0ZXJSZW5kZXI6IGFueTtcbiAga29IdG1sVG9wOiBhbnk7XG4gIGtvSHRtbEJvdHRvbTogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvVGl0bGVDYXB0aW9uID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvSHRtbFRvcCA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgdGhpcy5rb0h0bWxCb3R0b20gPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIGlmICh0aGlzLnByb3BlcnR5KSB7XG4gICAgICB0aGlzLmtvVGl0bGVDYXB0aW9uKFxuICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb25cbiAgICAgICAgICAuZ2V0U3RyaW5nKFwicGUuZWRpdFByb3BlcnR5XCIpXG4gICAgICAgICAgW1wiZm9ybWF0XCJdKHRoaXMucHJvcGVydHkubmFtZSlcbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBuYW1lID0gcHJvcGVydHkgPyBwcm9wZXJ0eS5uYW1lIDogXCJcIjtcbiAgICB0aGlzLm1vZGFsTmFtZSA9XG4gICAgICBcIm1vZGVsRWRpdG9yXCIgKyB0aGlzLmVkaXRvclR5cGUgKyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yLmlkQ291bnRlcjtcbiAgICBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yLmlkQ291bnRlcisrO1xuICAgIHRoaXMubW9kYWxOYW1lVGFyZ2V0ID0gXCIjXCIgKyB0aGlzLm1vZGFsTmFtZTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb1Nob3dBcHBseUJ1dHRvbiA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbiAgICBzZWxmLm9uSGlkZU1vZGFsID0gZnVuY3Rpb24oKSB7fTtcbiAgICBzZWxmLm9uQXBwbHlDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5hcHBseSgpO1xuICAgIH07XG4gICAgc2VsZi5vbk9rQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuYXBwbHkoKTtcbiAgICAgIGlmICghc2VsZi5rb0hhc0Vycm9yKCkpIHNlbGYub25IaWRlTW9kYWwoKTtcbiAgICB9O1xuICAgIHNlbGYub25SZXNldENsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLnVwZGF0ZVZhbHVlKCk7XG4gICAgICBzZWxmLm9uSGlkZU1vZGFsKCk7XG4gICAgfTtcbiAgICBzZWxmLm9uU2hvd01vZGFsID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmJlZm9yZVNob3coKTtcbiAgICAgIHZhciBtb2RhbCA9IG5ldyBSTW9kYWwoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxmLm1vZGFsTmFtZVRhcmdldCksIHtcbiAgICAgICAgYm9keUNsYXNzOiBcIlwiLFxuICAgICAgICBjbG9zZVRpbWVvdXQ6IDEwMCxcbiAgICAgICAgZGlhbG9nT3BlbkNsYXNzOiBcImFuaW1hdGVkIGZhZGVJbkRvd25cIixcbiAgICAgICAgZm9jdXM6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG1vZGFsLm9wZW4oKTtcblxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJrZXlkb3duXCIsXG4gICAgICAgIGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgICAgbW9kYWwua2V5ZG93bihldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBzZWxmLm9uSGlkZU1vZGFsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuYmVmb3JlQ2xvc2VNb2RhbCgpO1xuICAgICAgICBtb2RhbC5jbG9zZSgpO1xuICAgICAgfTtcbiAgICAgIGlmICghIXRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgZm9jdXNGaXJzdENvbnRyb2wodGhpcy5lbGVtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmtvQWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbihlbCwgY29uKSB7XG4gICAgICByZXR1cm4gc2VsZi5hZnRlclJlbmRlcihlbCwgY29uKTtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzZXR1cCgpIHtcbiAgICBzdXBlci5zZXR1cCgpO1xuICAgIHRoaXMuYmVmb3JlU2hvdygpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNNb2RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd2luZ01vZGFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU2hvd2luZ01vZGFsVmFsdWU7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgdGhpcy5pc1Nob3dpbmdNb2RhbFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGJlZm9yZUNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5pc1Nob3dpbmdNb2RhbFZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIG9uT3B0aW9uc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5rb1Nob3dBcHBseUJ1dHRvbiA9IGtvLm9ic2VydmFibGUoXG4gICAgICAhdGhpcy5vcHRpb25zIHx8IHRoaXMub3B0aW9ucy5zaG93QXBwbHlCdXR0b25JbkVkaXRvcnNcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXRPYmplY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMuZWRpdGluZ09iamVjdCA9IHZhbHVlO1xuICAgIHN1cGVyLnNldE9iamVjdCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLnByb3BlcnR5KSB7XG4gICAgICB2YXIgaHRtbCA9IHRoaXMub3B0aW9ucy5vblByb3BlcnR5RWRpdG9yTW9kYWxTaG93RGVzY3JpcHRpb25DYWxsYmFjayhcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICB2YWx1ZVxuICAgICAgKTtcbiAgICAgIGlmIChodG1sKSB7XG4gICAgICAgIGlmIChodG1sLnRvcCkgdGhpcy5rb0h0bWxUb3AoaHRtbC50b3ApO1xuICAgICAgICBpZiAoaHRtbC5ib3R0b20pIHRoaXMua29IdG1sQm90dG9tKGh0bWwuYm90dG9tKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXIoZWxlbWVudHMsIGNvbikge1xuICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgICB2YXIgY3VzdG9tV2lkZ2V0ID0gU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5nZXRDdXN0b21XaWRnZXQoXG4gICAgICB0aGlzLmVkaXRvclR5cGVcbiAgICApO1xuICAgIGlmICghIWN1c3RvbVdpZGdldCkge1xuICAgICAgdmFyIGVsID0gdGhpcy5HZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzKTtcbiAgICAgIHZhciB0RWwgPSBlbGVtZW50c1swXTtcbiAgICAgIGlmICh0RWwubm9kZU5hbWUgPT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XG4gICAgICB0RWwgPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgIGlmICh0RWwubm9kZU5hbWUgPT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XG4gICAgICBjdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcywgZWwpO1xuICAgIH1cbiAgICBmb2N1c0ZpcnN0Q29udHJvbChlbGVtZW50cyk7XG4gIH1cbiAgcHJpdmF0ZSBHZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzOiBhbnkpIHtcbiAgICBpZiAoIWVsZW1lbnRzIHx8ICFlbGVtZW50cy5sZW5ndGgpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjdGV4dFwiICYmIGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI2NvbW1lbnRcIilcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB7XG4gIHB1YmxpYyBrb1RleHRWYWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29UZXh0VmFsdWUgPSBrby5vYnNlcnZhYmxlKCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29UZXh0VmFsdWUuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLm9ua29UZXh0VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ0ZXh0XCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHN0ciA9IHZhbHVlO1xuICAgIGlmIChzdHIubGVuZ3RoID4gMjApIHtcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMjApICsgXCIuLi5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBwcm90ZWN0ZWQgb25rb1RleHRWYWx1ZUNoYW5nZWQobmV3VmFsdWUpIHt9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmtvVGV4dFZhbHVlKHRoaXMuZWRpdGluZ1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICB0aGlzLnNldFZhbHVlQ29yZSh0aGlzLmtvVGV4dFZhbHVlKCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUh0bWxFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eVRleHRFZGl0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJodG1sXCI7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwidGV4dFwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiaHRtbFwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlIdG1sRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1vZGFsRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBmaW5kUGFyZW50Tm9kZSB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcIi4vc3R5bGVzbWFuYWdlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlPYmplY3RNZW51SXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBvbkNsaWNrOiAob2JqOiBTdXJ2ZXkuQmFzZSkgPT4gYW55O1xuICBpY29uPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gIGhhc1RpdGxlPzogYm9vbGVhbjtcbiAgdGVtcGxhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlGb3JEZXNpZ25lciBleHRlbmRzIFN1cnZleS5TdXJ2ZXkge1xuICBwcml2YXRlIHNlbGVjdGVkRWxlbWVudFZhbHVlOiBhbnk7XG4gIGVkaXRRdWVzdGlvbkNsaWNrOiBhbnk7XG4gIHB1YmxpYyBvblNlbGVjdGVkRWxlbWVudENoYW5nZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIG9uRWRpdEJ1dHRvbkNsaWNrOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIHB1YmxpYyBvbkdldE1lbnVJdGVtczogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICBwdWJsaWMgb25FbGVtZW50RG91YmxlQ2xpY2s6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIG9uVXBkYXRlRWxlbWVudEFsbG93aW5nT3B0aW9uczogKG9wdGlvbnM6IGFueSkgPT4gYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBqc29uT2JqOiBhbnkgPSBudWxsLFxuICAgIHJlbmRlcmVkRWxlbWVudDogYW55ID0gbnVsbCxcbiAgICBjc3M6IGFueSA9IG51bGxcbiAgKSB7XG4gICAgc3VwZXIoanNvbk9iaiwgcmVuZGVyZWRFbGVtZW50LCBjc3MpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnNldERlc2lnbk1vZGUodHJ1ZSk7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFnZS5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgb3B0aW9ucy5wYWdlW1wib25BZnRlclJlbmRlclBhZ2VcIl0ob3B0aW9ucy5odG1sRWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb24uYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIG9wdGlvbnMucXVlc3Rpb25bXCJvbkFmdGVyUmVuZGVyUXVlc3Rpb25cIl0ob3B0aW9ucy5odG1sRWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyUGFuZWwuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIG9wdGlvbnMucGFuZWxbXCJvbkFmdGVyUmVuZGVyUGFuZWxcIl0ob3B0aW9ucy5odG1sRWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5lZGl0UXVlc3Rpb25DbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5vbkVkaXRCdXR0b25DbGljay5maXJlKHNlbGYsIG51bGwpO1xuICAgIH07XG4gICAgdGhpcy5vblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcy5hZGQob25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMpO1xuICAgIHRoaXMub25VcGRhdGVQYW5lbENzc0NsYXNzZXMuYWRkKG9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlRWxlbWVudEFsbG93aW5nT3B0aW9ucyhvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgaWYgKHRoaXMub25VcGRhdGVFbGVtZW50QWxsb3dpbmdPcHRpb25zICYmIG9ialtcImFsbG93aW5nT3B0aW9uc1wiXSkge1xuICAgICAgb2JqW1wiYWxsb3dpbmdPcHRpb25zXCJdLm9iaiA9IG9iajtcbiAgICAgIHRoaXMub25VcGRhdGVFbGVtZW50QWxsb3dpbmdPcHRpb25zKG9ialtcImFsbG93aW5nT3B0aW9uc1wiXSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRNZW51SXRlbXMob2JqOiBTdXJ2ZXkuQmFzZSk6IEFycmF5PElTdXJ2ZXlPYmplY3RNZW51SXRlbT4ge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBvcHRpb25zID0geyBvYmo6IG9iaiwgaXRlbXM6IGl0ZW1zIH07XG4gICAgdGhpcy5vbkdldE1lbnVJdGVtcy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLml0ZW1zO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRFbGVtZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBzZWxlY3RlZEVsZW1lbnQodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnbilcbiAgICAgIHZhbHVlID0gdmFsdWUuc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ247XG4gICAgaWYgKHZhbHVlID09IHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWUpIHJldHVybjtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlO1xuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCAmJiBvbGRWYWx1ZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSkge1xuICAgICAgb2xkVmFsdWVbXCJvblNlbGVjdGVkRWxlbWVudENoYW5nZWRcIl0oKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRWYWx1ZSAhPSBudWxsICYmXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlW1wib25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkXCJdXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlW1wib25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkXCJdKCk7XG4gICAgfVxuICAgIHRoaXMub25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgb2xkRWxlbWVudDogb2xkVmFsdWUsXG4gICAgICBuZXdFbGVtZW50OiB2YWx1ZVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBkb0VsZW1lbnREb3VibGVDbGljayhvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgdGhpcy5vbkVsZW1lbnREb3VibGVDbGljay5maXJlKHRoaXMsIHsgZWxlbWVudDogb2JqIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRFZGl0b3JMb2NTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN1cnZleShlbDogYW55KTogYW55IHtcbiAgaWYgKCFlbCkgcmV0dXJuIG51bGw7XG4gIHZhciByZXMgPSBlbFtcInN1cnZleVwiXTtcbiAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgcmV0dXJuIGVsW1wiZGF0YVwiXTtcbn1cblxuZnVuY3Rpb24gcGFuZWxCYXNlT25DcmVhdGluZyhzZWxmOiBhbnkpIHtcbiAgc2VsZi5kcmFnRW50ZXJDb3VudGVyID0gMDtcbiAgc2VsZi5lbXB0eUVsZW1lbnQgPSBudWxsO1xuICBzZWxmLmtvUm93cy5zdWJzY3JpYmUoZnVuY3Rpb24oY2hhbmdlcykge1xuICAgIGlmIChzZWxmLmVtcHR5RWxlbWVudCkge1xuICAgICAgc2VsZi5lbXB0eUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNlbGYua29Sb3dzKCkubGVuZ3RoID4gMCA/IFwibm9uZVwiIDogXCJcIjtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlbGVtZW50T25DcmVhdGluZyhzdXJ2ZXlFbGVtZW50OiBhbnkpIHtcbiAgc3VydmV5RWxlbWVudC5hbGxvd2luZ09wdGlvbnMgPSB7XG4gICAgYWxsb3dEZWxldGU6IHRydWUsXG4gICAgYWxsb3dFZGl0OiB0cnVlLFxuICAgIGFsbG93Q29weTogdHJ1ZSxcbiAgICBhbGxvd0FkZFRvVG9vbGJveDogdHJ1ZSxcbiAgICBhbGxvd0RyYWdnaW5nOiB0cnVlLFxuICAgIGFsbG93Q2hhbmdlVHlwZTogdHJ1ZSxcbiAgICBhbGxvd1Nob3dIaWRlVGl0bGU6IHRydWUsXG4gICAgYWxsb3dDaGFuZ2VSZXF1aXJlZDogdHJ1ZVxuICB9O1xuICBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyVmFsdWUgPSBudWxsO1xuICBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHN1cnZleUVsZW1lbnQuZHJhZ0Ryb3BIZWxwZXJWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyVmFsdWUgPSBnZXRTdXJ2ZXkoc3VydmV5RWxlbWVudClbXG4gICAgICAgIFwiZHJhZ0Ryb3BIZWxwZXJcIlxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cnZleUVsZW1lbnQuZHJhZ0Ryb3BIZWxwZXJWYWx1ZTtcbiAgfTtcbiAgc3VydmV5RWxlbWVudC5yZW5kZXJlZEVsZW1lbnQgPSBudWxsO1xuICBzdXJ2ZXlFbGVtZW50LmtvSXNEcmFnZ2luZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICBzdXJ2ZXlFbGVtZW50LmtvSXNTZWxlY3RlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICBzdXJ2ZXlFbGVtZW50LmtvSXNEcmFnZ2luZy5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICBpZiAoc3VydmV5RWxlbWVudC5yZW5kZXJlZEVsZW1lbnQpIHtcbiAgICAgIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSBuZXdWYWx1ZSA/IDAuNCA6IDE7XG4gICAgfVxuICB9KTtcbiAgc3VydmV5RWxlbWVudC5rb0lzU2VsZWN0ZWQuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgaWYgKHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50KSB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgc3VydmV5RWxlbWVudC5yZW5kZXJlZEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcbiAgICAgICAgICBcInN2ZF9xX3NlbGVjdGVkXCIsXG4gICAgICAgICAgXCJzdmQtbWFpbi1ib3JkZXItY29sb3JcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VydmV5RWxlbWVudC5yZW5kZXJlZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgICBcInN2ZF9xX3NlbGVjdGVkXCIsXG4gICAgICAgICAgXCJzdmQtbWFpbi1ib3JkZXItY29sb3JcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVtcHR5UGFuZWxFbGVtZW50KFxuICByb290OiBIVE1MRWxlbWVudCxcbiAgZHJhZ0Ryb3BIZWxwZXI6IGFueSxcbiAgc2VsZjogYW55XG4pOiBIVE1MRWxlbWVudCB7XG4gIHZhciBlRGl2OiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGVEaXYuY2xhc3NOYW1lID0gXCJ3ZWxsIGNhcmQgY2FyZC1ibG9ja1wiO1xuICBlRGl2Lm9uZHJhZ292ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgZHJhZ0Ryb3BIZWxwZXIuZG9EcmFnRHJvcE92ZXIoZSwgc2VsZik7XG4gIH07XG4gIHZhciBlU3BhbjogSFRNTFNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIGVTcGFuLnRleHRDb250ZW50ID0gZ2V0U3VydmV5KHNlbGYpLmdldEVkaXRvckxvY1N0cmluZyhcInN1cnZleS5kcm9wUXVlc3Rpb25cIik7XG4gIGVEaXYuYXBwZW5kQ2hpbGQoZVNwYW4pO1xuICByb290LmFwcGVuZENoaWxkKGVEaXYpO1xuICByZXR1cm4gZURpdjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVlc3Rpb25EZXNpZ25JdGVtKG9iajogYW55LCBpdGVtOiBhbnkpOiBIVE1MTElFbGVtZW50IHtcbiAgdmFyIHJlcyA9IDxIVE1MTElFbGVtZW50PmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGJ0bi5pbm5lclRleHQgPSBpdGVtLnRleHQ7XG4gIHZhciBvbkNsaWNrID0gaXRlbS5vbkNsaWNrO1xuICBidG4ub25jbGljayA9IGZ1bmN0aW9uKCkge1xuICAgIG9uQ2xpY2sob2JqLCBpdGVtKTtcbiAgfTtcbiAgYnRuLmNsYXNzTmFtZSA9IFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBidG4teHNcIjtcbiAgcmVzLmFwcGVuZENoaWxkKGJ0bik7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRPbkFmdGVyUmVuZGVyaW5nKFxuICBkb21FbGVtZW50OiBhbnksXG4gIHN1cnZleUVsZW1lbnQ6IGFueSxcbiAgaXNQYW5lbDogYm9vbGVhbixcbiAgZGlzYWJsZTogYm9vbGVhblxuKSB7XG4gIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50ID0gZG9tRWxlbWVudDtcbiAgc3VydmV5RWxlbWVudC5yZW5kZXJlZEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInN2ZF9xdWVzdGlvblwiKTtcbiAgaWYgKFN0eWxlc01hbmFnZXIuY3VycmVudFRoZW1lKCkgPT09IFwiYm9vdHN0cmFwXCIpIHtcbiAgICBzdXJ2ZXlFbGVtZW50LnJlbmRlcmVkRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic3ZkLWRhcmstYmctY29sb3JcIik7XG4gIH1cbiAgc3VydmV5RWxlbWVudC5yZW5kZXJlZEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInN2ZF9xX2Rlc2lnbl9ib3JkZXJcIik7XG4gIGdldFN1cnZleShzdXJ2ZXlFbGVtZW50KS51cGRhdGVFbGVtZW50QWxsb3dpbmdPcHRpb25zKHN1cnZleUVsZW1lbnQpO1xuICBpZiAoc3VydmV5RWxlbWVudC5rb0lzU2VsZWN0ZWQoKSlcbiAgICBzdXJ2ZXlFbGVtZW50LnJlbmRlcmVkRWxlbWVudC5jbGFzc0xpc3QuYWRkKFxuICAgICAgXCJzdmRfcV9zZWxlY3RlZFwiLFxuICAgICAgXCJzdmQtbWFpbi1ib3JkZXItY29sb3JcIlxuICAgICk7XG4gIHN1cnZleUVsZW1lbnQuZHJhZ0Ryb3BIZWxwZXIoKS5hdHRhY2hUb0VsZW1lbnQoZG9tRWxlbWVudCwgc3VydmV5RWxlbWVudCk7XG4gIGRvbUVsZW1lbnQub25jbGljayA9IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoIWVbXCJtYXJrRXZlbnRcIl0pIHtcbiAgICAgIGVbXCJtYXJrRXZlbnRcIl0gPSB0cnVlO1xuICAgICAgaWYgKHN1cnZleUVsZW1lbnQucGFyZW50KSB7XG4gICAgICAgIGdldFN1cnZleShzdXJ2ZXlFbGVtZW50KVtcInNlbGVjdGVkRWxlbWVudFwiXSA9IHN1cnZleUVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvLyBlbC5vbmtleWRvd24gPSBmdW5jdGlvbihlKSB7XG4gIC8vICAgaWYgKGUud2l0Y2ggPT0gNDYpIGdldFN1cnZleShzdXJ2ZXlFbGVtZW50KS5kZWxldGVDdXJyZW50T2JqZWN0Q2xpY2soKTtcbiAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgLy8gfTtcbiAgZG9tRWxlbWVudC5vbmRibGNsaWNrID0gZnVuY3Rpb24oZSkge1xuICAgIGdldFN1cnZleShzdXJ2ZXlFbGVtZW50KS5kb0VsZW1lbnREb3VibGVDbGljayhzdXJ2ZXlFbGVtZW50KTtcbiAgfTtcbiAgZGlzYWJsZSA9IGRpc2FibGUgJiYgIShzdXJ2ZXlFbGVtZW50LmdldFR5cGUoKSA9PSBcInBhbmVsZHluYW1pY1wiKTsgLy9UT0RPXG4gIGlmIChkaXNhYmxlKSB7XG4gICAgdmFyIGNoaWxkcyA9IGRvbUVsZW1lbnQuY2hpbGROb2RlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNoaWxkc1tpXS5zdHlsZSkgY2hpbGRzW2ldLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgICB9XG4gIH1cbiAgYWRkQWRvcm5lcihkb21FbGVtZW50LCBzdXJ2ZXlFbGVtZW50KTtcbn1cblxudmFyIGFkb3JuZXJzQ29uZmlnOiB7IFtpbmRleDogc3RyaW5nXTogYW55W10gfSA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBZG9ybmVyKG5hbWUsIGFkb3JuZXIpIHtcbiAgaWYgKCFhZG9ybmVyc0NvbmZpZ1tuYW1lXSkge1xuICAgIGFkb3JuZXJzQ29uZmlnW25hbWVdID0gW107XG4gIH1cbiAgYWRvcm5lcnNDb25maWdbbmFtZV0ucHVzaChhZG9ybmVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBZG9ybmVycyhuYW1lczogc3RyaW5nW10gPSB1bmRlZmluZWQpIHtcbiAgaWYgKG5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAobmFtZXMgfHwgW10pLmZvckVhY2gobmFtZSA9PiBkZWxldGUgYWRvcm5lcnNDb25maWdbbmFtZV0pO1xuICB9IGVsc2Uge1xuICAgIGFkb3JuZXJzQ29uZmlnID0ge307XG4gIH1cbn1cblxuZnVuY3Rpb24gb25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMoc3VydmV5LCBvcHRpb25zKSB7XG4gIHZhciBjbGFzc2VzID0gb3B0aW9ucy5wYW5lbCA/IG9wdGlvbnMuY3NzQ2xhc3Nlcy5wYW5lbCA6IG9wdGlvbnMuY3NzQ2xhc3NlcztcbiAgT2JqZWN0LmtleXMoYWRvcm5lcnNDb25maWcpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgYWRvcm5lcnNDb25maWdbZWxlbWVudF0uZm9yRWFjaChhZG9ybmVyID0+IHtcbiAgICAgIHZhciBhZG9ybmVyTWFya2VyQ2xhc3MgPSBhZG9ybmVyLmdldE1hcmtlckNsYXNzKFxuICAgICAgICBvcHRpb25zLnF1ZXN0aW9uIHx8IG9wdGlvbnMucGFuZWxcbiAgICAgICk7XG5cbiAgICAgIGNsYXNzZXNbZWxlbWVudF0gPSBhcHBseUFkb3JuZXJDbGFzcyhcbiAgICAgICAgY2xhc3Nlc1tlbGVtZW50XSxcbiAgICAgICAgYWRvcm5lck1hcmtlckNsYXNzXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QWRvcm5lckNsYXNzKGNsYXNzZXMsIGFkb3JuZXJDbGFzcykge1xuICB2YXIgcmVzdWx0ID0gY2xhc3NlcztcblxuICBpZiAoISFhZG9ybmVyQ2xhc3MpIHtcbiAgICByZXN1bHQgPSAhIXJlc3VsdCA/IHJlc3VsdCArIFwiIFwiICsgYWRvcm5lckNsYXNzIDogYWRvcm5lckNsYXNzO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZmlsdGVyTmVzdGVkUXVlc3Rpb25zKHJvb3RRdWVzdGlvbk5vZGUsIGVsZW1lbnRzKSB7XG4gIHZhciB0YXJnZXRFbGVtZW50cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHF1ZXN0aW9uRWxlbWVudCA9IGZpbmRQYXJlbnROb2RlKFwic3ZkX3F1ZXN0aW9uXCIsIGVsZW1lbnRzW2ldKTtcbiAgICBpZiAocXVlc3Rpb25FbGVtZW50ID09PSByb290UXVlc3Rpb25Ob2RlKSB7XG4gICAgICB0YXJnZXRFbGVtZW50cy5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBhZGRBZG9ybmVyKG5vZGUsIG1vZGVsKSB7XG4gIE9iamVjdC5rZXlzKGFkb3JuZXJzQ29uZmlnKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGFkb3JuZXJzQ29uZmlnW2VsZW1lbnRdLmZvckVhY2goYWRvcm5lciA9PiB7XG4gICAgICB2YXIgZWxlbWVudENsYXNzID0gYWRvcm5lci5nZXRNYXJrZXJDbGFzcyhtb2RlbCk7XG4gICAgICBpZiAoISFlbGVtZW50Q2xhc3MpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgIFwiLlwiICsgZWxlbWVudENsYXNzLnJlcGxhY2UoL1xccy9nLCBcIi5cIilcbiAgICAgICAgKTtcbiAgICAgICAgZWxlbWVudHMgPSBmaWx0ZXJOZXN0ZWRRdWVzdGlvbnMobm9kZSwgZWxlbWVudHMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWxlbWVudHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgbm9kZS5jbGFzc05hbWUuaW5kZXhPZihlbGVtZW50Q2xhc3MpICE9PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBlbGVtZW50cyA9IFtub2RlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGFkb3JuZXIuYWZ0ZXJSZW5kZXIoZWxlbWVudHMsIG1vZGVsLCBnZXRTdXJ2ZXkobW9kZWwpLmdldEVkaXRvcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuU3VydmV5LlBhZ2UucHJvdG90eXBlW1wib25DcmVhdGluZ1wiXSA9IGZ1bmN0aW9uKCkge1xuICBwYW5lbEJhc2VPbkNyZWF0aW5nKHRoaXMpO1xufTtcblxuU3VydmV5LlBhZ2UucHJvdG90eXBlW1wib25BZnRlclJlbmRlclBhZ2VcIl0gPSBmdW5jdGlvbihlbCkge1xuICBpZiAoIWdldFN1cnZleSh0aGlzKS5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgZHJhZ0Ryb3BIZWxwZXIgPSBnZXRTdXJ2ZXkodGhpcylbXCJkcmFnRHJvcEhlbHBlclwiXTtcbiAgdGhpcy5kcmFnRW50ZXJDb3VudGVyID0gMDtcbiAgZWwub25kcmFnZW50ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHNlbGYuZHJhZ0VudGVyQ291bnRlcisrO1xuICB9O1xuICBlbC5vbmRyYWdsZWF2ZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICBzZWxmLmRyYWdFbnRlckNvdW50ZXItLTtcbiAgICBpZiAoc2VsZi5kcmFnRW50ZXJDb3VudGVyID09PSAwKSBkcmFnRHJvcEhlbHBlci5kb0xlYXZlUGFnZShlKTtcbiAgfTtcbiAgZWwub25kcmFnb3ZlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIGVsLm9uZHJvcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkcmFnRHJvcEhlbHBlci5kb0Ryb3AoZSk7XG4gIH07XG4gIC8vIGlmICh0aGlzLmVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gIC8vICAgdGhpcy5lbXB0eUVsZW1lbnQgPSBhZGRFbXB0eVBhbmVsRWxlbWVudChlbCwgZHJhZ0Ryb3BIZWxwZXIsIHNlbGYpO1xuICAvLyB9XG59O1xuXG5TdXJ2ZXkuUGFuZWwucHJvdG90eXBlW1wib25DcmVhdGluZ1wiXSA9IGZ1bmN0aW9uKCkge1xuICBwYW5lbEJhc2VPbkNyZWF0aW5nKHRoaXMpO1xuICBlbGVtZW50T25DcmVhdGluZyh0aGlzKTtcbn07XG5cblN1cnZleS5QYW5lbC5wcm90b3R5cGVbXCJvbkFmdGVyUmVuZGVyUGFuZWxcIl0gPSBmdW5jdGlvbihlbCkge1xuICBpZiAoIWdldFN1cnZleSh0aGlzKS5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgdmFyIHJvd3MgPSB0aGlzLmtvUm93cygpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0aGlzLmVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhpcy5lbXB0eUVsZW1lbnQgPSBhZGRFbXB0eVBhbmVsRWxlbWVudChlbCwgc2VsZi5kcmFnRHJvcEhlbHBlcigpLCBzZWxmKTtcbiAgfVxuICBlbGVtZW50T25BZnRlclJlbmRlcmluZyhlbCwgdGhpcywgdHJ1ZSwgdGhpcy5rb0lzRHJhZ2dpbmcoKSk7XG59O1xuXG5TdXJ2ZXkuUGFuZWwucHJvdG90eXBlW1wib25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkXCJdID0gZnVuY3Rpb24oKSB7XG4gIGlmIChnZXRTdXJ2ZXkodGhpcykgPT0gbnVsbCkgcmV0dXJuO1xuICB0aGlzLmtvSXNTZWxlY3RlZChnZXRTdXJ2ZXkodGhpcylbXCJzZWxlY3RlZEVsZW1lbnRWYWx1ZVwiXSA9PSB0aGlzKTtcbn07XG5cblN1cnZleS5RdWVzdGlvbkJhc2UucHJvdG90eXBlW1wib25DcmVhdGluZ1wiXSA9IGZ1bmN0aW9uKCkge1xuICBlbGVtZW50T25DcmVhdGluZyh0aGlzKTtcbn07XG5cblN1cnZleS5RdWVzdGlvbkJhc2UucHJvdG90eXBlW1wib25BZnRlclJlbmRlclF1ZXN0aW9uXCJdID0gZnVuY3Rpb24oZWwpIHtcbiAgaWYgKCFnZXRTdXJ2ZXkodGhpcykuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gIGVsZW1lbnRPbkFmdGVyUmVuZGVyaW5nKGVsLCB0aGlzLCBmYWxzZSwgdHJ1ZSk7XG59O1xuXG5TdXJ2ZXkuUXVlc3Rpb25CYXNlLnByb3RvdHlwZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoZ2V0U3VydmV5KHRoaXMpID09IG51bGwpIHJldHVybjtcbiAgdGhpcy5rb0lzU2VsZWN0ZWQoZ2V0U3VydmV5KHRoaXMpW1wic2VsZWN0ZWRFbGVtZW50VmFsdWVcIl0gPT0gdGhpcyk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleWpzT2JqZWN0cy50cyIsImV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VmFsdWUocHJlZml4OiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pIHtcbiAgdmFyIGluZGV4ID0gdmFsdWVzLnJlZHVjZSgocmVzLCB2YWwpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiAmJiB2YWwuaW5kZXhPZihwcmVmaXgpID09PSAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY2FuZGlkYXRlID0gcGFyc2VJbnQodmFsLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgIGlmIChjYW5kaWRhdGUgPj0gcmVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIDEpO1xuICByZXR1cm4gcHJlZml4ICsgaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50Tm9kZShjbGFzc05hbWU6IHN0cmluZywgc291cmNlTm9kZTogSFRNTEVsZW1lbnQpIHtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZU5vZGU7XG4gIHdoaWxlIChcbiAgICAocGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpICYmXG4gICAgIXBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKVxuICApO1xuICByZXR1cm4gcGFyZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNGaXJzdENvbnRyb2wocmVuZGVyZWRFbGVtZW50czogSFRNTEVsZW1lbnRbXSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmVkRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlcmVkRWxlbWVudHNbaV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB2YXIgZWxlbWVudHM6IE5vZGVMaXN0T2Y8RWxlbWVudD4gfCBBcnJheTxIVE1MRWxlbWVudD4gPSByZW5kZXJlZEVsZW1lbnRzW1xuICAgICAgICBpXG4gICAgICBdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJmb3JtLWNvbnRyb2xcIik7XG4gICAgICBpZiAoXG4gICAgICAgIGVsZW1lbnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICByZW5kZXJlZEVsZW1lbnRzW2ldLmNsYXNzTmFtZS5pbmRleE9mKFwiZm9ybS1jb250cm9sXCIpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnRzID0gW3JlbmRlcmVkRWxlbWVudHNbaV1dO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSA8YW55PmVsZW1lbnRzWzBdO1xuICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiYVwiKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KSwgMTApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbHMvdXRpbHMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgfSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TW9kYWxFZGl0b3JcIjtcbmltcG9ydCB7XG4gIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSxcbiAgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnNcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5LFxuICBTdXJ2ZXlRdWVzdGlvbkVkaXRvclJvdyxcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0aWVzXG59IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9yUHJvcGVydGllc1wiO1xuaW1wb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLFxuICBJU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uXG59IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvblwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCBSTW9kYWwgZnJvbSBcInJtb2RhbFwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyIH0gZnJvbSBcIi4uL3N1cnZleUhlbHBlclwiO1xuaW1wb3J0IHsgdW5kZXJsaW5lIH0gZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBmb2N1c0ZpcnN0Q29udHJvbCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlFZGl0b3JTaG93V2luZG93IHtcbiAga29WaXNpYmxlOiBhbnk7XG4gIGtvRWRpdG9yOiBhbnk7XG4gIHB1YmxpYyBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrOiAoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKSA9PiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmtvVmlzaWJsZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIHRoaXMua29FZGl0b3IgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuICB9XG4gIHB1YmxpYyBzaG93KFxuICAgIHF1ZXN0aW9uQmFzZTogU3VydmV5LkJhc2UsXG4gICAgZWxXaW5kb3c6IEhUTUxFbGVtZW50LFxuICAgIG9uQ2hhbmdlZDogKHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlKSA9PiBhbnksXG4gICAgb3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsLFxuICAgIG9uQ2xvc2VkOiAoKSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIHZhciBlZGl0b3IgPSBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3IoXG4gICAgICBxdWVzdGlvbkJhc2UsXG4gICAgICB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2ssXG4gICAgICBudWxsLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgZWRpdG9yLm9uQ2hhbmdlZCA9IG9uQ2hhbmdlZDtcblxuICAgIHRoaXMua29FZGl0b3IoZWRpdG9yKTtcbiAgICB0aGlzLmtvVmlzaWJsZSh0cnVlKTtcblxuICAgIHZhciBtb2RhbCA9IG5ldyBSTW9kYWwoZWxXaW5kb3csIHtcbiAgICAgIGJvZHlDbGFzczogXCJcIixcbiAgICAgIGNsb3NlVGltZW91dDogMTAwLFxuICAgICAgZGlhbG9nT3BlbkNsYXNzOiBcImFuaW1hdGVkIGZhZGVJblwiLFxuICAgICAgZm9jdXM6IGZhbHNlLFxuICAgICAgYWZ0ZXJDbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChvbkNsb3NlZCkgb25DbG9zZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb2RhbC5vcGVuKCk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJrZXlkb3duXCIsXG4gICAgICBmdW5jdGlvbihldikge1xuICAgICAgICBtb2RhbC5rZXlkb3duKGV2KTtcbiAgICAgIH0sXG4gICAgICBmYWxzZVxuICAgICk7XG5cbiAgICBlZGl0b3Iub25IaWRlV2luZG93ID0gZnVuY3Rpb24oKSB7XG4gICAgICBtb2RhbC5jbG9zZSgpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUHJvcGVydGllcyB7XG4gIHByaXZhdGUgcHJvcGVydGllczogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT47XG4gIHByaXZhdGUgZWRpdG9yRGVmaW5pdGlvbjogQXJyYXk8SVN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbj47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvYmo6IGFueSxcbiAgICBwdWJsaWMgb25DYW5TaG93UHJvcGVydHlDYWxsYmFjazogKFxuICAgICAgb2JqZWN0OiBhbnksXG4gICAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuICAgICkgPT4gYm9vbGVhblxuICApIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YVtcImdldFByb3BlcnRpZXNCeU9ialwiXVxuICAgICAgPyBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YVtcImdldFByb3BlcnRpZXNCeU9ialwiXSh0aGlzLm9iailcbiAgICAgIDogU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyh0aGlzLm9iai5nZXRUeXBlKCkpO1xuICAgIHRoaXMuZWRpdG9yRGVmaW5pdGlvbiA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoXG4gICAgICB0aGlzLm9iai5nZXRUeXBlKClcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHlDb3JlKHByb3BlcnR5TmFtZSk7XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5pc1Byb3BlcnR5VmlzaWJsZShcbiAgICAgIHRoaXMub2JqLFxuICAgICAgcHJvcGVydHksXG4gICAgICB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2tcbiAgICApXG4gICAgICA/IHByb3BlcnR5XG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eUNvcmUocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICB2YXIgcHJvcGVydHkgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGVydHlOYW1lKSByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllcyh0YWI6IGFueSk6IEFycmF5PFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JEZWZpbml0aW9uXG4gICAgICAucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiLnByb3BlcnRpZXMpLCBbXG4gICAgICAgIDxhbnk+eyBuYW1lOiB0YWIubmFtZSwgdGFiOiB0YWIubmFtZSB9XG4gICAgICBdKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgcHJvcCA9PlxuICAgICAgICAgIHByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR5cGVvZiBwcm9wICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgcHJvcC50YWIgPT09IHRhYi5uYW1lXG4gICAgICApXG4gICAgICAubWFwKHByb3AgPT4gdHlwZW9mIHByb3AgIT09IFwic3RyaW5nXCIgJiYgdGhpcy5nZXRQcm9wZXJ0eUNvcmUocHJvcC5uYW1lKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIHByb3AgPT5cbiAgICAgICAgICAhIXByb3AgJiZcbiAgICAgICAgICAoKHByb3AubmFtZSA9PSB0YWIubmFtZSAmJiB0YWIudmlzaWJsZSA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgICAgIFN1cnZleUhlbHBlci5pc1Byb3BlcnR5VmlzaWJsZShcbiAgICAgICAgICAgICAgdGhpcy5vYmosXG4gICAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICAgIHRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFja1xuICAgICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWRpdG9yIHtcbiAgcHJvdGVjdGVkIHByb3BlcnRpZXM6IFN1cnZleVF1ZXN0aW9uUHJvcGVydGllcztcbiAgcHVibGljIG9uQ2hhbmdlZDogKG9iajogU3VydmV5LkJhc2UpID0+IGFueTtcbiAgcHVibGljIG9uSGlkZVdpbmRvdzogKCkgPT4gYW55O1xuICBwdWJsaWMgb25Pa0NsaWNrOiBhbnk7XG4gIHB1YmxpYyBvbkFwcGx5Q2xpY2s6IGFueTtcbiAgcHVibGljIG9uUmVzZXRDbGljazogYW55O1xuICBrb1RhYnM6IEtub2Nrb3V0T2JzZXJ2YWJsZUFycmF5PFN1cnZleVF1ZXN0aW9uRWRpdG9yVGFiPjtcbiAga29BY3RpdmVUYWIgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oKTtcbiAga29UaXRsZSA9IGtvLm9ic2VydmFibGU8c3RyaW5nPigpO1xuICBrb1Nob3dBcHBseUJ1dHRvbjogYW55O1xuICBvblRhYkNsaWNrOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG9iajogYW55LFxuICAgIHB1YmxpYyBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrOiAoXG4gICAgICBvYmplY3Q6IGFueSxcbiAgICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICAgKSA9PiBib29sZWFuLFxuICAgIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgcHVibGljIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCF0aGlzLmNsYXNzTmFtZSAmJiB0aGlzLm9iai5nZXRUeXBlKSB7XG4gICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMub2JqLmdldFR5cGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IFN1cnZleVF1ZXN0aW9uUHJvcGVydGllcyhcbiAgICAgIG9iaixcbiAgICAgIG9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2tcbiAgICApO1xuICAgIHNlbGYub25BcHBseUNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFwcGx5KCk7XG4gICAgfTtcbiAgICBzZWxmLm9uT2tDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5kb0Nsb3NlV2luZG93KGZhbHNlKTtcbiAgICB9O1xuICAgIHNlbGYub25SZXNldENsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmRvQ2xvc2VXaW5kb3codHJ1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9uVGFiQ2xpY2sgPSBmdW5jdGlvbih0YWIpIHtcbiAgICAgIHNlbGYua29BY3RpdmVUYWIodGFiLm5hbWUpO1xuICAgIH07XG4gICAgdmFyIHRhYnMgPSB0aGlzLmJ1aWxkVGFicygpO1xuICAgIHRhYnMuZm9yRWFjaCh0YWIgPT4gdGFiLmJlZm9yZVNob3coKSk7XG4gICAgdGhpcy5rb1RhYnMgPSBrby5vYnNlcnZhYmxlQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JUYWI+KHRhYnMpO1xuICAgIGlmICh0YWJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMua29BY3RpdmVUYWIodGFic1swXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5rb1Nob3dBcHBseUJ1dHRvbiA9IGtvLm9ic2VydmFibGUoXG4gICAgICAhdGhpcy5vcHRpb25zIHx8IHRoaXMub3B0aW9ucy5zaG93QXBwbHlCdXR0b25JbkVkaXRvcnNcbiAgICApO1xuICAgIHRoaXMua29UaXRsZSh0aGlzLmdldFRpdGxlKCkpO1xuICB9XG4gIHByaXZhdGUgZ2V0VGl0bGUoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmICh0aGlzLm9ialtcIm5hbWVcIl0pIHtcbiAgICAgIHJlcyA9IGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgICAuZ2V0U3RyaW5nKFwicGUucUVkaXRvclRpdGxlXCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm9ialtcIm5hbWVcIl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuc3VydmV5RWRpdG9yVGl0bGVcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm9uR2V0RWxlbWVudEVkaXRvclRpdGxlQ2FsbGJhY2spIHtcbiAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5vbkdldEVsZW1lbnRFZGl0b3JUaXRsZUNhbGxiYWNrKHRoaXMub2JqLCByZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBkb0Nsb3NlV2luZG93KGlzQ2FuY2VsOiBib29sZWFuKSB7XG4gICAgaWYgKGlzQ2FuY2VsKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwbHkoKTtcbiAgICB9XG4gICAgaWYgKGlzQ2FuY2VsIHx8ICF0aGlzLmhhc0Vycm9yKCkpIHtcbiAgICAgIHZhciB0YWJzID0gdGhpcy5rb1RhYnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0YWJzW2ldLmRvQ2xvc2VXaW5kb3coKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9uSGlkZVdpbmRvdykgdGhpcy5vbkhpZGVXaW5kb3coKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHZhciB0YWJzID0gdGhpcy5rb1RhYnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0YWJzW2ldLmhhc0Vycm9yKCkpIHtcbiAgICAgICAgdGhpcy5rb0FjdGl2ZVRhYih0YWJzW2ldLm5hbWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB2YXIgdGFicyA9IHRoaXMua29UYWJzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0YWJzW2ldLnJlc2V0KCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhcHBseSgpIHtcbiAgICBpZiAodGhpcy5oYXNFcnJvcigpKSByZXR1cm47XG4gICAgdmFyIHRhYnMgPSB0aGlzLmtvVGFicygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgdGFic1tpXS5hcHBseSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbkNoYW5nZWQpIHtcbiAgICAgIHRoaXMub25DaGFuZ2VkKHRoaXMub2JqKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFRhYnMoKTogQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JUYWI+IHtcbiAgICB2YXIgdGFicyA9IFtdO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydGllcyhcbiAgICAgIHRoaXMub2JqLFxuICAgICAgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldFByb3BlcnRpZXModGhpcy5jbGFzc05hbWUpLFxuICAgICAgdGhpcy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcbiAgICBpZiAoU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmlzR2VuZXJhbFRhYlZpc2libGUodGhpcy5jbGFzc05hbWUpKSB7XG4gICAgICB0YWJzLnB1c2gobmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yVGFiKHRoaXMub2JqLCBwcm9wZXJ0aWVzLCBcImdlbmVyYWxcIikpO1xuICAgIH1cbiAgICB0aGlzLmFkZFByb3BlcnRpZXNUYWJzKHRhYnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgdGFic1tpXS5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrID0gdGhpcy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gdGFicztcbiAgfVxuICBwcml2YXRlIGFkZFByb3BlcnRpZXNUYWJzKHRhYnM6IEFycmF5PFN1cnZleVF1ZXN0aW9uRWRpdG9yVGFiPikge1xuICAgIHZhciB0YWJOYW1lcyA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRUYWJzKHRoaXMuY2xhc3NOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYk5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGFiSXRlbSA9IHRhYk5hbWVzW2ldO1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydGllcyh0YWJJdGVtKTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHByb3BlcnR5VGFiID0gbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yVGFiKFxuICAgICAgICAgIHRoaXMub2JqLFxuICAgICAgICAgIG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnRpZXMoXG4gICAgICAgICAgICB0aGlzLm9iaixcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2ssXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0YWJJdGVtXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YWJJdGVtLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgcHJvcGVydHlUYWIudGl0bGUgPSB0YWJJdGVtLnRpdGxlO1xuICAgICAgICB0YWJzLnB1c2gocHJvcGVydHlUYWIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWIge1xuICBwcml2YXRlIHRpdGxlVmFsdWU6IHN0cmluZztcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG9iajogYW55LFxuICAgIHB1YmxpYyBwcm9wZXJ0aWVzOiBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnRpZXMgPSBudWxsLFxuICAgIHByaXZhdGUgX25hbWVcbiAgKSB7fVxuICBwdWJsaWMga29BZnRlclJlbmRlcihlbGVtZW50czogSFRNTEVsZW1lbnRbXSwgY29udGV4dCkge1xuICAgIGZvY3VzRmlyc3RDb250cm9sKGVsZW1lbnRzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgIGlmICh0aGlzLnRpdGxlVmFsdWUpIHJldHVybiB0aGlzLnRpdGxlVmFsdWU7XG4gICAgdmFyIHN0ciA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50YWJzLlwiICsgdGhpcy5uYW1lKTtcbiAgICByZXR1cm4gc3RyID8gc3RyIDogdGhpcy5uYW1lO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGl0bGVWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaHRtbFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicXVlc3Rpb25lZGl0b3J0YWJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlT2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuaGFzRXJyb3IoKTtcbiAgfVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMuYmVmb3JlU2hvdygpO1xuICB9XG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMucmVzZXQoKTtcbiAgfVxuICBwdWJsaWMgYXBwbHkoKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzLmFwcGx5KCk7XG4gIH1cbiAgcHVibGljIGRvQ2xvc2VXaW5kb3coKSB7fVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWUocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xuICAgIHJldHVybiBwcm9wZXJ0eS5nZXRQcm9wZXJ0eVZhbHVlKHRoaXMub2JqKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvci50cyIsIi8qKiFcbiAqIFNvcnRhYmxlXG4gKiBAYXV0aG9yXHRSdWJhWGEgICA8dHJhc2hAcnViYXhhLm9yZz5cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbihmdW5jdGlvbiBzb3J0YWJsZU1vZHVsZShmYWN0b3J5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShmYWN0b3J5KTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0fVxuXHRlbHNlIHtcblx0XHQvKiBqc2hpbnQgc3ViOnRydWUgKi9cblx0XHR3aW5kb3dbXCJTb3J0YWJsZVwiXSA9IGZhY3RvcnkoKTtcblx0fVxufSkoZnVuY3Rpb24gc29ydGFibGVGYWN0b3J5KCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PSBcInVuZGVmaW5lZFwiIHx8ICF3aW5kb3cuZG9jdW1lbnQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gc29ydGFibGVFcnJvcigpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNvcnRhYmxlLmpzIHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiKTtcblx0XHR9O1xuXHR9XG5cblx0dmFyIGRyYWdFbCxcblx0XHRwYXJlbnRFbCxcblx0XHRnaG9zdEVsLFxuXHRcdGNsb25lRWwsXG5cdFx0cm9vdEVsLFxuXHRcdG5leHRFbCxcblx0XHRsYXN0RG93bkVsLFxuXG5cdFx0c2Nyb2xsRWwsXG5cdFx0c2Nyb2xsUGFyZW50RWwsXG5cdFx0c2Nyb2xsQ3VzdG9tRm4sXG5cblx0XHRsYXN0RWwsXG5cdFx0bGFzdENTUyxcblx0XHRsYXN0UGFyZW50Q1NTLFxuXG5cdFx0b2xkSW5kZXgsXG5cdFx0bmV3SW5kZXgsXG5cblx0XHRhY3RpdmVHcm91cCxcblx0XHRwdXRTb3J0YWJsZSxcblxuXHRcdGF1dG9TY3JvbGwgPSB7fSxcblxuXHRcdHRhcEV2dCxcblx0XHR0b3VjaEV2dCxcblxuXHRcdG1vdmVkLFxuXG5cdFx0LyoqIEBjb25zdCAqL1xuXHRcdFJfU1BBQ0UgPSAvXFxzKy9nLFxuXHRcdFJfRkxPQVQgPSAvbGVmdHxyaWdodHxpbmxpbmUvLFxuXG5cdFx0ZXhwYW5kbyA9ICdTb3J0YWJsZScgKyAobmV3IERhdGUpLmdldFRpbWUoKSxcblxuXHRcdHdpbiA9IHdpbmRvdyxcblx0XHRkb2N1bWVudCA9IHdpbi5kb2N1bWVudCxcblx0XHRwYXJzZUludCA9IHdpbi5wYXJzZUludCxcblxuXHRcdCQgPSB3aW4ualF1ZXJ5IHx8IHdpbi5aZXB0byxcblx0XHRQb2x5bWVyID0gd2luLlBvbHltZXIsXG5cblx0XHRjYXB0dXJlTW9kZSA9IGZhbHNlLFxuXG5cdFx0c3VwcG9ydERyYWdnYWJsZSA9ICEhKCdkcmFnZ2FibGUnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSxcblx0XHRzdXBwb3J0Q3NzUG9pbnRlckV2ZW50cyA9IChmdW5jdGlvbiAoZWwpIHtcblx0XHRcdC8vIGZhbHNlIHdoZW4gSUUxMVxuXHRcdFx0aWYgKCEhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVHJpZGVudC4qcnZbIDpdPzExXFwuLykpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0ZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd4Jyk7XG5cdFx0XHRlbC5zdHlsZS5jc3NUZXh0ID0gJ3BvaW50ZXItZXZlbnRzOmF1dG8nO1xuXHRcdFx0cmV0dXJuIGVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPT09ICdhdXRvJztcblx0XHR9KSgpLFxuXG5cdFx0X3NpbGVudCA9IGZhbHNlLFxuXG5cdFx0YWJzID0gTWF0aC5hYnMsXG5cdFx0bWluID0gTWF0aC5taW4sXG5cblx0XHRzYXZlZElucHV0Q2hlY2tlZCA9IFtdLFxuXHRcdHRvdWNoRHJhZ092ZXJMaXN0ZW5lcnMgPSBbXSxcblxuXHRcdF9hdXRvU2Nyb2xsID0gX3Rocm90dGxlKGZ1bmN0aW9uICgvKipFdmVudCovZXZ0LCAvKipPYmplY3QqL29wdGlvbnMsIC8qKkhUTUxFbGVtZW50Ki9yb290RWwpIHtcblx0XHRcdC8vIEJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1NTIxXG5cdFx0XHRpZiAocm9vdEVsICYmIG9wdGlvbnMuc2Nyb2xsKSB7XG5cdFx0XHRcdHZhciBfdGhpcyA9IHJvb3RFbFtleHBhbmRvXSxcblx0XHRcdFx0XHRlbCxcblx0XHRcdFx0XHRyZWN0LFxuXHRcdFx0XHRcdHNlbnMgPSBvcHRpb25zLnNjcm9sbFNlbnNpdGl2aXR5LFxuXHRcdFx0XHRcdHNwZWVkID0gb3B0aW9ucy5zY3JvbGxTcGVlZCxcblxuXHRcdFx0XHRcdHggPSBldnQuY2xpZW50WCxcblx0XHRcdFx0XHR5ID0gZXZ0LmNsaWVudFksXG5cblx0XHRcdFx0XHR3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoLFxuXHRcdFx0XHRcdHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCxcblxuXHRcdFx0XHRcdHZ4LFxuXHRcdFx0XHRcdHZ5LFxuXG5cdFx0XHRcdFx0c2Nyb2xsT2Zmc2V0WCxcblx0XHRcdFx0XHRzY3JvbGxPZmZzZXRZXG5cdFx0XHRcdDtcblxuXHRcdFx0XHQvLyBEZWxlY3Qgc2Nyb2xsRWxcblx0XHRcdFx0aWYgKHNjcm9sbFBhcmVudEVsICE9PSByb290RWwpIHtcblx0XHRcdFx0XHRzY3JvbGxFbCA9IG9wdGlvbnMuc2Nyb2xsO1xuXHRcdFx0XHRcdHNjcm9sbFBhcmVudEVsID0gcm9vdEVsO1xuXHRcdFx0XHRcdHNjcm9sbEN1c3RvbUZuID0gb3B0aW9ucy5zY3JvbGxGbjtcblxuXHRcdFx0XHRcdGlmIChzY3JvbGxFbCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0c2Nyb2xsRWwgPSByb290RWw7XG5cblx0XHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdFx0aWYgKChzY3JvbGxFbC5vZmZzZXRXaWR0aCA8IHNjcm9sbEVsLnNjcm9sbFdpZHRoKSB8fFxuXHRcdFx0XHRcdFx0XHRcdChzY3JvbGxFbC5vZmZzZXRIZWlnaHQgPCBzY3JvbGxFbC5zY3JvbGxIZWlnaHQpXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8qIGpzaGludCBib3NzOnRydWUgKi9cblx0XHRcdFx0XHRcdH0gd2hpbGUgKHNjcm9sbEVsID0gc2Nyb2xsRWwucGFyZW50Tm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHNjcm9sbEVsKSB7XG5cdFx0XHRcdFx0ZWwgPSBzY3JvbGxFbDtcblx0XHRcdFx0XHRyZWN0ID0gc2Nyb2xsRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdFx0dnggPSAoYWJzKHJlY3QucmlnaHQgLSB4KSA8PSBzZW5zKSAtIChhYnMocmVjdC5sZWZ0IC0geCkgPD0gc2Vucyk7XG5cdFx0XHRcdFx0dnkgPSAoYWJzKHJlY3QuYm90dG9tIC0geSkgPD0gc2VucykgLSAoYWJzKHJlY3QudG9wIC0geSkgPD0gc2Vucyk7XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdGlmICghKHZ4IHx8IHZ5KSkge1xuXHRcdFx0XHRcdHZ4ID0gKHdpbldpZHRoIC0geCA8PSBzZW5zKSAtICh4IDw9IHNlbnMpO1xuXHRcdFx0XHRcdHZ5ID0gKHdpbkhlaWdodCAtIHkgPD0gc2VucykgLSAoeSA8PSBzZW5zKTtcblxuXHRcdFx0XHRcdC8qIGpzaGludCBleHByOnRydWUgKi9cblx0XHRcdFx0XHQodnggfHwgdnkpICYmIChlbCA9IHdpbik7XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdGlmIChhdXRvU2Nyb2xsLnZ4ICE9PSB2eCB8fCBhdXRvU2Nyb2xsLnZ5ICE9PSB2eSB8fCBhdXRvU2Nyb2xsLmVsICE9PSBlbCkge1xuXHRcdFx0XHRcdGF1dG9TY3JvbGwuZWwgPSBlbDtcblx0XHRcdFx0XHRhdXRvU2Nyb2xsLnZ4ID0gdng7XG5cdFx0XHRcdFx0YXV0b1Njcm9sbC52eSA9IHZ5O1xuXG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsLnBpZCk7XG5cblx0XHRcdFx0XHRpZiAoZWwpIHtcblx0XHRcdFx0XHRcdGF1dG9TY3JvbGwucGlkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRzY3JvbGxPZmZzZXRZID0gdnkgPyB2eSAqIHNwZWVkIDogMDtcblx0XHRcdFx0XHRcdFx0c2Nyb2xsT2Zmc2V0WCA9IHZ4ID8gdnggKiBzcGVlZCA6IDA7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZihzY3JvbGxDdXN0b21GbikpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2Nyb2xsQ3VzdG9tRm4uY2FsbChfdGhpcywgc2Nyb2xsT2Zmc2V0WCwgc2Nyb2xsT2Zmc2V0WSwgZXZ0KTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChlbCA9PT0gd2luKSB7XG5cdFx0XHRcdFx0XHRcdFx0d2luLnNjcm9sbFRvKHdpbi5wYWdlWE9mZnNldCArIHNjcm9sbE9mZnNldFgsIHdpbi5wYWdlWU9mZnNldCArIHNjcm9sbE9mZnNldFkpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGVsLnNjcm9sbFRvcCArPSBzY3JvbGxPZmZzZXRZO1xuXHRcdFx0XHRcdFx0XHRcdGVsLnNjcm9sbExlZnQgKz0gc2Nyb2xsT2Zmc2V0WDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgMjQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sIDMwKSxcblxuXHRcdF9wcmVwYXJlR3JvdXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXHRcdFx0ZnVuY3Rpb24gdG9Gbih2YWx1ZSwgcHVsbCkge1xuXHRcdFx0XHRpZiAodmFsdWUgPT09IHZvaWQgMCB8fCB2YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZ3JvdXAubmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICh0bywgZnJvbSkge1xuXHRcdFx0XHRcdFx0dmFyIGZyb21Hcm91cCA9IGZyb20ub3B0aW9ucy5ncm91cC5uYW1lO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcHVsbFxuXHRcdFx0XHRcdFx0XHQ/IHZhbHVlXG5cdFx0XHRcdFx0XHRcdDogdmFsdWUgJiYgKHZhbHVlLmpvaW5cblx0XHRcdFx0XHRcdFx0XHQ/IHZhbHVlLmluZGV4T2YoZnJvbUdyb3VwKSA+IC0xXG5cdFx0XHRcdFx0XHRcdFx0OiAoZnJvbUdyb3VwID09IHZhbHVlKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGdyb3VwID0ge307XG5cdFx0XHR2YXIgb3JpZ2luYWxHcm91cCA9IG9wdGlvbnMuZ3JvdXA7XG5cblx0XHRcdGlmICghb3JpZ2luYWxHcm91cCB8fCB0eXBlb2Ygb3JpZ2luYWxHcm91cCAhPSAnb2JqZWN0Jykge1xuXHRcdFx0XHRvcmlnaW5hbEdyb3VwID0ge25hbWU6IG9yaWdpbmFsR3JvdXB9O1xuXHRcdFx0fVxuXG5cdFx0XHRncm91cC5uYW1lID0gb3JpZ2luYWxHcm91cC5uYW1lO1xuXHRcdFx0Z3JvdXAuY2hlY2tQdWxsID0gdG9GbihvcmlnaW5hbEdyb3VwLnB1bGwsIHRydWUpO1xuXHRcdFx0Z3JvdXAuY2hlY2tQdXQgPSB0b0ZuKG9yaWdpbmFsR3JvdXAucHV0KTtcblx0XHRcdGdyb3VwLnJldmVydENsb25lID0gb3JpZ2luYWxHcm91cC5yZXZlcnRDbG9uZTtcblxuXHRcdFx0b3B0aW9ucy5ncm91cCA9IGdyb3VwO1xuXHRcdH1cblx0O1xuXG5cblx0LyoqXG5cdCAqIEBjbGFzcyAgU29ydGFibGVcblx0ICogQHBhcmFtICB7SFRNTEVsZW1lbnR9ICBlbFxuXHQgKiBAcGFyYW0gIHtPYmplY3R9ICAgICAgIFtvcHRpb25zXVxuXHQgKi9cblx0ZnVuY3Rpb24gU29ydGFibGUoZWwsIG9wdGlvbnMpIHtcblx0XHRpZiAoIShlbCAmJiBlbC5ub2RlVHlwZSAmJiBlbC5ub2RlVHlwZSA9PT0gMSkpIHtcblx0XHRcdHRocm93ICdTb3J0YWJsZTogYGVsYCBtdXN0IGJlIEhUTUxFbGVtZW50LCBhbmQgbm90ICcgKyB7fS50b1N0cmluZy5jYWxsKGVsKTtcblx0XHR9XG5cblx0XHR0aGlzLmVsID0gZWw7IC8vIHJvb3QgZWxlbWVudFxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBfZXh0ZW5kKHt9LCBvcHRpb25zKTtcblxuXG5cdFx0Ly8gRXhwb3J0IGluc3RhbmNlXG5cdFx0ZWxbZXhwYW5kb10gPSB0aGlzO1xuXG5cdFx0Ly8gRGVmYXVsdCBvcHRpb25zXG5cdFx0dmFyIGRlZmF1bHRzID0ge1xuXHRcdFx0Z3JvdXA6IE1hdGgucmFuZG9tKCksXG5cdFx0XHRzb3J0OiB0cnVlLFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0c3RvcmU6IG51bGwsXG5cdFx0XHRoYW5kbGU6IG51bGwsXG5cdFx0XHRzY3JvbGw6IHRydWUsXG5cdFx0XHRzY3JvbGxTZW5zaXRpdml0eTogMzAsXG5cdFx0XHRzY3JvbGxTcGVlZDogMTAsXG5cdFx0XHRkcmFnZ2FibGU6IC9bdW9dbC9pLnRlc3QoZWwubm9kZU5hbWUpID8gJ2xpJyA6ICc+KicsXG5cdFx0XHRnaG9zdENsYXNzOiAnc29ydGFibGUtZ2hvc3QnLFxuXHRcdFx0Y2hvc2VuQ2xhc3M6ICdzb3J0YWJsZS1jaG9zZW4nLFxuXHRcdFx0ZHJhZ0NsYXNzOiAnc29ydGFibGUtZHJhZycsXG5cdFx0XHRpZ25vcmU6ICdhLCBpbWcnLFxuXHRcdFx0ZmlsdGVyOiBudWxsLFxuXHRcdFx0cHJldmVudE9uRmlsdGVyOiB0cnVlLFxuXHRcdFx0YW5pbWF0aW9uOiAwLFxuXHRcdFx0c2V0RGF0YTogZnVuY3Rpb24gKGRhdGFUcmFuc2ZlciwgZHJhZ0VsKSB7XG5cdFx0XHRcdGRhdGFUcmFuc2Zlci5zZXREYXRhKCdUZXh0JywgZHJhZ0VsLnRleHRDb250ZW50KTtcblx0XHRcdH0sXG5cdFx0XHRkcm9wQnViYmxlOiBmYWxzZSxcblx0XHRcdGRyYWdvdmVyQnViYmxlOiBmYWxzZSxcblx0XHRcdGRhdGFJZEF0dHI6ICdkYXRhLWlkJyxcblx0XHRcdGRlbGF5OiAwLFxuXHRcdFx0Zm9yY2VGYWxsYmFjazogZmFsc2UsXG5cdFx0XHRmYWxsYmFja0NsYXNzOiAnc29ydGFibGUtZmFsbGJhY2snLFxuXHRcdFx0ZmFsbGJhY2tPbkJvZHk6IGZhbHNlLFxuXHRcdFx0ZmFsbGJhY2tUb2xlcmFuY2U6IDAsXG5cdFx0XHRmYWxsYmFja09mZnNldDoge3g6IDAsIHk6IDB9XG5cdFx0fTtcblxuXG5cdFx0Ly8gU2V0IGRlZmF1bHQgb3B0aW9uc1xuXHRcdGZvciAodmFyIG5hbWUgaW4gZGVmYXVsdHMpIHtcblx0XHRcdCEobmFtZSBpbiBvcHRpb25zKSAmJiAob3B0aW9uc1tuYW1lXSA9IGRlZmF1bHRzW25hbWVdKTtcblx0XHR9XG5cblx0XHRfcHJlcGFyZUdyb3VwKG9wdGlvbnMpO1xuXG5cdFx0Ly8gQmluZCBhbGwgcHJpdmF0ZSBtZXRob2RzXG5cdFx0Zm9yICh2YXIgZm4gaW4gdGhpcykge1xuXHRcdFx0aWYgKGZuLmNoYXJBdCgwKSA9PT0gJ18nICYmIHR5cGVvZiB0aGlzW2ZuXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR0aGlzW2ZuXSA9IHRoaXNbZm5dLmJpbmQodGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0dXAgZHJhZyBtb2RlXG5cdFx0dGhpcy5uYXRpdmVEcmFnZ2FibGUgPSBvcHRpb25zLmZvcmNlRmFsbGJhY2sgPyBmYWxzZSA6IHN1cHBvcnREcmFnZ2FibGU7XG5cblx0XHQvLyBCaW5kIGV2ZW50c1xuXHRcdF9vbihlbCwgJ21vdXNlZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuXHRcdF9vbihlbCwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vblRhcFN0YXJ0KTtcblx0XHRfb24oZWwsICdwb2ludGVyZG93bicsIHRoaXMuX29uVGFwU3RhcnQpO1xuXG5cdFx0aWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG5cdFx0XHRfb24oZWwsICdkcmFnb3ZlcicsIHRoaXMpO1xuXHRcdFx0X29uKGVsLCAnZHJhZ2VudGVyJywgdGhpcyk7XG5cdFx0fVxuXG5cdFx0dG91Y2hEcmFnT3Zlckxpc3RlbmVycy5wdXNoKHRoaXMuX29uRHJhZ092ZXIpO1xuXG5cdFx0Ly8gUmVzdG9yZSBzb3J0aW5nXG5cdFx0b3B0aW9ucy5zdG9yZSAmJiB0aGlzLnNvcnQob3B0aW9ucy5zdG9yZS5nZXQodGhpcykpO1xuXHR9XG5cblxuXHRTb3J0YWJsZS5wcm90b3R5cGUgPSAvKiogQGxlbmRzIFNvcnRhYmxlLnByb3RvdHlwZSAqLyB7XG5cdFx0Y29uc3RydWN0b3I6IFNvcnRhYmxlLFxuXG5cdFx0X29uVGFwU3RhcnQ6IGZ1bmN0aW9uICgvKiogRXZlbnR8VG91Y2hFdmVudCAqL2V2dCkge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcyxcblx0XHRcdFx0ZWwgPSB0aGlzLmVsLFxuXHRcdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0XHRwcmV2ZW50T25GaWx0ZXIgPSBvcHRpb25zLnByZXZlbnRPbkZpbHRlcixcblx0XHRcdFx0dHlwZSA9IGV2dC50eXBlLFxuXHRcdFx0XHR0b3VjaCA9IGV2dC50b3VjaGVzICYmIGV2dC50b3VjaGVzWzBdLFxuXHRcdFx0XHR0YXJnZXQgPSAodG91Y2ggfHwgZXZ0KS50YXJnZXQsXG5cdFx0XHRcdG9yaWdpbmFsVGFyZ2V0ID0gZXZ0LnRhcmdldC5zaGFkb3dSb290ICYmIChldnQucGF0aCAmJiBldnQucGF0aFswXSkgfHwgdGFyZ2V0LFxuXHRcdFx0XHRmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcixcblx0XHRcdFx0c3RhcnRJbmRleDtcblxuXHRcdFx0X3NhdmVJbnB1dENoZWNrZWRTdGF0ZShlbCk7XG5cblxuXHRcdFx0Ly8gRG9uJ3QgdHJpZ2dlciBzdGFydCBldmVudCB3aGVuIGFuIGVsZW1lbnQgaXMgYmVlbiBkcmFnZ2VkLCBvdGhlcndpc2UgdGhlIGV2dC5vbGRpbmRleCBhbHdheXMgd3Jvbmcgd2hlbiBzZXQgb3B0aW9uLmdyb3VwLlxuXHRcdFx0aWYgKGRyYWdFbCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICgvbW91c2Vkb3dufHBvaW50ZXJkb3duLy50ZXN0KHR5cGUpICYmIGV2dC5idXR0b24gIT09IDAgfHwgb3B0aW9ucy5kaXNhYmxlZCkge1xuXHRcdFx0XHRyZXR1cm47IC8vIG9ubHkgbGVmdCBidXR0b24gb3IgZW5hYmxlZFxuXHRcdFx0fVxuXG5cblx0XHRcdHRhcmdldCA9IF9jbG9zZXN0KHRhcmdldCwgb3B0aW9ucy5kcmFnZ2FibGUsIGVsKTtcblxuXHRcdFx0aWYgKCF0YXJnZXQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGFzdERvd25FbCA9PT0gdGFyZ2V0KSB7XG5cdFx0XHRcdC8vIElnbm9yaW5nIGR1cGxpY2F0ZSBgZG93bmBcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnRcblx0XHRcdHN0YXJ0SW5kZXggPSBfaW5kZXgodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cblx0XHRcdC8vIENoZWNrIGZpbHRlclxuXHRcdFx0aWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0aWYgKGZpbHRlci5jYWxsKHRoaXMsIGV2dCwgdGFyZ2V0LCB0aGlzKSkge1xuXHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KF90aGlzLCBvcmlnaW5hbFRhcmdldCwgJ2ZpbHRlcicsIHRhcmdldCwgZWwsIHN0YXJ0SW5kZXgpO1xuXHRcdFx0XHRcdHByZXZlbnRPbkZpbHRlciAmJiBldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRyZXR1cm47IC8vIGNhbmNlbCBkbmRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdGZpbHRlciA9IGZpbHRlci5zcGxpdCgnLCcpLnNvbWUoZnVuY3Rpb24gKGNyaXRlcmlhKSB7XG5cdFx0XHRcdFx0Y3JpdGVyaWEgPSBfY2xvc2VzdChvcmlnaW5hbFRhcmdldCwgY3JpdGVyaWEudHJpbSgpLCBlbCk7XG5cblx0XHRcdFx0XHRpZiAoY3JpdGVyaWEpIHtcblx0XHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KF90aGlzLCBjcml0ZXJpYSwgJ2ZpbHRlcicsIHRhcmdldCwgZWwsIHN0YXJ0SW5kZXgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdFx0cHJldmVudE9uRmlsdGVyICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHJldHVybjsgLy8gY2FuY2VsIGRuZFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvcHRpb25zLmhhbmRsZSAmJiAhX2Nsb3Nlc3Qob3JpZ2luYWxUYXJnZXQsIG9wdGlvbnMuaGFuZGxlLCBlbCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQcmVwYXJlIGBkcmFnc3RhcnRgXG5cdFx0XHR0aGlzLl9wcmVwYXJlRHJhZ1N0YXJ0KGV2dCwgdG91Y2gsIHRhcmdldCwgc3RhcnRJbmRleCk7XG5cdFx0fSxcblxuXHRcdF9wcmVwYXJlRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoLyoqIEV2ZW50ICovZXZ0LCAvKiogVG91Y2ggKi90b3VjaCwgLyoqIEhUTUxFbGVtZW50ICovdGFyZ2V0LCAvKiogTnVtYmVyICovc3RhcnRJbmRleCkge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcyxcblx0XHRcdFx0ZWwgPSBfdGhpcy5lbCxcblx0XHRcdFx0b3B0aW9ucyA9IF90aGlzLm9wdGlvbnMsXG5cdFx0XHRcdG93bmVyRG9jdW1lbnQgPSBlbC5vd25lckRvY3VtZW50LFxuXHRcdFx0XHRkcmFnU3RhcnRGbjtcblxuXHRcdFx0aWYgKHRhcmdldCAmJiAhZHJhZ0VsICYmICh0YXJnZXQucGFyZW50Tm9kZSA9PT0gZWwpKSB7XG5cdFx0XHRcdHRhcEV2dCA9IGV2dDtcblxuXHRcdFx0XHRyb290RWwgPSBlbDtcblx0XHRcdFx0ZHJhZ0VsID0gdGFyZ2V0O1xuXHRcdFx0XHRwYXJlbnRFbCA9IGRyYWdFbC5wYXJlbnROb2RlO1xuXHRcdFx0XHRuZXh0RWwgPSBkcmFnRWwubmV4dFNpYmxpbmc7XG5cdFx0XHRcdGxhc3REb3duRWwgPSB0YXJnZXQ7XG5cdFx0XHRcdGFjdGl2ZUdyb3VwID0gb3B0aW9ucy5ncm91cDtcblx0XHRcdFx0b2xkSW5kZXggPSBzdGFydEluZGV4O1xuXG5cdFx0XHRcdHRoaXMuX2xhc3RYID0gKHRvdWNoIHx8IGV2dCkuY2xpZW50WDtcblx0XHRcdFx0dGhpcy5fbGFzdFkgPSAodG91Y2ggfHwgZXZ0KS5jbGllbnRZO1xuXG5cdFx0XHRcdGRyYWdFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICd0cmFuc2Zvcm0nO1xuXG5cdFx0XHRcdGRyYWdTdGFydEZuID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIERlbGF5ZWQgZHJhZyBoYXMgYmVlbiB0cmlnZ2VyZWRcblx0XHRcdFx0XHQvLyB3ZSBjYW4gcmUtZW5hYmxlIHRoZSBldmVudHM6IHRvdWNobW92ZS9tb3VzZW1vdmVcblx0XHRcdFx0XHRfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKCk7XG5cblx0XHRcdFx0XHQvLyBNYWtlIHRoZSBlbGVtZW50IGRyYWdnYWJsZVxuXHRcdFx0XHRcdGRyYWdFbC5kcmFnZ2FibGUgPSBfdGhpcy5uYXRpdmVEcmFnZ2FibGU7XG5cblx0XHRcdFx0XHQvLyBDaG9zZW4gaXRlbVxuXHRcdFx0XHRcdF90b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuY2hvc2VuQ2xhc3MsIHRydWUpO1xuXG5cdFx0XHRcdFx0Ly8gQmluZCB0aGUgZXZlbnRzOiBkcmFnc3RhcnQvZHJhZ2VuZFxuXHRcdFx0XHRcdF90aGlzLl90cmlnZ2VyRHJhZ1N0YXJ0KGV2dCwgdG91Y2gpO1xuXG5cdFx0XHRcdFx0Ly8gRHJhZyBzdGFydCBldmVudFxuXHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KF90aGlzLCByb290RWwsICdjaG9vc2UnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIERpc2FibGUgXCJkcmFnZ2FibGVcIlxuXHRcdFx0XHRvcHRpb25zLmlnbm9yZS5zcGxpdCgnLCcpLmZvckVhY2goZnVuY3Rpb24gKGNyaXRlcmlhKSB7XG5cdFx0XHRcdFx0X2ZpbmQoZHJhZ0VsLCBjcml0ZXJpYS50cmltKCksIF9kaXNhYmxlRHJhZ2dhYmxlKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX29uRHJvcCk7XG5cdFx0XHRcdF9vbihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCBfdGhpcy5fb25Ecm9wKTtcblx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIF90aGlzLl9vbkRyb3ApO1xuXHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJjYW5jZWwnLCBfdGhpcy5fb25Ecm9wKTtcblx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICdzZWxlY3RzdGFydCcsIF90aGlzKTtcblxuXHRcdFx0XHRpZiAob3B0aW9ucy5kZWxheSkge1xuXHRcdFx0XHRcdC8vIElmIHRoZSB1c2VyIG1vdmVzIHRoZSBwb2ludGVyIG9yIGxldCBnbyB0aGUgY2xpY2sgb3IgdG91Y2hcblx0XHRcdFx0XHQvLyBiZWZvcmUgdGhlIGRlbGF5IGhhcyBiZWVuIHJlYWNoZWQ6XG5cdFx0XHRcdFx0Ly8gZGlzYWJsZSB0aGUgZGVsYXllZCBkcmFnXG5cdFx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0XHRcdF9vbihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0XHRcdF9vbihvd25lckRvY3VtZW50LCAndG91Y2htb3ZlJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICdwb2ludGVybW92ZScsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXG5cdFx0XHRcdFx0X3RoaXMuX2RyYWdTdGFydFRpbWVyID0gc2V0VGltZW91dChkcmFnU3RhcnRGbiwgb3B0aW9ucy5kZWxheSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZHJhZ1N0YXJ0Rm4oKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X2Rpc2FibGVEZWxheWVkRHJhZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLmVsLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9kcmFnU3RhcnRUaW1lcik7XG5cdFx0XHRfb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0XHRfb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdH0sXG5cblx0XHRfdHJpZ2dlckRyYWdTdGFydDogZnVuY3Rpb24gKC8qKiBFdmVudCAqL2V2dCwgLyoqIFRvdWNoICovdG91Y2gpIHtcblx0XHRcdHRvdWNoID0gdG91Y2ggfHwgKGV2dC5wb2ludGVyVHlwZSA9PSAndG91Y2gnID8gZXZ0IDogbnVsbCk7XG5cblx0XHRcdGlmICh0b3VjaCkge1xuXHRcdFx0XHQvLyBUb3VjaCBkZXZpY2Ugc3VwcG9ydFxuXHRcdFx0XHR0YXBFdnQgPSB7XG5cdFx0XHRcdFx0dGFyZ2V0OiBkcmFnRWwsXG5cdFx0XHRcdFx0Y2xpZW50WDogdG91Y2guY2xpZW50WCxcblx0XHRcdFx0XHRjbGllbnRZOiB0b3VjaC5jbGllbnRZXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5fb25EcmFnU3RhcnQodGFwRXZ0LCAndG91Y2gnKTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKCF0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuXHRcdFx0XHR0aGlzLl9vbkRyYWdTdGFydCh0YXBFdnQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdF9vbihkcmFnRWwsICdkcmFnZW5kJywgdGhpcyk7XG5cdFx0XHRcdF9vbihyb290RWwsICdkcmFnc3RhcnQnLCB0aGlzLl9vbkRyYWdTdGFydCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHtcblx0XHRcdFx0XHQvLyBUaW1lb3V0IG5lY2Nlc3NhcnkgZm9yIElFOVxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X2RyYWdTdGFydGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAocm9vdEVsICYmIGRyYWdFbCkge1xuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdFx0XHQvLyBBcHBseSBlZmZlY3Rcblx0XHRcdFx0X3RvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5naG9zdENsYXNzLCB0cnVlKTtcblx0XHRcdFx0X3RvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5kcmFnQ2xhc3MsIGZhbHNlKTtcblxuXHRcdFx0XHRTb3J0YWJsZS5hY3RpdmUgPSB0aGlzO1xuXG5cdFx0XHRcdC8vIERyYWcgc3RhcnQgZXZlbnRcblx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAnc3RhcnQnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fbnVsbGluZygpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRfZW11bGF0ZURyYWdPdmVyOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodG91Y2hFdnQpIHtcblx0XHRcdFx0aWYgKHRoaXMuX2xhc3RYID09PSB0b3VjaEV2dC5jbGllbnRYICYmIHRoaXMuX2xhc3RZID09PSB0b3VjaEV2dC5jbGllbnRZKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fbGFzdFggPSB0b3VjaEV2dC5jbGllbnRYO1xuXHRcdFx0XHR0aGlzLl9sYXN0WSA9IHRvdWNoRXZ0LmNsaWVudFk7XG5cblx0XHRcdFx0aWYgKCFzdXBwb3J0Q3NzUG9pbnRlckV2ZW50cykge1xuXHRcdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2hFdnQuY2xpZW50WCwgdG91Y2hFdnQuY2xpZW50WSksXG5cdFx0XHRcdFx0cGFyZW50ID0gdGFyZ2V0LFxuXHRcdFx0XHRcdGkgPSB0b3VjaERyYWdPdmVyTGlzdGVuZXJzLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmVudFtleHBhbmRvXSkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0dG91Y2hEcmFnT3Zlckxpc3RlbmVyc1tpXSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGllbnRYOiB0b3VjaEV2dC5jbGllbnRYLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xpZW50WTogdG91Y2hFdnQuY2xpZW50WSxcblx0XHRcdFx0XHRcdFx0XHRcdHRhcmdldDogdGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRcdFx0cm9vdEVsOiBwYXJlbnRcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0YXJnZXQgPSBwYXJlbnQ7IC8vIHN0b3JlIGxhc3QgZWxlbWVudFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cdFx0XHRcdFx0d2hpbGUgKHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghc3VwcG9ydENzc1BvaW50ZXJFdmVudHMpIHtcblx0XHRcdFx0XHRfY3NzKGdob3N0RWwsICdkaXNwbGF5JywgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXG5cdFx0X29uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoLyoqVG91Y2hFdmVudCovZXZ0KSB7XG5cdFx0XHRpZiAodGFwRXZ0KSB7XG5cdFx0XHRcdHZhclx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcblx0XHRcdFx0XHRmYWxsYmFja1RvbGVyYW5jZSA9IG9wdGlvbnMuZmFsbGJhY2tUb2xlcmFuY2UsXG5cdFx0XHRcdFx0ZmFsbGJhY2tPZmZzZXQgPSBvcHRpb25zLmZhbGxiYWNrT2Zmc2V0LFxuXHRcdFx0XHRcdHRvdWNoID0gZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dCxcblx0XHRcdFx0XHRkeCA9ICh0b3VjaC5jbGllbnRYIC0gdGFwRXZ0LmNsaWVudFgpICsgZmFsbGJhY2tPZmZzZXQueCxcblx0XHRcdFx0XHRkeSA9ICh0b3VjaC5jbGllbnRZIC0gdGFwRXZ0LmNsaWVudFkpICsgZmFsbGJhY2tPZmZzZXQueSxcblx0XHRcdFx0XHR0cmFuc2xhdGUzZCA9IGV2dC50b3VjaGVzID8gJ3RyYW5zbGF0ZTNkKCcgKyBkeCArICdweCwnICsgZHkgKyAncHgsMCknIDogJ3RyYW5zbGF0ZSgnICsgZHggKyAncHgsJyArIGR5ICsgJ3B4KSc7XG5cblx0XHRcdFx0Ly8gb25seSBzZXQgdGhlIHN0YXR1cyB0byBkcmFnZ2luZywgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgZHJhZ2dpbmdcblx0XHRcdFx0aWYgKCFTb3J0YWJsZS5hY3RpdmUpIHtcblx0XHRcdFx0XHRpZiAoZmFsbGJhY2tUb2xlcmFuY2UgJiZcblx0XHRcdFx0XHRcdG1pbihhYnModG91Y2guY2xpZW50WCAtIHRoaXMuX2xhc3RYKSwgYWJzKHRvdWNoLmNsaWVudFkgLSB0aGlzLl9sYXN0WSkpIDwgZmFsbGJhY2tUb2xlcmFuY2Vcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9kcmFnU3RhcnRlZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYXMgd2VsbCBhcyBjcmVhdGluZyB0aGUgZ2hvc3QgZWxlbWVudCBvbiB0aGUgZG9jdW1lbnQgYm9keVxuXHRcdFx0XHR0aGlzLl9hcHBlbmRHaG9zdCgpO1xuXG5cdFx0XHRcdG1vdmVkID0gdHJ1ZTtcblx0XHRcdFx0dG91Y2hFdnQgPSB0b3VjaDtcblxuXHRcdFx0XHRfY3NzKGdob3N0RWwsICd3ZWJraXRUcmFuc2Zvcm0nLCB0cmFuc2xhdGUzZCk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ21velRyYW5zZm9ybScsIHRyYW5zbGF0ZTNkKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnbXNUcmFuc2Zvcm0nLCB0cmFuc2xhdGUzZCk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZTNkKTtcblxuXHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X2FwcGVuZEdob3N0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoIWdob3N0RWwpIHtcblx0XHRcdFx0dmFyIHJlY3QgPSBkcmFnRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRcdFx0Y3NzID0gX2NzcyhkcmFnRWwpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdFx0Z2hvc3RSZWN0O1xuXG5cdFx0XHRcdGdob3N0RWwgPSBkcmFnRWwuY2xvbmVOb2RlKHRydWUpO1xuXG5cdFx0XHRcdF90b2dnbGVDbGFzcyhnaG9zdEVsLCBvcHRpb25zLmdob3N0Q2xhc3MsIGZhbHNlKTtcblx0XHRcdFx0X3RvZ2dsZUNsYXNzKGdob3N0RWwsIG9wdGlvbnMuZmFsbGJhY2tDbGFzcywgdHJ1ZSk7XG5cdFx0XHRcdF90b2dnbGVDbGFzcyhnaG9zdEVsLCBvcHRpb25zLmRyYWdDbGFzcywgdHJ1ZSk7XG5cblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAndG9wJywgcmVjdC50b3AgLSBwYXJzZUludChjc3MubWFyZ2luVG9wLCAxMCkpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICdsZWZ0JywgcmVjdC5sZWZ0IC0gcGFyc2VJbnQoY3NzLm1hcmdpbkxlZnQsIDEwKSk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ3dpZHRoJywgcmVjdC53aWR0aCk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ2hlaWdodCcsIHJlY3QuaGVpZ2h0KTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnb3BhY2l0eScsICcwLjgnKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAncG9zaXRpb24nLCAnZml4ZWQnKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnekluZGV4JywgJzEwMDAwMCcpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICdwb2ludGVyRXZlbnRzJywgJ25vbmUnKTtcblxuXHRcdFx0XHRvcHRpb25zLmZhbGxiYWNrT25Cb2R5ICYmIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2hvc3RFbCkgfHwgcm9vdEVsLmFwcGVuZENoaWxkKGdob3N0RWwpO1xuXG5cdFx0XHRcdC8vIEZpeGluZyBkaW1lbnNpb25zLlxuXHRcdFx0XHRnaG9zdFJlY3QgPSBnaG9zdEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICd3aWR0aCcsIHJlY3Qud2lkdGggKiAyIC0gZ2hvc3RSZWN0LndpZHRoKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnaGVpZ2h0JywgcmVjdC5oZWlnaHQgKiAyIC0gZ2hvc3RSZWN0LmhlaWdodCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKC8qKkV2ZW50Ki9ldnQsIC8qKmJvb2xlYW4qL3VzZUZhbGxiYWNrKSB7XG5cdFx0XHR2YXIgZGF0YVRyYW5zZmVyID0gZXZ0LmRhdGFUcmFuc2Zlcixcblx0XHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdFx0dGhpcy5fb2ZmVXBFdmVudHMoKTtcblxuXHRcdFx0aWYgKGFjdGl2ZUdyb3VwLmNoZWNrUHVsbCh0aGlzLCB0aGlzLCBkcmFnRWwsIGV2dCkpIHtcblx0XHRcdFx0Y2xvbmVFbCA9IF9jbG9uZShkcmFnRWwpO1xuXG5cdFx0XHRcdGNsb25lRWwuZHJhZ2dhYmxlID0gZmFsc2U7XG5cdFx0XHRcdGNsb25lRWwuc3R5bGVbJ3dpbGwtY2hhbmdlJ10gPSAnJztcblxuXHRcdFx0XHRfY3NzKGNsb25lRWwsICdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHRcdFx0X3RvZ2dsZUNsYXNzKGNsb25lRWwsIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpO1xuXG5cdFx0XHRcdHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgZHJhZ0VsKTtcblx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAnY2xvbmUnLCBkcmFnRWwpO1xuXHRcdFx0fVxuXG5cdFx0XHRfdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmRyYWdDbGFzcywgdHJ1ZSk7XG5cblx0XHRcdGlmICh1c2VGYWxsYmFjaykge1xuXHRcdFx0XHRpZiAodXNlRmFsbGJhY2sgPT09ICd0b3VjaCcpIHtcblx0XHRcdFx0XHQvLyBCaW5kIHRvdWNoIGV2ZW50c1xuXHRcdFx0XHRcdF9vbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcblx0XHRcdFx0XHRfb24oZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uRHJvcCk7XG5cdFx0XHRcdFx0X29uKGRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCB0aGlzLl9vbkRyb3ApO1xuXHRcdFx0XHRcdF9vbihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuXHRcdFx0XHRcdF9vbihkb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX29uRHJvcCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT2xkIGJyd29zZXJcblx0XHRcdFx0XHRfb24oZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG5cdFx0XHRcdFx0X29uKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMuX29uRHJvcCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9sb29wSWQgPSBzZXRJbnRlcnZhbCh0aGlzLl9lbXVsYXRlRHJhZ092ZXIsIDUwKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZiAoZGF0YVRyYW5zZmVyKSB7XG5cdFx0XHRcdFx0ZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XG5cdFx0XHRcdFx0b3B0aW9ucy5zZXREYXRhICYmIG9wdGlvbnMuc2V0RGF0YS5jYWxsKHRoaXMsIGRhdGFUcmFuc2ZlciwgZHJhZ0VsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9vbihkb2N1bWVudCwgJ2Ryb3AnLCB0aGlzKTtcblx0XHRcdFx0c2V0VGltZW91dCh0aGlzLl9kcmFnU3RhcnRlZCwgMCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9vbkRyYWdPdmVyOiBmdW5jdGlvbiAoLyoqRXZlbnQqL2V2dCkge1xuXHRcdFx0dmFyIGVsID0gdGhpcy5lbCxcblx0XHRcdFx0dGFyZ2V0LFxuXHRcdFx0XHRkcmFnUmVjdCxcblx0XHRcdFx0dGFyZ2V0UmVjdCxcblx0XHRcdFx0cmV2ZXJ0LFxuXHRcdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0XHRncm91cCA9IG9wdGlvbnMuZ3JvdXAsXG5cdFx0XHRcdGFjdGl2ZVNvcnRhYmxlID0gU29ydGFibGUuYWN0aXZlLFxuXHRcdFx0XHRpc093bmVyID0gKGFjdGl2ZUdyb3VwID09PSBncm91cCksXG5cdFx0XHRcdGlzTW92aW5nQmV0d2VlblNvcnRhYmxlID0gZmFsc2UsXG5cdFx0XHRcdGNhblNvcnQgPSBvcHRpb25zLnNvcnQ7XG5cblx0XHRcdGlmIChldnQucHJldmVudERlZmF1bHQgIT09IHZvaWQgMCkge1xuXHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0IW9wdGlvbnMuZHJhZ292ZXJCdWJibGUgJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZHJhZ0VsLmFuaW1hdGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bW92ZWQgPSB0cnVlO1xuXG5cdFx0XHRpZiAoYWN0aXZlU29ydGFibGUgJiYgIW9wdGlvbnMuZGlzYWJsZWQgJiZcblx0XHRcdFx0KGlzT3duZXJcblx0XHRcdFx0XHQ/IGNhblNvcnQgfHwgKHJldmVydCA9ICFyb290RWwuY29udGFpbnMoZHJhZ0VsKSkgLy8gUmV2ZXJ0aW5nIGl0ZW0gaW50byB0aGUgb3JpZ2luYWwgbGlzdFxuXHRcdFx0XHRcdDogKFxuXHRcdFx0XHRcdFx0cHV0U29ydGFibGUgPT09IHRoaXMgfHxcblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0KGFjdGl2ZVNvcnRhYmxlLmxhc3RQdWxsTW9kZSA9IGFjdGl2ZUdyb3VwLmNoZWNrUHVsbCh0aGlzLCBhY3RpdmVTb3J0YWJsZSwgZHJhZ0VsLCBldnQpKSAmJlxuXHRcdFx0XHRcdFx0XHRncm91cC5jaGVja1B1dCh0aGlzLCBhY3RpdmVTb3J0YWJsZSwgZHJhZ0VsLCBldnQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpICYmXG5cdFx0XHRcdChldnQucm9vdEVsID09PSB2b2lkIDAgfHwgZXZ0LnJvb3RFbCA9PT0gdGhpcy5lbCkgLy8gdG91Y2ggZmFsbGJhY2tcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBTbWFydCBhdXRvLXNjcm9sbGluZ1xuXHRcdFx0XHRfYXV0b1Njcm9sbChldnQsIG9wdGlvbnMsIHRoaXMuZWwpO1xuXG5cdFx0XHRcdGlmIChfc2lsZW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0ID0gX2Nsb3Nlc3QoZXZ0LnRhcmdldCwgb3B0aW9ucy5kcmFnZ2FibGUsIGVsKTtcblx0XHRcdFx0ZHJhZ1JlY3QgPSBkcmFnRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHRcdFx0aWYgKHB1dFNvcnRhYmxlICE9PSB0aGlzKSB7XG5cdFx0XHRcdFx0cHV0U29ydGFibGUgPSB0aGlzO1xuXHRcdFx0XHRcdGlzTW92aW5nQmV0d2VlblNvcnRhYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChyZXZlcnQpIHtcblx0XHRcdFx0XHRfY2xvbmVIaWRlKGFjdGl2ZVNvcnRhYmxlLCB0cnVlKTtcblx0XHRcdFx0XHRwYXJlbnRFbCA9IHJvb3RFbDsgLy8gYWN0dWFsaXphdGlvblxuXG5cdFx0XHRcdFx0aWYgKGNsb25lRWwgfHwgbmV4dEVsKSB7XG5cdFx0XHRcdFx0XHRyb290RWwuaW5zZXJ0QmVmb3JlKGRyYWdFbCwgY2xvbmVFbCB8fCBuZXh0RWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmICghY2FuU29ydCkge1xuXHRcdFx0XHRcdFx0cm9vdEVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHRpZiAoKGVsLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgfHwgKGVsLmNoaWxkcmVuWzBdID09PSBnaG9zdEVsKSB8fFxuXHRcdFx0XHRcdChlbCA9PT0gZXZ0LnRhcmdldCkgJiYgKF9naG9zdElzTGFzdChlbCwgZXZ0KSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly9hc3NpZ24gdGFyZ2V0IG9ubHkgaWYgY29uZGl0aW9uIGlzIHRydWVcblx0XHRcdFx0XHRpZiAoZWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIGVsLmNoaWxkcmVuWzBdICE9PSBnaG9zdEVsICYmIGVsID09PSBldnQudGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQgPSBlbC5sYXN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXQuYW5pbWF0ZWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0YXJnZXRSZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdF9jbG9uZUhpZGUoYWN0aXZlU29ydGFibGUsIGlzT3duZXIpO1xuXG5cdFx0XHRcdFx0aWYgKF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCBldnQpICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFkcmFnRWwuY29udGFpbnMoZWwpKSB7XG5cdFx0XHRcdFx0XHRcdGVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG5cdFx0XHRcdFx0XHRcdHBhcmVudEVsID0gZWw7IC8vIGFjdHVhbGl6YXRpb25cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpcy5fYW5pbWF0ZShkcmFnUmVjdCwgZHJhZ0VsKTtcblx0XHRcdFx0XHRcdHRhcmdldCAmJiB0aGlzLl9hbmltYXRlKHRhcmdldFJlY3QsIHRhcmdldCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKHRhcmdldCAmJiAhdGFyZ2V0LmFuaW1hdGVkICYmIHRhcmdldCAhPT0gZHJhZ0VsICYmICh0YXJnZXQucGFyZW50Tm9kZVtleHBhbmRvXSAhPT0gdm9pZCAwKSkge1xuXHRcdFx0XHRcdGlmIChsYXN0RWwgIT09IHRhcmdldCkge1xuXHRcdFx0XHRcdFx0bGFzdEVsID0gdGFyZ2V0O1xuXHRcdFx0XHRcdFx0bGFzdENTUyA9IF9jc3ModGFyZ2V0KTtcblx0XHRcdFx0XHRcdGxhc3RQYXJlbnRDU1MgPSBfY3NzKHRhcmdldC5wYXJlbnROb2RlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0YXJnZXRSZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRcdFx0dmFyIHdpZHRoID0gdGFyZ2V0UmVjdC5yaWdodCAtIHRhcmdldFJlY3QubGVmdCxcblx0XHRcdFx0XHRcdGhlaWdodCA9IHRhcmdldFJlY3QuYm90dG9tIC0gdGFyZ2V0UmVjdC50b3AsXG5cdFx0XHRcdFx0XHRmbG9hdGluZyA9IFJfRkxPQVQudGVzdChsYXN0Q1NTLmNzc0Zsb2F0ICsgbGFzdENTUy5kaXNwbGF5KVxuXHRcdFx0XHRcdFx0XHR8fCAobGFzdFBhcmVudENTUy5kaXNwbGF5ID09ICdmbGV4JyAmJiBsYXN0UGFyZW50Q1NTWydmbGV4LWRpcmVjdGlvbiddLmluZGV4T2YoJ3JvdycpID09PSAwKSxcblx0XHRcdFx0XHRcdGlzV2lkZSA9ICh0YXJnZXQub2Zmc2V0V2lkdGggPiBkcmFnRWwub2Zmc2V0V2lkdGgpLFxuXHRcdFx0XHRcdFx0aXNMb25nID0gKHRhcmdldC5vZmZzZXRIZWlnaHQgPiBkcmFnRWwub2Zmc2V0SGVpZ2h0KSxcblx0XHRcdFx0XHRcdGhhbGZ3YXkgPSAoZmxvYXRpbmcgPyAoZXZ0LmNsaWVudFggLSB0YXJnZXRSZWN0LmxlZnQpIC8gd2lkdGggOiAoZXZ0LmNsaWVudFkgLSB0YXJnZXRSZWN0LnRvcCkgLyBoZWlnaHQpID4gMC41LFxuXHRcdFx0XHRcdFx0bmV4dFNpYmxpbmcgPSB0YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nLFxuXHRcdFx0XHRcdFx0YWZ0ZXIgPSBmYWxzZVxuXHRcdFx0XHRcdDtcblxuXHRcdFx0XHRcdGlmIChmbG9hdGluZykge1xuXHRcdFx0XHRcdFx0dmFyIGVsVG9wID0gZHJhZ0VsLm9mZnNldFRvcCxcblx0XHRcdFx0XHRcdFx0dGdUb3AgPSB0YXJnZXQub2Zmc2V0VG9wO1xuXG5cdFx0XHRcdFx0XHRpZiAoZWxUb3AgPT09IHRnVG9wKSB7XG5cdFx0XHRcdFx0XHRcdGFmdGVyID0gKHRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID09PSBkcmFnRWwpICYmICFpc1dpZGUgfHwgaGFsZndheSAmJiBpc1dpZGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIGlmICh0YXJnZXQucHJldmlvdXNFbGVtZW50U2libGluZyA9PT0gZHJhZ0VsIHx8IGRyYWdFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID09PSB0YXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0YWZ0ZXIgPSAoZXZ0LmNsaWVudFkgLSB0YXJnZXRSZWN0LnRvcCkgLyBoZWlnaHQgPiAwLjU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhZnRlciA9IHRnVG9wID4gZWxUb3A7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCFpc01vdmluZ0JldHdlZW5Tb3J0YWJsZSkge1xuXHRcdFx0XHRcdFx0YWZ0ZXIgPSAobmV4dFNpYmxpbmcgIT09IGRyYWdFbCkgJiYgIWlzTG9uZyB8fCBoYWxmd2F5ICYmIGlzTG9uZztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgbW92ZVZlY3RvciA9IF9vbk1vdmUocm9vdEVsLCBlbCwgZHJhZ0VsLCBkcmFnUmVjdCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCBldnQsIGFmdGVyKTtcblxuXHRcdFx0XHRcdGlmIChtb3ZlVmVjdG9yICE9PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0aWYgKG1vdmVWZWN0b3IgPT09IDEgfHwgbW92ZVZlY3RvciA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0YWZ0ZXIgPSAobW92ZVZlY3RvciA9PT0gMSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdF9zaWxlbnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dChfdW5zaWxlbnQsIDMwKTtcblxuXHRcdFx0XHRcdFx0X2Nsb25lSGlkZShhY3RpdmVTb3J0YWJsZSwgaXNPd25lcik7XG5cblx0XHRcdFx0XHRcdGlmICghZHJhZ0VsLmNvbnRhaW5zKGVsKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYWZ0ZXIgJiYgIW5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZHJhZ0VsLCBhZnRlciA/IG5leHRTaWJsaW5nIDogdGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRwYXJlbnRFbCA9IGRyYWdFbC5wYXJlbnROb2RlOyAvLyBhY3R1YWxpemF0aW9uXG5cblx0XHRcdFx0XHRcdHRoaXMuX2FuaW1hdGUoZHJhZ1JlY3QsIGRyYWdFbCk7XG5cdFx0XHRcdFx0XHR0aGlzLl9hbmltYXRlKHRhcmdldFJlY3QsIHRhcmdldCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9hbmltYXRlOiBmdW5jdGlvbiAocHJldlJlY3QsIHRhcmdldCkge1xuXHRcdFx0dmFyIG1zID0gdGhpcy5vcHRpb25zLmFuaW1hdGlvbjtcblxuXHRcdFx0aWYgKG1zKSB7XG5cdFx0XHRcdHZhciBjdXJyZW50UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdFx0XHRpZiAocHJldlJlY3Qubm9kZVR5cGUgPT09IDEpIHtcblx0XHRcdFx0XHRwcmV2UmVjdCA9IHByZXZSZWN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2Nzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJ25vbmUnKTtcblx0XHRcdFx0X2Nzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlM2QoJ1xuXHRcdFx0XHRcdCsgKHByZXZSZWN0LmxlZnQgLSBjdXJyZW50UmVjdC5sZWZ0KSArICdweCwnXG5cdFx0XHRcdFx0KyAocHJldlJlY3QudG9wIC0gY3VycmVudFJlY3QudG9wKSArICdweCwwKSdcblx0XHRcdFx0KTtcblxuXHRcdFx0XHR0YXJnZXQub2Zmc2V0V2lkdGg7IC8vIHJlcGFpbnRcblxuXHRcdFx0XHRfY3NzKHRhcmdldCwgJ3RyYW5zaXRpb24nLCAnYWxsICcgKyBtcyArICdtcycpO1xuXHRcdFx0XHRfY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgwLDAsMCknKTtcblxuXHRcdFx0XHRjbGVhclRpbWVvdXQodGFyZ2V0LmFuaW1hdGVkKTtcblx0XHRcdFx0dGFyZ2V0LmFuaW1hdGVkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0X2Nzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJycpO1xuXHRcdFx0XHRcdF9jc3ModGFyZ2V0LCAndHJhbnNmb3JtJywgJycpO1xuXHRcdFx0XHRcdHRhcmdldC5hbmltYXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR9LCBtcyk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9vZmZVcEV2ZW50czogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIG93bmVyRG9jdW1lbnQgPSB0aGlzLmVsLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdF9vZmYoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG5cdFx0XHRfb2ZmKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG5cdFx0XHRfb2ZmKG93bmVyRG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX29uRHJvcCk7XG5cdFx0XHRfb2ZmKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMuX29uRHJvcCk7XG5cdFx0XHRfb2ZmKG93bmVyRG9jdW1lbnQsICdwb2ludGVyY2FuY2VsJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgdGhpcyk7XG5cdFx0fSxcblxuXHRcdF9vbkRyb3A6IGZ1bmN0aW9uICgvKipFdmVudCovZXZ0KSB7XG5cdFx0XHR2YXIgZWwgPSB0aGlzLmVsLFxuXHRcdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMuX2xvb3BJZCk7XG5cdFx0XHRjbGVhckludGVydmFsKGF1dG9TY3JvbGwucGlkKTtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9kcmFnU3RhcnRUaW1lcik7XG5cblx0XHRcdC8vIFVuYmluZCBldmVudHNcblx0XHRcdF9vZmYoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG5cblx0XHRcdGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuXHRcdFx0XHRfb2ZmKGRvY3VtZW50LCAnZHJvcCcsIHRoaXMpO1xuXHRcdFx0XHRfb2ZmKGVsLCAnZHJhZ3N0YXJ0JywgdGhpcy5fb25EcmFnU3RhcnQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9vZmZVcEV2ZW50cygpO1xuXG5cdFx0XHRpZiAoZXZ0KSB7XG5cdFx0XHRcdGlmIChtb3ZlZCkge1xuXHRcdFx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdCFvcHRpb25zLmRyb3BCdWJibGUgJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2hvc3RFbCAmJiBnaG9zdEVsLnBhcmVudE5vZGUgJiYgZ2hvc3RFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGdob3N0RWwpO1xuXG5cdFx0XHRcdGlmIChyb290RWwgPT09IHBhcmVudEVsIHx8IFNvcnRhYmxlLmFjdGl2ZS5sYXN0UHVsbE1vZGUgIT09ICdjbG9uZScpIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgY2xvbmVcblx0XHRcdFx0XHRjbG9uZUVsICYmIGNsb25lRWwucGFyZW50Tm9kZSAmJiBjbG9uZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmVFbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZHJhZ0VsKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG5cdFx0XHRcdFx0XHRfb2ZmKGRyYWdFbCwgJ2RyYWdlbmQnLCB0aGlzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRfZGlzYWJsZURyYWdnYWJsZShkcmFnRWwpO1xuXHRcdFx0XHRcdGRyYWdFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnO1xuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGNsYXNzJ3Ncblx0XHRcdFx0XHRfdG9nZ2xlQ2xhc3MoZHJhZ0VsLCB0aGlzLm9wdGlvbnMuZ2hvc3RDbGFzcywgZmFsc2UpO1xuXHRcdFx0XHRcdF90b2dnbGVDbGFzcyhkcmFnRWwsIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpO1xuXG5cdFx0XHRcdFx0Ly8gRHJhZyBzdG9wIGV2ZW50XG5cdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAndW5jaG9vc2UnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgpO1xuXG5cdFx0XHRcdFx0aWYgKHJvb3RFbCAhPT0gcGFyZW50RWwpIHtcblx0XHRcdFx0XHRcdG5ld0luZGV4ID0gX2luZGV4KGRyYWdFbCwgb3B0aW9ucy5kcmFnZ2FibGUpO1xuXG5cdFx0XHRcdFx0XHRpZiAobmV3SW5kZXggPj0gMCkge1xuXHRcdFx0XHRcdFx0XHQvLyBBZGQgZXZlbnRcblx0XHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQobnVsbCwgcGFyZW50RWwsICdhZGQnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgsIG5ld0luZGV4KTtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgZXZlbnRcblx0XHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAncmVtb3ZlJywgZHJhZ0VsLCByb290RWwsIG9sZEluZGV4LCBuZXdJbmRleCk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gZHJhZyBmcm9tIG9uZSBsaXN0IGFuZCBkcm9wIGludG8gYW5vdGhlclxuXHRcdFx0XHRcdFx0XHRfZGlzcGF0Y2hFdmVudChudWxsLCBwYXJlbnRFbCwgJ3NvcnQnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgsIG5ld0luZGV4KTtcblx0XHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAnc29ydCcsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCwgbmV3SW5kZXgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChkcmFnRWwubmV4dFNpYmxpbmcgIT09IG5leHRFbCkge1xuXHRcdFx0XHRcdFx0XHQvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnRcblx0XHRcdFx0XHRcdFx0bmV3SW5kZXggPSBfaW5kZXgoZHJhZ0VsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKG5ld0luZGV4ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBkcmFnICYgZHJvcCB3aXRoaW4gdGhlIHNhbWUgbGlzdFxuXHRcdFx0XHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KHRoaXMsIHJvb3RFbCwgJ3VwZGF0ZScsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCwgbmV3SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KHRoaXMsIHJvb3RFbCwgJ3NvcnQnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgsIG5ld0luZGV4KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChTb3J0YWJsZS5hY3RpdmUpIHtcblx0XHRcdFx0XHRcdC8qIGpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHRcdFx0XHRcdFx0aWYgKG5ld0luZGV4ID09IG51bGwgfHwgbmV3SW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdG5ld0luZGV4ID0gb2xkSW5kZXg7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KHRoaXMsIHJvb3RFbCwgJ2VuZCcsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCwgbmV3SW5kZXgpO1xuXG5cdFx0XHRcdFx0XHQvLyBTYXZlIHNvcnRpbmdcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX251bGxpbmcoKTtcblx0XHR9LFxuXG5cdFx0X251bGxpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cm9vdEVsID1cblx0XHRcdGRyYWdFbCA9XG5cdFx0XHRwYXJlbnRFbCA9XG5cdFx0XHRnaG9zdEVsID1cblx0XHRcdG5leHRFbCA9XG5cdFx0XHRjbG9uZUVsID1cblx0XHRcdGxhc3REb3duRWwgPVxuXG5cdFx0XHRzY3JvbGxFbCA9XG5cdFx0XHRzY3JvbGxQYXJlbnRFbCA9XG5cblx0XHRcdHRhcEV2dCA9XG5cdFx0XHR0b3VjaEV2dCA9XG5cblx0XHRcdG1vdmVkID1cblx0XHRcdG5ld0luZGV4ID1cblxuXHRcdFx0bGFzdEVsID1cblx0XHRcdGxhc3RDU1MgPVxuXG5cdFx0XHRwdXRTb3J0YWJsZSA9XG5cdFx0XHRhY3RpdmVHcm91cCA9XG5cdFx0XHRTb3J0YWJsZS5hY3RpdmUgPSBudWxsO1xuXG5cdFx0XHRzYXZlZElucHV0Q2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0XHRlbC5jaGVja2VkID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0c2F2ZWRJbnB1dENoZWNrZWQubGVuZ3RoID0gMDtcblx0XHR9LFxuXG5cdFx0aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uICgvKipFdmVudCovZXZ0KSB7XG5cdFx0XHRzd2l0Y2ggKGV2dC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2Ryb3AnOlxuXHRcdFx0XHRjYXNlICdkcmFnZW5kJzpcblx0XHRcdFx0XHR0aGlzLl9vbkRyb3AoZXZ0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlICdkcmFnb3Zlcic6XG5cdFx0XHRcdGNhc2UgJ2RyYWdlbnRlcic6XG5cdFx0XHRcdFx0aWYgKGRyYWdFbCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fb25EcmFnT3ZlcihldnQpO1xuXHRcdFx0XHRcdFx0X2dsb2JhbERyYWdPdmVyKGV2dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ3NlbGVjdHN0YXJ0Jzpcblx0XHRcdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9LFxuXG5cblx0XHQvKipcblx0XHQgKiBTZXJpYWxpemVzIHRoZSBpdGVtIGludG8gYW4gYXJyYXkgb2Ygc3RyaW5nLlxuXHRcdCAqIEByZXR1cm5zIHtTdHJpbmdbXX1cblx0XHQgKi9cblx0XHR0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgb3JkZXIgPSBbXSxcblx0XHRcdFx0ZWwsXG5cdFx0XHRcdGNoaWxkcmVuID0gdGhpcy5lbC5jaGlsZHJlbixcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdG4gPSBjaGlsZHJlbi5sZW5ndGgsXG5cdFx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRcdGZvciAoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRcdGVsID0gY2hpbGRyZW5baV07XG5cdFx0XHRcdGlmIChfY2xvc2VzdChlbCwgb3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuZWwpKSB7XG5cdFx0XHRcdFx0b3JkZXIucHVzaChlbC5nZXRBdHRyaWJ1dGUob3B0aW9ucy5kYXRhSWRBdHRyKSB8fCBfZ2VuZXJhdGVJZChlbCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvcmRlcjtcblx0XHR9LFxuXG5cblx0XHQvKipcblx0XHQgKiBTb3J0cyB0aGUgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBhcnJheS5cblx0XHQgKiBAcGFyYW0gIHtTdHJpbmdbXX0gIG9yZGVyICBvcmRlciBvZiB0aGUgaXRlbXNcblx0XHQgKi9cblx0XHRzb3J0OiBmdW5jdGlvbiAob3JkZXIpIHtcblx0XHRcdHZhciBpdGVtcyA9IHt9LCByb290RWwgPSB0aGlzLmVsO1xuXG5cdFx0XHR0aGlzLnRvQXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uIChpZCwgaSkge1xuXHRcdFx0XHR2YXIgZWwgPSByb290RWwuY2hpbGRyZW5baV07XG5cblx0XHRcdFx0aWYgKF9jbG9zZXN0KGVsLCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLCByb290RWwpKSB7XG5cdFx0XHRcdFx0aXRlbXNbaWRdID0gZWw7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXMpO1xuXG5cdFx0XHRvcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuXHRcdFx0XHRpZiAoaXRlbXNbaWRdKSB7XG5cdFx0XHRcdFx0cm9vdEVsLnJlbW92ZUNoaWxkKGl0ZW1zW2lkXSk7XG5cdFx0XHRcdFx0cm9vdEVsLmFwcGVuZENoaWxkKGl0ZW1zW2lkXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sXG5cblxuXHRcdC8qKlxuXHRcdCAqIFNhdmUgdGhlIGN1cnJlbnQgc29ydGluZ1xuXHRcdCAqL1xuXHRcdHNhdmU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBzdG9yZSA9IHRoaXMub3B0aW9ucy5zdG9yZTtcblx0XHRcdHN0b3JlICYmIHN0b3JlLnNldCh0aGlzKTtcblx0XHR9LFxuXG5cblx0XHQvKipcblx0XHQgKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQsIGdldCB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIGJ5IHRlc3RpbmcgdGhlIGVsZW1lbnQgaXRzZWxmIGFuZCB0cmF2ZXJzaW5nIHVwIHRocm91Z2ggaXRzIGFuY2VzdG9ycyBpbiB0aGUgRE9NIHRyZWUuXG5cdFx0ICogQHBhcmFtICAge0hUTUxFbGVtZW50fSAgZWxcblx0XHQgKiBAcGFyYW0gICB7U3RyaW5nfSAgICAgICBbc2VsZWN0b3JdICBkZWZhdWx0OiBgb3B0aW9ucy5kcmFnZ2FibGVgXG5cdFx0ICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9XG5cdFx0ICovXG5cdFx0Y2xvc2VzdDogZnVuY3Rpb24gKGVsLCBzZWxlY3Rvcikge1xuXHRcdFx0cmV0dXJuIF9jbG9zZXN0KGVsLCBzZWxlY3RvciB8fCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLCB0aGlzLmVsKTtcblx0XHR9LFxuXG5cblx0XHQvKipcblx0XHQgKiBTZXQvZ2V0IG9wdGlvblxuXHRcdCAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWVcblx0XHQgKiBAcGFyYW0gICB7Kn0gICAgICBbdmFsdWVdXG5cdFx0ICogQHJldHVybnMgeyp9XG5cdFx0ICovXG5cdFx0b3B0aW9uOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcblx0XHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0XHRpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuXHRcdFx0XHRyZXR1cm4gb3B0aW9uc1tuYW1lXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdGlvbnNbbmFtZV0gPSB2YWx1ZTtcblxuXHRcdFx0XHRpZiAobmFtZSA9PT0gJ2dyb3VwJykge1xuXHRcdFx0XHRcdF9wcmVwYXJlR3JvdXAob3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cblx0XHQvKipcblx0XHQgKiBEZXN0cm95XG5cdFx0ICovXG5cdFx0ZGVzdHJveTogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGVsID0gdGhpcy5lbDtcblxuXHRcdFx0ZWxbZXhwYW5kb10gPSBudWxsO1xuXG5cdFx0XHRfb2ZmKGVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG5cdFx0XHRfb2ZmKGVsLCAndG91Y2hzdGFydCcsIHRoaXMuX29uVGFwU3RhcnQpO1xuXHRcdFx0X29mZihlbCwgJ3BvaW50ZXJkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG5cblx0XHRcdGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuXHRcdFx0XHRfb2ZmKGVsLCAnZHJhZ292ZXInLCB0aGlzKTtcblx0XHRcdFx0X29mZihlbCwgJ2RyYWdlbnRlcicsIHRoaXMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZHJhZ2dhYmxlIGF0dHJpYnV0ZXNcblx0XHRcdEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbCgnW2RyYWdnYWJsZV0nKSwgZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRcdGVsLnJlbW92ZUF0dHJpYnV0ZSgnZHJhZ2dhYmxlJyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dG91Y2hEcmFnT3Zlckxpc3RlbmVycy5zcGxpY2UodG91Y2hEcmFnT3Zlckxpc3RlbmVycy5pbmRleE9mKHRoaXMuX29uRHJhZ092ZXIpLCAxKTtcblxuXHRcdFx0dGhpcy5fb25Ecm9wKCk7XG5cblx0XHRcdHRoaXMuZWwgPSBlbCA9IG51bGw7XG5cdFx0fVxuXHR9O1xuXG5cblx0ZnVuY3Rpb24gX2Nsb25lSGlkZShzb3J0YWJsZSwgc3RhdGUpIHtcblx0XHRpZiAoc29ydGFibGUubGFzdFB1bGxNb2RlICE9PSAnY2xvbmUnKSB7XG5cdFx0XHRzdGF0ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNsb25lRWwgJiYgKGNsb25lRWwuc3RhdGUgIT09IHN0YXRlKSkge1xuXHRcdFx0X2NzcyhjbG9uZUVsLCAnZGlzcGxheScsIHN0YXRlID8gJ25vbmUnIDogJycpO1xuXG5cdFx0XHRpZiAoIXN0YXRlKSB7XG5cdFx0XHRcdGlmIChjbG9uZUVsLnN0YXRlKSB7XG5cdFx0XHRcdFx0aWYgKHNvcnRhYmxlLm9wdGlvbnMuZ3JvdXAucmV2ZXJ0Q2xvbmUpIHtcblx0XHRcdFx0XHRcdHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgbmV4dEVsKTtcblx0XHRcdFx0XHRcdHNvcnRhYmxlLl9hbmltYXRlKGRyYWdFbCwgY2xvbmVFbCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmVFbCwgZHJhZ0VsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y2xvbmVFbC5zdGF0ZSA9IHN0YXRlO1xuXHRcdH1cblx0fVxuXG5cblx0ZnVuY3Rpb24gX2Nsb3Nlc3QoLyoqSFRNTEVsZW1lbnQqL2VsLCAvKipTdHJpbmcqL3NlbGVjdG9yLCAvKipIVE1MRWxlbWVudCovY3R4KSB7XG5cdFx0aWYgKGVsKSB7XG5cdFx0XHRjdHggPSBjdHggfHwgZG9jdW1lbnQ7XG5cblx0XHRcdGRvIHtcblx0XHRcdFx0aWYgKChzZWxlY3RvciA9PT0gJz4qJyAmJiBlbC5wYXJlbnROb2RlID09PSBjdHgpIHx8IF9tYXRjaGVzKGVsLCBzZWxlY3RvcikpIHtcblx0XHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHRcdH1cblx0XHRcdFx0LyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXHRcdFx0fSB3aGlsZSAoZWwgPSBfZ2V0UGFyZW50T3JIb3N0KGVsKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9nZXRQYXJlbnRPckhvc3QoZWwpIHtcblx0XHR2YXIgcGFyZW50ID0gZWwuaG9zdDtcblxuXHRcdHJldHVybiAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSkgPyBwYXJlbnQgOiBlbC5wYXJlbnROb2RlO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBfZ2xvYmFsRHJhZ092ZXIoLyoqRXZlbnQqL2V2dCkge1xuXHRcdGlmIChldnQuZGF0YVRyYW5zZmVyKSB7XG5cdFx0XHRldnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG5cdFx0fVxuXHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBfb24oZWwsIGV2ZW50LCBmbikge1xuXHRcdGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCBjYXB0dXJlTW9kZSk7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9vZmYoZWwsIGV2ZW50LCBmbikge1xuXHRcdGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGZuLCBjYXB0dXJlTW9kZSk7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF90b2dnbGVDbGFzcyhlbCwgbmFtZSwgc3RhdGUpIHtcblx0XHRpZiAoZWwpIHtcblx0XHRcdGlmIChlbC5jbGFzc0xpc3QpIHtcblx0XHRcdFx0ZWwuY2xhc3NMaXN0W3N0YXRlID8gJ2FkZCcgOiAncmVtb3ZlJ10obmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dmFyIGNsYXNzTmFtZSA9ICgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLnJlcGxhY2UoUl9TUEFDRSwgJyAnKS5yZXBsYWNlKCcgJyArIG5hbWUgKyAnICcsICcgJyk7XG5cdFx0XHRcdGVsLmNsYXNzTmFtZSA9IChjbGFzc05hbWUgKyAoc3RhdGUgPyAnICcgKyBuYW1lIDogJycpKS5yZXBsYWNlKFJfU1BBQ0UsICcgJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblxuXHRmdW5jdGlvbiBfY3NzKGVsLCBwcm9wLCB2YWwpIHtcblx0XHR2YXIgc3R5bGUgPSBlbCAmJiBlbC5zdHlsZTtcblxuXHRcdGlmIChzdHlsZSkge1xuXHRcdFx0aWYgKHZhbCA9PT0gdm9pZCAwKSB7XG5cdFx0XHRcdGlmIChkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKSB7XG5cdFx0XHRcdFx0dmFsID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgJycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmN1cnJlbnRTdHlsZSkge1xuXHRcdFx0XHRcdHZhbCA9IGVsLmN1cnJlbnRTdHlsZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBwcm9wID09PSB2b2lkIDAgPyB2YWwgOiB2YWxbcHJvcF07XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKCEocHJvcCBpbiBzdHlsZSkpIHtcblx0XHRcdFx0XHRwcm9wID0gJy13ZWJraXQtJyArIHByb3A7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzdHlsZVtwcm9wXSA9IHZhbCArICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/ICcnIDogJ3B4Jyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblxuXHRmdW5jdGlvbiBfZmluZChjdHgsIHRhZ05hbWUsIGl0ZXJhdG9yKSB7XG5cdFx0aWYgKGN0eCkge1xuXHRcdFx0dmFyIGxpc3QgPSBjdHguZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSksIGkgPSAwLCBuID0gbGlzdC5sZW5ndGg7XG5cblx0XHRcdGlmIChpdGVyYXRvcikge1xuXHRcdFx0XHRmb3IgKDsgaSA8IG47IGkrKykge1xuXHRcdFx0XHRcdGl0ZXJhdG9yKGxpc3RbaV0sIGkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cblxuXHRmdW5jdGlvbiBfZGlzcGF0Y2hFdmVudChzb3J0YWJsZSwgcm9vdEVsLCBuYW1lLCB0YXJnZXRFbCwgZnJvbUVsLCBzdGFydEluZGV4LCBuZXdJbmRleCkge1xuXHRcdHNvcnRhYmxlID0gKHNvcnRhYmxlIHx8IHJvb3RFbFtleHBhbmRvXSk7XG5cblx0XHR2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JyksXG5cdFx0XHRvcHRpb25zID0gc29ydGFibGUub3B0aW9ucyxcblx0XHRcdG9uTmFtZSA9ICdvbicgKyBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHIoMSk7XG5cblx0XHRldnQuaW5pdEV2ZW50KG5hbWUsIHRydWUsIHRydWUpO1xuXG5cdFx0ZXZ0LnRvID0gcm9vdEVsO1xuXHRcdGV2dC5mcm9tID0gZnJvbUVsIHx8IHJvb3RFbDtcblx0XHRldnQuaXRlbSA9IHRhcmdldEVsIHx8IHJvb3RFbDtcblx0XHRldnQuY2xvbmUgPSBjbG9uZUVsO1xuXG5cdFx0ZXZ0Lm9sZEluZGV4ID0gc3RhcnRJbmRleDtcblx0XHRldnQubmV3SW5kZXggPSBuZXdJbmRleDtcblxuXHRcdHJvb3RFbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cblx0XHRpZiAob3B0aW9uc1tvbk5hbWVdKSB7XG5cdFx0XHRvcHRpb25zW29uTmFtZV0uY2FsbChzb3J0YWJsZSwgZXZ0KTtcblx0XHR9XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9vbk1vdmUoZnJvbUVsLCB0b0VsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXRFbCwgdGFyZ2V0UmVjdCwgb3JpZ2luYWxFdnQsIHdpbGxJbnNlcnRBZnRlcikge1xuXHRcdHZhciBldnQsXG5cdFx0XHRzb3J0YWJsZSA9IGZyb21FbFtleHBhbmRvXSxcblx0XHRcdG9uTW92ZUZuID0gc29ydGFibGUub3B0aW9ucy5vbk1vdmUsXG5cdFx0XHRyZXRWYWw7XG5cblx0XHRldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldnQuaW5pdEV2ZW50KCdtb3ZlJywgdHJ1ZSwgdHJ1ZSk7XG5cblx0XHRldnQudG8gPSB0b0VsO1xuXHRcdGV2dC5mcm9tID0gZnJvbUVsO1xuXHRcdGV2dC5kcmFnZ2VkID0gZHJhZ0VsO1xuXHRcdGV2dC5kcmFnZ2VkUmVjdCA9IGRyYWdSZWN0O1xuXHRcdGV2dC5yZWxhdGVkID0gdGFyZ2V0RWwgfHwgdG9FbDtcblx0XHRldnQucmVsYXRlZFJlY3QgPSB0YXJnZXRSZWN0IHx8IHRvRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0ZXZ0LndpbGxJbnNlcnRBZnRlciA9IHdpbGxJbnNlcnRBZnRlcjtcblxuXHRcdGZyb21FbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cblx0XHRpZiAob25Nb3ZlRm4pIHtcblx0XHRcdHJldFZhbCA9IG9uTW92ZUZuLmNhbGwoc29ydGFibGUsIGV2dCwgb3JpZ2luYWxFdnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXRWYWw7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9kaXNhYmxlRHJhZ2dhYmxlKGVsKSB7XG5cdFx0ZWwuZHJhZ2dhYmxlID0gZmFsc2U7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF91bnNpbGVudCgpIHtcblx0XHRfc2lsZW50ID0gZmFsc2U7XG5cdH1cblxuXG5cdC8qKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8ZmFsc2V9ICovXG5cdGZ1bmN0aW9uIF9naG9zdElzTGFzdChlbCwgZXZ0KSB7XG5cdFx0dmFyIGxhc3RFbCA9IGVsLmxhc3RFbGVtZW50Q2hpbGQsXG5cdFx0XHRyZWN0ID0gbGFzdEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0Ly8gNSDigJQgbWluIGRlbHRhXG5cdFx0Ly8gYWJzIOKAlCDQvdC10LvRjNC30Y8g0LTQvtCx0LDQstC70Y/RgtGMLCDQsCDRgtC+INCz0LvRjtC60Lgg0L/RgNC4INC90LDQstC10LTQtdC90LjQuCDRgdCy0LXRgNGF0YNcblx0XHRyZXR1cm4gKGV2dC5jbGllbnRZIC0gKHJlY3QudG9wICsgcmVjdC5oZWlnaHQpID4gNSkgfHxcblx0XHRcdChldnQuY2xpZW50WCAtIChyZWN0LmxlZnQgKyByZWN0LndpZHRoKSA+IDUpO1xuXHR9XG5cblxuXHQvKipcblx0ICogR2VuZXJhdGUgaWRcblx0ICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBlbFxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gX2dlbmVyYXRlSWQoZWwpIHtcblx0XHR2YXIgc3RyID0gZWwudGFnTmFtZSArIGVsLmNsYXNzTmFtZSArIGVsLnNyYyArIGVsLmhyZWYgKyBlbC50ZXh0Q29udGVudCxcblx0XHRcdGkgPSBzdHIubGVuZ3RoLFxuXHRcdFx0c3VtID0gMDtcblxuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdHN1bSArPSBzdHIuY2hhckNvZGVBdChpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3VtLnRvU3RyaW5nKDM2KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IHdpdGhpbiBpdHMgcGFyZW50IGZvciBhIHNlbGVjdGVkIHNldCBvZlxuXHQgKiBlbGVtZW50c1xuXHQgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gZWxcblx0ICogQHBhcmFtICB7c2VsZWN0b3J9IHNlbGVjdG9yXG5cdCAqIEByZXR1cm4ge251bWJlcn1cblx0ICovXG5cdGZ1bmN0aW9uIF9pbmRleChlbCwgc2VsZWN0b3IpIHtcblx0XHR2YXIgaW5kZXggPSAwO1xuXG5cdFx0aWYgKCFlbCB8fCAhZWwucGFyZW50Tm9kZSkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdHdoaWxlIChlbCAmJiAoZWwgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSkge1xuXHRcdFx0aWYgKChlbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnVEVNUExBVEUnKSAmJiAoc2VsZWN0b3IgPT09ICc+KicgfHwgX21hdGNoZXMoZWwsIHNlbGVjdG9yKSkpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaW5kZXg7XG5cdH1cblxuXHRmdW5jdGlvbiBfbWF0Y2hlcygvKipIVE1MRWxlbWVudCovZWwsIC8qKlN0cmluZyovc2VsZWN0b3IpIHtcblx0XHRpZiAoZWwpIHtcblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc3BsaXQoJy4nKTtcblxuXHRcdFx0dmFyIHRhZyA9IHNlbGVjdG9yLnNoaWZ0KCkudG9VcHBlckNhc2UoKSxcblx0XHRcdFx0cmUgPSBuZXcgUmVnRXhwKCdcXFxccygnICsgc2VsZWN0b3Iuam9pbignfCcpICsgJykoPz1cXFxccyknLCAnZycpO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQodGFnID09PSAnJyB8fCBlbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09IHRhZykgJiZcblx0XHRcdFx0KCFzZWxlY3Rvci5sZW5ndGggfHwgKCgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLm1hdGNoKHJlKSB8fCBbXSkubGVuZ3RoID09IHNlbGVjdG9yLmxlbmd0aClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gX3Rocm90dGxlKGNhbGxiYWNrLCBtcykge1xuXHRcdHZhciBhcmdzLCBfdGhpcztcblxuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoYXJncyA9PT0gdm9pZCAwKSB7XG5cdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHRcdF90aGlzID0gdGhpcztcblxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwoX3RoaXMsIGFyZ3NbMF0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjYWxsYmFjay5hcHBseShfdGhpcywgYXJncyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXJncyA9IHZvaWQgMDtcblx0XHRcdFx0fSwgbXMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBfZXh0ZW5kKGRzdCwgc3JjKSB7XG5cdFx0aWYgKGRzdCAmJiBzcmMpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBzcmMpIHtcblx0XHRcdFx0aWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmNba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBkc3Q7XG5cdH1cblxuXHRmdW5jdGlvbiBfY2xvbmUoZWwpIHtcblx0XHRyZXR1cm4gJFxuXHRcdFx0PyAkKGVsKS5jbG9uZSh0cnVlKVswXVxuXHRcdFx0OiAoUG9seW1lciAmJiBQb2x5bWVyLmRvbVxuXHRcdFx0XHQ/IFBvbHltZXIuZG9tKGVsKS5jbG9uZU5vZGUodHJ1ZSlcblx0XHRcdFx0OiBlbC5jbG9uZU5vZGUodHJ1ZSlcblx0XHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBfc2F2ZUlucHV0Q2hlY2tlZFN0YXRlKHJvb3QpIHtcblx0XHR2YXIgaW5wdXRzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcblx0XHR2YXIgaWR4ID0gaW5wdXRzLmxlbmd0aDtcblxuXHRcdHdoaWxlIChpZHgtLSkge1xuXHRcdFx0dmFyIGVsID0gaW5wdXRzW2lkeF07XG5cdFx0XHRlbC5jaGVja2VkICYmIHNhdmVkSW5wdXRDaGVja2VkLnB1c2goZWwpO1xuXHRcdH1cblx0fVxuXG5cdC8vIEZpeGVkICM5NzM6IFxuXHRfb24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0aWYgKFNvcnRhYmxlLmFjdGl2ZSkge1xuXHRcdFx0ZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9KTtcblxuXHR0cnkge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgbnVsbCwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcblx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRjYXB0dXJlTW9kZSA9IHtcblx0XHRcdFx0XHRjYXB0dXJlOiBmYWxzZSxcblx0XHRcdFx0XHRwYXNzaXZlOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0pKTtcblx0fSBjYXRjaCAoZXJyKSB7fVxuXG5cdC8vIEV4cG9ydCB1dGlsc1xuXHRTb3J0YWJsZS51dGlscyA9IHtcblx0XHRvbjogX29uLFxuXHRcdG9mZjogX29mZixcblx0XHRjc3M6IF9jc3MsXG5cdFx0ZmluZDogX2ZpbmQsXG5cdFx0aXM6IGZ1bmN0aW9uIChlbCwgc2VsZWN0b3IpIHtcblx0XHRcdHJldHVybiAhIV9jbG9zZXN0KGVsLCBzZWxlY3RvciwgZWwpO1xuXHRcdH0sXG5cdFx0ZXh0ZW5kOiBfZXh0ZW5kLFxuXHRcdHRocm90dGxlOiBfdGhyb3R0bGUsXG5cdFx0Y2xvc2VzdDogX2Nsb3Nlc3QsXG5cdFx0dG9nZ2xlQ2xhc3M6IF90b2dnbGVDbGFzcyxcblx0XHRjbG9uZTogX2Nsb25lLFxuXHRcdGluZGV4OiBfaW5kZXhcblx0fTtcblxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgc29ydGFibGUgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gIGVsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSAgICAgIFtvcHRpb25zXVxuXHQgKi9cblx0U29ydGFibGUuY3JlYXRlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG5cdFx0cmV0dXJuIG5ldyBTb3J0YWJsZShlbCwgb3B0aW9ucyk7XG5cdH07XG5cblxuXHQvLyBFeHBvcnRcblx0U29ydGFibGUudmVyc2lvbiA9ICcxLjYuMSc7XG5cdHJldHVybiBTb3J0YWJsZTtcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3NvcnRhYmxlanMvU29ydGFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcblxuaW1wb3J0IHtcbiAgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLFxuICBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xufSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBTdXJ2ZXlPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gKFxuICBwcm9wZXJ0eTogU3VydmV5T2JqZWN0UHJvcGVydHksXG4gIG5ld1ZhbHVlOiBhbnlcbikgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU9iamVjdFByb3BlcnR5IHtcbiAgcHJpdmF0ZSBvYmplY3RWYWx1ZTogYW55O1xuICBwcml2YXRlIGlzVmFsdWVVcGRhdGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBvblByb3BlcnR5Q2hhbmdlZDogU3VydmV5T25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjaztcbiAgcHJpdmF0ZSBpc0FjdGl2ZVZhbHVlOiBib29sZWFuO1xuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBlZGl0b3I6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZTtcbiAgcHVibGljIGVkaXRvclR5cGU6IHN0cmluZztcbiAgcHVibGljIGJhc2VFZGl0b3JUeXBlOiBzdHJpbmc7XG5cbiAga29Jc1Nob3dFZGl0b3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgb25Qcm9wZXJ0eUNoYW5nZWQ6IFN1cnZleU9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsLFxuICAgIHByb3BlcnR5RWRpdG9yT3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsXG4gICkge1xuICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQgPSBvblByb3BlcnR5Q2hhbmdlZDtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLnByb3BlcnR5Lm5hbWU7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHByb3BlcnR5W1wicmVhZE9ubHlcIl07XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBvbkl0ZW1DaGFuZ2VkID0gZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYub25FZGl0b3JWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IgPSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRlRWRpdG9yKFxuICAgICAgcHJvcGVydHksXG4gICAgICBvbkl0ZW1DaGFuZ2VkXG4gICAgKTtcbiAgICB0aGlzLmVkaXRvci5vbkdldExvY2FsZSA9IHRoaXMuZG9PbkdldExvY2FsZTtcbiAgICB0aGlzLmVkaXRvci5vcHRpb25zID0gcHJvcGVydHlFZGl0b3JPcHRpb25zO1xuICAgIHRoaXMuZWRpdG9yVHlwZSA9IHRoaXMuZWRpdG9yLmVkaXRvclR5cGU7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuZGlzcGxheU5hbWU7XG4gIH1cbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci50aXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBpc0FjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0FjdGl2ZSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLmlzQWN0aXZlVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5rb0lzU2hvd0VkaXRvcihcbiAgICAgICF0aGlzLmRpc2FibGVkICYmICh0aGlzLmVkaXRvci5hbHdheXNTaG93RWRpdG9yIHx8IHRoaXMuaXNBY3RpdmUpXG4gICAgKTtcbiAgICB0aGlzLmVkaXRvci5hY3RpdmF0ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQga29WYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5rb1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQga29UZXh0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmtvVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGtvSXNEZWZhdWx0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmtvSXNEZWZhdWx0O1xuICB9XG4gIHByaXZhdGUgZG9PbkdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9iamVjdCAmJiB0aGlzLm9iamVjdFtcImdldExvY2FsZVwiXSkgcmV0dXJuIHRoaXMub2JqZWN0LmdldExvY2FsZSgpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgb2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBvYmplY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMub2JqZWN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmVkaXRvci5vYmplY3QgPSB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25FZGl0b3JWYWx1ZUNoYW5nZWQobmV3VmFsdWUpIHtcbiAgICBpZiAodGhpcy5vblByb3BlcnR5Q2hhbmdlZCAmJiB0aGlzLm9iamVjdClcbiAgICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQodGhpcywgbmV3VmFsdWUpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvb2JqZWN0UHJvcGVydHkudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVyc1wiO1xuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyB7XG4gIGFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yczogYm9vbGVhbjtcbiAgc2hvd0FwcGx5QnV0dG9uSW5FZGl0b3JzOiBib29sZWFuO1xuICBvbkl0ZW1WYWx1ZUFkZGVkQ2FsbGJhY2socHJvcGVydHlOYW1lOiBzdHJpbmcsIGl0ZW1WYWx1ZTogU3VydmV5Lkl0ZW1WYWx1ZSk7XG4gIG9uTWF0cml4RHJvcGRvd25Db2x1bW5BZGRlZENhbGxiYWNrKGNvbHVtbjogU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uKTtcbiAgb25TZXRQcm9wZXJ0eUVkaXRvck9wdGlvbnNDYWxsYmFjayhcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIGVkaXRvck9wdGlvbnM6IGFueVxuICApO1xuICBvbkdldEVycm9yVGV4dE9uVmFsaWRhdGlvbkNhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgdmFsdWU6IGFueVxuICApOiBzdHJpbmc7XG4gIG9uVmFsdWVDaGFuZ2luZ0NhbGxiYWNrKG9wdGlvbnM6IGFueSk7XG4gIG9uUHJvcGVydHlFZGl0b3JPYmplY3RTZXRDYWxsYmFjayhcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIGVkaXRvcjogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlXG4gICk7XG4gIG9uUHJvcGVydHlFZGl0b3JNb2RhbFNob3dEZXNjcmlwdGlvbkNhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2VcbiAgKTogYW55O1xuICBvbkdldEVsZW1lbnRFZGl0b3JUaXRsZUNhbGxiYWNrKG9iajogU3VydmV5LkJhc2UsIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgaW1wbGVtZW50cyBTdXJ2ZXkuSUxvY2FsaXphYmxlT3duZXIge1xuICBwcml2YXRlIGVkaXRpbmdWYWx1ZV86IGFueSA9IG51bGw7XG4gIHByaXZhdGUgaXNBcHBseWluTmV3VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBvYmplY3RWYWx1ZTogYW55O1xuICBwcml2YXRlIHZhbHVlVXBkYXRpbmdDb3VudGVyOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9wdGlvbnNWYWx1ZTogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsO1xuICBwcml2YXRlIHByb3BlcnR5XzogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eTtcbiAgcHJpdmF0ZSBpc1JlcXVyaWVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB0aXRsZVZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgaXNDdXN0b21EaXNwbGF5TmFtZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGRpc3BsYXlOYW1lVmFsdWU6IHN0cmluZztcbiAgcHVibGljIGtvVmFsdWU6IGFueTtcbiAgcHVibGljIGtvVGV4dDogYW55O1xuICBwdWJsaWMga29Jc0RlZmF1bHQ6IGFueTtcbiAgcHVibGljIGtvSGFzRXJyb3I6IGFueTtcbiAgcHVibGljIGtvRXJyb3JUZXh0OiBhbnk7XG4gIHB1YmxpYyBpc1RhYlByb3BlcnR5OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc0lucGxhY2VQcm9wZXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb25DaGFuZ2VkOiAobmV3VmFsdWU6IGFueSkgPT4gYW55O1xuICBwdWJsaWMgb25HZXRMb2NhbGU6ICgpID0+IHN0cmluZztcbiAgcHVibGljIG9uVmFsdWVVcGRhdGVkOiAobmV3VmFsdWU6IGFueSkgPT4gYW55O1xuICBwdWJsaWMgc2V0dXAoKSB7fVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHt9XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgdGhpcy5wcm9wZXJ0eV8gPSBwcm9wZXJ0eTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb1ZhbHVlID0ga28ub2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMua29WYWx1ZS5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYub25rb1ZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5rb1RleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRWYWx1ZVRleHQoc2VsZi5rb1ZhbHVlKCkpO1xuICAgIH0pO1xuICAgIHRoaXMua29Jc0RlZmF1bHQgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzZWxmLnByb3BlcnR5XG4gICAgICAgID8gc2VsZi5wcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZShzZWxmLmtvVmFsdWUoKSlcbiAgICAgICAgOiBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmtvSGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgICB0aGlzLmtvRXJyb3JUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLnNldElzUmVxdWlyZWQoKTtcbiAgICB0aGlzLnNldFRpdGxlQW5kRGlzcGxheU5hbWUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBcImVkaXRvclR5cGUgaXMgbm90IGRlZmluZWRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHByb3BlcnR5KCk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5XztcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRhYmxlUHJvcGVydHlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkgPyB0aGlzLnByb3BlcnR5Lm5hbWUgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkgPyB0aGlzLnByb3BlcnR5LnJlYWRPbmx5IDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBhbHdheXNTaG93RWRpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGlwbGF5TmFtZVZpc2libGUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICghdGhpcy5pc1RhYlByb3BlcnR5IHx8ICF0aGlzLmlzTW9kYWwpICYmXG4gICAgICAhdGhpcy5pc0lucGxhY2VQcm9wZXJ0eSAmJlxuICAgICAgdGhpcy5kaXNwbGF5TmFtZSAhPT0gXCIuXCJcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzcGxheU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzQ3VzdG9tRGlzcGxheU5hbWUgPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheU5hbWVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dEaXNwbGF5TmFtZU9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlwbGF5TmFtZVZpc2libGUgJiYgdGhpcy5jYW5TaG93RGlzcGxheU5hbWVPblRvcDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhblNob3dEaXNwbGF5TmFtZU9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY29udGVudFRlbXBsYXRlTmFtZSgpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBcInByb3BlcnR5ZWRpdG9yXCI7XG4gICAgaWYgKHRoaXMuaXNNb2RhbCkge1xuICAgICAgcmVzICs9IFwiLW1vZGFsY29udGVudFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgKz0gXCItXCIgKyB0aGlzLmVkaXRvclR5cGU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBpc01vZGFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBvYmplY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMub2JqZWN0VmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhbHVlLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICB0aGlzLnByb3BlcnR5Lm5hbWUsXG4gICAgICAgICgpID0+IHRoaXMudXBkYXRlVmFsdWUoKSxcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5uYW1lXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnNldElzUmVxdWlyZWQoKTtcbiAgICB0aGlzLnNldFRpdGxlQW5kRGlzcGxheU5hbWUoKTtcbiAgICB0aGlzLnNldE9iamVjdCh0aGlzLm9iamVjdCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eSkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uUHJvcGVydHlFZGl0b3JPYmplY3RTZXRDYWxsYmFjayhcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICB0aGlzLm9iamVjdCxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRpbmdWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdWYWx1ZV87XG4gIH1cbiAgcHVibGljIHNldCBlZGl0aW5nVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHZhbHVlID0gdGhpcy5nZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5zZXRWYWx1ZUNvcmUodmFsdWUpO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5rb0hhc0Vycm9yKHRoaXMuY2hlY2tGb3JFcnJvcnMoKSk7XG4gICAgcmV0dXJuIHRoaXMua29IYXNFcnJvcigpO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NTdHJpbmcobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcobmFtZSk7XG4gIH1cbiAgcHVibGljIGhhc0xvY1N0cmluZyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmhhc1N0cmluZyhuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2hlY2tGb3JFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9yVGV4dCA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xuICAgICAgdmFyIGVyID0gdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5rb1ZhbHVlKCkpO1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIGVycm9yVGV4dCA9IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGUucHJvcGVydHlJc0VtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICAhZXJyb3JUZXh0ICYmXG4gICAgICB0aGlzLnByb3BlcnR5ICYmXG4gICAgICB0aGlzLm9wdGlvbnMgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5vbkdldEVycm9yVGV4dE9uVmFsaWRhdGlvbkNhbGxiYWNrXG4gICAgKSB7XG4gICAgICBlcnJvclRleHQgPSB0aGlzLm9wdGlvbnMub25HZXRFcnJvclRleHRPblZhbGlkYXRpb25DYWxsYmFjayhcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICB0aGlzLm9iamVjdCxcbiAgICAgICAgdGhpcy5rb1ZhbHVlKClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMua29FcnJvclRleHQoZXJyb3JUZXh0KTtcbiAgICByZXR1cm4gZXJyb3JUZXh0ICE9PSBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVyaWVkVmFsdWU7XG4gIH1cbiAgLy9UT0RPIHJlbW92ZSB0aGlzIGZ1bmN0aW9uLCByZXBsYWNlIGl0IHdpdGggcHJvcGVydHkuaXNSZXF1aXJlZCBsYXRlclxuICBwcm90ZWN0ZWQgc2V0SXNSZXF1aXJlZCgpIHtcbiAgICB0aGlzLmlzUmVxdXJpZWRWYWx1ZSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5wcm9wZXJ0eSB8fCAhdGhpcy5vYmplY3QgfHwgIXRoaXMub2JqZWN0LmdldFR5cGUpIHJldHVybjtcbiAgICB2YXIganNvbkNsYXNzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZENsYXNzKHRoaXMub2JqZWN0LmdldFR5cGUoKSk7XG4gICAgd2hpbGUgKGpzb25DbGFzcykge1xuICAgICAgdmFyIHJlcVByb3BlcnRpZXMgPSBqc29uQ2xhc3MucmVxdWlyZWRQcm9wZXJ0aWVzO1xuICAgICAgaWYgKHJlcVByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5pc1JlcXVyaWVkVmFsdWUgPSByZXFQcm9wZXJ0aWVzLmluZGV4T2YodGhpcy5wcm9wZXJ0eS5uYW1lKSA+IC0xO1xuICAgICAgICBpZiAodGhpcy5pc1JlcXVyaWVkVmFsdWUpIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghanNvbkNsYXNzLnBhcmVudE5hbWUpIHJldHVybjtcbiAgICAgIGpzb25DbGFzcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmZpbmRDbGFzcyhqc29uQ2xhc3MucGFyZW50TmFtZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRUaXRsZUFuZERpc3BsYXlOYW1lKCkge1xuICAgIGlmICh0aGlzLmlzQ3VzdG9tRGlzcGxheU5hbWUpIHJldHVybjtcbiAgICB0aGlzLmRpc3BsYXlOYW1lVmFsdWUgPSB0aGlzLnByb3BlcnR5ID8gdGhpcy5wcm9wZXJ0eS5uYW1lIDogXCJcIjtcbiAgICB0aGlzLnRpdGxlVmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5wcm9wZXJ0eSkgcmV0dXJuO1xuICAgIHZhciBsb2NOYW1lID0gdGhpcy5wcm9wZXJ0eS5uYW1lO1xuICAgIHRoaXMuZGlzcGxheU5hbWVWYWx1ZSA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRQcm9wZXJ0eU5hbWUobG9jTmFtZSk7XG4gICAgdmFyIHRpdGxlID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFByb3BlcnR5VGl0bGUobG9jTmFtZSk7XG4gICAgdGhpcy50aXRsZVZhbHVlID0gdGl0bGU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7fVxuICBwdWJsaWMgYXBwbHkoKSB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoKSkgcmV0dXJuO1xuICAgIHRoaXMub25CZWZvcmVBcHBseSgpO1xuICAgIHRoaXMuaXNBcHBseWluTmV3VmFsdWUgPSB0cnVlO1xuICAgIHRoaXMua29WYWx1ZSh0aGlzLmVkaXRpbmdWYWx1ZSk7XG4gICAgdGhpcy5pc0FwcGx5aW5OZXdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMub25HZXRMb2NhbGUpIHJldHVybiB0aGlzLm9uR2V0TG9jYWxlKCk7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIGdldExvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGU7XG4gIH1cbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHB1YmxpYyBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBvcHRpb25zKCk6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9uc1ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uT3B0aW9uc0NoYW5nZWQoKSB7fVxuICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmVkaXRpbmdWYWx1ZV8gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0T2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB2YXIgZWRpdG9yT3B0aW9ucyA9IHRoaXMuY3JlYXRlRWRpdG9yT3B0aW9ucygpO1xuICAgICAgdGhpcy5vcHRpb25zLm9uU2V0UHJvcGVydHlFZGl0b3JPcHRpb25zQ2FsbGJhY2soXG4gICAgICAgIHRoaXMuZWRpdGFibGVQcm9wZXJ0eU5hbWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlZGl0b3JPcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5vblNldEVkaXRvck9wdGlvbnMoZWRpdG9yT3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhY3RpdmF0ZSgpIHt9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvck9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcHJvdGVjdGVkIG9uU2V0RWRpdG9yT3B0aW9ucyhlZGl0b3JPcHRpb25zOiBhbnkpIHt9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGJlZ2luVmFsdWVVcGRhdGluZygpIHtcbiAgICB0aGlzLnZhbHVlVXBkYXRpbmdDb3VudGVyKys7XG4gIH1cbiAgcHJvdGVjdGVkIGVuZFZhbHVlVXBkYXRpbmcoKSB7XG4gICAgaWYgKHRoaXMudmFsdWVVcGRhdGluZ0NvdW50ZXIgPiAwKSB7XG4gICAgICB0aGlzLnZhbHVlVXBkYXRpbmdDb3VudGVyLS07XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVWYWx1ZSgpIHtcbiAgICB0aGlzLmJlZ2luVmFsdWVVcGRhdGluZygpO1xuICAgIHRoaXMua29WYWx1ZSh0aGlzLmdldFZhbHVlKCkpO1xuICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gdGhpcy5rb1ZhbHVlKCk7XG4gICAgaWYgKHRoaXMub25WYWx1ZVVwZGF0ZWQpIHRoaXMub25WYWx1ZVVwZGF0ZWQodGhpcy5lZGl0aW5nVmFsdWUpO1xuICAgIHRoaXMuZW5kVmFsdWVVcGRhdGluZygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5ICYmIHRoaXMub2JqZWN0XG4gICAgICA/IHRoaXMucHJvcGVydHkuZ2V0UHJvcGVydHlWYWx1ZSh0aGlzLm9iamVjdClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGlza29WYWx1ZUNoYW5naW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgb25rb1ZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsdWVVcGRhdGluZ0NvdW50ZXIgPiAwIHx8IHRoaXMuaXNrb1ZhbHVlQ2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLmlza29WYWx1ZUNoYW5naW5nID0gdHJ1ZTtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0Q29ycmVjdGVkVmFsdWUobmV3VmFsdWUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eSAmJiB0aGlzLm9iamVjdCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogdGhpcy5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICBvYmo6IHRoaXMub2JqZWN0LFxuICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIG5ld1ZhbHVlOiBudWxsLFxuICAgICAgICBkb1ZhbGlkYXRpb246IGZhbHNlXG4gICAgICB9O1xuICAgICAgdGhpcy5vcHRpb25zLm9uVmFsdWVDaGFuZ2luZ0NhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShvcHRpb25zLm5ld1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmtvVmFsdWUob3B0aW9ucy5uZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5kb1ZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5oYXNFcnJvcigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNBcHBseWluTmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNrb1ZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnByb3BlcnR5ICYmIHRoaXMub2JqZWN0ICYmIHRoaXMuZ2V0VmFsdWUoKSA9PSBuZXdWYWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlZCAhPSBudWxsKSB0aGlzLm9uQ2hhbmdlZChuZXdWYWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRW1wdHkodmFsKTogYm9vbGVhbiB7XG4gICAgLy9UT0RPIHJlbW92ZSB0aGUgbGluZVxuICAgIGlmIChTdXJ2ZXkuQmFzZVtcImlzVmFsdWVFbXB0eVwiXSkgcmV0dXJuIFN1cnZleS5CYXNlW1wiaXNWYWx1ZUVtcHR5XCJdKHZhbCk7XG4gICAgcmV0dXJuIFN1cnZleS5IZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yQmFzZS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCBTb3J0YWJsZSBmcm9tIFwic29ydGFibGVqc1wiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5TW9kYWxFZGl0b3JcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIHtcbiAgcHVibGljIGtvSXRlbXM6IGFueTtcbiAgcHVibGljIG9uRGVsZXRlQ2xpY2s6IGFueTtcbiAgcHVibGljIG9uQWRkQ2xpY2s6IGFueTtcbiAgcHVibGljIG9uQ2xlYXJDbGljazogYW55O1xuICBrb0FsbG93QWRkUmVtb3ZlSXRlbXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvSXRlbXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9IFtdO1xuICAgIHRoaXMua29BbGxvd0FkZFJlbW92ZUl0ZW1zID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vbkRlbGV0ZUNsaWNrID0gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgc2VsZi5rb0l0ZW1zLnJlbW92ZShpdGVtKTtcbiAgICB9O1xuICAgIHNlbGYub25DbGVhckNsaWNrID0gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgc2VsZi5rb0l0ZW1zLnJlbW92ZUFsbCgpO1xuICAgIH07XG4gICAgc2VsZi5vbkFkZENsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLkFkZEl0ZW0oKTtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGxlbiA9IHZhbHVlID8gdmFsdWUubGVuZ3RoIDogMDtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLml0ZW1zXCIpW1wiZm9ybWF0XCJdKGxlbik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RlZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbXTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvck9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4geyBhbGxvd0FkZFJlbW92ZUl0ZW1zOiB0cnVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIG9uU2V0RWRpdG9yT3B0aW9ucyhlZGl0b3JPcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmtvQWxsb3dBZGRSZW1vdmVJdGVtcyhlZGl0b3JPcHRpb25zLmFsbG93QWRkUmVtb3ZlSXRlbXMpO1xuICB9XG4gIHB1YmxpYyBzb3J0YWJsZU9wdGlvbnMgPSB7XG4gICAgaGFuZGxlOiBcIi5zdmQtZHJhZy1oYW5kbGVcIixcbiAgICBhbmltYXRpb246IDE1MFxuICB9O1xuICBwcm90ZWN0ZWQgQWRkSXRlbSgpIHtcbiAgICB0aGlzLmtvSXRlbXMucHVzaCh0aGlzLmNyZWF0ZU5ld0VkaXRvckl0ZW0oKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBJdGVtcygpIHtcbiAgICB0aGlzLmtvSXRlbXModGhpcy5nZXRJdGVtc0Zyb21WYWx1ZSh0aGlzLmVkaXRpbmdWYWx1ZSkpO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmdNb2RhbCkge1xuICAgICAgdGhpcy5zZXR1cEl0ZW1zKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXR1cCgpIHtcbiAgICBzdXBlci5zZXR1cCgpO1xuICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbXNGcm9tVmFsdWUodmFsdWU6IGFueSA9IG51bGwpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9IHRoaXMuZWRpdGluZ1ZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5jcmVhdGVFZGl0b3JJdGVtKHZhbHVlW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgaW50ZXJuYWxJdGVtcyA9IHRoaXMua29JdGVtcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50ZXJuYWxJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh0aGlzLmNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShpbnRlcm5hbEl0ZW1zW2ldKSk7XG4gICAgfVxuICAgIHRoaXMuc2V0VmFsdWVDb3JlKGl0ZW1zKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkge1xuICAgIHRocm93IFwiT3ZlcnJpZGUgJ2NyZWF0ZU5ld0VkaXRvckl0ZW0nIG1ldGhvZFwiO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JJdGVtKGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVJdGVtRnJvbUVkaXRvckl0ZW0oZWRpdG9ySXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGVkaXRvckl0ZW07XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlJdGVtc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yIH0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSB9IGZyb20gXCIuLi9vYmplY3RQcm9wZXJ0eVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIHtcbiAga29FZGl0SXRlbTogYW55O1xuICBrb0lzTGlzdDogYW55O1xuICBvbkVkaXRJdGVtQ2xpY2s6IGFueTtcbiAgb25DYW5jZWxFZGl0SXRlbUNsaWNrOiBhbnk7XG4gIGtvRWRpdG9yTmFtZTogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb0VkaXRJdGVtID0ga28ub2JzZXJ2YWJsZShudWxsKTtcbiAgICB0aGlzLmtvSXNMaXN0ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB0aGlzLmtvRWRpdEl0ZW0uc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLmtvSXNMaXN0KHNlbGYua29FZGl0SXRlbSgpID09IG51bGwpO1xuICAgICAgc2VsZi5vbkxpc3REZXRhaWxWaWV3Q2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIHRoaXMub25FZGl0SXRlbUNsaWNrID0gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgc2VsZi5rb0VkaXRJdGVtKGl0ZW0pO1xuICAgIH07XG4gICAgdGhpcy5vbkNhbmNlbEVkaXRJdGVtQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlZGl0SXRlbSA9IHNlbGYua29FZGl0SXRlbSgpO1xuICAgICAgaWYgKGVkaXRJdGVtLml0ZW1FZGl0b3IgJiYgZWRpdEl0ZW0uaXRlbUVkaXRvci5oYXNFcnJvcigpKSByZXR1cm47XG4gICAgICBzZWxmLmtvRWRpdEl0ZW0obnVsbCk7XG4gICAgfTtcbiAgICB0aGlzLmtvRWRpdG9yTmFtZSA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNlbGYuZ2V0RWRpdG9yTmFtZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVTaG93KCkge1xuICAgIHN1cGVyLmJlZm9yZVNob3coKTtcbiAgICB0aGlzLmtvRWRpdEl0ZW0obnVsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvbHVtbnMoKTogQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckNvbHVtbihwcm9wZXJ0aWVzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXMoKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvcGVydGllc0J5TmFtZXMoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgbmFtZXM6IEFycmF5PGFueT5cbiAgKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgbmFtZS5uYW1lID8gbmFtZS5uYW1lIDogbmFtZTtcbiAgICAgIHZhciBwcm9wID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KGNsYXNzTmFtZSwgbmFtZSk7XG4gICAgICBpZiAocHJvcCAmJiBwcm9wLnZpc2libGUpIHtcbiAgICAgICAgcmVzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RWRpdG9yTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBvbkxpc3REZXRhaWxWaWV3Q2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBjaGVja0ZvckVycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmtvSXRlbXMoKS5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMua29JdGVtcygpW2ldLmhhc0Vycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XG4gICAgdmFyIGludGVybmFsSXRlbXMgPSB0aGlzLmtvSXRlbXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGVybmFsSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGludGVybmFsSXRlbXNbaV0uYXBwbHkoKTtcbiAgICB9XG4gICAgc3VwZXIub25CZWZvcmVBcHBseSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckl0ZW0ge1xuICBwcml2YXRlIGNlbGxzVmFsdWU6IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yRWRpdG9yQ2VsbD4gPSBbXTtcbiAgcHJpdmF0ZSBpdGVtRWRpdG9yVmFsdWU6IFN1cnZleVF1ZXN0aW9uRWRpdG9yO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBhbnksXG4gICAgcHVibGljIGNvbHVtbnM6IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPlxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2VsbHNWYWx1ZS5wdXNoKFxuICAgICAgICBuZXcgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JFZGl0b3JDZWxsKG9iaiwgY29sdW1uc1tpXS5wcm9wZXJ0eSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXRlbUVkaXRvcigpOiBTdXJ2ZXlRdWVzdGlvbkVkaXRvciB7XG4gICAgaWYgKCF0aGlzLml0ZW1FZGl0b3JWYWx1ZSlcbiAgICAgIHRoaXMuaXRlbUVkaXRvclZhbHVlID0gdGhpcy5jcmVhdGVTdXJ2ZXlRdWVzdGlvbkVkaXRvcigpO1xuICAgIHJldHVybiB0aGlzLml0ZW1FZGl0b3JWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNlbGxzKCk6IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yRWRpdG9yQ2VsbD4ge1xuICAgIHJldHVybiB0aGlzLmNlbGxzVmFsdWU7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLml0ZW1FZGl0b3JWYWx1ZSAmJiB0aGlzLml0ZW1FZGl0b3JWYWx1ZS5oYXNFcnJvcigpKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPSB0aGlzLmNlbGxzW2ldLmhhc0Vycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVzZXRTdXJ2ZXlRdWVzdGlvbkVkaXRvcigpIHtcbiAgICB0aGlzLml0ZW1FZGl0b3JWYWx1ZSA9IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleVF1ZXN0aW9uRWRpdG9yKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBhcHBseSgpIHtcbiAgICBpZiAodGhpcy5pdGVtRWRpdG9yVmFsdWUpIHRoaXMuaXRlbUVkaXRvclZhbHVlLmFwcGx5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7fVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgdGV4dCA9IGVkaXRvckxvY2FsaXphdGlvbi5oYXNTdHJpbmcoXCJwZWwuXCIgKyB0aGlzLnByb3BlcnR5Lm5hbWUpXG4gICAgICA/IHRoaXMuZ2V0TG9jVGV4dChcInBlbC5cIilcbiAgICAgIDogdGhpcy5nZXRMb2NUZXh0KFwicGUuXCIpO1xuICAgIHJldHVybiB0ZXh0ID8gdGV4dCA6IHRoaXMucHJvcGVydHkubmFtZTtcbiAgfVxuICBwcml2YXRlIGdldExvY1RleHQocHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhwcmVmaXggKyB0aGlzLnByb3BlcnR5Lm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckVkaXRvckNlbGwge1xuICBwcml2YXRlIG9iamVjdFByb3BlcnR5VmFsdWU6IFN1cnZleU9iamVjdFByb3BlcnR5O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb2JqOiBhbnksIHB1YmxpYyBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvcEV2ZW50ID0gKHByb3BlcnR5OiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSkgPT4ge1xuICAgICAgc2VsZi52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH07XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlID0gbmV3IFN1cnZleU9iamVjdFByb3BlcnR5KFxuICAgICAgdGhpcy5wcm9wZXJ0eSxcbiAgICAgIHByb3BFdmVudFxuICAgICk7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlLmVkaXRvci5pc0lucGxhY2VQcm9wZXJ0eSA9IHRydWU7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eS5vYmplY3QgPSBvYmo7XG4gIH1cbiAgcHVibGljIGdldCBvYmplY3RQcm9wZXJ0eSgpOiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0UHJvcGVydHlWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLm9iamVjdFByb3BlcnR5LmVkaXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGtvVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3RQcm9wZXJ0eS5lZGl0b3Iua29WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmdldFZhbHVlKHRoaXMub2JqKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0eS5zZXRWYWx1ZSh0aGlzLm9iaiwgdmFsLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5oYXNFcnJvcigpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TmVzdGVkUHJvcGVydHlFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24ge1xuICB0aXRsZT86IHN0cmluZztcbiAgcHJvcGVydGllcz86IEFycmF5PFxuICAgIHN0cmluZyB8IHsgbmFtZTogc3RyaW5nOyBjYXRlZ29yeT86IHN0cmluZzsgdGFiPzogc3RyaW5nIH1cbiAgPjtcbiAgdGFicz86IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5kZXg/OiBudW1iZXI7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgdmlzaWJsZT86IGJvb2xlYW47XG4gIH0+O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBkZWZpbml0aW9uOiB7XG4gICAgW2tleTogc3RyaW5nXTogSVN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbjtcbiAgfSA9IHtcbiAgICBxdWVzdGlvbmJhc2U6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidGl0bGVcIixcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVcIiwgY2F0ZWdvcnk6IFwiY2hlY2tzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImlzUmVxdWlyZWRcIiwgY2F0ZWdvcnk6IFwiY2hlY2tzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInN0YXJ0V2l0aE5ld0xpbmVcIiwgY2F0ZWdvcnk6IFwiY2hlY2tzXCIgfVxuICAgICAgXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTAwIH0sXG4gICAgICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCBpbmRleDogMTEwIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIGNvbW1lbnQ6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcInJvd3NcIiwgXCJwbGFjZUhvbGRlclwiXVxuICAgIH0sXG4gICAgZmlsZToge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICB7IG5hbWU6IFwic2hvd1ByZXZpZXdcIiwgY2F0ZWdvcnk6IFwiaW1hZ2VDaGVja3NcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic3RvcmVEYXRhQXNUZXh0XCIsIGNhdGVnb3J5OiBcImltYWdlQ2hlY2tzXCIgfSxcbiAgICAgICAgXCJtYXhTaXplXCIsXG4gICAgICAgIFwiaW1hZ2VIZWlnaHRcIixcbiAgICAgICAgXCJpbWFnZVdpZHRoXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIGh0bWw6IHtcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwiaHRtbFwiLCBpbmRleDogMTAgfV1cbiAgICB9LFxuICAgIG1hdHJpeGRyb3Bkb3duYmFzZToge1xuICAgICAgcHJvcGVydGllczogW1wiY2VsbFR5cGVcIiwgXCJjb2x1bW5zTG9jYXRpb25cIl0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJjb2x1bW5zXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwicm93c1wiLCBpbmRleDogMTEgfSxcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNcIiwgaW5kZXg6IDEyIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIG1hdHJpeGR5bmFtaWM6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcInJvd0NvdW50XCIsIFwiYWRkUm93TG9jYXRpb25cIiwgXCJhZGRSb3dUZXh0XCIsIFwicmVtb3ZlUm93VGV4dFwiXVxuICAgIH0sXG4gICAgbWF0cml4OiB7XG4gICAgICB0YWJzOiBbeyBuYW1lOiBcImNvbHVtbnNcIiwgaW5kZXg6IDEwIH0sIHsgbmFtZTogXCJyb3dzXCIsIGluZGV4OiAxMSB9XVxuICAgIH0sXG4gICAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJjb2xDb3VudFwiXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwiaXRlbXNcIiwgaW5kZXg6IDEwIH1dXG4gICAgfSxcbiAgICByYXRpbmc6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcIm1pblJhdGVEZXNjcmlwdGlvblwiLCBcIm1heFJhdGVEZXNjcmlwdGlvblwiXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwicmF0ZVZhbHVlc1wiLCBpbmRleDogMTAgfV1cbiAgICB9LFxuICAgIHNlbGVjdGJhc2U6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHRhYjogXCJjaG9pY2VzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB0YWI6IFwiY2hvaWNlc1wiIH0sXG4gICAgICAgIFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICAgIFwiY29sQ291bnRcIlxuICAgICAgXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNcIiwgaW5kZXg6IDEwIH0sXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmxcIiwgaW5kZXg6IDExIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiaXRlbXZhbHVlc0BjaG9pY2VzXCI6IHtcbiAgICAgIHRpdGxlOiBcIlJ1bGVzXCIsXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJnZW5lcmFsXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlSWZcIiwgdmlzaWJsZTogdHJ1ZSB9XG4gICAgICBdXG4gICAgfSxcbiAgICBkcm9wZG93bjoge1xuICAgICAgcHJvcGVydGllczogW1wib3B0aW9uc0NhcHRpb25cIl1cbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcImlucHV0VHlwZVwiLCBcInBsYWNlSG9sZGVyXCJdXG4gICAgfSxcbiAgICBib29sZWFuOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJsYWJlbFwiXVxuICAgIH0sXG4gICAgZXhwcmVzc2lvbjoge1xuICAgICAgdGFiczogW3sgbmFtZTogXCJleHByZXNzaW9uXCIsIGluZGV4OiAxMCB9XVxuICAgIH0sXG4gICAgbWF0cml4ZHJvcGRvd25jb2x1bW46IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcImlzUmVxdWlyZWRcIiwgXCJjZWxsVHlwZVwiLCBcIm5hbWVcIiwgXCJ0aXRsZVwiXVxuICAgIH0sXG4gICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBkZWZhdWx0XCI6IHtcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcImdlbmVyYWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTIgfSxcbiAgICAgICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIGluZGV4OiAyMCB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQGNoZWNrYm94XCI6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcImhhc090aGVyXCIsIFwib3RoZXJUZXh0XCIsIFwiY2hvaWNlc09yZGVyXCIsIFwiY29sQ291bnRcIl0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc0J5VXJsXCIsIGluZGV4OiAxMSB9LFxuICAgICAgICB7IG5hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMiB9LFxuICAgICAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgaW5kZXg6IDIwIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AcmFkaW9ncm91cFwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJoYXNPdGhlclwiLCBcIm90aGVyVGV4dFwiLCBcImNob2ljZXNPcmRlclwiLCBcImNvbENvdW50XCJdLFxuICAgICAgdGFiczogW1xuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc1wiLCBpbmRleDogMTAgfSxcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNCeVVybFwiLCBpbmRleDogMTEgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTIgfSxcbiAgICAgICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIGluZGV4OiAyMCB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQGRyb3Bkb3duXCI6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcImhhc090aGVyXCIsIFwib3RoZXJUZXh0XCIsIFwiY2hvaWNlc09yZGVyXCIsIFwib3B0aW9uc0NhcHRpb25cIl0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc0J5VXJsXCIsIGluZGV4OiAxMSB9LFxuICAgICAgICB7IG5hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMiB9LFxuICAgICAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgaW5kZXg6IDIwIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AdGV4dFwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJpbnB1dFR5cGVcIiwgXCJwbGFjZUhvbGRlclwiXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcInZhbGlkYXRvcnNcIiwgaW5kZXg6IDEwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlSWZcIiwgaW5kZXg6IDEyIH0sXG4gICAgICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCBpbmRleDogMjAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBjb21tZW50XCI6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcInBsYWNlSG9sZGVyXCJdLFxuICAgICAgdGFiczogW1xuICAgICAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCBpbmRleDogMTAgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTIgfSxcbiAgICAgICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIGluZGV4OiAyMCB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQGJvb2xlYW5cIjoge1xuICAgICAgcHJvcGVydGllczogW1wiZGVmYXVsdFZhbHVlXCJdLFxuICAgICAgdGFiczogW3sgbmFtZTogXCJ2aXNpYmxlSWZcIiwgaW5kZXg6IDEyIH0sIHsgbmFtZTogXCJlbmFibGVJZlwiLCBpbmRleDogMjAgfV1cbiAgICB9LFxuICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AZXhwcmVzc2lvblwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJuYW1lXCJdLFxuICAgICAgdGFiczogW3sgbmFtZTogXCJleHByZXNzaW9uXCIsIGluZGV4OiAxMCB9XVxuICAgIH0sXG4gICAgbXVsdGlwbGV0ZXh0aXRlbToge1xuICAgICAgcHJvcGVydGllczogW1wiaW5wdXRUeXBlXCIsIFwibWF4TGVuZ3RoXCIsIFwicGxhY2VIb2xkZXJcIl0sXG4gICAgICB0YWJzOiBbeyBuYW1lOiBcInZhbGlkYXRvcnNcIiwgaW5kZXg6IDEwIH1dXG4gICAgfSxcbiAgICBwYW5lbGR5bmFtaWM6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcInJlbmRlck1vZGVcIiwgY2F0ZWdvcnk6IFwicmVuZGVyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImFsbG93QWRkUGFuZWxcIiwgY2F0ZWdvcnk6IFwicmVuZGVyXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImFsbG93UmVtb3ZlUGFuZWxcIiwgY2F0ZWdvcnk6IFwicmVuZGVyXCIgfSxcbiAgICAgICAgXCJwYW5lbEFkZFRleHRcIixcbiAgICAgICAgXCJwYW5lbFJlbW92ZVRleHRcIlxuICAgICAgXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwidGVtcGxhdGVUaXRsZVwiLCBpbmRleDogMTAgfV1cbiAgICB9LFxuICAgIHBhbmVsOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJuYW1lXCIsIFwidGl0bGVcIiwgeyBuYW1lOiBcInZpc2libGVcIiwgY2F0ZWdvcnk6IFwiY2hlY2tzXCIgfV0sXG4gICAgICB0YWJzOiBbeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTAwIH1dXG4gICAgfSxcbiAgICBwYWdlOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlXCIsIGNhdGVnb3J5OiBcImNoZWNrc1wiIH0sXG4gICAgICAgIFwicXVlc3Rpb25zT3JkZXJcIlxuICAgICAgXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMDAgfV1cbiAgICB9LFxuICAgIHN1cnZleToge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICBcInRpdGxlXCIsXG4gICAgICAgIFwic2hvd1RpdGxlXCIsXG4gICAgICAgIFwibG9jYWxlXCIsXG4gICAgICAgIFwibW9kZVwiLFxuICAgICAgICBcImNsZWFySW52aXNpYmxlVmFsdWVzXCIsXG4gICAgICAgIFwiY29va2llTmFtZVwiLFxuICAgICAgICB7IG5hbWU6IFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwgY2F0ZWdvcnk6IFwiZGF0YVwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCBjYXRlZ29yeTogXCJkYXRhXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInNob3dQYWdlVGl0bGVzXCIsIGNhdGVnb3J5OiBcInBhZ2VcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1BhZ2VOdW1iZXJzXCIsIGNhdGVnb3J5OiBcInBhZ2VcIiB9LFxuXG4gICAgICAgIHsgbmFtZTogXCJwYWdlUHJldlRleHRcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiB9LFxuICAgICAgICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHRhYjogXCJuYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImNvbXBsZXRlVGV4dFwiLCB0YWI6IFwibmF2aWdhdGlvblwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzdGFydFN1cnZleVRleHRcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIixcbiAgICAgICAgICB0YWI6IFwibmF2aWdhdGlvblwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcIm5hdmJ1dHRvbnNcIlxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1ByZXZCdXR0b25cIiwgdGFiOiBcIm5hdmlnYXRpb25cIiwgY2F0ZWdvcnk6IFwibmF2YnV0dG9uc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWRcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiwgY2F0ZWdvcnk6IFwibmF2cGFnZXNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd0NvbXBsZXRlZFBhZ2VcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiwgY2F0ZWdvcnk6IFwibmF2cGFnZXNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLCB0YWI6IFwibmF2aWdhdGlvblwiLCBjYXRlZ29yeTogXCJuYXZvcHRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1Byb2dyZXNzQmFyXCIsIHRhYjogXCJuYXZpZ2F0aW9uXCIsIGNhdGVnb3J5OiBcIm5hdm9wdFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJpc1NpbmdsZVBhZ2VcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiB9LFxuXG4gICAgICAgIHsgbmFtZTogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIiwgdGFiOiBcInF1ZXN0aW9uXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInJlcXVpcmVkVGV4dFwiLCB0YWI6IFwicXVlc3Rpb25cIiB9LFxuICAgICAgICB7IG5hbWU6IFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHRhYjogXCJxdWVzdGlvblwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHRhYjogXCJxdWVzdGlvblwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIiwgdGFiOiBcInF1ZXN0aW9uXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCB0YWI6IFwicXVlc3Rpb25cIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIixcbiAgICAgICAgICB0YWI6IFwicXVlc3Rpb25cIlxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIiwgdGFiOiBcInF1ZXN0aW9uXCIgfSxcblxuICAgICAgICB7IG5hbWU6IFwibWF4VGltZVRvRmluaXNoXCIsIHRhYjogXCJ0aW1lclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIHRhYjogXCJ0aW1lclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzaG93VGltZXJQYW5lbFwiLCB0YWI6IFwidGltZXJcIiwgY2F0ZWdvcnk6IFwiY2hlY2tcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1RpbWVyUGFuZWxNb2RlXCIsIHRhYjogXCJ0aW1lclwiLCBjYXRlZ29yeTogXCJjaGVja1wiIH1cbiAgICAgIF0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJuYXZpZ2F0aW9uXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwicXVlc3Rpb25cIiwgaW5kZXg6IDIwIH0sXG4gICAgICAgIHsgbmFtZTogXCJjb21wbGV0ZWRIdG1sXCIsIGluZGV4OiA3MCB9LFxuICAgICAgICB7IG5hbWU6IFwibG9hZGluZ0h0bWxcIiwgaW5kZXg6IDgwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ0aW1lclwiLCBpbmRleDogOTAgfSxcbiAgICAgICAgeyBuYW1lOiBcInRyaWdnZXJzXCIsIGluZGV4OiAxMDAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcbiAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBbXTtcbiAgICB2YXIgYWxsRGVmaW5pdGlvbnMgPSBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZ2V0QWxsRGVmaW5pdGlvbnNCeUNsYXNzKFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgICBmb3IgKHZhciBpID0gYWxsRGVmaW5pdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBkZWYgPSBhbGxEZWZpbml0aW9uc1tpXTtcbiAgICAgIGlmIChkZWYucHJvcGVydGllcykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRlZi5wcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWRlZi5wcm9wZXJ0aWVzW2pdW1widGFiXCJdIHx8XG4gICAgICAgICAgICBkZWYucHJvcGVydGllc1tqXVtcInRhYlwiXSA9PT0gXCJnZW5lcmFsXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChkZWYucHJvcGVydGllc1tqXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNHZW5lcmFsVGFiVmlzaWJsZShjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBhbGxEZWZpbml0aW9ucyA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICAgIGZvciAodmFyIGkgPSBhbGxEZWZpbml0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGRlZiA9IGFsbERlZmluaXRpb25zW2ldO1xuICAgICAgaWYgKGRlZi50YWJzKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGVmLnRhYnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgdGFiID0gZGVmLnRhYnNbal07XG4gICAgICAgICAgaWYgKHRhYi5uYW1lID09IFwiZ2VuZXJhbFwiKSByZXR1cm4gdGFiLnZpc2libGUgIT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGFicyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIHZhciB0YWJzID0gW107XG4gICAgdmFyIGFsbERlZmluaXRpb25zID0gU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldEFsbERlZmluaXRpb25zQnlDbGFzcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgdmFyIHRhYnNOYW1lc0hhc2ggPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbERlZmluaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVmID0gYWxsRGVmaW5pdGlvbnNbaV07XG4gICAgICBpZiAoZGVmLnRhYnMpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkZWYudGFicy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHZhciB0YWIgPSBkZWYudGFic1tqXTtcbiAgICAgICAgICBpZiAodGFic05hbWVzSGFzaFt0YWIubmFtZV0pIGNvbnRpbnVlO1xuICAgICAgICAgIHRhYnNOYW1lc0hhc2hbdGFiLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGFiLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0YWJzLnB1c2godGFiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGFicy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmluZGV4IDwgYi5pbmRleCA/IC0xIDogYS5pbmRleCA+IGIuaW5kZXggPyAxIDogMDtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFicztcbiAgfVxuICBzdGF0aWMgZ2V0QWxsRGVmaW5pdGlvbnNCeUNsYXNzKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nXG4gICk6IEFycmF5PElTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgaWYgKFxuICAgICAgY2xhc3NOYW1lLmluZGV4T2YoXCJAXCIpID4gLTEgJiZcbiAgICAgIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5kZWZpbml0aW9uW2NsYXNzTmFtZV1cbiAgICApIHtcbiAgICAgIHJlc3VsdC5wdXNoKFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5kZWZpbml0aW9uW2NsYXNzTmFtZV0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgd2hpbGUgKGNsYXNzTmFtZSkge1xuICAgICAgdmFyIG1ldGFDbGFzcyA9IDxTdXJ2ZXkuSnNvbk1ldGFkYXRhQ2xhc3M+U3VydmV5Lkpzb25PYmplY3QubWV0YURhdGFbXG4gICAgICAgIFwiZmluZENsYXNzXCJcbiAgICAgIF0oY2xhc3NOYW1lKTtcbiAgICAgIGlmICghbWV0YUNsYXNzKSBicmVhaztcbiAgICAgIGlmIChTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZGVmaW5pdGlvblttZXRhQ2xhc3MubmFtZV0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmRlZmluaXRpb25bbWV0YUNsYXNzLm5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGNsYXNzTmFtZSA9IG1ldGFDbGFzcy5wYXJlbnROYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBZG9ybmVyIH0gZnJvbSBcIi4uL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG5pbXBvcnQgXCIuL3RpdGxlLWVkaXRvci5zY3NzXCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xudmFyIHRlbXBsYXRlSHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vdGl0bGUtZWRpdG9yLmh0bWxcIik7XG5cbmZ1bmN0aW9uIHJlc2l6ZUlucHV0KHRhcmdldCkge1xuICB0YXJnZXQuc2l6ZSA9IHRhcmdldC52YWx1ZS5sZW5ndGggfHwgNTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpdGxlSW5wbGFjZUVkaXRvciB7XG4gIGVkaXRpbmdOYW1lID0ga28ub2JzZXJ2YWJsZTxzdHJpbmc+KCk7XG4gIHByZXZOYW1lID0ga28ub2JzZXJ2YWJsZTxzdHJpbmc+KCk7XG4gIGlzRWRpdGluZyA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByb3RlY3RlZCBmb3JOZWlib3VycyhmdW5jOiAoZWw6IEhUTUxFbGVtZW50KSA9PiB2b2lkKSB7XG4gICAgdmFyIGhvbGRlciA9IHRoaXMucm9vdEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9sZGVyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgdmFyIGVsZW1lbnQgPSBob2xkZXIuY2hpbGRyZW5baV07XG4gICAgICBmdW5jKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgcHJvdGVjdGVkIHJvb3RFbGVtZW50KSB7XG4gICAgdGhpcy5lZGl0aW5nTmFtZShuYW1lKTtcbiAgICB0aGlzLnByZXZOYW1lKG5hbWUpO1xuICAgIHRoaXMuZm9yTmVpYm91cnMoXG4gICAgICBlbGVtZW50ID0+XG4gICAgICAgIChlbGVtZW50Lm9uY2xpY2sgPSBlID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXJ0RWRpdCh0aGlzLCBlKTtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZDogKG5ld1ZhbDogYW55KSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBnZXRMb2NTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpO1xuICB9XG5cbiAgaGlkZUVkaXRvciA9ICgpID0+IHtcbiAgICB0aGlzLmlzRWRpdGluZyhmYWxzZSk7XG4gICAgdGhpcy5mb3JOZWlib3VycyhlbGVtZW50ID0+IHtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGVsZW1lbnQuc3R5bGVbXCJvbGREaXNwbGF5XCJdO1xuICAgIH0pO1xuICB9O1xuICBzdGFydEVkaXQgPSAobW9kZWwsIGV2ZW50KSA9PiB7XG4gICAgdGhpcy5lZGl0aW5nTmFtZSh0aGlzLnByZXZOYW1lKCkpO1xuICAgIHRoaXMuaXNFZGl0aW5nKHRydWUpO1xuICAgIHRoaXMuZm9yTmVpYm91cnMoZWxlbWVudCA9PiB7XG4gICAgICBlbGVtZW50LnN0eWxlW1wib2xkRGlzcGxheVwiXSA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH0pO1xuICAgIHZhciBpbnB1dEVsZW0gPSB0aGlzLnJvb3RFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgaW5wdXRFbGVtLmZvY3VzKCk7XG4gICAgcmVzaXplSW5wdXQoaW5wdXRFbGVtKTtcbiAgfTtcbiAgcG9zdEVkaXQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJldk5hbWUoKSAhPT0gdGhpcy5lZGl0aW5nTmFtZSgpKSB7XG4gICAgICB0aGlzLnByZXZOYW1lKHRoaXMuZWRpdGluZ05hbWUoKSk7XG4gICAgICAhIXRoaXMudmFsdWVDaGFuZ2VkICYmIHRoaXMudmFsdWVDaGFuZ2VkKHRoaXMuZWRpdGluZ05hbWUoKSk7XG4gICAgfVxuICAgIHRoaXMuaGlkZUVkaXRvcigpO1xuICB9O1xuICBjYW5jZWxFZGl0ID0gKCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZ05hbWUodGhpcy5wcmV2TmFtZSgpKTtcbiAgICB0aGlzLmhpZGVFZGl0b3IoKTtcbiAgfTtcbiAgbmFtZUVkaXRvcktleXByZXNzID0gKG1vZGVsLCBldmVudCkgPT4ge1xuICAgIHJlc2l6ZUlucHV0KGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICB0aGlzLnBvc3RFZGl0KCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgfVxuICB9O1xufVxuXG5rby5jb21wb25lbnRzLnJlZ2lzdGVyKFwidGl0bGUtZWRpdG9yXCIsIHtcbiAgdmlld01vZGVsOiB7XG4gICAgY3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG4gICAgICB2YXIgbW9kZWwgPSBuZXcgVGl0bGVJbnBsYWNlRWRpdG9yKFxuICAgICAgICBwYXJhbXMubW9kZWxbcGFyYW1zLm5hbWVdLFxuICAgICAgICBjb21wb25lbnRJbmZvLmVsZW1lbnRcbiAgICAgICk7XG4gICAgICB2YXIgcHJvcGVydHkgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5maW5kUHJvcGVydHkoXG4gICAgICAgIHBhcmFtcy5tb2RlbC5nZXRUeXBlKCksXG4gICAgICAgIHBhcmFtcy5uYW1lXG4gICAgICApO1xuICAgICAgbW9kZWwudmFsdWVDaGFuZ2VkID0gbmV3VmFsdWUgPT4ge1xuICAgICAgICBwYXJhbXMubW9kZWxbcGFyYW1zLm5hbWVdID0gbmV3VmFsdWU7XG4gICAgICAgIHBhcmFtcy5lZGl0b3Iub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChwcm9wZXJ0eSwgcGFyYW1zLm1vZGVsLCBuZXdWYWx1ZSk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlSHRtbFxufSk7XG5cbmV4cG9ydCB2YXIgdGl0bGVBZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiBcInRpdGxlX2VkaXRhYmxlXCI7XG4gIH0sXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsLCBlZGl0b3IpID0+IHtcbiAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGRlY29yYXRpb24uaW5uZXJIVE1MID1cbiAgICAgIFwiPHRpdGxlLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJ0aXRsZVxcXCIsIG1vZGVsOiBtb2RlbCwgZWRpdG9yOiBlZGl0b3InPjwvdGl0bGUtZWRpdG9yPlwiO1xuICAgIGVsZW1lbnRzWzBdLmFwcGVuZENoaWxkKGRlY29yYXRpb24pO1xuICAgIGtvLmFwcGx5QmluZGluZ3MoeyBtb2RlbDogbW9kZWwsIGVkaXRvcjogZWRpdG9yIH0sIGRlY29yYXRpb24pO1xuICB9XG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJ0aXRsZVwiLCB0aXRsZUFkb3JuZXIpO1xuXG5leHBvcnQgdmFyIGl0ZW1UaXRsZUFkb3JuZXIgPSB7XG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwuaXRlbXMgPyBcIml0ZW1fdGl0bGVfZWRpdGFibGUgdGl0bGVfZWRpdGFibGVcIiA6IFwiXCI7XG4gIH0sXG4gIGFmdGVyUmVuZGVyOiAoXG4gICAgZWxlbWVudHM6IEhUTUxFbGVtZW50W10sXG4gICAgbW9kZWw6IFN1cnZleS5RdWVzdGlvbk11bHRpcGxlVGV4dCxcbiAgICBlZGl0b3JcbiAgKSA9PiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlY29yYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIGRlY29yYXRpb24uaW5uZXJIVE1MID1cbiAgICAgICAgXCI8dGl0bGUtZWRpdG9yIHBhcmFtcz0nbmFtZTogXFxcInRpdGxlXFxcIiwgbW9kZWw6IG1vZGVsLCBlZGl0b3I6IGVkaXRvcic+PC90aXRsZS1lZGl0b3I+XCI7XG4gICAgICBlbGVtZW50c1tpXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICAgIGtvLmFwcGx5QmluZGluZ3MoeyBtb2RlbDogbW9kZWwuaXRlbXNbaV0sIGVkaXRvcjogZWRpdG9yIH0sIGRlY29yYXRpb24pO1xuICAgIH1cbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwiaXRlbVRpdGxlXCIsIGl0ZW1UaXRsZUFkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL3RpdGxlLWVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcblxuaW1wb3J0IHsgU3VydmV5T2JqZWN0UHJvcGVydHkgfSBmcm9tIFwiLi9vYmplY3RQcm9wZXJ0eVwiO1xuaW1wb3J0IHsgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciB9IGZyb20gXCIuL3N1cnZleUhlbHBlclwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5T2JqZWN0RWRpdG9yIHtcbiAgcHJpdmF0ZSBzZWxlY3RlZE9iamVjdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgb2xkQWN0aXZlUHJvcGVydHk6IFN1cnZleU9iamVjdFByb3BlcnR5ID0gbnVsbDtcbiAga29BZnRlclJlbmRlcjogYW55O1xuICBwdWJsaWMga29Qcm9wZXJ0aWVzID0ga28ub2JzZXJ2YWJsZUFycmF5PFN1cnZleU9iamVjdFByb3BlcnR5PigpO1xuICBwdWJsaWMga29BY3RpdmVQcm9wZXJ0eSA9IGtvLm9ic2VydmFibGU8U3VydmV5T2JqZWN0UHJvcGVydHk+KCk7XG4gIHB1YmxpYyBrb0hhc09iamVjdCA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4oKTtcbiAgcHVibGljIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlPYmplY3RFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlPYmplY3RFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+KCk7XG4gIHB1YmxpYyBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrOiAoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKSA9PiBib29sZWFuO1xuICBwdWJsaWMgb25Tb3J0UHJvcGVydHlDYWxsYmFjazogKFxuICAgIG9iamVjdDogYW55LFxuICAgIHByb3BlcnR5MTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBwcm9wZXJ0eTI6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKSA9PiBudW1iZXI7XG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyQ2FsbGJhY2s6IChcbiAgICBvYmplY3Q6IGFueSxcbiAgICBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgcHJvcGVydHk6IFN1cnZleU9iamVjdFByb3BlcnR5XG4gICkgPT4gYW55O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eUVkaXRvck9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbCkge1xuICAgIHRoaXMua29BY3RpdmVQcm9wZXJ0eS5zdWJzY3JpYmUobmV3VmFsdWUgPT4ge1xuICAgICAgaWYgKHRoaXMub2xkQWN0aXZlUHJvcGVydHkgPT09IG5ld1ZhbHVlKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5vbGRBY3RpdmVQcm9wZXJ0eSkgdGhpcy5vbGRBY3RpdmVQcm9wZXJ0eS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5vbGRBY3RpdmVQcm9wZXJ0eSA9IG5ld1ZhbHVlO1xuICAgICAgaWYgKG5ld1ZhbHVlKSBuZXdWYWx1ZS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29BZnRlclJlbmRlciA9IGZ1bmN0aW9uKGVsLCBjb24pIHtcbiAgICAgIHNlbGYuYWZ0ZXJSZW5kZXIoZWwsIGNvbik7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRPYmplY3QoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9iamVjdFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRPYmplY3QodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0VmFsdWUgPT0gdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLmtvSGFzT2JqZWN0KHZhbHVlICE9IG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUHJvcGVydGllcygpO1xuICAgIHRoaXMudXBkYXRlUHJvcGVydGllc09iamVjdCgpO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0eUVkaXRvcihuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMua29Qcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydGllc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiBwcm9wZXJ0aWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgY2hhbmdlQWN0aXZlUHJvcGVydHkocHJvcGVydHk6IFN1cnZleU9iamVjdFByb3BlcnR5KSB7XG4gICAgdGhpcy5rb0FjdGl2ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgb2JqZWN0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVByb3BlcnRpZXNPYmplY3QoKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWZ0ZXJSZW5kZXIoZWxlbWVudHMsIHByb3ApIHtcbiAgICBpZiAoXG4gICAgICAhU3VydmV5LlN1cnZleUVsZW1lbnQgfHxcbiAgICAgICFTdXJ2ZXkuU3VydmV5RWxlbWVudC5HZXRGaXJzdE5vblRleHRFbGVtZW50IHx8XG4gICAgICAhdGhpcy5vbkFmdGVyUmVuZGVyQ2FsbGJhY2tcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIGVsID0gU3VydmV5LlN1cnZleUVsZW1lbnQuR2V0Rmlyc3ROb25UZXh0RWxlbWVudChlbGVtZW50cyk7XG4gICAgdmFyIHRFbCA9IGVsZW1lbnRzWzBdO1xuICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xuICAgIHRFbCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xuICAgIHRoaXMub25BZnRlclJlbmRlckNhbGxiYWNrKHRoaXMuc2VsZWN0ZWRPYmplY3QsIGVsLCBwcm9wKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlUHJvcGVydGllcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPYmplY3QgfHwgIXRoaXMuc2VsZWN0ZWRPYmplY3QuZ2V0VHlwZSkge1xuICAgICAgdGhpcy5rb1Byb3BlcnRpZXMoW10pO1xuICAgICAgdGhpcy5rb0FjdGl2ZVByb3BlcnR5KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcHJvcGVydGllcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhW1wiZ2V0UHJvcGVydGllc0J5T2JqXCJdXG4gICAgICA/IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhW1wiZ2V0UHJvcGVydGllc0J5T2JqXCJdKHRoaXMuc2VsZWN0ZWRPYmplY3QpXG4gICAgICA6IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmdldFByb3BlcnRpZXModGhpcy5zZWxlY3RlZE9iamVjdC5nZXRUeXBlKCkpO1xuICAgIHZhciBvYmplY3RQcm9wZXJ0aWVzID0gW107XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9wRXZlbnQgPSAocHJvcGVydHk6IFN1cnZleU9iamVjdFByb3BlcnR5LCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICBzZWxmLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eS5wcm9wZXJ0eSxcbiAgICAgICAgb2JqZWN0OiBwcm9wZXJ0eS5vYmplY3QsXG4gICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgdmlzaWJsZVByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jYW5TaG93UHJvcGVydHkocHJvcGVydGllc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgdmlzaWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgdmFyIHNvcnRFdmVudCA9IGZ1bmN0aW9uKFxuICAgICAgYTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICAgIGI6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgICApOiBudW1iZXIge1xuICAgICAgdmFyIHJlcyA9IDA7XG4gICAgICBpZiAoc2VsZi5vblNvcnRQcm9wZXJ0eUNhbGxiYWNrKSB7XG4gICAgICAgIHJlcyA9IHNlbGYub25Tb3J0UHJvcGVydHlDYWxsYmFjayhzZWxmLnNlbGVjdGVkT2JqZWN0LCBhLCBiKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICBpZiAoYS5uYW1lID09IGIubmFtZSkgcmV0dXJuIDA7XG4gICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSByZXR1cm4gMTtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICAgIHZpc2libGVQcm9wZXJ0aWVzID0gdmlzaWJsZVByb3BlcnRpZXMuc29ydChzb3J0RXZlbnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvYmplY3RQcm9wZXJ0eSA9IG5ldyBTdXJ2ZXlPYmplY3RQcm9wZXJ0eShcbiAgICAgICAgdmlzaWJsZVByb3BlcnRpZXNbaV0sXG4gICAgICAgIHByb3BFdmVudCxcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUVkaXRvck9wdGlvbnNcbiAgICAgICk7XG4gICAgICBvYmplY3RQcm9wZXJ0eS5lZGl0b3IuaXNJbnBsYWNlUHJvcGVydHkgPSB0cnVlO1xuICAgICAgb2JqZWN0UHJvcGVydGllcy5wdXNoKG9iamVjdFByb3BlcnR5KTtcbiAgICB9XG4gICAgdGhpcy5rb1Byb3BlcnRpZXMob2JqZWN0UHJvcGVydGllcyk7XG4gICAgdmFyIHByb3BFZGl0b3IgPSB0aGlzLmdldFByb3BlcnR5RWRpdG9yKFwibmFtZVwiKTtcbiAgICBpZiAoIXByb3BFZGl0b3IgJiYgb2JqZWN0UHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wRWRpdG9yID0gdGhpcy5nZXRQcm9wZXJ0eUVkaXRvcihvYmplY3RQcm9wZXJ0aWVzWzBdLm5hbWUpO1xuICAgIH1cbiAgICBpZiAocHJvcEVkaXRvcikge1xuICAgICAgdGhpcy5rb0FjdGl2ZVByb3BlcnR5KHByb3BFZGl0b3IpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuU2hvd1Byb3BlcnR5KHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5pc1Byb3BlcnR5VmlzaWJsZShcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHRoaXMub25DYW5TaG93UHJvcGVydHlDYWxsYmFja1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVByb3BlcnRpZXNPYmplY3QoKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmtvUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcHJvcGVydGllc1tpXS5vYmplY3QgPSB0aGlzLnNlbGVjdGVkT2JqZWN0O1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL29iamVjdEVkaXRvci50cyIsImltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcblxuZXhwb3J0IGNsYXNzIFN0eWxlc01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBTdXJ2ZXlKU1N0eWxlc1NoZWV0SWQgPSBcInN1cnZleWpzXCI7XG5cbiAgcHVibGljIHN0YXRpYyBTdHlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICBwdWJsaWMgc3RhdGljIFRoZW1lQ29sb3JzOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBcIiRwcmltYXJ5LWNvbG9yXCI6IFwiIzFhYjM5NFwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWNvbG9yXCI6IFwiIzFhYjM5NFwiLFxuICAgICAgXCIkcHJpbWFyeS10ZXh0LWNvbG9yXCI6IFwiIzY3NmE2Y1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LXRleHQtY29sb3JcIjogXCIjYTdhN2E3XCIsXG4gICAgICBcIiRpbnZlcnRlZC10ZXh0LWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkcHJpbWFyeS1ob3Zlci1jb2xvclwiOiBcIiMxOGE2ODlcIixcbiAgICAgIFwiJHNlbGVjdGlvbi1ib3JkZXItY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgICBcIiRwcmltYXJ5LWljb24tY29sb3JcIjogXCIjM2Q0ZDVkXCIsXG4gICAgICBcIiRwcmltYXJ5LWJnLWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJnLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgICAgXCIkcHJpbWFyeS1ib3JkZXItY29sb3JcIjogXCIjZTdlYWVjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYm9yZGVyLWNvbG9yXCI6IFwiI2RkZFwiXG4gICAgfSxcbiAgICBvcmFuZ2U6IHtcbiAgICAgIFwiJHByaW1hcnktY29sb3JcIjogXCIjZjc4MTE5XCIsXG4gICAgICBcIiRzZWNvbmRhcnktY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRwcmltYXJ5LXRleHQtY29sb3JcIjogXCIjNjc2YTZjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktdGV4dC1jb2xvclwiOiBcIiNhN2E3YTdcIixcbiAgICAgIFwiJGludmVydGVkLXRleHQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRwcmltYXJ5LWhvdmVyLWNvbG9yXCI6IFwiI2U3NzEwOVwiLFxuICAgICAgXCIkc2VsZWN0aW9uLWJvcmRlci1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHByaW1hcnktaWNvbi1jb2xvclwiOiBcIiMzZDRkNWRcIixcbiAgICAgIFwiJHByaW1hcnktYmctY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYmctY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiRwcmltYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNlN2VhZWNcIixcbiAgICAgIFwiJHNlY29uZGFyeS1ib3JkZXItY29sb3JcIjogXCIjZGRkXCJcbiAgICB9LFxuICAgIGRhcmtibHVlOiB7XG4gICAgICBcIiRwcmltYXJ5LWNvbG9yXCI6IFwiIzNjNGY2ZFwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWNvbG9yXCI6IFwiIzNjNGY2ZFwiLFxuICAgICAgXCIkcHJpbWFyeS10ZXh0LWNvbG9yXCI6IFwiIzY3NmE2Y1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LXRleHQtY29sb3JcIjogXCIjYTdhN2E3XCIsXG4gICAgICBcIiRpbnZlcnRlZC10ZXh0LWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkcHJpbWFyeS1ob3Zlci1jb2xvclwiOiBcIiMyYzNmNWRcIixcbiAgICAgIFwiJHNlbGVjdGlvbi1ib3JkZXItY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRwcmltYXJ5LWljb24tY29sb3JcIjogXCIjM2Q0ZDVkXCIsXG4gICAgICBcIiRwcmltYXJ5LWJnLWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJnLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgICAgXCIkcHJpbWFyeS1ib3JkZXItY29sb3JcIjogXCIjZTdlYWVjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYm9yZGVyLWNvbG9yXCI6IFwiI2RkZFwiXG4gICAgfSxcbiAgICBkYXJrcm9zZToge1xuICAgICAgXCIkcHJpbWFyeS1jb2xvclwiOiBcIiM2ODY1NmVcIixcbiAgICAgIFwiJHNlY29uZGFyeS1jb2xvclwiOiBcIiM2ODY1NmVcIixcbiAgICAgIFwiJHByaW1hcnktdGV4dC1jb2xvclwiOiBcIiM2NzZhNmNcIixcbiAgICAgIFwiJHNlY29uZGFyeS10ZXh0LWNvbG9yXCI6IFwiI2E3YTdhN1wiLFxuICAgICAgXCIkaW52ZXJ0ZWQtdGV4dC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJHByaW1hcnktaG92ZXItY29sb3JcIjogXCIjNTc1NDVlXCIsXG4gICAgICBcIiRzZWxlY3Rpb24tYm9yZGVyLWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkcHJpbWFyeS1pY29uLWNvbG9yXCI6IFwiIzNkNGQ1ZFwiLFxuICAgICAgXCIkcHJpbWFyeS1iZy1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJHNlY29uZGFyeS1iZy1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHByaW1hcnktYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZWFlY1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNkZGRcIlxuICAgIH0sXG4gICAgc3RvbmU6IHtcbiAgICAgIFwiJHByaW1hcnktY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRzZWNvbmRhcnktY29sb3JcIjogXCIjMGYwZjMzXCIsXG4gICAgICBcIiRwcmltYXJ5LXRleHQtY29sb3JcIjogXCIjNjc2YTZjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktdGV4dC1jb2xvclwiOiBcIiNhN2E3YTdcIixcbiAgICAgIFwiJGludmVydGVkLXRleHQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRwcmltYXJ5LWhvdmVyLWNvbG9yXCI6IFwiIzAwMDAyM1wiLFxuICAgICAgXCIkc2VsZWN0aW9uLWJvcmRlci1jb2xvclwiOiBcIiNjZGNjZDJcIixcbiAgICAgIFwiJHByaW1hcnktaWNvbi1jb2xvclwiOiBcIiMzZDRkNWRcIixcbiAgICAgIFwiJHByaW1hcnktYmctY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYmctY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiRwcmltYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNlN2VhZWNcIixcbiAgICAgIFwiJHNlY29uZGFyeS1ib3JkZXItY29sb3JcIjogXCIjZGRkXCJcbiAgICB9LFxuICAgIHdpbnRlcjoge1xuICAgICAgXCIkcHJpbWFyeS1jb2xvclwiOiBcIiM1YWM4ZmFcIixcbiAgICAgIFwiJHNlY29uZGFyeS1jb2xvclwiOiBcIiM1YWM4ZmFcIixcbiAgICAgIFwiJHByaW1hcnktdGV4dC1jb2xvclwiOiBcIiM2NzZhNmNcIixcbiAgICAgIFwiJHNlY29uZGFyeS10ZXh0LWNvbG9yXCI6IFwiI2E3YTdhN1wiLFxuICAgICAgXCIkaW52ZXJ0ZWQtdGV4dC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJHByaW1hcnktaG92ZXItY29sb3JcIjogXCIjNGFkOGVhXCIsXG4gICAgICBcIiRzZWxlY3Rpb24tYm9yZGVyLWNvbG9yXCI6IFwiIzgyYjhkYVwiLFxuICAgICAgXCIkcHJpbWFyeS1pY29uLWNvbG9yXCI6IFwiIzNkNGQ1ZFwiLFxuICAgICAgXCIkcHJpbWFyeS1iZy1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJHNlY29uZGFyeS1iZy1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHByaW1hcnktYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZWFlY1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNkZGRcIlxuICAgIH0sXG4gICAgd2ludGVyc3RvbmU6IHtcbiAgICAgIFwiJHByaW1hcnktY29sb3JcIjogXCIjM2MzYjQwXCIsXG4gICAgICBcIiRzZWNvbmRhcnktY29sb3JcIjogXCIjM2MzYjQwXCIsXG4gICAgICBcIiRwcmltYXJ5LXRleHQtY29sb3JcIjogXCIjNjc2YTZjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktdGV4dC1jb2xvclwiOiBcIiNhN2E3YTdcIixcbiAgICAgIFwiJGludmVydGVkLXRleHQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRwcmltYXJ5LWhvdmVyLWNvbG9yXCI6IFwiIzFjMWIyMFwiLFxuICAgICAgXCIkc2VsZWN0aW9uLWJvcmRlci1jb2xvclwiOiBcIiNiOGI4YjhcIixcbiAgICAgIFwiJHByaW1hcnktaWNvbi1jb2xvclwiOiBcIiMzZDRkNWRcIixcbiAgICAgIFwiJHByaW1hcnktYmctY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYmctY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiRwcmltYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNlN2VhZWNcIixcbiAgICAgIFwiJHNlY29uZGFyeS1ib3JkZXItY29sb3JcIjogXCIjZGRkXCJcbiAgICB9XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZkX2NvbnRhaW5lclwiOiBcImNvbG9yOiAkcHJpbWFyeS10ZXh0LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lciBhXCI6IFwiY29sb3I6ICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgYTpob3ZlclwiOiBcImNvbG9yOiAkcHJpbWFyeS1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtbWFpbi1jb2xvclwiOiBcImNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtbWFpbi1ib3JkZXItY29sb3JcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkc2VsZWN0aW9uLWJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtbWFpbi1iYWNrZ3JvdW5kLWNvbG9yXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJvcmRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLmJ0bi1wcmltYXJ5XCI6XG4gICAgICBcImNvbG9yOiAkaW52ZXJ0ZWQtdGV4dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLmJ0bi1saW5rXCI6XG4gICAgICBcImNvbG9yOiAkcHJpbWFyeS10ZXh0LWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yOyBib3JkZXItY29sb3I6ICRzZWNvbmRhcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtc3ZnLWljb25cIjogXCJmaWxsOiAkcHJpbWFyeS1pY29uLWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1wcmltYXJ5LWljb24gLnN2ZC1zdmctaWNvblwiOiBcImZpbGw6ICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1zZWNvbmRhcnktaWNvbiAuc3ZkLXN2Zy1pY29uXCI6XG4gICAgICBcImZpbGw6ICRzZWNvbmRhcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuaWNvbi1nZWFyYWN0aXZlIC5zdmQtc3ZnLWljb25cIjogXCJmaWxsOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5uYXYtdGFicyBhXCI6IFwiY29sb3I6ICRwcmltYXJ5LXRleHQtY29sb3JcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGFcIjogXCJjb2xvcjogJHByaW1hcnktY29sb3JcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5uYXYtaXRlbS5hY3RpdmUgLm5hdi1saW5rXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zanMtY2ItY29udGFpbmVyOmhvdmVyIGlucHV0IH4gLmNoZWNrbWFya1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGQtbWVudS1ib3JkZXJcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zanMtY2ItY29udGFpbmVyOmhvdmVyIGlucHV0OmNoZWNrZWQgfiAuY2hlY2ttYXJrXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWhvdmVyLWNvbG9yXCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmRfY3VzdG9tX3NlbGVjdDpiZWZvcmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuZm9ybS1jb250cm9sOmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1saWdodC10ZXh0LWNvbG9yXCI6IFwiY29sb3I6ICRzZWNvbmRhcnktdGV4dC1jb2xvcjtcIixcblxuICAgIFwiLnN2ZC1saWdodC1iZy1jb2xvclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJnLWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1saWdodC1iZy1jb2xvclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZF90b29sYmFyIGxpLmFjdGl2ZSBhXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yOyBjb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmRfc2VsZWN0ZWRfcGFnZVwiOlxuICAgICAgXCJib3JkZXItYm90dG9tOiAxcHggc29saWQgJHByaW1hcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5lZGl0b3ItdGFicyA+IGxpID4gYTpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlY29uZGFyeS1iZy1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5lZGl0b3ItdGFicyA+IGxpID4gYTpmb2N1c1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlY29uZGFyeS1iZy1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5lZGl0b3ItdGFicyA+IGxpLmFjdGl2ZSA+IGFcIjpcbiAgICAgIFwiY29sb3I6ICRwcmltYXJ5LWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yOyBib3JkZXI6IDFweCBzb2xpZCAkcHJpbWFyeS1ib3JkZXItY29sb3I7IGJvcmRlci1ib3R0b20tY29sb3I6ICRzZWNvbmRhcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtbGlnaHQtYm9yZGVyLWNvbG9yXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJHByaW1hcnktYm9yZGVyLWNvbG9yXCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtZGFyay1ib3JkZXItY29sb3JcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQuc2VsZWN0Mi1jb250YWluZXItLW9wZW4gLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiAgJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiAgJHByaW1hcnktY29sb3I7XCJcbiAgfTtcbiAgcHJpdmF0ZSBzaGVldDogQ1NTU3R5bGVTaGVldCA9IG51bGw7XG5cbiAgc3RhdGljIGZpbmRTaGVldChzdHlsZVNoZWV0SWQ6IHN0cmluZykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGVbXCJpZFwiXSA9PT0gc3R5bGVTaGVldElkKSB7XG4gICAgICAgIHJldHVybiA8Q1NTU3R5bGVTaGVldD5kb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlU2hlZXQoc3R5bGVTaGVldElkOiBzdHJpbmcpIHtcbiAgICBsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGUuaWQgPSBzdHlsZVNoZWV0SWQ7XG4gICAgLy8gQWRkIGEgbWVkaWEgKGFuZC9vciBtZWRpYSBxdWVyeSkgaGVyZSBpZiB5b3UnZCBsaWtlIVxuICAgIC8vIHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIFwic2NyZWVuXCIpXG4gICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aCA6IDEwMjRweClcIilcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgcmV0dXJuIDxDU1NTdHlsZVNoZWV0PnN0eWxlLnNoZWV0O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjdXJyZW50VGhlbWUgPSBrby5vYnNlcnZhYmxlKFwiYm9vdHN0cmFwXCIpO1xuXG4gIHB1YmxpYyBzdGF0aWMgYXBwbHlUaGVtZShcbiAgICB0aGVtZU5hbWU6IHN0cmluZyA9IFwiZGVmYXVsdFwiLFxuICAgIHRoZW1lU2VsZWN0b3I6IHN0cmluZyA9IFwiLnN2ZF9jb250YWluZXJcIlxuICApIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmN1cnJlbnRUaGVtZSh0aGVtZU5hbWUpO1xuICAgIFN1cnZleS5TdXJ2ZXkuY3NzVHlwZSA9XG4gICAgICB0aGlzLmN1cnJlbnRUaGVtZSgpID09PSBcImJvb3RzdHJhcFwiID8gXCJib290c3RyYXBcIiA6IFwiZGVmYXVsdFwiO1xuICAgIFN1cnZleS5TdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUodGhlbWVOYW1lKTtcblxuICAgIGxldCBzaGVldCA9IFN0eWxlc01hbmFnZXIuZmluZFNoZWV0KHRoZW1lTmFtZSArIHRoZW1lU2VsZWN0b3IpO1xuICAgIGlmICghc2hlZXQpIHtcbiAgICAgIHNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgIGxldCB0aGVtZSA9XG4gICAgICAgIFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbdGhlbWVOYW1lXSB8fFxuICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW1wiZGVmYXVsdFwiXTtcbiAgICAgIE9iamVjdC5rZXlzKFN0eWxlc01hbmFnZXIuVGhlbWVDc3MpLmZvckVhY2goc2VsZWN0b3IgPT4ge1xuICAgICAgICBsZXQgY3NzUnVsZVRleHQgPSBTdHlsZXNNYW5hZ2VyLlRoZW1lQ3NzW3NlbGVjdG9yXTtcbiAgICAgICAgT2JqZWN0LmtleXModGhlbWUpLmZvckVhY2goXG4gICAgICAgICAgY29sb3JWYXJpYWJsZU5hbWUgPT5cbiAgICAgICAgICAgIChjc3NSdWxlVGV4dCA9IGNzc1J1bGVUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgIG5ldyBSZWdFeHAoXCJcXFxcXCIgKyBjb2xvclZhcmlhYmxlTmFtZSwgXCJnXCIpLFxuICAgICAgICAgICAgICB0aGVtZVtjb2xvclZhcmlhYmxlTmFtZV1cbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUoXG4gICAgICAgICAgdGhlbWVTZWxlY3RvciArIHNlbGVjdG9yICsgXCIgeyBcIiArIGNzc1J1bGVUZXh0ICsgXCIgfVwiLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmZpbmRTaGVldChTdHlsZXNNYW5hZ2VyLlN1cnZleUpTU3R5bGVzU2hlZXRJZCk7XG4gICAgaWYgKCF0aGlzLnNoZWV0KSB7XG4gICAgICB0aGlzLnNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldChcbiAgICAgICAgU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWRcbiAgICAgICk7XG4gICAgICB0aGlzLmluaXRpYWxpemVTdHlsZXModGhpcy5zaGVldCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVTdHlsZXMoc2hlZXQ6IENTU1N0eWxlU2hlZXQpIHtcbiAgICBPYmplY3Qua2V5cyhTdHlsZXNNYW5hZ2VyLlN0eWxlcykuZm9yRWFjaChzZWxlY3RvciA9PlxuICAgICAgc2hlZXQuaW5zZXJ0UnVsZShcbiAgICAgICAgc2VsZWN0b3IgKyBcIiB7IFwiICsgU3R5bGVzTWFuYWdlci5TdHlsZXNbc2VsZWN0b3JdICsgXCIgfVwiLFxuICAgICAgICAwXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N0eWxlc21hbmFnZXIudHMiLCJpbXBvcnQgeyBTdXJ2ZXlKU09ONSB9IGZyb20gXCIuL2pzb241XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5jbGFzcyBUZXh0UGFyc2VyUHJvcGVyeSB7XG4gIGlzRm91bmQ6IGJvb2xlYW47XG4gIHByb3BlcnRpZXNDb3VudDogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgdmFsdWVTdGFydDogbnVtYmVyO1xuICB2YWx1ZUVuZDogbnVtYmVyO1xufVxuXG5jbGFzcyBTdXJ2ZXlGb3JUZXh0V29ya2VyIGV4dGVuZHMgU3VydmV5LlN1cnZleSB7XG4gIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSkge1xuICAgIHN1cGVyKGpzb25PYmopO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUZXh0V29ya2VyIHtcbiAgcHVibGljIHN0YXRpYyBuZXdMaW5lQ2hhcjogc3RyaW5nO1xuICBwdWJsaWMgZXJyb3JzOiBBcnJheTxhbnk+O1xuICBwcml2YXRlIHN1cnZleVZhbHVlOiBTdXJ2ZXkuU3VydmV5O1xuICBwcml2YXRlIGpzb25WYWx1ZTogYW55O1xuICBwcml2YXRlIHN1cnZleU9iamVjdHM6IEFycmF5PGFueT47XG4gIHByaXZhdGUgaXNTdXJ2ZXlBc1BhZ2U6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZykge1xuICAgIGlmICghdGhpcy50ZXh0IHx8IHRoaXMudGV4dC50cmltKCkgPT0gXCJcIikge1xuICAgICAgdGhpcy50ZXh0ID0gXCJ7fVwiO1xuICAgIH1cbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIHRoaXMucHJvY2VzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleS5TdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNKc29uQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZSAhPSBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmpzb25WYWx1ZSA9IG5ldyBTdXJ2ZXlKU09ONSgxKS5wYXJzZSh0aGlzLnRleHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgcG9zOiB7IHN0YXJ0OiBlcnJvci5hdCwgZW5kOiAtMSB9LFxuICAgICAgICB0ZXh0OiBlcnJvci5tZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuanNvblZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlSnNvblBvc2l0aW9ucyh0aGlzLmpzb25WYWx1ZSk7XG4gICAgICB0aGlzLnN1cnZleVZhbHVlID0gbmV3IFN1cnZleUZvclRleHRXb3JrZXIodGhpcy5qc29uVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5VmFsdWUuanNvbkVycm9ycyAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXJ2ZXlWYWx1ZS5qc29uRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5zdXJ2ZXlWYWx1ZS5qc29uRXJyb3JzW2ldO1xuICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgcG9zOiB7IHN0YXJ0OiBlcnJvci5hdCwgZW5kOiAtMSB9LFxuICAgICAgICAgICAgdGV4dDogZXJyb3IuZ2V0RnVsbERlc2NyaXB0aW9uKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN1cnZleU9iamVjdHMgPSB0aGlzLmNyZWF0ZVN1cnZleU9iamVjdHMoKTtcbiAgICB0aGlzLnNldEVkaXRvclBvc2l0aW9uQnlDaGFydEF0KHRoaXMuc3VydmV5T2JqZWN0cyk7XG4gICAgdGhpcy5zZXRFZGl0b3JQb3NpdGlvbkJ5Q2hhcnRBdCh0aGlzLmVycm9ycyk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVKc29uUG9zaXRpb25zKGpzb25PYmo6IGFueSkge1xuICAgIGpzb25PYmpbXCJwb3NcIl1bXCJzZWxmXCJdID0ganNvbk9iajtcbiAgICBmb3IgKHZhciBrZXkgaW4ganNvbk9iaikge1xuICAgICAgdmFyIG9iaiA9IGpzb25PYmpba2V5XTtcbiAgICAgIGlmIChvYmogJiYgb2JqW1wicG9zXCJdKSB7XG4gICAgICAgIGpzb25PYmpbXCJwb3NcIl1ba2V5XSA9IG9ialtcInBvc1wiXTtcbiAgICAgICAgdGhpcy51cGRhdGVKc29uUG9zaXRpb25zKG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlU3VydmV5T2JqZWN0cygpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXMuc3VydmV5VmFsdWUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aGlzLmlzU3VydmV5QXNQYWdlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleVZhbHVlLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5VmFsdWUucGFnZXNbaV07XG4gICAgICBpZiAoaSA9PSAwICYmICFwYWdlW1wicG9zXCJdKSB7XG4gICAgICAgIHBhZ2VbXCJwb3NcIl0gPSB0aGlzLnN1cnZleVZhbHVlW1wicG9zXCJdO1xuICAgICAgICB0aGlzLmlzU3VydmV5QXNQYWdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHBhZ2UpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICByZXN1bHQucHVzaChwYWdlLnF1ZXN0aW9uc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBzZXRFZGl0b3JQb3NpdGlvbkJ5Q2hhcnRBdChvYmplY3RzOiBhbnlbXSkge1xuICAgIGlmIChvYmplY3RzID09IG51bGwgfHwgb2JqZWN0cy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgIHZhciBwb3NpdGlvbiA9IHsgcm93OiAwLCBjb2x1bW46IDAgfTtcbiAgICB2YXIgYXRPYmplY3RzQXJyYXkgPSB0aGlzLmdldEF0QXJyYXkob2JqZWN0cyk7XG4gICAgdmFyIHN0YXJ0QXQ6IG51bWJlciA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdE9iamVjdHNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGF0ID0gYXRPYmplY3RzQXJyYXlbaV0uYXQ7XG4gICAgICBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zdGlvbkJ5Q2hhcnRBdChwb3NpdGlvbiwgc3RhcnRBdCwgYXQpO1xuICAgICAgdmFyIG9iaiA9IGF0T2JqZWN0c0FycmF5W2ldLm9iajtcbiAgICAgIGlmICghb2JqLnBvc2l0aW9uKSBvYmoucG9zaXRpb24gPSB7fTtcbiAgICAgIGlmIChhdCA9PSBvYmoucG9zLnN0YXJ0KSB7XG4gICAgICAgIG9iai5wb3NpdGlvbi5zdGFydCA9IHBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGF0ID09IG9iai5wb3MuZW5kKSB7XG4gICAgICAgICAgb2JqLnBvc2l0aW9uLmVuZCA9IHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFydEF0ID0gYXQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UG9zdGlvbkJ5Q2hhcnRBdChcbiAgICBzdGFydFBvc2l0aW9uOiBhbnksXG4gICAgc3RhcnRBdDogbnVtYmVyLFxuICAgIGF0OiBudW1iZXJcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID0geyByb3c6IHN0YXJ0UG9zaXRpb24ucm93LCBjb2x1bW46IHN0YXJ0UG9zaXRpb24uY29sdW1uIH07XG4gICAgdmFyIGN1ckNoYXIgPSBzdGFydEF0O1xuICAgIHdoaWxlIChjdXJDaGFyIDwgYXQpIHtcbiAgICAgIGlmICh0aGlzLnRleHQuY2hhckF0KGN1ckNoYXIpID09IFN1cnZleVRleHRXb3JrZXIubmV3TGluZUNoYXIpIHtcbiAgICAgICAgcmVzdWx0LnJvdysrO1xuICAgICAgICByZXN1bHQuY29sdW1uID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5jb2x1bW4rKztcbiAgICAgIH1cbiAgICAgIGN1ckNoYXIrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldEF0QXJyYXkob2JqZWN0czogYW55W10pOiBhbnlbXSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9iaiA9IG9iamVjdHNbaV07XG4gICAgICB2YXIgcG9zID0gb2JqLnBvcztcbiAgICAgIGlmICghcG9zKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKHsgYXQ6IHBvcy5zdGFydCwgb2JqOiBvYmogfSk7XG4gICAgICBpZiAocG9zLmVuZCA+IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBhdDogcG9zLmVuZCwgb2JqOiBvYmogfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgoZWwxLCBlbDIpID0+IHtcbiAgICAgIGlmIChlbDEuYXQgPiBlbDIuYXQpIHJldHVybiAxO1xuICAgICAgaWYgKGVsMS5hdCA8IGVsMi5hdCkgcmV0dXJuIC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90ZXh0V29ya2VyLnRzIiwiLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIEpTT041LCBodHRwOi8vanNvbjUub3JnL1xuLy8gVGhlIG1vZGlmaWNhdGlvbiBmb3IgZ2V0dGluZyBvYmplY3QgYW5kIHByb3BlcnRpZXMgbG9jYXRpb24gJ2F0JyB3ZXJlIG1hZGVuLlxuXG5leHBvcnQgY2xhc3MgU3VydmV5SlNPTjUge1xuICBwdWJsaWMgc3RhdGljIHBvc2l0aW9uTmFtZSA9IFwicG9zXCI7XG4gIHByaXZhdGUgc3RhdGljIGVzY2FwZWUgPSB7XG4gICAgXCInXCI6IFwiJ1wiLFxuICAgICdcIic6ICdcIicsXG4gICAgXCJcXFxcXCI6IFwiXFxcXFwiLFxuICAgIFwiL1wiOiBcIi9cIixcbiAgICBcIlxcblwiOiBcIlwiLCAvLyBSZXBsYWNlIGVzY2FwZWQgbmV3bGluZXMgaW4gc3RyaW5ncyB3LyBlbXB0eSBzdHJpbmdcbiAgICBiOiBcIlxcYlwiLFxuICAgIGY6IFwiXFxmXCIsXG4gICAgbjogXCJcXG5cIixcbiAgICByOiBcIlxcclwiLFxuICAgIHQ6IFwiXFx0XCJcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgd3MgPSBbXCIgXCIsIFwiXFx0XCIsIFwiXFxyXCIsIFwiXFxuXCIsIFwiXFx2XCIsIFwiXFxmXCIsIFwiXFx4QTBcIiwgXCJcXHVGRUZGXCJdO1xuICBwcml2YXRlIGVuZEF0OiBudW1iZXI7XG4gIHByaXZhdGUgYXQ6IG51bWJlcjsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlclxuICBwcml2YXRlIGNoOiBhbnk7IC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICBwcml2YXRlIHRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSBwYXJzZVR5cGU6IG51bWJlcjsgLy8gMCAtIHN0YWRhcmQsIDEgLSBnZXQgaW5mb3JtYXRpb24gYWJvdXQgb2JqZWN0cywgMiAtIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgcHJvcGVydGllc1xuICBjb25zdHJ1Y3RvcihwYXJzZVR5cGU6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLnBhcnNlVHlwZSA9IHBhcnNlVHlwZTtcbiAgfVxuICBwdWJsaWMgcGFyc2UoXG4gICAgc291cmNlOiBhbnksXG4gICAgcmV2aXZlcjogYW55ID0gbnVsbCxcbiAgICBzdGFydEZyb206IG51bWJlciA9IDAsXG4gICAgZW5kQXQ6IG51bWJlciA9IC0xXG4gICk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDtcblxuICAgIHRoaXMudGV4dCA9IFN0cmluZyhzb3VyY2UpO1xuICAgIHRoaXMuYXQgPSBzdGFydEZyb207XG4gICAgdGhpcy5lbmRBdCA9IGVuZEF0O1xuICAgIHRoaXMuY2ggPSBcIiBcIjtcbiAgICByZXN1bHQgPSB0aGlzLnZhbHVlKCk7XG4gICAgdGhpcy53aGl0ZSgpO1xuICAgIGlmICh0aGlzLmNoKSB7XG4gICAgICB0aGlzLmVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgXCJcIjogcmVzdWx0IH0sIFwiXCIpXG4gICAgICA6IHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGVycm9yKG06IHN0cmluZykge1xuICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG4gICAgdmFyIGVycm9yID0gbmV3IFN5bnRheEVycm9yKCk7XG4gICAgZXJyb3IubWVzc2FnZSA9IG07XG4gICAgZXJyb3JbXCJhdFwiXSA9IHRoaXMuYXQ7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgcHJpdmF0ZSBuZXh0KGM6IGFueSA9IG51bGwpIHtcbiAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICBpZiAoYyAmJiBjICE9PSB0aGlzLmNoKSB7XG4gICAgICB0aGlzLmVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIHRoaXMuY2ggKyBcIidcIik7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgdGhpcy5uZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxuICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIHRoaXMuY2ggPSB0aGlzLmNoYXJ0QXQoKTtcbiAgICB0aGlzLmF0ICs9IDE7XG4gICAgcmV0dXJuIHRoaXMuY2g7XG4gIH1cbiAgcHJpdmF0ZSBwZWVrKCkge1xuICAgIC8vIEdldCB0aGUgdGhpcy5uZXh0IGNoYXJhY3RlciB3aXRob3V0IGNvbnN1bWluZyBpdCBvclxuICAgIC8vIGFzc2lnbmluZyBpdCB0byB0aGUgdGhpcy5jaCB2YXJhaWJsZS5cbiAgICByZXR1cm4gdGhpcy5jaGFydEF0KCk7XG4gIH1cbiAgcHJpdmF0ZSBjaGFydEF0KCkge1xuICAgIGlmICh0aGlzLmVuZEF0ID4gLTEgJiYgdGhpcy5hdCA+PSB0aGlzLmVuZEF0KSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdGhpcy50ZXh0LmNoYXJBdCh0aGlzLmF0KTtcbiAgfVxuICBwcml2YXRlIGlkZW50aWZpZXIoKSB7XG4gICAgLy8gUGFyc2UgYW4gaWRlbnRpZmllci4gTm9ybWFsbHksIHJlc2VydmVkIHdvcmRzIGFyZSBkaXNhbGxvd2VkIGhlcmUsIGJ1dCB3ZVxuICAgIC8vIG9ubHkgdXNlIHRoaXMgZm9yIHVucXVvdGVkIG9iamVjdCBrZXlzLCB3aGVyZSByZXNlcnZlZCB3b3JkcyBhcmUgYWxsb3dlZCxcbiAgICAvLyBzbyB3ZSBkb24ndCBjaGVjayBmb3IgdGhvc2UgaGVyZS4gUmVmZXJlbmNlczpcbiAgICAvLyAtIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDcuNlxuICAgIC8vIC0gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9HdWlkZS9Db3JlX0xhbmd1YWdlX0ZlYXR1cmVzI1ZhcmlhYmxlc1xuICAgIC8vIC0gaHR0cDovL2RvY3N0b3JlLm1pay51YS9vcmVsbHkvd2VicHJvZy9qc2NyaXB0L2NoMDJfMDcuaHRtXG4gICAgLy8gVE9ETyBJZGVudGlmaWVycyBjYW4gaGF2ZSBVbmljb2RlIFwibGV0dGVyc1wiIGluIHRoZW07IGFkZCBzdXBwb3J0IGZvciB0aG9zZS5cbiAgICB2YXIga2V5ID0gdGhpcy5jaDtcblxuICAgIC8vIElkZW50aWZpZXJzIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgXyBvciAkLlxuICAgIGlmIChcbiAgICAgIHRoaXMuY2ggIT09IFwiX1wiICYmXG4gICAgICB0aGlzLmNoICE9PSBcIiRcIiAmJlxuICAgICAgKHRoaXMuY2ggPCBcImFcIiB8fCB0aGlzLmNoID4gXCJ6XCIpICYmXG4gICAgICAodGhpcy5jaCA8IFwiQVwiIHx8IHRoaXMuY2ggPiBcIlpcIilcbiAgICApIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJCYWQgaWRlbnRpZmllclwiKTtcbiAgICB9XG5cbiAgICAvLyBTdWJzZXF1ZW50IGNoYXJhY3RlcnMgY2FuIGNvbnRhaW4gZGlnaXRzLlxuICAgIHdoaWxlIChcbiAgICAgIHRoaXMubmV4dCgpICYmXG4gICAgICAodGhpcy5jaCA9PT0gXCJfXCIgfHxcbiAgICAgICAgdGhpcy5jaCA9PT0gXCIkXCIgfHxcbiAgICAgICAgKHRoaXMuY2ggPj0gXCJhXCIgJiYgdGhpcy5jaCA8PSBcInpcIikgfHxcbiAgICAgICAgKHRoaXMuY2ggPj0gXCJBXCIgJiYgdGhpcy5jaCA8PSBcIlpcIikgfHxcbiAgICAgICAgKHRoaXMuY2ggPj0gXCIwXCIgJiYgdGhpcy5jaCA8PSBcIjlcIikpXG4gICAgKSB7XG4gICAgICBrZXkgKz0gdGhpcy5jaDtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIHByaXZhdGUgbnVtYmVyKCkge1xuICAgIC8vIFBhcnNlIGEgbnVtYmVyIHZhbHVlLlxuXG4gICAgdmFyIG51bWJlcixcbiAgICAgIHNpZ24gPSBcIlwiLFxuICAgICAgc3RyaW5nID0gXCJcIixcbiAgICAgIGJhc2UgPSAxMDtcblxuICAgIGlmICh0aGlzLmNoID09PSBcIi1cIiB8fCB0aGlzLmNoID09PSBcIitcIikge1xuICAgICAgc2lnbiA9IHRoaXMuY2g7XG4gICAgICB0aGlzLm5leHQodGhpcy5jaCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBmb3IgSW5maW5pdHkgKGNvdWxkIHR3ZWFrIHRvIGFsbG93IG90aGVyIHdvcmRzKTpcbiAgICBpZiAodGhpcy5jaCA9PT0gXCJJXCIpIHtcbiAgICAgIG51bWJlciA9IHRoaXMud29yZCgpO1xuICAgICAgaWYgKHR5cGVvZiBudW1iZXIgIT09IFwibnVtYmVyXCIgfHwgaXNOYU4obnVtYmVyKSkge1xuICAgICAgICB0aGlzLmVycm9yKFwiVW5leHBlY3RlZCB3b3JkIGZvciBudW1iZXJcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2lnbiA9PT0gXCItXCIgPyAtbnVtYmVyIDogbnVtYmVyO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgZm9yIE5hTlxuICAgIGlmICh0aGlzLmNoID09PSBcIk5cIikge1xuICAgICAgbnVtYmVyID0gdGhpcy53b3JkKCk7XG4gICAgICBpZiAoIWlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgdGhpcy5lcnJvcihcImV4cGVjdGVkIHdvcmQgdG8gYmUgTmFOXCIpO1xuICAgICAgfVxuICAgICAgLy8gaWdub3JlIHNpZ24gYXMgLU5hTiBhbHNvIGlzIE5hTlxuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaCA9PT0gXCIwXCIpIHtcbiAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBpZiAodGhpcy5jaCA9PT0gXCJ4XCIgfHwgdGhpcy5jaCA9PT0gXCJYXCIpIHtcbiAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICBiYXNlID0gMTY7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPj0gXCIwXCIgJiYgdGhpcy5jaCA8PSBcIjlcIikge1xuICAgICAgICB0aGlzLmVycm9yKFwiT2N0YWwgbGl0ZXJhbFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGJhc2UpIHtcbiAgICAgIGNhc2UgMTA6XG4gICAgICAgIHdoaWxlICh0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gdGhpcy5jaDtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaCA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gXCIuXCI7XG4gICAgICAgICAgd2hpbGUgKHRoaXMubmV4dCgpICYmIHRoaXMuY2ggPj0gXCIwXCIgJiYgdGhpcy5jaCA8PSBcIjlcIikge1xuICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoID09PSBcImVcIiB8fCB0aGlzLmNoID09PSBcIkVcIikge1xuICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIGlmICh0aGlzLmNoID09PSBcIi1cIiB8fCB0aGlzLmNoID09PSBcIitcIikge1xuICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHRoaXMuY2ggPj0gXCIwXCIgJiYgdGhpcy5jaCA8PSBcIjlcIikge1xuICAgICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE2OlxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgKHRoaXMuY2ggPj0gXCIwXCIgJiYgdGhpcy5jaCA8PSBcIjlcIikgfHxcbiAgICAgICAgICAodGhpcy5jaCA+PSBcIkFcIiAmJiB0aGlzLmNoIDw9IFwiRlwiKSB8fFxuICAgICAgICAgICh0aGlzLmNoID49IFwiYVwiICYmIHRoaXMuY2ggPD0gXCJmXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzaWduID09PSBcIi1cIikge1xuICAgICAgbnVtYmVyID0gLXN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICB9XG5cbiAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJCYWQgbnVtYmVyXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHN0cmluZygpIHtcbiAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cblxuICAgIHZhciBoZXgsXG4gICAgICBpLFxuICAgICAgc3RyaW5nID0gXCJcIixcbiAgICAgIGRlbGltLCAvLyBkb3VibGUgcXVvdGUgb3Igc2luZ2xlIHF1b3RlXG4gICAgICB1ZmZmZjtcblxuICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciAnIG9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgaWYgKHRoaXMuY2ggPT09ICdcIicgfHwgdGhpcy5jaCA9PT0gXCInXCIpIHtcbiAgICAgIGRlbGltID0gdGhpcy5jaDtcbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKSkge1xuICAgICAgICBpZiAodGhpcy5jaCA9PT0gZGVsaW0pIHtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgaWYgKHRoaXMuY2ggPT09IFwidVwiKSB7XG4gICAgICAgICAgICB1ZmZmZiA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KHRoaXMubmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09IFwiXFxyXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlZWsoKSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBTdXJ2ZXlKU09ONS5lc2NhcGVlW3RoaXMuY2hdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gU3VydmV5SlNPTjUuZXNjYXBlZVt0aGlzLmNoXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAvLyB1bmVzY2FwZWQgbmV3bGluZXMgYXJlIGludmFsaWQ7IHNlZTpcbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXNlZW1rL2pzb241L2lzc3Vlcy8yNFxuICAgICAgICAgIC8vIFRPRE8gdGhpcyBmZWVscyBzcGVjaWFsLWNhc2VkOyBhcmUgdGhlcmUgb3RoZXJcbiAgICAgICAgICAvLyBpbnZhbGlkIHVuZXNjYXBlZCBjaGFycz9cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpbmcgKz0gdGhpcy5jaDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVycm9yKFwiQmFkIHN0cmluZ1wiKTtcbiAgfVxuICBwcml2YXRlIGlubGluZUNvbW1lbnQoKSB7XG4gICAgLy8gU2tpcCBhbiBpbmxpbmUgY29tbWVudCwgYXNzdW1pbmcgdGhpcyBpcyBvbmUuIFRoZSBjdXJyZW50IGNoYXJhY3RlciBzaG91bGRcbiAgICAvLyBiZSB0aGUgc2Vjb25kIC8gY2hhcmFjdGVyIGluIHRoZSAvLyBwYWlyIHRoYXQgYmVnaW5zIHRoaXMgaW5saW5lIGNvbW1lbnQuXG4gICAgLy8gVG8gZmluaXNoIHRoZSBpbmxpbmUgY29tbWVudCwgd2UgbG9vayBmb3IgYSBuZXdsaW5lIG9yIHRoZSBlbmQgb2YgdGhlIHRleHQuXG5cbiAgICBpZiAodGhpcy5jaCAhPT0gXCIvXCIpIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJOb3QgYW4gaW5saW5lIGNvbW1lbnRcIik7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBpZiAodGhpcy5jaCA9PT0gXCJcXG5cIiB8fCB0aGlzLmNoID09PSBcIlxcclwiKSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSB3aGlsZSAodGhpcy5jaCk7XG4gIH1cbiAgcHJpdmF0ZSBibG9ja0NvbW1lbnQoKSB7XG4gICAgLy8gU2tpcCBhIGJsb2NrIGNvbW1lbnQsIGFzc3VtaW5nIHRoaXMgaXMgb25lLiBUaGUgY3VycmVudCBjaGFyYWN0ZXIgc2hvdWxkIGJlXG4gICAgLy8gdGhlICogY2hhcmFjdGVyIGluIHRoZSAvKiBwYWlyIHRoYXQgYmVnaW5zIHRoaXMgYmxvY2sgY29tbWVudC5cbiAgICAvLyBUbyBmaW5pc2ggdGhlIGJsb2NrIGNvbW1lbnQsIHdlIGxvb2sgZm9yIGFuIGVuZGluZyAqLyBwYWlyIG9mIGNoYXJhY3RlcnMsXG4gICAgLy8gYnV0IHdlIGFsc28gd2F0Y2ggZm9yIHRoZSBlbmQgb2YgdGV4dCBiZWZvcmUgdGhlIGNvbW1lbnQgaXMgdGVybWluYXRlZC5cblxuICAgIGlmICh0aGlzLmNoICE9PSBcIipcIikge1xuICAgICAgdGhpcy5lcnJvcihcIk5vdCBhIGJsb2NrIGNvbW1lbnRcIik7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB3aGlsZSAodGhpcy5jaCA9PT0gXCIqXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0KFwiKlwiKTtcbiAgICAgICAgaWYgKHRoaXMuY2ggPT09IFwiL1wiKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KFwiL1wiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICh0aGlzLmNoKTtcblxuICAgIHRoaXMuZXJyb3IoXCJVbnRlcm1pbmF0ZWQgYmxvY2sgY29tbWVudFwiKTtcbiAgfVxuICBwcml2YXRlIGNvbW1lbnQoKSB7XG4gICAgLy8gU2tpcCBhIGNvbW1lbnQsIHdoZXRoZXIgaW5saW5lIG9yIGJsb2NrLWxldmVsLCBhc3N1bWluZyB0aGlzIGlzIG9uZS5cbiAgICAvLyBDb21tZW50cyBhbHdheXMgYmVnaW4gd2l0aCBhIC8gY2hhcmFjdGVyLlxuXG4gICAgaWYgKHRoaXMuY2ggIT09IFwiL1wiKSB7XG4gICAgICB0aGlzLmVycm9yKFwiTm90IGEgY29tbWVudFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm5leHQoXCIvXCIpO1xuXG4gICAgaWYgKHRoaXMuY2ggPT09IFwiL1wiKSB7XG4gICAgICB0aGlzLmlubGluZUNvbW1lbnQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2ggPT09IFwiKlwiKSB7XG4gICAgICB0aGlzLmJsb2NrQ29tbWVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yKFwiVW5yZWNvZ25pemVkIGNvbW1lbnRcIik7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgd2hpdGUoKSB7XG4gICAgLy8gU2tpcCB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cy5cbiAgICAvLyBOb3RlIHRoYXQgd2UncmUgZGV0ZWN0aW5nIGNvbW1lbnRzIGJ5IG9ubHkgYSBzaW5nbGUgLyBjaGFyYWN0ZXIuXG4gICAgLy8gVGhpcyB3b3JrcyBzaW5jZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBub3QgdmFsaWQgSlNPTig1KSwgYnV0IHRoaXMgd2lsbFxuICAgIC8vIGJyZWFrIGlmIHRoZXJlIGFyZSBvdGhlciB2YWxpZCB2YWx1ZXMgdGhhdCBiZWdpbiB3aXRoIGEgLyBjaGFyYWN0ZXIhXG5cbiAgICB3aGlsZSAodGhpcy5jaCkge1xuICAgICAgaWYgKHRoaXMuY2ggPT09IFwiL1wiKSB7XG4gICAgICAgIHRoaXMuY29tbWVudCgpO1xuICAgICAgfSBlbHNlIGlmIChTdXJ2ZXlKU09ONS53cy5pbmRleE9mKHRoaXMuY2gpID49IDApIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgd29yZCgpOiBhbnkge1xuICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgc3dpdGNoICh0aGlzLmNoKSB7XG4gICAgICBjYXNlIFwidFwiOlxuICAgICAgICB0aGlzLm5leHQoXCJ0XCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJyXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJ1XCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJlXCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgIHRoaXMubmV4dChcImZcIik7XG4gICAgICAgIHRoaXMubmV4dChcImFcIik7XG4gICAgICAgIHRoaXMubmV4dChcImxcIik7XG4gICAgICAgIHRoaXMubmV4dChcInNcIik7XG4gICAgICAgIHRoaXMubmV4dChcImVcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgXCJuXCI6XG4gICAgICAgIHRoaXMubmV4dChcIm5cIik7XG4gICAgICAgIHRoaXMubmV4dChcInVcIik7XG4gICAgICAgIHRoaXMubmV4dChcImxcIik7XG4gICAgICAgIHRoaXMubmV4dChcImxcIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgdGhpcy5uZXh0KFwiSVwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiblwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiZlwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiaVwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiblwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiaVwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwidFwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwieVwiKTtcbiAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgICAgY2FzZSBcIk5cIjpcbiAgICAgICAgdGhpcy5uZXh0KFwiTlwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiYVwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiTlwiKTtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgdGhpcy5lcnJvcihcIlVuZXhwZWN0ZWQgJ1wiICsgdGhpcy5jaCArIFwiJ1wiKTtcbiAgfVxuICBwcml2YXRlIGFycmF5KCkge1xuICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgdmFyIGFycmF5ID0gW107XG5cbiAgICBpZiAodGhpcy5jaCA9PT0gXCJbXCIpIHtcbiAgICAgIHRoaXMubmV4dChcIltcIik7XG4gICAgICB0aGlzLndoaXRlKCk7XG4gICAgICB3aGlsZSAodGhpcy5jaCkge1xuICAgICAgICBpZiAodGhpcy5jaCA9PT0gXCJdXCIpIHtcbiAgICAgICAgICB0aGlzLm5leHQoXCJdXCIpO1xuICAgICAgICAgIHJldHVybiBhcnJheTsgLy8gUG90ZW50aWFsbHkgZW1wdHkgYXJyYXlcbiAgICAgICAgfVxuICAgICAgICAvLyBFUzUgYWxsb3dzIG9taXR0aW5nIGVsZW1lbnRzIGluIGFycmF5cywgZS5nLiBbLF0gYW5kXG4gICAgICAgIC8vIFssbnVsbF0uIFdlIGRvbid0IGFsbG93IHRoaXMgaW4gSlNPTjUuXG4gICAgICAgIGlmICh0aGlzLmNoID09PSBcIixcIikge1xuICAgICAgICAgIHRoaXMuZXJyb3IoXCJNaXNzaW5nIGFycmF5IGVsZW1lbnRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh0aGlzLnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2hpdGUoKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBjb21tYSBhZnRlciB0aGlzIHZhbHVlLCB0aGlzIG5lZWRzIHRvXG4gICAgICAgIC8vIGJlIHRoZSBlbmQgb2YgdGhlIGFycmF5LlxuICAgICAgICBpZiAodGhpcy5jaCAhPT0gXCIsXCIpIHtcbiAgICAgICAgICB0aGlzLm5leHQoXCJdXCIpO1xuICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5leHQoXCIsXCIpO1xuICAgICAgICB0aGlzLndoaXRlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXJyb3IoXCJCYWQgYXJyYXlcIik7XG4gIH1cbiAgcHJpdmF0ZSBvYmplY3QoKSB7XG4gICAgLy8gUGFyc2UgYW4gb2JqZWN0IHZhbHVlLlxuXG4gICAgdmFyIGtleSxcbiAgICAgIHN0YXJ0LFxuICAgICAgaXNGaXJzdFByb3BlcnR5ID0gdHJ1ZSxcbiAgICAgIG9iamVjdCA9IHt9O1xuICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDApIHtcbiAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdID0geyBzdGFydDogdGhpcy5hdCAtIDEgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2ggPT09IFwie1wiKSB7XG4gICAgICB0aGlzLm5leHQoXCJ7XCIpO1xuICAgICAgdGhpcy53aGl0ZSgpO1xuICAgICAgc3RhcnQgPSB0aGlzLmF0IC0gMTtcbiAgICAgIHdoaWxlICh0aGlzLmNoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoID09PSBcIn1cIikge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDApIHtcbiAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdLmVuZCA9IHN0YXJ0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5leHQoXCJ9XCIpO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7IC8vIFBvdGVudGlhbGx5IGVtcHR5IG9iamVjdFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2V5cyBjYW4gYmUgdW5xdW90ZWQuIElmIHRoZXkgYXJlLCB0aGV5IG5lZWQgdG8gYmVcbiAgICAgICAgLy8gdmFsaWQgSlMgaWRlbnRpZmllcnMuXG4gICAgICAgIGlmICh0aGlzLmNoID09PSAnXCInIHx8IHRoaXMuY2ggPT09IFwiJ1wiKSB7XG4gICAgICAgICAga2V5ID0gdGhpcy5zdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSB0aGlzLmlkZW50aWZpZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2hpdGUoKTtcbiAgICAgICAgaWYgKHRoaXMucGFyc2VUeXBlID4gMSkge1xuICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0gPSB7XG4gICAgICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgICAgICB2YWx1ZVN0YXJ0OiB0aGlzLmF0XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5leHQoXCI6XCIpO1xuICAgICAgICBvYmplY3Rba2V5XSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMucGFyc2VUeXBlID4gMSkge1xuICAgICAgICAgIHN0YXJ0ID0gdGhpcy5hdCAtIDE7XG4gICAgICAgICAgb2JqZWN0W1N1cnZleUpTT041LnBvc2l0aW9uTmFtZV1ba2V5XS52YWx1ZUVuZCA9IHN0YXJ0O1xuICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0uZW5kID0gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aGl0ZSgpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGNvbW1hIGFmdGVyIHRoaXMgcGFpciwgdGhpcyBuZWVkcyB0byBiZVxuICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBvYmplY3QuXG4gICAgICAgIGlmICh0aGlzLmNoICE9PSBcIixcIikge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDEpIHtcbiAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0udmFsdWVFbmQtLTtcbiAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0uZW5kLS07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDApIHtcbiAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdLmVuZCA9IHRoaXMuYXQgLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5leHQoXCJ9XCIpO1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyc2VUeXBlID4gMSkge1xuICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0udmFsdWVFbmQtLTtcbiAgICAgICAgICBpZiAoIWlzRmlyc3RQcm9wZXJ0eSkge1xuICAgICAgICAgICAgb2JqZWN0W1N1cnZleUpTT041LnBvc2l0aW9uTmFtZV1ba2V5XS5lbmQtLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0KFwiLFwiKTtcbiAgICAgICAgdGhpcy53aGl0ZSgpO1xuICAgICAgICBpc0ZpcnN0UHJvcGVydHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lcnJvcihcIkJhZCBvYmplY3RcIik7XG4gIH1cbiAgcHJpdmF0ZSB2YWx1ZSgpOiBhbnkge1xuICAgIC8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuICAgIC8vIG9yIGEgd29yZC5cblxuICAgIHRoaXMud2hpdGUoKTtcbiAgICBzd2l0Y2ggKHRoaXMuY2gpIHtcbiAgICAgIGNhc2UgXCJ7XCI6XG4gICAgICAgIHJldHVybiB0aGlzLm9iamVjdCgpO1xuICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXkoKTtcbiAgICAgIGNhc2UgJ1wiJzpcbiAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZygpO1xuICAgICAgY2FzZSBcIi1cIjpcbiAgICAgIGNhc2UgXCIrXCI6XG4gICAgICBjYXNlIFwiLlwiOlxuICAgICAgICByZXR1cm4gdGhpcy5udW1iZXIoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIgPyB0aGlzLm51bWJlcigpIDogdGhpcy53b3JkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlcjogYW55O1xuICBwcml2YXRlIGluZGVudFN0cjogc3RyaW5nO1xuICBwcml2YXRlIG9ialN0YWNrO1xuXG4gIHB1YmxpYyBzdHJpbmdpZnkob2JqOiBhbnksIHJlcGxhY2VyOiBhbnkgPSBudWxsLCBzcGFjZTogYW55ID0gbnVsbCkge1xuICAgIGlmIChcbiAgICAgIHJlcGxhY2VyICYmXG4gICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSBcImZ1bmN0aW9uXCIgJiYgIXRoaXMuaXNBcnJheShyZXBsYWNlcikpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXBsYWNlciBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXlcIik7XG4gICAgfVxuICAgIHRoaXMucmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICB0aGlzLmluZGVudFN0ciA9IHRoaXMuZ2V0SW5kZW50KHNwYWNlKTtcbiAgICB0aGlzLm9ialN0YWNrID0gW107XG4gICAgLy8gc3BlY2lhbCBjYXNlLi4ud2hlbiB1bmRlZmluZWQgaXMgdXNlZCBpbnNpZGUgb2ZcbiAgICAvLyBhIGNvbXBvdW5kIG9iamVjdC9hcnJheSwgcmV0dXJuIG51bGwuXG4gICAgLy8gYnV0IHdoZW4gdG9wLWxldmVsLCByZXR1cm4gdW5kZWZpbmVkXG4gICAgdmFyIHRvcExldmVsSG9sZGVyID0geyBcIlwiOiBvYmogfTtcbiAgICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlcGxhY2VkVmFsdWVPclVuZGVmaW5lZCh0b3BMZXZlbEhvbGRlciwgXCJcIiwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmludGVybmFsU3RyaW5naWZ5KHRvcExldmVsSG9sZGVyLCBcIlwiLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIGdldEluZGVudChzcGFjZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoc3BhY2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHNwYWNlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09IFwibnVtYmVyXCIgJiYgc3BhY2UgPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYWtlSW5kZW50KFwiIFwiLCBzcGFjZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVwbGFjZWRWYWx1ZU9yVW5kZWZpbmVkKFxuICAgIGhvbGRlcjogYW55LFxuICAgIGtleTogYW55LFxuICAgIGlzVG9wTGV2ZWw6IGJvb2xlYW5cbiAgKSB7XG4gICAgdmFyIHZhbHVlID0gaG9sZGVyW2tleV07XG5cbiAgICAvLyBSZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIGl0cyB0b0pTT04gdmFsdWUgZmlyc3QsIGlmIHBvc3NpYmxlXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRvSlNPTiAmJiB0eXBlb2YgdmFsdWUudG9KU09OID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHVzZXItc3VwcGxpZWQgcmVwbGFjZXIgaWYgYSBmdW5jdGlvbiwgY2FsbCBpdC4gSWYgaXQncyBhbiBhcnJheSwgY2hlY2sgb2JqZWN0cycgc3RyaW5nIGtleXMgZm9yXG4gICAgLy8gcHJlc2VuY2UgaW4gdGhlIGFycmF5IChyZW1vdmluZyB0aGUga2V5L3ZhbHVlIHBhaXIgZnJvbSB0aGUgcmVzdWx0aW5nIEpTT04gaWYgdGhlIGtleSBpcyBtaXNzaW5nKS5cbiAgICBpZiAodHlwZW9mIHRoaXMucmVwbGFjZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXBsYWNlcikge1xuICAgICAgaWYgKFxuICAgICAgICBpc1RvcExldmVsIHx8XG4gICAgICAgIHRoaXMuaXNBcnJheShob2xkZXIpIHx8XG4gICAgICAgIHRoaXMucmVwbGFjZXIuaW5kZXhPZihrZXkpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1dvcmRDaGFyKGNoYXI6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoY2hhciA+PSBcImFcIiAmJiBjaGFyIDw9IFwielwiKSB8fFxuICAgICAgKGNoYXIgPj0gXCJBXCIgJiYgY2hhciA8PSBcIlpcIikgfHxcbiAgICAgIChjaGFyID49IFwiMFwiICYmIGNoYXIgPD0gXCI5XCIpIHx8XG4gICAgICBjaGFyID09PSBcIl9cIiB8fFxuICAgICAgY2hhciA9PT0gXCIkXCJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1dvcmRTdGFydChjaGFyOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNoYXIgPj0gXCJhXCIgJiYgY2hhciA8PSBcInpcIikgfHxcbiAgICAgIChjaGFyID49IFwiQVwiICYmIGNoYXIgPD0gXCJaXCIpIHx8XG4gICAgICBjaGFyID09PSBcIl9cIiB8fFxuICAgICAgY2hhciA9PT0gXCIkXCJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1dvcmQoa2V5OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNXb3JkU3RhcnQoa2V5WzBdKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgaSA9IDEsXG4gICAgICBsZW5ndGggPSBrZXkubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuaXNXb3JkQ2hhcihrZXlbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gcG9seWZpbGxzXG4gIHByaXZhdGUgaXNBcnJheShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGF0ZShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG4gIH1cblxuICBwcml2YXRlIGlzTmFOKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgJiYgdmFsICE9PSB2YWw7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRm9yQ2lyY3VsYXIob2JqOiBhbnkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2JqU3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLm9ialN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgbWFrZUluZGVudChzdHI6IHN0cmluZywgbnVtOiBudW1iZXIsIG5vTmV3TGluZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICAvLyBpbmRlbnRhdGlvbiBubyBtb3JlIHRoYW4gMTAgY2hhcnNcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDEwKSB7XG4gICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gbm9OZXdMaW5lID8gXCJcIiA6IFwiXFxuXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgaW5kZW50ICs9IHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZW50O1xuICB9XG5cbiAgLy8gQ29waWVkIGZyb20gQ3Jva2ZvcmQncyBpbXBsZW1lbnRhdGlvbiBvZiBKU09OXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZG91Z2xhc2Nyb2NrZm9yZC9KU09OLWpzL2Jsb2IvZTM5ZGI0YjdlNjI0OWYwNGExOTVlN2RkMDg0MGU2MTBjYzllOTQxZS9qc29uMi5qcyNMMTk1XG4gIC8vIEJlZ2luXG4gIHByaXZhdGUgc3RhdGljIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2c7XG4gIHByaXZhdGUgc3RhdGljIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2c7XG4gIHByaXZhdGUgc3RhdGljIG1ldGEgPSB7XG4gICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICBcIlxcYlwiOiBcIlxcXFxiXCIsXG4gICAgXCJcXHRcIjogXCJcXFxcdFwiLFxuICAgIFwiXFxuXCI6IFwiXFxcXG5cIixcbiAgICBcIlxcZlwiOiBcIlxcXFxmXCIsXG4gICAgXCJcXHJcIjogXCJcXFxcclwiLFxuICAgICdcIic6ICdcXFxcXCInLFxuICAgIFwiXFxcXFwiOiBcIlxcXFxcXFxcXCJcbiAgfTtcbiAgcHJpdmF0ZSBlc2NhcGVTdHJpbmcoc3RyOiBzdHJpbmcpIHtcbiAgICAvLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4gICAgLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbiAgICAvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbiAgICAvLyBzZXF1ZW5jZXMuXG4gICAgU3VydmV5SlNPTjUuZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIFN1cnZleUpTT041LmVzY2FwYWJsZS50ZXN0KHN0cilcbiAgICAgID8gJ1wiJyArXG4gICAgICAgICAgc3RyLnJlcGxhY2UoU3VydmV5SlNPTjUuZXNjYXBhYmxlLCBmdW5jdGlvbihhKSB7XG4gICAgICAgICAgICB2YXIgYyA9IFN1cnZleUpTT041Lm1ldGFbYV07XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgIDogXCJcXFxcdVwiICsgKFwiMDAwMFwiICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgICAgICAgIH0pICtcbiAgICAgICAgICAnXCInXG4gICAgICA6ICdcIicgKyBzdHIgKyAnXCInO1xuICB9XG4gIC8vIEVuZFxuXG4gIHByaXZhdGUgaW50ZXJuYWxTdHJpbmdpZnkoaG9sZGVyOiBhbnksIGtleTogYW55LCBpc1RvcExldmVsOiBib29sZWFuKSB7XG4gICAgdmFyIGJ1ZmZlciwgcmVzO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgdmFsdWUsIGlmIG5lY2Vzc2FyeVxuICAgIHZhciBvYmpfcGFydCA9IHRoaXMuZ2V0UmVwbGFjZWRWYWx1ZU9yVW5kZWZpbmVkKGhvbGRlciwga2V5LCBpc1RvcExldmVsKTtcblxuICAgIGlmIChvYmpfcGFydCAmJiAhdGhpcy5pc0RhdGUob2JqX3BhcnQpKSB7XG4gICAgICAvLyB1bmJveCBvYmplY3RzXG4gICAgICAvLyBkb24ndCB1bmJveCBkYXRlcywgc2luY2Ugd2lsbCB0dXJuIGl0IGludG8gbnVtYmVyXG4gICAgICBvYmpfcGFydCA9IG9ial9wYXJ0LnZhbHVlT2YoKTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2Ygb2JqX3BhcnQpIHtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBvYmpfcGFydC50b1N0cmluZygpO1xuXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGlmIChpc05hTihvYmpfcGFydCkgfHwgIWlzRmluaXRlKG9ial9wYXJ0KSkge1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqX3BhcnQudG9TdHJpbmcoKTtcblxuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdGhpcy5lc2NhcGVTdHJpbmcob2JqX3BhcnQudG9TdHJpbmcoKSk7XG5cbiAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgaWYgKG9ial9wYXJ0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBcnJheShvYmpfcGFydCkpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2lyY3VsYXIob2JqX3BhcnQpO1xuICAgICAgICAgIGJ1ZmZlciA9IFwiW1wiO1xuICAgICAgICAgIHRoaXMub2JqU3RhY2sucHVzaChvYmpfcGFydCk7XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9ial9wYXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmludGVybmFsU3RyaW5naWZ5KG9ial9wYXJ0LCBpLCBmYWxzZSk7XG4gICAgICAgICAgICBidWZmZXIgKz0gdGhpcy5tYWtlSW5kZW50KHRoaXMuaW5kZW50U3RyLCB0aGlzLm9ialN0YWNrLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAocmVzID09PSBudWxsIHx8IHR5cGVvZiByZXMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgYnVmZmVyICs9IFwibnVsbFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnVmZmVyICs9IHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpIDwgb2JqX3BhcnQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBidWZmZXIgKz0gXCIsXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZW50U3RyKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlciArPSBcIlxcblwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9ialN0YWNrLnBvcCgpO1xuICAgICAgICAgIGJ1ZmZlciArPVxuICAgICAgICAgICAgdGhpcy5tYWtlSW5kZW50KHRoaXMuaW5kZW50U3RyLCB0aGlzLm9ialN0YWNrLmxlbmd0aCwgdHJ1ZSkgKyBcIl1cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrRm9yQ2lyY3VsYXIob2JqX3BhcnQpO1xuICAgICAgICAgIGJ1ZmZlciA9IFwie1wiO1xuICAgICAgICAgIHZhciBub25FbXB0eSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub2JqU3RhY2sucHVzaChvYmpfcGFydCk7XG4gICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmpfcGFydCkge1xuICAgICAgICAgICAgaWYgKG9ial9wYXJ0Lmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuaW50ZXJuYWxTdHJpbmdpZnkob2JqX3BhcnQsIHByb3AsIGZhbHNlKTtcbiAgICAgICAgICAgICAgaXNUb3BMZXZlbCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyICs9IHRoaXMubWFrZUluZGVudCh0aGlzLmluZGVudFN0ciwgdGhpcy5vYmpTdGFjay5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIG5vbkVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcEtleSA9IHRoaXMuaXNXb3JkKHByb3ApXG4gICAgICAgICAgICAgICAgICA/IHByb3BcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5lc2NhcGVTdHJpbmcocHJvcCk7XG4gICAgICAgICAgICAgICAgYnVmZmVyICs9XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ICsgXCI6XCIgKyAodGhpcy5pbmRlbnRTdHIgPyBcIiBcIiA6IFwiXCIpICsgdmFsdWUgKyBcIixcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9ialN0YWNrLnBvcCgpO1xuICAgICAgICAgIGlmIChub25FbXB0eSkge1xuICAgICAgICAgICAgYnVmZmVyID1cbiAgICAgICAgICAgICAgYnVmZmVyLnN1YnN0cmluZygwLCBidWZmZXIubGVuZ3RoIC0gMSkgK1xuICAgICAgICAgICAgICB0aGlzLm1ha2VJbmRlbnQodGhpcy5pbmRlbnRTdHIsIHRoaXMub2JqU3RhY2subGVuZ3RoKSArXG4gICAgICAgICAgICAgIFwifVwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXIgPSBcInt9XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIHVuZGVmaW5lZCBzaG91bGQgYmUgaWdub3JlZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2pzb241LnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBZG9ybmVyIH0gZnJvbSBcIi4uL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5pbXBvcnQgeyBUaXRsZUlucGxhY2VFZGl0b3IgfSBmcm9tIFwiLi90aXRsZS1lZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleUVkaXRvciB9IGZyb20gXCIuLi9lZGl0b3JcIjtcbmltcG9ydCB7IGdldE5leHRWYWx1ZSwgZmluZFBhcmVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuaW1wb3J0IFwiLi9pdGVtLWVkaXRvci5zY3NzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG52YXIgdGVtcGxhdGVIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi9pdGVtLWVkaXRvci5odG1sXCIpO1xuXG5jbGFzcyBJdGVtSW5wbGFjZUVkaXRvciBleHRlbmRzIFRpdGxlSW5wbGFjZUVkaXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UsXG4gICAgcHJpdmF0ZSBpdGVtLFxuICAgIHJvb3RFbGVtZW50LFxuICAgIHByaXZhdGUgZWRpdG9yOiBTdXJ2ZXlFZGl0b3JcbiAgKSB7XG4gICAgc3VwZXIobmFtZSwgcm9vdEVsZW1lbnQpO1xuICB9XG5cbiAgZGVsZXRlSXRlbShtb2RlbDogSXRlbUlucGxhY2VFZGl0b3IsIGV2ZW50KSB7XG4gICAgaWYgKHRoaXMubm90T3RoZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1vZGVsLnF1ZXN0aW9uLmNob2ljZXMuaW5kZXhPZihtb2RlbC5pdGVtKTtcbiAgICAgIG1vZGVsLnF1ZXN0aW9uLmNob2ljZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHZhciBpdGVtID0gZmluZFBhcmVudE5vZGUoXCJpdGVtX2RyYWdnYWJsZVwiLCB0aGlzLnJvb3RFbGVtZW50KTtcbiAgICAgIGl0ZW0ucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVzdGlvbi5oYXNPdGhlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZWRpdG9yLm9uUXVlc3Rpb25FZGl0b3JDaGFuZ2VkKHRoaXMucXVlc3Rpb24pO1xuICB9XG5cbiAgZ2V0IG5vdE90aGVyKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLm90aGVySXRlbSAhPT0gdGhpcy5pdGVtO1xuICB9XG59XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJpdGVtLWVkaXRvclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgdmFyIG1vZGVsID0gbmV3IEl0ZW1JbnBsYWNlRWRpdG9yKFxuICAgICAgICBwYXJhbXMudGFyZ2V0W3BhcmFtcy5uYW1lXSxcbiAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLFxuICAgICAgICBwYXJhbXMuaXRlbSxcbiAgICAgICAgY29tcG9uZW50SW5mby5lbGVtZW50LFxuICAgICAgICBwYXJhbXMuZWRpdG9yXG4gICAgICApO1xuICAgICAgdmFyIHByb3BlcnR5ID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFxuICAgICAgICBwYXJhbXMudGFyZ2V0LmdldFR5cGUoKSxcbiAgICAgICAgcGFyYW1zLm5hbWVcbiAgICAgICk7XG4gICAgICBtb2RlbC52YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgICAgIHBhcmFtcy50YXJnZXRbcGFyYW1zLm5hbWVdID0gbmV3VmFsdWU7XG4gICAgICAgIHBhcmFtcy5lZGl0b3Iub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChwcm9wZXJ0eSwgcGFyYW1zLnRhcmdldCwgbmV3VmFsdWUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG4gIH0sXG4gIHRlbXBsYXRlOiB0ZW1wbGF0ZUh0bWxcbn0pO1xuXG5leHBvcnQgdmFyIGl0ZW1BZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiAhIW1vZGVsLnBhcmVudCAmJiAhIW1vZGVsLmNob2ljZXMgPyBcIml0ZW1fZWRpdGFibGVcIiA6IFwiXCI7XG4gIH0sXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsOiBRdWVzdGlvblNlbGVjdEJhc2UsIGVkaXRvcikgPT4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnRzW2ldLm9uY2xpY2sgPSBlID0+IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciBkZWNvcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBpZiAoaSA9PT0gZWxlbWVudHMubGVuZ3RoIC0gMSAmJiBtb2RlbC5oYXNPdGhlcikge1xuICAgICAgICBkZWNvcmF0aW9uLmlubmVySFRNTCA9XG4gICAgICAgICAgXCI8aXRlbS1lZGl0b3IgcGFyYW1zPSduYW1lOiBcXFwib3RoZXJUZXh0XFxcIiwgdGFyZ2V0OiB0YXJnZXQsIGl0ZW06IGl0ZW0sIHF1ZXN0aW9uOiBxdWVzdGlvbiwgZWRpdG9yOiBlZGl0b3InPjwvaXRlbS1lZGl0b3I+XCI7XG4gICAgICAgIGVsZW1lbnRzW2ldLmFwcGVuZENoaWxkKGRlY29yYXRpb24pO1xuICAgICAgICBrby5hcHBseUJpbmRpbmdzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGl0ZW06IG1vZGVsLm90aGVySXRlbSxcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBtb2RlbCxcbiAgICAgICAgICAgIHRhcmdldDogbW9kZWwsXG4gICAgICAgICAgICBlZGl0b3I6IGVkaXRvclxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVjb3JhdGlvblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVjb3JhdGlvbi5pbm5lckhUTUwgPVxuICAgICAgICAgIFwiPGl0ZW0tZWRpdG9yIHBhcmFtcz0nbmFtZTogXFxcInRleHRcXFwiLCB0YXJnZXQ6IHRhcmdldCwgaXRlbTogaXRlbSwgcXVlc3Rpb246IHF1ZXN0aW9uLCBlZGl0b3I6IGVkaXRvcic+PC9pdGVtLWVkaXRvcj5cIjtcbiAgICAgICAgZWxlbWVudHNbaV0uYXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7XG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3MoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXRlbTogbW9kZWwuY2hvaWNlc1tpXSxcbiAgICAgICAgICAgIHF1ZXN0aW9uOiBtb2RlbCxcbiAgICAgICAgICAgIHRhcmdldDogbW9kZWwuY2hvaWNlc1tpXSxcbiAgICAgICAgICAgIGVkaXRvcjogZWRpdG9yXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZWNvcmF0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJjb250cm9sTGFiZWxcIiwgaXRlbUFkb3JuZXIpO1xuXG5leHBvcnQgdmFyIGNyZWF0ZUFkZEl0ZW1IYW5kbGVyID0gKFxuICBxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uU2VsZWN0QmFzZSxcbiAgb25JdGVtQWRkZWQ6IChpdGVtVmFsdWU6IFN1cnZleS5JdGVtVmFsdWUpID0+IHZvaWRcbikgPT4gKCkgPT4ge1xuICB2YXIgbmV4dFZhbHVlID0gbnVsbDtcbiAgdmFyIHZhbHVlcyA9IHF1ZXN0aW9uLmNob2ljZXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pdGVtVmFsdWU7XG4gIH0pO1xuICBuZXh0VmFsdWUgPSBnZXROZXh0VmFsdWUoXCJpdGVtXCIsIHZhbHVlcyk7XG5cbiAgdmFyIGl0ZW1WYWx1ZSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKG5leHRWYWx1ZSk7XG4gIGl0ZW1WYWx1ZS5sb2NPd25lciA9IHtcbiAgICBnZXRMb2NhbGU6ICgpID0+IHtcbiAgICAgIGlmICghIXF1ZXN0aW9uW1wiZ2V0TG9jYWxlXCJdKSByZXR1cm4gcXVlc3Rpb24uZ2V0TG9jYWxlKCk7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9LFxuICAgIGdldE1hcmtkb3duSHRtbDogKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSxcbiAgICBnZXRQcm9jZXNzZWRUZXh0OiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH07XG4gIHF1ZXN0aW9uLmNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzLmNvbmNhdChbaXRlbVZhbHVlXSk7XG4gICEhb25JdGVtQWRkZWQgJiYgb25JdGVtQWRkZWQoaXRlbVZhbHVlKTtcbn07XG5cbmV4cG9ydCB2YXIgaXRlbURyYWdnYWJsZUFkb3JuZXIgPSB7XG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwucGFyZW50ICYmICEhbW9kZWwuY2hvaWNlcyA/IFwiaXRlbV9kcmFnZ2FibGVcIiA6IFwiXCI7XG4gIH0sXG4gIGFmdGVyUmVuZGVyOiAoXG4gICAgZWxlbWVudHM6IEhUTUxFbGVtZW50W10sXG4gICAgbW9kZWw6IFF1ZXN0aW9uU2VsZWN0QmFzZSxcbiAgICBlZGl0b3I6IFN1cnZleUVkaXRvclxuICApID0+IHtcbiAgICB2YXIgaXRlbXNSb290ID0gZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudDtcbiAgICBpZiAobW9kZWwuaGFzT3RoZXIpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmNsYXNzTGlzdC5yZW1vdmUoXCJpdGVtX2RyYWdnYWJsZVwiKTtcbiAgICB9XG4gICAgdmFyIHNvcnRhYmxlID0gU29ydGFibGUuY3JlYXRlKGl0ZW1zUm9vdCwge1xuICAgICAgaGFuZGxlOiBcIi5zdmRhLWRyYWctaGFuZGxlXCIsXG4gICAgICBkcmFnZ2FibGU6IFwiLml0ZW1fZHJhZ2dhYmxlXCIsXG4gICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgIG9uRW5kOiBldnQgPT4ge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IG1vZGVsLmNob2ljZXM7XG4gICAgICAgIHZhciBjaG9pY2UgPSBjaG9pY2VzW2V2dC5vbGRJbmRleF07XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKGV2dC5vbGRJbmRleCwgMSk7XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKGV2dC5uZXdJbmRleCwgMCwgY2hvaWNlKTtcbiAgICAgICAgZWRpdG9yLm9uUXVlc3Rpb25FZGl0b3JDaGFuZ2VkKG1vZGVsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgYWRkTmV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBhZGROZXcudGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuYWRkSXRlbVwiKTtcbiAgICBhZGROZXcuY2xhc3NOYW1lID0gXCJzdmRhLWFkZC1uZXctaXRlbSBzdmQtcHJpbWFyeS1pY29uXCI7XG4gICAgYWRkTmV3Lm9uY2xpY2sgPSBjcmVhdGVBZGRJdGVtSGFuZGxlcihtb2RlbCwgaXRlbVZhbHVlID0+XG4gICAgICBlZGl0b3Iub25RdWVzdGlvbkVkaXRvckNoYW5nZWQobW9kZWwpXG4gICAgKTtcblxuICAgIHZhciBzdmdFbGVtOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInN2Z1wiXG4gICAgKTtcbiAgICBzdmdFbGVtLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic3ZkLXN2Zy1pY29uXCIpO1xuICAgIHN2Z0VsZW0uc3R5bGUud2lkdGggPSBcIjEycHhcIjtcbiAgICBzdmdFbGVtLnN0eWxlLmhlaWdodCA9IFwiMTJweFwiO1xuICAgIHZhciB1c2VFbGVtOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBcInVzZVwiXG4gICAgKTtcbiAgICB1c2VFbGVtLnNldEF0dHJpYnV0ZU5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgICBcInhsaW5rOmhyZWZcIixcbiAgICAgIFwiI2ljb24taW5wbGFjZXBsdXNcIlxuICAgICk7XG4gICAgc3ZnRWxlbS5hcHBlbmRDaGlsZCh1c2VFbGVtKTtcbiAgICBhZGROZXcuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG5cbiAgICBpdGVtc1Jvb3QuYXBwZW5kQ2hpbGQoYWRkTmV3KTtcbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwiaXRlbVwiLCBpdGVtRHJhZ2dhYmxlQWRvcm5lcik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYWRvcm5lcnMvaXRlbS1lZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyIH0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBEcmFnRHJvcFRhcmdldEVsZW1lbnQge1xuICBwdWJsaWMgbW92ZVRvUGFyZW50OiBhbnk7XG4gIHB1YmxpYyBtb3ZlVG9JbmRleDogbnVtYmVyO1xuICBwdWJsaWMgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTE7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwYWdlOiBTdXJ2ZXkuUGFnZSxcbiAgICBwdWJsaWMgdGFyZ2V0OiBhbnksXG4gICAgcHVibGljIHNvdXJjZTogYW55XG4gICkge31cbiAgcHVibGljIG1vdmVUbyhcbiAgICBkZXN0aW5hdGlvbjogYW55LFxuICAgIGlzQm90dG9tOiBib29sZWFuLFxuICAgIGlzRWRnZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIC8vY29uc29sZS5sb2coXCJkZXN0OiBcIiArIGRlc3RpbmF0aW9uLm5hbWUgKyBcIiwgaXNCb3R0b206XCIgKyBpc0JvdHRvbSArIFwiLCBpc0VkZ2U6XCIgKyBpc0VkZ2UpO1xuICAgIGlzRWRnZSA9IGlzRWRnZSB8fCAhZGVzdGluYXRpb24uaXNQYW5lbDtcbiAgICBpZiAoZGVzdGluYXRpb24gPT09IHRoaXMudGFyZ2V0KSByZXR1cm4gIXRoaXMudGFyZ2V0LmlzUGFuZWw7XG4gICAgdmFyIGRlc3RJbmZvID0gdGhpcy5maW5kSW5mbyhkZXN0aW5hdGlvbiwgaXNFZGdlKTtcbiAgICBpZiAoIWRlc3RJbmZvKSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB0YXJnZXRJbmZvID0gdGhpcy5maW5kSW5mbyh0aGlzLnRhcmdldCwgdHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVJbmZvKGRlc3RJbmZvLCBpc0JvdHRvbSwgaXNFZGdlKTtcbiAgICBpZiAodGhpcy5pc0luZm9FcXVhbHModGFyZ2V0SW5mbywgZGVzdEluZm8pKSByZXR1cm4gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyQnlJbmZvKHRhcmdldEluZm8pO1xuICAgIGRlc3RJbmZvID0gdGhpcy5maW5kSW5mbyhkZXN0aW5hdGlvbiwgaXNFZGdlKTtcbiAgICBpZiAoIWRlc3RJbmZvKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy51cGRhdGVJbmZvKGRlc3RJbmZvLCBpc0JvdHRvbSwgaXNFZGdlKTtcbiAgICBpZiAoIXRoaXMuY2FuTW92ZShkZXN0SW5mbykpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmFkZEluZm8oZGVzdEluZm8pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBkb0Ryb3AoKTogYW55IHtcbiAgICB2YXIgZGVzdEluZm8gPSB0aGlzLmZpbmRJbmZvKHRoaXMudGFyZ2V0KTtcbiAgICBpZiAoIWRlc3RJbmZvKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRJbmRleEJ5SW5mbyhkZXN0SW5mbyk7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSB0aGlzLmdldE5ld1RhcmdldEVsZW1lbnQoKTtcbiAgICB0aGlzLm1vdmVUb1BhcmVudCA9IGRlc3RJbmZvLnBhbmVsO1xuICAgIHRoaXMubW92ZVRvSW5kZXggPSBpbmRleDtcbiAgICBkZXN0SW5mby5wYW5lbC5hZGRFbGVtZW50KG5ld0VsZW1lbnQsIGluZGV4KTtcbiAgICBpZiAodGhpcy5zb3VyY2UpIHtcbiAgICAgIHZhciBzcmNJbmZvID0gdGhpcy5maW5kSW5mbyh0aGlzLnNvdXJjZSwgdHJ1ZSk7XG4gICAgICB2YXIgcGFuZWwgPSBzcmNJbmZvID8gc3JjSW5mby5wYW5lbCA6IHRoaXMucGFnZTtcbiAgICAgIHBhbmVsLnJlbW92ZUVsZW1lbnQodGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy5jbGVhckJ5SW5mbyh0aGlzLmZpbmRJbmZvKHRoaXMudGFyZ2V0LCB0cnVlKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbmRleEJ5SW5mbyhpbmZvOiBhbnkpIHtcbiAgICBpZiAoIWluZm8pIHJldHVybiAwO1xuICAgIHZhciByb3dzID0gaW5mby5wYW5lbC5rb1Jvd3MoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5mby5ySW5kZXg7IGkrKykge1xuICAgICAgaW5kZXggKz0gcm93c1tpXVtcImtvRWxlbWVudHNcIl0oKS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBpbmRleCArIGluZm8uZWxJbmRleDtcbiAgfVxuICBwcml2YXRlIGNhbk1vdmUoZGVzdEluZm86IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnRhcmdldC5pc1BhbmVsICYmIGRlc3RJbmZvLmVsZW1lbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50YXJnZXQgPT0gZGVzdEluZm8uZWxlbWVudCB8fFxuICAgICAgICB0aGlzLnRhcmdldC5jb250YWluc0VsZW1lbnQoZGVzdEluZm8uZWxlbWVudClcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNvdXJjZSAmJlxuICAgICAgICAodGhpcy5zb3VyY2UgPT0gZGVzdEluZm8uZWxlbWVudCB8fFxuICAgICAgICAgIHRoaXMuc291cmNlLmNvbnRhaW5zRWxlbWVudChkZXN0SW5mby5lbGVtZW50KSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc291cmNlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgc3JjSW5mbyA9IHRoaXMuZmluZEluZm8odGhpcy5zb3VyY2UpO1xuICAgIGlmIChzcmNJbmZvID09IG51bGwgfHwgc3JjSW5mby5wYW5lbCAhPSBkZXN0SW5mby5wYW5lbCkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHNyY0luZGV4ID0gdGhpcy5nZXRJbmRleEJ5SW5mbyhzcmNJbmZvKTtcbiAgICB2YXIgZGVzdEluZGV4ID0gdGhpcy5nZXRJbmRleEJ5SW5mbyhkZXN0SW5mbyk7XG4gICAgdmFyIGRpZmYgPSBkZXN0SW5kZXggLSBzcmNJbmRleDtcbiAgICByZXR1cm4gZGlmZiA8IDAgfHwgZGlmZiA+IDE7XG4gIH1cbiAgcHJpdmF0ZSBpc0xhc3RFbGVtZW50SW5Sb3coaW5mbzogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluZm8uZWxJbmRleCA9PVxuICAgICAgaW5mby5wYW5lbFtcImtvUm93c1wiXSgpW2luZm8uckluZGV4XVtcImtvRWxlbWVudHNcIl0oKS5sZW5ndGggLSAxXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUluZm8oaW5mbzogYW55LCBpc0JvdHRvbTogYm9vbGVhbiwgaXNFZGdlOiBib29sZWFuKSB7XG4gICAgaWYgKGluZm8uckluZGV4IDwgMCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnRhcmdldC5zdGFydFdpdGhOZXdMaW5lKSB7XG4gICAgICBpZiAoaXNCb3R0b20pIGluZm8uckluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc0JvdHRvbSkge1xuICAgICAgICBpbmZvLmVsSW5kZXgrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmZvLmVsSW5kZXggPT0gMCAmJiBpbmZvLnJJbmRleCA+IDApIHtcbiAgICAgICAgICBpbmZvLnJJbmRleC0tO1xuICAgICAgICAgIGluZm8uZWxJbmRleCA9IGluZm8ucGFuZWxbXCJrb1Jvd3NcIl0oKVtpbmZvLnJJbmRleF1bXG4gICAgICAgICAgICBcImtvRWxlbWVudHNcIlxuICAgICAgICAgIF0oKS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRJbmZvKGluZm86IGFueSkge1xuICAgIGlmICh0aGlzLnRhcmdldC5pc1BhbmVsKSB7XG4gICAgICB0aGlzLnRhcmdldC5wYXJlbnQgPSBpbmZvLnBhbmVsO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRhcmdldC5zdGFydFdpdGhOZXdMaW5lIHx8XG4gICAgICBpbmZvLmVsSW5kZXggPCAxIHx8XG4gICAgICBpbmZvLnJJbmRleCA8IDAgfHxcbiAgICAgIGluZm8uckluZGV4ID49IGluZm8ucGFuZWwua29Sb3dzKCkubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLkFkZEluZm9Bc1JvdyhpbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJvdyA9IGluZm8ucGFuZWwua29Sb3dzKClbaW5mby5ySW5kZXhdO1xuICAgICAgdmFyIGVsZW1lbnRzID0gcm93W1wia29FbGVtZW50c1wiXSgpO1xuICAgICAgaWYgKGluZm8uZWxJbmRleCA8IGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50cy5zcGxpY2UoaW5mby5lbEluZGV4LCAwLCB0aGlzLnRhcmdldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMudGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIHJvd1tcImtvRWxlbWVudHNcIl0oZWxlbWVudHMpO1xuICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBBZGRJbmZvQXNSb3coaW5mbzogYW55KSB7XG4gICAgdmFyIHJvdyA9IG5ldyBTdXJ2ZXkuUXVlc3Rpb25Sb3coaW5mby5wYW5lbCk7XG4gICAgcm93LmFkZEVsZW1lbnQodGhpcy50YXJnZXQpO1xuICAgIHZhciByb3dzID0gaW5mby5wYW5lbC5rb1Jvd3MoKTtcbiAgICBpZiAoaW5mby5ySW5kZXggPj0gMCAmJiBpbmZvLnJJbmRleCA8IGluZm8ucGFuZWwua29Sb3dzKCkubGVuZ3RoKSB7XG4gICAgICByb3dzLnNwbGljZShpbmZvLnJJbmRleCwgMCwgcm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIGluZm8ucGFuZWwua29Sb3dzKHJvd3MpO1xuICB9XG4gIHByaXZhdGUgY2xlYXJCeUluZm8oaW5mbzogYW55KSB7XG4gICAgaWYgKGluZm8gPT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciByb3dzID0gaW5mby5wYW5lbC5rb1Jvd3MoKTtcbiAgICBpZiAoaW5mby5ySW5kZXggPCAwIHx8IGluZm8uckluZGV4ID49IHJvd3MubGVuZ3RoKSByZXR1cm47XG4gICAgdmFyIHJvdyA9IHJvd3NbaW5mby5ySW5kZXhdO1xuICAgIHZhciBlbGVtZW50cyA9IHJvd1tcImtvRWxlbWVudHNcIl0oKTtcbiAgICBpZiAocm93W1wia29FbGVtZW50c1wiXSgpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVsZW1lbnRzLnNwbGljZShpbmZvLmVsSW5kZXgsIDEpO1xuICAgICAgcm93W1wia29FbGVtZW50c1wiXShlbGVtZW50cyk7XG4gICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dzLnNwbGljZShpbmZvLnJJbmRleCwgMSk7XG4gICAgICBpbmZvLnBhbmVsLmtvUm93cyhyb3dzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc0luZm9FcXVhbHMoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICBhLnBhbmVsID09PSBiLnBhbmVsICYmIGEuckluZGV4ID09PSBiLnJJbmRleCAmJiBhLmVsSW5kZXggPT09IGIuZWxJbmRleFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBmaW5kSW5mbyhlbDogYW55LCBpc0VkZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZmluZEluZm9JblBhbmVsKHRoaXMucGFnZSwgZWwsIGlzRWRnZSwgZWwpO1xuICAgIGlmIChcbiAgICAgIHJlcyAmJlxuICAgICAgdGhpcy50YXJnZXQgJiZcbiAgICAgIHRoaXMudGFyZ2V0LmlzUGFuZWwgJiZcbiAgICAgIHRoaXMubmVzdGVkUGFuZWxEZXB0aCA+IC0xXG4gICAgKSB7XG4gICAgICB2YXIgcGFyZW50cyA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudHMocmVzLnBhbmVsKTtcbiAgICAgIGlmICh0aGlzLm5lc3RlZFBhbmVsRGVwdGggKyAxIDwgcGFyZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVzLnBhbmVsID0gcGFyZW50c1t0aGlzLm5lc3RlZFBhbmVsRGVwdGhdO1xuICAgICAgICByZXMuZWxlbWVudCA9IHBhcmVudHNbdGhpcy5uZXN0ZWRQYW5lbERlcHRoICsgMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYXJlbnRFbGVtZW50cyhwYW5lbDogYW55KTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHdoaWxlIChwYW5lbCkge1xuICAgICAgcmVzLnVuc2hpZnQocGFuZWwpO1xuICAgICAgcGFuZWwgPSBwYW5lbC5wYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbmZvSW5QYW5lbChcbiAgICBwYW5lbDogU3VydmV5LlBhbmVsTW9kZWxCYXNlLFxuICAgIGVsOiBhbnksXG4gICAgaXNFZGdlOiBib29sZWFuLFxuICAgIHJvb3Q6IGFueVxuICApOiBhbnkge1xuICAgIGlmIChlbCA9PSBwYW5lbCkge1xuICAgICAgdmFyIHBhcmVudCA9IHBhbmVsO1xuICAgICAgaWYgKFxuICAgICAgICBwYW5lbC5wYXJlbnQgJiZcbiAgICAgICAgKGlzRWRnZSB8fFxuICAgICAgICAgIChyb290ICYmXG4gICAgICAgICAgICB0aGlzLnRhcmdldCAmJlxuICAgICAgICAgICAgcm9vdC5uYW1lID09IHRoaXMudGFyZ2V0Lm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmlzUGFuZWwpKVxuICAgICAgKSB7XG4gICAgICAgIHBhcmVudCA9IHBhbmVsLnBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHBhbmVsOiBwYXJlbnQsIHJJbmRleDogMCwgZWxJbmRleDogMCwgZWxlbWVudDogcGFuZWwgfTtcbiAgICB9XG4gICAgdmFyIHJvd3MgPSBwYW5lbFtcImtvUm93c1wiXSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICB2YXIgZWxlbWVudHMgPSByb3dbXCJrb0VsZW1lbnRzXCJdKCk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNbal07XG4gICAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgICB2YXIgcmVzID0gdGhpcy5maW5kSW5mb0luUGFuZWwoZWxlbWVudCwgZWwsIGlzRWRnZSwgcm9vdCk7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgaWYgKHJlcy5lbGVtZW50ID09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgcmVzLnJJbmRleCA9IGk7XG4gICAgICAgICAgICAgIHJlcy5lbEluZGV4ID0gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50ID09IGVsKVxuICAgICAgICAgIHJldHVybiB7IHBhbmVsOiBwYW5lbCwgckluZGV4OiBpLCBlbEluZGV4OiBqLCBlbGVtZW50OiBlbGVtZW50IH07XG4gICAgICAgIC8vVE9ETyByZWZhY3RvciEhIVxuICAgICAgICBpZiAoIWVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgICAgIHZhciBjaGlsZEVsZW1lbnRzID0gdGhpcy5nZXRFbGVtZW50cyhlbGVtZW50KTtcbiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNoaWxkRWxlbWVudHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGlmIChjaGlsZEVsZW1lbnRzW2tdLmlzUGFuZWwpIHtcbiAgICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuZmluZEluZm9JblBhbmVsKFxuICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudHNba10sXG4gICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgaXNFZGdlLFxuICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdUYXJnZXRFbGVtZW50KCk6IGFueSB7XG4gICAgdmFyIHJlc3VsdCA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKHRoaXMudGFyZ2V0LmdldFR5cGUoKSk7XG4gICAgdmFyIGpzb24gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy50YXJnZXQpO1xuICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRzKGVsZW1lbnQ6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0RWxlbWVudHMoZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERyYWdEcm9wSGVscGVyIHtcbiAgcHVibGljIHN0YXRpYyBlZGdlSGVpZ2h0OiBudW1iZXIgPSAyMDtcbiAgcHVibGljIHN0YXRpYyBuZXN0ZWRQYW5lbERlcHRoOiBudW1iZXIgPSAtMTtcbiAgc3RhdGljIGRhdGFTdGFydDogc3RyaW5nID0gXCJzdXJ2ZXlqcyxcIjtcbiAgc3RhdGljIGRyYWdEYXRhOiBhbnkgPSB7IHRleHQ6IFwiXCIsIGpzb246IG51bGwgfTtcbiAgc3RhdGljIHByZXZFdmVudCA9IHsgZWxlbWVudDogbnVsbCwgeDogLTEsIHk6IC0xIH07XG4gIHByaXZhdGUgb25Nb2RpZmllZENhbGxiYWNrOiAob3B0aW9ucz86IGFueSkgPT4gYW55O1xuICBwcml2YXRlIHNjcm9sbGFibGVFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIHByaXZhdGUgZGRUYXJnZXQ6IERyYWdEcm9wVGFyZ2V0RWxlbWVudCA9IG51bGw7XG4gIHByaXZhdGUgcHJldkNvb3JkaW5hdGVzOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIHN0YXRpYyBjb3VudGVyOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIGlkOiBudW1iZXIgPSBEcmFnRHJvcEhlbHBlci5jb3VudGVyKys7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXRhOiBTdXJ2ZXkuSVN1cnZleSxcbiAgICBvbk1vZGlmaWVkQ2FsbGJhY2s6IChvcHRpb25zPzogYW55KSA9PiBhbnksXG4gICAgcGFyZW50OiBIVE1MRWxlbWVudCA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5vbk1vZGlmaWVkQ2FsbGJhY2sgPSBvbk1vZGlmaWVkQ2FsbGJhY2s7XG4gICAgdGhpcy5zY3JvbGxhYmxlRWxlbWVudCA9XG4gICAgICBwYXJlbnQgJiYgPEhUTUxFbGVtZW50PnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiI3Njcm9sbGFibGVEaXZcIik7XG4gICAgdGhpcy5wcmV2Q29vcmRpbmF0ZXMgPSB7IHg6IC0xLCB5OiAtMSB9O1xuICB9XG4gIHB1YmxpYyBhdHRhY2hUb0VsZW1lbnQoZG9tRWxlbWVudCwgc3VydmV5RWxlbWVudCkge1xuICAgIGRvbUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IHN1cnZleUVsZW1lbnQua29Jc0RyYWdnaW5nKCkgPyAwLjQgOiAxO1xuICAgIGRvbUVsZW1lbnQuZHJhZ2dhYmxlID0gc3VydmV5RWxlbWVudC5hbGxvd2luZ09wdGlvbnMuYWxsb3dEcmFnZ2luZztcbiAgICBkb21FbGVtZW50Lm9uZHJhZ292ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoIXN1cnZleUVsZW1lbnQuYWxsb3dpbmdPcHRpb25zLmFsbG93RHJhZ2dpbmcpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghZVtcIm1hcmtFdmVudFwiXSkge1xuICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcbiAgICAgICAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlcigpLmRvRHJhZ0Ryb3BPdmVyKGUsIHN1cnZleUVsZW1lbnQsIHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb21FbGVtZW50Lm9uZHJvcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmICghZVtcIm1hcmtFdmVudFwiXSkge1xuICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcbiAgICAgICAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlcigpLmRvRHJvcChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGRvbUVsZW1lbnQub25kcmFnc3RhcnQgPSBmdW5jdGlvbihlOiBEcmFnRXZlbnQpIHtcbiAgICAgIHZhciB0YXJnZXQ6IGFueSA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXN1cnZleUVsZW1lbnQuYWxsb3dpbmdPcHRpb25zLmFsbG93RHJhZ2dpbmcpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghZVtcIm1hcmtFdmVudFwiXSkge1xuICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcbiAgICAgICAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlcigpLnN0YXJ0RHJhZ1F1ZXN0aW9uKGUsIHN1cnZleUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9tRWxlbWVudC5vbmRyYWdlbmQgPSBmdW5jdGlvbihlKSB7XG4gICAgICBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyKCkuZW5kKCk7XG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHtcbiAgICByZXR1cm4gPFN1cnZleS5TdXJ2ZXk+dGhpcy5kYXRhO1xuICB9XG4gIHB1YmxpYyBzdGFydERyYWdRdWVzdGlvbihldmVudDogRHJhZ0V2ZW50LCBlbGVtZW50OiBhbnkpIHtcbiAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChlbGVtZW50KTtcbiAgICBqc29uW1widHlwZVwiXSA9IGVsZW1lbnQuZ2V0VHlwZSgpO1xuICAgIHRoaXMucHJlcGFyZURhdGEoZXZlbnQsIGVsZW1lbnQubmFtZSwganNvbik7XG4gICAgdGhpcy5kZFRhcmdldC5zb3VyY2UgPSBlbGVtZW50O1xuICB9XG4gIHB1YmxpYyBzdGFydERyYWdUb29sYm94SXRlbShcbiAgICBldmVudDogRHJhZ0V2ZW50LFxuICAgIGVsZW1lbnROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudEpzb246IGFueVxuICApIHtcbiAgICB0aGlzLnByZXBhcmVEYXRhKGV2ZW50LCBlbGVtZW50TmFtZSwgZWxlbWVudEpzb24pO1xuICB9XG4gIHB1YmxpYyBpc1N1cnZleURyYWdnaW5nKGV2ZW50OiBEcmFnRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGRhdGEgPSB0aGlzLmdldERhdGEoZXZlbnQpLnRleHQ7XG4gICAgcmV0dXJuIGRhdGEgJiYgZGF0YS5pbmRleE9mKERyYWdEcm9wSGVscGVyLmRhdGFTdGFydCkgPT0gMDtcbiAgfVxuICBwdWJsaWMgZG9EcmFnRHJvcE92ZXIoXG4gICAgZXZlbnQ6IERyYWdFdmVudCxcbiAgICBlbGVtZW50OiBhbnksXG4gICAgaXNFZGdlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgZXZlbnQgPSB0aGlzLmdldEV2ZW50KGV2ZW50KTtcbiAgICBpZiAodGhpcy5pc1NhbWVDb29yZGluYXRlcyhldmVudCkpIHJldHVybjtcbiAgICB0aGlzLmNoZWNrU2Nyb2xsWShldmVudCk7XG4gICAgaWYgKFxuICAgICAgIWVsZW1lbnQgfHxcbiAgICAgICF0aGlzLmlzU3VydmV5RHJhZ2dpbmcoZXZlbnQpIHx8XG4gICAgICB0aGlzLmlzU2FtZVBsYWNlKGV2ZW50LCBlbGVtZW50KVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIGVsZW1lbnQgPSB0aGlzLnJlcGxhY2VUYXJnZXRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdmFyIGJvdHRvbUluZm8gPSB0aGlzLmlzQm90dG9tKGV2ZW50LCBlbGVtZW50KTtcbiAgICBpc0VkZ2UgPSBlbGVtZW50LmlzUGFuZWwgPyBpc0VkZ2UgJiYgYm90dG9tSW5mby5pc0VkZ2UgOiB0cnVlO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwgJiYgIWlzRWRnZSAmJiBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA+IDApIHJldHVybjtcbiAgICB0aGlzLmRkVGFyZ2V0Lm1vdmVUbyhlbGVtZW50LCBib3R0b21JbmZvLmlzQm90dG9tLCBpc0VkZ2UpO1xuICB9XG4gIHB1YmxpYyByZXBsYWNlVGFyZ2V0RWxlbWVudChlbGVtZW50KSB7XG4gICAgaWYgKFxuICAgICAgZWxlbWVudC5nZXRUeXBlICYmXG4gICAgICBlbGVtZW50LmdldFR5cGUoKSA9PT0gXCJwYWdlXCIgJiZcbiAgICAgIGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoICE9PSAwXG4gICAgKSB7XG4gICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50LmVsZW1lbnRzO1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwdWJsaWMgZW5kKCkge1xuICAgIGlmICh0aGlzLmRkVGFyZ2V0KSB7XG4gICAgICB0aGlzLmRkVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuaXNTY3JvbGxTdG9wID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGF0YSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNNb3ZpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGRUYXJnZXQgJiYgdGhpcy5kZFRhcmdldC5zb3VyY2U7XG4gIH1cbiAgcHVibGljIGRvRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU3VydmV5RHJhZ2dpbmcoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdmFyIG5ld0VsZW1lbnQgPSB0aGlzLmRkVGFyZ2V0LmRvRHJvcCgpO1xuICAgICAgaWYgKHRoaXMub25Nb2RpZmllZENhbGxiYWNrKVxuICAgICAgICB0aGlzLm9uTW9kaWZpZWRDYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogXCJET19EUk9QXCIsXG4gICAgICAgICAgcGFnZTogdGhpcy5kZFRhcmdldC5wYWdlLFxuICAgICAgICAgIHNvdXJjZTogdGhpcy5kZFRhcmdldC5zb3VyY2UsXG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmRkVGFyZ2V0LnRhcmdldCxcbiAgICAgICAgICBuZXdFbGVtZW50OiB0aGlzLmRkVGFyZ2V0LnNvdXJjZSA/IG51bGwgOiBuZXdFbGVtZW50LFxuICAgICAgICAgIG1vdmVUb1BhcmVudDogdGhpcy5kZFRhcmdldC5tb3ZlVG9QYXJlbnQsXG4gICAgICAgICAgbW92ZVRvSW5kZXg6IHRoaXMuZGRUYXJnZXQubW92ZVRvSW5kZXhcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZW5kKCk7XG4gIH1cbiAgcHVibGljIGRvTGVhdmVQYWdlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICB0aGlzLmRkVGFyZ2V0LmNsZWFyKCk7XG4gIH1cbiAgcHVibGljIHNjcm9sbFRvRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgfHwgIWVsKSByZXR1cm47XG4gICAgZWwuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlVGFyZ2V0RWxlbWVudChlbGVtZW50TmFtZTogc3RyaW5nLCBqc29uOiBhbnkpOiBhbnkge1xuICAgIGlmICghZWxlbWVudE5hbWUgfHwgIWpzb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0YXJnZXRFbGVtZW50ID0gbnVsbDtcbiAgICB0YXJnZXRFbGVtZW50ID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoanNvbltcInR5cGVcIl0pO1xuICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHRhcmdldEVsZW1lbnQpO1xuICAgIHRhcmdldEVsZW1lbnQubmFtZSA9IGVsZW1lbnROYW1lO1xuICAgIGlmICh0YXJnZXRFbGVtZW50W1wic2V0U3VydmV5SW1wbFwiXSkge1xuICAgICAgdGFyZ2V0RWxlbWVudFtcInNldFN1cnZleUltcGxcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRFbGVtZW50W1wic2V0RGF0YVwiXSh0aGlzLnN1cnZleSk7XG4gICAgfVxuICAgIHRhcmdldEVsZW1lbnQucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICB0YXJnZXRFbGVtZW50W1wia29Jc0RyYWdnaW5nXCJdKHRydWUpO1xuICAgIHJldHVybiB0YXJnZXRFbGVtZW50O1xuICB9XG4gIHByaXZhdGUgaXNCb3R0b20oZXZlbnQ6IERyYWdFdmVudCwgc3VydmV5RWw6IGFueSk6IGFueSB7XG4gICAgZXZlbnQgPSB0aGlzLmdldEV2ZW50KGV2ZW50KTtcbiAgICB2YXIgaGVpZ2h0ID0gPG51bWJlcj5ldmVudC5jdXJyZW50VGFyZ2V0W1wiY2xpZW50SGVpZ2h0XCJdO1xuICAgIHZhciB5ID0gZXZlbnQub2Zmc2V0WTtcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoXCJsYXllclhcIikpIHtcbiAgICAgIHkgPSBldmVudC5sYXllclkgLSA8bnVtYmVyPmV2ZW50LmN1cnJlbnRUYXJnZXRbXCJvZmZzZXRUb3BcIl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQm90dG9tOiB5ID4gaGVpZ2h0IC8gMixcbiAgICAgIGlzRWRnZTpcbiAgICAgICAgeSA8PSBEcmFnRHJvcEhlbHBlci5lZGdlSGVpZ2h0IHx8XG4gICAgICAgIGhlaWdodCAtIHkgPD0gRHJhZ0Ryb3BIZWxwZXIuZWRnZUhlaWdodFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBpc1NhbWVDb29yZGluYXRlcyhldmVudDogRHJhZ0V2ZW50KTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9XG4gICAgICBNYXRoLmFicyhldmVudC5wYWdlWCAtIHRoaXMucHJldkNvb3JkaW5hdGVzLngpID4gNSB8fFxuICAgICAgTWF0aC5hYnMoZXZlbnQucGFnZVkgLSB0aGlzLnByZXZDb29yZGluYXRlcy55KSA+IDU7XG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5wcmV2Q29vcmRpbmF0ZXMueCA9IGV2ZW50LnBhZ2VYO1xuICAgICAgdGhpcy5wcmV2Q29vcmRpbmF0ZXMueSA9IGV2ZW50LnBhZ2VZO1xuICAgIH1cbiAgICByZXR1cm4gIXJlcztcbiAgfVxuICBwcml2YXRlIGlzU2FtZVBsYWNlKGV2ZW50OiBEcmFnRXZlbnQsIGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBwcmV2ID0gRHJhZ0Ryb3BIZWxwZXIucHJldkV2ZW50O1xuICAgIGlmIChcbiAgICAgIHByZXYuZWxlbWVudCAhPSBlbGVtZW50IHx8XG4gICAgICBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gcHJldi54KSA+IDUgfHxcbiAgICAgIE1hdGguYWJzKGV2ZW50LmNsaWVudFkgLSBwcmV2LnkpID4gNVxuICAgICkge1xuICAgICAgcHJldi5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHByZXYueCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICBwcmV2LnkgPSBldmVudC5jbGllbnRZO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGlzU2Nyb2xsU3RvcDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIFNjcm9sbERlbGF5OiBudW1iZXIgPSAzMDtcbiAgcHJpdmF0ZSBzdGF0aWMgU2Nyb2xsT2Zmc2V0OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgY2hlY2tTY3JvbGxZKGU6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlRWxlbWVudCkgcmV0dXJuO1xuICAgIHZhciB5ID0gdGhpcy5nZXRTY3JvbGxhYmxlRWxlbWVudFBvc1koZSk7XG4gICAgaWYgKHkgPCAwKSByZXR1cm47XG4gICAgdGhpcy5pc1Njcm9sbFN0b3AgPSB0cnVlO1xuICAgIHZhciBoZWlnaHQgPSA8bnVtYmVyPnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRbXCJjbGllbnRIZWlnaHRcIl07XG4gICAgaWYgKHkgPCBEcmFnRHJvcEhlbHBlci5TY3JvbGxPZmZzZXQgJiYgeSA+PSAwKSB7XG4gICAgICB0aGlzLmlzU2Nyb2xsU3RvcCA9IGZhbHNlO1xuICAgICAgdGhpcy5kb1Njcm9sbFkoLTEpO1xuICAgIH1cbiAgICBpZiAoaGVpZ2h0IC0geSA8IERyYWdEcm9wSGVscGVyLlNjcm9sbE9mZnNldCAmJiBoZWlnaHQgPj0geSkge1xuICAgICAgdGhpcy5pc1Njcm9sbFN0b3AgPSBmYWxzZTtcbiAgICAgIHRoaXMuZG9TY3JvbGxZKDEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRvU2Nyb2xsWShzdGVwOiBudW1iZXIpIHtcbiAgICB2YXIgZWwgPSB0aGlzLnNjcm9sbGFibGVFbGVtZW50O1xuICAgIHZhciBzY3JvbGxZID0gZWwuc2Nyb2xsVG9wICsgc3RlcDtcbiAgICBpZiAoc2Nyb2xsWSA8IDApIHtcbiAgICAgIHRoaXMuaXNTY3JvbGxTdG9wID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWwuc2Nyb2xsVG9wID0gc2Nyb2xsWTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCF0aGlzLmlzU2Nyb2xsU3RvcCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5kb1Njcm9sbFkoc3RlcCk7XG4gICAgICB9LCBEcmFnRHJvcEhlbHBlci5TY3JvbGxEZWxheSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0U2Nyb2xsYWJsZUVsZW1lbnRQb3NZKGU6IERyYWdFdmVudCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGVFbGVtZW50IHx8ICFlLmN1cnJlbnRUYXJnZXQpIHJldHVybiAtMTtcbiAgICB2YXIgZWwgPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgdmFyIG9mZnNldFRvcCA9IDA7XG4gICAgd2hpbGUgKGVsICYmIGVsICE9IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQpIHtcbiAgICAgIG9mZnNldFRvcCArPSA8bnVtYmVyPmVsW1wib2Zmc2V0VG9wXCJdO1xuICAgICAgZWwgPSBlbFtcIm9mZnNldFBhcmVudFwiXTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGUub2Zmc2V0WSArXG4gICAgICA8bnVtYmVyPmUuY3VycmVudFRhcmdldFtcIm9mZnNldFRvcFwiXSAtXG4gICAgICB0aGlzLnNjcm9sbGFibGVFbGVtZW50Lm9mZnNldFRvcCAtXG4gICAgICB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRFdmVudChldmVudDogRHJhZ0V2ZW50KTogRHJhZ0V2ZW50IHtcbiAgICByZXR1cm4gZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdID8gZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdIDogZXZlbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRZKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICB2YXIgcmVzdWx0ID0gMDtcblxuICAgIHdoaWxlIChlbGVtZW50KSB7XG4gICAgICByZXN1bHQgKz0gZWxlbWVudC5vZmZzZXRUb3AgLSBlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICAgICAgZWxlbWVudCA9IDxIVE1MRWxlbWVudD5lbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIHByZXBhcmVEYXRhKGV2ZW50OiBEcmFnRXZlbnQsIGVsZW1lbnROYW1lOiBzdHJpbmcsIGpzb24pIHtcbiAgICB2YXIgc3RyID0gRHJhZ0Ryb3BIZWxwZXIuZGF0YVN0YXJ0ICsgXCJxdWVzdGlvbm5hbWU6XCIgKyBlbGVtZW50TmFtZTtcbiAgICB0aGlzLnNldERhdGEoZXZlbnQsIHN0cik7XG4gICAgdmFyIHRhcmdldEVsZW1lbnQgPSB0aGlzLmNyZWF0ZVRhcmdldEVsZW1lbnQoZWxlbWVudE5hbWUsIGpzb24pO1xuICAgIHRoaXMuZGRUYXJnZXQgPSBuZXcgRHJhZ0Ryb3BUYXJnZXRFbGVtZW50KFxuICAgICAgPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLFxuICAgICAgdGFyZ2V0RWxlbWVudCxcbiAgICAgIG51bGxcbiAgICApO1xuICAgIHRoaXMuZGRUYXJnZXQubmVzdGVkUGFuZWxEZXB0aCA9IERyYWdEcm9wSGVscGVyLm5lc3RlZFBhbmVsRGVwdGg7XG4gIH1cbiAgcHJpdmF0ZSBzZXREYXRhKGV2ZW50OiBEcmFnRXZlbnQsIHRleHQ6IHN0cmluZykge1xuICAgIGlmIChldmVudFtcIm9yaWdpbmFsRXZlbnRcIl0pIHtcbiAgICAgIGV2ZW50ID0gZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcIlRleHRcIiwgdGV4dCk7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwiY29weVwiO1xuICAgIH1cbiAgICBEcmFnRHJvcEhlbHBlci5kcmFnRGF0YSA9IHsgdGV4dDogdGV4dCB9O1xuICB9XG4gIHByaXZhdGUgZ2V0RGF0YShldmVudDogRHJhZ0V2ZW50KTogYW55IHtcbiAgICBpZiAoZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdKSB7XG4gICAgICBldmVudCA9IGV2ZW50W1wib3JpZ2luYWxFdmVudFwiXTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgdmFyIHRleHQgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcIlRleHRcIik7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBEcmFnRHJvcEhlbHBlci5kcmFnRGF0YS50ZXh0ID0gdGV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIERyYWdEcm9wSGVscGVyLmRyYWdEYXRhO1xuICB9XG4gIHByaXZhdGUgY2xlYXJEYXRhKCkge1xuICAgIC8vdGhpcy5kZFRhcmdldCA9IG51bGw7XG4gICAgRHJhZ0Ryb3BIZWxwZXIuZHJhZ0RhdGEgPSB7IHRleHQ6IFwiXCIsIGpzb246IG51bGwgfTtcbiAgICB2YXIgcHJldiA9IERyYWdEcm9wSGVscGVyLnByZXZFdmVudDtcbiAgICBwcmV2LmVsZW1lbnQgPSBudWxsO1xuICAgIHByZXYueCA9IC0xO1xuICAgIHByZXYueSA9IC0xO1xuICAgIHRoaXMucHJldkNvb3JkaW5hdGVzLnggPSAtMTtcbiAgICB0aGlzLnByZXZDb29yZGluYXRlcy55ID0gLTE7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9kcmFnZHJvcGhlbHBlci50cyIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbi8vaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBkZWZhdWx0U3RyaW5ncyB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxuZXhwb3J0IHZhciBlblN0cmluZ3MgPSB7XG4gIC8vc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIkVkaXRcIixcbiAgICBkcm9wUXVlc3Rpb246IFwiUGxlYXNlIGRyb3AgYSBxdWVzdGlvbiBoZXJlIGZyb20gdGhlIFRvb2xib3ggb24gdGhlIGxlZnQuXCIsXG4gICAgY29weTogXCJDb3B5XCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIkFkZCB0byB0b29sYm94XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiRGVsZXRlIFBhbmVsXCIsXG4gICAgZGVsZXRlUXVlc3Rpb246IFwiRGVsZXRlIFF1ZXN0aW9uXCIsXG4gICAgY29udmVydFRvOiBcIkNvbnZlcnQgdG9cIixcbiAgICBkcmFnOiBcIkRyYWcgZWxlbWVudFwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGRlZmF1bHQ6IFwiRGVmYXVsdFwiLFxuICAgIGNoZWNrYm94OiBcIkNoZWNrYm94XCIsXG4gICAgY29tbWVudDogXCJDb21tZW50XCIsXG4gICAgZHJvcGRvd246IFwiRHJvcGRvd25cIixcbiAgICBmaWxlOiBcIkZpbGVcIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBtYXRyaXg6IFwiTWF0cml4IChzaW5nbGUgY2hvaWNlKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIk1hdHJpeCAobXVsdGlwbGUgY2hvaWNlKVwiLFxuICAgIG1hdHJpeGR5bmFtaWM6IFwiTWF0cml4IChkeW5hbWljIHJvd3MpXCIsXG4gICAgbXVsdGlwbGV0ZXh0OiBcIk11bHRpcGxlIFRleHRcIixcbiAgICBwYW5lbDogXCJQYW5lbFwiLFxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5lbCAoZHluYW1pYyBwYW5lbHMpXCIsXG4gICAgcmFkaW9ncm91cDogXCJSYWRpb2dyb3VwXCIsXG4gICAgcmF0aW5nOiBcIlJhdGluZ1wiLFxuICAgIHRleHQ6IFwiU2luZ2xlIElucHV0XCIsXG4gICAgYm9vbGVhbjogXCJCb29sZWFuXCIsXG4gICAgZXhwcmVzc2lvbjogXCJFeHByZXNzaW9uXCJcbiAgfSxcbiAgLy9TdHJpbmdzIGluIEVkaXRvclxuICBlZDoge1xuICAgIHN1cnZleTogXCJTdXJ2ZXlcIixcbiAgICBzZXR0aW5nczogXCJTdXJ2ZXkgU2V0dGluZ3NcIixcbiAgICBlZGl0U3VydmV5OiBcIkVkaXQgU3VydmV5XCIsXG4gICAgYWRkTmV3UGFnZTogXCJBZGQgTmV3IFBhZ2VcIixcbiAgICBtb3ZlUmlnaHQ6IFwiU2Nyb2xsIHRvIHRoZSBSaWdodFwiLFxuICAgIG1vdmVMZWZ0OiBcIlNjcm9sbCB0byB0aGUgTGVmdFwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwiRGVsZXRlIFBhZ2VcIixcbiAgICBlZGl0UGFnZTogXCJFZGl0IFBhZ2VcIixcbiAgICBlZGl0OiBcIkVkaXRcIixcbiAgICBuZXdQYWdlTmFtZTogXCJwYWdlXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcInF1ZXN0aW9uXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcInBhbmVsXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0IFN1cnZleVwiLFxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJUZXN0IFN1cnZleSBBZ2FpblwiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCJTdXJ2ZXkgd2lkdGg6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtYmVkIFN1cnZleVwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiU2F2ZSBTdXJ2ZXlcIixcbiAgICBkZXNpZ25lcjogXCJTdXJ2ZXkgRGVzaWduZXJcIixcbiAgICBqc29uRWRpdG9yOiBcIkpTT04gRWRpdG9yXCIsXG4gICAgdW5kbzogXCJVbmRvXCIsXG4gICAgcmVkbzogXCJSZWRvXCIsXG4gICAgb3B0aW9uczogXCJPcHRpb25zXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiR2VuZXJhdGUgVmFsaWQgSlNPTlwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkdlbmVyYXRlIFJlYWRhYmxlIEpTT05cIixcbiAgICB0b29sYm94OiBcIlRvb2xib3hcIixcbiAgICB0b29sYm94R2VuZXJhbENhdGVnb3J5OiBcIkdlbmVyYWxcIixcbiAgICBkZWxTZWxPYmplY3Q6IFwiRGVsZXRlIHNlbGVjdGVkIG9iamVjdFwiLFxuICAgIGVkaXRTZWxPYmplY3Q6IFwiRWRpdCBzZWxlY3RlZCBvYmplY3RcIixcbiAgICBjb3JyZWN0SlNPTjogXCJQbGVhc2UgY29ycmVjdCBKU09OLlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwiU3VydmV5IFJlc3VsdDogXCIsXG4gICAgbW9kaWZpZWQ6IFwiTW9kaWZpZWRcIixcbiAgICBzYXZpbmc6IFwiU2F2aW5nXCIsXG4gICAgc2F2ZWQ6IFwiU2F2ZWRcIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJSZXF1aXJlZD9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJBcHBseVwiLFxuICAgIG9rOiBcIk9LXCIsXG4gICAgY2FuY2VsOiBcIkNhbmNlbFwiLFxuICAgIHJlc2V0OiBcIlJlc2V0XCIsXG4gICAgY2xvc2U6IFwiQ2xvc2VcIixcbiAgICBkZWxldGU6IFwiRGVsZXRlXCIsXG4gICAgYWRkTmV3OiBcIkFkZCBOZXdcIixcbiAgICBhZGRJdGVtOiBcIkNsaWNrIHRvIGFkZCBhbiBpdGVtLi4uXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlJlbW92ZSBBbGxcIixcbiAgICBlZGl0OiBcIkVkaXRcIixcbiAgICBpdGVtVmFsdWVFZGl0OiBcIlZpc2libGUgSWZcIixcbiAgICBlZGl0Q2hvaWNlczogXCJFZGl0IENob2ljZXNcIixcbiAgICBtb3ZlOiBcIk1vdmVcIixcbiAgICBlbXB0eTogXCI8ZW1wdHk+XCIsXG4gICAgbm90RW1wdHk6IFwiPGVkaXQgdmFsdWU+XCIsXG4gICAgZmFzdEVudHJ5OiBcIkZhc3QgRW50cnlcIixcbiAgICBmb3JtRW50cnk6IFwiRm9ybSBFbnRyeVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIlRlc3QgdGhlIHNlcnZpY2VcIixcbiAgICBjb25kaXRpb25TZWxlY3RRdWVzdGlvbjogXCJTZWxlY3QgcXVlc3Rpb24uLi5cIixcbiAgICBjb25kaXRpb25WYWx1ZVF1ZXN0aW9uVGl0bGU6IFwiUGxlYXNlIGVudGVyL3NlbGVjdCB0aGUgdmFsdWVcIixcbiAgICBjb25kaXRpb25CdXR0b25BZGQ6IFwiQWRkXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCJSZXBsYWNlXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgIFwiUGxlYXNlIGVudGVyIGEgYm9vbGVhbiBleHByZXNzaW9uLiBJdCBzaG91bGQgcmV0dXJuIHRydWUgdG8ga2VlcCB0aGUgcXVlc3Rpb24vcGFnZSB2aXNpYmxlLiBGb3IgZXhhbXBsZToge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gKiB7cXVlc3Rpb240fSAgPiAyMCBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCJQbGVhc2UgZW50ZXIgYW4gZXhwcmVzc2lvbi4gWW91IG1heSB1c2UgY3VybHkgYnJhY2tldHMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcXVlc3Rpb24gdmFsdWVzOiAne3F1ZXN0aW9uMX0gKyB7cXVlc3Rpb24yfScsICcoe3ByaWNlfSp7cXVhbnRpdHl9KSAqICgxMDAgLSB7ZGlzY291bnR9KSdcIixcbiAgICBhY2VFZGl0b3JIZWxwOiBcIlByZXNzIGN0cmwrc3BhY2UgdG8gZ2V0IGV4cHJlc3Npb24gY29tcGxldGlvbiBoaW50XCIsXG4gICAgYWNlRWRpdG9yUm93VGl0bGU6IFwiQ3VycmVudCByb3dcIixcbiAgICBhY2VFZGl0b3JQYW5lbFRpdGxlOiBcIkN1cnJlbnQgcGFuZWxcIixcbiAgICBzaG93TW9yZTogXCJGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvblwiLFxuICAgIGNvbmRpdGlvblNob3dNb3JlVXJsOlxuICAgICAgXCJodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeVBhcmFtZXRlcj9pZD1RdWVzdGlvbkJhc2UmcGFyYW1ldGVyPXZpc2libGVJZlwiLFxuICAgIGFzc2lzdGFudFRpdGxlOiBcIkF2YWlsYWJsZSBxdWVzdGlvbnM6XCIsXG4gICAgY2VsbHNFbXB0eVJvd3NDb2x1bW5zOiBcIlRoZXJlIGlzIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgY29sdW1uIG9yIHJvd1wiLFxuXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIlBsZWFzZSBlbnRlciBhIHZhbHVlXCIsXG4gICAgdmFsdWU6IFwiVmFsdWVcIixcbiAgICB0ZXh0OiBcIlRleHRcIixcbiAgICBjb2x1bW5FZGl0OiBcIkVkaXQgY29sdW1uOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCJFZGl0IGl0ZW06IHswfVwiLFxuXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwiUGF0aFwiLFxuICAgIHZhbHVlTmFtZTogXCJWYWx1ZSBuYW1lXCIsXG4gICAgdGl0bGVOYW1lOiBcIlRpdGxlIG5hbWVcIixcblxuICAgIGhhc090aGVyOiBcIkhhcyBvdGhlciBpdGVtXCIsXG4gICAgb3RoZXJUZXh0OiBcIk90aGVyIGl0ZW0gdGV4dFwiLFxuICAgIG5hbWU6IFwiTmFtZVwiLFxuICAgIHRpdGxlOiBcIlRpdGxlXCIsXG4gICAgY2VsbFR5cGU6IFwiQ2VsbCB0eXBlXCIsXG4gICAgY29sQ291bnQ6IFwiQ29sdW1uIGNvdW50XCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIlNlbGVjdCBjaG9pY2VzIG9yZGVyXCIsXG4gICAgdmlzaWJsZTogXCJJcyB2aXNpYmxlP1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwiSXMgcmVxdWlyZWQ/XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJJcyBzdGFydCB3aXRoIG5ldyBsaW5lP1wiLFxuICAgIHJvd3M6IFwiUm93IGNvdW50XCIsXG4gICAgcGxhY2VIb2xkZXI6IFwiSW5wdXQgcGxhY2UgaG9sZGVyXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiSXMgaW1hZ2UgcHJldmlldyBzaG93bj9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiU3RvcmUgZmlsZSBjb250ZW50IGluIEpTT04gcmVzdWx0IGFzIHRleHRcIixcbiAgICBtYXhTaXplOiBcIk1heGltdW0gZmlsZSBzaXplIGluIGJ5dGVzXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiSW1hZ2UgaGVpZ2h0XCIsXG4gICAgaW1hZ2VXaWR0aDogXCJJbWFnZSB3aWR0aFwiLFxuICAgIHJvd0NvdW50OiBcIlJvdyBjb3VudFwiLFxuICAgIGNvbHVtbnNMb2NhdGlvbjogXCJDb2x1bW5zIGxvY2F0aW9uXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiQWRkIHJvdyBidXR0b24gbG9jYXRpb25cIixcbiAgICBhZGRSb3dUZXh0OiBcIkFkZCByb3cgYnV0dG9uIHRleHRcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcIlJlbW92ZSByb3cgYnV0dG9uIHRleHRcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiTWluaW11bSByYXRlIGRlc2NyaXB0aW9uXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIk1heGltdW0gcmF0ZSBkZXNjcmlwdGlvblwiLFxuICAgIGlucHV0VHlwZTogXCJJbnB1dCB0eXBlXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiT3B0aW9ucyBjYXB0aW9uXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIkRlZmF1bHQgdmFsdWVcIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwiRGVmYXVsdCBjZWxscyB0ZXh0c1wiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiRWRpdCBzdXJ2ZXkgc2V0dGluZ3NcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdDogezB9XCIsXG5cbiAgICAvL3N1cnZleVxuICAgIHNob3dUaXRsZTogXCJTaG93L2hpZGUgdGl0bGVcIixcbiAgICBsb2NhbGU6IFwiRGVmYXVsdCBsYW5ndWFnZVwiLFxuICAgIG1vZGU6IFwiTW9kZSAoZWRpdC9yZWFkIG9ubHkpXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiQ2xlYXIgaW52aXNpYmxlIHZhbHVlc1wiLFxuICAgIGNvb2tpZU5hbWU6IFwiQ29va2llIG5hbWUgKHRvIGRpc2FibGUgcnVuIHN1cnZleSB0d28gdGltZXMgbG9jYWxseSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJTZW5kIHN1cnZleSByZXN1bHRzIG9uIHBhZ2UgbmV4dFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIlN0b3JlICdvdGhlcnMnIHZhbHVlIGluIHNlcGFyYXRlIGZpZWxkXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiU2hvdyBwYWdlIHRpdGxlc1wiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJTaG93IHBhZ2UgbnVtYmVyc1wiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCJQYWdlIHByZXZpb3VzIGJ1dHRvbiB0ZXh0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlBhZ2UgbmV4dCBidXR0b24gdGV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZSBidXR0b24gdGV4dFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydCBidXR0b24gdGV4dFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJTaG93IG5hdmlnYXRpb24gYnV0dG9ucyAoZGVmYXVsdCBuYXZpZ2F0aW9uKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIlNob3cgcHJldmlvdXMgYnV0dG9uICh1c2VyIG1heSByZXR1cm4gb24gcHJldmlvdXMgcGFnZSlcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiVGhlIGZpcnN0IHBhZ2UgaW4gdGhlIHN1cnZleSBpcyBhIHN0YXJ0ZWQgcGFnZS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJTaG93IHRoZSBjb21wbGV0ZWQgcGFnZSBhdCB0aGUgZW5kIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIk9uIGFuc3dlcmluZyBhbGwgcXVlc3Rpb25zLCBnbyB0byB0aGUgbmV4dCBwYWdlIGF1dG9tYXRpY2FsbHlcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiU2hvdyBwcm9ncmVzcyBiYXJcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiUXVlc3Rpb24gdGl0bGUgbG9jYXRpb25cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiVGhlIHF1ZXN0aW9uIHJlcXVpcmVkIHN5bWJvbChzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJRdWVzdGlvbiBzdGFydCBpbmRleCAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIlNob3cgcXVlc3Rpb24gbnVtYmVyc1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwiUXVlc3Rpb24gdGl0bGUgdGVtcGxhdGUsIGRlZmF1bHQgaXM6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiUXVlc3Rpb24gZXJyb3IgbG9jYXRpb25cIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiRm9jdXMgZmlyc3QgcXVlc3Rpb24gb24gY2hhbmdpbmcgdGhlIHBhZ2VcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJFbGVtZW50cyBvcmRlciBvbiB0aGUgcGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJNYXhpbXVtIHRpbWUgdG8gZmluaXNoIHRoZSBzdXJ2ZXlcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIk1heGltdW0gdGltZSB0byBmaW5pc2ggYSBwYWdlIGluIHRoZSBzdXJ2ZXlcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJTaG93IHRpbWVyIHBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIlNob3cgdGltZXIgcGFuZWwgbW9kZVwiLFxuICAgIHJlbmRlck1vZGU6IFwiUmVuZGVyIG1vZGVcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIkFsbG93IGFkZGluZyBhIHBhbmVsXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJBbGxvdyByZW1vdmluZyB0aGUgcGFuZWxcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWRkaW5nIHBhbmVsIHRleHRcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiUmVtb3ZpbmcgcGFuZWwgdGV4dFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJTaG93IGFsbCBlbGVtZW50cyBvbiBvbmUgcGFnZVwiLFxuXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJHZW5lcmFsXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCJPcHRpb25zXCIsXG4gICAgICBodG1sOiBcIkh0bWwgRWRpdG9yXCIsXG4gICAgICBjb2x1bW5zOiBcIkNvbHVtbnNcIixcbiAgICAgIHJvd3M6IFwiUm93c1wiLFxuICAgICAgY2hvaWNlczogXCJDaG9pY2VzXCIsXG4gICAgICBpdGVtczogXCJJdGVtc1wiLFxuICAgICAgdmlzaWJsZUlmOiBcIlZpc2libGUgSWZcIixcbiAgICAgIGVuYWJsZUlmOiBcIkVuYWJsZSBJZlwiLFxuICAgICAgcmF0ZVZhbHVlczogXCJSYXRlIFZhbHVlc1wiLFxuICAgICAgY2hvaWNlc0J5VXJsOiBcIkNob2ljZXMgZnJvbSBXZWJcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiRGVmYXVsdCBDaG9pY2VzXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJUZXh0IElucHV0c1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGF0b3JzXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmlnYXRpb25cIixcbiAgICAgIHF1ZXN0aW9uOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkNvbXBsZXRlZCBIdG1sXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJMb2FkaW5nIEh0bWxcIixcbiAgICAgIHRpbWVyOiBcIlRpbWVyL1F1aXpcIixcbiAgICAgIHRyaWdnZXJzOiBcIlRyaWdnZXJzXCIsXG4gICAgICB0ZW1wbGF0ZVRpdGxlOiBcIlRlbXBsYXRlIHRpdGxlXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCJFZGl0IHByb3BlcnR5ICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyBJdGVtczogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwiUGxlYXNlLCBlbnRlciB0aGUgdmFsdWUuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiVGhlcmUgaXMgbm8gYW55IHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJQbGVhc2UgY3JlYXRlIGEgdHJpZ2dlclwiLFxuICAgIHRyaWdnZXJPbjogXCJPbiBcIixcbiAgICB0cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZTogXCJNYWtlIHBhZ2VzIHZpc2libGU6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIk1ha2UgZWxlbWVudHMgdmlzaWJsZTpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIkNvbXBsZXRlIHRoZSBzdXJ2ZXkgaWYgc3VjY2VlZC5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIlRoZSB0cmlnZ2VyIGlzIG5vdCBzZXRcIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiUnVuIGlmXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDaGFuZ2UgdmFsdWUgb2Y6IFwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJ0bzogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiRG8gbm90IHB1dCB0aGUgdmFyaWFibGUgaW50byB0aGUgc3VydmV5IHJlc3VsdC5cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwidHJ1ZVwiLFxuICAgIGZhbHNlOiBcImZhbHNlXCIsXG4gICAgaW5oZXJpdDogXCJpbmhlcml0XCIsXG4gICAgc2hvdzogXCJzaG93XCIsXG4gICAgaGlkZTogXCJoaWRlXCIsXG4gICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgaW5pdGlhbDogXCJpbml0aWFsXCIsXG4gICAgcmFuZG9tOiBcInJhbmRvbVwiLFxuICAgIGNvbGxhcHNlZDogXCJjb2xsYXBzZWRcIixcbiAgICBleHBhbmRlZDogXCJleHBhbmRlZFwiLFxuICAgIG5vbmU6IFwibm9uZVwiLFxuICAgIGFzYzogXCJhc2NlbmRpbmdcIixcbiAgICBkZXNjOiBcImRlc2NlbmRpbmdcIixcbiAgICBpbmRldGVybWluYXRlOiBcImluZGV0ZXJtaW5hdGVcIixcbiAgICBkZWNpbWFsOiBcImRlY2ltYWxcIixcbiAgICBjdXJyZW5jeTogXCJjdXJyZW5jeVwiLFxuICAgIHBlcmNlbnQ6IFwicGVyY2VudFwiLFxuICAgIGZpcnN0RXhwYW5kZWQ6IFwiZmlyc3RFeHBhbmRlZFwiLFxuICAgIG9mZjogXCJvZmZcIixcbiAgICBvblBhbmVsOiBcIm9uUGFuZWxcIixcbiAgICBvblN1cnZleTogXCJvblN1cnZleVwiLFxuICAgIGxpc3Q6IFwibGlzdFwiLFxuICAgIHByb2dyZXNzVG9wOiBcInByb2dyZXNzVG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206IFwicHJvZ3Jlc3NCb3R0b21cIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJwcm9ncmVzc1RvcEJvdHRvbVwiLFxuICAgIGhvcml6b250YWw6IFwiaG9yaXpvbnRhbFwiLFxuICAgIHZlcnRpY2FsOiBcInZlcnRpY2FsXCIsXG4gICAgdG9wOiBcInRvcFwiLFxuICAgIGJvdHRvbTogXCJib3R0b21cIixcbiAgICB0b3BCb3R0b206IFwidG9wIGFuZCBib3R0b21cIixcbiAgICBsZWZ0OiBcImxlZnRcIixcbiAgICBjb2xvcjogXCJjb2xvclwiLFxuICAgIGRhdGU6IFwiZGF0ZVwiLFxuICAgIGRhdGV0aW1lOiBcImRhdGV0aW1lXCIsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgZW1haWw6IFwiZW1haWxcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG51bWJlcjogXCJudW1iZXJcIixcbiAgICBwYXNzd29yZDogXCJwYXNzd29yZFwiLFxuICAgIHJhbmdlOiBcInJhbmdlXCIsXG4gICAgdGVsOiBcInRlbFwiLFxuICAgIHRleHQ6IFwidGV4dFwiLFxuICAgIHRpbWU6IFwidGltZVwiLFxuICAgIHVybDogXCJ1cmxcIixcbiAgICB3ZWVrOiBcIndlZWtcIixcbiAgICBoaWRkZW46IFwiaGlkZGVuXCIsXG4gICAgb246IFwib25cIixcbiAgICBvblBhZ2U6IFwib25QYWdlXCIsXG4gICAgZWRpdDogXCJlZGl0XCIsXG4gICAgZGlzcGxheTogXCJkaXNwbGF5XCIsXG4gICAgb25Db21wbGV0ZTogXCJvbkNvbXBsZXRlXCIsXG4gICAgb25IaWRkZW46IFwib25IaWRkZW5cIixcbiAgICBhbGw6IFwiYWxsXCIsXG4gICAgcGFnZTogXCJwYWdlXCIsXG4gICAgc3VydmV5OiBcInN1cnZleVwiLFxuICAgIG9uTmV4dFBhZ2U6IFwib25OZXh0UGFnZVwiLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBcIm9uVmFsdWVDaGFuZ2VkXCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJpcyBlbXB0eVwiLFxuICAgIG5vdGVtcHR5OiBcImlzIG5vdCBlbXB0eVwiLFxuICAgIGVxdWFsOiBcImVxdWFsc1wiLFxuICAgIG5vdGVxdWFsOiBcIm5vdCBlcXVhbHNcIixcbiAgICBjb250YWluczogXCJjb250YWluc1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcIm5vdCBjb250YWluc1wiLFxuICAgIGdyZWF0ZXI6IFwiZ3JlYXRlclwiLFxuICAgIGxlc3M6IFwibGVzc1wiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcImdyZWF0ZXIgb3IgZXF1YWxzXCIsXG4gICAgbGVzc29yZXF1YWw6IFwibGVzcyBvciBlcXVhbHNcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiVXNlIEFuZ3VsYXIgdmVyc2lvblwiLFxuICAgIGpxdWVyeTogXCJVc2UgalF1ZXJ5IHZlcnNpb25cIixcbiAgICBrbm9ja291dDogXCJVc2UgS25vY2tvdXQgdmVyc2lvblwiLFxuICAgIHJlYWN0OiBcIlVzZSBSZWFjdCB2ZXJzaW9uXCIsXG4gICAgdnVlOiBcIlVzZSBWdWUgdmVyc2lvblwiLFxuICAgIGJvb3RzdHJhcDogXCJGb3IgYm9vdHN0cmFwIGZyYW1ld29ya1wiLFxuICAgIHN0YW5kYXJkOiBcIk5vIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiU2hvdyBzdXJ2ZXkgb24gYSBwYWdlXCIsXG4gICAgc2hvd0luV2luZG93OiBcIlNob3cgc3VydmV5IGluIGEgd2luZG93XCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiTG9hZCBTdXJ2ZXkgSlNPTiBmcm9tIHNlcnZlclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgYW5kIHN0eWxlc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJTZWxlY3QgdGhlIHBhZ2UgdG8gdGVzdCBpdDpcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiYW5zd2VyIGNvdW50XCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgZXhwcmVzc2lvbnZhbGlkYXRvcjogXCJleHByZXNzaW9uXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRleHRcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJjb21wbGV0ZSBzdXJ2ZXlcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwic2V0IHZhbHVlXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiY2hhbmdlIHZpc2liaWxpdHlcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcInRpdGxlXCIsXG4gICAgICB0aXRsZTogXCJMZWF2ZSBpdCBlbXB0eSwgaWYgaXQgaXMgdGhlIHNhbWUgYXMgJ05hbWUnXCJcbiAgICB9LFxuXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5OiBcIm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eVwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIm1heFRpbWVUb0ZpbmlzaFwiLFxuXG4gICAgdmlzaWJsZTogXCJ2aXNpYmxlXCIsXG4gICAgdmlzaWJsZUlmOiBcInZpc2libGVJZlwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIixcbiAgICBkZXNjcmlwdGlvbjogXCJkZXNjcmlwdGlvblwiLFxuICAgIHN0YXRlOiBcInN0YXRlXCIsXG4gICAgaXNSZXF1aXJlZDogXCJpc1JlcXVpcmVkXCIsXG4gICAgaW5kZW50OiBcImluZGVudFwiLFxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJzdGFydFdpdGhOZXdMaW5lXCIsXG4gICAgaW5uZXJJbmRlbnQ6IFwiaW5uZXJJbmRlbnRcIixcbiAgICBwYWdlOiBcInBhZ2VcIixcblxuICAgIHdpZHRoOiBcIndpZHRoXCIsXG5cbiAgICBjb21tZW50VGV4dDogXCJjb21tZW50VGV4dFwiLFxuICAgIHZhbHVlTmFtZTogXCJ2YWx1ZU5hbWVcIixcbiAgICBlbmFibGVJZjogXCJlbmFibGVJZlwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJkZWZhdWx0VmFsdWVcIixcbiAgICBjb3JyZWN0QW5zd2VyOiBcImNvcnJlY3RBbnN3ZXJcIixcbiAgICByZWFkT25seTogXCJyZWFkT25seVwiLFxuICAgIHZhbGlkYXRvcnM6IFwidmFsaWRhdG9yc1wiLFxuICAgIHRpdGxlTG9jYXRpb246IFwidGl0bGVMb2NhdGlvblwiLFxuXG4gICAgaGFzQ29tbWVudDogXCJoYXNDb21tZW50XCIsXG4gICAgaGFzT3RoZXI6IFwiaGFzT3RoZXJcIixcbiAgICBjaG9pY2VzOiBcImNob2ljZXNcIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiY2hvaWNlc09yZGVyXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcImNob2ljZXNCeVVybFwiLFxuICAgIG90aGVyVGV4dDogXCJvdGhlclRleHRcIixcbiAgICBvdGhlckVycm9yVGV4dDogXCJvdGhlckVycm9yVGV4dFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsXG5cbiAgICBsYWJlbDogXCJsYWJlbFwiLFxuICAgIHNob3dUaXRsZTogXCJzaG93VGl0bGVcIixcbiAgICB2YWx1ZVRydWU6IFwidmFsdWVUcnVlXCIsXG4gICAgdmFsdWVGYWxzZTogXCJ2YWx1ZUZhbHNlXCIsXG5cbiAgICBjb2xzOiBcImNvbHNcIixcbiAgICByb3dzOiBcInJvd3NcIixcbiAgICBwbGFjZUhvbGRlcjogXCJwbGFjZUhvbGRlclwiLFxuXG4gICAgb3B0aW9uc0NhcHRpb246IFwib3B0aW9uc0NhcHRpb25cIixcblxuICAgIGV4cHJlc3Npb246IFwiZXhwcmVzc2lvblwiLFxuICAgIGZvcm1hdDogXCJmb3JtYXRcIixcbiAgICBkaXNwbGF5U3R5bGU6IFwiZGlzcGxheVN0eWxlXCIsXG4gICAgY3VycmVuY3k6IFwiY3VycmVuY3lcIixcbiAgICB1c2VHcm91cGluZzogXCJ1c2VHcm91cGluZ1wiLFxuXG4gICAgc2hvd1ByZXZpZXc6IFwic2hvd1ByZXZpZXdcIixcbiAgICBhbGxvd011bHRpcGxlOiBcImFsbG93TXVsdGlwbGVcIixcbiAgICBpbWFnZUhlaWdodDogXCJpbWFnZUhlaWdodFwiLFxuICAgIGltYWdlV2lkdGg6IFwiaW1hZ2VXaWR0aFwiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJzdG9yZURhdGFBc1RleHRcIixcbiAgICBtYXhTaXplOiBcIm1heFNpemVcIixcblxuICAgIGh0bWw6IFwiaHRtbFwiLFxuXG4gICAgY29sdW1uczogXCJjb2x1bW5zXCIsXG4gICAgY2VsbHM6IFwiY2VsbHNcIixcbiAgICBpc0FsbFJvd1JlcXVpcmVkOiBcImlzQWxsUm93UmVxdWlyZWRcIixcblxuICAgIGhvcml6b250YWxTY3JvbGw6IFwiaG9yaXpvbnRhbFNjcm9sbFwiLFxuICAgIGNlbGxUeXBlOiBcImNlbGxUeXBlXCIsXG4gICAgY29sdW1uc0xvY2F0aW9uOiBcImNvbHVtbnNMb2NhdGlvblwiLFxuICAgIGNvbHVtbkNvbENvdW50OiBcImNvbHVtbkNvbENvdW50XCIsXG4gICAgY29sdW1uTWluV2lkdGg6IFwiY29sdW1uTWluV2lkdGhcIixcblxuICAgIHJvd0NvdW50OiBcInJvd0NvdW50XCIsXG4gICAgbWluUm93Q291bnQ6IFwibWluUm93Q291bnRcIixcbiAgICBtYXhSb3dDb3VudDogXCJtYXhSb3dDb3VudFwiLFxuICAgIGtleU5hbWU6IFwia2V5TmFtZVwiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiY29uZmlybURlbGV0ZVwiLFxuICAgIGNvbmZpcm1EZWxldGVUZXh0OiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiYWRkUm93TG9jYXRpb25cIixcbiAgICBhZGRSb3dUZXh0OiBcImFkZFJvd1RleHRcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcInJlbW92ZVJvd1RleHRcIixcblxuICAgIGl0ZW1zOiBcIml0ZW1zXCIsXG4gICAgaXRlbVNpemU6IFwiaXRlbVNpemVcIixcbiAgICBjb2xDb3VudDogXCJjb2xDb3VudFwiLFxuXG4gICAgdGVtcGxhdGVUaXRsZTogXCJ0ZW1wbGF0ZVRpdGxlXCIsXG4gICAgdGVtcGxhdGVEZXNjcmlwdGlvbjogXCJ0ZW1wbGF0ZURlc2NyaXB0aW9uXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCJhbGxvd0FkZFBhbmVsXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJhbGxvd1JlbW92ZVBhbmVsXCIsXG4gICAgcGFuZWxDb3VudDogXCJwYW5lbENvdW50XCIsXG4gICAgbWluUGFuZWxDb3VudDogXCJtaW5QYW5lbENvdW50XCIsXG4gICAgbWF4UGFuZWxDb3VudDogXCJtYXhQYW5lbENvdW50XCIsXG4gICAgcGFuZWxzU3RhdGU6IFwicGFuZWxzU3RhdGVcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwicGFuZWxBZGRUZXh0XCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcInBhbmVsUmVtb3ZlVGV4dFwiLFxuICAgIHBhbmVsUHJldlRleHQ6IFwicGFuZWxQcmV2VGV4dFwiLFxuICAgIHBhbmVsTmV4dFRleHQ6IFwicGFuZWxOZXh0VGV4dFwiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgIHNob3dSYW5nZUluUHJvZ3Jlc3M6IFwic2hvd1JhbmdlSW5Qcm9ncmVzc1wiLFxuICAgIHJlbmRlck1vZGU6IFwicmVuZGVyTW9kZVwiLFxuICAgIHRlbXBsYXRlVGl0bGVMb2NhdGlvbjogXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIixcblxuICAgIHJhdGVWYWx1ZXM6IFwicmF0ZVZhbHVlc1wiLFxuICAgIHJhdGVNaW46IFwicmF0ZU1pblwiLFxuICAgIHJhdGVNYXg6IFwicmF0ZU1heFwiLFxuICAgIHJhdGVTdGVwOiBcInJhdGVTdGVwXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJtYXhSYXRlRGVzY3JpcHRpb25cIixcblxuICAgIGlucHV0VHlwZTogXCJpbnB1dFR5cGVcIixcbiAgICBzaXplOiBcInNpemVcIixcblxuICAgIGxvY2FsZTogXCJsb2NhbGVcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCJjb21wbGV0ZWRIdG1sXCIsXG4gICAgY29tcGxldGVkQmVmb3JlSHRtbDogXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsXG4gICAgbG9hZGluZ0h0bWw6IFwibG9hZGluZ0h0bWxcIixcbiAgICB0cmlnZ2VyczogXCJ0cmlnZ2Vyc1wiLFxuICAgIGNvb2tpZU5hbWU6IFwiY29va2llTmFtZVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcInNob3dQcmV2QnV0dG9uXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwic2hvd1BhZ2VUaXRsZXNcIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJzaG93Q29tcGxldGVkUGFnZVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJzaG93UGFnZU51bWJlcnNcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgIG1vZGU6IFwibW9kZVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLFxuICAgIGNoZWNrRXJyb3JzTW9kZTogXCJjaGVja0Vycm9yc01vZGVcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJzdGFydFN1cnZleVRleHRcIixcbiAgICBwYWdlUHJldlRleHQ6IFwicGFnZVByZXZUZXh0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcInBhZ2VOZXh0VGV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJjb21wbGV0ZVRleHRcIixcbiAgICByZXF1aXJlZFRleHQ6IFwicmVxdWlyZWRUZXh0XCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcImlzU2luZ2xlUGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwibWF4VGltZVRvRmluaXNoUGFnZVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcInNob3dUaW1lclBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuXG4gICAgdGV4dDogXCJ0ZXh0XCIsXG4gICAgbWluVmFsdWU6IFwibWluaW11bSB2YWx1ZVwiLFxuICAgIG1heFZhbHVlOiBcIm1heGltdW0gdmFsdWVcIixcbiAgICBtaW5MZW5ndGg6IFwibWludW11bSBsZW5ndGhcIixcbiAgICBtYXhMZW5ndGg6IFwibWF4aW11bSBsZW5ndGhcIixcbiAgICBhbGxvd0RpZ2l0czogXCJhbGxvdyBkaWdpdHNcIixcbiAgICBtaW5Db3VudDogXCJtaW51bXVtIGNvdW50XCIsXG4gICAgbWF4Q291bnQ6IFwibWF4aW11bSBjb3VudFwiLFxuICAgIHJlZ2V4OiBcInJlZ3VsYXIgZXhwcmVzc2lvblwiXG4gIH1cbn07XG4vL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlLiBZb3Ugc2hvdWxkIHJlcGxhY2UgXCJlblwiIGFuZCBlblN0cmluZ3Mgd2l0aCB5b3VyIGxvY2FsZSAoXCJmclwiLCBcImRlXCIgYW5kIHNvIG9uKSBhbmQgeW91ciB2YXJpYWJsZS5cbi8vZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlblwiXSA9IGVuU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZW5nbGlzaC50cyIsImltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5Q3VzdG9tRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRKU09OVmFsdWU6IGFueTtcbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChuZXdWYWx1ZTogYW55KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSwgd2lkZ2V0SlNPTjogYW55ID0gbnVsbCkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLndpZGdldEpTT05WYWx1ZSA9IHdpZGdldEpTT047XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXNbXCJrb0FmdGVyUmVuZGVyXCJdID0gZnVuY3Rpb24oZWwsIGNvbikge1xuICAgICAgc2VsZi5kb0FmdGVyUmVuZGVyKGVsLCBjb24pO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRKU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SlNPTlZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5naW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZyA9IHRydWU7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5vblZhbHVlQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZENhbGxiYWNrKHRoaXMuZWRpdGluZ1ZhbHVlKTtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgd2lkZ2V0UmVuZGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SlNPTiA/IHRoaXMud2lkZ2V0SlNPTi5yZW5kZXIgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKGVsZW1lbnRzLCBjb24pIHtcbiAgICB2YXIgZWwgPSBlbGVtZW50c1swXTtcbiAgICBpZiAoZWwgJiYgdGhpcy53aWRnZXRSZW5kZXIpIHRoaXMud2lkZ2V0UmVuZGVyKHRoaXMsIGVsKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUN1c3RvbUVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleU9iamVjdFByb3BlcnR5IH0gZnJvbSBcIi4uL29iamVjdFByb3BlcnR5XCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gIElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWxwZXIgfSBmcm9tIFwiLi4vc3VydmV5SGVscGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5IHtcbiAgcHJpdmF0ZSBvYmplY3RQcm9wZXJ0eVZhbHVlOiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eTtcbiAga29WYWx1ZTogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBwdWJsaWMgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyA9IG51bGwsXG4gICAgaXNUYWJQcm9wZXJ0eTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm9iamVjdFByb3BlcnR5VmFsdWUgPSBuZXcgU3VydmV5T2JqZWN0UHJvcGVydHkodGhpcy5wcm9wZXJ0eSwgbnVsbCk7XG4gICAgdGhpcy5lZGl0b3IuaXNUYWJQcm9wZXJ0eSA9IGlzVGFiUHJvcGVydHk7XG4gICAgdGhpcy5lZGl0b3Iub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKCFkaXNwbGF5TmFtZSkge1xuICAgICAgZGlzcGxheU5hbWUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuXCIgKyB0aGlzLnByb3BlcnR5Lm5hbWUpO1xuICAgIH1cbiAgICBpZiAoZGlzcGxheU5hbWUpIHRoaXMuZWRpdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eS5vYmplY3QgPSBvYmo7XG4gICAgdGhpcy5lZGl0b3Iuc2V0dXAoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9iamVjdFByb3BlcnR5KCk6IFN1cnZleU9iamVjdFByb3BlcnR5IHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yKCk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0UHJvcGVydHkuZWRpdG9yO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaGFzRXJyb3IoKTtcbiAgfVxuICBwdWJsaWMgYXBwbHkoKSB7XG4gICAgdGhpcy5lZGl0b3IuYXBwbHkoKTtcbiAgICB0aGlzLm9ialt0aGlzLnByb3BlcnR5Lm5hbWVdID0gdGhpcy5lZGl0b3Iua29WYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLmVkaXRvci5rb1ZhbHVlKHRoaXMucHJvcGVydHkuZ2V0UHJvcGVydHlWYWx1ZSh0aGlzLm9iaikpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVTaG93KCkge1xuICAgIHRoaXMuZWRpdG9yLmJlZm9yZVNob3coKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JSb3cge1xuICBwdWJsaWMgY2F0ZWdvcnk6IHN0cmluZztcbiAgcHVibGljIHByb3BlcnRpZXM6IEFycmF5PFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHk+ID0gW107XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlKSB7fVxuICBwdWJsaWMgYWRkUHJvcGVydHkoXG4gICAgcHJvcGVydHk6IGFueSxcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zLFxuICAgIGlzVGFiUHJvcGVydHk6IGJvb2xlYW5cbiAgKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzLnB1c2goXG4gICAgICBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eShcbiAgICAgICAgdGhpcy5vYmosXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgaXNUYWJQcm9wZXJ0eVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHZhciBpc0Vycm9yID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlzRXJyb3IgPSB0aGlzLnByb3BlcnRpZXNbaV0uaGFzRXJyb3IoKSB8fCBpc0Vycm9yO1xuICAgIH1cbiAgICByZXR1cm4gaXNFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0aWVzIHtcbiAgcHVibGljIGlzVGFiUHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBBcnJheTxTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5PjtcbiAgcHJpdmF0ZSBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrOiAoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKSA9PiBib29sZWFuO1xuICBwdWJsaWMgcm93czogQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JSb3c+ID0gW107XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlLFxuICAgIHByb3BlcnRpZXM6IEFycmF5PGFueT4sXG4gICAgb25DYW5TaG93UHJvcGVydHlDYWxsYmFjazogKFxuICAgICAgb2JqZWN0OiBhbnksXG4gICAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuICAgICkgPT4gYm9vbGVhbiA9IG51bGwsXG4gICAgcHVibGljIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbCxcbiAgICBwcml2YXRlIHRhYjogYW55ID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmlzVGFiUHJvcGVydHkgPSAhIXRhYjtcbiAgICB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2sgPSBvbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrO1xuICAgIHRoaXMucHJvcGVydGllcyA9IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhW1wiZ2V0UHJvcGVydGllc0J5T2JqXCJdXG4gICAgICA/IFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhW1wiZ2V0UHJvcGVydGllc0J5T2JqXCJdKHRoaXMub2JqKVxuICAgICAgOiBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKHRoaXMub2JqLmdldFR5cGUoKSk7XG4gICAgdGhpcy5idWlsZFJvd3MocHJvcGVydGllcyk7XG4gIH1cbiAgcHVibGljIGFwcGx5KCkge1xuICAgIHRoaXMucGVyZm9ybUZvckFsbFByb3BlcnRpZXMocCA9PiBwLmFwcGx5KCkpO1xuICB9XG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLnBlcmZvcm1Gb3JBbGxQcm9wZXJ0aWVzKHAgPT4gcC5yZXNldCgpKTtcbiAgfVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHtcbiAgICB0aGlzLnBlcmZvcm1Gb3JBbGxQcm9wZXJ0aWVzKHAgPT4gcC5iZWZvcmVTaG93KCkpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICB2YXIgaXNFcnJvciA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpc0Vycm9yID0gdGhpcy5yb3dzW2ldLmhhc0Vycm9yKCkgfHwgaXNFcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIGlzRXJyb3I7XG4gIH1cbiAgcHJpdmF0ZSBwZXJmb3JtRm9yQWxsUHJvcGVydGllcyhcbiAgICBmdW5jOiAocDogU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eSkgPT4gdm9pZFxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnJvd3NbaV0ucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnJvd3NbaV0ucHJvcGVydGllc1tqXTtcbiAgICAgICAgZnVuYyhwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBidWlsZFJvd3MocHJvcGVydGllcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSB0aGlzLmdldE5hbWUocHJvcGVydGllc1tpXSk7XG4gICAgICB2YXIganNvblByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eShuYW1lKTtcbiAgICAgIGlmICghanNvblByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdldFJvd0J5Q2F0ZWdvcnkocHJvcGVydGllc1tpXS5jYXRlZ29yeSk7XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3JSb3codGhpcy5vYmopO1xuICAgICAgICBpZiAocHJvcGVydGllc1tpXS5jYXRlZ29yeSkgcm93LmNhdGVnb3J5ID0gcHJvcGVydGllc1tpXS5jYXRlZ29yeTtcbiAgICAgICAgdGhpcy5yb3dzLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICAgIHJvdy5hZGRQcm9wZXJ0eShcbiAgICAgICAganNvblByb3BlcnR5LFxuICAgICAgICBwcm9wZXJ0aWVzW2ldLnRpdGxlLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgIHRoaXMuaXNUYWJQcm9wZXJ0eVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXROYW1lKHByb3A6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFwcm9wKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3RyaW5nXCIpIHJldHVybiBwcm9wO1xuICAgIGlmIChwcm9wLm5hbWUpIHJldHVybiBwcm9wLm5hbWU7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRSb3dCeUNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICBpZiAoIWNhdGVnb3J5KSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucm93c1tpXS5jYXRlZ29yeSA9PSBjYXRlZ29yeSkgcmV0dXJuIHRoaXMucm93c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIGlmICghcHJvcGVydHlOYW1lKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJvcGVydHkgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLnRhYiAmJlxuICAgICAgcHJvcGVydHkubmFtZSA9PSB0aGlzLnRhYi5uYW1lICYmXG4gICAgICB0aGlzLnRhYi52aXNpYmxlID09PSB0cnVlXG4gICAgKVxuICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuaXNQcm9wZXJ0eVZpc2libGUoXG4gICAgICB0aGlzLm9iaixcbiAgICAgIHByb3BlcnR5LFxuICAgICAgdGhpcy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrXG4gICAgKVxuICAgICAgPyBwcm9wZXJ0eVxuICAgICAgOiBudWxsO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yUHJvcGVydGllcy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG4vKipcbiAqIFRoZSBUb29sYm94IGl0ZW0gZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUXVlc3Rpb25Ub29sYm94SXRlbSB7XG4gIC8qKlxuICAgKiBBbiB1bmlxdWUgbmFtZVxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogSWNvbiBuYW1lXG4gICAqL1xuICBpY29uTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEpTT04gdGhhdCB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBxdWVzdGlvbi9wYW5lbC4gVGhlICd0eXBlJyBhdHRyaWJ1dGUgaXMgcmVxdXJpZWQuXG4gICAqL1xuICBqc29uOiBhbnk7XG4gIC8qKlxuICAgKiBUb29sYm94IGl0ZW0gdGl0bGVcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUcnVlLCBpZiBhbiBlbmQgdXNlciBhZGRlZCB0aGlzIGl0ZW0gaW50byBUb29sYm94IGZyb20gdGhlIHN1cnZleVxuICAgKi9cbiAgaXNDb3BpZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb29sYm94IGl0ZW0gY2F0ZWdvcnkuIElmIGl0IGlzIGVtcHR5LCBpdCBnb2VzIHRvICdHZW5lcmFsJyBjYXRlZ29yeS5cbiAgICovXG4gIGNhdGVnb3J5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgVG9vbGJveCBpdGVtcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVG9vbGJveCB7XG4gIHByaXZhdGUgX29yZGVyZWRRdWVzdGlvbnMgPSBbXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJjaGVja2JveFwiLFxuICAgIFwicmFkaW9ncm91cFwiLFxuICAgIFwiZHJvcGRvd25cIixcbiAgICBcImNvbW1lbnRcIixcbiAgICBcInJhdGluZ1wiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiaHRtbFwiXG4gIF07XG5cbiAgLyoqXG4gICAqIE1vZGlmeSB0aGlzIGFycmF5IHRvIGNoYW5nZSB0aGUgdG9vbGJveCBpdGVtcyBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3JkZXJlZFF1ZXN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JkZXJlZFF1ZXN0aW9ucztcbiAgfVxuICBwdWJsaWMgc2V0IG9yZGVyZWRRdWVzdGlvbnMocXVlc3Rpb25zKSB7XG4gICAgdGhpcy5fb3JkZXJlZFF1ZXN0aW9ucyA9IHF1ZXN0aW9ucztcbiAgICB0aGlzLnJlb3JkZXJJdGVtcygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29waWVkIHRvb2xib3ggaXRlbXMuIElmIGFuIHVzZXIgYWRkaW5nIGNvcGllZEl0ZW1NYXhDb3VudCArIDEgaXRlbSwgdGhlIGZpcnN0IGFkZGVkIGl0ZW0gd2lsbCBiZSByZW1vdmVkLlxuICAgKi9cbiAgcHVibGljIGNvcGllZEl0ZW1NYXhDb3VudDogbnVtYmVyID0gMztcbiAgcHJpdmF0ZSBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllc1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXRlbXNWYWx1ZTogQXJyYXk8SVF1ZXN0aW9uVG9vbGJveEl0ZW0+ID0gW107XG5cbiAga29JdGVtcyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICBrb0NhdGVnb3JpZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAga29BY3RpdmVDYXRlZ29yeSA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gIGtvSGFzQ2F0ZWdvcmllcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VwcG9ydGVkUXVlc3Rpb25zOiBBcnJheTxzdHJpbmc+ID0gbnVsbCkge1xuICAgIHRoaXMuY3JlYXRlRGVmYXVsdEl0ZW1zKHN1cHBvcnRlZFF1ZXN0aW9ucyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29BY3RpdmVDYXRlZ29yeS5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5rb0NhdGVnb3JpZXMoKS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2F0ZWdvcnkgPSBzZWxmLmtvQ2F0ZWdvcmllcygpW2ldO1xuICAgICAgICAoPGFueT5jYXRlZ29yeSkua29Db2xsYXBzZWQoKDxhbnk+Y2F0ZWdvcnkpLm5hbWUgIT09IG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGhlIEFycmF5IG9mIFRvb2xib3ggaXRlbXMgYXMgVGV4dCBKU09OLlxuICAgKi9cbiAgcHVibGljIGdldCBqc29uVGV4dCgpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtc1ZhbHVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGpzb25UZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLml0ZW1zVmFsdWUgPSB2YWx1ZSA/IEpTT04ucGFyc2UodmFsdWUpIDogW107XG4gICAgdGhpcy5vbkl0ZW1zQ2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgQXJyYXkgb2YgY29waWVkIFRvb2xib3ggaXRlbXMgYXMgVGV4dCBKU09OLlxuICAgKi9cbiAgcHVibGljIGdldCBjb3BpZWRKc29uVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmNvcGllZEl0ZW1zKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvcGllZEpzb25UZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YXIgbmV3SXRlbXMgPSB2YWx1ZSA/IEpTT04ucGFyc2UodmFsdWUpIDogW107XG4gICAgdGhpcy5jbGVhckNvcGllZEl0ZW1zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3SXRlbXNbaV0uaXNDb3BpZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRJdGVtKG5ld0l0ZW1zW2ldKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBBcnJheSBvZiBUb29sYm94IGl0ZW1zXG4gICAqL1xuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PElRdWVzdGlvblRvb2xib3hJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIEFycmF5IG9mIGNvcGllZCBUb29sYm94IGl0ZW1zXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvcGllZEl0ZW1zKCk6IEFycmF5PElRdWVzdGlvblRvb2xib3hJdGVtPiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtc1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlW2ldLmlzQ29waWVkKSByZXN1bHQucHVzaCh0aGlzLml0ZW1zVmFsdWVbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBBZGQgdG9vbGJveCBpdGVtcyBpbnRvIHRoZSBUb29sYm94XG4gICAqIEBwYXJhbSBpdGVtcyB0aGUgbGlzdCBvZiBuZXcgaXRlbXNcbiAgICogQHBhcmFtIGNsZWFyQWxsIHNldCBpdCB0byB0cnVlIHRvIGNsZWFyIGFsbCBwcmV2aW91cyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBhZGRJdGVtcyhcbiAgICBpdGVtczogQXJyYXk8SVF1ZXN0aW9uVG9vbGJveEl0ZW0+LFxuICAgIGNsZWFyQWxsOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKGNsZWFyQWxsKSB7XG4gICAgICB0aGlzLmNsZWFySXRlbXMoKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5pdGVtc1ZhbHVlLnB1c2goaXRlbXNbaV0pO1xuICAgIH1cbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIGNvcGllZCBRdWVzdGlvbiBpbnRvIFRvb2xib3hcbiAgICogQHBhcmFtIHF1ZXN0aW9uIGEgY29waWVkIFN1cnZleS5RdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGFkZENvcGllZEl0ZW0ocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UpIHtcbiAgICB2YXIgaXRlbSA9IHtcbiAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgICB0aXRsZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIGlzQ29waWVkOiB0cnVlLFxuICAgICAgaWNvbk5hbWU6IFwiaWNvbi1kZWZhdWx0XCIsXG4gICAgICBqc29uOiB0aGlzLmdldFF1ZXN0aW9uSlNPTihxdWVzdGlvbiksXG4gICAgICBjYXRlZ29yeTogXCJcIlxuICAgIH07XG4gICAgaWYgKHRoaXMucmVwbGFjZUl0ZW0oaXRlbSkpIHJldHVybjtcbiAgICB2YXIgY29waWVkID0gdGhpcy5jb3BpZWRJdGVtcztcbiAgICBpZiAodGhpcy5jb3BpZWRJdGVtTWF4Q291bnQgPiAwICYmIGNvcGllZC5sZW5ndGggPT0gdGhpcy5jb3BpZWRJdGVtTWF4Q291bnQpXG4gICAgICB0aGlzLnJlbW92ZUl0ZW0oY29waWVkW3RoaXMuY29waWVkSXRlbU1heENvdW50IC0gMV0ubmFtZSk7XG4gICAgdGhpcy5hZGRJdGVtKGl0ZW0pO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSB0b29sYm94IGl0ZW1cbiAgICogQHBhcmFtIGl0ZW0gdGhlIHRvb2xib3ggaXRlbSBkZXNjcmlwdGlvblxuICAgKiBAc2VlIElRdWVzdGlvblRvb2xib3hJdGVtXG4gICAqL1xuICBwdWJsaWMgYWRkSXRlbShpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSkge1xuICAgIHRoaXMuaXRlbXNWYWx1ZS5wdXNoKGl0ZW0pO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IHRvb2xib3ggaXRlbSwgYWRkIGRlbGV0ZSB0aGUgb2xkIGl0ZW0gd2l0aCB0aGUgc2FtZSBuYW1lXG4gICAqIEBwYXJhbSBpdGVtIHRoZSB0b29sYm94IGl0ZW0gZGVzY3JpcHRpb25cbiAgICogQHNlZSBJUXVlc3Rpb25Ub29sYm94SXRlbVxuICAgKi9cbiAgcHVibGljIHJlcGxhY2VJdGVtKGl0ZW06IElRdWVzdGlvblRvb2xib3hJdGVtKTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleE9mKGl0ZW0ubmFtZSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHRoaXMuaXRlbXNWYWx1ZVtpbmRleF0gPSBpdGVtO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgdG9vbGJveCBpdGVtIGJ5IGl0J3MgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSB0b29sYm94IGl0ZW0gbmFtZVxuICAgKiBAc2VlIElRdWVzdGlvblRvb2xib3hJdGVtXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlSXRlbShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuaXRlbXNWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFsbCB0b29sYm94IGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNsZWFySXRlbXMoKSB7XG4gICAgdGhpcy5pdGVtc1ZhbHVlID0gW107XG4gICAgdGhpcy5vbkl0ZW1zQ2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGNvcGllZCB0b29sYm94IGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNsZWFyQ29waWVkSXRlbXMoKSB7XG4gICAgdmFyIHJlbW92ZWRJdGVtcyA9IHRoaXMuY29waWVkSXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW1vdmVkSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucmVtb3ZlSXRlbShyZW1vdmVkSXRlbXNbaV0ubmFtZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRvb2xib3ggaXRlbSBieSBpdHMgbmFtZS4gUmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHRvb2xib3ggaXRlbSB3aXRoIHRoaXMgbmFtZVxuICAgKiBAcGFyYW0gbmFtZVxuICAgKi9cbiAgcHVibGljIGdldEl0ZW1CeU5hbWUobmFtZTogc3RyaW5nKTogSVF1ZXN0aW9uVG9vbGJveEl0ZW0ge1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXhPZihuYW1lKTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IHRoaXMuaXRlbXNWYWx1ZVtpbmRleF0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gYWxsb3cgZW5kLXVzZXIgdG8gZXhwYW5kIG1vcmUgdGhhbiBvbmUgY2F0ZWdvcnkuIFRoZXJlIHdpbGwgbm8gYWN0aXZlIGNhdGVnb3J5IGluIHRoaXMgY2FzZVxuICAgKiBAc2VlIGFjdGl2ZUNhdGVnb3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzVmFsdWUgPSB2YWw7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmtvQ2F0ZWdvcmllcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9ICg8YW55PnRoaXMua29DYXRlZ29yaWVzKClbMF0pLm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgY2F0ZWdvcnkgb2YgdGhlIHRvb2xib3ggaXRlbVxuICAgKiBAcGFyYW0gbmFtZSB0aGUgdG9vbGJveCBpdGVtIG5hbWVcbiAgICogQHBhcmFtIGNhdGVnb3J5IG5ldyBjYXRlZ29yeSBuYW1lXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlQ2F0ZWdvcnkobmFtZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGFuZ2VDYXRlZ29yaWVzKFt7IG5hbWU6IG5hbWUsIGNhdGVnb3J5OiBjYXRlZ29yeSB9XSk7XG4gIH1cbiAgLyoqXG4gICAqIENoYW5nZSBjYXRlZ29yaWVzIGZvciBzZXZlcmFsIHRvb2xib3ggaXRlbXMuXG4gICAqIEBwYXJhbSBjaGFuZ2VkSXRlbXMgdGhlIGFycmF5IG9mIG9iamVjdHMge25hbWU6IFwieW91ciB0b29sYm94IGl0ZW0gbmFtZVwiLCBjYXRlZ29yeTogXCJuZXcgY2F0ZWdvcnkgbmFtZVwifVxuICAgKi9cbiAgcHVibGljIGNoYW5nZUNhdGVnb3JpZXMoY2hhbmdlZEl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gY2hhbmdlZEl0ZW1zW2ldO1xuICAgICAgdmFyIHRvb2xib3hJdGVtID0gdGhpcy5nZXRJdGVtQnlOYW1lKGl0ZW0ubmFtZSk7XG4gICAgICBpZiAodG9vbGJveEl0ZW0pIHtcbiAgICAgICAgdG9vbGJveEl0ZW0uY2F0ZWdvcnkgPSBpdGVtLmNhdGVnb3J5O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBhbmQgZ2V0IGFuZCBhY3RpdmUgY2F0ZWdvcnkuIFRoaXMgcHJvcGVydHkgZG9lc24ndCB3b3JrIGlmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIHRydWUuIEl0cyBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LlxuICAgKiBAc2VlIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzXG4gICAqIEBzZWUgZXhwYW5kQ2F0ZWdvcnlcbiAgICogQHNlZSBjb2xsYXBzZUNhdGVnb3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjdGl2ZUNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua29BY3RpdmVDYXRlZ29yeSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWN0aXZlQ2F0ZWdvcnkodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmtvQWN0aXZlQ2F0ZWdvcnkodmFsKTtcbiAgfVxuICBwcml2YXRlIGRvQ2F0ZWdvcnlDbGljayhjYXRlZ29yeU5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzKSB7XG4gICAgICB2YXIgY2F0ZWdvcnkgPSB0aGlzLmdldENhdGVnb3J5QnlOYW1lKGNhdGVnb3J5TmFtZSk7XG4gICAgICBpZiAoY2F0ZWdvcnkpIHtcbiAgICAgICAgY2F0ZWdvcnkua29Db2xsYXBzZWQoIWNhdGVnb3J5LmtvQ29sbGFwc2VkKCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gY2F0ZWdvcnlOYW1lO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRXhwYW5kIGEgY2F0ZWdvcnkgYnkgaXRzIG5hbWUuIElmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIGZhbHNlIChkZWZhdWx0IHZhbHVlKSwgYWxsIG90aGVyIGNhdGVnb3JpZXMgYmVjb21lIGNvbGxhcHNlZFxuICAgKiBAcGFyYW0gY2F0ZWdvcnlOYW1lIHRoZSBjYXRlZ29yeSBuYW1lXG4gICAqIEBzZWUgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXNcbiAgICogQHNlZSBjb2xsYXBzZUNhdGVnb3J5XG4gICAqL1xuICBwdWJsaWMgZXhwYW5kQ2F0ZWdvcnkoY2F0ZWdvcnlOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5hbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcykge1xuICAgICAgdmFyIGNhdGVnb3J5ID0gdGhpcy5nZXRDYXRlZ29yeUJ5TmFtZShjYXRlZ29yeU5hbWUpO1xuICAgICAgaWYgKGNhdGVnb3J5KSB7XG4gICAgICAgIGNhdGVnb3J5LmtvQ29sbGFwc2VkKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IGNhdGVnb3J5TmFtZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbGxhcHNlIGEgY2F0ZWdvcnkgYnkgaXRzIG5hbWUuIElmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIGZhbHNlIChkZWZhdWx0IHZhbHVlKSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZ1xuICAgKiBAcGFyYW0gY2F0ZWdvcnlOYW1lIHRoZSBjYXRlZ29yeSBuYW1lXG4gICAqIEBzZWUgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXNcbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZUNhdGVnb3J5KGNhdGVnb3J5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzKSByZXR1cm47XG4gICAgdmFyIGNhdGVnb3J5ID0gdGhpcy5nZXRDYXRlZ29yeUJ5TmFtZShjYXRlZ29yeU5hbWUpO1xuICAgIGlmIChjYXRlZ29yeSkge1xuICAgICAgY2F0ZWdvcnkua29Db2xsYXBzZWQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgYWxsIGNhdGVnb3JpZXMuIElmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIGZhbHNlIChkZWZhdWx0IHZhbHVlKSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZ1xuICAgKiBAc2VlIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzXG4gICAqL1xuICBwdWJsaWMgZXhwYW5kQWxsQ2F0ZWdvcmllcygpIHtcbiAgICB0aGlzLmV4cGFuZENvbGxhcHNlQWxsQ2F0ZWdvcmllcyhmYWxzZSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbGxhcHNlIGFsbCBjYXRlZ29yaWVzLiBJZiBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcyBpcyBmYWxzZSAoZGVmYXVsdCB2YWx1ZSkgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmdcbiAgICogQHNlZSBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllc1xuICAgKi9cbiAgcHVibGljIGNvbGxhcHNlQWxsQ2F0ZWdvcmllcygpIHtcbiAgICB0aGlzLmV4cGFuZENvbGxhcHNlQWxsQ2F0ZWdvcmllcyh0cnVlKTtcbiAgfVxuICBwcml2YXRlIGV4cGFuZENvbGxhcHNlQWxsQ2F0ZWdvcmllcyhpc0NvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIHZhciBjYXRlZ29yaWVzID0gdGhpcy5rb0NhdGVnb3JpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICg8YW55PmNhdGVnb3JpZXNbaV0pLmtvQ29sbGFwc2VkKGlzQ29sbGFwc2VkKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRDYXRlZ29yeUJ5TmFtZShjYXRlZ29yeU5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIGNhdGVnb3JpZXMgPSB0aGlzLmtvQ2F0ZWdvcmllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNhdGVnb3J5ID0gPGFueT5jYXRlZ29yaWVzW2ldO1xuICAgICAgaWYgKGNhdGVnb3J5Lm5hbWUgPT09IGNhdGVnb3J5TmFtZSkgcmV0dXJuIGNhdGVnb3J5O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5rb0l0ZW1zKHRoaXMuaXRlbXNWYWx1ZSk7XG4gICAgdmFyIGNhdGVnb3JpZXMgPSBbXTtcbiAgICB2YXIgY2F0ZWdvcmllc0hhc2ggPSB7fTtcbiAgICB2YXIgcHJldkFjdGl2ZUNhdGVnb3J5ID0gdGhpcy5rb0FjdGl2ZUNhdGVnb3J5KCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtc1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNWYWx1ZVtpXTtcbiAgICAgIHZhciBjYXRlZ29yeU5hbWUgPSBpdGVtLmNhdGVnb3J5XG4gICAgICAgID8gaXRlbS5jYXRlZ29yeVxuICAgICAgICA6IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC50b29sYm94R2VuZXJhbENhdGVnb3J5XCIpOyAvL1RPRE9cbiAgICAgIGlmICghY2F0ZWdvcmllc0hhc2hbY2F0ZWdvcnlOYW1lXSkge1xuICAgICAgICB2YXIgY2F0ZWdvcnkgPSB7XG4gICAgICAgICAgbmFtZTogY2F0ZWdvcnlOYW1lLFxuICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICBrb0NvbGxhcHNlZDoga28ub2JzZXJ2YWJsZShjYXRlZ29yeU5hbWUgIT09IHByZXZBY3RpdmVDYXRlZ29yeSksXG4gICAgICAgICAgZXhwYW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNlbGYuZG9DYXRlZ29yeUNsaWNrKHRoaXMubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjYXRlZ29yaWVzSGFzaFtjYXRlZ29yeU5hbWVdID0gY2F0ZWdvcnk7XG4gICAgICAgIGNhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XG4gICAgICB9XG4gICAgICBjYXRlZ29yaWVzSGFzaFtjYXRlZ29yeU5hbWVdLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHRoaXMua29DYXRlZ29yaWVzKGNhdGVnb3JpZXMpO1xuICAgIGlmICghdGhpcy5hbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcykge1xuICAgICAgaWYgKHByZXZBY3RpdmVDYXRlZ29yeSAmJiBjYXRlZ29yaWVzSGFzaFtwcmV2QWN0aXZlQ2F0ZWdvcnldKSB7XG4gICAgICAgIHRoaXMua29BY3RpdmVDYXRlZ29yeShwcmV2QWN0aXZlQ2F0ZWdvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rb0FjdGl2ZUNhdGVnb3J5KGNhdGVnb3JpZXMubGVuZ3RoID4gMCA/IGNhdGVnb3JpZXNbMF0ubmFtZSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNhdGVnb3JpZXNbMF0ua29Db2xsYXBzZWQoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtvSGFzQ2F0ZWdvcmllcyhjYXRlZ29yaWVzLmxlbmd0aCA+IDEpO1xuICB9XG4gIHByaXZhdGUgaW5kZXhPZihuYW1lOiBzdHJpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXNWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNWYWx1ZVtpXS5uYW1lID09IG5hbWUpIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcHJpdmF0ZSByZW9yZGVySXRlbXMoKSB7XG4gICAgdGhpcy5pdGVtc1ZhbHVlLnNvcnQoKGkxLCBpMikgPT4ge1xuICAgICAgdmFyIGluZGV4MSA9IHRoaXMuX29yZGVyZWRRdWVzdGlvbnMuaW5kZXhPZihpMS5uYW1lKTtcbiAgICAgIGlmIChpbmRleDEgPT09IC0xKSBpbmRleDEgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgdmFyIGluZGV4MiA9IHRoaXMuX29yZGVyZWRRdWVzdGlvbnMuaW5kZXhPZihpMi5uYW1lKTtcbiAgICAgIGlmIChpbmRleDIgPT09IC0xKSBpbmRleDIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgcmV0dXJuIGluZGV4MSAtIGluZGV4MjtcbiAgICB9KTtcbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0SXRlbXMoc3VwcG9ydGVkUXVlc3Rpb25zOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jbGVhckl0ZW1zKCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25UeXBlcyhzdXBwb3J0ZWRRdWVzdGlvbnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IFN1cnZleS5FbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KG5hbWUsIFwicTFcIik7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgIHF1ZXN0aW9uID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MobmFtZSk7XG4gICAgICB9XG4gICAgICB2YXIganNvbiA9IHRoaXMuZ2V0UXVlc3Rpb25KU09OKHF1ZXN0aW9uKTtcbiAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBpY29uTmFtZTogXCJpY29uLVwiICsgbmFtZSxcbiAgICAgICAgdGl0bGU6IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJxdC5cIiArIG5hbWUpLFxuICAgICAgICBqc29uOiBqc29uLFxuICAgICAgICBpc0NvcGllZDogZmFsc2UsXG4gICAgICAgIGNhdGVnb3J5OiBcIlwiXG4gICAgICB9O1xuICAgICAgdGhpcy5pdGVtc1ZhbHVlLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJDdXN0b21XaWRnZXRzKCk7XG4gICAgdGhpcy5vbkl0ZW1zQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVnaXN0ZXJDdXN0b21XaWRnZXRzKCkge1xuICAgIHZhciBpbnN0ID0gU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2U7XG4gICAgaWYgKCFpbnN0LmdldEFjdGl2YXRlZEJ5KSByZXR1cm47XG4gICAgdmFyIHdpZGdldHMgPSBpbnN0LndpZGdldHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWRnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaW5zdC5nZXRBY3RpdmF0ZWRCeSh3aWRnZXRzW2ldLm5hbWUpICE9IFwiY3VzdG9tdHlwZVwiKSBjb250aW51ZTtcbiAgICAgIHZhciB3aWRnZXRKc29uID0gd2lkZ2V0c1tpXS53aWRnZXRKc29uO1xuICAgICAgaWYgKCF3aWRnZXRKc29uLndpZGdldElzTG9hZGVkIHx8ICF3aWRnZXRKc29uLndpZGdldElzTG9hZGVkKCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIGljb25OYW1lID0gd2lkZ2V0SnNvbi5pY29uTmFtZSA/IHdpZGdldEpzb24uaWNvbk5hbWUgOiBcImljb24tZGVmYXVsdFwiO1xuICAgICAgdmFyIHRpdGxlID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInF0LlwiICsgd2lkZ2V0SnNvbi5uYW1lKTtcbiAgICAgIGlmICghdGl0bGUgfHwgdGl0bGUgPT0gd2lkZ2V0SnNvbi5uYW1lKSB0aXRsZSA9IHdpZGdldEpzb24udGl0bGU7XG4gICAgICBpZiAoIXRpdGxlKSB0aXRsZSA9IHdpZGdldEpzb24ubmFtZTtcbiAgICAgIHZhciBqc29uID0gd2lkZ2V0SnNvbi5kZWZhdWx0SlNPTiA/IHdpZGdldEpzb24uZGVmYXVsdEpTT04gOiB7fTtcbiAgICAgIGlmICghanNvbi50eXBlKSB7XG4gICAgICAgIGpzb24udHlwZSA9IHdpZGdldEpzb24ubmFtZTtcbiAgICAgIH1cbiAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICBuYW1lOiB3aWRnZXRKc29uLm5hbWUsXG4gICAgICAgIGljb25OYW1lOiBpY29uTmFtZSxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBqc29uOiBqc29uLFxuICAgICAgICBpc0NvcGllZDogZmFsc2UsXG4gICAgICAgIGNhdGVnb3J5OiBcIlwiXG4gICAgICB9O1xuICAgICAgdGhpcy5pdGVtc1ZhbHVlLnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25KU09OKHF1ZXN0aW9uOiBhbnkpOiBhbnkge1xuICAgIHZhciBqc29uID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHF1ZXN0aW9uKTtcbiAgICBqc29uLnR5cGUgPSBxdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHJpdmF0ZSBnZXRRdWVzdGlvblR5cGVzKHN1cHBvcnRlZFF1ZXN0aW9uczogQXJyYXk8c3RyaW5nPik6IHN0cmluZ1tdIHtcbiAgICB2YXIgYWxsVHlwZXMgPSBTdXJ2ZXkuRWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuZ2V0QWxsVHlwZXMoKTtcbiAgICBpZiAoIXN1cHBvcnRlZFF1ZXN0aW9ucyB8fCBzdXBwb3J0ZWRRdWVzdGlvbnMubGVuZ3RoID09IDApXG4gICAgICBzdXBwb3J0ZWRRdWVzdGlvbnMgPSBhbGxUeXBlcztcbiAgICB2YXIgcXVlc3Rpb25zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yZGVyZWRRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5vcmRlcmVkUXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKHN1cHBvcnRlZFF1ZXN0aW9ucy5pbmRleE9mKG5hbWUpID4gLTEgJiYgYWxsVHlwZXMuaW5kZXhPZihuYW1lKSA+IC0xKVxuICAgICAgICBxdWVzdGlvbnMucHVzaChuYW1lKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdXBwb3J0ZWRRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gc3VwcG9ydGVkUXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKFxuICAgICAgICBxdWVzdGlvbnMuaW5kZXhPZihzdXBwb3J0ZWRRdWVzdGlvbnNbaV0pIDwgMCAmJlxuICAgICAgICBhbGxUeXBlcy5pbmRleE9mKG5hbWUpID4gLTFcbiAgICAgIClcbiAgICAgICAgcXVlc3Rpb25zLnB1c2gobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbnM7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvblRvb2xib3gudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyLCBPYmpUeXBlIH0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Db252ZXJ0ZXIge1xuICBwdWJsaWMgc3RhdGljIGNvbnZlcnRJbmZvID0ge307XG4gIHB1YmxpYyBzdGF0aWMgYWRkQ29udmVydEluZm8oY2xhc3NOYW1lOiBzdHJpbmcsIGNvbnZlcnRUb0NsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFRdWVzdGlvbkNvbnZlcnRlci5jb252ZXJ0SW5mb1tjbGFzc05hbWVdKSB7XG4gICAgICBRdWVzdGlvbkNvbnZlcnRlci5jb252ZXJ0SW5mb1tjbGFzc05hbWVdID0gW107XG4gICAgfVxuICAgIFF1ZXN0aW9uQ29udmVydGVyLmNvbnZlcnRJbmZvW2NsYXNzTmFtZV0ucHVzaChjb252ZXJ0VG9DbGFzc05hbWUpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29udmVydFRvQ2xhc3NlcyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBRdWVzdGlvbkNvbnZlcnRlci5jb252ZXJ0SW5mb1tjbGFzc05hbWVdO1xuICAgIHJldHVybiByZXMgPyByZXMgOiBbXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNvbnZlcnRPYmplY3QoXG4gICAgb2JqOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlLFxuICAgIGNvbnZlcnRUb0NsYXNzOiBzdHJpbmdcbiAgKTogU3VydmV5LlF1ZXN0aW9uQmFzZSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5wYXJlbnQgfHwgY29udmVydFRvQ2xhc3MgPT0gb2JqLmdldFR5cGUoKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5ld1F1ZXN0aW9uID0gU3VydmV5LlF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgIGNvbnZlcnRUb0NsYXNzLFxuICAgICAgb2JqLm5hbWVcbiAgICApO1xuICAgIHZhciBqc29uT2JqID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCk7XG4gICAgdmFyIGpzb24gPSBqc29uT2JqLnRvSnNvbk9iamVjdChvYmopO1xuICAgIGpzb25PYmoudG9PYmplY3QoanNvbiwgbmV3UXVlc3Rpb24pO1xuICAgIHZhciBwYW5lbCA9IDxTdXJ2ZXkuUGFuZWxNb2RlbEJhc2U+b2JqLnBhcmVudDtcbiAgICB2YXIgaW5kZXggPSBwYW5lbC5lbGVtZW50cy5pbmRleE9mKG9iaik7XG4gICAgcGFuZWwucmVtb3ZlRWxlbWVudChvYmopO1xuICAgIHBhbmVsLmFkZEVsZW1lbnQobmV3UXVlc3Rpb24sIGluZGV4KTtcbiAgICByZXR1cm4gbmV3UXVlc3Rpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFF1ZXN0aW9uQ29udmVydGVySXRlbXMoKSB7XG4gIHZhciBjbGFzc2VzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0Q2hpbGRyZW5DbGFzc2VzKFxuICAgIFwic2VsZWN0YmFzZVwiLFxuICAgIHRydWVcbiAgKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjbGFzc2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoaSA9PSBqKSBjb250aW51ZTtcbiAgICAgIFF1ZXN0aW9uQ29udmVydGVyLmFkZENvbnZlcnRJbmZvKGNsYXNzZXNbaV0ubmFtZSwgY2xhc3Nlc1tqXS5uYW1lKTtcbiAgICB9XG4gIH1cbiAgUXVlc3Rpb25Db252ZXJ0ZXIuYWRkQ29udmVydEluZm8oXCJ0ZXh0XCIsIFwiY29tbWVudFwiKTtcbiAgUXVlc3Rpb25Db252ZXJ0ZXIuYWRkQ29udmVydEluZm8oXCJjb21tZW50XCIsIFwidGV4dFwiKTtcbn1cblxuY3JlYXRlRGVmYXVsdFF1ZXN0aW9uQ29udmVydGVySXRlbXMoKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbmNvbnZlcnRlci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleUpTT041IH0gZnJvbSBcIi4vanNvbjVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVtYmVkaW5nV2luZG93IHtcbiAgcHJpdmF0ZSBqc29uVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBzdXJ2ZXlFbWJlZGluZ0hlYWQ6IEFjZUFqYXguRWRpdG9yO1xuICBwcml2YXRlIHN1cnZleUVtYmVkaW5nSmF2YTogQWNlQWpheC5FZGl0b3I7XG4gIHByaXZhdGUgc3VydmV5RW1iZWRpbmdCb2R5OiBBY2VBamF4LkVkaXRvcjtcbiAga29IZWFkVGV4dDogYW55O1xuICBrb0JvZHlUZXh0OiBhbnk7XG4gIGtvSmF2YVRleHQ6IGFueTtcbiAgcHVibGljIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgc3VydmV5UG9zdElkOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgZ2VuZXJhdGVWYWxpZEpTT046IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN1cnZleUpTVmVyc2lvbjogc3RyaW5nID0gU3VydmV5LlZlcnNpb247XG4gIHB1YmxpYyBzdXJ2ZXlDRE5QYXRoOiBzdHJpbmcgPSBcImh0dHBzOi8vc3VydmV5anMuYXp1cmVlZGdlLm5ldC9cIjtcbiAga29TaG93QXNXaW5kb3c6IGFueTtcbiAga29TY3JpcHRVc2luZzogYW55O1xuICBrb0hhc0lkczogYW55O1xuICBrb0xvYWRTdXJ2ZXk6IGFueTtcbiAga29MaWJyYXJ5VmVyc2lvbjogYW55O1xuICBrb1Zpc2libGVIdG1sOiBhbnk7XG4gIHByaXZhdGUgcGxhdGZvcm1TdXJ2ZXlKU1ByZWZpeCA9IHtcbiAgICBhbmd1bGFyOiBcImFuZ3VsYXJcIixcbiAgICBqcXVlcnk6IFwianF1ZXJ5XCIsXG4gICAga25vY2tvdXQ6IFwia29cIixcbiAgICByZWFjdDogXCJyZWFjdFwiLFxuICAgIHZ1ZTogXCJ2dWVcIlxuICB9O1xuICBwcml2YXRlIHBsYXRmb3JtSlNvblBhZ2UgPSB7XG4gICAgYW5ndWxhcjpcbiAgICAgIFwiQENvbXBvbmVudCh7XFxuICBzZWxlY3RvcjogJ25nLWFwcCcsXFxuICAgICAgICB0ZW1wbGF0ZTogXFxuICAgICAgICA8ZGl2IGlkPSdzdXJ2ZXlFbGVtZW50Jz48L2Rpdj5cXFwiLFxcbn0pXFxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XFxuICAgIG5nT25Jbml0KCkge1xcbiAgICAgICAgdmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTik7XFxuICAgICAgICBzdXJ2ZXkub25Db21wbGV0ZS5hZGQoc2VuZERhdGFUb1NlcnZlcik7XFxuICAgICAgIFN1cnZleS5TdXJ2ZXlORy5yZW5kZXIoXFxcInN1cnZleUVsZW1lbnRcXFwiLCB7IG1vZGVsOiBzdXJ2ZXkgfSk7XFxuICAgIH1cXG59XCIsXG4gICAganF1ZXJ5OlxuICAgICAgJ3ZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbiQoXCIjc3VydmV5Q29udGFpbmVyXCIpLlN1cnZleSh7XFxuICAgIG1vZGVsOiBzdXJ2ZXksXFxuICAgIG9uQ29tcGxldGU6IHNlbmREYXRhVG9TZXJ2ZXJcXG59KTsnLFxuICAgIGtub2Nrb3V0OlxuICAgICAgJ3ZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04sIFwic3VydmV5Q29udGFpbmVyXCIpO1xcbnN1cnZleS5vbkNvbXBsZXRlLmFkZChzZW5kRGF0YVRvU2VydmVyKTsnLFxuICAgIHJlYWN0OlxuICAgICAgJ1JlYWN0RE9NLnJlbmRlcihcXG4gICAgPFN1cnZleS5TdXJ2ZXkganNvbj17IHN1cnZleUpTT04gfSBvbkNvbXBsZXRlPXsgc2VuZERhdGFUb1NlcnZlciB9IC8+LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1cnZleUNvbnRhaW5lclwiKSk7JyxcbiAgICB2dWU6XG4gICAgICBcInZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbm5ldyBWdWUoeyBlbDogJyNzdXJ2ZXlDb250YWluZXInLCBkYXRhOiB7IHN1cnZleTogc3VydmV5IH0gfSk7XCJcbiAgfTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUpTb25XaW5kb3cgPSB7XG4gICAgYW5ndWxhcjpcbiAgICAgIFwiQENvbXBvbmVudCh7XFxuICBzZWxlY3RvcjogJ25nLWFwcCcsXFxuICAgICAgICB0ZW1wbGF0ZTogXFxuICAgICAgICA8ZGl2IGlkPSdzdXJ2ZXlFbGVtZW50Jz48L2Rpdj5cXFwiLFxcbn0pXFxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XFxuICAgIG5nT25Jbml0KCkge1xcbiAgICAgICAgdmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTik7XFxuICAgICAgICBzdXJ2ZXkub25Db21wbGV0ZS5hZGQoc2VuZERhdGFUb1NlcnZlcik7XFxuICAgICAgIFN1cnZleS5TdXJ2ZXlXaW5kb3dORy5yZW5kZXIoXFxcInN1cnZleUVsZW1lbnRcXFwiLCB7IG1vZGVsOiBzdXJ2ZXkgfSk7XFxuICAgIH1cXG59XCIsXG4gICAganF1ZXJ5OlxuICAgICAgJ3ZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbiQoXCIjc3VydmV5Q29udGFpbmVyXCIpLlN1cnZleVdpbmRvdyh7XFxuICAgIG1vZGVsOiBzdXJ2ZXksXFxuICAgIG9uQ29tcGxldGU6IHNlbmREYXRhVG9TZXJ2ZXJcXG59KTsnLFxuICAgIGtub2Nrb3V0OlxuICAgICAgXCJ2YXIgc3VydmV5ID0gbmV3IFN1cnZleS5Nb2RlbChzdXJ2ZXlKU09OKTtcXG5zdXJ2ZXlXaW5kb3cuc2hvdygpO1xcbnN1cnZleS5vbkNvbXBsZXRlLmFkZChzZW5kRGF0YVRvU2VydmVyKTtcIixcbiAgICByZWFjdDpcbiAgICAgICdSZWFjdERPTS5yZW5kZXIoXFxuICAgIDxTdXJ2ZXkuU3VydmV5V2luZG93IGpzb249eyBzdXJ2ZXlKU09OIH0gb25Db21wbGV0ZT17IHNlbmREYXRhVG9TZXJ2ZXIgfSAvPiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdXJ2ZXlDb250YWluZXJcIikpOycsXG4gICAgdnVlOiBcIlwiXG4gIH07XG4gIHByaXZhdGUgcGxhdGZvcm1IdG1sb25QYWdlID0ge1xuICAgIGFuZ3VsYXI6IFwiPG5nLWFwcD48L25nLWFwcD5cIixcbiAgICBqcXVlcnk6ICc8ZGl2IGlkPVwic3VydmV5Q29udGFpbmVyXCI+PC9kaXY+JyxcbiAgICBrbm9ja291dDogJzxkaXYgaWQ9XCJzdXJ2ZXlDb250YWluZXJcIj48L2Rpdj4nLFxuICAgIHJlYWN0OiAnPGRpdiBpZD1cInN1cnZleUNvbnRhaW5lclwiPjwvZGl2PicsXG4gICAgdnVlOiAnPGRpdiBpZD1cInN1cnZleUNvbnRhaW5lclwiPjxzdXJ2ZXkgOnN1cnZleT1cInN1cnZleVwiPjwvc3VydmV5PjwvZGl2PidcbiAgfTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUh0bWxvbldpbmRvdyA9IHtcbiAgICBhbmd1bGFyOiBcIjxuZy1hcHA+PC9uZy1hcHA+XCIsXG4gICAganF1ZXJ5OiAnPGRpdiBpZD1cInN1cnZleUNvbnRhaW5lclwiPjwvZGl2PicsXG4gICAga25vY2tvdXQ6IFwiXCIsXG4gICAgcmVhY3Q6ICc8ZGl2IGlkPVwic3VydmV5Q29udGFpbmVyXCI+PC9kaXY+JyxcbiAgICB2dWU6XG4gICAgICBcIjxkaXYgaWQ9J3N1cnZleUNvbnRhaW5lcic+PHN1cnZleS13aW5kb3cgOnN1cnZleT0nc3VydmV5Jz48L3N1cnZleS13aW5kb3c+PC9kaXY+XCJcbiAgfTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29MaWJyYXJ5VmVyc2lvbiA9IGtvLm9ic2VydmFibGUoXCJqcXVlcnlcIik7XG4gICAgdGhpcy5rb1Nob3dBc1dpbmRvdyA9IGtvLm9ic2VydmFibGUoXCJwYWdlXCIpO1xuICAgIHRoaXMua29TY3JpcHRVc2luZyA9IGtvLm9ic2VydmFibGUoXCJib290c3RyYXBcIik7XG4gICAgdGhpcy5rb0hhc0lkcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIHRoaXMua29Mb2FkU3VydmV5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cbiAgICB0aGlzLmtvSGVhZFRleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHRoaXMua29KYXZhVGV4dCA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgdGhpcy5rb0JvZHlUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcblxuICAgIHRoaXMua29WaXNpYmxlSHRtbCA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VsZi5rb1Nob3dBc1dpbmRvdygpID09IFwicGFnZVwiIHx8XG4gICAgICAgIHNlbGYucGxhdGZvcm1IdG1sb25XaW5kb3dbc2VsZi5rb0xpYnJhcnlWZXJzaW9uKCldICE9IFwiXCJcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5rb0xpYnJhcnlWZXJzaW9uLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5zZXRIZWFkVGV4dCgpO1xuICAgICAgc2VsZi5zZXRKYXZhVGVzdCgpO1xuICAgICAgc2VsZi5zZXRCb2R5VGV4dCgpO1xuICAgIH0pO1xuICAgIHRoaXMua29TaG93QXNXaW5kb3cuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLnNldEphdmFUZXN0KCk7XG4gICAgICBzZWxmLnNldEJvZHlUZXh0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5rb1NjcmlwdFVzaW5nLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5zZXRIZWFkVGV4dCgpO1xuICAgICAgc2VsZi5zZXRKYXZhVGVzdCgpO1xuICAgIH0pO1xuICAgIHRoaXMua29Mb2FkU3VydmV5LnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5zZXRKYXZhVGVzdCgpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5RW1iZWRpbmdIZWFkID0gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGpzb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5qc29uVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBqc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmpzb25WYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQWNlRWRpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgYWNlICE9PSBcInVuZGVmaW5lZFwiO1xuICB9XG4gIHB1YmxpYyBzaG93KCkge1xuICAgIGlmICh0aGlzLmhhc0FjZUVkaXRvciAmJiB0aGlzLnN1cnZleUVtYmVkaW5nSGVhZCA9PSBudWxsKSB7XG4gICAgICB0aGlzLnN1cnZleUVtYmVkaW5nSGVhZCA9IHRoaXMuY3JlYXRlRWRpdG9yKFwic3VydmV5RW1iZWRpbmdIZWFkXCIpO1xuICAgICAgdGhpcy5zdXJ2ZXlFbWJlZGluZ0JvZHkgPSB0aGlzLmNyZWF0ZUVkaXRvcihcInN1cnZleUVtYmVkaW5nQm9keVwiKTtcbiAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmdKYXZhID0gdGhpcy5jcmVhdGVFZGl0b3IoXCJzdXJ2ZXlFbWJlZGluZ0phdmFcIik7XG4gICAgfVxuICAgIHRoaXMua29IYXNJZHModGhpcy5zdXJ2ZXlJZCAmJiB0aGlzLnN1cnZleVBvc3RJZCk7XG4gICAgdGhpcy5zZXRCb2R5VGV4dCgpO1xuICAgIHRoaXMuc2V0SGVhZFRleHQoKTtcbiAgICB0aGlzLnNldEphdmFUZXN0KCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRCb2R5VGV4dCgpIHtcbiAgICB0aGlzLnNldFRleHRUb0VkaXRvcihcbiAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmdCb2R5LFxuICAgICAgdGhpcy5rb0JvZHlUZXh0LFxuICAgICAgdGhpcy5wbGF0Zm9ybUh0bWxvblBhZ2VbdGhpcy5rb0xpYnJhcnlWZXJzaW9uKCldXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldCBnZXRDRE5QYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Q0ROUGF0aCArIHRoaXMuc3VydmV5SlNWZXJzaW9uICsgXCIvXCI7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIZWFkVGV4dCgpIHtcbiAgICB2YXIgc3RyID1cbiAgICAgIFwiPCEtLSBZb3VyIHBsYXRmb3JtIChcIiArIHRoaXMua29MaWJyYXJ5VmVyc2lvbigpICsgXCIpIHNjcmlwdHMuIC0tPlxcblwiO1xuICAgIGlmICh0aGlzLmtvU2NyaXB0VXNpbmcoKSAhPSBcImJvb3RzdHJhcFwiKSB7XG4gICAgICBzdHIgKz1cbiAgICAgICAgJ1xcbjxsaW5rIGhyZWY9XCInICtcbiAgICAgICAgdGhpcy5nZXRDRE5QYXRoICtcbiAgICAgICAgJ3N1cnZleS5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgLz4nO1xuICAgIH1cbiAgICBzdHIgKz1cbiAgICAgICdcXG48c2NyaXB0IHNyYz1cIicgK1xuICAgICAgdGhpcy5nZXRDRE5QYXRoICtcbiAgICAgIFwic3VydmV5LlwiICtcbiAgICAgIHRoaXMucGxhdGZvcm1TdXJ2ZXlKU1ByZWZpeFt0aGlzLmtvTGlicmFyeVZlcnNpb24oKV0gK1xuICAgICAgJy5taW4uanNcIj48L3NjcmlwdD4nO1xuXG4gICAgdGhpcy5zZXRUZXh0VG9FZGl0b3IodGhpcy5zdXJ2ZXlFbWJlZGluZ0hlYWQsIHRoaXMua29IZWFkVGV4dCwgc3RyKTtcbiAgfVxuICBwcml2YXRlIHNldEphdmFUZXN0KCkge1xuICAgIHRoaXMuc2V0VGV4dFRvRWRpdG9yKFxuICAgICAgdGhpcy5zdXJ2ZXlFbWJlZGluZ0phdmEsXG4gICAgICB0aGlzLmtvSmF2YVRleHQsXG4gICAgICB0aGlzLmdldEphdmFUZXh0KClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRWRpdG9yKGVsZW1lbnROYW1lOiBzdHJpbmcpOiBBY2VBamF4LkVkaXRvciB7XG4gICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KGVsZW1lbnROYW1lKTtcbiAgICBlZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcbiAgICBlZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvanNvblwiKTtcbiAgICBlZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcbiAgICBlZGl0b3IucmVuZGVyZXIuc2V0U2hvd0d1dHRlcihmYWxzZSk7XG4gICAgZWRpdG9yLnNldFJlYWRPbmx5KHRydWUpO1xuICAgIHJldHVybiBlZGl0b3I7XG4gIH1cbiAgcHJpdmF0ZSBnZXRKYXZhVGV4dCgpOiBzdHJpbmcge1xuICAgIHZhciBpc09uUGFnZSA9IHRoaXMua29TaG93QXNXaW5kb3coKSA9PSBcInBhZ2VcIjtcbiAgICB2YXIgc3RyID0gdGhpcy5nZXRTYXZlRnVuYygpICsgXCJcXG5cXG5cIjtcbiAgICBzdHIgKz0gaXNPblBhZ2VcbiAgICAgID8gdGhpcy5wbGF0Zm9ybUpTb25QYWdlW3RoaXMua29MaWJyYXJ5VmVyc2lvbigpXVxuICAgICAgOiB0aGlzLnBsYXRmb3JtSlNvbldpbmRvd1t0aGlzLmtvTGlicmFyeVZlcnNpb24oKV07XG4gICAgdmFyIGpzb25UZXh0ID0gXCJ2YXIgc3VydmV5SlNPTiA9IFwiICsgdGhpcy5nZXRKc29uVGV4dCgpICsgXCJcXG5cXG5cIjtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXRDc3MoKSArIFwiXFxuXCIgKyBqc29uVGV4dCArIHN0cjtcbiAgfVxuICBwcml2YXRlIGdldFNldENzcygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmtvU2NyaXB0VXNpbmcoKSAhPSBcImJvb3RzdHJhcFwiKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gXCJTdXJ2ZXkuU3VydmV5LmNzc1R5cGUgPSBcXFwiYm9vdHN0cmFwXFxcIjtcXG5cIjtcbiAgfVxuICBwcml2YXRlIGdldFNhdmVGdW5jKCkge1xuICAgIHJldHVybiAoXG4gICAgICBcImZ1bmN0aW9uIHNlbmREYXRhVG9TZXJ2ZXIoc3VydmV5KSB7XFxuXCIgKyB0aGlzLmdldFNhdmVGdW5jQ29kZSgpICsgXCJcXG59XCJcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0U2F2ZUZ1bmNDb2RlKCkge1xuICAgIGlmICh0aGlzLmtvSGFzSWRzKCkpXG4gICAgICByZXR1cm4gXCIgICAgc3VydmV5LnNlbmRSZXN1bHQoJ1wiICsgdGhpcy5zdXJ2ZXlQb3N0SWQgKyBcIicpO1wiO1xuICAgIHJldHVybiBcIiAgICAvL3NlbmQgQWpheCByZXF1ZXN0IHRvIHlvdXIgd2ViIHNlcnZlci5cXG4gICAgYWxlcnQoXFxcIlRoZSByZXN1bHRzIGFyZTpcXFwiICsgSlNPTi5zdHJpbmdpZnkoc3VydmV5LmRhdGEpKTtcIjtcbiAgfVxuICBwcml2YXRlIGdldEpzb25UZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMua29IYXNJZHMoKSAmJiB0aGlzLmtvTG9hZFN1cnZleSgpKSB7XG4gICAgICByZXR1cm4gXCJ7IHN1cnZleUlkOiAnXCIgKyB0aGlzLnN1cnZleUlkICsgXCInfVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW5lcmF0ZVZhbGlkSlNPTikgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuanNvbik7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlKU09ONSgpLnN0cmluZ2lmeSh0aGlzLmpzb24pO1xuICB9XG4gIHByaXZhdGUgc2V0VGV4dFRvRWRpdG9yKGVkaXRvcjogQWNlQWpheC5FZGl0b3IsIGtvVGV4dDogYW55LCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAoZWRpdG9yKSBlZGl0b3Iuc2V0VmFsdWUodGV4dCk7XG4gICAgaWYgKGtvVGV4dCkga29UZXh0KHRleHQpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5RW1iZWRpbmdXaW5kb3cudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciwgT2JqVHlwZSB9IGZyb20gXCIuL3N1cnZleUhlbHBlclwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5T2JqZWN0SXRlbSB7XG4gIHB1YmxpYyB2YWx1ZTogU3VydmV5LkJhc2U7XG4gIHB1YmxpYyB0ZXh0OiBhbnk7XG4gIHB1YmxpYyBsZXZlbDogbnVtYmVyID0gMDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU9iamVjdHMge1xuICBwdWJsaWMgc3RhdGljIGludGVuZDogc3RyaW5nID0gXCIuXCI7XG4gIHN1cnZleVZhbHVlOiBTdXJ2ZXkuU3VydmV5O1xuICBwdWJsaWMgZ2V0SXRlbVRleHRDYWxsYmFjazogKG9iajogU3VydmV5LkJhc2UsIHRleHQ6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBrb09iamVjdHM6IGFueSwgcHVibGljIGtvU2VsZWN0ZWQ6IGFueSkge31cbiAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5LlN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBzdXJ2ZXkodmFsdWU6IFN1cnZleS5TdXJ2ZXkpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgPT0gdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleVZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5yZWJ1aWxkKCk7XG4gIH1cbiAgcHVibGljIGFkZFBhZ2UocGFnZTogU3VydmV5LlBhZ2VNb2RlbCkge1xuICAgIHRoaXMuYWRkRWxlbWVudChwYWdlLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgYWRkRWxlbWVudChlbGVtZW50OiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gcGFyZW50ICE9IG51bGwgPyB0aGlzLmdldEl0ZW1JbmRleChwYXJlbnQpIDogMDtcbiAgICBpZiAocGFyZW50SW5kZXggPCAwKSByZXR1cm47XG4gICAgdmFyIGVsZW1lbnRzID1cbiAgICAgIHBhcmVudCAhPSBudWxsID8gdGhpcy5nZXRFbGVtZW50cyhwYXJlbnQpIDogdGhpcy5zdXJ2ZXkucGFnZXM7XG4gICAgdmFyIGVsZW1lbnRJbmRleCA9IGVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgdmFyIG5ld0luZGV4ID0gZWxlbWVudEluZGV4ICsgMSArIHBhcmVudEluZGV4O1xuICAgIGlmIChlbGVtZW50SW5kZXggPiAwKSB7XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBlbGVtZW50c1tlbGVtZW50SW5kZXggLSAxXTtcbiAgICAgIG5ld0luZGV4ID1cbiAgICAgICAgdGhpcy5nZXRJdGVtSW5kZXgocHJldkVsZW1lbnQpICtcbiAgICAgICAgdGhpcy5nZXRBbGxFbGVtZW50Q291bnQocHJldkVsZW1lbnQpICtcbiAgICAgICAgMTtcbiAgICB9XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZUl0ZW0oZWxlbWVudCwgdGhpcy5rb09iamVjdHMoKVtwYXJlbnRJbmRleF0pO1xuICAgIHRoaXMuYWRkSXRlbShpdGVtLCBuZXdJbmRleCk7XG4gICAgdmFyIG9ianMgPSBbXTtcbiAgICB0aGlzLmJ1aWxkRWxlbWVudHMob2JqcywgdGhpcy5nZXRFbGVtZW50cyhlbGVtZW50KSwgaXRlbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmtvT2JqZWN0cy5zcGxpY2UobmV3SW5kZXggKyAxICsgaSwgMCwgb2Jqc1tpXSk7XG4gICAgfVxuICAgIHRoaXMua29TZWxlY3RlZChpdGVtKTtcbiAgfVxuICBwdWJsaWMgc2VsZWN0T2JqZWN0KG9iajogU3VydmV5LkJhc2UpIHtcbiAgICB2YXIgb2JqcyA9IHRoaXMua29PYmplY3RzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2Jqc1tpXS52YWx1ZSA9PSBvYmopIHtcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkKG9ianNbaV0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRTZWxlY3RlZE9iamVjdFBhZ2Uob2JqOiBTdXJ2ZXkuQmFzZSA9IG51bGwpOiBTdXJ2ZXkuUGFnZSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIGlmICghdGhpcy5rb1NlbGVjdGVkKCkpIHJldHVybjtcbiAgICAgIG9iaiA9IHRoaXMua29TZWxlY3RlZCgpLnZhbHVlO1xuICAgIH1cbiAgICB2YXIgb2JqcyA9IHRoaXMua29PYmplY3RzKCk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgob2JqKTtcbiAgICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgICB2YXIgaXRlbSA9IG9ianNbaW5kZXhdO1xuICAgICAgaWYgKGl0ZW0ubGV2ZWwgPT0gMSkgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICBpbmRleC0tO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlT2JqZWN0KG9iajogU3VydmV5LkJhc2UpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChvYmopO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICB2YXIgY291bnRUb1JlbW92ZSA9IDEgKyB0aGlzLmdldEFsbEVsZW1lbnRDb3VudChvYmopO1xuICAgIHRoaXMua29PYmplY3RzLnNwbGljZShpbmRleCwgY291bnRUb1JlbW92ZSk7XG4gIH1cbiAgcHVibGljIG5hbWVDaGFuZ2VkKG9iajogU3VydmV5LkJhc2UpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChvYmopO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLmtvT2JqZWN0cygpW2luZGV4XS50ZXh0KHRoaXMuZ2V0VGV4dCh0aGlzLmtvT2JqZWN0cygpW2luZGV4XSkpO1xuICB9XG4gIHB1YmxpYyBzZWxlY3ROZXh0UXVlc3Rpb24oaXNVcDogYm9vbGVhbikge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRRdWVzdGlvbigpO1xuICAgIHZhciBpdGVtSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChxdWVzdGlvbik7XG4gICAgaWYgKGl0ZW1JbmRleCA8IDApIHJldHVybiBxdWVzdGlvbjtcbiAgICB2YXIgb2JqcyA9IHRoaXMua29PYmplY3RzKCk7XG4gICAgdmFyIG5ld0l0ZW1JbmRleCA9IGl0ZW1JbmRleCArIChpc1VwID8gLTEgOiAxKTtcbiAgICBpZiAoXG4gICAgICBuZXdJdGVtSW5kZXggPCBvYmpzLmxlbmd0aCAmJlxuICAgICAgU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2Jqc1tuZXdJdGVtSW5kZXhdLnZhbHVlKSA9PSBPYmpUeXBlLlF1ZXN0aW9uXG4gICAgKSB7XG4gICAgICBpdGVtSW5kZXggPSBuZXdJdGVtSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0l0ZW1JbmRleCA9IGl0ZW1JbmRleDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgbmV3SXRlbUluZGV4IDwgb2Jqcy5sZW5ndGggJiZcbiAgICAgICAgU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2Jqc1tuZXdJdGVtSW5kZXhdLnZhbHVlKSA9PSBPYmpUeXBlLlF1ZXN0aW9uXG4gICAgICApIHtcbiAgICAgICAgaXRlbUluZGV4ID0gbmV3SXRlbUluZGV4O1xuICAgICAgICBuZXdJdGVtSW5kZXggKz0gaXNVcCA/IDEgOiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5rb1NlbGVjdGVkKG9ianNbaXRlbUluZGV4XSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRBbGxFbGVtZW50Q291bnQoZWxlbWVudDogYW55KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXRFbGVtZW50cyhlbGVtZW50KTtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgKz0gMSArIHRoaXMuZ2V0QWxsRWxlbWVudENvdW50KGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldFNlbGVjdGVkUXVlc3Rpb24oKTogU3VydmV5LlF1ZXN0aW9uQmFzZSB7XG4gICAgaWYgKCF0aGlzLmtvU2VsZWN0ZWQoKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9iaiA9IHRoaXMua29TZWxlY3RlZCgpLnZhbHVlO1xuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2JqKSA9PSBPYmpUeXBlLlF1ZXN0aW9uXG4gICAgICA/IDxTdXJ2ZXkuUXVlc3Rpb25CYXNlPm9ialxuICAgICAgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgYWRkSXRlbShpdGVtOiBTdXJ2ZXlPYmplY3RJdGVtLCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ID4gdGhpcy5rb09iamVjdHMoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMua29PYmplY3RzLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua29PYmplY3RzLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcmVidWlsZCgpIHtcbiAgICB2YXIgb2JqcyA9IFtdO1xuICAgIGlmICh0aGlzLnN1cnZleSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmtvT2JqZWN0cyhvYmpzKTtcbiAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcm9vdCA9IHRoaXMuY3JlYXRlSXRlbSh0aGlzLnN1cnZleSwgbnVsbCk7XG4gICAgb2Jqcy5wdXNoKHJvb3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXJ2ZXkucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LnBhZ2VzW2ldO1xuICAgICAgdmFyIHBhZ2VJdGVtID0gdGhpcy5jcmVhdGVJdGVtKHBhZ2UsIHJvb3QpO1xuICAgICAgb2Jqcy5wdXNoKHBhZ2VJdGVtKTtcbiAgICAgIHRoaXMuYnVpbGRFbGVtZW50cyhvYmpzLCB0aGlzLmdldEVsZW1lbnRzKHBhZ2UpLCBwYWdlSXRlbSk7XG4gICAgfVxuICAgIHRoaXMua29PYmplY3RzKG9ianMpO1xuICAgIHRoaXMuc2VsZWN0T2JqZWN0KHRoaXMuc3VydmV5KTtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRzKGVsZW1lbnQ6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0RWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRzKFxuICAgIG9ianM6IEFycmF5PGFueT4sXG4gICAgZWxlbWVudHM6IEFycmF5PGFueT4sXG4gICAgcGFyZW50SXRlbTogU3VydmV5T2JqZWN0SXRlbVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVJdGVtKDxTdXJ2ZXkuQmFzZT5lbCwgcGFyZW50SXRlbSk7XG4gICAgICBvYmpzLnB1c2goaXRlbSk7XG4gICAgICB0aGlzLmJ1aWxkRWxlbWVudHMob2JqcywgdGhpcy5nZXRFbGVtZW50cyhlbCksIGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZUl0ZW0odmFsdWU6IFN1cnZleS5CYXNlLCBwYXJlbnQ6IFN1cnZleU9iamVjdEl0ZW0pIHtcbiAgICB2YXIgaXRlbSA9IG5ldyBTdXJ2ZXlPYmplY3RJdGVtKCk7XG4gICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xuICAgIGl0ZW0ubGV2ZWwgPSBwYXJlbnQgIT0gbnVsbCA/IHBhcmVudC5sZXZlbCArIDEgOiAwO1xuICAgIGl0ZW0udGV4dCA9IGtvLm9ic2VydmFibGUodGhpcy5nZXRUZXh0KGl0ZW0pKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1JbmRleCh2YWx1ZTogU3VydmV5LkJhc2UpOiBudW1iZXIge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAtMTtcbiAgICBpZiAodmFsdWVbXCJzZWxlY3RlZEVsZW1lbnRJbkRlc2lnblwiXSlcbiAgICAgIHZhbHVlID0gdmFsdWVbXCJzZWxlY3RlZEVsZW1lbnRJbkRlc2lnblwiXTtcbiAgICB2YXIgb2JqcyA9IHRoaXMua29PYmplY3RzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2Jqc1tpXS52YWx1ZSA9PSB2YWx1ZSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcml2YXRlIGdldFRleHQoaXRlbTogU3VydmV5T2JqZWN0SXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW0ubGV2ZWwgPT0gMCkgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC5zdXJ2ZXlcIik7XG4gICAgdmFyIGludGVuZCA9IFN1cnZleU9iamVjdHMuaW50ZW5kO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgaXRlbS5sZXZlbDsgaSsrKSB7XG4gICAgICBpbnRlbmQgKz0gU3VydmV5T2JqZWN0cy5pbnRlbmQ7XG4gICAgfVxuICAgIHZhciB0ZXh0ID0gU3VydmV5SGVscGVyLmdldE9iamVjdE5hbWUoaXRlbS52YWx1ZSk7XG4gICAgaWYgKHRoaXMuZ2V0SXRlbVRleHRDYWxsYmFjaykge1xuICAgICAgdGV4dCA9IHRoaXMuZ2V0SXRlbVRleHRDYWxsYmFjayhpdGVtLnZhbHVlLCB0ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGludGVuZCArIHRleHQ7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlPYmplY3RzLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWxwZXIsIE9ialR5cGUgfSBmcm9tIFwiLi9zdXJ2ZXlIZWxwZXJcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUxpdmVUZXN0ZXIge1xuICBwcml2YXRlIGpzb246IGFueTtcbiAga29Jc1J1bm5pbmc6IGFueTtcbiAgc2VsZWN0VGVzdENsaWNrOiBhbnk7XG4gIHNlbGVjdFBhZ2VDbGljazogYW55O1xuICBrb1Jlc3VsdFRleHQ6IGFueTtcbiAgc3VydmV5OiBTdXJ2ZXkuU3VydmV5O1xuICBrb1N1cnZleTogYW55O1xuICBrb1BhZ2VzOiBhbnk7XG4gIGtvQWN0aXZlUGFnZTogYW55O1xuICBzZXRQYWdlRGlzYWJsZTogYW55O1xuXG4gIG9uU3VydmV5Q3JlYXRlZENhbGxiYWNrOiAoc3VydmV5OiBTdXJ2ZXkuU3VydmV5KSA9PiBhbnk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMua29Jc1J1bm5pbmcgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHRoaXMua29SZXN1bHRUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvUGFnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuICAgIHRoaXMua29BY3RpdmVQYWdlID0ga28ub2JzZXJ2YWJsZShudWxsKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zZWxlY3RUZXN0Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYudGVzdEFnYWluKCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2VDbGljayA9IGZ1bmN0aW9uKHBhZ2VJdGVtKSB7XG4gICAgICBpZiAoc2VsZi5zdXJ2ZXkpIHtcbiAgICAgICAgaWYgKHNlbGYuc3VydmV5LnN0YXRlID09IFwic3RhcnRpbmdcIikge1xuICAgICAgICAgIHNlbGYuc3VydmV5W1wic3RhcnRcIl0oKTsgLy9UT0RPXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5zdXJ2ZXkuY3VycmVudFBhZ2UgPSBwYWdlSXRlbS5wYWdlO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5rb0FjdGl2ZVBhZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLnN1cnZleS5jdXJyZW50UGFnZSA9IG5ld1ZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0UGFnZURpc2FibGUgPSBmdW5jdGlvbihvcHRpb24sIGl0ZW0pIHtcbiAgICAgIGtvLmFwcGx5QmluZGluZ3NUb05vZGUob3B0aW9uLCB7IGRpc2FibGU6IGl0ZW0ua29EaXNhYmxlZCB9LCBpdGVtKTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5ID0gbmV3IFN1cnZleS5TdXJ2ZXkoKTtcbiAgICB0aGlzLmtvU3VydmV5ID0ga28ub2JzZXJ2YWJsZSh0aGlzLnN1cnZleSk7XG4gIH1cbiAgcHVibGljIHNldEpTT04oanNvbjogYW55KSB7XG4gICAgdGhpcy5qc29uID0ganNvbjtcbiAgICBpZiAoanNvbiAhPSBudWxsKSB7XG4gICAgICBpZiAoanNvbi5jb29raWVOYW1lKSB7XG4gICAgICAgIGRlbGV0ZSBqc29uLmNvb2tpZU5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3VydmV5ID0ganNvbiA/IG5ldyBTdXJ2ZXkuU3VydmV5KGpzb24pIDogbmV3IFN1cnZleS5TdXJ2ZXkoKTtcbiAgICBpZiAodGhpcy5vblN1cnZleUNyZWF0ZWRDYWxsYmFjaykgdGhpcy5vblN1cnZleUNyZWF0ZWRDYWxsYmFjayh0aGlzLnN1cnZleSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXkpID0+IHtcbiAgICAgIHNlbGYua29Jc1J1bm5pbmcoZmFsc2UpO1xuICAgICAgc2VsZi5rb1Jlc3VsdFRleHQoXG4gICAgICAgIHNlbGYuc3VydmV5UmVzdWx0c1RleHQgKyBKU09OLnN0cmluZ2lmeShzZWxmLnN1cnZleS5kYXRhKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICAvL1RPRE9cbiAgICBpZiAodGhpcy5zdXJ2ZXlbXCJvblN0YXJ0ZWRcIl0pIHtcbiAgICAgIHRoaXMuc3VydmV5W1wib25TdGFydGVkXCJdLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5KSA9PiB7XG4gICAgICAgIHNlbGYuc2V0QWN0aXZlUGFnZUl0ZW0oPFN1cnZleS5QYWdlPnNlbGYuc3VydmV5LmN1cnJlbnRQYWdlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleS5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgc2VsZi5rb0FjdGl2ZVBhZ2Uob3B0aW9ucy5uZXdDdXJyZW50UGFnZSk7XG4gICAgICBzZWxmLnNldEFjdGl2ZVBhZ2VJdGVtKG9wdGlvbnMub2xkQ3VycmVudFBhZ2UsIGZhbHNlKTtcbiAgICAgIHNlbGYuc2V0QWN0aXZlUGFnZUl0ZW0ob3B0aW9ucy5uZXdDdXJyZW50UGFnZSwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIHZhciBpdGVtID0gc2VsZi5nZXRQYWdlSXRlbUJ5UGFnZShvcHRpb25zLnBhZ2UpO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbS5rb1Zpc2libGUob3B0aW9ucy52aXNpYmxlKTtcbiAgICAgICAgaXRlbS5rb0Rpc2FibGVkKCFvcHRpb25zLnZpc2libGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzaG93KCkge1xuICAgIHZhciBwYWdlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXJ2ZXkucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5zdXJ2ZXkucGFnZXNbaV07XG4gICAgICBwYWdlcy5wdXNoKHtcbiAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgdGl0bGU6IFN1cnZleUhlbHBlci5nZXRPYmplY3ROYW1lKHBhZ2UpLFxuICAgICAgICBrb1Zpc2libGU6IGtvLm9ic2VydmFibGUocGFnZS5pc1Zpc2libGUpLFxuICAgICAgICBrb0Rpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFwYWdlLmlzVmlzaWJsZSksXG4gICAgICAgIGtvQWN0aXZlOiBrby5vYnNlcnZhYmxlKFxuICAgICAgICAgIHRoaXMuc3VydmV5LnN0YXRlID09IFwicnVubmluZ1wiICYmIHBhZ2UgPT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmtvUGFnZXMocGFnZXMpO1xuICAgIHRoaXMua29TdXJ2ZXkodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMua29BY3RpdmVQYWdlKHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmtvSXNSdW5uaW5nKHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdFN1cnZleUFnYWluVGV4dCgpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnRlc3RTdXJ2ZXlBZ2FpblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleVJlc3VsdHNUZXh0KCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdFBhZ2VUZXh0KCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidHMuc2VsZWN0UGFnZVwiKTtcbiAgfVxuICBwcml2YXRlIHRlc3RBZ2FpbigpIHtcbiAgICB0aGlzLnNldEpTT04odGhpcy5qc29uKTtcbiAgICB0aGlzLnNob3coKTtcbiAgfVxuICBwcml2YXRlIHNldEFjdGl2ZVBhZ2VJdGVtKHBhZ2U6IFN1cnZleS5QYWdlLCB2YWw6IGJvb2xlYW4pIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0UGFnZUl0ZW1CeVBhZ2UocGFnZSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGl0ZW0ua29BY3RpdmUodmFsKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYWdlSXRlbUJ5UGFnZShwYWdlOiBTdXJ2ZXkuUGFnZSk6IGFueSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5rb1BhZ2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLnBhZ2UgPT09IHBhZ2UpIHJldHVybiBpdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlsaXZlLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5VW5kb1JlZG8ge1xuICBwcml2YXRlIGl0ZW1zOiBBcnJheTxVbmRvUmVkb0l0ZW0+O1xuICBwcml2YXRlIGluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIGtvQ2FuVW5kbzogYW55O1xuICBrb0NhblJlZG86IGFueTtcbiAgcHVibGljIG1heGltdW1Db3VudDogbnVtYmVyID0gMTA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmtvQ2FuVW5kbyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIHRoaXMua29DYW5SZWRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmtvQ2FuVW5kbyhmYWxzZSk7XG4gICAgdGhpcy5rb0NhblJlZG8oZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXRDdXJyZW50KHN1cnZleTogU3VydmV5LlN1cnZleSwgc2VsZWN0ZWRPYmpOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgaXRlbSA9IG5ldyBVbmRvUmVkb0l0ZW0oKTtcbiAgICBpdGVtLnN1cnZleUpTT04gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3Qoc3VydmV5KTtcbiAgICBpdGVtLnNlbGVjdGVkT2JqTmFtZSA9IHNlbGVjdGVkT2JqTmFtZTtcbiAgICBpZiAodGhpcy5pbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pbmRleCArIDEpO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgdGhpcy5yZW1vdmVPbGREYXRhKCk7XG4gICAgdGhpcy5pbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnVwZGF0ZUNhblVuZG9SZWRvKCk7XG4gIH1cbiAgcHVibGljIHVuZG8oKTogVW5kb1JlZG9JdGVtIHtcbiAgICBpZiAoIXRoaXMuY2FuVW5kbykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZG9VbmRvUmVkbygtMSk7XG4gIH1cbiAgcHVibGljIHJlZG8oKTogVW5kb1JlZG9JdGVtIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVkbykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZG9VbmRvUmVkbygxKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUNhblVuZG9SZWRvKCkge1xuICAgIHRoaXMua29DYW5VbmRvKHRoaXMuY2FuVW5kbyk7XG4gICAgdGhpcy5rb0NhblJlZG8odGhpcy5jYW5SZWRvKTtcbiAgfVxuICBwcml2YXRlIGRvVW5kb1JlZG8oZEluZGV4OiBudW1iZXIpOiBVbmRvUmVkb0l0ZW0ge1xuICAgIHRoaXMuaW5kZXggKz0gZEluZGV4O1xuICAgIHRoaXMudXBkYXRlQ2FuVW5kb1JlZG8oKTtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA+PSAwICYmIHRoaXMuaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aFxuICAgICAgPyB0aGlzLml0ZW1zW3RoaXMuaW5kZXhdXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZGV4ID49IDEgJiYgdGhpcy5pbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiAxICYmIHRoaXMuaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVPbGREYXRhKCkge1xuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAtIDEgPCB0aGlzLm1heGltdW1Db3VudCkgcmV0dXJuO1xuICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5tYXhpbXVtQ291bnQgLSAxKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5kb1JlZG9JdGVtIHtcbiAgc3VydmV5SlNPTjogYW55O1xuICBzZWxlY3RlZE9iak5hbWU6IHN0cmluZztcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91bmRvcmVkby50cyIsInZhciBpcyA9IGZ1bmN0aW9uIChvYmosIHR5cGUpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnRvTG93ZXJDYXNlKCkgPT09IChcIltvYmplY3QgXCIgKyB0eXBlICsgXCJdXCIpOyB9O1xuXG52YXIgYWRkQ2xhc3MgPSBmdW5jdGlvbiAoZWwsIGNscykge1xuICAgIHZhciBhcnIgPSBlbC5jbGFzc05hbWVcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuICEhYyAmJiBjID09IGNsczsgfSk7XG5cbiAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lICs9IFwiIFwiICsgY2xzO1xuICAgIH1cbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiAhIWMgJiYgYyAhPSBjbHM7IH0pXG4gICAgLmpvaW4oJyAnKTtcbn07XG5cbnZhciBSTW9kYWwgPSBmdW5jdGlvbiBSTW9kYWwoZWwsIG9wdHMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9wdHMgPSB7XG4gICAgICAgIGJvZHlDbGFzczogJ21vZGFsLW9wZW4nXG4gICAgICAgICwgZGlhbG9nQ2xhc3M6ICdtb2RhbC1kaWFsb2cnXG4gICAgICAgICwgZGlhbG9nT3BlbkNsYXNzOiAnYm91bmNlSW5Eb3duJ1xuICAgICAgICAsIGRpYWxvZ0Nsb3NlQ2xhc3M6ICdib3VuY2VPdXRVcCdcblxuICAgICAgICAsIGZvY3VzOiB0cnVlXG4gICAgICAgICwgZm9jdXNFbGVtZW50czogW1xuICAgICAgICAgICAgJ2FbaHJlZl0nLCAnYXJlYVtocmVmXScsICdpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0eXBlPWhpZGRlbl0pJ1xuICAgICAgICAgICAgLCAnYnV0dG9uOm5vdChbZGlzYWJsZWRdKScsICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJ1xuICAgICAgICAgICAgLCAndGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pJywgJ2lmcmFtZScsICdvYmplY3QnLCAnZW1iZWQnXG4gICAgICAgICAgICAsICcqW3RhYmluZGV4XScsICcqW2NvbnRlbnRlZGl0YWJsZV0nXG4gICAgICAgIF1cblxuICAgICAgICAsIGVzY2FwZUNsb3NlOiB0cnVlXG4gICAgICAgICwgY29udGVudDogbnVsbFxuICAgICAgICAsIGNsb3NlVGltZW91dDogNTAwXG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKG9wdHMgfHwge30pXG4gICAgLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAob3B0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMkMS5vcHRzW2tleV0gPSBvcHRzW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3ZlcmxheSA9IGVsO1xuICAgIHRoaXMuZGlhbG9nID0gZWwucXVlcnlTZWxlY3RvcigoXCIuXCIgKyAodGhpcy5vcHRzLmRpYWxvZ0NsYXNzKSkpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5jb250ZW50KSB7XG4gICAgICAgIHRoaXMuY29udGVudCh0aGlzLm9wdHMuY29udGVudCk7XG4gICAgfVxufTtcblxuUk1vZGFsLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gb3BlbiAoY29udGVudCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuY29udGVudChjb250ZW50KTtcblxuICAgIGlmICghaXModGhpcy5vcHRzLmJlZm9yZU9wZW4sICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb09wZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdHMuYmVmb3JlT3BlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMkMS5fZG9PcGVuKCk7XG4gICAgfSk7XG59O1xuXG5STW9kYWwucHJvdG90eXBlLl9kb09wZW4gPSBmdW5jdGlvbiBfZG9PcGVuICgpIHtcbiAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLm9wdHMuYm9keUNsYXNzKTtcblxuICAgIHJlbW92ZUNsYXNzKHRoaXMuZGlhbG9nLCB0aGlzLm9wdHMuZGlhbG9nQ2xvc2VDbGFzcyk7XG4gICAgYWRkQ2xhc3ModGhpcy5kaWFsb2csIHRoaXMub3B0cy5kaWFsb2dPcGVuQ2xhc3MpO1xuXG4gICAgdGhpcy5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgaWYgKHRoaXMub3B0cy5mb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzT3V0RWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXModGhpcy5vcHRzLmFmdGVyT3BlbiwgJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhpcy5vcHRzLmFmdGVyT3BlbigpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5lZCA9IHRydWU7XG59O1xuXG5STW9kYWwucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICghaXModGhpcy5vcHRzLmJlZm9yZUNsb3NlLCAnZnVuY3Rpb24nKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9DbG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMub3B0cy5iZWZvcmVDbG9zZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMkMS5fZG9DbG9zZSgpO1xuICAgIH0pO1xufTtcblxuUk1vZGFsLnByb3RvdHlwZS5fZG9DbG9zZSA9IGZ1bmN0aW9uIF9kb0Nsb3NlICgpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZW1vdmVDbGFzcyh0aGlzLmRpYWxvZywgdGhpcy5vcHRzLmRpYWxvZ09wZW5DbGFzcyk7XG4gICAgYWRkQ2xhc3ModGhpcy5kaWFsb2csIHRoaXMub3B0cy5kaWFsb2dDbG9zZUNsYXNzKTtcblxuICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMub3B0cy5ib2R5Q2xhc3MpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5mb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKHRoaXMuZm9jdXNPdXRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXModGhpcy5vcHRzLmFmdGVyQ2xvc2UsICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHRoaXMub3B0cy5hZnRlckNsb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcyQxLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9LCB0aGlzLm9wdHMuY2xvc2VUaW1lb3V0KTtcbn07XG5cblJNb2RhbC5wcm90b3R5cGUuY29udGVudCA9IGZ1bmN0aW9uIGNvbnRlbnQgKGh0bWwpIHtcbiAgICBpZiAoaHRtbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZy5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcbn07XG5cblJNb2RhbC5wcm90b3R5cGUuZWxlbWVudHMgPSBmdW5jdGlvbiBlbGVtZW50cyAoc2VsZWN0b3IsIGZhbGxiYWNrKSB7XG4gICAgZmFsbGJhY2sgPSBmYWxsYmFjayB8fCB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignTVNJRSA5LjAnKSA+IC0xO1xuICAgIHNlbGVjdG9yID0gaXMoc2VsZWN0b3IsICdhcnJheScpID8gc2VsZWN0b3Iuam9pbignLCcpIDogc2VsZWN0b3I7XG5cbiAgICByZXR1cm4gW10uZmlsdGVyLmNhbGwoXG4gICAgICAgIHRoaXMuZGlhbG9nLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgICAgICwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChmYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgc3R5bGUudmlzaWJpbGl0eSAhPT0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudCAhPT0gbnVsbDtcbiAgICAgICAgfVxuICAgICk7XG59O1xuXG5STW9kYWwucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMgKGVsKSB7XG4gICAgZWwgPSBlbCB8fCB0aGlzLmVsZW1lbnRzKHRoaXMub3B0cy5mb2N1c0VsZW1lbnRzKVswXSB8fCB0aGlzLmRpYWxvZy5maXJzdENoaWxkO1xuXG4gICAgaWYgKGVsICYmIGlzKGVsLmZvY3VzLCAnZnVuY3Rpb24nKSkge1xuICAgICAgICBlbC5mb2N1cygpO1xuICAgIH1cbn07XG5cblJNb2RhbC5wcm90b3R5cGUua2V5ZG93biA9IGZ1bmN0aW9uIGtleWRvd24gKGV2KSB7XG4gICAgaWYgKHRoaXMub3B0cy5lc2NhcGVDbG9zZSAmJiBldi53aGljaCA9PSAyNykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RvcEV2ZW50KCkge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVuZWQgJiYgZXYud2hpY2ggPT0gOSAmJiB0aGlzLmRpYWxvZy5jb250YWlucyhldi50YXJnZXQpKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHModGhpcy5vcHRzLmZvY3VzRWxlbWVudHMpXG4gICAgICAgICAgICAsIGZpcnN0ID0gZWxlbWVudHNbMF1cbiAgICAgICAgICAgICwgbGFzdCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChmaXJzdCA9PSBsYXN0KSB7XG4gICAgICAgICAgICBzdG9wRXZlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldi50YXJnZXQgPT0gZmlyc3QgJiYgZXYuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHN0b3BFdmVudCgpO1xuICAgICAgICAgICAgbGFzdC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2LnRhcmdldCA9PSBsYXN0ICYmICFldi5zaGlmdEtleSkge1xuICAgICAgICAgICAgc3RvcEV2ZW50KCk7XG4gICAgICAgICAgICBmaXJzdC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUk1vZGFsLnByb3RvdHlwZS52ZXJzaW9uID0gJzEuMC4zMCc7XG5STW9kYWwudmVyc2lvbiA9ICcxLjAuMzAnO1xuXG5leHBvcnQgZGVmYXVsdCBSTW9kYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lcy5qcy5tYXBcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9ybW9kYWwvaW5kZXguZXMuanNcbi8vIG1vZHVsZSBpZCA9IDMyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvbWFpbi5zY3NzXG4vLyBtb2R1bGUgaWQgPSAzM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3V0aWxzL2N1c3RvbS1jaGVja2JveC5zY3NzXG4vLyBtb2R1bGUgaWQgPSAzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3V0aWxzL2N1c3RvbS1zZWxlY3Quc2Nzc1xuLy8gbW9kdWxlIGlkID0gMzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy91dGlscy9kZG1lbnUuc2Nzc1xuLy8gbW9kdWxlIGlkID0gMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyByZWdpc3RlckFkb3JuZXIgfSBmcm9tIFwiLi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBUaXRsZUlucGxhY2VFZGl0b3IgfSBmcm9tIFwiLi90aXRsZS1lZGl0b3JcIjtcblxuaW1wb3J0IFwiLi9sYWJlbC1lZGl0b3Iuc2Nzc1wiO1xuXG5leHBvcnQgdmFyIGxhYmVsQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICBpZiAobW9kZWwuZ2V0VHlwZSgpID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwibGFiZWxfZWRpdGFibGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH0sXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsLCBlZGl0b3IpID0+IHtcbiAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGRlY29yYXRpb24uaW5uZXJIVE1MID1cbiAgICAgIFwiPHRpdGxlLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJsYWJlbFxcXCIsIG1vZGVsOiBtb2RlbCwgZWRpdG9yOiBlZGl0b3InPjwvdGl0bGUtZWRpdG9yPlwiO1xuICAgIGVsZW1lbnRzWzBdLm9uY2xpY2sgPSBlID0+IGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlbGVtZW50c1swXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHsgbW9kZWw6IG1vZGVsLCBlZGl0b3I6IGVkaXRvciB9LCBkZWNvcmF0aW9uKTtcbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwibGFiZWxcIiwgbGFiZWxBZG9ybmVyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hZG9ybmVycy9sYWJlbC1lZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCB7XG4gIHJlZ2lzdGVyQWRvcm5lcixcbiAgU3VydmV5Rm9yRGVzaWduZXIsXG4gIElTdXJ2ZXlPYmplY3RNZW51SXRlbVxufSBmcm9tIFwiLi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgXCIuL3F1ZXN0aW9uLWFjdGlvbnMuc2Nzc1wiO1xudmFyIHRlbXBsYXRlSHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vcXVlc3Rpb24tYWN0aW9ucy5odG1sXCIpO1xuaW1wb3J0IHsgUXVlc3Rpb25Db252ZXJ0ZXIgfSBmcm9tIFwiLi4vcXVlc3Rpb25jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQWN0aW9uc0Fkb3JuZXIge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcXVlc3Rpb24sIHByaXZhdGUgZWRpdG9yKSB7XG4gICAgdmFyIHN1cnZleUZvckRlc2lnbmVyOiBTdXJ2ZXlGb3JEZXNpZ25lciA9IGVkaXRvci5zdXJ2ZXk7XG4gICAgdGhpcy5hY3Rpb25zKHN1cnZleUZvckRlc2lnbmVyLmdldE1lbnVJdGVtcyhxdWVzdGlvbikpO1xuICB9XG5cbiAgcHVibGljIGFjdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXk8SVN1cnZleU9iamVjdE1lbnVJdGVtPigpO1xuXG4gIHB1YmxpYyBnZXRTdHlsZShtb2RlbDogSVN1cnZleU9iamVjdE1lbnVJdGVtKSB7XG4gICAgaWYgKCEhbW9kZWwuaWNvbikge1xuICAgICAgcmV0dXJuIGtvLnVud3JhcChtb2RlbC5pY29uKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiaWNvbi1hY3Rpb25cIiArIG1vZGVsLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgbG9jYWxpemUoZW50cnlTdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhlbnRyeVN0cmluZyk7XG4gIH1cbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInF1ZXN0aW9uLWFjdGlvbnNcIiwge1xuICB2aWV3TW9kZWw6IHtcbiAgICBjcmVhdGVWaWV3TW9kZWw6IChwYXJhbXMsIGNvbXBvbmVudEluZm8pID0+IHtcbiAgICAgIHZhciBtb2RlbCA9IG5ldyBRdWVzdGlvbkFjdGlvbnNBZG9ybmVyKHBhcmFtcy5xdWVzdGlvbiwgcGFyYW1zLmVkaXRvcik7XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuICB9LFxuICB0ZW1wbGF0ZTogdGVtcGxhdGVIdG1sXG59KTtcblxuZXhwb3J0IHZhciBxdWVzdGlvbkFjdGlvbnNBZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiAhbW9kZWwuaXNQYW5lbCA/IFwicXVlc3Rpb25fYWN0aW9uc1wiIDogXCJcIjtcbiAgfSxcbiAgYWZ0ZXJSZW5kZXI6IChlbGVtZW50czogSFRNTEVsZW1lbnRbXSwgbW9kZWwsIGVkaXRvcikgPT4ge1xuICAgIHZhciBkZWNvcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkZWNvcmF0aW9uLmNsYXNzTmFtZSA9IFwic3ZkYS1xdWVzdGlvbi1hY3Rpb25zXCI7XG4gICAgZGVjb3JhdGlvbi5pbm5lckhUTUwgPVxuICAgICAgXCI8cXVlc3Rpb24tYWN0aW9ucyBwYXJhbXM9J3F1ZXN0aW9uOiBtb2RlbCwgZWRpdG9yOiBlZGl0b3InPjwvcXVlc3Rpb24tYWN0aW9ucz5cIjtcbiAgICBlbGVtZW50c1swXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHsgbW9kZWw6IG1vZGVsLCBlZGl0b3I6IGVkaXRvciB9LCBkZWNvcmF0aW9uKTtcbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwibWFpblJvb3RcIiwgcXVlc3Rpb25BY3Rpb25zQWRvcm5lcik7XG5cbmV4cG9ydCB2YXIgcGFuZWxBY3Rpb25zQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICByZXR1cm4gISFtb2RlbC5pc1BhbmVsID8gXCJwYW5lbF9hY3Rpb25zXCIgOiBcIlwiO1xuICB9LFxuICBhZnRlclJlbmRlcjogcXVlc3Rpb25BY3Rpb25zQWRvcm5lci5hZnRlclJlbmRlclxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwiY29udGFpbmVyXCIsIHBhbmVsQWN0aW9uc0Fkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyByZWdpc3RlckFkb3JuZXIgfSBmcm9tIFwiLi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBUaXRsZUlucGxhY2VFZGl0b3IgfSBmcm9tIFwiLi90aXRsZS1lZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleUVkaXRvciB9IGZyb20gXCIuLi9lZGl0b3JcIjtcbmltcG9ydCB7IGdldE5leHRWYWx1ZSwgZmluZFBhcmVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuaW1wb3J0IFwiLi9yYXRpbmctaXRlbS1lZGl0b3Iuc2Nzc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xudmFyIHRlbXBsYXRlSHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vcmF0aW5nLWl0ZW0tZWRpdG9yLmh0bWxcIik7XG5cbmNsYXNzIFJhdGluZ0l0ZW1FZGl0b3IgZXh0ZW5kcyBUaXRsZUlucGxhY2VFZGl0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uUmF0aW5nLFxuICAgIHByaXZhdGUgaXRlbSxcbiAgICByb290RWxlbWVudCxcbiAgICBwcml2YXRlIGVkaXRvcjogU3VydmV5RWRpdG9yXG4gICkge1xuICAgIHN1cGVyKG5hbWUsIHJvb3RFbGVtZW50KTtcbiAgfVxuXG4gIGRlbGV0ZUl0ZW0obW9kZWw6IFJhdGluZ0l0ZW1FZGl0b3IsIGV2ZW50KSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gbW9kZWwucXVlc3Rpb247XG4gICAgdmFyIGluZGV4ID0gcXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXNcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKVxuICAgICAgLmluZGV4T2YobW9kZWwuaXRlbS52YWx1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgaW5kZXggPT09IHF1ZXN0aW9uLnZpc2libGVSYXRlVmFsdWVzLmxlbmd0aCAtIDFcbiAgICApIHtcbiAgICAgIHF1ZXN0aW9uLnJhdGVNYXggLT0gcXVlc3Rpb24ucmF0ZVN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWVzdGlvbi5yYXRlVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzID0gcXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXM7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIG1vZGVsLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gIH1cbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInJhdGluZy1pdGVtLWVkaXRvclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgdmFyIG1vZGVsID0gbmV3IFJhdGluZ0l0ZW1FZGl0b3IoXG4gICAgICAgIHBhcmFtcy50YXJnZXRbcGFyYW1zLm5hbWVdLFxuICAgICAgICBwYXJhbXMucXVlc3Rpb24sXG4gICAgICAgIHBhcmFtcy5pdGVtLFxuICAgICAgICBjb21wb25lbnRJbmZvLmVsZW1lbnQsXG4gICAgICAgIHBhcmFtcy5lZGl0b3JcbiAgICAgICk7XG4gICAgICB2YXIgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvblJhdGluZyA9IHBhcmFtcy5xdWVzdGlvbjtcblxuICAgICAgdmFyIHByb3BlcnR5ID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFxuICAgICAgICBwYXJhbXMudGFyZ2V0LmdldFR5cGUoKSxcbiAgICAgICAgcGFyYW1zLm5hbWVcbiAgICAgICk7XG4gICAgICBtb2RlbC52YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5yYXRlVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHF1ZXN0aW9uLnJhdGVWYWx1ZXMgPSBxdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcztcbiAgICAgICAgICB2YXIgaW5kZXggPSBxdWVzdGlvbi5yYXRlVmFsdWVzXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSlcbiAgICAgICAgICAgIC5pbmRleE9mKHBhcmFtcy5pdGVtLnZhbHVlKTtcbiAgICAgICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzW2luZGV4XSA9IHBhcmFtcy50YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLnRhcmdldFtwYXJhbXMubmFtZV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgcGFyYW1zLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlSHRtbFxufSk7XG5cbnZhciBjcmVhdGVBZGRJdGVtSGFuZGxlciA9IChcbiAgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvblJhdGluZyxcbiAgb25JdGVtQWRkZWQ6IChpdGVtVmFsdWU6IFN1cnZleS5JdGVtVmFsdWUpID0+IHZvaWRcbikgPT4gKCkgPT4ge1xuICBpZiAocXVlc3Rpb24ucmF0ZVZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICBxdWVzdGlvbi5yYXRlTWF4ICs9IHF1ZXN0aW9uLnJhdGVTdGVwO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VmFsdWUgPSBudWxsO1xuICAgIHZhciB2YWx1ZXMgPSBxdWVzdGlvbi5yYXRlVmFsdWVzLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5pdGVtVmFsdWU7XG4gICAgfSk7XG4gICAgbmV4dFZhbHVlID0gZ2V0TmV4dFZhbHVlKFwiaXRlbVwiLCB2YWx1ZXMpO1xuXG4gICAgdmFyIGl0ZW1WYWx1ZSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKG5leHRWYWx1ZSk7XG4gICAgaXRlbVZhbHVlLmxvY093bmVyID0ge1xuICAgICAgZ2V0TG9jYWxlOiAoKSA9PiB7XG4gICAgICAgIGlmICghIXF1ZXN0aW9uW1wiZ2V0TG9jYWxlXCJdKSByZXR1cm4gcXVlc3Rpb24uZ2V0TG9jYWxlKCk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfSxcbiAgICAgIGdldE1hcmtkb3duSHRtbDogKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH0sXG4gICAgICBnZXRQcm9jZXNzZWRUZXh0OiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfVxuICAgIH07XG4gICAgcXVlc3Rpb24ucmF0ZVZhbHVlcyA9IHF1ZXN0aW9uLnJhdGVWYWx1ZXMuY29uY2F0KFtpdGVtVmFsdWVdKTtcbiAgfVxuICAhIW9uSXRlbUFkZGVkICYmIG9uSXRlbUFkZGVkKGl0ZW1WYWx1ZSk7XG59O1xuXG5leHBvcnQgdmFyIHJhdGluZ0l0ZW1BZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiAhIW1vZGVsLnZpc2libGVSYXRlVmFsdWVzID8gXCJpdGVtX2VkaXRhYmxlXCIgOiBcIlwiO1xuICB9LFxuICBhZnRlclJlbmRlcjogKFxuICAgIGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdLFxuICAgIG1vZGVsOiBTdXJ2ZXkuUXVlc3Rpb25SYXRpbmcsXG4gICAgZWRpdG9yXG4gICkgPT4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnRzW2ldLm9uY2xpY2sgPSBlID0+IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciBkZWNvcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBkZWNvcmF0aW9uLmlubmVySFRNTCA9XG4gICAgICAgIFwiPHJhdGluZy1pdGVtLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJ0ZXh0XFxcIiwgdGFyZ2V0OiB0YXJnZXQsIGl0ZW06IGl0ZW0sIHF1ZXN0aW9uOiBxdWVzdGlvbiwgZWRpdG9yOiBlZGl0b3InPjwvcmF0aW5nLWl0ZW0tZWRpdG9yPlwiO1xuICAgICAgZWxlbWVudHNbaV0uYXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7XG4gICAgICB2YXIgaXRlbSA9IG1vZGVsLnZpc2libGVSYXRlVmFsdWVzW2ldO1xuICAgICAga28uYXBwbHlCaW5kaW5ncyhcbiAgICAgICAge1xuICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgcXVlc3Rpb246IG1vZGVsLFxuICAgICAgICAgIHRhcmdldDogaXRlbSxcbiAgICAgICAgICBlZGl0b3I6IGVkaXRvclxuICAgICAgICB9LFxuICAgICAgICBkZWNvcmF0aW9uXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBhZGROZXcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICBhZGROZXcudGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuYWRkSXRlbVwiKTtcbiAgICBhZGROZXcuY2xhc3NOYW1lID1cbiAgICAgIFwic3ZkYS1hZGQtbmV3LXJhdGluZy1pdGVtIGljb24taW5wbGFjZS1hZGQtaXRlbSBzdmQtcHJpbWFyeS1pY29uXCI7XG4gICAgYWRkTmV3Lm9uY2xpY2sgPSBjcmVhdGVBZGRJdGVtSGFuZGxlcihtb2RlbCwgaXRlbVZhbHVlID0+XG4gICAgICBlZGl0b3Iub25RdWVzdGlvbkVkaXRvckNoYW5nZWQobW9kZWwpXG4gICAgKTtcbiAgICB2YXIgc3ZnRWxlbTogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJzdmdcIlxuICAgICk7XG4gICAgc3ZnRWxlbS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInN2ZC1zdmctaWNvblwiKTtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gXCIxMnB4XCI7XG4gICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSBcIjEycHhcIjtcbiAgICB2YXIgdXNlRWxlbTogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJ1c2VcIlxuICAgICk7XG4gICAgdXNlRWxlbS5zZXRBdHRyaWJ1dGVOUyhcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgXCJ4bGluazpocmVmXCIsXG4gICAgICBcIiNpY29uLWlucGxhY2VwbHVzXCJcbiAgICApO1xuICAgIHN2Z0VsZW0uYXBwZW5kQ2hpbGQodXNlRWxlbSk7XG4gICAgYWRkTmV3LmFwcGVuZENoaWxkKHN2Z0VsZW0pO1xuXG4gICAgdmFyIHBhcmVudCA9IGVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoYWRkTmV3KTtcbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwiaXRlbVRleHRcIiwgcmF0aW5nSXRlbUFkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL3JhdGluZy1pdGVtLWVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCBTb3J0YWJsZSBmcm9tIFwic29ydGFibGVqc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBZG9ybmVyIH0gZnJvbSBcIi4uL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgY3JlYXRlQWRkSXRlbUhhbmRsZXIgfSBmcm9tIFwiLi9pdGVtLWVkaXRvclwiO1xuXG5pbXBvcnQgXCIuL3NlbGVjdC1pdGVtcy1lZGl0b3Iuc2Nzc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xudmFyIHRlbXBsYXRlSHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vc2VsZWN0LWl0ZW1zLWVkaXRvci5odG1sXCIpO1xuXG5rby5jb21wb25lbnRzLnJlZ2lzdGVyKFwic2VsZWN0LWl0ZW1zLWVkaXRvclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgdmFyIGlzRXhwYW5kZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgICAgdmFyIGNob2ljZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkocGFyYW1zLnF1ZXN0aW9uLmNob2ljZXMpO1xuICAgICAgdmFyIHNvcnRhYmxlRWxlbWVudCA9IGNvbXBvbmVudEluZm8uZWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIFwic3ZkYS1zZWxlY3QtaXRlbXMtY29sbGVjdGlvblwiXG4gICAgICApWzBdO1xuICAgICAgdmFyIHNvcnRhYmxlID0gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNob2ljZXM6IGNob2ljZXMsXG4gICAgICAgIHF1ZXN0aW9uOiBwYXJhbXMucXVlc3Rpb24sXG4gICAgICAgIGVkaXRvcjogcGFyYW1zLmVkaXRvcixcbiAgICAgICAgaXNFeHBhbmRlZDogaXNFeHBhbmRlZCxcbiAgICAgICAgdG9nZ2xlOiAoKSA9PiBpc0V4cGFuZGVkKCFpc0V4cGFuZGVkKCkpLFxuICAgICAgICBhZGRJdGVtOiBjcmVhdGVBZGRJdGVtSGFuZGxlcihwYXJhbXMucXVlc3Rpb24sIGl0ZW1WYWx1ZSA9PlxuICAgICAgICAgIGNob2ljZXMocGFyYW1zLnF1ZXN0aW9uLmNob2ljZXMpXG4gICAgICAgICksXG4gICAgICAgIGdldExvY1N0cmluZzogc3RyID0+IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoc3RyKSxcbiAgICAgICAgY2hvaWNlc1JlbmRlcmVkOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHNvcnRhYmxlKSB7XG4gICAgICAgICAgICBzb3J0YWJsZS5kZXN0cm95KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNvcnRhYmxlID0gU29ydGFibGUuY3JlYXRlKHNvcnRhYmxlRWxlbWVudCwge1xuICAgICAgICAgICAgaGFuZGxlOiBcIi5zdmRhLWRyYWctaGFuZGxlXCIsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IFwiLml0ZW1fZHJhZ2dhYmxlXCIsXG4gICAgICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgICAgIG9uRW5kOiBldnQgPT4ge1xuICAgICAgICAgICAgICB2YXIgbmV3Q2hvaWNlcyA9IFtdLmNvbmNhdChwYXJhbXMucXVlc3Rpb24uY2hvaWNlcyk7XG4gICAgICAgICAgICAgIHZhciBjaG9pY2UgPSBuZXdDaG9pY2VzW2V2dC5vbGRJbmRleF07XG4gICAgICAgICAgICAgIG5ld0Nob2ljZXMuc3BsaWNlKGV2dC5vbGRJbmRleCwgMSk7XG4gICAgICAgICAgICAgIG5ld0Nob2ljZXMuc3BsaWNlKGV2dC5uZXdJbmRleCwgMCwgY2hvaWNlKTtcbiAgICAgICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLmNob2ljZXMgPSBuZXdDaG9pY2VzO1xuICAgICAgICAgICAgICBjaG9pY2VzKG5ld0Nob2ljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlSHRtbFxufSk7XG5cbmV4cG9ydCB2YXIgc2VsZWN0SXRlbXNFZGl0b3JBZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiAhIW1vZGVsLnBhcmVudCAmJiAhIW1vZGVsLmNob2ljZXMgPyBcInNlbGVjdF9pdGVtc19lZGl0b3JcIiA6IFwiXCI7XG4gIH0sXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsOiBRdWVzdGlvblNlbGVjdEJhc2UsIGVkaXRvcikgPT4ge1xuICAgIGVsZW1lbnRzWzBdLm9uY2xpY2sgPSBlID0+IGUucHJldmVudERlZmF1bHQoKTtcbiAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGVjb3JhdGlvbi5pbm5lckhUTUwgPVxuICAgICAgXCI8c2VsZWN0LWl0ZW1zLWVkaXRvciBwYXJhbXM9J3F1ZXN0aW9uOiBxdWVzdGlvbiwgZWRpdG9yOiBlZGl0b3InPjwvc2VsZWN0LWl0ZW1zLWVkaXRvcj5cIjtcbiAgICBlbGVtZW50c1swXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICBrby5hcHBseUJpbmRpbmdzKFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogbW9kZWwsXG4gICAgICAgIGVkaXRvcjogZWRpdG9yXG4gICAgICB9LFxuICAgICAgZGVjb3JhdGlvblxuICAgICk7XG4gIH1cbn07XG5cbnJlZ2lzdGVyQWRvcm5lcihcInNlbGVjdFdyYXBwZXJcIiwgc2VsZWN0SXRlbXNFZGl0b3JBZG9ybmVyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hZG9ybmVycy9zZWxlY3QtaXRlbXMtZWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleU9iamVjdEVkaXRvciB9IGZyb20gXCIuL29iamVjdEVkaXRvclwiO1xuaW1wb3J0IHtcbiAgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMsXG4gIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZVxufSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMaXZlVGVzdGVyIH0gZnJvbSBcIi4vc3VydmV5bGl2ZVwiO1xuaW1wb3J0IHsgU3VydmV5RW1iZWRpbmdXaW5kb3cgfSBmcm9tIFwiLi9zdXJ2ZXlFbWJlZGluZ1dpbmRvd1wiO1xuaW1wb3J0IHsgU3VydmV5T2JqZWN0cyB9IGZyb20gXCIuL3N1cnZleU9iamVjdHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29udmVydGVyIH0gZnJvbSBcIi4vcXVlc3Rpb25jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yU2hvd1dpbmRvdyB9IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5SlNPTkVkaXRvciB9IGZyb20gXCIuL3N1cnZleUpTT05FZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVRleHRXb3JrZXIgfSBmcm9tIFwiLi90ZXh0V29ya2VyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlVbmRvUmVkbywgVW5kb1JlZG9JdGVtIH0gZnJvbSBcIi4vdW5kb3JlZG9cIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciwgT2JqVHlwZSB9IGZyb20gXCIuL3N1cnZleUhlbHBlclwiO1xuaW1wb3J0IHsgRHJhZ0Ryb3BIZWxwZXIgfSBmcm9tIFwiLi9kcmFnZHJvcGhlbHBlclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ub29sYm94IH0gZnJvbSBcIi4vcXVlc3Rpb25Ub29sYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlKU09ONSB9IGZyb20gXCIuL2pzb241XCI7XG52YXIgdGVtcGxhdGVFZGl0b3JIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi90ZW1wbGF0ZXMvZW50cnkuaHRtbFwiKTtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlGb3JEZXNpZ25lciB9IGZyb20gXCIuL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuL3N0eWxlc21hbmFnZXJcIjtcblxuLyoqXG4gKiBUaGUgdG9vbGJhciBpdGVtIGRlc2NyaXB0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xiYXJJdGVtIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBzdHJpbmcgaWRcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBtYWtlIHRoZSB0b29sYmFyIGl0ZW0gaW52aXNpYmxlLlxuICAgKi9cbiAgdmlzaWJsZTogS25vY2tvdXRPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvb2xiYXIgaXRlbSB0aXRsZVxuICAgKi9cbiAgdGl0bGU6IEtub2Nrb3V0T2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nO1xuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgdG9vbGJhciBpdGVtLlxuICAgKi9cbiAgZW5hYmxlZD86IEtub2Nrb3V0T2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIHRoYXQgY2FsbHMgb24gdG9vbGJhciBpdGVtIGNsaWNrLlxuICAgKi9cbiAgYWN0aW9uPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIGNzcyBjbGFzc1xuICAgKi9cbiAgY3NzPzogS25vY2tvdXRPYnNlcnZhYmxlPHN0cmluZz4gfCBzdHJpbmc7XG4gIGlubmVyQ3NzPzogS25vY2tvdXRPYnNlcnZhYmxlPHN0cmluZz4gfCBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG4gIHRlbXBsYXRlPzogc3RyaW5nO1xuICBpdGVtcz86IEtub2Nrb3V0T2JzZXJ2YWJsZUFycmF5PElUb29sYmFySXRlbT47XG59XG5cbi8qKlxuICogU3VydmV5IEVkaXRvciBpcyBXWVNJV1lHIGVkaXRvci5cbiAqL1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWRpdG9yIGltcGxlbWVudHMgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMge1xuICBwdWJsaWMgc3RhdGljIGRlZmF1bHROZXdTdXJ2ZXlUZXh0OiBzdHJpbmcgPSBcInsgcGFnZXM6IFsgeyBuYW1lOiAncGFnZTEnfV0gfVwiO1xuICBwcml2YXRlIF9oYXZlQ29tbWVyY2lhbExpY2Vuc2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgcHJpdmF0ZSByZW5kZXJlZEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHN1cnZleWpzOiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGpzb25FZGl0b3I6IFN1cnZleUpTT05FZGl0b3I7XG4gIHB1YmxpYyBzZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlOiBTdXJ2ZXlPYmplY3RFZGl0b3I7XG4gIHByaXZhdGUgcXVlc3Rpb25FZGl0b3JXaW5kb3c6IFN1cnZleVByb3BlcnR5RWRpdG9yU2hvd1dpbmRvdztcblxuICBwdWJsaWMgcGFnZXM6IEtub2Nrb3V0T2JzZXJ2YWJsZUFycmF5PFN1cnZleS5QYWdlTW9kZWw+O1xuICBwdWJsaWMgc2VsZWN0UGFnZTogRnVuY3Rpb247XG5cbiAgcHJpdmF0ZSBzdXJ2ZXlMaXZlOiBTdXJ2ZXlMaXZlVGVzdGVyO1xuICBwcml2YXRlIHN1cnZleUVtYmVkaW5nOiBTdXJ2ZXlFbWJlZGluZ1dpbmRvdztcbiAgcHJpdmF0ZSBzdXJ2ZXlPYmplY3RzOiBTdXJ2ZXlPYmplY3RzO1xuICBwcml2YXRlIHRvb2xib3hWYWx1ZTogUXVlc3Rpb25Ub29sYm94O1xuICBwcml2YXRlIHVuZG9SZWRvOiBTdXJ2ZXlVbmRvUmVkbztcbiAgcHJpdmF0ZSBzdXJ2ZXlWYWx1ZSA9IGtvLm9ic2VydmFibGU8U3VydmV5Rm9yRGVzaWduZXI+KCk7XG4gIHByaXZhdGUgc2F2ZVN1cnZleUZ1bmNWYWx1ZTogKFxuICAgIG5vOiBudW1iZXIsXG4gICAgb25TYXZlQ2FsbGJhY2s6IChubzogbnVtYmVyLCBpc1N1Y2Nlc3M6IGJvb2xlYW4pID0+IHZvaWRcbiAgKSA9PiB2b2lkO1xuICBwcml2YXRlIG9wdGlvbnM6IGFueTtcbiAgcHJpdmF0ZSBzdGF0ZVZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIGRyYWdEcm9wSGVscGVyOiBEcmFnRHJvcEhlbHBlciA9IG51bGw7XG4gIHByaXZhdGUgc2hvd0pTT05FZGl0b3JUYWJWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzaG93VGVzdFN1cnZleVRhYlZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIHNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgc2VsZWN0MjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBhbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHNob3dBcHBseUJ1dHRvblZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBpc1JUTFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSAoZGVmYXVsdCB2YWx1ZSkgdGhlIEVkaXRvciBzY3JvbGxzIHRvIGEgbmV3IGVsZW1lbnQuIEEgbmV3IGVsZW1lbnQgY2FuIGJlIGFkZGVkIGZyb20gVG9vbGJveCBvciBieSBjb3B5aW5nLlxuICAgKi9cbiAgcHVibGljIHNjcm9sbFRvTmV3RWxlbWVudDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFlvdSBoYXZlIHJpZ2h0IHRvIHNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgaWYgeW91IGhhdmUgYm91Z2h0IHRoZSBjb21tZXJjaWFsIGxpY2VuY2Ugb25seS5cbiAgICogSXQgd2lsbCByZW1vdmUgdGhlIHRleHQgYWJvdXQgbm9uLWNvbW1lcmljYWwgdXNhZ2Ugb24gdGhlIHRvcCBvZiB0aGUgd2lkZ2V0LlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdHJ1ZSB3aXRob3V0IGhhdmluZyBhIGNvbW1lcmNpYWwgbGljZW5jZSBpcyBpbGxlZ2FsLlxuICAgKiBAc2VlIGhhdmVDb21tZXJjaWFsTGljZW5zZVxuICAgKi9cbiAgcHVibGljIGdldCBoYXZlQ29tbWVyY2lhbExpY2Vuc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhdmVDb21tZXJjaWFsTGljZW5zZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGF2ZUNvbW1lcmNpYWxMaWNlbnNlKHZhbCkge1xuICAgIHRoaXMuX2hhdmVDb21tZXJjaWFsTGljZW5zZSh2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIGFzc2lnbiB0byB0aGUgc3VydmV5LnN1cnZleUlkIHByb3BlcnR5IG9uIHNob3dpbmcgaW4gdGhlIFwiRW1iZWQgU3VydmV5XCIgdGFiLlxuICAgKiBAc2VlIHNob3dFbWJlZGVkU3VydmV5VGFiXG4gICAqL1xuICBwdWJsaWMgc3VydmV5SWQ6IHN0cmluZyA9IG51bGw7XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIGFzc2lnbiB0byB0aGUgc3VydmV5LnN1cnZleVBvc3RJZCBwcm9wZXJ0eSBvbiBzaG93aW5nIGluIHRoZSBcIkVtYmVkIFN1cnZleVwiIHRhYi5cbiAgICogQHNlZSBzaG93RW1iZWRlZFN1cnZleVRhYlxuICAgKi9cbiAgcHVibGljIHN1cnZleVBvc3RJZDogc3RyaW5nID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIG9uIGNoYW5naW5nIFwiR2VuZXJhdGUgVmFsaWQgSlNPTlwiIG9wdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZVZhbGlkSlNPTkNoYW5nZWRDYWxsYmFjazogKGdlbmVyYXRlVmFsaWRKU09OOiBib29sZWFuKSA9PiB2b2lkO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCBiZWZvcmUgc2hvd2luZyBhIHByb3BlcnR5IGluIHRoZSBQcm9wZXJ0eSBHcmlkIG9yIGluIFF1ZXN0aW9uIEVkaXRvci5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiB0aGUgc3VydmV5IG9iamVjdCwgU3VydmV5LCBQYWdlLCBQYW5lbCBvciBRdWVzdGlvblxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5IHRoZSBvYmplY3QgcHJvcGVydHkgKFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkgb2JqZWN0KS4gSXQgaGFzIG5hbWUsIGNsYXNzTmFtZSwgdHlwZSwgdmlzaWJsZSwgcmVhZE9ubHkgYW5kIG90aGVyIHByb3BlcnRpZXMuXG4gICAqIDxici8+IG9wdGlvbnMuY2FuU2hvdyBhIGJvb2xlYW4gdmFsdWUuIEl0IGlzIHRydWUgYnkgZGVmYXVsdC4gU2V0IGl0IGZhbHNlIHRvIGhpZGUgdGhlIHByb3BlcnR5IGZyb20gdGhlIFByb3BlcnR5IEdyaWQgb3IgaW4gUXVlc3Rpb24gRWRpdG9yXG4gICAqL1xuICBwdWJsaWMgb25DYW5TaG93UHJvcGVydHk6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgYWxsb3dzIHlvdSB0byBjdXN0b20gc29ydCBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0eSBHcmlkLiBJdCBpcyBhIGNvbXBhcmUgZnVuY3Rpb24uIFlvdSBzaG91bGQgc2V0IG9wdGlvbnMucmVzdWx0IHRvIC0xIG9yIDEgYnkgY29tcGFyaW5nIG9wdGlvbnMucHJvcGVydHkxIGFuZCBvcHRpb25zLnByb3BlcnR5Mi5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiB0aGUgc3VydmV5IG9iamVjdCwgU3VydmV5LCBQYWdlLCBQYW5lbCBvciBRdWVzdGlvblxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5MSB0aGUgbGVmdCBvYmplY3QgcHJvcGVydHkgKFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkgb2JqZWN0KS5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eTIgdGhlIHJpZ2h0IG9iamVjdCBwcm9wZXJ0eSAoU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSBvYmplY3QpLlxuICAgKiA8YnIvPiBvcHRpb25zLnJlc3VsdCB0aGUgcmVzdWx0IG9mIGNvbXBhcmluZy4gSXQgY2FuIGJlIDAgKHVzZSBkZWZhdWx0IGJlaGF2aW9yKSwgIC0xIG9wdGlvbnMucHJvcGVydHkxIGlzIGxlc3MgdGhhbiBvcHRpb25zLnByb3BlcnR5MiBvciAxIG9wdGlvbnMucHJvcGVydHkxIGlzIG1vcmUgdGhhbiBvcHRpb25zLnByb3BlcnR5MlxuICAgKi9cbiAgcHVibGljIG9uQ3VzdG9tU29ydFByb3BlcnR5OiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGFsbG93cyB5b3UgbW9kaWZ5IERPTSBlbGVtZW50IGZvciBhIHByb3BlcnR5IGluIHRoZSBQcm9wZXJ0eSBHcmlkLiBGb3IgZXhhbXBsZSwgeW91IG1heSBjaGFuZ2UgaXQncyBzdHlsZXMuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGVkaXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogdGhlIHN1cnZleSBvYmplY3QsIFN1cnZleSwgUGFnZSwgUGFuZWwgb3IgUXVlc3Rpb25cbiAgICogPGJyLz4gb3B0aW9ucy5odG1sRWxlbWVudCB0aGUgaHRtbCBlbGVtZW50IChodG1sIHRhYmxlIHJvdyBpbiBvdXIgY2FzZSkgdGhhdCByZW5kZXJzIHRoZSBwcm9wZXJ0eSBkaXNwbGF5IG5hbWUgYW5kIGl0J3MgZWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5IG9iamVjdCBwcm9wZXJ0eSAoU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSBvYmplY3QpLlxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5RWRpdG9yIHRoZSBwcm9wZXJ0eSBFZGl0b3IuXG4gICAqL1xuICBwdWJsaWMgb25Qcm9wZXJ0eUFmdGVyUmVuZGVyOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCBvbiBkZWxldGluZyBhbiBlbGVtZW50IChxdWVzdGlvbi9wYW5lbC9wYWdlKSBmcm9tIHRoZSBzdXJ2ZXkuIFR5cGljYWxseSwgd2hlbiBhIHVzZXIgY2xpY2sgdGhlIGRlbGV0ZSBmcm9tIHRoZSBlbGVtZW50IG1lbnUuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGVkaXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5lbGVtZW50IGFuIGluc3RhbmNlIG9mIHRoZSBkZWxldGluZyBlbGVtZW50XG4gICAqIDxici8+IG9wdGlvbnMuZWxlbWVudFR5cGUgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQ6ICdxdWVzdGlvbicsICdwYW5lbCcgb3IgJ3BhZ2UnLlxuICAgKiA8YnIvPiBvcHRpb25zLmFsbG93aW5nIHNldCBpdCB0byBmYWxzZSB0byBjYW5jZWwgdGhlIGVsZW1lbnQgZGVsZXRpbmdcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnREZWxldGluZzogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgb24gYWRkaW5nIGEgbmV3IHF1ZXN0aW9uIGludG8gdGhlIHN1cnZleS4gVHlwaWNhbGx5LCB3aGVuIGEgdXNlciBkcm9wcGVkIGEgUXVlc3Rpb24gZnJvbSB0aGUgUXVlc3Rpb24gVG9vbGJveCBpbnRvIGRlc2lnbmVyIFN1cnZleSBhcmVhLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBlZGl0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMucXVlc3Rpb24gYSBuZXcgYWRkZWQgc3VydmV5IHF1ZXN0aW9uLiBTdXJ2ZXkuUXVlc3Rpb25CYXNlIG9iamVjdFxuICAgKiA8YnIvPiBvcHRpb25zLnBhZ2UgdGhlIHN1cnZleSBQYWdlIG9iamVjdCB3aGVyZSBxdWVzdGlvbiBoYXMgYmVlbiBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBvblF1ZXN0aW9uQWRkZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIHdoZW4gYW4gZW5kLXVzZXIgZG91YmxlIGNsaWNrIG9uIGFuIGVsZW1lbnQgKHF1ZXN0aW9uL3BhbmVsKS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLmVsZW1lbnQgYW4gaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnREb3VibGVDbGljazogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgb24gYWRkaW5nIGEgbmV3IFN1cnZleS5JdGVtVmFsdWUgb2JqZWN0LiBJdCB1c2VzIGFzIGFuIGVsZW1lbnQgaW4gY2hvaWNlcyBhcnJheSBpbiBSYWRpb2dyb3VwLCBjaGVja2JveCBhbmQgZHJvcGRvd24gcXVlc3Rpb25zIG9yIE1hdHJpeCBjb2x1bW5zIGFuZCByb3dzIHByb3BlcnRpZXMuXG4gICAqIFVzZSB0aGlzIGV2ZW50LCB0byBzZXQgSXRlbVZhbHVlLnZhbHVlIGFuZCBJdGVtVmFsdWUudGV4dCBwcm9wZXJ0aWVzIGJ5IGRlZmF1bHQgb3Igc2V0IGEgdmFsdWUgdG8gdGhlIGN1c3RvbSBwcm9wZXJ0eS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5ICB0aGUgb2JqZWN0IHByb3BlcnR5IChTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5IG9iamVjdCkuIEl0IGhhcyBuYW1lLCBjbGFzc05hbWUsIHR5cGUsIHZpc2libGUsIHJlYWRPbmx5IGFuZCBvdGhlciBwcm9wZXJ0aWVzLlxuICAgKiA8YnIvPiBvcHRpb25zLm5ld0l0ZW0gYSBuZXcgY3JlYXRlZCBTdXJ2ZXkuSXRlbVZhbHVlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkl0ZW1WYWx1ZUFkZGVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCB3aGVuIGEgdXNlciBhZGRzIGEgbmV3IGNvbHVtbiBpbnRvIE1hdHJpeERyb3Bkb3duIG9yIE1hdHJpeER5bmFtaWMgcXVlc3Rpb25zLiBVc2UgaXQgdG8gc2V0IHNvbWUgcHJvcGVydGllcyBvZiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4gYnkgZGVmYXVsdCwgZm9yIGV4YW1wbGUgbmFtZSBvciBhIGN1c3RvbSBwcm9wZXJ0eS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm5ld0NvbHVtbiBhIG5ldyBjcmVhdGVkIFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDb2x1bW5BZGRlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgb24gYWRkaW5nIGEgbmV3IHBhbmVsIGludG8gdGhlIHN1cnZleS4gIFR5cGljYWxseSwgd2hlbiBhIHVzZXIgZHJvcHBlZCBhIFBhbmVsIGZyb20gdGhlIFF1ZXN0aW9uIFRvb2xib3ggaW50byBkZXNpZ25lciBTdXJ2ZXkgYXJlYS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnBhbmVsIGEgbmV3IGFkZGVkIHN1cnZleSBwYW5lbC4gU3VydmV5LlBhbmVsIG9iamVjdFxuICAgKiA8YnIvPiBvcHRpb25zLnBhZ2UgdGhlIHN1cnZleSBQYWdlIG9iamVjdCB3aGVyZSBxdWVzdGlvbiBoYXMgYmVlbiBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBvblBhbmVsQWRkZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIG9uIGFkZGluZyBhIG5ldyBwYWdlIGludG8gdGhlIHN1cnZleS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnBhZ2UgdGhlIG5ldyBzdXJ2ZXkgUGFnZSBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25QYWdlQWRkZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlFZGl0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIHdoZW4gYSBzdXJ2ZXkgaXMgY2hhbmdlZCBpbiB0aGUgZGVzaWduZXIuIEEgbmV3IHBhZ2UvcXVlc3Rpb24vcGFnZSBpcyBhZGRlZCBvciBleGlzdGluZyBpcyByZW1vdmVkLCBhIHByb3BlcnR5IGlzIGNoYW5nZWQgYW5kIHNvIG9uLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBlZGl0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBjZXJ0YWluIG1vZGlmaWNhdGlvbnNcbiAgICogPGJyLz4gb3B0aW9ucy50eXBlIGNvbnRhaW5zIHN0cmluZyBjb25zdGFudCBkZXNjcmliaW5nIGNlcnRhaW4gbW9kaWZpY2F0aW9uXG4gICAqIDxici8+IEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIDxici8+XG4gICAqIDxici8+IG9wdGlvbnMudHlwZTogXCJBRERFRF9GUk9NX1RPT0xCT1hcIlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uOiBuZXdseSBhZGRlZCBxdWVzdGlvblxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiUEFHRV9BRERFRFwiXG4gICAqIDxici8+IG9wdGlvbnMubmV3VmFsdWU6IG5ld2x5IGNyZWF0ZWQgcGFnZVxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiUEFHRV9NT1ZFRFwiXG4gICAqIDxici8+IG9wdGlvbnMucGFnZTogcGFnZSBoYXMgYmVlbiBtb3ZlZFxuICAgKiA8YnIvPiBvcHRpb25zLmluZGV4RnJvbTogcGV2aW91cyBpbmRleFxuICAgKiA8YnIvPiBvcHRpb25zLmluZGV4VG86IG5ldyBpbmRleFxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiUVVFU1RJT05fQ09OVkVSVEVEXCJcbiAgICogPGJyLz4gb3B0aW9ucy5jbGFzc05hbWU6IHRoZSBjb252ZXJ0ZWQgY2xhc3MgbmFtZVxuICAgKiA8YnIvPiBvcHRpb25zLm9sZFZhbHVlOiBwZXZpb3VzIG9iamVjdFxuICAgKiA8YnIvPiBvcHRpb25zLm5ld1ZhbHVlOiB0aGUgbmV3IG9iamVjdCwgY29udmVydGVkIGZyb20gb2xkVmFsZSB0byB0aGUgZ2l2ZW4gY2xhc3MgbmFtZVxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiUVVFU1RJT05fQ0hBTkdFRF9CWV9FRElUT1JcIlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uOiBxdWVzdGlvbiBoYXMgYmVlbiBlZGl0ZWQgaW4gdGhlIHBvcHVwIHF1ZXN0aW9uIGVkaXRvclxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiUFJPUEVSVFlfQ0hBTkdFRFwiXG4gICAqIDxici8+IG9wdGlvbnMubmFtZTogdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGhhcyBiZWVuIGNoYW5nZWRcbiAgICogPGJyLz4gb3B0aW9ucy50YXJnZXQ6IHRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgY2hhbmdlZCBwcm9wZXJ0eVxuICAgKiA8YnIvPiBvcHRpb25zLm9sZFZhbHVlOiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGNoYW5nZWQgcHJvcGVydHlcbiAgICogPGJyLz4gb3B0aW9ucy5uZXdWYWx1ZTogdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2hhbmdlZCBwcm9wZXJ0eVxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiT0JKRUNUX0RFTEVURURcIlxuICAgKiA8YnIvPiBvcHRpb25zLnRhcmdldDogZGVsZXRlZCBvYmplY3RcbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIlZJRVdfVFlQRV9DSEFOR0VEXCJcbiAgICogPGJyLz4gb3B0aW9ucy5uZXdUeXBlOiBuZXcgdHlwZSBvZiB0aGUgZWRpdG9yIHZpZXc6IGVkaXRvciBvciBkZXNpZ25lclxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiRE9fRFJPUFwiXG4gICAqIDxici8+IG9wdGlvbnMucGFnZTogdGhlIHBhZ2Ugb2YgdGhlIGRyYXAvZHJvcCBvcGVyYXRpb25cbiAgICogPGJyLz4gb3B0aW9ucy5zb3VyY2U6IHRoZSBzb3VyY2UgZHJhZ2dlZCBvYmplY3RcbiAgICogPGJyLz4gb3B0aW9ucy50YXJnZXQ6IHRoZSBkcm9wIHRhcmdldFxuICAgKiA8YnIvPiBvcHRpb25zLm5ld0VsZW1lbnQ6IGEgbmV3IGVsZW1lbnQuIEl0IGlzIGRlZmluZWQgaWYgYSB1c2VyIGRyb3BzIHF1ZXN0aW9uIG9yIHBhbmVsIGZyb20gdGhlIHRvb2xib3hcbiAgICovXG4gIHB1YmxpYyBvbk1vZGlmaWVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIFN1cnZleSBFZGl0b3IgaXMgaW5pdGlhbGl6ZWQgYW5kIGEgc3VydmV5IG9iamVjdCAoU3VydmV5LlN1cnZleSkgaXMgY3JlYXRlZC5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnN1cnZleSAgdGhlIHN1cnZleSBvYmplY3Qgc2hvd2luZyBpbiB0aGUgZWRpdG9yLlxuICAgKi9cbiAgcHVibGljIG9uRGVzaWduZXJTdXJ2ZXlDcmVhdGVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIFN1cnZleSBFZGl0b3IgcnVucyB0aGUgc3VydmV5IGluIHRoZSB0ZXN0IG1vZGUuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGVkaXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5zdXJ2ZXkgIHRoZSBzdXJ2ZXkgb2JqZWN0IHNob3dpbmcgaW4gdGhlIFwiVGVzdCBzdXJ2ZXlcIiB0YWIuXG4gICAqL1xuICBwdWJsaWMgb25UZXN0U3VydmV5Q3JlYXRlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNvbnRyb2wgUHJvcGVydHkgRWRpdG9ycyBVSS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHlOYW1lICB0aGUgbmFtZSBvZiB0aGUgZWRpdGVkIHByb3BlcnR5LlxuICAgKiA8YnIvPiBvcHRpb25zLmVkaXRvck9wdGlvbnMgIG9wdGlvbnMgdGhhdCBjYW4gYmUgY2hhbmdlZC5cbiAgICogPGJyLz4gb3B0aW9ucy5lZGl0b3JPcHRpb25zLmFsbG93QWRkUmVtb3ZlSXRlbXMgYSBib29sZWFuIHByb3BlcnR5LCB0cnVlIGJ5IGRlZmF1bHQuIFNldCBpdCBmYWxzZSB0byBkaXNhYmxlIGFkZC9yZW1vdmUgaXRlbXMgaW4gYXJyYXkgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUgJ2Nob2ljZXMnLCAnY29sdW1ucycsICdyb3dzJy5cbiAgICogPGJyLz4gb3B0aW9ucy5lZGl0b3JPcHRpb25zLnNob3dUZXh0VmlldyBhIGJvb2xlYW4gcHJvcGVydHksIHRydWUgYnkgZGVmYXVsdC4gU2V0IGl0IGZhbHNlIHRvIGRpc2FibGUgXCJGYXN0IEVudHJ5XCIgdGFiIGZvciBcImNob2ljZXNcIiBwcm9wZXJ0eS5cbiAgICogPGJyLz4gb3B0aW9ucy5lZGl0b3JPcHRpb25zLml0ZW1zRW50cnlUeXBlIGEgc3RyaW5nIHByb3BlcnR5LCAnZm9ybScgYnkgZGVmYXVsdC4gU2V0IGl0ICdmYXN0JyB0byBzaG93IFwiRmFzdCBFbnRyeVwiIHRhYiBmb3IgXCJjaG9pY2VzXCIgcHJvcGVydHkgYnkgZGVmYXVsdC5cbiAgICovXG4gIHB1YmxpYyBvblNldFByb3BlcnR5RWRpdG9yT3B0aW9uczogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHNob3cgYSBjdXN0b20gZXJyb3IgaW4gdGhlIFF1ZXN0aW9uIEVkaXRvciBvbiBwcmVzc2luZyBBcHBseSBvciBPSyBidXR0b25zLCBpZiB0aGUgdmFsdWVzIGFyZSBub3Qgc2V0IGNvcnJlY3RseS4gVGhlIGVycm9yIHdpbGwgYmUgZGlzcGxheWVkIHVuZGVyIHRoZSBwcm9wZXJ0eSBlZGl0b3IuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGVkaXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogIHRoZSBzdXJ2ZXkgb2JqZWN0IHdoaWNoIHByb3BlcnR5IGlzIGVkaXRlZCBpbiB0aGUgUHJvcGVydHkgRWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5TmFtZSAgdGhlIG5hbWUgb2YgdGhlIGVkaXRlZCBwcm9wZXJ0eS5cbiAgICogPGJyLz4gb3B0aW9ucy52YWx1ZSB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqIDxici8+IG9wdGlvbnMuZXJyb3IgdGhlIGVycm9yIHlvdSB3YW50IHRvIGRpc3BsYXkuIFNldCB0aGUgZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCB2YWx1ZSkgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvcnMuXG4gICAqIEBzZWUgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdpbmdcbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5VmFsaWRhdGlvbkN1c3RvbUVycm9yOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBwcm9wZXJ0eSBlZGl0b3IuIFlvdSBtYXkgY2FsbCBhIHZhbGlkYXRpb24sIHNvIGFuIGVuZCB1c2VyIHNlZXMgdGhlIGVycm9yIGltbWVkaWF0ZWx5XG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGVkaXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogIHRoZSBzdXJ2ZXkgb2JqZWN0IHdoaWNoIHByb3BlcnR5IGlzIGVkaXRlZCBpbiB0aGUgUHJvcGVydHkgRWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5TmFtZSAgdGhlIG5hbWUgb2YgdGhlIGVkaXRlZCBwcm9wZXJ0eS5cbiAgICogPGJyLz4gb3B0aW9ucy52YWx1ZSB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqIDxici8+IG9wdGlvbnMubmV3VmFsdWUgc2V0IHRoZSBjb3JyZWN0ZWQgdmFsdWUgaW50byB0aGlzIHByb3BlcnR5LiBMZWF2ZSBpdCBudWxsIGlmIHlvdSBhcmUgb2sgd2l0aCB0aGUgZW50ZXJlZCB2YWx1ZS5cbiAgICogPGJyLz4gb3B0aW9ucy5kb1ZhbGlkYXRpb24gc2V0IHRoZSB2YWx1ZSB0byB0cnVlIHRvIGNhbGwgdGhlIHByb3BlcnR5IHZhbGlkYXRpb24uIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGUgdXNlciBzZWVzIGl0IGltbWVkaWF0ZWx5LlxuICAgKiBAc2VlIG9uUHJvcGVydHlWYWxpZGF0aW9uQ3VzdG9tRXJyb3JcbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5VmFsdWVDaGFuZ2luZzogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgcHJvcGVydHkgZWRpdG9yLiBZb3UgbWF5IGNhbGwgYSB2YWxpZGF0aW9uLCBzbyBhbiBlbmQgdXNlciBzZWVzIHRoZSBlcnJvciBpbW1lZGlhdGVseVxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBlZGl0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqICB0aGUgc3VydmV5IG9iamVjdCB3aGljaCBwcm9wZXJ0eSBpcyBlZGl0ZWQgaW4gdGhlIFByb3BlcnR5IEVkaXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eU5hbWUgIHRoZSBuYW1lIG9mIHRoZSBlZGl0ZWQgcHJvcGVydHkuXG4gICAqIDxici8+IG9wdGlvbnMuZWRpdG9yIHRoZSBpbnN0YW5jZSBvZiBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIEBzZWUgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdpbmdcbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5RWRpdG9yT2JqZWN0QXNzaWduOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5RWRpdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gZGlzYWJsZSBzb21lIG9wZXJhdGlvbnMgZm9yIGFuIGVsZW1lbnQgKHF1ZXN0aW9uL3BhbmVsKS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3QgcXVlc3Rpb24vcGFuZWxcbiAgICogPGJyLz4gb3B0aW9ucy5hbGxvd0RlbGV0ZSBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBkZWxldGluZyB0aGUgb2JqZWN0XG4gICAqIDxici8+IG9wdGlvbnMuYWxsb3dFZGl0IHNldCBpdCB0byBmYWxzZSB0byBkaXNhYmxlIGNhbGxpbmcgdGhlIG1vZGFsIEVkaXRvclxuICAgKiA8YnIvPiBvcHRpb25zLmFsbG93Q29weSBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBjb3B5aW5nIHRoZSBvYmplY3RcbiAgICogPGJyLz4gb3B0aW9ucy5hbGxvd0FkZFRvVG9vbGJveCBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBhZGRpbmcgZWxlbWVudCB0byBUb29sYm94XG4gICAqIDxici8+IG9wdGlvbnMuYWxsb3dEcmFnZ2luZyBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBhZGRpbmcgZWxlbWVudCB0byBUb29sYm94XG4gICAqIDxici8+IG9wdGlvbnMuYWxsb3dDaGFuZ2VUeXBlIHNldCBpdCB0byBmYWxzZSB0byBkaXNhYmxlIGNoYW5naW5nIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHVibGljIG9uRWxlbWVudEFsbG93T3BlcmF0aW9uczogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGFkZC9yZW1vdmUvbW9kaWZ5IHRoZSBlbGVtZW50IChxdWVzdGlvbi9wYW5lbCkgbWVudSBpdGVtcy5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMuaXRlbXMgdGhlIGxpc3Qgb2YgbWVudSBpdGVtcy4gSXQgaGFzIHR3byByZXF1cmllZCBmaWVsZHM6IHRleHQgYW5kIG9uQ2xpY2s6IGZ1bmN0aW9uKG9iajogU3VydmV5LkJhc2UpIHt9IGFuZCBvcHRpb25hbCBuYW1lIGZpZWxkLlxuICAgKiBAc2VlIG9uRWxlbWVudEFsbG93T3BlcmF0aW9uc1xuICAgKi9cbiAgcHVibGljIG9uRGVmaW5lRWxlbWVudE1lbnVJdGVtczogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHNob3cgdGhlIGRlc2NyaXB0aW9uIG9uIHRoZSB0b3Agb3IvYW5kIGJvdHRvbSBvZiB0aGUgcHJvcGVydHkgbW9kYWwgZWRpdG9yLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBlZGl0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqICB0aGUgc3VydmV5IG9iamVjdCB3aGljaCBwcm9wZXJ0eSBpcyBlZGl0ZWQgaW4gdGhlIFByb3BlcnR5IEVkaXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eU5hbWUgdGhlIHByb3BlcnR5IG5hbWVcbiAgICogPGJyLz4gb3B0aW9ucy5odG1sVG9wIHRoZSBodG1sICB0aGF0IHlvdSB3YW50IHRvIHNlZSBvbiB0aGUgdG9wIG9mIHRoZSBtb2RhbCB3aW5kb3dcbiAgICogPGJyLz4gb3B0aW9ucy5odG1sQm90dG9tIHRoZSBodG1sIHRoYXQgeW91IHdhbnQgdG8gc2VlIG9uIHRoZSBib3R0b20gb2YgdGhlIG1vZGFsIHdpbmRvd1xuICAgKi9cbiAgcHVibGljIG9uU2hvd1Byb3BlcnR5TW9kYWxFZGl0b3JEZXNjcmlwdGlvbjogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgdGV4dCBzaG93aW5nIGluIHRoZSBkcm9wZG93biBvZiB0aGUgcHJvcGVydHkgZ3JpZC5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgZWRpdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3QuXG4gICAqIDxici8+IG9wdGlvbnMudGV4dCB0aGUgY3VycmVudCBvYmplY3QgdGV4dCwgY29tbW9ubHkgaXQgaXMgYSBuYW1lLiBZb3UgbXVzdCBjaGFuZ2UgdGhpcyBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBvbkdldE9iamVjdFRleHRJblByb3BlcnR5R3JpZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAga29BdXRvU2F2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAvKipcbiAgICogQSBib29sZWFuIHByb3BlcnR5LCBmYWxzZSBieSBkZWZhdWx0LiBTZXQgaXQgdG8gdHJ1ZSB0byBjYWxsIHByb3RlY3RlZCBkb1NhdmUgbWV0aG9kIGF1dG9tYXRpY2FsbHkgb24gc3VydmV5IGNoYW5naW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0F1dG9TYXZlKCkge1xuICAgIHJldHVybiB0aGlzLmtvQXV0b1NhdmUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzQXV0b1NhdmUobmV3VmFsKSB7XG4gICAgdGhpcy5rb0F1dG9TYXZlKG5ld1ZhbCk7XG4gIH1cbiAga29TaG93U3RhdGUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBwcm9wZXJ0eSwgZmFsc2UgYnkgZGVmYXVsdC4gU2V0IGl0IHRvIHRydWUgdG8gc2hvdyB0aGUgc3RhdGUgaW4gdGhlIHRvb2xiYXIgKHNhdmluZy9zYXZlZCkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5rb1Nob3dTdGF0ZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1N0YXRlKG5ld1ZhbCkge1xuICAgIHRoaXMua29TaG93U3RhdGUobmV3VmFsKTtcbiAgfVxuXG4gIGtvSXNTaG93RGVzaWduZXI6IGFueTtcbiAga29WaWV3VHlwZTogYW55O1xuICBrb0NhbkRlbGV0ZU9iamVjdDogYW55O1xuICBrb09iamVjdHM6IGFueTtcbiAga29TZWxlY3RlZE9iamVjdDogS25vY2tvdXRPYnNlcnZhYmxlPGFueT47XG4gIGtvU2hvd1NhdmVCdXR0b246IGFueTtcbiAga29HZW5lcmF0ZVZhbGlkSlNPTjogYW55O1xuICBrb1Nob3dPcHRpb25zOiBhbnk7XG4gIGtvU2hvd1Byb3BlcnR5R3JpZDogYW55O1xuICBrb1Rlc3RTdXJ2ZXlXaWR0aDogYW55O1xuICBrb0Rlc2lnbmVySGVpZ2h0OiBhbnk7XG4gIGtvU2hvd1BhZ2VzVG9vbGJveDogYW55O1xuICBzZWxlY3REZXNpZ25lckNsaWNrOiBhbnk7XG4gIHNlbGVjdEVkaXRvckNsaWNrOiBhbnk7XG4gIHNlbGVjdFRlc3RDbGljazogYW55O1xuICBzZWxlY3RFbWJlZENsaWNrOiBhbnk7XG4gIGdlbmVyYXRlVmFsaWRKU09OQ2xpY2s6IGFueTtcbiAgZ2VuZXJhdGVSZWFkYWJsZUpTT05DbGljazogYW55O1xuICBkb1VuZG9DbGljazogYW55O1xuICBkb1JlZG9DbGljazogYW55O1xuICBkZWxldGVPYmplY3RDbGljazogYW55O1xuICBrb1N0YXRlID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgcnVuU3VydmV5Q2xpY2s6IGFueTtcbiAgZW1iZWRpbmdTdXJ2ZXlDbGljazogYW55O1xuICBzYXZlQnV0dG9uQ2xpY2s6IGFueTtcbiAgZHJhZ2dpbmdUb29sYm94SXRlbTogYW55O1xuICBjbGlja1Rvb2xib3hJdGVtOiBhbnk7XG4gIGRyYWdFbmQ6IGFueTtcbiAgLyoqXG4gICAqIFRoZSBTdXJ2ZXkgRWRpdG9yIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0gcmVuZGVyZWRFbGVtZW50IEh0bWxFbGVtZW50IG9yIGh0bWwgZWxlbWVudCBpZCB3aGVyZSBTdXJ2ZXkgRWRpdG9yIHdpbGwgYmUgcmVuZGVyZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgU3VydmV5IEVkaXRvciBvcHRpb25zLiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTogc2hvd0pTT05FZGl0b3JUYWIsIHNob3dUZXN0U3VydmV5VGFiLCBzaG93RW1iZWRlZFN1cnZleVRhYiwgc2hvd1Byb3BlcnR5R3JpZCwgcXVlc3Rpb25UeXBlcywgc2hvd09wdGlvbnMsIGdlbmVyYXRlVmFsaWRKU09OLCBpc0F1dG9TYXZlLCBkZXNpZ25lckhlaWdodC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVkRWxlbWVudDogYW55ID0gbnVsbCwgb3B0aW9uczogYW55ID0gbnVsbCkge1xuICAgIHRoaXMua29TaG93T3B0aW9ucyA9IGtvLm9ic2VydmFibGUoKTtcbiAgICB0aGlzLmtvR2VuZXJhdGVWYWxpZEpTT04gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHRoaXMua29TaG93UHJvcGVydHlHcmlkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB0aGlzLmtvRGVzaWduZXJIZWlnaHQgPSBrby5vYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5rb1Nob3dQYWdlc1Rvb2xib3ggPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLmtvQ2FuRGVsZXRlT2JqZWN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUoU3R5bGVzTWFuYWdlci5jdXJyZW50VGhlbWUoKSk7XG5cbiAgICB0aGlzLnBhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5PFN1cnZleS5QYWdlPigpO1xuXG4gICAgdGhpcy5rb1Nob3dTYXZlQnV0dG9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gICAgdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aCA9IGtvLm9ic2VydmFibGUoXCIxMDAlXCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbkNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmRvU2F2ZSgpO1xuICAgIH07XG4gICAgdGhpcy5rb09iamVjdHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB3aW5kb3dbXCJzZWxcIl0gPSB0aGlzLmtvU2VsZWN0ZWRPYmplY3Q7XG4gICAgdGhpcy5rb1NlbGVjdGVkT2JqZWN0ID0ga28ub2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMua29TZWxlY3RlZE9iamVjdC5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYuc2VsZWN0ZWRPYmplY3RDaGFuZ2VkKG5ld1ZhbHVlICE9IG51bGwgPyBuZXdWYWx1ZS52YWx1ZSA6IG51bGwpO1xuICAgIH0pO1xuICAgIHRoaXMua29HZW5lcmF0ZVZhbGlkSlNPTi5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIGlmICghc2VsZi5vcHRpb25zKSBzZWxmLm9wdGlvbnMgPSB7fTtcbiAgICAgIHNlbGYub3B0aW9ucy5nZW5lcmF0ZVZhbGlkSlNPTiA9IG5ld1ZhbHVlO1xuICAgICAgaWYgKHNlbGYuZ2VuZXJhdGVWYWxpZEpTT05DaGFuZ2VkQ2FsbGJhY2spXG4gICAgICAgIHNlbGYuZ2VuZXJhdGVWYWxpZEpTT05DaGFuZ2VkQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cyA9IG5ldyBTdXJ2ZXlPYmplY3RzKFxuICAgICAgdGhpcy5rb09iamVjdHMsXG4gICAgICB0aGlzLmtvU2VsZWN0ZWRPYmplY3RcbiAgICApO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5nZXRJdGVtVGV4dENhbGxiYWNrID0gZnVuY3Rpb24ob2JqLCB0ZXh0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgb2JqOiBvYmosIHRleHQ6IHRleHQgfTtcbiAgICAgIHNlbGYub25HZXRPYmplY3RUZXh0SW5Qcm9wZXJ0eUdyaWQuZmlyZShzZWxmLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zLnRleHQ7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2UgPSAocGFnZTogU3VydmV5LlBhZ2VNb2RlbCkgPT4ge1xuICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChwYWdlKTtcbiAgICB9O1xuICAgIHRoaXMudW5kb1JlZG8gPSBuZXcgU3VydmV5VW5kb1JlZG8oKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3JWYWx1ZSA9IG5ldyBTdXJ2ZXlPYmplY3RFZGl0b3IodGhpcyk7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLm9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2sgPSBmdW5jdGlvbihcbiAgICAgIG9iamVjdDogYW55LFxuICAgICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgICApIHtcbiAgICAgIHJldHVybiBzZWxmLm9uQ2FuU2hvd09iamVjdFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpO1xuICAgIH07XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLm9uU29ydFByb3BlcnR5Q2FsbGJhY2sgPSBmdW5jdGlvbihcbiAgICAgIG9iajogYW55LFxuICAgICAgcHJvcGVydHkxOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgICAgcHJvcGVydHkyOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICAgKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBzZWxmLm9uQ3VzdG9tU29ydFByb3BlcnR5T2JqZWN0UHJvcGVydHkob2JqLCBwcm9wZXJ0eTEsIHByb3BlcnR5Mik7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yVmFsdWUub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZC5hZGQoXG4gICAgICAoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHNlbGYub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgICBvcHRpb25zLnByb3BlcnR5LFxuICAgICAgICAgIG9wdGlvbnMub2JqZWN0LFxuICAgICAgICAgIG9wdGlvbnMubmV3VmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3JWYWx1ZS5vbkFmdGVyUmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbihcbiAgICAgIG9iaixcbiAgICAgIGh0bWxFbGVtZW50LFxuICAgICAgcHJvcFxuICAgICkge1xuICAgICAgaWYgKHNlbGYub25Qcm9wZXJ0eUFmdGVyUmVuZGVyLmlzRW1wdHkpIHJldHVybjtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBvYmo6IG9iaixcbiAgICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgICAgICBwcm9wZXJ0eTogcHJvcC5wcm9wZXJ0eSxcbiAgICAgICAgcHJvcGVydHlFZGl0b3I6IHByb3AuZWRpdG9yXG4gICAgICB9O1xuICAgICAgc2VsZi5vblByb3BlcnR5QWZ0ZXJSZW5kZXIuZmlyZShzZWxmLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb25FZGl0b3JXaW5kb3cgPSBuZXcgU3VydmV5UHJvcGVydHlFZGl0b3JTaG93V2luZG93KCk7XG4gICAgdGhpcy5xdWVzdGlvbkVkaXRvcldpbmRvdy5vbkNhblNob3dQcm9wZXJ0eUNhbGxiYWNrID0gZnVuY3Rpb24oXG4gICAgICBvYmplY3Q6IGFueSxcbiAgICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICAgKSB7XG4gICAgICByZXR1cm4gc2VsZi5vbkNhblNob3dPYmplY3RQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5TGl2ZSA9IG5ldyBTdXJ2ZXlMaXZlVGVzdGVyKCk7XG4gICAgdGhpcy5zdXJ2ZXlFbWJlZGluZyA9IG5ldyBTdXJ2ZXlFbWJlZGluZ1dpbmRvdygpO1xuICAgIHRoaXMudG9vbGJveFZhbHVlID0gbmV3IFF1ZXN0aW9uVG9vbGJveChcbiAgICAgIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucXVlc3Rpb25UeXBlc1xuICAgICAgICA/IHRoaXMub3B0aW9ucy5xdWVzdGlvblR5cGVzXG4gICAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgICB0aGlzLmtvVmlld1R5cGUgPSBrby5vYnNlcnZhYmxlKFwiZGVzaWduZXJcIik7XG4gICAgdGhpcy5rb0lzU2hvd0Rlc2lnbmVyID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5rb1ZpZXdUeXBlKCkgPT0gXCJkZXNpZ25lclwiO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0RGVzaWduZXJDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5zaG93RGVzaWduZXIoKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0RWRpdG9yQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2hvd0pzb25FZGl0b3IoKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0VGVzdENsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLnNob3dUZXN0U3VydmV5KCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdEVtYmVkQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2hvd0VtYmVkRWRpdG9yKCk7XG4gICAgfTtcbiAgICB0aGlzLmdlbmVyYXRlVmFsaWRKU09OQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYua29HZW5lcmF0ZVZhbGlkSlNPTih0cnVlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhdGVSZWFkYWJsZUpTT05DbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5rb0dlbmVyYXRlVmFsaWRKU09OKGZhbHNlKTtcbiAgICB9O1xuICAgIHRoaXMucnVuU3VydmV5Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2hvd0xpdmVTdXJ2ZXkoKTtcbiAgICB9O1xuICAgIHRoaXMuZW1iZWRpbmdTdXJ2ZXlDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5zaG93U3VydmV5RW1iZWRpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMuZGVsZXRlT2JqZWN0Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZGVsZXRlQ3VycmVudE9iamVjdCgpO1xuICAgIH07XG4gICAgdGhpcy5kcmFnZ2luZ1Rvb2xib3hJdGVtID0gZnVuY3Rpb24oaXRlbSwgZSkge1xuICAgICAgc2VsZi5kb0RyYWdnaW5nVG9vbGJveEl0ZW0oaXRlbS5qc29uLCBlKTtcbiAgICB9O1xuICAgIHRoaXMuY2xpY2tUb29sYm94SXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIHNlbGYuZG9DbGlja1Rvb2xib3hJdGVtKGl0ZW0uanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmRyYWdFbmQgPSBmdW5jdGlvbihpdGVtLCBlKSB7XG4gICAgICBzZWxmLmRyYWdEcm9wSGVscGVyLmVuZCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmRvVW5kb0NsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmRvVW5kb1JlZG8oc2VsZi51bmRvUmVkby51bmRvKCkpO1xuICAgIH07XG4gICAgdGhpcy5kb1JlZG9DbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5kb1VuZG9SZWRvKHNlbGYudW5kb1JlZG8ucmVkbygpKTtcbiAgICB9O1xuXG4gICAgdGhpcy5qc29uRWRpdG9yID0gbmV3IFN1cnZleUpTT05FZGl0b3IoKTtcblxuICAgIGlmIChyZW5kZXJlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVuZGVyKHJlbmRlcmVkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXh0ID0gXCJcIjtcblxuICAgIHRoaXMuYWRkVG9vbGJhckl0ZW1zKCk7XG4gIH1cblxuICB0aGVtZUNzcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gU3R5bGVzTWFuYWdlci5jdXJyZW50VGhlbWUoKSA9PT0gXCJib290c3RyYXBcIlxuICAgICAgPyBcInN2X2Jvb3RzdHJhcF9jc3NcIlxuICAgICAgOiBcInN2X2RlZmF1bHRfY3NzXCI7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBhZGRUb29sYmFySXRlbXMoKSB7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtdW5kb1wiLFxuICAgICAgdmlzaWJsZTogdGhpcy5rb0lzU2hvd0Rlc2lnbmVyLFxuICAgICAgZW5hYmxlZDogdGhpcy51bmRvUmVkby5rb0NhblVuZG8sXG4gICAgICBhY3Rpb246IHRoaXMuZG9VbmRvQ2xpY2ssXG4gICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC51bmRvXCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtcmVkb1wiLFxuICAgICAgdmlzaWJsZTogdGhpcy5rb0lzU2hvd0Rlc2lnbmVyLFxuICAgICAgZW5hYmxlZDogdGhpcy51bmRvUmVkby5rb0NhblJlZG8sXG4gICAgICBhY3Rpb246IHRoaXMuZG9SZWRvQ2xpY2ssXG4gICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5yZWRvXCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtc3VydmV5LXNldHRpbmdzXCIsXG4gICAgICB2aXNpYmxlOiB0aGlzLmtvSXNTaG93RGVzaWduZXIsXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHRoaXMuc3VydmV5KTtcbiAgICAgICAgdGhpcy5zaG93UXVlc3Rpb25FZGl0b3IodGhpcy5zdXJ2ZXkpO1xuICAgICAgfSxcbiAgICAgIHRpdGxlOiB0aGlzLmdldExvY1N0cmluZyhcImVkLnNldHRpbmdzXCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtb3B0aW9uc1wiLFxuICAgICAgdmlzaWJsZToga28uY29tcHV0ZWQoXG4gICAgICAgICgpID0+IHRoaXMua29Jc1Nob3dEZXNpZ25lcigpICYmIHRoaXMua29TaG93T3B0aW9ucygpXG4gICAgICApLFxuICAgICAgdGl0bGU6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQub3B0aW9uc1wiKSxcbiAgICAgIHRlbXBsYXRlOiBcInN2ZC10b29sYmFyLW9wdGlvbnNcIixcbiAgICAgIGl0ZW1zOiBrby5vYnNlcnZhYmxlQXJyYXkoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLXZhbGlkLWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGNzczoga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMua29HZW5lcmF0ZVZhbGlkSlNPTigpID8gXCJhY3RpdmVcIiA6IFwiXCIpKSxcbiAgICAgICAgICBhY3Rpb246IHRoaXMuZ2VuZXJhdGVWYWxpZEpTT05DbGljayxcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5nZW5lcmF0ZVZhbGlkSlNPTlwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLXJlYWRhYmxlLWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGNzczoga28uY29tcHV0ZWQoKCkgPT4gKCF0aGlzLmtvR2VuZXJhdGVWYWxpZEpTT04oKSA/IFwiYWN0aXZlXCIgOiBcIlwiKSksXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmdlbmVyYXRlUmVhZGFibGVKU09OQ2xpY2ssXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQuZ2VuZXJhdGVSZWFkYWJsZUpTT05cIilcbiAgICAgICAgfVxuICAgICAgXSlcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5wdXNoKHtcbiAgICAgIGlkOiBcInN2ZC10ZXN0XCIsXG4gICAgICB2aXNpYmxlOiBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmtvVmlld1R5cGUoKSA9PT0gXCJ0ZXN0XCIpLFxuICAgICAgdGl0bGU6IGtvLmNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQudGVzdFN1cnZleVdpZHRoXCIpICtcbiAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aCgpXG4gICAgICApLFxuICAgICAgdGVtcGxhdGU6IFwic3ZkLXRvb2xiYXItb3B0aW9uc1wiLFxuICAgICAgaXRlbXM6IGtvLm9ic2VydmFibGVBcnJheShbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdmQtMTAwLWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aChcIjEwMCVcIiksXG4gICAgICAgICAgdGl0bGU6IFwiMTAwJVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdmQtMTIwMHB4LWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aChcIjEyMDBweFwiKSxcbiAgICAgICAgICB0aXRsZTogXCIxMjAwcHhcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLTEwMDBweC1qc29uXCIsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMua29UZXN0U3VydmV5V2lkdGgoXCIxMDAwcHhcIiksXG4gICAgICAgICAgdGl0bGU6IFwiMTAwMHB4XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInN2ZC04MDBweC1qc29uXCIsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMua29UZXN0U3VydmV5V2lkdGgoXCI4MDBweFwiKSxcbiAgICAgICAgICB0aXRsZTogXCI4MDBweFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdmQtNjAwcHgtanNvblwiLFxuICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmtvVGVzdFN1cnZleVdpZHRoKFwiNjAwcHhcIiksXG4gICAgICAgICAgdGl0bGU6IFwiNjAwcHhcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLTQwMHB4LWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aChcIjQwMHB4XCIpLFxuICAgICAgICAgIHRpdGxlOiBcIjQwMHB4XCJcbiAgICAgICAgfVxuICAgICAgXSlcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5wdXNoKHtcbiAgICAgIGlkOiBcInN2ZC1zYXZlXCIsXG4gICAgICB2aXNpYmxlOiB0aGlzLmtvU2hvd1NhdmVCdXR0b24sXG4gICAgICBhY3Rpb246IHRoaXMuc2F2ZUJ1dHRvbkNsaWNrLFxuICAgICAgaW5uZXJDc3M6IFwic3ZkX3NhdmVfYnRuXCIsXG4gICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5zYXZlU3VydmV5XCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtc3RhdGVcIixcbiAgICAgIHZpc2libGU6IHRoaXMua29TaG93U3RhdGUsXG4gICAgICBjc3M6IFwic3ZkX3N0YXRlXCIsXG4gICAgICBpbm5lckNzczoga28uY29tcHV0ZWQoKCkgPT4gXCJpY29uLVwiICsgdGhpcy5rb1N0YXRlKCkpLFxuICAgICAgdGl0bGU6IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQuXCIgKyB0aGlzLmtvU3RhdGUoKSkpLFxuICAgICAgdGVtcGxhdGU6IFwic3ZkLXRvb2xiYXItc3RhdGVcIlxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KFwiZ2VuZXJhdGVWYWxpZEpTT05cIikpXG4gICAgICBvcHRpb25zLmdlbmVyYXRlVmFsaWRKU09OID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc2hvd0pTT05FZGl0b3JUYWJWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93SlNPTkVkaXRvclRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd0pTT05FZGl0b3JUYWJcbiAgICAgICAgOiB0cnVlO1xuICAgIHRoaXMuc2hvd1Rlc3RTdXJ2ZXlUYWJWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93VGVzdFN1cnZleVRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd1Rlc3RTdXJ2ZXlUYWJcbiAgICAgICAgOiB0cnVlO1xuICAgIHRoaXMuc2hvd0VtYmVkZWRTdXJ2ZXlUYWJWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93RW1iZWRlZFN1cnZleVRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd0VtYmVkZWRTdXJ2ZXlUYWJcbiAgICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLmhhdmVDb21tZXJjaWFsTGljZW5zZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oYXZlQ29tbWVyY2lhbExpY2Vuc2UgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLmhhdmVDb21tZXJjaWFsTGljZW5zZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMua29TaG93T3B0aW9ucyhcbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dPcHRpb25zICE9PSBcInVuZGVmaW5lZFwiID8gb3B0aW9ucy5zaG93T3B0aW9ucyA6IGZhbHNlXG4gICAgKTtcbiAgICB0aGlzLmtvU2hvd1Byb3BlcnR5R3JpZChcbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dQcm9wZXJ0eUdyaWQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLnNob3dQcm9wZXJ0eUdyaWRcbiAgICAgICAgOiB0cnVlXG4gICAgKTtcbiAgICB0aGlzLmtvR2VuZXJhdGVWYWxpZEpTT04odGhpcy5vcHRpb25zLmdlbmVyYXRlVmFsaWRKU09OKTtcbiAgICB0aGlzLmlzQXV0b1NhdmUgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaXNBdXRvU2F2ZSAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMuaXNBdXRvU2F2ZSA6IGZhbHNlO1xuICAgIHRoaXMuaXNSVExWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5pc1JUTCAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMuaXNSVEwgOiBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvTmV3RWxlbWVudCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zY3JvbGxUb05ld0VsZW1lbnQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLnNjcm9sbFRvTmV3RWxlbWVudFxuICAgICAgICA6IHRydWU7XG4gICAgaWYgKG9wdGlvbnMuZGVzaWduZXJIZWlnaHQpIHtcbiAgICAgIHRoaXMua29EZXNpZ25lckhlaWdodChvcHRpb25zLmRlc2lnbmVySGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub2JqZWN0c0ludGVuZCkge1xuICAgICAgU3VydmV5T2JqZWN0cy5pbnRlbmQgPSBvcHRpb25zLm9iamVjdHNJbnRlbmQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93UGFnZXNUb29sYm94ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmtvU2hvd1BhZ2VzVG9vbGJveChvcHRpb25zLnNob3dQYWdlc1Rvb2xib3gpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGVkaXRpbmcgc3VydmV5IG9iamVjdCAoU3VydmV5LlN1cnZleSlcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleUZvckRlc2lnbmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRPYmplY3RFZGl0b3IoKTogU3VydmV5T2JqZWN0RWRpdG9yIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgbWV0aG9kIHRvIHJlbmRlciB0aGUgc3VydmV5IGVkaXRvci5cbiAgICogQHBhcmFtIGVsZW1lbnQgSHRtbEVsZW1lbnQgb3IgaHRtbCBlbGVtZW50IGlkIHdoZXJlIFN1cnZleSBFZGl0b3Igd2lsbCBiZSByZW5kZXJlZFxuICAgKiBAcGFyYW0gb3B0aW9ucyBTdXJ2ZXkgRWRpdG9yIG9wdGlvbnMuIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOiBzaG93SlNPTkVkaXRvclRhYiwgc2hvd1Rlc3RTdXJ2ZXlUYWIsIHNob3dFbWJlZGVkU3VydmV5VGFiLCBzaG93T3B0aW9ucywgZ2VuZXJhdGVWYWxpZEpTT04sIGlzQXV0b1NhdmUsIGRlc2lnbmVySGVpZ2h0LlxuICAgKi9cbiAgcHVibGljIHJlbmRlcihlbGVtZW50OiBhbnkgPSBudWxsLCBvcHRpb25zOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMpIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlZEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgICBlbGVtZW50ID0gdGhpcy5yZW5kZXJlZEVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSB0ZW1wbGF0ZUVkaXRvckh0bWw7XG4gICAgc2VsZi5hcHBseUJpbmRpbmcoKTtcbiAgfVxuICBwdWJsaWMgbG9hZFN1cnZleShzdXJ2ZXlJZDogc3RyaW5nKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIG5ldyBTdXJ2ZXkuZHhTdXJ2ZXlTZXJ2aWNlKCkubG9hZFN1cnZleShzdXJ2ZXlJZCwgZnVuY3Rpb24oXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSB7XG4gICAgICBpZiAoc3VjY2VzcyAmJiByZXN1bHQpIHtcbiAgICAgICAgc2VsZi50ZXh0ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGhlIFN1cnZleSBKU09OIGFzIGEgdGV4dC4gVXNlIGl0IHRvIGdldCBTdXJ2ZXkgSlNPTiBvciBjaGFuZ2UgaXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRleHQoKSB7XG4gICAgaWYgKHRoaXMua29Jc1Nob3dEZXNpZ25lcigpKSByZXR1cm4gdGhpcy5nZXRTdXJ2ZXlUZXh0RnJvbURlc2lnbmVyKCk7XG4gICAgcmV0dXJuIHRoaXMuanNvbkVkaXRvci50ZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGFuZ2VUZXh0KHZhbHVlLCB0cnVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IEpTT04gYXMgdGV4dCAgaW50byBzdXJ2ZXkuIENsZWFyIHVuZG8vcmVkbyBzdGF0ZXMgb3B0aW9uYWxseS5cbiAgICogQHBhcmFtIHZhbHVlIEpTT04gYXMgdGV4dFxuICAgKiBAcGFyYW0gY2xlYXJTdGF0ZSBkZWZhdWx0IGZhbHNlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSB0byBjbGVhciB1bmRvL3JlZG8gc3RhdGVzLlxuICAgKi9cbiAgcHVibGljIGNoYW5nZVRleHQodmFsdWU6IHN0cmluZywgY2xlYXJTdGF0ZSA9IGZhbHNlKSB7XG4gICAgdmFyIHRleHRXb3JrZXIgPSBuZXcgU3VydmV5VGV4dFdvcmtlcih2YWx1ZSk7XG4gICAgaWYgKHRleHRXb3JrZXIuaXNKc29uQ29ycmVjdCkge1xuICAgICAgdGhpcy5pbml0U3VydmV5KG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0ZXh0V29ya2VyLnN1cnZleSkpO1xuICAgICAgdGhpcy5zaG93RGVzaWduZXIoKTtcbiAgICAgIHRoaXMuc2V0VW5kb1JlZG9DdXJyZW50U3RhdGUoY2xlYXJTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0VGV4dFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMua29WaWV3VHlwZShcImVkaXRvclwiKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRvb2xib3ggb2JqZWN0LiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBRdWVzdGlvbiB0b29sYm94IGl0ZW1zLlxuICAgKiBAc2VlIFF1ZXN0aW9uVG9vbGJveFxuICAgKi9cbiAgcHVibGljIGdldCB0b29sYm94KCk6IFF1ZXN0aW9uVG9vbGJveCB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0b29sYmFyIGl0ZW1zLiBZb3UgbWF5IGFkZC9yZW1vdmUvcmVwbGFjZSB0aGVtLlxuICAgKiBAc2VlIElUb29sYmFySXRlbVxuICAgKi9cbiAgcHVibGljIHRvb2xiYXJJdGVtcyA9IGtvLm9ic2VydmFibGVBcnJheTxJVG9vbGJhckl0ZW0+KCk7XG4gIC8qKlxuICAgKiBHZXQgYW5kIHNldCB0aGUgbWF4aW11bSBvZiBjb3BpZWQgcXVlc3Rpb25zL3BhbmVscyBpbiB0aGUgdG9vbGJveC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgM1xuICAgKi9cbiAgcHVibGljIGdldCBjdXN0b21Ub29sYm94UXVlc3Rpb25NYXhDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3guY29waWVkSXRlbU1heENvdW50O1xuICB9XG4gIHB1YmxpYyBzZXQgY3VzdG9tVG9vbGJveFF1ZXN0aW9uTWF4Q291bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudG9vbGJveC5jb3BpZWRJdGVtTWF4Q291bnQgPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgRWRpdG9yIHN0YXRlLiBJdCBtYXkgcmV0dXJuIGVtcHR5IHN0cmluZyBvciBcInNhdmluZ1wiIGFuZCBcInNhdmVkXCIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0U3RhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc3RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMua29TdGF0ZSh0aGlzLnN0YXRlKTtcbiAgfVxuICBzYXZlTm86IG51bWJlciA9IDA7XG4gIHByb3RlY3RlZCBkb1NhdmUoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZShcInNhdmluZ1wiKTtcbiAgICBpZiAodGhpcy5zYXZlU3VydmV5RnVuYykge1xuICAgICAgdGhpcy5zYXZlTm8rKztcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMuc2F2ZVN1cnZleUZ1bmModGhpcy5zYXZlTm8sIGZ1bmN0aW9uIGRvU2F2ZUNhbGxiYWNrKFxuICAgICAgICBubzogbnVtYmVyLFxuICAgICAgICBpc1N1Y2Nlc3M6IGJvb2xlYW5cbiAgICAgICkge1xuICAgICAgICBzZWxmLnNldFN0YXRlKFwic2F2ZWRcIik7XG4gICAgICAgIGlmIChzZWxmLnNhdmVObyA9PSBubykge1xuICAgICAgICAgIGlmIChpc1N1Y2Nlc3MpIHNlbGYuc2V0U3RhdGUoXCJzYXZlZFwiKTtcbiAgICAgICAgICAvL2Vsc2UgVE9ET1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldE1vZGlmaWVkKG9wdGlvbnM6IGFueSA9IG51bGwpIHtcbiAgICB0aGlzLnNldFN0YXRlKFwibW9kaWZpZWRcIik7XG4gICAgdGhpcy5zZXRVbmRvUmVkb0N1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMub25Nb2RpZmllZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaXNBdXRvU2F2ZSAmJiB0aGlzLmRvU2F2ZSgpO1xuICB9XG4gIHByaXZhdGUgc2V0VW5kb1JlZG9DdXJyZW50U3RhdGUoY2xlYXJTdGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGNsZWFyU3RhdGUpIHtcbiAgICAgIHRoaXMudW5kb1JlZG8uY2xlYXIoKTtcbiAgICB9XG4gICAgdmFyIHNlbE9iaiA9IHRoaXMua29TZWxlY3RlZE9iamVjdCgpID8gdGhpcy5rb1NlbGVjdGVkT2JqZWN0KCkudmFsdWUgOiBudWxsO1xuICAgIHRoaXMudW5kb1JlZG8uc2V0Q3VycmVudCh0aGlzLnN1cnZleVZhbHVlKCksIHNlbE9iaiA/IHNlbE9iai5uYW1lIDogbnVsbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbiB0byB0aGlzIHByb3BlcnR5IGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBjbGlja2luZyB0aGUgJ1NhdmUnIGJ1dHRvbiBvciBvbiBhbnkgY2hhbmdlIGlmIGlzQXV0b1NhdmUgZXF1YWxzIHRydWUuXG4gICAqIEBzZWUgaXNBdXRvU2F2ZVxuICAgKi9cbiAgcHVibGljIGdldCBzYXZlU3VydmV5RnVuYygpIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlU3VydmV5RnVuY1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgc2F2ZVN1cnZleUZ1bmModmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2F2ZVN1cnZleUZ1bmNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMua29TaG93U2F2ZUJ1dHRvbih2YWx1ZSAhPSBudWxsICYmICF0aGlzLmlzQXV0b1NhdmUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzaG93IFwiT3B0aW9uc1wiIG1lbnUgYW5kIHRvIGZhbHNlIHRvIGhpZGUgdGhlIG1lbnVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd09wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMua29TaG93T3B0aW9ucygpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd09wdGlvbnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmtvU2hvd09wdGlvbnModmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgUHJvcGVydHkgR3JpZCBvbiB0aGUgcmlnaHQuIEl0IGFsbG93cyB0byBlZGl0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCBvYmplY3QgKHF1ZXN0aW9uL3BhbmVsL3BhZ2Uvc3VydmV5KS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1Byb3BlcnR5R3JpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5rb1Nob3dQcm9wZXJ0eUdyaWQoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQcm9wZXJ0eUdyaWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmtvU2hvd1Byb3BlcnR5R3JpZCh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNob3cgXCJKU09OIEVkaXRvclwiIHRhYiBhbmQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgdGFiXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dKU09ORWRpdG9yVGFiKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dKU09ORWRpdG9yVGFiVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SlNPTkVkaXRvclRhYih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd0pTT05FZGl0b3JUYWJWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzaG93IFwiVGVzdCBTdXJ2ZXlcIiB0YWIgYW5kIHRvIGZhbHNlIHRvIGhpZGUgdGhlIHRhYlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGVzdFN1cnZleVRhYigpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGVzdFN1cnZleVRhYlZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1Rlc3RTdXJ2ZXlUYWIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dUZXN0U3VydmV5VGFiVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2hvdyBcIkVtYmVkIFN1cnZleVwiIHRhYiBhbmQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgdGFiXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dFbWJlZGVkU3VydmV5VGFiKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBzaG93RW1iZWRlZFN1cnZleVRhYih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd0VtYmVkZWRTdXJ2ZXlUYWJWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBhY3RpdmF0ZSBSVEwgc3VwcG9ydFxuICAgKi9cbiAgcHVibGljIGdldCBpc1JUTCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JUTFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNSVEwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzUlRMVmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNhblNob3dPYmplY3RQcm9wZXJ0eShcbiAgICBvYmplY3Q6IGFueSxcbiAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuICApOiBib29sZWFuIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgb2JqOiBvYmplY3QsIHByb3BlcnR5OiBwcm9wZXJ0eSwgY2FuU2hvdzogdHJ1ZSB9O1xuICAgIHRoaXMub25DYW5TaG93UHJvcGVydHkuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5jYW5TaG93O1xuICB9XG4gIHByb3RlY3RlZCBvbkN1c3RvbVNvcnRQcm9wZXJ0eU9iamVjdFByb3BlcnR5KFxuICAgIG9iamVjdDogYW55LFxuICAgIHByb3BlcnR5MTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBwcm9wZXJ0eTI6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5vbkN1c3RvbVNvcnRQcm9wZXJ0eS5pc0VtcHR5KSByZXR1cm4gMDtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIG9iajogb2JqZWN0LFxuICAgICAgcHJvcGVydHkxOiBwcm9wZXJ0eTEsXG4gICAgICBwcm9wZXJ0eTI6IHByb3BlcnR5MixcbiAgICAgIHJlc3VsdDogMFxuICAgIH07XG4gICAgdGhpcy5vbkN1c3RvbVNvcnRQcm9wZXJ0eS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGV4dFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmpzb25FZGl0b3IudGV4dCA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgcGFnZSBpbnRvIHRoZSBlZGl0aW5nIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBhZGRQYWdlID0gKCkgPT4ge1xuICAgIHZhciBuYW1lID0gU3VydmV5SGVscGVyLmdldE5ld1BhZ2VOYW1lKHRoaXMucGFnZXMoKSk7XG4gICAgdmFyIHBhZ2UgPSA8U3VydmV5LlBhZ2U+dGhpcy5zdXJ2ZXkuYWRkTmV3UGFnZShuYW1lKTtcbiAgICB0aGlzLnBhZ2VzLnZhbHVlSGFzTXV0YXRlZCgpOyAvL1RPRE8gd2h5IHRoaXMgaXMgbmVlZCA/IChrbyBwcm9ibGVtKVxuICAgIHRoaXMuYWRkUGFnZVRvVUkocGFnZSk7XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7IHR5cGU6IFwiUEFHRV9BRERFRFwiLCBuZXdWYWx1ZTogcGFnZSB9KTtcbiAgfTtcbiAgcHVibGljIGRlbGV0ZVBhZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5kZWxldGVDdXJyZW50T2JqZWN0KCk7XG4gICAgdGhpcy5wYWdlcy52YWx1ZUhhc011dGF0ZWQoKTsgLy9UT0RPIHdoeSB0aGlzIGlzIG5lZWQgPyAoa28gcHJvYmxlbSlcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvY2FsaXplZCBzdHJpbmcgYnkgaXQncyBpZFxuICAgKiBAcGFyYW0gc3RyIHRoZSBzdHJpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoc3RyKTtcbiAgfVxuICBwdWJsaWMgbW92ZVBhZ2UgPSAoaW5kZXhGcm9tOiBudW1iZXIsIGluZGV4VG86IG51bWJlcikgPT4ge1xuICAgIHZhciBwYWdlID0gPFN1cnZleS5QYWdlPnRoaXMucGFnZXMoKVtpbmRleFRvXTtcbiAgICB0aGlzLnN1cnZleU9iamVjdHMuc3VydmV5ID0gbnVsbDsgLy8gVE9ETyBtYXkgYmUgd2UgZG9uJ3QgbmVlZCB0aGlzIGhhY2tcbiAgICB0aGlzLnN1cnZleU9iamVjdHMuc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChwYWdlKTtcbiAgICB0aGlzLnNldE1vZGlmaWVkKHtcbiAgICAgIHR5cGU6IFwiUEFHRV9NT1ZFRFwiLFxuICAgICAgcGFnZTogcGFnZSxcbiAgICAgIGluZGV4RnJvbTogaW5kZXhGcm9tLFxuICAgICAgaW5kZXhUbzogaW5kZXhUb1xuICAgIH0pO1xuICB9O1xuICBwdWJsaWMgYWRkUGFnZVRvVUkocGFnZTogU3VydmV5LlBhZ2UpIHtcbiAgICB0aGlzLnN1cnZleU9iamVjdHMuYWRkUGFnZShwYWdlKTtcbiAgfVxuICBwcml2YXRlIGRvT25RdWVzdGlvbkFkZGVkKHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlLCBwYXJlbnRQYW5lbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSGVscGVyLmlzTW92aW5nKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBwYWdlOiBwYWdlIH07XG4gICAgICB0aGlzLm9uUXVlc3Rpb25BZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleU9iamVjdHMuYWRkRWxlbWVudChxdWVzdGlvbiwgcGFyZW50UGFuZWwpO1xuICAgIHRoaXMuc3VydmV5LnJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9PbkVsZW1lbnRSZW1vdmVkKHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlKSB7XG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnJlbW92ZU9iamVjdChxdWVzdGlvbik7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb09uUGFuZWxBZGRlZChwYW5lbDogU3VydmV5LlBhbmVsLCBwYXJlbnRQYW5lbDogYW55KSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmdldFBhZ2VCeUVsZW1lbnQocGFuZWwpO1xuICAgIHZhciBvcHRpb25zID0geyBwYW5lbDogcGFuZWwsIHBhZ2U6IHBhZ2UgfTtcbiAgICB0aGlzLm9uUGFuZWxBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5hZGRFbGVtZW50KHBhbmVsLCBwYXJlbnRQYW5lbCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb09uUGFnZUFkZGVkKHBhZ2U6IFN1cnZleS5QYWdlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHBhZ2U6IHBhZ2UgfTtcbiAgICB0aGlzLm9uUGFnZUFkZGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgcHVibGljIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgb2JqOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICB2YXIgaXNEZWZhdWx0ID0gcHJvcGVydHkuaXNEZWZhdWx0VmFsdWUobmV3VmFsdWUpO1xuICAgIHZhciBvbGRWYWx1ZSA9IG9ialtwcm9wZXJ0eS5uYW1lXTtcbiAgICBvYmpbcHJvcGVydHkubmFtZV0gPSBuZXdWYWx1ZTtcbiAgICBpZiAocHJvcGVydHkubmFtZSA9PSBcIm5hbWVcIiB8fCBwcm9wZXJ0eS5uYW1lID09IFwidGl0bGVcIikge1xuICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzLm5hbWVDaGFuZ2VkKG9iaik7XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eS5uYW1lID09PSBcIm5hbWVcIikge1xuICAgICAgdGhpcy5kaXJ0eVBhZ2VVcGRhdGUoKTsgLy9UT0RPIHdoeSB0aGlzIGlzIG5lZWQgPyAoa28gcHJvYmxlbSlcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5Lm5hbWUgPT09IFwicGFnZVwiKSB7XG4gICAgICB0aGlzLnNlbGVjdFBhZ2UobmV3VmFsdWUpO1xuICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChvYmopO1xuICAgIH1cbiAgICB0aGlzLnNldE1vZGlmaWVkKHtcbiAgICAgIHR5cGU6IFwiUFJPUEVSVFlfQ0hBTkdFRFwiLFxuICAgICAgbmFtZTogcHJvcGVydHkubmFtZSxcbiAgICAgIHRhcmdldDogb2JqLFxuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgfSk7XG4gICAgLy9UT0RPIGFkZCBhIGZsYWcgdG8gYSBwcm9wZXJ0eSwgbWF5IGNoYW5nZSBvdGhlciBwcm9wZXJ0aWVzXG4gICAgaWYgKFxuICAgICAgcHJvcGVydHkubmFtZSA9PSBcImxvY2FsZVwiIHx8XG4gICAgICBwcm9wZXJ0eS5uYW1lID09IFwiaGFzQ29tbWVudFwiIHx8XG4gICAgICBwcm9wZXJ0eS5uYW1lID09IFwiaGFzT3RoZXJcIlxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLm9iamVjdENoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb1VuZG9SZWRvKGl0ZW06IFVuZG9SZWRvSXRlbSkge1xuICAgIHRoaXMuaW5pdFN1cnZleShpdGVtLnN1cnZleUpTT04pO1xuICAgIGlmIChpdGVtLnNlbGVjdGVkT2JqTmFtZSkge1xuICAgICAgdmFyIHNlbE9iaiA9IHRoaXMuZmluZE9iakJ5TmFtZShpdGVtLnNlbGVjdGVkT2JqTmFtZSk7XG4gICAgICBpZiAoc2VsT2JqKSB7XG4gICAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zZWxlY3RPYmplY3Qoc2VsT2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShcIm1vZGlmaWVkXCIpO1xuICAgIHRoaXMuaXNBdXRvU2F2ZSAmJiB0aGlzLmRvU2F2ZSgpO1xuICB9XG4gIHByaXZhdGUgZmluZE9iakJ5TmFtZShuYW1lOiBzdHJpbmcpOiBTdXJ2ZXkuQmFzZSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLnN1cnZleS5nZXRQYWdlQnlOYW1lKG5hbWUpO1xuICAgIGlmIChwYWdlKSByZXR1cm4gcGFnZTtcbiAgICB2YXIgcXVlc3Rpb24gPSA8U3VydmV5LlF1ZXN0aW9uQmFzZT50aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHJldHVybiBxdWVzdGlvbjtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGNhblN3aXRjaFZpZXdUeXBlKG5ld1R5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChuZXdUeXBlICYmIHRoaXMua29WaWV3VHlwZSgpID09IG5ld1R5cGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5rb1ZpZXdUeXBlKCkgPT0gXCJkZXNpZ25lclwiKSB7XG4gICAgICB0aGlzLmpzb25FZGl0b3IudGV4dCA9IHRoaXMuZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5rb1ZpZXdUeXBlKCkgIT0gXCJlZGl0b3JcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCF0aGlzLmpzb25FZGl0b3IuaXNKc29uQ29ycmVjdCkge1xuICAgICAgYWxlcnQodGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5jb3JyZWN0SlNPTlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaW5pdFN1cnZleShcbiAgICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzLmpzb25FZGl0b3Iuc3VydmV5KVxuICAgICk7XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7IHR5cGU6IFwiVklFV19UWVBFX0NIQU5HRURcIiwgbmV3VHlwZTogbmV3VHlwZSB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIFwiU3VydmV5IERlc2lnbmVyXCIgdGFiIGFjdGl2ZS5cbiAgICovXG4gIHB1YmxpYyBzaG93RGVzaWduZXIoKSB7XG4gICAgaWYgKCF0aGlzLmNhblN3aXRjaFZpZXdUeXBlKFwiZGVzaWduZXJcIikpIHJldHVybjtcbiAgICB0aGlzLmtvVmlld1R5cGUoXCJkZXNpZ25lclwiKTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIFwiSlNPTiBFZGl0b3JcIiB0YWIgYWN0aXZlLlxuICAgKi9cbiAgcHVibGljIHNob3dKc29uRWRpdG9yKCkge1xuICAgIGlmICh0aGlzLmtvVmlld1R5cGUoKSA9PSBcImVkaXRvclwiKSByZXR1cm47XG4gICAgdGhpcy5qc29uRWRpdG9yLnNob3codGhpcy5nZXRTdXJ2ZXlUZXh0RnJvbURlc2lnbmVyKCkpO1xuICAgIHRoaXMua29WaWV3VHlwZShcImVkaXRvclwiKTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIFwiVGVzdCBTdXJ2ZXlcIiB0YWIgYWN0aXZlLlxuICAgKi9cbiAgcHVibGljIHNob3dUZXN0U3VydmV5KCkge1xuICAgIGlmICghdGhpcy5jYW5Td2l0Y2hWaWV3VHlwZShudWxsKSkgcmV0dXJuO1xuICAgIHRoaXMuc2hvd0xpdmVTdXJ2ZXkoKTtcbiAgICB0aGlzLmtvVmlld1R5cGUoXCJ0ZXN0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgRW1iZWQgU3VydmV5XCIgdGFiIGFjdGl2ZS5cbiAgICovXG4gIHB1YmxpYyBzaG93RW1iZWRFZGl0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmNhblN3aXRjaFZpZXdUeXBlKFwiZW1iZWRcIikpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdXJ2ZXlFbWJlZGluZygpO1xuICAgIHRoaXMua29WaWV3VHlwZShcImVtYmVkXCIpO1xuICB9XG4gIHByaXZhdGUgZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpIHtcbiAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzLnN1cnZleSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZ2VuZXJhdGVWYWxpZEpTT04pXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMSk7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlKU09ONSgpLnN0cmluZ2lmeShqc29uLCBudWxsLCAxKTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VCeUVsZW1lbnQob2JqOiBTdXJ2ZXkuQmFzZSk6IFN1cnZleS5QYWdlIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeUVsZW1lbnQoPFN1cnZleS5JRWxlbWVudD4oPGFueT5vYmopKTtcbiAgICBpZiAocGFnZSkgcmV0dXJuIDxTdXJ2ZXkuUGFnZT5wYWdlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleU9iamVjdHMuZ2V0U2VsZWN0ZWRPYmplY3RQYWdlKG9iaik7XG4gIH1cbiAgcHJpdmF0ZSBzZWxlY3RlZE9iamVjdENoYW5nZWQob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBjYW5EZWxldGVPYmplY3QgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yVmFsdWUuc2VsZWN0ZWRPYmplY3QgPSBvYmo7XG4gICAgdmFyIG9ialR5cGUgPSBTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0VHlwZShvYmopO1xuICAgIGlmIChvYmpUeXBlID09IE9ialR5cGUuUGFnZSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPSA8U3VydmV5LlBhZ2U+b2JqO1xuICAgICAgY2FuRGVsZXRlT2JqZWN0ID0gdGhpcy5wYWdlcygpLmxlbmd0aCA+IDE7XG4gICAgfVxuICAgIGlmIChvYmpUeXBlID09IE9ialR5cGUuUXVlc3Rpb24gfHwgb2JqVHlwZSA9PSBPYmpUeXBlLlBhbmVsKSB7XG4gICAgICB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgPSBvYmo7XG4gICAgICBjYW5EZWxldGVPYmplY3QgPSB0cnVlO1xuICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPSB0aGlzLmdldFBhZ2VCeUVsZW1lbnQob2JqKTtcbiAgICAgIHZhciBpZCA9IG9ialtcImlkXCJdO1xuICAgICAgaWYgKHRoaXMucmVuZGVyZWRFbGVtZW50ICYmIGlkICYmIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIGxldCBlbCA9IDxIVE1MRWxlbWVudD50aGlzLnJlbmRlcmVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiICsgaWQpO1xuICAgICAgICBsZXQgcGFnZUVsID0gPEhUTUxFbGVtZW50PnRoaXMucmVuZGVyZWRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgXCIjXCIgKyB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5pZFxuICAgICAgICApO1xuICAgICAgICBTdXJ2ZXlIZWxwZXIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChlbCwgcGFnZUVsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2VsZWN0ZWRFbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5rb0NhbkRlbGV0ZU9iamVjdChjYW5EZWxldGVPYmplY3QpO1xuICAgIC8vU2VsZWN0MiB3b3JrLWFyb3VuZFxuICAgIGlmICh0aGlzLnJlbmRlcmVkRWxlbWVudCAmJiB0aGlzLnNlbGVjdDIpIHtcbiAgICAgIHZhciBlbCA9IDxIVE1MRWxlbWVudD50aGlzLnJlbmRlcmVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBcIiNzZWxlY3QyLW9iamVjdFNlbGVjdG9yLWNvbnRhaW5lclwiXG4gICAgICApOyAvL1RPRE9cbiAgICAgIGlmIChlbCkge1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuc3VydmV5T2JqZWN0cy5rb1NlbGVjdGVkKCk7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0udGV4dCkge1xuICAgICAgICAgIGVsLmlubmVyVGV4dCA9IGl0ZW0udGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYXBwbHlCaW5kaW5nKCkge1xuICAgIGlmICh0aGlzLnJlbmRlcmVkRWxlbWVudCA9PSBudWxsKSByZXR1cm47XG4gICAga28uY2xlYW5Ob2RlKHRoaXMucmVuZGVyZWRFbGVtZW50KTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHRoaXMsIHRoaXMucmVuZGVyZWRFbGVtZW50KTtcbiAgICB0aGlzLnN1cnZleWpzID0gPEhUTUxFbGVtZW50PnRoaXMucmVuZGVyZWRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIiNzdXJ2ZXlqc1wiXG4gICAgKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXlqcykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy5zdXJ2ZXlqcy5vbmtleWRvd24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xuICAgICAgICAvLyBpZiAoZS5rZXlDb2RlID09IDQ2KSBzZWxmLmRlbGV0ZVF1ZXN0aW9uKCk7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gMzggfHwgZS5rZXlDb2RlID09IDQwKSB7XG4gICAgICAgICAgc2VsZi5zZWxlY3RRdWVzdGlvbihlLmtleUNvZGUgPT0gMzgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFN1cnZleSh0aGlzLmdldERlZmF1bHRTdXJ2ZXlKc29uKCkpO1xuICAgIHRoaXMuc2V0VW5kb1JlZG9DdXJyZW50U3RhdGUodHJ1ZSk7XG5cbiAgICB0aGlzLmpzb25FZGl0b3IuaW5pdCg8SFRNTEVsZW1lbnQ+dGhpcy5yZW5kZXJlZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiI3N1cnZleWpzSlNPTkVkaXRvclwiXG4gICAgKSk7XG4gICAgaWYgKHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5KClbXCJzZWxlY3QyXCJdKSB7XG4gICAgICB2YXIgb3B0aW9uczogYW55ID0ge1xuICAgICAgICB3aWR0aDogXCIxMDAlXCJcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5pc1JUTFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnMuZGlyID0gXCJydGxcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0MiA9IGpRdWVyeShcIiNvYmplY3RTZWxlY3RvclwiKVtcInNlbGVjdDJcIl0ob3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0RGVmYXVsdFN1cnZleUpzb24oKTogYW55IHtcbiAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXlKU09ONSgpLnBhcnNlKFN1cnZleUVkaXRvci5kZWZhdWx0TmV3U3VydmV5VGV4dCk7XG4gICAgaWYgKFxuICAgICAganNvbltcInBhZ2VzXCJdICYmXG4gICAgICBqc29uW1wicGFnZXNcIl1bXCJsZW5ndGhcIl0gPiAwICYmXG4gICAgICBqc29uW1wicGFnZXNcIl1bMF1bXCJuYW1lXCJdXG4gICAgKSB7XG4gICAgICBqc29uW1wicGFnZXNcIl1bMF1bXCJuYW1lXCJdID1cbiAgICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLm5ld1BhZ2VOYW1lXCIpICsgXCIxXCI7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHByaXZhdGUgaW5pdFN1cnZleShqc29uOiBhbnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZShuZXcgU3VydmV5Rm9yRGVzaWduZXIoKSk7XG4gICAgdGhpcy5kcmFnRHJvcEhlbHBlciA9IG5ldyBEcmFnRHJvcEhlbHBlcihcbiAgICAgIDxTdXJ2ZXkuSVN1cnZleT50aGlzLnN1cnZleSxcbiAgICAgIGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgc2VsZi5zZXRNb2RpZmllZChvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlbmRlcmVkRWxlbWVudFxuICAgICk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpW1wiZ2V0RWRpdG9yXCJdID0gKCkgPT4gc2VsZjtcbiAgICB0aGlzLnN1cnZleVZhbHVlKClbXCJzZXRKc29uT2JqZWN0XCJdKGpzb24pOyAvL1RPRE9cbiAgICBpZiAodGhpcy5zdXJ2ZXlWYWx1ZSgpLmlzRW1wdHkpIHtcbiAgICAgIHRoaXMuc3VydmV5VmFsdWUoKVtcInNldEpzb25PYmplY3RcIl0odGhpcy5nZXREZWZhdWx0U3VydmV5SnNvbigpKTsgLy9UT0RPXG4gICAgfVxuICAgIHRoaXMuc3VydmV5VmFsdWUoKVtcImRyYWdEcm9wSGVscGVyXCJdID0gdGhpcy5kcmFnRHJvcEhlbHBlcjtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25VcGRhdGVFbGVtZW50QWxsb3dpbmdPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgc2VsZi5vbkVsZW1lbnRBbGxvd09wZXJhdGlvbnMuZmlyZShzZWxmLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5VmFsdWUoKS5vbkdldE1lbnVJdGVtcy5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IG9wdHMgPSBvcHRpb25zLm9iai5hbGxvd2luZ09wdGlvbnM7XG4gICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgICAgaWYgKG9wdHMuYWxsb3dFZGl0KSB7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJlZGl0ZWxlbWVudFwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TG9jU3RyaW5nKFwic3VydmV5LmVkaXRcIiksXG4gICAgICAgICAgaGFzVGl0bGU6IHRydWUsXG4gICAgICAgICAgb25DbGljazogcXVlc3Rpb24gPT4gdGhpcy5zaG93UXVlc3Rpb25FZGl0b3IocXVlc3Rpb24pXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hbGxvd0RlbGV0ZSkge1xuICAgICAgICB2YXIgZGVsZXRlTG9jYWxlTmFtZSA9IG9wdGlvbnMub2JqLmlzUGFuZWxcbiAgICAgICAgICA/IFwic3VydmV5LmRlbGV0ZVBhbmVsXCJcbiAgICAgICAgICA6IFwic3VydmV5LmRlbGV0ZVF1ZXN0aW9uXCI7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVcIixcbiAgICAgICAgICB0ZXh0OiBzZWxmLmdldExvY1N0cmluZyhkZWxldGVMb2NhbGVOYW1lKSxcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbihzZWxPYmopIHtcbiAgICAgICAgICAgIHNlbGYuZGVsZXRlQ3VycmVudE9iamVjdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgb3B0cy5hbGxvd1Nob3dIaWRlVGl0bGUgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMub2JqLnRpdGxlTG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICkge1xuICAgICAgICB2YXIgaXNTaG93VGl0bGUgPSBrby5vYnNlcnZhYmxlPGJvb2xlYW4+KFxuICAgICAgICAgIG9wdGlvbnMub2JqLnRpdGxlTG9jYXRpb24gIT09IFwiaGlkZGVuXCJcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcInNob3d0aXRsZVwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGUuc2hvd1RpdGxlXCIpLFxuICAgICAgICAgIGljb246IGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1Nob3dUaXRsZSgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImljb24tYWN0aW9uc2hvd3RpdGxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJpY29uLWFjdGlvbmhpZGV0aXRsZVwiO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9uQ2xpY2s6IChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udGl0bGVMb2NhdGlvbiAhPT0gXCJoaWRkZW5cIikge1xuICAgICAgICAgICAgICBxdWVzdGlvbi50aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbltcInNob3dUaXRsZVwiXSA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBxdWVzdGlvbi50aXRsZUxvY2F0aW9uID0gXCJkZWZhdWx0XCI7XG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bXCJzaG93VGl0bGVcIl0gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc1Nob3dUaXRsZShxdWVzdGlvbi50aXRsZUxvY2F0aW9uICE9PSBcImhpZGRlblwiKTtcbiAgICAgICAgICAgIHRoaXMub25RdWVzdGlvbkVkaXRvckNoYW5nZWQocXVlc3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgb3B0cy5hbGxvd0NoYW5nZVJlcXVpcmVkICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLm9iai5pc1JlcXVpcmVkICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgdmFyIGlzUmVxdWlyZWQgPSBrby5vYnNlcnZhYmxlPGJvb2xlYW4+KG9wdGlvbnMub2JqLmlzUmVxdWlyZWQpO1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiaXNyZXF1aXJlZFwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGUuaXNSZXF1aXJlZFwiKSxcbiAgICAgICAgICBpY29uOiBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImljb24tYWN0aW9uaXNyZXF1aXJlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiaWNvbi1hY3Rpb25ub3RyZXF1aXJlZFwiO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9uQ2xpY2s6IChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uKSA9PiB7XG4gICAgICAgICAgICBxdWVzdGlvbi5pc1JlcXVpcmVkID0gIXF1ZXN0aW9uLmlzUmVxdWlyZWQ7XG4gICAgICAgICAgICBpc1JlcXVpcmVkKHF1ZXN0aW9uLmlzUmVxdWlyZWQpO1xuICAgICAgICAgICAgdGhpcy5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goeyB0ZW1wbGF0ZTogXCJhY3Rpb24tc2VwYXJhdG9yXCIgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLmFsbG93Q29weSkge1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiY29weVwiLFxuICAgICAgICAgIHRleHQ6IHNlbGYuZ2V0TG9jU3RyaW5nKFwic3VydmV5LmNvcHlcIiksXG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24oc2VsT2JqKSB7XG4gICAgICAgICAgICBzZWxmLmZhc3RDb3B5UXVlc3Rpb24oc2VsT2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hbGxvd0FkZFRvVG9vbGJveCkge1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiYWRkdG90b29sYm94XCIsXG4gICAgICAgICAgdGV4dDogc2VsZi5nZXRMb2NTdHJpbmcoXCJzdXJ2ZXkuYWRkVG9Ub29sYm94XCIpLFxuICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uKHNlbE9iaikge1xuICAgICAgICAgICAgc2VsZi5hZGRDdXN0b21Ub29sYm94UXVlc3Rpb24oc2VsT2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hbGxvd0NoYW5nZVR5cGUpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7IHRlbXBsYXRlOiBcImFjdGlvbi1zZXBhcmF0b3JcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VycmVudFR5cGUgPSBvcHRpb25zLm9iai5nZXRUeXBlKCk7XG4gICAgICAgIHZhciBjb252ZXJ0Q2xhc3NlcyA9IFF1ZXN0aW9uQ29udmVydGVyLmdldENvbnZlcnRUb0NsYXNzZXMoY3VycmVudFR5cGUpO1xuICAgICAgICB2YXIgYWxsb3dDaGFuZ2VUeXBlID0gY29udmVydENsYXNzZXMubGVuZ3RoID4gMDtcbiAgICAgICAgdmFyIGNyZWF0ZVR5cGVCeUNsYXNzID0gY2xhc3NOYW1lID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJxdC5cIiArIGNsYXNzTmFtZSksXG4gICAgICAgICAgICB2YWx1ZTogY2xhc3NOYW1lXG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGF2YWlsYWJsZVR5cGVzID0gW2NyZWF0ZVR5cGVCeUNsYXNzKGN1cnJlbnRUeXBlKV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udmVydENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gY29udmVydENsYXNzZXNbaV07XG4gICAgICAgICAgYXZhaWxhYmxlVHlwZXMucHVzaChjcmVhdGVUeXBlQnlDbGFzcyhjbGFzc05hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicXQuXCIgKyBjdXJyZW50VHlwZSksXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0TG9jU3RyaW5nKFwic3VydmV5LmNvbnZlcnRUb1wiKSxcbiAgICAgICAgICB0eXBlOiBjdXJyZW50VHlwZSxcbiAgICAgICAgICBhbGxvd0NoYW5nZVR5cGU6IGFsbG93Q2hhbmdlVHlwZSxcbiAgICAgICAgICB0ZW1wbGF0ZTogXCJjb252ZXJ0LWFjdGlvblwiLFxuICAgICAgICAgIGF2YWlsYWJsZVR5cGVzOiBhdmFpbGFibGVUeXBlcyxcbiAgICAgICAgICBvbkNvbnZlcnRUeXBlOiAoZGF0YSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdUeXBlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0Q3VycmVudE9iamVjdChvcHRpb25zLm9iaiwgbmV3VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuYWxsb3dEcmFnZ2luZykge1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiZHJhZ2VsZW1lbnRcIixcbiAgICAgICAgICB0ZXh0OiBzZWxmLmdldExvY1N0cmluZyhcInN1cnZleS5kcmFnXCIpLFxuICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uKHNlbE9iaikge31cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYub25EZWZpbmVFbGVtZW50TWVudUl0ZW1zLmZpcmUoc2VsZiwgb3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uRGVzaWduZXJTdXJ2ZXlDcmVhdGVkLmZpcmUodGhpcywgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5VmFsdWUoKSB9KTtcbiAgICB0aGlzLnN1cnZleS5yZW5kZXIodGhpcy5zdXJ2ZXlqcyk7XG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnN1cnZleSA9IHRoaXMuc3VydmV5O1xuICAgIHRoaXMucGFnZXModGhpcy5zdXJ2ZXkucGFnZXMpO1xuICAgIHRoaXMuc3VydmV5VmFsdWUoKS5vblNlbGVjdGVkRWxlbWVudENoYW5nZWQuYWRkKFxuICAgICAgKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBzZWxmLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHNlbmRlcltcInNlbGVjdGVkRWxlbWVudFwiXSk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25FZGl0QnV0dG9uQ2xpY2suYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXkpID0+IHtcbiAgICAgIHNlbGYuc2hvd1F1ZXN0aW9uRWRpdG9yKHNlbGYua29TZWxlY3RlZE9iamVjdCgpLnZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25FbGVtZW50RG91YmxlQ2xpY2suYWRkKFxuICAgICAgKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBzZWxmLm9uRWxlbWVudERvdWJsZUNsaWNrLmZpcmUoc2VsZiwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25Qcm9jZXNzSHRtbC5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgb3B0aW9ucy5odG1sID0gc2VsZi5wcm9jZXNzSHRtbChvcHRpb25zLmh0bWwpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5VmFsdWUoKS5vblF1ZXN0aW9uQWRkZWQuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIHNlbGYuZG9PblF1ZXN0aW9uQWRkZWQob3B0aW9ucy5xdWVzdGlvbiwgb3B0aW9ucy5wYXJlbnRQYW5lbCk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpLm9uUXVlc3Rpb25SZW1vdmVkLmFkZChcbiAgICAgIChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgc2VsZi5kb09uRWxlbWVudFJlbW92ZWQob3B0aW9ucy5xdWVzdGlvbik7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25QYW5lbEFkZGVkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7XG4gICAgICBzZWxmLmRvT25QYW5lbEFkZGVkKG9wdGlvbnMucGFuZWwsIG9wdGlvbnMucGFyZW50UGFuZWwpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5VmFsdWUoKS5vblBhbmVsUmVtb3ZlZC5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgc2VsZi5kb09uRWxlbWVudFJlbW92ZWQob3B0aW9ucy5wYW5lbCk7XG4gICAgfSk7XG4gICAgdmFyIHBBZGRlZCA9IDxhbnk+dGhpcy5zdXJ2ZXlWYWx1ZSgpW1wib25QYWdlQWRkZWRcIl07XG4gICAgaWYgKHBBZGRlZCAmJiBwQWRkZWQuYWRkKSB7XG4gICAgICBwQWRkZWQuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgc2VsZi5kb09uUGFnZUFkZGVkKG9wdGlvbnMucGFnZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaHRtbCkgcmV0dXJuIGh0bWw7XG4gICAgdmFyIHNjcmlwdFJlZ0V4ID0gLzxzY3JpcHRcXGJbXjxdKig/Oig/ITxcXC9zY3JpcHQ+KTxbXjxdKikqPFxcL3NjcmlwdD4vZ2k7XG4gICAgd2hpbGUgKHNjcmlwdFJlZ0V4LnRlc3QoaHRtbCkpIHtcbiAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2Uoc2NyaXB0UmVnRXgsIFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuICBwcml2YXRlIGRvRHJhZ2dpbmdUb29sYm94SXRlbShqc29uOiBhbnksIGUpIHtcbiAgICB0aGlzLmRyYWdEcm9wSGVscGVyLnN0YXJ0RHJhZ1Rvb2xib3hJdGVtKFxuICAgICAgZSxcbiAgICAgIHRoaXMuZ2V0TmV3TmFtZShqc29uW1widHlwZVwiXSksXG4gICAgICBqc29uXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIG5ld1F1ZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIG5ld1BhbmVsczogQXJyYXk8YW55PiA9IFtdO1xuICBwcml2YXRlIGRvQ2xpY2tUb29sYm94SXRlbShqc29uOiBhbnkpIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IHRoaXMuY3JlYXRlTmV3RWxlbWVudChqc29uKTtcbiAgICB0aGlzLmRvQ2xpY2tRdWVzdGlvbkNvcmUobmV3RWxlbWVudCk7XG4gIH1cbiAgcHVibGljIGNvcHlFbGVtZW50KGVsZW1lbnQ6IFN1cnZleS5CYXNlKTogU3VydmV5LklFbGVtZW50IHtcbiAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChlbGVtZW50KTtcbiAgICBqc29uLnR5cGUgPSBlbGVtZW50LmdldFR5cGUoKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdFbGVtZW50KGpzb24pO1xuICB9XG4gIHB1YmxpYyBpc0N1cnJlbnRQYWdlRW1wdHkgPSBrby5jb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgISF0aGlzLnN1cnZleVZhbHVlKCkgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXlWYWx1ZSgpLmtvQ3VycmVudFBhZ2UoKSAmJlxuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpXG4gICAgICAgIC5rb0N1cnJlbnRQYWdlKClcbiAgICAgICAgLmtvUm93cygpLmxlbmd0aCA9PT0gMFxuICApO1xuICBwdWJsaWMgZHJhZ092ZXJRdWVzdGlvbnNFZGl0b3IoZGF0YSwgZSkge1xuICAgIGRhdGEuc3VydmV5LmRyYWdEcm9wSGVscGVyLmRvRHJhZ0Ryb3BPdmVyKGUsIGRhdGEuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGRyb3BPblF1ZXN0aW9uc0VkaXRvcihkYXRhLCBlKSB7XG4gICAgZGF0YS5zdXJ2ZXkuZHJhZ0Ryb3BIZWxwZXIuZG9Ecm9wKGUpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTmV3RWxlbWVudChqc29uOiBhbnkpOiBTdXJ2ZXkuSUVsZW1lbnQge1xuICAgIHZhciBuZXdFbGVtZW50ID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3MoanNvbltcInR5cGVcIl0pO1xuICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIG5ld0VsZW1lbnQpO1xuICAgIHRoaXMuc2V0TmV3TmFtZXMobmV3RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBzZXROZXdOYW1lcyhlbGVtZW50OiBTdXJ2ZXkuSUVsZW1lbnQpIHtcbiAgICB0aGlzLm5ld1F1ZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMubmV3UGFuZWxzID0gW107XG4gICAgdGhpcy5zZXROZXdOYW1lc0NvcmUoZWxlbWVudCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXROZXdOYW1lc0NvcmUoZWxlbWVudDogU3VydmV5LklFbGVtZW50KSB7XG4gICAgdmFyIGVsVHlwZSA9IGVsZW1lbnRbXCJnZXRUeXBlXCJdKCk7XG4gICAgZWxlbWVudC5uYW1lID0gdGhpcy5nZXROZXdOYW1lKGVsVHlwZSk7XG4gICAgaWYgKGVsZW1lbnQuaXNQYW5lbCB8fCBlbFR5cGUgPT0gXCJwYWdlXCIpIHtcbiAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgdGhpcy5uZXdQYW5lbHMucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIHZhciBwYW5lbCA9IDxTdXJ2ZXkuUGFuZWxNb2RlbEJhc2U+KDxhbnk+ZWxlbWVudCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuc2V0TmV3TmFtZXNDb3JlKHBhbmVsLmVsZW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXdRdWVzdGlvbnMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdOYW1lKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGUgPT0gXCJwYWdlXCIpIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3UGFnZU5hbWUodGhpcy5wYWdlcygpKTtcbiAgICByZXR1cm4gdHlwZSA9PSBcInBhbmVsXCIgPyB0aGlzLmdldE5ld1BhbmVsTmFtZSgpIDogdGhpcy5nZXROZXdRdWVzdGlvbk5hbWUoKTtcbiAgfVxuICBwcml2YXRlIGdldE5ld1F1ZXN0aW9uTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3UXVlc3Rpb25OYW1lKHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCkpO1xuICB9XG4gIHByaXZhdGUgZ2V0TmV3UGFuZWxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXROZXdQYW5lbE5hbWUodGhpcy5nZXRBbGxQYW5lbHMoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRBbGxRdWVzdGlvbnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcygpLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZEVsZW1lbnRzKHRoaXMucGFnZXMoKVtpXS5lbGVtZW50cywgZmFsc2UsIHJlc3VsdCk7XG4gICAgfVxuICAgIHRoaXMuYWRkRWxlbWVudHModGhpcy5uZXdQYW5lbHMsIGZhbHNlLCByZXN1bHQpO1xuICAgIHRoaXMuYWRkRWxlbWVudHModGhpcy5uZXdRdWVzdGlvbnMsIGZhbHNlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRBbGxQYW5lbHMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcygpLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFkZEVsZW1lbnRzKHRoaXMucGFnZXMoKVtpXS5lbGVtZW50cywgdHJ1ZSwgcmVzdWx0KTtcbiAgICB9XG4gICAgdGhpcy5hZGRFbGVtZW50cyh0aGlzLm5ld1BhbmVscywgdHJ1ZSwgcmVzdWx0KTtcbiAgICB0aGlzLmFkZEVsZW1lbnRzKHRoaXMubmV3UXVlc3Rpb25zLCB0cnVlLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBhZGRFbGVtZW50cyhcbiAgICBlbGVtZW50czogQXJyYXk8YW55PixcbiAgICBpc1BhbmVsOiBib29sZWFuLFxuICAgIHJlc3VsdDogQXJyYXk8YW55PlxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZWxlbWVudHNbaV0uaXNQYW5lbCA9PT0gaXNQYW5lbCkge1xuICAgICAgICByZXN1bHQucHVzaChlbGVtZW50c1tpXSk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZEVsZW1lbnRzKFN1cnZleUhlbHBlci5nZXRFbGVtZW50cyhlbGVtZW50c1tpXSksIGlzUGFuZWwsIHJlc3VsdCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZG9DbGlja1F1ZXN0aW9uQ29yZShcbiAgICBlbGVtZW50OiBTdXJ2ZXkuSUVsZW1lbnQsXG4gICAgbW9kaWZpZWRUeXBlOiBzdHJpbmcgPSBcIkFEREVEX0ZST01fVE9PTEJPWFwiXG4gICkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICB2YXIgaW5kZXggPSAtMTtcbiAgICB2YXIgZWxFbGVtZW50ID0gdGhpcy5zdXJ2ZXkuc2VsZWN0ZWRFbGVtZW50O1xuICAgIGlmIChlbEVsZW1lbnQgJiYgZWxFbGVtZW50LnBhcmVudCkge1xuICAgICAgcGFyZW50ID0gZWxFbGVtZW50LnBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50LmVsZW1lbnRzLmluZGV4T2YodGhpcy5zdXJ2ZXkuc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSBpbmRleCsrO1xuICAgIH1cbiAgICBwYXJlbnQuYWRkRWxlbWVudChlbGVtZW50LCBpbmRleCk7XG4gICAgaWYgKHRoaXMucmVuZGVyZWRFbGVtZW50ICYmIHRoaXMuc2Nyb2xsVG9OZXdFbGVtZW50KSB7XG4gICAgICB0aGlzLmRyYWdEcm9wSGVscGVyLnNjcm9sbFRvRWxlbWVudChcbiAgICAgICAgPEhUTUxFbGVtZW50PnRoaXMucmVuZGVyZWRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyBlbGVtZW50W1wiaWRcIl0pXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnNldE1vZGlmaWVkKHsgdHlwZTogbW9kaWZpZWRUeXBlLCBxdWVzdGlvbjogZWxlbWVudCB9KTtcbiAgfVxuICBwcml2YXRlIGRlbGV0ZVF1ZXN0aW9uKCkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRPYmpBc1F1ZXN0aW9uKCk7XG4gICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmRlbGV0ZUN1cnJlbnRPYmplY3QoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZWxlY3RRdWVzdGlvbihpc1VwOiBib29sZWFuKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE9iakFzUXVlc3Rpb24oKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zZWxlY3ROZXh0UXVlc3Rpb24oaXNVcCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRPYmpBc1F1ZXN0aW9uKCk6IFN1cnZleS5RdWVzdGlvbkJhc2Uge1xuICAgIHZhciBvYmogPSB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZTtcbiAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaikgPT0gT2JqVHlwZS5RdWVzdGlvblxuICAgICAgPyA8U3VydmV5LlF1ZXN0aW9uQmFzZT5vYmpcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZGVsZXRlQ3VycmVudE9iamVjdCgpIHtcbiAgICB0aGlzLmRlbGV0ZU9iamVjdCh0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBlZGl0Q3VycmVudE9iamVjdCgpIHtcbiAgICB0aGlzLnNob3dRdWVzdGlvbkVkaXRvcih0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjb252ZXJ0Q3VycmVudE9iamVjdChvYmo6IFN1cnZleS5RdWVzdGlvbkJhc2UsIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIG5ld1F1ZXN0aW9uID0gUXVlc3Rpb25Db252ZXJ0ZXIuY29udmVydE9iamVjdChvYmosIGNsYXNzTmFtZSk7XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7XG4gICAgICB0eXBlOiBcIlFVRVNUSU9OX0NPTlZFUlRFRFwiLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBvbGRWYWx1ZTogb2JqLFxuICAgICAgbmV3VmFsdWU6IG5ld1F1ZXN0aW9uXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNob3cgdGhlIEVkaXRvciBkaWFsb2cuIFRoZSBlbGVtZW50IGNhbiBiZSBhIHF1ZXN0aW9uLCBwYW5lbCwgcGFnZSBvciBzdXJ2ZXlcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIHN1cnZleSBlbGVtZW50XG4gICAqL1xuICBwdWJsaWMgc2hvd0VsZW1lbnRFZGl0b3IoXG4gICAgZWxlbWVudDogU3VydmV5LkJhc2UsXG4gICAgb25DbG9zZTogKGlzQ2FuY2VsZWQ6IGJvb2xlYW4pID0+IGFueVxuICApIHtcbiAgICB0aGlzLnNob3dRdWVzdGlvbkVkaXRvcihlbGVtZW50LCBvbkNsb3NlKTtcbiAgfVxuICBwdWJsaWMgc2hvd1F1ZXN0aW9uRWRpdG9yID0gKFxuICAgIGVsZW1lbnQ6IFN1cnZleS5CYXNlLFxuICAgIG9uQ2xvc2U6IChpc0NhbmNlbGVkOiBib29sZWFuKSA9PiBhbnkgPSBudWxsXG4gICkgPT4ge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZWxXaW5kb3cgPSB0aGlzLnJlbmRlcmVkRWxlbWVudFxuICAgICAgPyA8SFRNTEVsZW1lbnQ+dGhpcy5yZW5kZXJlZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBcIiNzdXJ2ZXlxdWVzdGlvbmVkaXRvcndpbmRvd1wiXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgaXNDYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5xdWVzdGlvbkVkaXRvcldpbmRvdy5zaG93KFxuICAgICAgZWxlbWVudCxcbiAgICAgIGVsV2luZG93LFxuICAgICAgZnVuY3Rpb24ocXVlc3Rpb24pIHtcbiAgICAgICAgc2VsZi5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICAgIGlzQ2FuY2VsZWQgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB0aGlzLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChvbkNsb3NlKSBvbkNsb3NlKGlzQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgICk7XG4gIH07XG4gIHB1YmxpYyBvblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSkge1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5uYW1lQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLm9iamVjdENoYW5nZWQoKTtcbiAgICB0aGlzLmRpcnR5UGFnZVVwZGF0ZSgpOyAvL1RPRE8gd2h5IHRoaXMgaXMgbmVlZCA/IChrbyBwcm9ibGVtKVxuICAgIHRoaXMuc2V0TW9kaWZpZWQoe1xuICAgICAgdHlwZTogXCJRVUVTVElPTl9DSEFOR0VEX0JZX0VESVRPUlwiLFxuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uXG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyKCk7XG4gIH1cblxuICAvL1RPRE8gd2h5IHRoaXMgaXMgbmVlZCA/IChrbyBwcm9ibGVtKVxuICBwcml2YXRlIGRpcnR5UGFnZVVwZGF0ZSA9ICgpID0+IHtcbiAgICB2YXIgc2VsZWN0ZWRPYmplY3QgPSB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZTtcbiAgICBpZiAoU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUoc2VsZWN0ZWRPYmplY3QpICE9PSBPYmpUeXBlLlBhZ2UpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2Yoc2VsZWN0ZWRPYmplY3QpO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCwgMCwgc2VsZWN0ZWRPYmplY3QpO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zZWxlY3RPYmplY3Qoc2VsZWN0ZWRPYmplY3QpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBxdWVzdGlvbiBpbnRvIFRvb2xib3ggb2JqZWN0XG4gICAqIEBwYXJhbSBxdWVzdGlvbiBhbiBhZGRlZCBTdXJ2ZXkuUXVlc3Rpb25cbiAgICogQHNlZSB0b29sYm94XG4gICAqL1xuICBwdWJsaWMgYWRkQ3VzdG9tVG9vbGJveFF1ZXN0aW9uKHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25CYXNlKSB7XG4gICAgdGhpcy50b29sYm94LmFkZENvcGllZEl0ZW0ocXVlc3Rpb24pO1xuICB9XG4gIC8qKlxuICAgKiBDb3B5IGEgcXVlc3Rpb24gdG8gdGhlIGFjdGl2ZSBwYWdlXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBBIGNvcGllZCBTdXJ2ZXkuUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBmYXN0Q29weVF1ZXN0aW9uKHF1ZXN0aW9uOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBuZXdFbGVtZW50ID0gdGhpcy5jb3B5RWxlbWVudChxdWVzdGlvbik7XG4gICAgdGhpcy5kb0NsaWNrUXVlc3Rpb25Db3JlKG5ld0VsZW1lbnQsIFwiRUxFTUVOVF9DT1BJRURcIik7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwYWdlIHdpdGggdGhlIHNhbWUgZWxlbWVudHMgYW5kIHBsYWNlIGl0IG5leHQgdG8gdGhlIGN1cnJlbnQgb25lLiBJdCByZXR1cm5zIHRoZSBuZXcgY3JlYXRlZCBTdXJ2ZXkuUGFnZVxuICAgKiBAcGFyYW0gcGFnZSBBIGNvcGllZCBTdXJ2ZXkuUGFnZVxuICAgKi9cbiAgcHVibGljIGNvcHlQYWdlID0gKHBhZ2U6IFN1cnZleS5QYWdlTW9kZWwpOiBTdXJ2ZXkuUGFnZU1vZGVsID0+IHtcbiAgICB2YXIgbmV3UGFnZSA9IDxTdXJ2ZXkuUGFnZT4oPGFueT50aGlzLmNvcHlFbGVtZW50KHBhZ2UpKTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YocGFnZSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4ICsgMSwgMCwgbmV3UGFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChuZXdQYWdlKTtcbiAgICB9XG4gICAgdGhpcy5hZGRQYWdlVG9VSShuZXdQYWdlKTtcbiAgICB0aGlzLnNldE1vZGlmaWVkKHsgdHlwZTogXCJQQUdFX0FEREVEXCIsIG5ld1ZhbHVlOiBuZXdQYWdlIH0pO1xuICAgIHJldHVybiBuZXdQYWdlO1xuICB9O1xuICAvKipcbiAgICogRGVsZXRlIGFuIGVsZW1lbnQgaW4gdGhlIHN1cnZleS4gSXQgY2FuIGJlIGEgcXVlc3Rpb24sIGEgcGFuZWwgb3IgYSBwYWdlLlxuICAgKiBAcGFyYW0gZWxlbWVudCBhIHN1cnZleSBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUVsZW1lbnQoZWxlbWVudDogU3VydmV5LkJhc2UpIHtcbiAgICB0aGlzLmRlbGV0ZU9iamVjdChlbGVtZW50KTtcbiAgfVxuICBwcml2YXRlIGRlbGV0ZU9iamVjdChvYmo6IGFueSkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgZWxlbWVudDogb2JqLFxuICAgICAgZWxlbWVudFR5cGU6IFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaiksXG4gICAgICBhbGxvd2luZzogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5vbkVsZW1lbnREZWxldGluZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5hbGxvd2luZykgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5yZW1vdmVPYmplY3Qob2JqKTtcbiAgICB2YXIgb2JqVHlwZSA9IFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaik7XG4gICAgaWYgKG9ialR5cGUgPT0gT2JqVHlwZS5QYWdlKSB7XG4gICAgICB0aGlzLnN1cnZleS5yZW1vdmVQYWdlKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLnJlbW92ZUVsZW1lbnQob2JqKTtcbiAgICAgIHRoaXMuc3VydmV5LnNlbGVjdGVkRWxlbWVudCA9IG51bGw7XG4gICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICB9XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7XG4gICAgICB0eXBlOiBcIk9CSkVDVF9ERUxFVEVEXCIsXG4gICAgICB0YXJnZXQ6IG9ialxuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5LnJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgc2hvd0xpdmVTdXJ2ZXkoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5TGl2ZS5vblN1cnZleUNyZWF0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uKHN1cnZleTogU3VydmV5LlN1cnZleSkge1xuICAgICAgc2VsZi5vblRlc3RTdXJ2ZXlDcmVhdGVkLmZpcmUoc2VsZiwgeyBzdXJ2ZXk6IHN1cnZleSB9KTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5TGl2ZS5zZXRKU09OKHRoaXMuZ2V0U3VydmV5SlNPTigpKTtcbiAgICB0aGlzLnN1cnZleUxpdmUuc2hvdygpO1xuICB9XG4gIHByaXZhdGUgc2hvd1N1cnZleUVtYmVkaW5nKCkge1xuICAgIHZhciBqc29uID0gdGhpcy5nZXRTdXJ2ZXlKU09OKCk7XG4gICAgdGhpcy5zdXJ2ZXlFbWJlZGluZy5qc29uID0ganNvbjtcbiAgICB0aGlzLnN1cnZleUVtYmVkaW5nLnN1cnZleUlkID0gdGhpcy5zdXJ2ZXlJZDtcbiAgICB0aGlzLnN1cnZleUVtYmVkaW5nLnN1cnZleVBvc3RJZCA9IHRoaXMuc3VydmV5UG9zdElkO1xuICAgIHRoaXMuc3VydmV5RW1iZWRpbmcuZ2VuZXJhdGVWYWxpZEpTT04gPVxuICAgICAgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5nZW5lcmF0ZVZhbGlkSlNPTjtcbiAgICB0aGlzLnN1cnZleUVtYmVkaW5nLnNob3coKTtcbiAgfVxuICBwcml2YXRlIGdldFN1cnZleUpTT04oKTogYW55IHtcbiAgICBpZiAodGhpcy5rb0lzU2hvd0Rlc2lnbmVyKCkpXG4gICAgICByZXR1cm4gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMuc3VydmV5KTtcbiAgICBpZiAodGhpcy5qc29uRWRpdG9yLmlzSnNvbkNvcnJlY3QpXG4gICAgICByZXR1cm4gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMuanNvbkVkaXRvci5zdXJ2ZXkpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlQW5ub3RhdGlvbnModGV4dDogc3RyaW5nLCBlcnJvcnM6IGFueVtdKTogQWNlQWpheC5Bbm5vdGF0aW9uW10ge1xuICAgIHZhciBhbm5vdGF0aW9ucyA9IG5ldyBBcnJheTxBY2VBamF4LkFubm90YXRpb24+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlcnJvciA9IGVycm9yc1tpXTtcbiAgICAgIHZhciBhbm5vdGF0aW9uOiBBY2VBamF4LkFubm90YXRpb24gPSB7XG4gICAgICAgIHJvdzogZXJyb3IucG9zaXRpb24uc3RhcnQucm93LFxuICAgICAgICBjb2x1bW46IGVycm9yLnBvc2l0aW9uLnN0YXJ0LmNvbHVtbixcbiAgICAgICAgdGV4dDogZXJyb3IudGV4dCxcbiAgICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgICB9O1xuICAgICAgYW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGFubm90YXRpb25zO1xuICB9XG4gIC8vaW1wbGVtZW50cyBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xuICBnZXQgYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yc1ZhbHVlO1xuICB9XG4gIHNldCBhbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yc1ZhbHVlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHNob3dBcHBseUJ1dHRvbkluRWRpdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QXBwbHlCdXR0b25WYWx1ZTtcbiAgfVxuICBzZXQgc2hvd0FwcGx5QnV0dG9uSW5FZGl0b3JzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93QXBwbHlCdXR0b25WYWx1ZSA9IHZhbHVlO1xuICB9XG4gIG9uSXRlbVZhbHVlQWRkZWRDYWxsYmFjayhwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXRlbVZhbHVlOiBTdXJ2ZXkuSXRlbVZhbHVlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLCBuZXdJdGVtOiBpdGVtVmFsdWUgfTtcbiAgICB0aGlzLm9uSXRlbVZhbHVlQWRkZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBvbk1hdHJpeERyb3Bkb3duQ29sdW1uQWRkZWRDYWxsYmFjayhjb2x1bW46IFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbikge1xuICAgIHZhciBvcHRpb25zID0geyBuZXdDb2x1bW46IGNvbHVtbiB9O1xuICAgIHRoaXMub25NYXRyaXhDb2x1bW5BZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG9uU2V0UHJvcGVydHlFZGl0b3JPcHRpb25zQ2FsbGJhY2soXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBlZGl0b3JPcHRpb25zOiBhbnlcbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIG9iajogb2JqLFxuICAgICAgZWRpdG9yT3B0aW9uczogZWRpdG9yT3B0aW9uc1xuICAgIH07XG4gICAgdGhpcy5vblNldFByb3BlcnR5RWRpdG9yT3B0aW9ucy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG9uR2V0RXJyb3JUZXh0T25WYWxpZGF0aW9uQ2FsbGJhY2soXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICB2YWx1ZTogYW55XG4gICk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIG9iajogb2JqLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZXJyb3I6IFwiXCJcbiAgICB9O1xuICAgIHRoaXMub25Qcm9wZXJ0eVZhbGlkYXRpb25DdXN0b21FcnJvci5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmVycm9yO1xuICB9XG4gIG9uVmFsdWVDaGFuZ2luZ0NhbGxiYWNrKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMub25Qcm9wZXJ0eVZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBvblByb3BlcnR5RWRpdG9yT2JqZWN0U2V0Q2FsbGJhY2soXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBlZGl0b3I6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZVxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsIG9iajogb2JqLCBlZGl0b3I6IGVkaXRvciB9O1xuICAgIHRoaXMub25Qcm9wZXJ0eUVkaXRvck9iamVjdEFzc2lnbi5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG9uUHJvcGVydHlFZGl0b3JNb2RhbFNob3dEZXNjcmlwdGlvbkNhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2VcbiAgKTogYW55IHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIG9iajogb2JqLFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBodG1sVG9wOiBcIlwiLFxuICAgICAgaHRtbEJvdHRvbTogXCJcIlxuICAgIH07XG4gICAgdGhpcy5vblNob3dQcm9wZXJ0eU1vZGFsRWRpdG9yRGVzY3JpcHRpb24uZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB2YXIgcmVzID0geyB0b3A6IG9wdGlvbnMuaHRtbFRvcCwgYm90dG9tOiBvcHRpb25zLmh0bWxCb3R0b20gfTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIG9uR2V0RWxlbWVudEVkaXRvclRpdGxlQ2FsbGJhY2sob2JqOiBTdXJ2ZXkuQmFzZSwgdGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRpdGxlO1xuICB9XG59XG5cbnZhciBrb1N1cnZleVRlbXBsYXRlID0gbmV3IFN1cnZleS5TdXJ2ZXlUZW1wbGF0ZVRleHQoKVtcInRleHRcIl07XG5rb1N1cnZleVRlbXBsYXRlID0ga29TdXJ2ZXlUZW1wbGF0ZS5yZXBsYWNlKFxuICBcIm5hbWU6ICdzdXJ2ZXktY29udGVudCcsIGFmdGVyUmVuZGVyOiBrb0V2ZW50QWZ0ZXJSZW5kZXJcIixcbiAgXCJuYW1lOiAnc3VydmV5LWNvbnRlbnQnLCBkYXRhOiBzdXJ2ZXlcIlxuKTtcbi8va29TdXJ2ZXlUZW1wbGF0ZSA9IFwiPGRpdiBkYXRhLWJpbmQ9J2RhdGE6IHN1cnZleSc+XCIgKyBrb1N1cnZleVRlbXBsYXRlICsgXCI8L2Rpdj5cIjtcblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInN1cnZleS13aWRnZXRcIiwge1xuICB2aWV3TW9kZWw6IGZ1bmN0aW9uKHBhcmFtcykge1xuICAgIHRoaXMuc3VydmV5ID0gcGFyYW1zLnN1cnZleTtcbiAgfSxcbiAgdGVtcGxhdGU6IGtvU3VydmV5VGVtcGxhdGVcbn0pO1xuXG5rby5jb21wb25lbnRzLnJlZ2lzdGVyKFwic3ZnLWljb25cIiwge1xuICB2aWV3TW9kZWw6IHtcbiAgICBjcmVhdGVWaWV3TW9kZWw6IChwYXJhbXMsIGNvbXBvbmVudEluZm8pID0+IHtcbiAgICAgIGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgdmFyIHNpemUgPSAoa28udW53cmFwKHBhcmFtcy5zaXplKSB8fCAxNikgKyBcInB4XCI7XG4gICAgICAgIHZhciBzdmdFbGVtOiBhbnkgPSBjb21wb25lbnRJbmZvLmVsZW1lbnQuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgc3ZnRWxlbS5zdHlsZS53aWR0aCA9IHNpemU7XG4gICAgICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgICAgdmFyIG5vZGU6IGFueSA9IHN2Z0VsZW0uY2hpbGROb2Rlc1swXTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICAgICAgICBcInhsaW5rOmhyZWZcIixcbiAgICAgICAgICBcIiNcIiArIGtvLnVud3JhcChwYXJhbXMuaWNvbk5hbWUpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHRlbXBsYXRlOiBcIjxzdmcgY2xhc3M9J3N2ZC1zdmctaWNvbic+PHVzZT48L3VzZT48L3N2Zz5cIlxufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZWRpdG9yLnRzIiwiaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcblxuZXhwb3J0IGNsYXNzIEV4dGVudGlvbnMge1xuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyQ3VzdG9tUHJvcGVydHlFZGl0b3IobmFtZTogc3RyaW5nLCB3aWRnZXRKU09OOiBhbnkpIHtcbiAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJDdXN0b21FZGl0b3IobmFtZSwgd2lkZ2V0SlNPTik7XG4gIH1cbiAgcHVibGljIHN0YXRpYyByZWdpc3RlclByb3BlcnR5RWRpdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVhdG9yOiAocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpID0+IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZVxuICApIHtcbiAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IobmFtZSwgY3JlYXRvcik7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9leHRlbnRpb25zLnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG52YXIgZnJlbmNoVHJhbnNsYXRpb24gPSB7XG4gIC8vU3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIsOJZGl0ZXJcIixcbiAgICBkcm9wUXVlc3Rpb246IFwiRMOpcG9zZXIgdm90cmUgcXVlc3Rpb24gaWNpLlwiLFxuICAgIGNvcHk6IFwiQ29waWVyXCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIkFqb3V0ZXIgw6AgbGEgYm/DrnRlIMOgIG91dGlsc1wiLFxuICAgIGRlbGV0ZVBhbmVsOiBcIlN1cHByaW1lciBsZSBwYW5uZWF1XCIsXG4gICAgZGVsZXRlUXVlc3Rpb246IFwiU3VwcHJpbWVyIGxhIHF1ZXN0aW9uXCIsXG4gICAgY29udmVydFRvOiBcIkNvbnZlcnRpciBlblwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGNoZWNrYm94OiBcIkNhc2VzIMOgIGNvY2hlclwiLFxuICAgIGNvbW1lbnQ6IFwiQ29tbWVudGFpcmVcIixcbiAgICBkcm9wZG93bjogXCJMaXN0ZSBkw6lyb3VsYW50ZVwiLFxuICAgIGZpbGU6IFwiRmljaGllclwiLFxuICAgIGh0bWw6IFwiSFRNTFwiLFxuICAgIG1hdHJpeDogXCJNYXRyaWNlIChjaG9peCB1bmlxdWUpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cmljZSAoY2hvaXggbXVsdGlwbGVzKVwiLFxuICAgIG1hdHJpeGR5bmFtaWM6IFwiTWF0cmljZSAobGlnbmVzIGR5bmFtaXF1ZXMpXCIsXG4gICAgbXVsdGlwbGV0ZXh0OiBcIkNoYW1wIG11bHRpbGlnbmVzXCIsXG4gICAgcGFuZWw6IFwiUGFubmVhdVwiLFxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5uZWF1IChwYW5uZWF1eCBkeW5hbWlxdWVzKVwiLFxuICAgIHJhZGlvZ3JvdXA6IFwiQm91dG9ucyByYWRpb1wiLFxuICAgIHJhdGluZzogXCLDiXZhbHVhdGlvblwiLFxuICAgIHRleHQ6IFwiQ2hhbXAgdGV4dGVcIixcbiAgICBib29sZWFuOiBcIkJvb2zDqWVuXCIsXG4gICAgZXhwcmVzc2lvbjogXCJFeHByZXNzaW9uXCJcbiAgfSxcbiAgLy9TdHJpbmdzIGluIEVkaXRvclxuICBlZDoge1xuICAgIHN1cnZleTogXCJRdWVzdGlvbm5haXJlXCIsXG4gICAgZWRpdFN1cnZleTogXCLDiWRpdGVyIGxlIHF1ZXN0aW9ubmFpcmVcIixcbiAgICBhZGROZXdQYWdlOiBcIkFqb3V0ZXIgdW5lIHBhZ2VcIixcbiAgICBkZWxldGVQYWdlOiBcIlN1cHByaW1lciB1bmUgcGFnZVwiLFxuICAgIGVkaXRQYWdlOiBcIsOJZGl0ZXIgdW5lIHBhZ2VcIixcbiAgICBuZXdQYWdlTmFtZTogXCJwYWdlXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcInF1ZXN0aW9uXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcInBhbm5lYXVcIixcbiAgICB0ZXN0U3VydmV5OiBcIlRlc3RlciBsZSBxdWVzdGlvbm5haXJlXCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIlRlc3RlciDDoCBub3V2ZWF1IGxlIHF1ZXN0aW9ubmFpcmVcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwiTGFyZ2V1ciBkdSBxdWVzdGlvbm5haXJlIDogXCIsXG4gICAgZW1iZWRTdXJ2ZXk6IFwiSW50w6lncmVyIGxlIHF1ZXN0aW9ubmFpcmVcIixcbiAgICBzYXZlU3VydmV5OiBcIlNhdXZlZ2FyZGVyIGxlIHF1ZXN0aW9ubmFpcmVcIixcbiAgICBkZXNpZ25lcjogXCLDiWRpdGV1ciBkZSBxdWVzdGlvbm5haXJlXCIsXG4gICAganNvbkVkaXRvcjogXCLDiWRpdGVyIEpTT05cIixcbiAgICB1bmRvOiBcIkFubnVsZXJcIixcbiAgICByZWRvOiBcIlLDqXRhYmxpclwiLFxuICAgIG9wdGlvbnM6IFwiT3B0aW9uc1wiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIkfDqW7DqXJlciB1biBKU09OIHZhbGlkZVwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkfDqW7DqXJlciB1biBKU09OIGxpc2libGVcIixcbiAgICB0b29sYm94OiBcIkJvw650ZSDDoCBvdXRpbHNcIixcbiAgICB0b29sYm94R2VuZXJhbENhdGVnb3J5OiBcIkfDqW7DqXJhbFwiLFxuICAgIGRlbFNlbE9iamVjdDogXCJTdXBwcmltZXIgbCdvYmpldCBzw6lsZWN0aW9ubsOpXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCLDiWRpdGVyIGwnb2JqZXQgc8OpbGVjdGlvbm7DqVwiLFxuICAgIGNvcnJlY3RKU09OOiBcIlNWUCBjb3JyaWdleiBsZSBKU09OXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJSw6lzdWx0YXQgZHUgcXVlc3Rpb25uYWlyZSA6IFwiLFxuICAgIG1vZGlmaWVkOiBcIk1vZGlmacOpXCIsXG4gICAgc2F2aW5nOiBcIlNhdXZlZ2FyZGUgZW4gY291cnNcIixcbiAgICBzYXZlZDogXCJTYXV2ZWdhcmTDqVwiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcIk9ibGlnYXRvaXJlID9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJBcHBsaXF1ZXJcIixcbiAgICBvazogXCJPS1wiLFxuICAgIGNhbmNlbDogXCJBbm51bGVyXCIsXG4gICAgcmVzZXQ6IFwiUsOpaW5pdGlhbGlzZXJcIixcbiAgICBjbG9zZTogXCJGZXJtZXJcIixcbiAgICBkZWxldGU6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkTmV3OiBcIkFqb3V0ZXIgdW4gbm91dmVhdVwiLFxuICAgIGFkZEl0ZW06IFwiQ2xpcXVlciBwb3VyIGFqb3V0ZXIgdW4gaXRlbS4uLlwiLFxuICAgIHJlbW92ZUFsbDogXCJUb3V0IHN1cHByaW1lclwiLFxuICAgIGVkaXQ6IFwiw4lkaXRlclwiLFxuICAgIG1vdmU6IFwiRMOpcGxhY2VyXCIsXG4gICAgZW1wdHk6IFwiPHZpZGU+XCIsXG4gICAgbm90RW1wdHk6IFwiPMOpZGl0ZXIgbGEgdmFsZXVyPlwiLFxuICAgIGZhc3RFbnRyeTogXCJBam91dCByYXBpZGVcIixcbiAgICBmb3JtRW50cnk6IFwiQWpvdXQgdmlhIGZvcm11bGFpcmVcIixcbiAgICB0ZXN0U2VydmljZTogXCJUZXN0ZXIgbGUgc2VydmljZVwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIlPDqWxlY3Rpb25uZXIgdW5lIHF1ZXN0aW9uLi4uXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uQWRkOiBcIkFqb3V0ZXJcIixcbiAgICBjb25kaXRpb25CdXR0b25SZXBsYWNlOiBcIlJlbXBsYWNlclwiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICAnVmV1aWxsZXogZW50cmVyIHVuZSBleHByZXNzaW9uIGJvb2zDqWVubmUuIEVsbGUgZG9pdCByZXRvdXJuZXIgVnJhaSh0cnVlKSBwb3VyIGdhcmRlciBsYSBxdWVzdGlvbi9wYWdlIHZpc2libGUuIFBhciBleGVtcGxlOiB7cXVlc3Rpb24xfSA9IFwidmFsZXVyMVwiIG9yICh7cXVlc3Rpb24yfSA9IDMgYW5kIHtxdWVzdGlvbjN9IDwgNSknLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCJWZXVpbGxleiBlbnRyZXIgdW5lIGV4cHJlc3Npb24uIFZvdXMgcG91dmV6IHV0aWxpc2VyIGRlcyBhY2NvbGFkZXMgcG91ciBhY2PDqWRlciBhdXggdmFsZXVycyBkZXMgcXVlc3Rpb25zICd7cXVlc3Rpb24xfSArIHtxdWVzdGlvbjJ9JywgJyh7cHJpeH0qe3F1YW50aXRlfSkgKiAoMTAwIC0ge3JlbWlzZX0pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6XG4gICAgICBcIkFwcHV5ZXIgc3VyIEN0cmwgKyBlc3BhY2UgcG91ciBvYnRlbmlyIHVuZSBhaWRlIHBvdXIgbGEgc2Fpc2llIGQnZXhwcmVzc2lvblwiLFxuICAgIGFjZUVkaXRvclJvd1RpdGxlOiBcIkxpZ25lIGNvdXJhbnRlXCIsXG4gICAgYWNlRWRpdG9yUGFuZWxUaXRsZTogXCJQYW5uZWF1IGNvdXJhbnRcIixcbiAgICBzaG93TW9yZTpcbiAgICAgIFwiUG91ciBwbHVzIGQnaW5mb3JtYXRpb25zLCB2ZXVpbGxleiB2b3VzIHLDqWbDqXJlciDDoCBsYSBkb2N1bWVudGF0aW9uXCIsXG4gICAgYXNzaXN0YW50VGl0bGU6IFwiUXVlc3Rpb25zIGRpc3BvbmlibGVzIDpcIixcbiAgICBjZWxsc0VtcHR5Um93c0NvbHVtbnM6IFwiSWwgZmF1dCBhdSBtaW5pbXVtIHVuZSBsaWduZSBvdSB1bmUgY29sb25uZVwiLFxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJWZXVpbGxleiBlbnRyZXIgdW5lIHZhbGV1ciBwb3VyIGxhIHByb3ByacOpdMOpXCIsXG4gICAgdmFsdWU6IFwiVmFsZXVyXCIsXG4gICAgdGV4dDogXCJUZXh0ZVwiLFxuICAgIGNvbHVtbkVkaXQ6IFwiw4lkaXRlciBsYSBjb2xvbm5lOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCLDiWRpdGVyIGwnaXRlbTogezB9XCIsXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwiQ2hlbWluXCIsXG4gICAgdmFsdWVOYW1lOiBcIk5vbSBkZSBsYSB2YWxldXJcIixcbiAgICB0aXRsZU5hbWU6IFwiTm9tIGR1IHRpdHJlXCIsXG4gICAgaGFzT3RoZXI6IFwiQ29udGllbnQgdW4gYXV0cmUgaXRlbVwiLFxuICAgIG90aGVyVGV4dDogXCJBdXRyZSBpdGVtIHRleHRlXCIsXG4gICAgbmFtZTogXCJOb21cIixcbiAgICB0aXRsZTogXCJUaXRyZVwiLFxuICAgIGNlbGxUeXBlOiBcIlR5cGUgZGUgY2VsbHVsZVwiLFxuICAgIGNvbENvdW50OiBcIk5vbWJyZSBkZSBjb2xvbm5lc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJTw6lsZWN0aW9ubmVyIGwnb3JkcmUgZGVzIGNob2l4XCIsXG4gICAgdmlzaWJsZTogXCJFc3QgdmlzaWJsZSA/XCIsXG4gICAgaXNSZXF1aXJlZDogXCJFc3Qgb2JsaWdhdG9pcmUgP1wiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiQ29tbWVuY2VyIGF2ZWMgdW5lIG5vdXZlbGxlIGxpZ25lID9cIixcbiAgICByb3dzOiBcIk5vbWJyZSBkZSBsaWduZXNcIixcbiAgICBwbGFjZUhvbGRlcjogXCJQbGFjZWhvbGRlciAoaW5kaWNlIGRhbnMgbGUgY2hhbXApXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiTCdhcGVyw6d1IGQnaW1hZ2UgZXN0LWlsIGFmZmljaMOpID9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6XG4gICAgICBcIlN0b2NrZXIgbGUgY29udGVudSBkdSBmaWNoaWVyIGRhbnMgbGUgcsOpc3VsdGF0IEpTT04gc291cyBmb3JtZSBkZSB0ZXh0ZVwiLFxuICAgIG1heFNpemU6IFwiVGFpbGxlIG1heGltdW0gZHUgZmljaGllciBlbiBvY3RldHNcIixcbiAgICBpbWFnZUhlaWdodDogXCJIYXV0ZXVyIGRlIGwnaW1hZ2VcIixcbiAgICBpbWFnZVdpZHRoOiBcIkxhcmdldXIgZGUgbCdpbWFnZVwiLFxuICAgIHJvd0NvdW50OiBcIk5vbWJyZSBkZSBsaWduZXNcIixcbiAgICBhZGRSb3dUZXh0OiAnVGV4dGUgYm91dG9uIFwiQWpvdXRlciB1bmUgbGlnbmVcIicsXG4gICAgcmVtb3ZlUm93VGV4dDogJ1RleHRlIGJvdXRvbiBcIlN1cHByaW1lciB1bmUgbGlnbmVcIicsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uIG5vdGUgbWluaW11bVwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiBub3RlIG1heGltdW1cIixcbiAgICBpbnB1dFR5cGU6IFwiVHlwZSBkZSBjaGFtcFwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlRleHRlIHBhciBkw6lmYXV0XCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlZhbGV1ciBwYXIgZMOpZmF1dFwiLFxuICAgIGNlbGxzRGVmYXVsdFJvdzogXCJUZXh0ZSBkZSBjZWxsdWxlIHBhciBkw6lmYXV0XCIsXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiw4lkaXRlciBsZXMgcHLDqWbDqXJlbmNlcyBkdSBxdWVzdGlvbm5haXJlXCIsXG4gICAgcUVkaXRvclRpdGxlOiBcIsOJZGl0ZXIgbGEgcXVlc3Rpb246IHswfVwiLFxuXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwiQWZmaWNoZXIvY2FjaGVyIGxlIHRpdHJlXCIsXG4gICAgbG9jYWxlOiBcIkxhbmd1ZSBwYXIgZMOpZmF1dFwiLFxuICAgIG1vZGU6IFwiTW9kZSAow6lkaXRpb24vbGVjdHVyZSBzZXVsZSlcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJFZmZhY2VyIGxlcyB2YWxldXJzIGludmlzaWJsZXNcIixcbiAgICBjb29raWVOYW1lOlxuICAgICAgXCJOb20gZHUgY29va2llIChwb3VyIGVtcMOqY2hlciBkZSBjb21wbMOpdGVyIDIgZm9pcyBsZSBxdWVzdGlvbm5haXJlIGxvY2FsZW1lbnQpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiRW52b3llciBsZXMgcsOpc3VsdGF0cyBhdSBjaGFuZ2VtZW50IGRlIHBhZ2VcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogJ1NhdXZlZ2FyZGVyIGxhIHZhbGV1ciBcIkF1dHJlc1wiIGRhbnMgdW4gY2hhbXAgc8OpcGFyw6knLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIkFmZmljaGVyIGxlcyB0aXRyZXMgZGUgcGFnZXNcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiQWZmaWNoZXIgbGVzIG51bcOpcm9zIGRlIHBhZ2VzXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIlRleHRlIGJvdXRvbiBwYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJUZXh0ZSBib3V0b24gcGFnZSBzdWl2YW50ZVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJUZXh0ZSBib3V0b24gdGVybWluZXJcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiVGV4dGUgYm91dG9uIGNvbW1lbmNlclwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczpcbiAgICAgIFwiQWZmaWNoZXIgbGVzIGJvdXRvbnMgZGUgbmF2aWdhdGlvbiAobmF2aWdhdGlvbiBwYXIgZMOpZmF1dClcIixcbiAgICBzaG93UHJldkJ1dHRvbjpcbiAgICAgIFwiQWZmaWNoZXIgbGUgYm91dG9uIHByw6ljw6lkZW50IChsJ3V0aWxpc2F0ZXVyIHBvdXJyYSByZXRvdXJuZXIgc3VyIGxhIHBhZ2UgcHLDqWPDqWRlbnRlKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDpcbiAgICAgIFwiTGEgcHJlbWnDqHJlIHBhZ2UgZHUgcXVlc3Rpb25uYWlyZSBlc3QgdW5lIHBhZ2UgZGUgZMOpbWFycmFnZS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogJ0FmZmljaGVyIGxhIHBhZ2UgXCJ0ZXJtaW7DqVwiIMOgIGxhIGZpbiAoY29tcGxldGVkSHRtbCknLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIkFsbGVyIMOgIGxhIHBhZ2Ugc3VpdmFudGUgYXV0b21hdGlxdWVtZW50IHBvdXIgdG91dGVzIGxlcyBxdWVzdGlvbnNcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiQWZmaWNoZXIgbGEgYmFycmUgZGUgcHJvZ3Jlc3Npb25cIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiRW1wbGFjZW1lbnQgZHUgdGl0cmUgZGUgbGEgcXVlc3Rpb25cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiTGEgcXVlc3Rpb24gcmVxdWllcnQgdW4vZGVzIHN5bWJvbGUocylcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiSW5kZXggZGUgZMOpcGFydCBkZSBsYSBxdWVzdGlvbiAoMSwgMiBvdSAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIkFmZmljaGVyIGxlcyBudW3DqXJvcyBkZSBxdWVzdGlvbnNcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIkdhYmFyaXQgZHUgdGl0cmUgZGUgcXVlc3Rpb24sIHBhciBkw6lmYXV0IDogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJFbXBsYWNlbWVudCBkZSBsJ2VycmV1clwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpcbiAgICAgIFwiRm9jdXMgc3VyIGxhIHByZW1pw6hyZSBxdWVzdGlvbiBhdSBjaGFuZ2VtZW50IGRlIHBhZ2VcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJPcmRyZSBkZXMgw6lsw6ltZW50cyBzdXIgbGEgcGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJUZW1wcyBtYXhpbXVtIHBvdXIgdGVybWluZXIgbGUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwiVGVtcHMgbWF4aW11bSBwb3VyIHRlcm1pbmVyIHVuZSBwYWdlXCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwiQWZmaWNoZXIgbGUgcGFubmVhdSBjaHJvbm9tw6h0cmVcIixcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwiTW9kZSBkJ2FmZmljaGFnZSBkdSBwYW5uZWF1IGNocm9ub23DqHRyZVwiLFxuICAgIHJlbmRlck1vZGU6IFwiTW9kZSBkZSByZW5kdVwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiQXV0b3Jpc2VyIGwnYWpvdXQgZHUgcGFubmVhdVwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiQXV0b3Jpc2VyIGxhIHN1cHByZXNzaW9uIGR1IHBhbm5lYXVcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWpvdXRlciB1biBwYW5uZWF1IHRleHRlXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIlN1cHByaW1lciBsZSBwYW5uZWF1IHRleHRlXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIkFmZmljaGVyIHRvdXMgbGVzIMOpbMOpbWVudHMgc3VyIHVuZSBzZXVsZSBwYWdlXCIsXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJHw6luw6lyYWxcIixcbiAgICAgIGZpbGVPcHRpb25zOiBcIk9wdGlvbnNcIixcbiAgICAgIGh0bWw6IFwiw4lkaXRldXIgSFRNTFwiLFxuICAgICAgY29sdW1uczogXCJDb2xvbm5lc1wiLFxuICAgICAgcm93czogXCJMaWduZXNcIixcbiAgICAgIGNob2ljZXM6IFwiQ2hvaXhcIixcbiAgICAgIHZpc2libGVJZjogXCJWaXNpYmxlIHNpXCIsXG4gICAgICBlbmFibGVJZjogXCJBY3RpZiBzaVwiLFxuICAgICAgcmF0ZVZhbHVlczogXCJCYXLDqG1lXCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiQ2hvaXggZGVwdWlzIEFQSSB3ZWJcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiQ2hvaXggcGFyIGTDqWZhdXRcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIkNoYW1wcyB0ZXh0ZSBtdWx0aXBsZXNcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwiVmFsaWRhdGV1cnNcIixcbiAgICAgIG5hdmlnYXRpb246IFwiTmF2aWdhdGlvblwiLFxuICAgICAgcXVlc3Rpb246IFwiUXVlc3Rpb25cIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwiSFRNTCBkZSBmaW5cIixcbiAgICAgIGxvYWRpbmdIdG1sOiBcIkhUTUwgZGUgY2hhcmdlbWVudFwiLFxuICAgICAgdGltZXI6IFwiQ2hyb25vbcOodHJlL1F1aXpcIixcbiAgICAgIHRyaWdnZXJzOiBcIkTDqWNsZW5jaGV1cnNcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiVGl0cmUgZGUgZ2FiYXJpdFwiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6ICfDiWRpdGVyIGxhIHByb3ByacOpdMOpIFwiezB9XCInLFxuICAgIGl0ZW1zOiBcIlsgw4lsw6ltZW50czogezB9IF1cIixcbiAgICBlbnRlck5ld1ZhbHVlOiBcIlZldWlsbGV6IHNhaXNpciBsYSB2YWxldXIuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiSWwgbid5IGEgYXVjdW5lIHF1ZXN0aW9uIGRhbnMgbGUgcXVlc3Rpb25uYWlyZS5cIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIlZldWlsbGV6IGNyw6llciB1biBkw6ljbGVuY2hldXJcIixcbiAgICB0cmlnZ2VyT246IFwiUXVhbmQgXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwiUmVuZHJlIGxlcyBwYWdlcyB2aXNpYmxlcyA6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIlJlbmRyZSBsZXMgcXVlc3Rpb25zIHZpc2libGVzIDpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIlRlcm1pbmVyIGxlIHF1ZXN0aW9ubmFpcmUgZW4gY2FzIGRlIHN1Y2PDqHMuXCIsXG4gICAgdHJpZ2dlck5vdFNldDogXCJMZSBkw6ljbGVuY2hldXIgbidlc3QgcGFzIGTDqWZpbmlcIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiRXjDqWN1dGVyIHNpXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDaGFuZ2VyIGxhIHZhbGV1ciBkZTogXCIsXG4gICAgdHJpZ2dlclNldFZhbHVlOiBcIsOgOiBcIixcbiAgICB0cmlnZ2VySXNWYXJpYWJsZTpcbiAgICAgIFwiTmUgcGxhY2V6IHBhcyBsYSB2YXJpYWJsZSBkYW5zIGxlIHLDqXN1bHRhdCBkdSBxdWVzdGlvbm5haXJlLlwiXG4gIH0sXG4gIC8vUHJvcGVydHkgdmFsdWVzXG4gIHB2OiB7XG4gICAgdHJ1ZTogXCJ2cmFpXCIsXG4gICAgZmFsc2U6IFwiZmF1eFwiLFxuICAgIGluaGVyaXQ6IFwiaMOpcml0w6lcIixcbiAgICBzaG93OiBcImFmZmljaGVyXCIsXG4gICAgaGlkZTogXCJtYXNxdWVyXCIsXG4gICAgZGVmYXVsdDogXCJwYXIgZMOpZmF1dFwiLFxuICAgIGluaXRpYWw6IFwiaW5pdGlhbFwiLFxuICAgIHJhbmRvbTogXCJhbMOpYXRvaXJlXCIsXG4gICAgY29sbGFwc2VkOiBcInJlcGxpw6lcIixcbiAgICBleHBhbmRlZDogXCJkw6lwbG95w6lcIixcbiAgICBub25lOiBcImF1Y3VuXCIsXG4gICAgYXNjOiBcImFzY2VuZGFudFwiLFxuICAgIGRlc2M6IFwiZGVzY2VuZGFudFwiLFxuICAgIGluZGV0ZXJtaW5hdGU6IFwiaW5kZXRlcm1pbsOpXCIsXG4gICAgZGVjaW1hbDogXCJkw6ljaW1hbFwiLFxuICAgIGN1cnJlbmN5OiBcIm1vbm5haWVcIixcbiAgICBwZXJjZW50OiBcInBvdXJjZW50YWdlXCIsXG4gICAgZmlyc3RFeHBhbmRlZDogXCJkw6lwbG95w6kgZW4gcHJlbWllclwiLFxuICAgIG9mZjogXCJkw6lzYWN0aXbDqVwiLFxuICAgIG9uUGFuZWw6IFwicGFubmVhdVwiLFxuICAgIG9uU3VydmV5OiBcInF1ZXN0aW9ubmFpcmVcIixcbiAgICBsaXN0OiBcImxpc3RlXCIsXG4gICAgcHJvZ3Jlc3NUb3A6IFwiUHJvZ3Jlc3Npb24gZW4gaGF1dFwiLFxuICAgIHByb2dyZXNzQm90dG9tOiBcIlByb2dyZXNzaW9uIGVuIGJhc1wiLFxuICAgIHByb2dyZXNzVG9wQm90dG9tOiBcIlByb2dyZXNzaW9uIGVuIGhhdXQgZXQgZW4gYmFzXCIsXG4gICAgdG9wOiBcImhhdXRcIixcbiAgICBib3R0b206IFwiYmFzXCIsXG4gICAgbGVmdDogXCJnYXVjaGVcIixcbiAgICBjb2xvcjogXCJjb3VsZXVyXCIsXG4gICAgZGF0ZTogXCJkYXRlXCIsXG4gICAgZGF0ZXRpbWU6IFwiaGV1cmVcIixcbiAgICBcImRhdGV0aW1lLWxvY2FsXCI6IFwiaGV1cmUgbG9jYWxlXCIsXG4gICAgZW1haWw6IFwiZW1haWxcIixcbiAgICBtb250aDogXCJtb2lzXCIsXG4gICAgbnVtYmVyOiBcIm5vbWJyZVwiLFxuICAgIHBhc3N3b3JkOiBcIm1vdCBkZSBwYXNzZVwiLFxuICAgIHJhbmdlOiBcImphdWdlXCIsXG4gICAgdGVsOiBcInTDqWwuXCIsXG4gICAgdGV4dDogXCJ0ZXh0ZVwiLFxuICAgIHRpbWU6IFwiaGV1cmVcIixcbiAgICB1cmw6IFwiVVJMXCIsXG4gICAgd2VlazogXCJzZW1haW5lXCIsXG4gICAgaGlkZGVuOiBcIm1hc3F1w6lcIixcbiAgICBvbjogXCJhY3RpdsOpXCIsXG4gICAgb25QYWdlOiBcInBhZ2VcIixcbiAgICBlZGl0OiBcIsOpZGl0ZXJcIixcbiAgICBkaXNwbGF5OiBcImFmZmljaGFnZVwiLFxuICAgIG9uQ29tcGxldGU6IFwib25Db21wbGV0ZVwiLFxuICAgIG9uSGlkZGVuOiBcIm9uSGlkZGVuXCIsXG4gICAgYWxsOiBcInRvdXNcIixcbiAgICBwYWdlOiBcInBhZ2VcIixcbiAgICBzdXJ2ZXk6IFwicXVlc3Rpb25uYWlyZVwiXG4gIH0sXG4gIC8vT3BlcmF0b3JzXG4gIG9wOiB7XG4gICAgZW1wdHk6IFwiZXN0IHZpZGVcIixcbiAgICBub3RlbXB0eTogXCJuJ2VzdCBwYXMgdmlkZVwiLFxuICAgIGVxdWFsOiBcIsOpZ2FsXCIsXG4gICAgbm90ZXF1YWw6IFwibidlc3QgcGFzIMOpZ2FsXCIsXG4gICAgY29udGFpbnM6IFwiY29udGllbnRcIixcbiAgICBub3Rjb250YWluczogXCJuZSBjb250aWVudCBwYXNcIixcbiAgICBncmVhdGVyOiBcInN1cMOpcmlldXJcIixcbiAgICBsZXNzOiBcImluZsOpcmlldXJcIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCJzdXDDqXJpZXVyIG91IMOpZ2FsXCIsXG4gICAgbGVzc29yZXF1YWw6IFwiaW5mw6lyaWV1ciBvdSDDqWdhbFwiXG4gIH0sXG4gIC8vRW1iZWQgd2luZG93XG4gIGV3OiB7XG4gICAgYW5ndWxhcjogXCJVdGlsaXNlciBsYSB2ZXJzaW9uIEFuZ3VsYXJcIixcbiAgICBqcXVlcnk6IFwiVXRpbGlzZXIgbGEgdmVyc2lvbiBqUXVlcnlcIixcbiAgICBrbm9ja291dDogXCJVdGlsaXNlciBsYSB2ZXJzaW9uIEtub2Nrb3V0XCIsXG4gICAgcmVhY3Q6IFwiVXRpbGlzZXIgbGEgdmVyc2lvbiBSZWFjdFwiLFxuICAgIHZ1ZTogXCJVdGlsaXNlciBsYSB2ZXJzaW9uIFZ1ZVwiLFxuICAgIGJvb3RzdHJhcDogXCJQb3VyIGxlIGZyYW1ld29yayBCb290c3RyYXBcIixcbiAgICBzdGFuZGFyZDogXCJTYW5zIEJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiQWZmaWNoZXIgbGUgcXVlc3Rpb25uYWlyZSBkYW5zIHVuZSBwYWdlXCIsXG4gICAgc2hvd0luV2luZG93OiBcIkFmZmljaGVyIGxlIHF1ZXN0aW9ubmFpcmUgZGFucyB1bmUgZmVuw6p0cmVcIixcbiAgICBsb2FkRnJvbVNlcnZlcjogXCJDaGFyZ2VyIGxlIEpTT04gZHUgcXVlc3Rpb25uYWlyZSBkZXB1aXMgdW4gc2VydmV1clwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgZXQgc3R5bGVzXCIsXG4gICAgdGl0bGVIdG1sOiBcIkhUTUxcIixcbiAgICB0aXRsZUphdmFTY3JpcHQ6IFwiSmF2YVNjcmlwdFwiXG4gIH0sXG4gIC8vVGVzdCBTdXJ2ZXlcbiAgdHM6IHtcbiAgICBzZWxlY3RQYWdlOiBcIlPDqWxlY3Rpb25uZXIgdW5lIHBhZ2UgcG91ciBsYSB0ZXN0ZXJcIlxuICB9LFxuICAvL1ZhbGlkYXRvcnNcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcInRvdGFsIGRlIHLDqXBvbnNlc1wiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcImUtbWFpbFwiLFxuICAgIG51bWVyaWN2YWxpZGF0b3I6IFwibnVtw6lyaXF1ZVwiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXh0ZVwiXG4gIH0sXG4gIC8vVHJpZ2dlcnNcbiAgdHJpZ2dlcnM6IHtcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwidGVybWluZXIgbGUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCJkw6lmaW5pciBsYSB2YWxldXJcIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCJtb2RpZmllciBsYSB2aXNpYmlsaXTDqVwiXG4gIH0sXG4gIC8vUHJvcGVydGllc1xuICBwOiB7XG4gICAgbmFtZTogXCJOb21cIixcbiAgICB0aXRsZToge1xuICAgICAgbmFtZTogXCJUaXRyZVwiLFxuICAgICAgdGl0bGU6ICdMYWlzc2V6IHZpZGUsIHNpIG3Dqm1lIHRleHRlIHF1ZSBsZSBcIk5vbVwiJ1xuICAgIH0sXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5OiBcIlZpc2liaWxpdMOpIGRlcyBib3V0b25zIGRlIG5hdmlnYXRpb25cIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJPcmRyZSBkZXMgcXVlc3Rpb25zXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIlRlbXBzIG1heGltdW0gcG91ciB0ZXJtaW5lclwiLFxuICAgIHZpc2libGU6IFwiVmlzaWJsZVwiLFxuICAgIHZpc2libGVJZjogXCJWaXNpYmxlIHNpIFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJFbXBsYWNlbWVudCB0aXRyZSBxdWVzdGlvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uXCIsXG4gICAgc3RhdGU6IFwiw4l0YXRcIixcbiAgICBpc1JlcXVpcmVkOiBcIk9ibGlnYXRvaXJlID9cIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCJNZXNzYWdlIGQnZXJyZXVyIHRleHQgb2JsaWdhdG9pcmVcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkNvbW1lbmNlciBhdmVjIHVuZSBub3V2ZWxsZSBsaWduZVwiLFxuICAgIGlubmVySW5kZW50OiBcIkluZGVudGF0aW9uXCIsXG4gICAgcGFnZTogXCJwYWdlXCIsXG4gICAgd2lkdGg6IFwibGFyZ2V1clwiLFxuICAgIGNvbW1lbnRUZXh0OiBcIkRlc2NyaXB0aW9uIGNoYW1wIGNvbW1lbnRhaXJlXCIsXG4gICAgdmFsdWVOYW1lOiBcIk5vbSBkZSBsYSB2YWxldXJcIixcbiAgICBlbmFibGVJZjogXCJBY3RpdmVyIHNpXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlZhbGV1ciBwYXIgZMOpZmF1dFwiLFxuICAgIGNvcnJlY3RBbnN3ZXI6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICByZWFkT25seTogXCJMZWN0dXJlIHNldWxlXCIsXG4gICAgdmFsaWRhdG9yczogXCJWYWxpZGF0ZXVyc1wiLFxuICAgIHRpdGxlTG9jYXRpb246IFwiRW1wbGFjZW1lbnQgZHUgdGl0cmVcIixcbiAgICBoYXNDb21tZW50OiBcIkNoYW1wIGNvbW1lbnRhaXJlID9cIixcbiAgICBoYXNPdGhlcjogXCJDaG9peCBhdXRyZSA/XCIsXG4gICAgY2hvaWNlczogXCJDaG9peFwiLFxuICAgIGNob2ljZXNPcmRlcjogXCJPcmRyZSBkZXMgY2hvaXhcIixcbiAgICBjaG9pY2VzQnlVcmw6IFwiQ2hvaXggcGFyIEFQSVwiLFxuICAgIG90aGVyVGV4dDogXCJBdXRyZSB0ZXh0ZVwiLFxuICAgIG90aGVyRXJyb3JUZXh0OiAnVGV4dGUgZFxcJ2VycmV1ciBjaGFtcCBcIkF1dHJlXCInLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIlNhdXZlZ2FyZGVyIGNob2l4IGF1dHJlIGNvbW1lIGNvbW1lbnRhaXJlXCIsXG4gICAgbGFiZWw6IFwiSW50aXR1bMOpXCIsXG4gICAgc2hvd1RpdGxlOiBcIkFmZmljaGVyIGxlIHRpdHJlXCIsXG4gICAgdmFsdWVUcnVlOiBcIlZhbGV1ciB2cmFpXCIsXG4gICAgdmFsdWVGYWxzZTogXCJWYWxldXIgZmF1eFwiLFxuICAgIGNvbHM6IFwiQ29sb25uZXNcIixcbiAgICByb3dzOiBcIk5vbWJyZSBkZSBsaWduZXNcIixcbiAgICBwbGFjZUhvbGRlcjogXCJQbGFjZUhvbGRlciAoaW5kaWNlIGRhbnMgbGUgY2hhbXApXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVGV4dGUgcGFyIGTDqWZhdXRcIixcbiAgICBleHByZXNzaW9uOiBcIkV4cHJlc3Npb25cIixcbiAgICBmb3JtYXQ6IFwiRm9ybWF0XCIsXG4gICAgZGlzcGxheVN0eWxlOiBcIlN0eWxlIGQnYWZmaWNoYWdlXCIsXG4gICAgY3VycmVuY3k6IFwiTW9ubmFpZVwiLFxuICAgIHVzZUdyb3VwaW5nOiBcIlV0aWxpc2VyIGxlcyBncm91cGVzXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiVm9pciBsYSBwcsOpdmlzdWFsaXNhdGlvblwiLFxuICAgIGFsbG93TXVsdGlwbGU6IFwiQXV0b3Jpc2VyIG11bHRpcGxlc1wiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkhhdXRldXIgZGUgbCdpbWFnZVwiLFxuICAgIGltYWdlV2lkdGg6IFwiTGFyZ2V1ciBkZSBsJ2ltYWdlXCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIlN0b2NrZXIgbGVzIGRvbm7DqWVzIGNvbW1lIGR1IHRleHRlXCIsXG4gICAgbWF4U2l6ZTogXCJUYWlsbGUgbWF4aW11bVwiLFxuICAgIGh0bWw6IFwiSFRNTFwiLFxuICAgIGNvbHVtbnM6IFwiQ29sb25uZXNcIixcbiAgICBjZWxsczogXCJDZWxsdWxlc1wiLFxuICAgIGhvcml6b250YWxTY3JvbGw6IFwiU2Nyb2xsIGhvcml6b250YWxcIixcbiAgICBjZWxsVHlwZTogXCJUeXBlIGRlIGNlbGx1bGVcIixcbiAgICBjb2x1bW5Db2xDb3VudDogXCJOb21icmUgZGUgY29sb25uZXNcIixcbiAgICBjb2x1bW5NaW5XaWR0aDogXCJMYXJnZXVyIG1pbmltYWxlIGRlcyBjb2xvbm5lc1wiLFxuICAgIHJvd0NvdW50OiBcIk5vbWJyZSBkZSBsaWduZXNcIixcbiAgICBtaW5Sb3dDb3VudDogXCJOb21icmUgZGUgbGlnbmVzIG1pbmltdW1cIixcbiAgICBtYXhSb3dDb3VudDogXCJOb21icmUgZGUgbGlnbmVzIG1heGltdW1cIixcbiAgICBrZXlOYW1lOiBcIk5vbSBkZSBsYSBjbMOpXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJFcnJldXIgZGUgY2zDqXMgbXVsdGlwbGVzXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCJDb25maXJtYXRpb24gZGUgc3VwcHJlc3Npb25cIixcbiAgICBjb25maXJtRGVsZXRlVGV4dDogXCJUZXh0ZSBkZSBjb25maXJtYXRpb24gZGUgc3VwcHJlc3Npb25cIixcbiAgICBhZGRSb3dUZXh0OiBcIkJvdXRvbiBham91dGVyIHVuZSBsaWduZVwiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiQm91dG9uIHN1cHByaW1lciB1bmUgbGlnbmVcIixcbiAgICBpdGVtczogXCJJdGVtc1wiLFxuICAgIGl0ZW1TaXplOiBcIk5vbWJyZSBtYXhpbXVtIGRlIGNhcmFjdMOocmVzXCIsXG4gICAgY29sQ291bnQ6IFwiTm9tYnJlIGRlIGNvbG9ubmVzXCIsXG4gICAgdGVtcGxhdGVUaXRsZTogXCJUaXRyZSBkZSBnYWJhcml0XCIsXG4gICAgdGVtcGxhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiBkdSBnYWJhcml0XCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCJBdXRvcmlzZXIgbCdham91dCBkZSBwYW5uZWF1XCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJBdXRvcmlzZXIgbGEgc3VwcHJlc3Npb24gZGUgcGFubmVhdVwiLFxuICAgIHBhbmVsQ291bnQ6IFwiTm9tYnJlIGRlIHBhbm5lYXV4XCIsXG4gICAgbWluUGFuZWxDb3VudDogXCJOb21icmUgbWluaW11bSBkZSBwYW5uZWF1eFwiLFxuICAgIG1heFBhbmVsQ291bnQ6IFwiTm9tYnJlIG1heGltdW0gZGUgcGFubmVhdXhcIixcbiAgICBwYW5lbHNTdGF0ZTogXCLDiXRhdCBkZXMgcGFubmVhdXhcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiVGV4dGUgZCdham91dCBkZXMgcGFubmVhdXhcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiVGV4dGUgZGUgc3VwcHJlc3Npb24gZGVzIHBhbm5lYXV4XCIsXG4gICAgcGFuZWxQcmV2VGV4dDogXCJUZXh0ZSBwYW5uZWF1IHByw6ljw6lkZW50XCIsXG4gICAgcGFuZWxOZXh0VGV4dDogXCJUZXh0ZSBwYW5uZWF1IHN1aXZhbnRcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIk51bcOpcm90YXRpb24gZGVzIHF1ZXN0aW9uc1wiLFxuICAgIHNob3dSYW5nZUluUHJvZ3Jlc3M6IFwiQWZmaWNoZXIgbGEgcHJvZ3Jlc3Npb25cIixcbiAgICByZW5kZXJNb2RlOiBcIk1vZGUgZGUgcmVuZHVcIixcbiAgICB0ZW1wbGF0ZVRpdGxlTG9jYXRpb246IFwiRW1wbGFjZW1lbnQgZHUgdGl0cmUgZGUgZ2FiYXJpdFwiLFxuICAgIHJhdGVWYWx1ZXM6IFwiQmFyw6htZVwiLFxuICAgIHJhdGVNaW46IFwiVmFsZXVyIG1pbmltdW1cIixcbiAgICByYXRlTWF4OiBcIlZhbGV1ciBtYXhpbXVtXCIsXG4gICAgcmF0ZVN0ZXA6IFwiUGFzXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uIG5vdGUgbWluaW11bVwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiBub3RlIG1heGltdW1cIixcbiAgICBpbnB1dFR5cGU6IFwiVHlwZSBkZSBjaGFtcFwiLFxuICAgIHNpemU6IFwiTm9tYnJlIG1heGltdW0gZGUgY2FyYWN0w6hyZXNcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiRm9jdXMgYXV0b21hdGlxdWUgc3VyIGxhIHByZW1pw6hyZSBxdWVzdGlvblwiLFxuICAgIGNvbXBsZXRlZEh0bWw6IFwiSFRNTCBxdWVzdGlvbm5haXJlIGZpbmFsaXPDqVwiLFxuICAgIGNvbXBsZXRlZEJlZm9yZUh0bWw6IFwiSFRNTCBhdmFudCBjb21wbMOpdGlvbiBkdSBxdWVzdGlvbm5haXJlXCIsXG4gICAgbG9hZGluZ0h0bWw6IFwiSFRNTCBkZSBjaGFyZ2VtZW50XCIsXG4gICAgdHJpZ2dlcnM6IFwiRMOpY2xlbmNoZXVyc1wiLFxuICAgIGNvb2tpZU5hbWU6IFwiTm9tIGR1IGNvb2tpZVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcIkVudm95ZXIgbGVzIHLDqXN1bHRhdHMgYXUgY2hhbmdlbWVudCBkZSBwYWdlXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcIkJvdXRvbnMgZGUgbmF2aWdhdGlvblwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIkFmZmljaGVyIGxlIGJvdXRvbiBwcsOpY8OpZGVudFwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIlRpdHJlIGRlcyBwYWdlc1wiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIlZvaXIgbGEgcGFnZSBmb3JtdWxhaXJlIGNvbXBsw6l0w6kgP1wiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJOdW3DqXJvdGF0aW9uIGRlcyBwYWdlc1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJFbXBsYWNlbWVudCBkZXMgZXJyZXVyc1wiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCJCYXJyZSBkZSBwcm9ncmVzc2lvblwiLFxuICAgIG1vZGU6IFwiTW9kZSBkJ2FmZmljaGFnZVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwiQWxsZXIgw6AgbGEgcGFnZSBzdWl2YW50ZSBhdXRvbWF0aXF1ZW1lbnRcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJDYWNoZXIgbGVzIHZhbGV1cnMgaW52aXNpYmxlc1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJUZXh0ZSBkZSBkw6ltYXJyYWdlIGR1IHF1ZXN0aW9ubmFpcmVcIixcbiAgICBwYWdlUHJldlRleHQ6IFwiQm91dG9uIHBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIkJvdXRvbiBwYWdlIHN1aXZhbnRlXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlRleHRlIHF1ZXN0aW9ubmFpcmUgZmluYWxpc8OpXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIlRleHRlIHBvdXIgbGVzIGNoYW1wcyBvYmxpZ2F0b2lyZXNcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiSW5kZXggZGUgbnVtw6lyb3RhdGlvbiBkZXMgcXVlc3Rpb25zXCIsXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOiBcIlRlbXBsYXRlIGQnYWZmaWNoYWdlIGRlcyBxdWVzdGlvbnNcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiQ29tbWVuY2Ugw6AgbGEgcHJlbWnDqHJlIHBhZ2VcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwiQWZmaWNow6kgc3VyIHVuZSBwYWdlXCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCJUZW1wcyBtYXhpbXVtIHBvdXIgZmluaXIgbGEgcGFnZVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIkFmZmljaGVyIGxlIHBhbm5lYXUgY2hyb25vbcOodHJlXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIk1vZGUgZCdhZmZpY2hhZ2UgZHUgcGFubmVhdSBjaHJvbm9tw6h0cmVcIixcbiAgICBpbmRlbnQ6IFwiSW5kZW50YXRpb25cIixcbiAgICBpc0FsbFJvd1JlcXVpcmVkOiBcIlRvdXRlcyBsZXMgbGlnbmVzIHNvbnQtZWxsZSBvYmxpZ2F0b2lyZXMgP1wiLFxuICAgIGxvY2FsZTogXCJMYW5ndWVcIlxuICB9XG59O1xuXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZyXCJdID0gZnJlbmNoVHJhbnNsYXRpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2ZyZW5jaC50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIGdlcm1hblRyYW5zbGF0aW9uID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCJCZWFyYmVpdGVuXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIkZyYWdlIGJpdHRlIGhpZXIgcGxhdHppZXJlbi5cIixcbiAgICBjb3B5OiBcIktvcGllcmVuXCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIlp1ciBXZXJremV1Z2xlaXN0ZSBoaW56dWbDvGdlblwiLFxuICAgIGRlbGV0ZVBhbmVsOiBcIlBhbmVsIGzDtnNjaGVuXCIsXG4gICAgZGVsZXRlUXVlc3Rpb246IFwiRnJhZ2UgbMO2c2NoZW5cIlxuICB9LFxuICAvL3F1ZXN0aW9uVHlwZXNcbiAgcXQ6IHtcbiAgICBjaGVja2JveDogXCJDaGVja2JveFwiLFxuICAgIGNvbW1lbnQ6IFwiS29tbWVudGFyXCIsXG4gICAgZHJvcGRvd246IFwiQXVma2xhcHBtZW7DvFwiLFxuICAgIGZpbGU6IFwiRGF0ZWlcIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBtYXRyaXg6IFwiTWF0cml4IChlaW5mYWNoZSBBdXN3YWhsKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIk1hdHJpeCAobWVocmZhY2hlIEF1c3dhaGwpXCIsXG4gICAgbWF0cml4ZHluYW1pYzogXCJNYXRyaXggKGR5bmFtaXNjaGUgWmVpbGVuKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJNZWhyemVpbGlnZXIgVGV4dFwiLFxuICAgIHBhbmVsOiBcIlBhbmVsXCIsXG4gICAgcGFuZWxkeW5hbWljOiBcIlBhbmVsIChkeW5hbWlzY2hlIFBhbmVscylcIixcbiAgICByYWRpb2dyb3VwOiBcIlJhZGlvZ3J1cHBlXCIsXG4gICAgcmF0aW5nOiBcIkJld2VydHVuZ1wiLFxuICAgIHRleHQ6IFwiRWluZmFjaGVcdEVpbmdhYmVcIixcbiAgICBib29sZWFuOiBcIkJvb2xlYW5cIlxuICB9LFxuICAvL1N0cmluZ3MgaW4gRWRpdG9yXG4gIGVkOiB7XG4gICAgc3VydmV5OiBcIlVtZnJhZ2VcIixcbiAgICBhZGROZXdQYWdlOiBcIk5ldWUgU2VpdGUgaGluenVmw7xnZW5cIixcbiAgICBuZXdQYWdlTmFtZTogXCJTZWl0ZVwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCJGcmFnZVwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCJQYW5lbFwiLFxuICAgIHRlc3RTdXJ2ZXk6IFwiVGVzdHVtZnJhZ2VcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwiVGVzdHVtZnJhZ2Ugd2llZGVyaG9sZW5cIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwiVW1mcmFnZWJyZWl0ZTogXCIsXG4gICAgZW1iZWRTdXJ2ZXk6IFwiVW1mcmFnZSBlaW5mw7xnZW5cIixcbiAgICBzYXZlU3VydmV5OiBcIiBVbWZyYWdlIHNwZWljaGVyblwiLFxuICAgIGRlc2lnbmVyOiBcIlVtZnJhZ2UgRGVzaWduZXJcIixcbiAgICBqc29uRWRpdG9yOiBcIkpTT04gRWRpdG9yXCIsXG4gICAgdW5kbzogXCJSw7xja2fDpG5naWdcIixcbiAgICByZWRvOiBcIldpZWRlcmhlcnN0ZWxsZW5cIixcbiAgICBvcHRpb25zOiBcIk9wdGlvbmVuXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiR2VuZXJpZXJlIGfDvGx0aWdlcyBKU09OXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiR2VuZXJpZXJlIGxlc2JhcmVzIEpTT05cIixcbiAgICB0b29sYm94OiBcIldlcmt6ZXVnbGVpc3RlXCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcIkzDtnNjaGUgbWFya2llcnRlcyBPYmpla3RcIixcbiAgICBjb3JyZWN0SlNPTjogXCJCaXR0ZSBKU09OIGtvcnJpZ2llcmVuLlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwiVW1mcmFnZWVyZ2VibmlzOiBcIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJFcmZvcmRlcmxpY2g/XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwiQW53ZW5kZW5cIixcbiAgICBvazogXCJPS1wiLFxuICAgIGNhbmNlbDogXCJBYmJyZWNoZW5cIixcbiAgICByZXNldDogXCJadXLDvGNrc2V0emVuXCIsXG4gICAgY2xvc2U6IFwiU2NobGllc3NlblwiLFxuICAgIGRlbGV0ZTogXCJMw7ZzY2hlblwiLFxuICAgIGFkZE5ldzogXCJOZXUgaGluenVmw7xnZW5cIixcbiAgICByZW1vdmVBbGw6IFwiQWxsZXMgbMO2c2NoZW5cIixcbiAgICBlZGl0OiBcIkJlYXJiZWl0ZW5cIixcbiAgICBlbXB0eTogXCI8bGVlcj5cIixcbiAgICBmYXN0RW50cnk6IFwiU2NobmVsbC1FaW50cmFnXCIsXG4gICAgZm9ybUVudHJ5OiBcIkZvcm11bGFyLUVpbnRyYWdcIixcbiAgICB0ZXN0U2VydmljZTogXCJTZXJ2aWNlIHRlc3RlblwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCJCaXR0ZSBnZWJlbiBTaWUgZWluZSBib29sZXNjaGVuIEF1c2RydWNrIGVpbi4gRXMgbXVzcyAndHJ1ZScgcmV0b3VybmllcmVuIHVtIGRpZSBGcmFnZS9TZWl0ZSBhbnp1emVpZ2VuLiB6dW0gQmVpc3BpZWw6IHtxdWVzdGlvbjF9ID0gJ3ZhbHVlMScgb3IgKHtxdWVzdGlvbjJ9ID0gMyBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBXZXJ0IGVpblwiLFxuICAgIHZhbHVlOiBcIldlcnRcIixcbiAgICB0ZXh0OiBcIlRleHRcIixcbiAgICBjb2x1bW5FZGl0OiBcIlNwYWx0ZSBiZWFyYmVpdGVuOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCJFbGVtZW50IGJlYXJiZWl0ZW46IHswfVwiLFxuXG4gICAgaGFzT3RoZXI6IFwiSGF0IGVpbiBhbmRlcmVzIEVsZW1lbnRcIixcbiAgICBuYW1lOiBcIk5hbWVcIixcbiAgICB0aXRsZTogXCJUaXRlbFwiLFxuICAgIGNlbGxUeXBlOiBcIlplbGxlbnR5cFwiLFxuICAgIGNvbENvdW50OiBcIlNwYWx0ZW5hbnphaGxcIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiV8OkaGxlIEF1c3dhaGxyZWloZW5mb2xnZVwiLFxuICAgIHZpc2libGU6IFwiSXN0IGVzIHNpY2h0YmFyP1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwiSXN0IGVzIGVyZm9yZGVybGljaD9cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkluIG5ldWVyIFplaWxlIGJlZ2lubmVuP1wiLFxuICAgIHJvd3M6IFwiWmVpbGVuYW56YWhsXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwiUGxhdHpoYWx0ZXIgZWluZ2ViZW5cIixcbiAgICBzaG93UHJldmlldzogXCJXaXJkIGVpbmUgQmlsZHZvcnNjaGF1IGFuZ2V6ZWlndD9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiU3BlaWNoZXIgRGF0ZWluaW5oYWx0IGRlcyBKU09OLVJlc3VsdGF0cyBhbHMgVGV4dFwiLFxuICAgIG1heFNpemU6IFwiTWF4aW1hbGUgRGF0ZWlncsO2c3NlIGluIEJ5dGVzXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiQmlsZGjDtmhlXCIsXG4gICAgaW1hZ2VXaWR0aDogXCJCaWxkYnJlaXRlXCIsXG4gICAgcm93Q291bnQ6IFwiWmVpbGVuYW56YWhsXCIsXG4gICAgYWRkUm93VGV4dDogXCJaZWlsZW5rbm9wZnRleHQgaGluenVmw7xnZW5cIixcbiAgICByZW1vdmVSb3dUZXh0OiBcIlplaWxlbmtub3BmdGV4dCBsw7ZzY2hlblwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJCZXdlcnR1bmdzYmVzY2hyZWlidW5nIG1pbmltaWVyZW5cIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiQmV3ZXJ0dW5nc2Jlc2NocmVpYnVuZyBtYXhpbWllcmVuXCIsXG4gICAgaW5wdXRUeXBlOiBcIkVpbmdhYmV0eXBcIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJBdXN3YWhsYmVzY2hyaWZ0dW5nXCIsXG5cbiAgICBxRWRpdG9yVGl0bGU6IFwiRnJhZ2UgYmVhcmJlaXRlbjogezB9XCIsXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJBbGxnZW1laW5cIixcbiAgICAgIGZpbGVPcHRpb25zOiBcIk9wdGlvbmVuXCIsXG4gICAgICBodG1sOiBcIkh0bWwgRWRpdG9yXCIsXG4gICAgICBjb2x1bW5zOiBcIlNwYWx0ZW5cIixcbiAgICAgIHJvd3M6IFwiWmVpbGVuXCIsXG4gICAgICBjaG9pY2VzOiBcIkF1c3dhaGxtw7ZnbGljaGtlaXRlblwiLFxuICAgICAgdmlzaWJsZUlmOiBcIlNpY2h0YmFyIHdlbm5cIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwiQmV3ZXJ0dW5nc3dlcnRlXCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiQXVzd2FobG3DtmdsaWNoa2VpdGVuIHZvbSBJbnRlcm5ldFwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJTdGFuZGFyZGF1c3dhaGxcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIlRleHRlaW5nYWJlXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcIsOcYmVycHLDvGZ1bmdcIlxuICAgIH0sXG4gICAgZWRpdFByb3BlcnR5OiBcIkVpZ2Vuc2NoYWZ0IGJlYXJiZWl0ZW4gJ3swfSdcIixcbiAgICBpdGVtczogXCJbIEdlZ2Vuc3RhbmQ6IHswfSBdXCIsXG5cbiAgICBlbnRlck5ld1ZhbHVlOiBcIkJpdHRlIGVpbmVuIFdlcnQgZWluZ2ViZW4uXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiRGllIFVtZnJhZ2UgZW50aMOkbHQga2VpbmUgRnJhZ2UuXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJCaXR0ZSBlaW5lbiBUcmlnZ2VyIGVpbmdlYmVuLlwiLFxuICAgIHRyaWdnZXJPbjogXCJFaW4gXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwiU2VpdGVuIHNpY2h0YmFyIG1hY2hlbjpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwiRWxlbWVudGUgc2ljaHRiYXIgbWFjaGVuOlwiLFxuICAgIHRyaWdnZXJDb21wbGV0ZVRleHQ6IFwiQmVpIEVyZm9sZyBkaWUgVW1mcmFnZSBhYnNjaGxpZXNzZW4uXCIsXG4gICAgdHJpZ2dlck5vdFNldDogXCJLZWluIFRyaWdnZXIgZWluZ2VyaWNodGV0XCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIkF1c2bDvGhyZW4gd2VublwiLFxuICAgIHRyaWdnZXJTZXRUb05hbWU6IFwiw4RuZGVyZSBXZXJ0IHZvbjogXCIsXG4gICAgdHJpZ2dlclNldFZhbHVlOiBcImF1ZjogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiVmFyaWFibGUgbmljaHQgaW0gVW1mcmFnZWVyZ2VibmlzIGVpbmJpbmRlbi5cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwidHJ1ZVwiLFxuICAgIGZhbHNlOiBcImZhbHNlXCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJpc3QgbGVlclwiLFxuICAgIG5vdGVtcHR5OiBcImlzdCBuaWNodCBsZWVyXCIsXG4gICAgZXF1YWw6IFwiaXN0IGdsZWljaFwiLFxuICAgIG5vdGVxdWFsOiBcImlzdCB1bmdsZWljaFwiLFxuICAgIGNvbnRhaW5zOiBcImVudGjDpGx0XCIsXG4gICAgbm90Y29udGFpbnM6IFwiZW50aMOkbHQgbmljaHRcIixcbiAgICBncmVhdGVyOiBcImdyw7Zzc2VyIGFsc1wiLFxuICAgIGxlc3M6IFwia2xlaW5lciBhbHNcIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCJncsO2c3NlciBvZGVyIGtsZWluZXIgYWxzXCIsXG4gICAgbGVzc29yZXF1YWw6IFwia2xlaW5lciBvZGVyIGlzdCBnbGVpY2hcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiQW5ndWxhci1WZXJzaW9uIGJlbnV0emVuXCIsXG4gICAganF1ZXJ5OiBcImpRdWVyeS1WZXJzaW9uIGJlbnV0emVuXCIsXG4gICAga25vY2tvdXQ6IFwiS25vY2tvdXQtVmVyc2lvbiBiZW51dHplblwiLFxuICAgIHJlYWN0OiBcIlJlYWN0LVZlcnNpb24gYmVudXR6ZW5cIixcbiAgICB2dWU6IFwiVnVlLVZlcnNpb24gYmVudXR6ZW5cIixcbiAgICBib290c3RyYXA6IFwiQWxzIEJvb3RzdHJhcCBGcmFtZXdvcmtcIixcbiAgICBzdGFuZGFyZDogXCJLZWluIEJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiWmVpZ2UgVW1mcmFnZSBhdWYgU2VpdGVcIixcbiAgICBzaG93SW5XaW5kb3c6IFwiWmVpZ2UgVW1mcmFnZSBhbHMgRmVuc3RlclwiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcIkxhZGUgVW1mcmFnZSBhbHMgSlNPTiB2b20gU2VydmVyXCIsXG4gICAgdGl0bGVTY3JpcHQ6IFwiU2tyaXB0ZSB1bmQgU3R5bGVzXCIsXG4gICAgdGl0bGVIdG1sOiBcIkhUTUxcIixcbiAgICB0aXRsZUphdmFTY3JpcHQ6IFwiSmF2YVNjcmlwdFwiXG4gIH0sXG4gIHZhbGlkYXRvcnM6IHtcbiAgICBhbnN3ZXJjb3VudHZhbGlkYXRvcjogXCJBbnphaGwgQW50d29ydGVuXCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiRS1NYWlsXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmlzY2hcIixcbiAgICByZWdleHZhbGlkYXRvcjogXCJyZWdleFwiLFxuICAgIHRleHR2YWxpZGF0b3I6IFwidGV4dFwiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcIlVtZnJhZ2UgYWJzY2hsaWVzc2VuXCIsXG4gICAgc2V0dmFsdWV0cmlnZ2VyOiBcIldlcnQgc2V0emVuXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiU2ljaHRiYXJrZWl0IMOkbmRlcm5cIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwiTmFtZVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcIlRpdGVsXCIsXG4gICAgICB0aXRsZTogXCJCaXR0ZSBsZWVyIGxhc3NlbiwgZmFsbHMgZ2xlaWNoIHdpZSAnTmFtZSdcIlxuICAgIH0sXG4gICAgc3VydmV5X3RpdGxlOiB7IG5hbWU6IFwiVGl0ZWxcIiwgdGl0bGU6IFwiV2lyZCBhdWYgamVkZXIgU2VpdGUgYW5nZXplaWd0LlwiIH0sXG4gICAgcGFnZV90aXRsZTogeyBuYW1lOiBcInRpdGxlXCIsIHRpdGxlOiBcIlNlaXRlbnRpdGVsXCIgfVxuICB9XG59O1xuXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRlXCJdID0gZ2VybWFuVHJhbnNsYXRpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2dlcm1hbi50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIGl0YWxpYW5UcmFuc2xhdGlvbiA9IHtcbiAgLy8gc3RyaW5ncyBmb3Igc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIk1vZGlmaWNhXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIkFnZ2l1bmdpIHVuYSBkb21hbmRhIHF1aVwiLFxuICAgIGNvcHk6IFwiQ29waWFcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiQWdnaXVuZ2kgYWxsYSB0b29sYm94XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiRWxpbWluYSBwYW5uZWxsb1wiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIkVsaW1pbmEgZG9tYW5kYVwiLFxuICAgIGNvbnZlcnRUbzogXCJDb252ZXJ0aSBhXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3IgcXVlc3Rpb24gdHlwZXNcbiAgcXQ6IHtcbiAgICBjaGVja2JveDogXCJDYXNlbGxhIGRpIGNvbnRyb2xsbyBcIixcbiAgICBjb21tZW50OiBcIkNvbW1lbnRvXCIsXG4gICAgZHJvcGRvd246IFwiQ29tYm9cIixcbiAgICBmaWxlOiBcIkFyY2hpdmlvXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgbWF0cml4OiBcIk1hdHJpY2UgKHVuaWNhIG9wemlvbmUpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cmljZSAob3B6aW9uaSBtdWx0aXBsZSlcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpY2UgKGRpbmFtaWNhKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJUZXN0byBtdWx0aXBsb1wiLFxuICAgIHBhbmVsOiBcIlBhbm5lbGxvXCIsXG4gICAgcGFuZWxkeW5hbWljOiBcIlBhbm5lbGxvIChkaW5hbWljbylcIixcbiAgICByYWRpb2dyb3VwOiBcIk9wemlvbmUgbXVsdGlwbGFcIixcbiAgICByYXRpbmc6IFwiVmFsdXRhemlvbmVcIixcbiAgICB0ZXh0OiBcIlRlc3RvIHNlbXBsaWNlXCIsXG4gICAgZXhwcmVzc2lvbjogXCJFc3ByZXNzaW9uZVwiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIGVkaXRvclxuICBlZDoge1xuICAgIHN1cnZleTogXCJRdWVzdGlvbmFyaW9cIixcbiAgICBlZGl0U3VydmV5OiBcIk1vZGlmaWNhIFF1ZXN0aW9uYXJpb1wiLFxuICAgIGFkZE5ld1BhZ2U6IFwiQWdnaXVuZ2kgTnVvdmEgUGFnaW5hXCIsXG4gICAgZGVsZXRlUGFnZTogXCJFbGltaW5hIFBhZ2luYVwiLFxuICAgIGVkaXRQYWdlOiBcIk1vZGlmaWNhIFBhZ2luYVwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcInBhZ2luYVwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCJkb21hbmRhXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcInBhbm5lbGxvXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0YSBxdWVzdGlvbmFyaW9cIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwiVGVzdGEgcXVlc3Rpb25hcmlvIGRpIG51b3ZvXCIsXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIkxhcmdoZXp6YSBxdWVzdGlvbmFyaW86XCIsXG4gICAgZW1iZWRTdXJ2ZXk6IFwiSW5jbHVkaSBxdWVzdGlvbmFyaW9cIixcbiAgICBzYXZlU3VydmV5OiBcIlNhbHZhIHF1ZXN0aW9uYXJpb1wiLFxuICAgIGRlc2lnbmVyOiBcIkRpc2VnbmFcIixcbiAgICBqc29uRWRpdG9yOiBcIk1vZGlmaWNhIEpTT05cIixcbiAgICB1bmRvOiBcIkFubnVsbGFcIixcbiAgICByZWRvOiBcIlJpcGV0aVwiLFxuICAgIG9wdGlvbnM6IFwiT3B6aW9uaVwiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIkdlbmVyYSBKU09OIHZhbGlkb1wiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkdlbmVyYSBKU09OIGxlZ2dpYmlsZVwiLFxuICAgIHRvb2xib3g6IFwiU3RydW1lbnRpXCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcIkVsaW1pbmEgb2dnZXR0byBzZWxlemlvbmF0b1wiLFxuICAgIGVkaXRTZWxPYmplY3Q6IFwiTW9kaWZpY2Egb2dnZXR0byBzZWxlemlvbmF0b1wiLFxuICAgIGNvcnJlY3RKU09OOiBcIlBlciBmYXZvcmUsIGNvcnJlZ2dpIGlsIHR1byBKU09OXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJSaXN1bHRhdGkgZGVsIHF1ZXN0aW9uYXJpbzogXCIsXG4gICAgbW9kaWZpZWQ6IFwiTW9kaWZpY2F0b1wiLFxuICAgIHNhdmluZzogXCJTYWx2YXRhZ2dpb1wiLFxuICAgIHNhdmVkOiBcIlNhbHZhdG9cIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJSaWNoaWVzdG9cIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBwcm9wZXJ0eSBlZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwiQXBwbGljYVwiLFxuICAgIG9rOiBcIkFjY2V0dGFcIixcbiAgICBjYW5jZWw6IFwiQW5udWxsYVwiLFxuICAgIHJlc2V0OiBcIlJlaW1wb3N0YVwiLFxuICAgIGNsb3NlOiBcIkNoaXVkaVwiLFxuICAgIGRlbGV0ZTogXCJFbGltaW5hXCIsXG4gICAgYWRkTmV3OiBcIk51b3ZvXCIsXG4gICAgcmVtb3ZlQWxsOiBcIkVsaW1pbmEgdHV0dG9cIixcbiAgICBlZGl0OiBcIk1vZGlmaWNhXCIsXG4gICAgZW1wdHk6IFwiPHZ1b3RvPlwiLFxuICAgIG5vdEVtcHR5OiBcIjxtb2RpZmljYSB2YWxvcmU+XCIsXG4gICAgZmFzdEVudHJ5OiBcIkluc2VyaW1lbnRvIHJhcGlkb1wiLFxuICAgIGZvcm1FbnRyeTogXCJJbnNlcmltZW50byBjb24gZGF0aSBcIixcbiAgICB0ZXN0U2VydmljZTogXCJUZXN0IGRlbCBzZXJ2aXppb1wiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIlNlbGV6aW9uYSBkb21hbmRhLi4uXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uQWRkOiBcIkFnZ2l1bmdpXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCJTb3N0aXR1aXNjaVwiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICBcIlBlciBmYXZvcmUsIGluc2VyaXJlIHVuYSBlc3ByZXNzaW9uZSBib29sZWFuYS4gRG92cmViYmUgcmVzdGl0dWlyZSB0cnVlIHBlciBtYW50ZW5lcmUgbGEgZG9tYW5kYS9wYWdpbmEgdmlzaWJpbGUuIEFkIGVzZW1waW86IHtkb21hbmRhMX0gPSAndmFsb3JlMScgb3IgKHtkb21hbmRhMn0gKiB7ZG9tYW5kYTR9ICA+IDIwIGFuZCB7ZG9tYW5kYTN9IDwgNSlcIixcbiAgICBleHByZXNzaW9uSGVscDpcbiAgICAgIFwiUGVyIGZhdm9yZSBpbnNlcmlyZSB1bmEgZXNwcmVzc2lvbmUuIFB1b2kgdXNhcmUgcGFyZW50ZXNpIGdyYWZmZSBwZXIgb3R0ZW5lcmUgbCdhY2Nlc3NvIGFpIHZhbG9yaSBkZWxsZSBkb21hbmRlOiAne2RvbWFuZGExfSArIHtkb21hbmRhMn0nLCAnKHtwcmV6em99KntxdGF9KSAqICgxMDAgLSB7c2NvbnRvfSknXCIsXG4gICAgYWNlRWRpdG9ySGVscDpcbiAgICAgIFwiUHJlbWkgY3RybCtzcGFjZSBwZXIgb3R0ZW5lcmUgdW4gc3VnZ2VyaW1lbnRvIHN1bCBjb21wbGV0YW1lbnRvIGRlbGwnZXNwcmVzc2lvbmVcIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJSaWdhIGNvcnJlbnRlXCIsXG4gICAgYWNlRWRpdG9yUGFuZWxUaXRsZTogXCJQYW5uZWxsbyBDb3JyZW50ZVwiLFxuICAgIHNob3dNb3JlOiBcIlBlciBmYXZvcmUsIHBlciBtYWdnaW9yaSBkZXR0YWdsaSBndWFyZGFyZSBsYSBkb2N1bWVudGF6aW9uZVwiLFxuICAgIGFzc2lzdGFudFRpdGxlOiBcIkRvbWFuZGUgZGlzcG9uaWJpbGk6XCIsXG4gICAgY2VsbHNFbXB0eVJvd3NDb2x1bW5zOiBcIkRvdnJlYmJlIGVzc2VyY2kgYWxtZW5vIHVuYSBjb2xvbm5hIG8gcmlnYVwiLFxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJQZXIgZmF2b3JlLCBpbnNlcmlyZSB1biB2YWxvcmUgcGVyIGxhIHByb3BpZXTDoFwiLFxuICAgIHZhbHVlOiBcIlZhbG9yZVwiLFxuICAgIHRleHQ6IFwiVGVzdG9cIixcbiAgICBjb2x1bW5FZGl0OiBcIk1vZGlmaWNhIGNvbG9ubmE6IHswfVwiLFxuICAgIGl0ZW1FZGl0OiBcIk1vZGlmaWNhIGVsZW1lbnRvOiB7MH1cIixcbiAgICB1cmw6IFwiVVJMXCIsXG4gICAgcGF0aDogXCJQZXJjb3Jzb1wiLFxuICAgIHZhbHVlTmFtZTogXCJOb21lIFZhbG9yZVwiLFxuICAgIHRpdGxlTmFtZTogXCJOb21lIFRpdG9sb1wiLFxuICAgIGhhc090aGVyOiBcIkFsdHJpIGVsZW1lbnRpXCIsXG4gICAgb3RoZXJUZXh0OiBcIlRlc3RvIGFsdHJpIGVsZW1lbnRpXCIsXG4gICAgbmFtZTogXCJOb21lXCIsXG4gICAgdGl0bGU6IFwiVGl0b2xvXCIsXG4gICAgY2VsbFR5cGU6IFwiVGlwbyBkaSBjZWxsYVwiLFxuICAgIGNvbENvdW50OiBcIk51bWVybyBkaSBjb2xvbm5lXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIlNlbGV6aW9uYSBhbHRyZSBvcHppb25pXCIsXG4gICAgdmlzaWJsZTogXCJWaXNpYmlsZVwiLFxuICAgIGlzUmVxdWlyZWQ6IFwiUmljaGllc3RvXCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJOdW92YSBsaW5lYVwiLFxuICAgIHJvd3M6IFwiTnVtZXJvIGRpIHJpZ2hlXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwiVGVzdG8gZGkgcmlmZXJpbWVudG9cIixcbiAgICBzaG93UHJldmlldzogXCJNb3N0cmEgYW50ZXByaW1hXCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIlZlZGkgaWwgY29udGVudXRvIEpTT04gY29tZSB0ZXN0b1wiLFxuICAgIG1heFNpemU6IFwiRGltZW5zaW9uZSBtYXNzaW1hIGluIGJ5dGVzXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiQWx0ZXp6YSBpbW1hZ2luZVwiLFxuICAgIGltYWdlV2lkdGg6IFwiTGFyZ2hlenphIGltbWFnaW5lXCIsXG4gICAgcm93Q291bnQ6IFwiTnVtZXJvIGRlbGxlIHJpZ2hlXCIsXG4gICAgYWRkUm93VGV4dDogXCJUZXN0byBkZWwgcHVsc2FudGUgcGVyIGFnZ2l1bmdlcmUgdW5hIG51b3ZhIHJpZ2hhXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJUZXN0byBkZWwgcHVsc2FudGUgcGVyIGVsaW1pbmFyZSB1bmEgcmlnaGFcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiRGVzY3JpemlvbmUgZGVsIHZhbG9yZSBtaW5pbW9cIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiRGVzY3JpemlvbmUgZGVsIHZhbG9yZSBtYXNzaW1vXCIsXG4gICAgaW5wdXRUeXBlOiBcIlRpcG8gZGkgaW5zZXJpbWVudG9cIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJUaXRvbG8gZGVsbCdvcHppb25lXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlZhbG9yZSBkZWZhdWx0XCIsXG4gICAgY2VsbHNEZWZhdWx0Um93OiBcIlZhbG9yZSBkZWZhdWx0IGNlbGxlXCIsXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiRWRpdCBzdXJ2ZXkgc2V0dGluZ3NcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwiTW9kaWZpY2EgZG9tYW5kYTogezB9XCIsXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwiTW9zdHJhL25hc2NvbmRpIHRpdG9sb1wiLFxuICAgIGxvY2FsZTogXCJMaW5ndWEgRGVmYXVsdFwiLFxuICAgIG1vZGU6IFwiTW9kYWxpdMOgIChtb2RpZmljYS9zb2xhIGxldHR1cmEpXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiUHVsaXNjaGkgdmFsb3JpIG5vbiB2aXNpYmlsaVwiLFxuICAgIGNvb2tpZU5hbWU6XG4gICAgICBcIk5vbWUgY29va2llIChwZXIgZGlzYWJpbGl0YXJlIGVzZWd1aSBpbCBxdWVzdGlvbmFyaW8gZHVlIHZvbHRlIGluIGxvY2FsZSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDpcbiAgICAgIFwiSW52aWEgaSByaXN1bHRhdGkgZGVsIHNvbmRhZ2dpbyBhbGxhIHBhZ2luYSBzdWNjZXNzaXZhXCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwiTWVtb3JpenphIGlsIHZhbG9yZSAnYWx0cmknIGluIGNhbXBpIHNlcGFyYXRpXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiVmlzdWFsaXp6YSB0aXRvbGkgcGFnaW5hXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIlZpc3VhbGl6emEgbnVtZXJpIHBhZ2luYVwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCJUZXN0byBib3R0b25lIHBhZ2luYSBwcmVjZWRlbnRlXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlRlc3RvIGJvdHRvbmUgcGFnaW5hIHN1Y2Nlc3NpdmFcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiVGVzdG8gYm90dG9uZSBDb21wbGV0YXRvXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlRlc3RvIGJvdHRvbmUgSW5pemlhXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOlxuICAgICAgXCJWaXN1YWxpenphIGJvdHRvbmkgZGkgbmF2aWdhemlvbmUgKG5hdmlnYXppb25lIGRpIGRlZmF1bHQpXCIsXG4gICAgc2hvd1ByZXZCdXR0b246XG4gICAgICBcIlZpc3VhbGl6emEgYm90dG9uZSBwcmVjZWRlbnRlKGwndXRlbnRlIHB1w7IgdG9ybmFyZSBhbGxhIHBhZ2luYSBwcmVjZWRlbnRlKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDpcbiAgICAgIFwiTGEgcHJpbWEgcGFnaW5hIG5lbCBxdWVzdGlvbmFyaW8gw6ggbGEgcGFnaW5hIGluaXppYWxlLlwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOlxuICAgICAgXCJWaXN1YWxpenphIGxhIHBhZ2luYSBjb21wbGV0YXRhIGFsbGEgZmluZSBkZWwgcXVlc3Rpb25hcmlvIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIlJpc3BvbmRlbmRvIGEgdHV0dGUgbGUgZG9tYW5kZSwgdmFpIGFsbGEgcGFnaW5hIHN1Y2Nlc3NpdmEgaW4gYXV0b21hdGljby5cIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiVmlzdWFsaXp6YSBiYXJyYSBkaSBhdmFuemFtZW50b1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJQb3NpemlvbmUgdGl0b2xvIGRvbWFuZGFcIixcbiAgICByZXF1aXJlZFRleHQ6IFwiU2ltYm9sbyBkb21hbmRhIG9iYmxpZ2F0b3JpYSwgZXNlbXBpbyAoKilcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiTGEgZG9tYW5kYSBpbml6aWEgY29uIGwnaW5kaWNlICgxLCAyIG9wcHVyZSAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIlZpc3VhbGl6emEgaSBudW1lcmkgZGkgZG9tYW5kYVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwiVGVtcGxhdGUgdGl0b2xvIGRlbGxhIGRvbWFuZGEsIGlsIGRlZmF1bHQgw6g6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiUG9zaXppb25lIG5vdGlmaWNhIGVycm9yZSBzdWxsYSBkb21hbmRhXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOlxuICAgICAgXCJTdWwgY2FtYmlvIHBhZ2luYSwgcG9zaXppb25hIGlsIGN1cnNvcmUgc3VsbGEgcHJpbWEgZG9tYW5kYVwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIk9yZGluZSBkaSBlbGVtZW50aSBzdWxsYSBwYWdpbmFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiVGVtcG8gbWFzc2ltbyBwZXIgdGVybWluYXJlIGlsIHNvbmRhZ2dpb1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwiVGVtcG8gbWFzc2ltbyBwZXIgdGVybWluYXJlIHVuYSBwYWdpbmEgZGVsIHNvbmRhZ2dpb1wiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIlZpc3VhbGl6emEgcGFubmVsbG8gdGltZXJcIixcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwiVmlzdWFsaXp6YSBtb2RhbGl0w6AgdGltZXIgcGFubmVsbG9cIixcbiAgICByZW5kZXJNb2RlOiBcIk1vZGFsaXTDoCBkaSByZW5kZXJpbmdcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIkNvbnNlbnRpIGwnYWdnaXVudGEgZGkgdW4gcGFubmVsbG9cIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIkNvbnNlbnRpIGxhIHJpbW96aW9uZSBkaSB1biBwYW5uZWxsb1wiLFxuICAgIHBhbmVsQWRkVGV4dDogXCJBZ2dpdW5naSB0ZXN0byBwYW5uZWxsb1wiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJSZW11b3ZpIHRlc3RvIHBhbm5lbGxvXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIlZpc3VhbGl6emEgdHV0dGkgZ2xpIGVsZW1lbnRpIHN1IHVuYSBwYWdpbmFcIixcbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIkdlbmVyYWxlXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCJPcHppb25pXCIsXG4gICAgICBodG1sOiBcIk1vZGlmaWNhIEh0bWxcIixcbiAgICAgIGNvbHVtbnM6IFwiQ29sb25uZVwiLFxuICAgICAgcm93czogXCJSaWdoZVwiLFxuICAgICAgY2hvaWNlczogXCJTY2VsdGVcIixcbiAgICAgIHZpc2libGVJZjogXCJWaXNpYmlsZSBzZVwiLFxuICAgICAgcmF0ZVZhbHVlczogXCJWb2xvcmkgZGVsbGEgY2xhc3NpZmljYVwiLFxuICAgICAgY2hvaWNlc0J5VXJsOiBcIk9wemlvbmkgZGFsIFdlYlwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJPcHppb25pIHByZWRlZmluaXRlXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJWb2NpIGRpIHRlc3RvXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcIlZhbGlkYXppb25pXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmlnYXppb25lXCIsXG4gICAgICBxdWVzdGlvbjogXCJEb21hbmRhXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkh0bWwgcXVlc3Rpb25hcmlvIGNvbXBsZXRhdG9cIixcbiAgICAgIGxvYWRpbmdIdG1sOiBcIkh0bWwgY2FyaWNhbWVudG8gcXVlc3Rpb25hcmlvXCIsXG4gICAgICB0aW1lcjogXCJUaW1lci9RdWl6XCIsXG4gICAgICB0cmlnZ2VyczogXCJUcmlnZ2Vyc1wiLFxuICAgICAgdGVtcGxhdGVUaXRsZTogXCJUZW1wbGF0ZSB0aXRvbG9cIlxuICAgIH0sXG4gICAgZWRpdFByb3BlcnR5OiBcIk1vZGlmY2EgcHJvcGlldMOgICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyBFbGVtZW50bzogezB9IF1cIixcbiAgICBlbnRlck5ld1ZhbHVlOiBcIlNpIHByZWdhIGRpIGluc2VyaXJlIGlsIHZhbG9yZS5cIixcbiAgICBub3F1ZXN0aW9uczogXCJOb24gYyfDqCBhbGN1biBkdWJiaW8gbmVsIHF1ZXN0aW9uYXJpby5cIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIlNpIHByZWdhIGRpIGNyZWFyZSB1biB0cmlnZ2VyXCIsXG4gICAgdHJpZ2dlck9uOiBcIkF0dGl2YXppb25lIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIlJlbmRlcmUgdmlzaWJpbGkgbGUgcGFnaW5lOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCJSZW5kZXJlIHZpc2liaWxpIGxlIGRvbWFuZGU6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJDb21wbGV0YXJlIGlsIHF1ZXN0aW9uYXJpbywgaW4gY2FzbyBkaSBzdWNjZXNzby5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIk5vbiBpbXBvc3RhdG9cIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiRXNlZ3VpIHNlXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDYW1iaWEgaWwgdmFsb3JlIGE6IFwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJhOiBcIixcbiAgICB0cmlnZ2VySXNWYXJpYWJsZTpcbiAgICAgIFwiTm9uIHBvc2l6aW9uYXJlIGxhIHZhcmlhYmlsZSBkZWwgcmlzdWx0YXRvIGRlbCBxdWVzdGlvbmFyaW9cIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBvcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCLDqCB2dW90b1wiLFxuICAgIG5vdGVtcHR5OiBcIm5vbiDDqCB2dW90byBcIixcbiAgICBlcXVhbDogXCLDqCB1Z3VhbGUgYVwiLFxuICAgIG5vdGVxdWFsOiBcIm5vbiDDqCB1Z3VhbGUgYVwiLFxuICAgIGNvbnRhaW5zOiBcImNvbnRpZW5lXCIsXG4gICAgbm90Y29udGFpbnM6IFwibm9uIGNvbnRpZW5lXCIsXG4gICAgZ3JlYXRlcjogXCJtYWdnaW9yZVwiLFxuICAgIGxlc3M6IFwibWlub3JlXCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwibWFnZ2lvcmUgbyB1Z3VhbGVcIixcbiAgICBsZXNzb3JlcXVhbDogXCJtaW5vcmUgbyB1Z3VhbGVcIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBlbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIlZlcnNpb25lIHBlciBBbmd1bGFyXCIsXG4gICAganF1ZXJ5OiBcIlZlcnNpb25lIHBlciBqUXVlcnlcIixcbiAgICBrbm9ja291dDogXCJWZXJzaW9uZSBwZXIgS25vY2tvdXRcIixcbiAgICByZWFjdDogXCJWZXJzaW9uZSBwZXIgUmVhY3RcIixcbiAgICB2dWU6IFwiVmVyc2lvbmUgcGVyIFZ1ZVwiLFxuICAgIGJvb3RzdHJhcDogXCJQZXIgZnJhbWV3b3JrIGJvb3RzdHJhcFwiLFxuICAgIHN0YW5kYXJkOiBcIk5vIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiVmlzdWFsaXp6YSBpbiBxdWVzdGEgcGFnaW5hXCIsXG4gICAgc2hvd0luV2luZG93OiBcIlZpc3VhbGl6emEgaW4gdW5hIGZpbmVzdHJhXCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiQ2FyaWNhIEpTT04gZGFsIHNlcnZlclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgZSBzdGlsaVwiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJTZWxlemlvbmEgbGEgcGFnaW5hIGRhIHRlc3RhcmU6XCJcbiAgfSxcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcIm51bWVybyByaXNwb3N0ZVwiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcImUtbWFpbFwiLFxuICAgIG51bWVyaWN2YWxpZGF0b3I6IFwibnVtZXJpY29cIixcbiAgICByZWdleHZhbGlkYXRvcjogXCJyZWdleFwiLFxuICAgIHRleHR2YWxpZGF0b3I6IFwidGVzdG9cIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJjb21wbGV0YSBxdWVzdGlvbmFyaW9cIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwic2V0dGEgdmFsb3JlXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiY2FtYmlhIHZpc2liaWxpdMOgXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBvZiBwcm9wZXJ0aWVzXG4gIHA6IHtcbiAgICBuYW1lOiBcIm5vbWVcIixcbiAgICB0aXRsZToge1xuICAgICAgbmFtZTogXCJ0aXRvbG9cIixcbiAgICAgIHRpdGxlOiBcIkxhc2NpYSB2dW90byBzZSDDqCBsbyBzdGVzc28gZGkgJ05vbWUnXCJcbiAgICB9LFxuICAgIHBhZ2VfdGl0bGU6IHsgbmFtZTogXCJ0aXRvbG9cIiwgdGl0bGU6IFwiVGl0b2xvIGRlbGxhIHBhZ2luYVwiIH1cbiAgfVxufTtcblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJpdFwiXSA9IGl0YWxpYW5UcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIHBlcnNpYW5TdHJpbmdzID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCLZiNuM2LHYp9uM2LRcIixcbiAgICBkcm9wUXVlc3Rpb246IFwi2YTYt9mB2Kcg2KfYsiDYrNi52KjZhyDYp9io2LLYp9ixINiz2YjYp9mE24wg2K/YsSDYp9uM2YbYrNinINmC2LHYp9ixINiv2YfbjNivXCIsXG4gICAgY29weTogXCLaqdm+24xcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwi2KfZgdiy2YjYr9mGINio2Ycg2KzYudio2Ycg2KfYqNiy2KfYsVwiLFxuICAgIGRlbGV0ZVBhbmVsOiBcItit2LDZgSDZvtmG2YRcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCLYrdiw2YEg2LPZiNin2YRcIixcbiAgICBjb252ZXJ0VG86IFwi2KrYqNiv24zZhCDYqNmHXCJcbiAgfSxcbiAgLy9xdWVzdGlvblR5cGVzXG4gIHF0OiB7XG4gICAgY2hlY2tib3g6IFwi2obZhtivINin2YbYqtiu2KfYqNuMXCIsXG4gICAgY29tbWVudDogXCLZhti42LFcIixcbiAgICBkcm9wZG93bjogXCLZhNuM2LPYqiDYp9mG2KrYrtin2KjbjFwiLFxuICAgIGZpbGU6IFwi2YHYp9uM2YRcIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBtYXRyaXg6IFwi2YXYp9iq2LHbjNizICjYqtqpINin2YbYqtiu2KfYqNuMKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcItmF2KfYqtix24zYsyAo2obZhtivINin2YbYqtiu2KfYqNuMKVwiLFxuICAgIG1hdHJpeGR5bmFtaWM6IFwi2YXYp9iq2LHbjNizICjYs9i32LHZh9in24wg2K/Yp9uM2YbYp9mF24zaqSlcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwi2YXYqtmGINqG2YbYryDYrti324xcIixcbiAgICBwYW5lbDogXCLZvtmG2YRcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwi2b7ZhtmEICjZvtmG2YQg2YfYp9uMINiv2KfbjNmG2KfZhduM2qkpXCIsXG4gICAgcmFkaW9ncm91cDogXCLYqtqpINin2YbYqtiu2KfYqNuMXCIsXG4gICAgcmF0aW5nOiBcItix2KrYqNmHINio2YbYr9uMXCIsXG4gICAgdGV4dDogXCLZhdiq2YYg2KraqSDYrti324xcIixcbiAgICBib29sZWFuOiBcIti12K3bjNitINmIINi62YTYt1wiLFxuICAgIGV4cHJlc3Npb246IFwi2KrZiNi124zZgduMXCJcbiAgfSxcbiAgLy9TdHJpbmdzIGluIEVkaXRvclxuICBlZDoge1xuICAgIHN1cnZleTogXCLZhti42LHYs9mG2KzbjFwiLFxuICAgIGVkaXRTdXJ2ZXk6IFwi2YjbjNix2KfbjNi0INmG2LjYsdiz2YbYrNuMXCIsXG4gICAgYWRkTmV3UGFnZTogXCLYr9ix2Kwg2LXZgdit2Ycg2KzYr9uM2K9cIixcbiAgICBkZWxldGVQYWdlOiBcItit2LDZgSDYtdmB2K3Zh1wiLFxuICAgIGVkaXRQYWdlOiBcItmI24zYsdin24zYtCDYtdmB2K3Zh1wiLFxuICAgIG5ld1BhZ2VOYW1lOiBcIti12YHYrdmHXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcItiz2YjYp9mEXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcItm+2YbZhFwiLFxuICAgIHRlc3RTdXJ2ZXk6IFwi2b7bjNi0INmG2YXYp9uM2LRcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwi2b7bjNi0INmG2YXYp9uM2LQg2YXYrNiv2K9cIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwi2LnYsdi2INm+2LHYs9i02YbYp9mF2Yc6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcItqp2K8g2b7Ysdiz2LTZhtin2YXZh1wiLFxuICAgIHNhdmVTdXJ2ZXk6IFwi2LDYrtuM2LHZhyDZhti42LHYs9mG2KzbjFwiLFxuICAgIGRlc2lnbmVyOiBcIti32LHYp9itINm+2LHYs9i02YbYp9mF2YdcIixcbiAgICBqc29uRWRpdG9yOiBcItmI24zYsdin24zYtNqv2LEgSlNPTlwiLFxuICAgIHVuZG86IFwi2KjYp9iy2q/Ysdiv2KfZhtuMXCIsXG4gICAgcmVkbzogXCLYqNin2LLYp9mG2KzYp9mFXCIsXG4gICAgb3B0aW9uczogXCLYp9mG2KrYrtin2Kgg2YfYp1wiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcItiq2YjZhNuM2K8g2qnYryDZhdi52KrYqNixIEpTT05cIixcbiAgICBnZW5lcmF0ZVJlYWRhYmxlSlNPTjogXCLYqtmI2YTbjNivINqp2K8g2K7ZiNin2YbYpyBKU09OXCIsXG4gICAgdG9vbGJveDogXCLYrNi52KjZhyDYp9io2LLYp9ixXCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcItit2LDZgSDZhdmI2LHYryDYp9mG2KrYrtin2KjbjFwiLFxuICAgIGVkaXRTZWxPYmplY3Q6IFwi2YjbjNix2KfbjNi0INmF2YjYsdivINin2YbYqtiu2KfYqNuMXCIsXG4gICAgY29ycmVjdEpTT046IFwi2qnYryBKU09OINix2Kcg2KrYtdit24zYrSDaqdmG24zYr1wiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwi2YbYqtin24zYrCDZhti42LHYs9mG2KzbjDogXCIsXG4gICAgbW9kaWZpZWQ6IFwi2KrYutuM24zYsSDYr9in2K/ZhyDYtNiv2YdcIixcbiAgICBzYXZpbmc6IFwi2K/YsSDYrdin2YQg2LDYrtuM2LHZhyDYs9in2LLbjFwiLFxuICAgIHNhdmVkOiBcItiw2K7bjNix2Ycg2LTYr1wiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcItin2KzYqNin2LHbjNifXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwi2KfYudmF2KfZhFwiLFxuICAgIG9rOiBcItiq2KfbjNuM2K9cIixcbiAgICBjYW5jZWw6IFwi2YTYutmIXCIsXG4gICAgcmVzZXQ6IFwi2KjYp9iy2YbYtNin2YbbjFwiLFxuICAgIGNsb3NlOiBcItio2LPYqtmGXCIsXG4gICAgZGVsZXRlOiBcItit2LDZgVwiLFxuICAgIGFkZE5ldzogXCLYp9mB2LLZiNiv2YZcIixcbiAgICByZW1vdmVBbGw6IFwi2K3YsNmBINmH2YXZh1wiLFxuICAgIGVkaXQ6IFwi2YjbjNix2KfbjNi0XCIsXG4gICAgZW1wdHk6IFwiPNiu2KfZhNuMPlwiLFxuICAgIGZhc3RFbnRyeTogXCLYqtqp2YXbjNmEINiz2LHbjNi5XCIsXG4gICAgZm9ybUVudHJ5OiBcItiq2qnZhduM2YQg2YHYsdmFXCIsXG4gICAgdGVzdFNlcnZpY2U6IFwi2KjYsdix2LPbjCDYs9ix2YjbjNizXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgIFwi2YTYt9mB2Kcg24zaqSDZhdmC2K/Yp9ixINio2YjZhNuM2YYg2KrZiNi124zZgduMINmI2KfYsdivINqp2YbbjNivINqp2Ycg2LXYrduM2K0g24zYpyDYutmE2Lcg2LHYpyDYqNix2q/Ysdiv2KfZhtivINiq2Kcg2LXZgdit2Ycg2LPZiNin2YTYp9iqINmG2YXYp9uM2LQg2K/Yp9iv2Ycg2LTZiNivLiDYqNix2KfbjCDZhdir2KfZhDoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gKiB7cXVlc3Rpb240fSAgPiAyMCBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCLZhNi32YHYpyDbjNqpINi52KjYp9ix2Kog2KrZiNi124zZgduMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8uINi02YXYpyDZhdmF2qnZhiDYp9iz2Kog2KfYsiDaqdix2YjYtNmHINio2LHYp9uMINiv2LPYqtix2LPbjCDYqNmHINmF2YLYr9in2LEg2LPZiNin2YTYp9iqINin2LPYqtmB2KfYr9mHINqp2YbbjNivLiDYqNix2KfbjCDZhdir2KfZhDoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gPSAzIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXG5cbiAgICBhY2VFZGl0b3JIZWxwOiBcItio2LHYp9uMINmF2LTYp9mH2K/ZhyDZhtqp2KfYqiDYqtqp2YXbjNmE24wgY3RybCtzcGFjZSDYsdinINio2YHYtNin2LHbjNivXCIsXG4gICAgYWNlRWRpdG9yUm93VGl0bGU6IFwi2LPYt9ixINmB2LnZhNuMXCIsXG4gICAgYWNlRWRpdG9yUGFuZWxUaXRsZTogXCLZvtmG2YQg2YHYudmE24xcIixcbiAgICBzaG93TW9yZTogXCLYqNix2KfbjCDYp9i32YTYp9i52KfYqiDYqNuM2LTYqtixINmE2LfZgdinINiz2YbYryDYsdin2YfZhtmF2Kcg2LHYpyDZhdi32KfZhNi52Ycg2qnZhtuM2K9cIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCLYs9mI2KfZhNin2Kog2YXZiNis2YjYrzpcIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCLZhNi32YHYpyDbjNqpINmF2YLYr9in2LEg2YjYp9ix2K8g2qnZhtuM2K9cIixcbiAgICB2YWx1ZTogXCLZhdmC2K/Yp9ixXCIsXG4gICAgdGV4dDogXCLZhdiq2YZcIixcbiAgICBjb2x1bW5FZGl0OiBcItmI24zYsdin24zYtCDYs9iq2YjZhjogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwi2YjbjNix2KfbjNi0INii24zYqtmFOiB7MH1cIixcblxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIlBhdGhcIixcbiAgICB2YWx1ZU5hbWU6IFwi2YbYp9mFINmF2YLYr9in2LFcIixcbiAgICB0aXRsZU5hbWU6IFwi2YbYp9mFINi52YbZiNin2YZcIixcblxuICAgIGhhc090aGVyOiBcItiv2KfYsdin24wg2KLbjNiq2YUg2K/bjNqv2LFcIixcbiAgICBuYW1lOiBcItmG2KfZhVwiLFxuICAgIHRpdGxlOiBcIti52YbZiNin2YZcIixcbiAgICBjZWxsVHlwZTogXCLZhtmI2Lkg2LPZhNmI2YRcIixcbiAgICBjb2xDb3VudDogXCLYqti52K/Yp9ivINiz2KrZiNmGXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcItiq2LHYqtuM2Kgg2q/YstuM2YbZhyDYsdinINin2YbYqtiu2KfYqCDaqdmG24zYr1wiLFxuICAgIHZpc2libGU6IFwi2YbZhdin24zYtCDYr9in2K/ZhyDYtNmI2K/Yn1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwi2LbYsdmI2LHbjCDYp9iz2KrYn1wiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwi2KjYpyDYs9i32LEg2KzYr9uM2K8g2LTYsdmI2Lkg2LTZiNiv2J9cIixcbiAgICByb3dzOiBcItiq2LnYr9in2K8g2LPYt9ixXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwi2Ybar9mH2K/Yp9ix2YbYr9mHINmF2KrZhlwiLFxuICAgIHNob3dQcmV2aWV3OiBcItm+24zYtCDZhtmF2KfbjNi0INiq2LXZiNuM2LEg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNiv2J9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwi2LDYrtuM2LHZhyDaqdix2K/ZhiDZhdit2KrZiNin24wg2YHYp9uM2YQg2K/YsSBKU09OINio2Ycg2LnZhtmI2KfZhiDZhdiq2YZcIixcbiAgICBtYXhTaXplOiBcItit2K/Yp9qp2KvYsSDYs9in24zYsiDYqNmHINio2KfbjNiqXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwi2KfYsdiq2YHYp9i5INiq2LXZiNuM2LFcIixcbiAgICBpbWFnZVdpZHRoOiBcIti52LHYtiDYqti12YjbjNixXCIsXG4gICAgcm93Q291bnQ6IFwi2KrYudiv2KfYryDYs9i32LFcIixcbiAgICBhZGRSb3dUZXh0OiBcItmF2KrZhiDYr9qp2YXZhyDYr9ix2Kwg2LPYt9ixXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLZhdiq2YYg2K/aqdmF2Ycg2K3YsNmBINiz2LfYsVwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCLYqtmI2LbbjNitINit2K/Yp9mC2YQg2KfZhdiq24zYp9iyXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcItiq2YjYttuM2K0g2K3Yr9in2qnYq9ixINin2YXYqtuM2KfYslwiLFxuICAgIGlucHV0VHlwZTogXCLZhtmI2Lkg2YjYsdmI2K/bjFwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcItmG2YjYtNiq2Ycg2KfZhtiq2K7Yp9ioINmH2KdcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwi2YXZgtiv2KfYsSDZvtuM2LQg2YHYsdi2XCIsXG5cbiAgICBzdXJ2ZXlFZGl0b3JUaXRsZTogXCLZiNuM2LHYp9uM2LQg2YbYuNix2LPZhtis24xcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwi2YjbjNix2KfbjNi0INiz2YjYp9mEOiB7MH1cIixcbiAgICAvL3N1cnZleVxuICAgIHNob3dUaXRsZTogXCLZhtmF2KfbjNi0L9m+2YbZh9in2YYg2qnYsdiv2YYg2LnZhtmI2KfZhlwiLFxuICAgIGxvY2FsZTogXCLYstio2KfZhiDZvtuM2LQg2YHYsdi2XCIsXG4gICAgbW9kZTogXCLYrdin2YTYqiAo2YjbjNix2KfbjNi0L9iu2YjYp9mG2K/ZhilcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCLZvtin2qnYs9in2LLbjCDZhdmC2KfYr9uM2LEg2b7ZhtmH2KfZhlwiLFxuICAgIGNvb2tpZU5hbWU6IFwi2YbYp9mFINqp2YjaqduMICjYqNmHINmF2YbYuNmI2LEg2KzZhNmI2q/bjNix24wg2KfYsiDYp9is2LHYp9uMINiv2YjYqNin2LHZhyDZhti42LHYs9mG2KzbjClcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCLYp9ix2LPYp9mEINmG2KrYp9uM2Kwg2YbYuNix2LPZhtis24wg2K/YsSDYtdmB2K3ZhyDYqNi52K/bjFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcItiw2K7bjNix2Ycg2YXZgtiv2KfYsSAn2LPYp9uM2LEnINiv2LEg2YHbjNmE2K8g2KzYr9in2q/Yp9mG2YdcIixcbiAgICBzaG93UGFnZVRpdGxlczogXCLZhtmF2KfbjNi0INi52YbZiNin2YYg2LXZgdit2KfYqlwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCLZhtmF2KfbjNi0INi02YXYp9ix2Ycg2LXZgdit2KfYqlwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCLZhdiq2YYg2K/aqdmF2Ycg2LXZgdit2Ycg2YLYqNmE24xcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi2YXYqtmGINiv2qnZhdmHINi12YHYrdmHINio2LnYr9uMXCIsXG4gICAgY29tcGxldGVUZXh0OiBcItmF2KrZhiDYr9qp2YXZhyDYqtqp2YXbjNmEINmG2LjYsdiz2YbYrNuMXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcItmF2KrZhiDYr9qp2YXZhyDYtNix2YjYuSDZhti42LHYs9mG2KzbjFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCLZhtmF2KfbjNi0INiv2qnZhdmHINmH2KfbjCDZhtin2YjYqNix24wgKNmG2KfZiNio2LHbjCDZvtuM2LQg2YHYsdi2KVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcItmG2YXYp9uM2LQg2K/aqdmF2Ycg2YLYqNmE24wgKNqp2KfYsdio2LEg2YXZhdqp2YYg2KfYs9iqINio2Ycg2LXZgdit2Ycg2YLYqNmEINio2LHar9ix2K/YrylcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwi2LXZgdit2Ycg2KfZiNmEINiv2LEg2YbYuNix2LPZhtis24wg2YbZgti32Ycg2KLYutin2LLbjNmGINii2YYg2KfYs9iqLlwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcItmG2YXYp9uM2LQg2LXZgdit2Ycg2KfYqtmF2KfZhSDZhti42LHYs9mG2KzbjCDYr9ixINm+2KfbjNin2YYgKGNvbXBsZXRlZEh0bWwpXCIsXG4gICAgZ29OZXh0UGFnZUF1dG9tYXRpYzpcbiAgICAgIFwi2KjYpyDZvtin2LPYrtqv2YjbjNuMINio2Ycg2KrZhdin2YUg2LPZiNin2YTYp9iq2Iwg2KjZhyDYtdmI2LHYqiDYp9iq2YjZhdin2KrbjNqpINio2Ycg2LXZgdit2Ycg2KjYudivINio2LHZiNivXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcItmG2YXYp9uM2LQg2YbYtNin2Ybar9ixINm+24zYtNix2YHYqlwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCLZhdit2YQg2LnZhtmI2KfZhiDYs9mI2KfZhFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCLYs9mI2KfZhNin2Kog2YbYtNin2YYg2K/Yp9ixINin2KzYqNin2LHbjCDZh9iz2KrZhtivXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcItmG2YXYp9uM2Ycg2LTYsdmI2Lkg2LPZiNin2YTYp9iqICjbsdiM27Ig24zYpyBhINmIIGIpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCLZhtmF2KfbjNi0INi02YXYp9ix2Ycg2YfYp9uMINiz2YjYp9mE2KfYqlwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwi2YLYp9mE2Kgg2LnZhtmI2KfZhiDYs9mI2KfZhNiMINio2Ycg2LXZiNix2Kog2b7bjNi0INmB2LHYtjogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCLZhdit2YQg2K7Yt9in24wg2LPZiNin2YRcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwi2KrZhdix2qnYsiDYqNixINix2YjbjCDYp9mI2YTbjNmGINiz2YjYp9mEINio2Kcg2KrYutuM24zYsSDYtdmB2K3Zh1wiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcItiq2LHYqtuM2Kgg2KfZhNmF2KfZhiDZh9inINiv2LEg2LXZgdit2YdcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwi2YbZh9in24zYqiDYstmF2KfZhiDYqNix2KfbjCDYp9iq2YXYp9mFINmG2LjYsdiz2YbYrNuMXCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCLZhtmH2KfbjNiqINiy2YXYp9mGINio2LHYp9uMINin2KrZhdin2YUg2KfbjNmGINi12YHYrdmHINmG2LjYsdiz2YbYrNuMXCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwi2YbZhdin24zYtCDZvtmG2YQg2LLZhdin2YYg2LPZhtisXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcItmG2YXYp9uM2LQg2K3Yp9mE2Kog2b7ZhtmEINiy2YXYp9mGINiz2YbYrFwiLFxuICAgIHJlbmRlck1vZGU6IFwi2K3Yp9mE2Kog2LHZhtiv2LFcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcItin2KzYp9iy2Ycg2KfZgdiy2YjYr9mGINm+2YbZhFwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwi2KfYrNin2LLZhyDYrdiw2YEg2b7ZhtmEXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcItmF2KrZhiDYp9mB2LLZiNiv2YYg2b7ZhtmEXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcItmF2KrZhiDYrdiw2YEg2b7ZhtmEXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcItmG2YXYp9uM2LQg2KrZhdin2YUg2KfZhNmF2KfZhiDZh9inINiv2LEg24zaqSDYtdmB2K3Zh1wiLFxuXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCLYudmF2YjZhduMXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCLYp9mG2KrYrtin2Kgg2YfYp1wiLFxuICAgICAgaHRtbDogXCLZiNuM2LHYp9uM2LTar9ixIEhUTUxcIixcbiAgICAgIGNvbHVtbnM6IFwi2LPYqtmI2YYg2YfYp1wiLFxuICAgICAgcm93czogXCLYs9i32LHZh9inXCIsXG4gICAgICBjaG9pY2VzOiBcItin2YbYqtiu2KfYqCDZh9inXCIsXG4gICAgICB2aXNpYmxlSWY6IFwi2YbZhdin24zYtCDYr9ixINi12YjYsdiqXCIsXG4gICAgICByYXRlVmFsdWVzOiBcItmF2YLYp9iv24zYsSDYsdiq2KjZhyDYqNmG2K/bjFwiLFxuICAgICAgY2hvaWNlc0J5VXJsOiBcItin2YbYqtiu2KfYqCDZh9inINin2LIg2YjYqFwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCLYp9mG2KrYrtin2Kgg2YfYp9uMINm+24zYtNmB2LHYtlwiLFxuICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwi2YHbjNmE2K/Zh9in24wg2YXYqtmG24xcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwi2KfYudiq2KjYp9ix2LPZhtis24wg2YfYp1wiLFxuICAgICAgbmF2aWdhdGlvbjogXCLZhtin2YjYqNix24xcIixcbiAgICAgIHF1ZXN0aW9uOiBcItiz2YjYp9mEXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkhUTUwg2LXZgdit2Ycg2KraqdmF24zZhCDZhti42LHYs9mG2KzbjFwiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwiSFRNTCDYqNin2LHar9iy2KfYsduMXCIsXG4gICAgICB0aW1lcjogXCLYstmF2KfZhiDYs9mG2Kwv2qnZiNim24zYslwiLFxuICAgICAgdHJpZ2dlcnM6IFwi2KfYrNix2Kcg2qnZhtmG2K/Zh1wiLFxuICAgICAgdGVtcGxhdGVUaXRsZTogXCLYudmG2YjYp9mGINmC2KfZhNioXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCLZiNuM2LHYp9uM2LQg2K7YtdmI2LXbjNiqICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyDYotuM2KrZhSDZh9inOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCLZhNi32YHYpyDbjNqpINmF2YLYr9in2LEg2YjYp9ix2K8g2qnZhtuM2K9cIixcbiAgICBub3F1ZXN0aW9uczogXCLYs9mI2KfZhNuMINiv2LEg2b7Ysdiz2LTZhtin2YXZhyDYr9ix2Kwg2YbYtNiv2YdcIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcItin2KzYsdinINqp2YbZhtiv2Ycg2KfbjCDYqNiz2KfYstuM2K9cIixcbiAgICB0cmlnZ2VyT246IFwi2K/YsSBcIixcbiAgICB0cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZTogXCLYtdmB2K3Yp9iqINix2Kcg2YLYp9io2YQg2YbZhdin24zYtCDaqdmGOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCLYs9mI2KfZhNin2Kog2LHYpyDZgtin2KjZhCDZhtmF2KfbjNi0INqp2YY6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCLZvtix2LPYtNmG2KfZhdmHINix2Kcg2KraqdmF24zZhCDaqdmGINin2q/YsSDZhdmI2YHZgiDYqNmI2K8uXCIsXG4gICAgdHJpZ2dlck5vdFNldDogXCLYp9is2LHYpyDaqdmG2YbYr9mHINiq2YbYuNuM2YUg2YbYtNiv2YcuXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcItin2KzYsdinINiv2LEg2LXZiNix2KpcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcItiq2LnbjNuM2LEg2YXZgtiv2KfYsSDYp9iyOiBcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwi2KjZhzogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwi2LnYr9mFINiv2LHYrCDZhdiq2LrbjNuM2LEg2K/YsSDZhtiq2KfbjNisINm+2LHYs9i02YbYp9mF2YdcIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwi2LXYrduM2K1cIixcbiAgICBmYWxzZTogXCLZhtin2K/Ysdiz2KpcIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcItiu2KfZhNuMINio2KfYtNivXCIsXG4gICAgbm90ZW1wdHk6IFwi2K7Yp9mE24wg2YbYqNin2LTYr1wiLFxuICAgIGVxdWFsOiBcItmF2LPYp9mI24wg2KjYp9i02K9cIixcbiAgICBub3RlcXVhbDogXCLZhdiz2KfZiNuMINmG2KjYp9i02K9cIixcbiAgICBjb250YWluczogXCLYtNin2YXZhFwiLFxuICAgIG5vdGNvbnRhaW5zOiBcIti02KfZhdmEINmG2KjYp9i02K9cIixcbiAgICBncmVhdGVyOiBcItio2LLYsdqv2KrYsVwiLFxuICAgIGxlc3M6IFwi2qnZiNqG2qnYqtixXCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwi2KjYstix2q/YqtixINuM2Kcg2YXYs9in2YjbjFwiLFxuICAgIGxlc3NvcmVxdWFsOiBcItqp2Yjahtqp2KrYsSDbjNinINmF2LPYp9mI24xcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwi2KfYs9iq2YHYp9iv2Ycg2KfYsiDZhtiz2K7ZhyBBbmd1bGFyXCIsXG4gICAganF1ZXJ5OiBcItin2LPYqtmB2KfYr9mHINin2LIg2YbYs9iu2YcgalF1ZXJ5XCIsXG4gICAga25vY2tvdXQ6IFwi2KfYs9iq2YHYp9iv2Ycg2KfYsiDZhtiz2K7ZhyDZhtin2qkg2KfZiNiqXCIsXG4gICAgcmVhY3Q6IFwi2KfYs9iq2YHYp9iv2Ycg2KfYsiDZhtiz2K7ZhyBSZWFjdFwiLFxuICAgIHZ1ZTogXCLYp9iz2KrZgdin2K/ZhyDYp9iyINmG2LPYrtmHIFZ1ZVwiLFxuICAgIGJvb3RzdHJhcDogXCLYqNix2KfbjCDZgdix24zZhSDZiNix2qkg2KjZiNiq2LPYqtix2b5cIixcbiAgICBzdGFuZGFyZDogXCLYqNiv2YjZhiDYqNmI2KrYs9iq2LHZvlwiLFxuICAgIHNob3dPblBhZ2U6IFwi2YbZhdin24zYtCDZhti42LHYs9mG2KzbjCDYr9ixINuM2qkg2LXZgdit2YdcIixcbiAgICBzaG93SW5XaW5kb3c6IFwi2YbZhdin24zYtCDZhti42LHYs9mG2KzbjCDYr9ixINuM2qkg2b7Zhtis2LHZh1wiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcItio2KfYsdqv2LLYp9ix24wgSlNPTiDYp9iyINiz2LHZiNixXCIsXG4gICAgdGl0bGVTY3JpcHQ6IFwi2KfYs9qp2LHbjNm+2Kog2Ygg2LTbjNmI2Ycg2YbZhdin24zYtFwiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcItis2KfZiNin2KfYs9qp2LHbjNm+2KpcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCLYtdmB2K3ZhyDYp9uMINix2Kcg2KjYsdin24wg2KLYstmF2KfbjNi0INin2YbYqtiu2KfYqCDaqdmG24zYrzpcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwi2KrYudiv2KfYryDZvtin2LPYrlwiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcItin24zZhduM2YRcIixcbiAgICBudW1lcmljdmFsaWRhdG9yOiBcIti52K/Yr1wiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCLZhdiq2YZcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCLYqtqp2YXbjNmEINmG2LjYsdiz2YbYrNuMXCIsXG4gICAgc2V0dmFsdWV0cmlnZ2VyOiBcItiq2YbYuNuM2YUg2YXZgtiv2KfYsVwiLFxuICAgIHZpc2libGV0cmlnZ2VyOiBcItiq2LrbjNuM2LEg2YjYtti524zYqiDYr9uM2K/ZhyDYtNiv2YZcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwi2YbYp9mFXCIsXG4gICAgdGl0bGU6IHsgbmFtZTogXCLYudmG2YjYp9mGXCIsIHRpdGxlOiBcItin2q/YsSDYrtin2YTbjCDYqNin2LTYryDZhdin2YbZhtivINmG2KfZhSDYr9ix2Kwg2YXbjCDYtNmI2K9cIiB9LFxuICAgIHN1cnZleV90aXRsZTogeyBuYW1lOiBcIti52YbZiNin2YZcIiwgdGl0bGU6IFwi2K/YsSDYqtmF2KfZhSDYtdmB2K3Yp9iqINiv24zYr9mHINmF24wg2LTZiNivXCIgfSxcbiAgICBwYWdlX3RpdGxlOiB7IG5hbWU6IFwi2LnZhtmI2KfZhlwiLCB0aXRsZTogXCLYudmG2YjYp9mGINi12YHYrdmHXCIgfVxuICB9XG59O1xuXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZhXCJdID0gcGVyc2lhblN0cmluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJpbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbnZhciBwb2xpc2hTdHJpbmdzID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCJFZHl0dWpcIixcbiAgICBkcm9wUXVlc3Rpb246IFwiUHJ6ZWNpxIVnbmlqIHB5dGFuaWUuXCIsXG4gICAgY29weTogXCJLb3BpdWpcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiRG9kYWogZG8gcGFsZXR5XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiVXN1xYQgcGFuZWxcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCJVc3XFhCBweXRhbmllXCIsXG4gICAgY29udmVydFRvOiBcIktvbndlcnR1aiBuYVwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGNoZWNrYm94OiBcIldpZWxva3JvdG55IHd5YsOzclwiLFxuICAgIGNvbW1lbnQ6IFwiS29tZW50YXJ6XCIsXG4gICAgZHJvcGRvd246IFwiTGlzdGEgd3lib3J1XCIsXG4gICAgZmlsZTogXCJQbGlrXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgbWF0cml4OiBcIk1hY2llcnogKGplZG5va3JvdG55IHd5YsOzcilcIixcbiAgICBtYXRyaXhkcm9wZG93bjogXCJNYXRyaXggKHdpZWxva3JvdG55IHd5YsOzcilcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpeCAoZHluYW1pY3puZSB3aWVyc3plKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJXaWVsZSBsaW5paSB0ZWtzdHVcIixcbiAgICBwYW5lbDogXCJQYW5lbFwiLFxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5lbCAoZHluYW1pY3puZSBwYW5lbGUpXCIsXG4gICAgcmFkaW9ncm91cDogXCJKZWRub2tyb3RueSB3eWLDs3JcIixcbiAgICByYXRpbmc6IFwiT2NlbmFcIixcbiAgICB0ZXh0OiBcIlBvamVkeW5jemEgb2Rwb3dpZWTFulwiLFxuICAgIGJvb2xlYW46IFwiUHJhd2RhL0ZhxYJzelwiLFxuICAgIGV4cHJlc3Npb246IFwiV3lyYcW8ZW5pZVwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBzdXJ2ZXk6IFwiQW5raWV0YVwiLFxuICAgIFN1cnZleTogXCJBbmtpZXRhXCIsXG4gICAgZWRpdFN1cnZleTogXCJFZHl0dWogYW5raWV0xJlcIixcbiAgICBhZGROZXdQYWdlOiBcIkRvZGFqIG5vd8SFIHNla2NqxJlcIixcbiAgICBkZWxldGVQYWdlOiBcIlVzdcWEIHNla2NqxJlcIixcbiAgICBlZGl0UGFnZTogXCJFZHl0dWogc2VrY2rEmVwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcInNla2NqYVwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCJweXRhbmllXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcInBhbmVsXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0dWogYW5raWV0xJlcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwiVGVzdHVqIHBvbm93bmllXCIsXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIlN6ZXJva2/Fm8SHIGFua2lldHk6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtYmVkIFN1cnZleVwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiWmFwaXN6IGFua2lldMSZXCIsXG4gICAgZGVzaWduZXI6IFwiUHJvamVrdGFudCBhbmtpZXR5XCIsXG4gICAganNvbkVkaXRvcjogXCJKU09OIEVkaXRvclwiLFxuICAgIHVuZG86IFwiQ29mbmlqXCIsXG4gICAgcmVkbzogXCJQb27Ds3dcIixcbiAgICBvcHRpb25zOiBcIk9wY2plXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiR2VuZXJhdGUgVmFsaWQgSlNPTlwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkdlbmVyYXRlIFJlYWRhYmxlIEpTT05cIixcbiAgICB0b29sYm94OiBcIlBhbGV0YVwiLFxuICAgIGRlbFNlbE9iamVjdDogXCJVc3XFhCB3eWJyYW55IGVsZW1lbnRcIixcbiAgICBjb3JyZWN0SlNPTjogXCJQbGVhc2UgY29ycmVjdCBKU09OLlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwiV3luaWsgYW5raWV0eTogXCIsXG4gICAgbW9kaWZpZWQ6IFwiWm1vZHlmaWtvd2FuYVwiLFxuICAgIHNhdmluZzogXCJUcndhIHphcGlzXCIsXG4gICAgc2F2ZWQ6IFwiWmFwaXNhbm9cIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJXeW1hZ2FuZT9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJaYXN0b3N1alwiLFxuICAgIG9rOiBcIk9LXCIsXG4gICAgY2FuY2VsOiBcIkFudWx1alwiLFxuICAgIHJlc2V0OiBcIlJlc2V0dWpcIixcbiAgICBjbG9zZTogXCJaYW1rbmlqXCIsXG4gICAgZGVsZXRlOiBcIlVzdcWEXCIsXG4gICAgYWRkTmV3OiBcIkRvZGFqIG5vd8SFXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlVzdcWEIHdzenlzdGtpZVwiLFxuICAgIGVkaXQ6IFwiRWR5dHVqXCIsXG4gICAgZW1wdHk6IFwiPHB1c3R5PlwiLFxuICAgIGZhc3RFbnRyeTogXCJTenlia2llIHdwcm93YWR6YW5pZVwiLFxuICAgIGZvcm1FbnRyeTogXCJGb3JtdWxhcnpcIixcbiAgICB0ZXN0U2VydmljZTogXCJUZXN0dWogdXPFgnVnxJlcIixcbiAgICBjb25kaXRpb25IZWxwOlxuICAgICAgXCJQb2RhaiB3eXJhxbxlbmllLCBrdMOzcmUgendyw7NjaSB3YXJ0b8WbxIcgcHJhd2RhL2ZhxYJzei4gSmXFm2xpIGNoY2VzeiwgYWJ5IHNla2NqYSBsdWIgcHl0YW5pZSBwb3pvc3RhxYJ5IHdpZG9jem5lIC0gcG93aW5ubyB6d3LDs2NpxIcgcHJhd2TEmS4gUHJ6eWvFgmFkOiB7cHl0YW5pZTF9ID0gJ3dhcnRvxZvEhzEnIG9yICh7cHl0YW5pZTJ9ICoge3B5dGFuaWU0fSAgPiAyMCBhbmQge3B5dGFuaWUzfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIlBsZWFzZSBlbnRlciBhbiBleHByZXNzaW9uLiBZb3UgbWF5IHVzZSBjdXJseSBicmFja2V0cyB0byBnZXQgYWNjZXNzIHRvIHRoZSBxdWVzdGlvbiB2YWx1ZXM6ICd7cXVlc3Rpb24xfSArIHtxdWVzdGlvbjJ9JywgJyh7cHJpY2V9KntxdWFudGl0eX0pICogKDEwMCAtIHtkaXNjb3VudH0pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6IFwiUHJlc3MgY3RybCtzcGFjZSB0byBnZXQgZXhwcmVzc2lvbiBjb21wbGV0aW9uIGhpbnRcIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJDdXJyZW50IHJvd1wiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiQ3VycmVudCBwYW5lbFwiLFxuICAgIHNob3dNb3JlOiBcIkZvciBtb3JlIGRldGFpbHMgcGxlYXNlIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uXCIsXG4gICAgYXNzaXN0YW50VGl0bGU6IFwiQXZhaWxhYmxlIHF1ZXN0aW9uczpcIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJQb2RhaiB3YXJ0b8WbxIdcIixcbiAgICB2YWx1ZTogXCJXYXJ0b8WbxIdcIixcbiAgICB0ZXh0OiBcIkV0eWtpZXRhXCIsXG4gICAgY29sdW1uRWRpdDogXCJFZGl0IGNvbHVtbjogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwiRWRpdCBpdGVtOiB7MH1cIixcblxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIlBhdGhcIixcbiAgICB2YWx1ZU5hbWU6IFwiVmFsdWUgbmFtZVwiLFxuICAgIHRpdGxlTmFtZTogXCJUaXRsZSBuYW1lXCIsXG5cbiAgICBoYXNPdGhlcjogXCJDenkgbW/FvGxpd2Egd8WCYXNuYSBvZHBvd2llZMW6XCIsXG4gICAgb3RoZXJUZXh0OiBcIk90aGVyIGl0ZW0gdGV4dFwiLFxuICAgIG5hbWU6IFwiTmF6d2FcIixcbiAgICB0aXRsZTogXCJFdHlraWV0YVwiLFxuICAgIGNlbGxUeXBlOiBcIlR5cCBrb23Ds3JraVwiLFxuICAgIGNvbENvdW50OiBcIkxpY3piYSBrb2x1bW5cIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiS29sZWpub8WbxIcgb2Rwb3dpZWR6aVwiLFxuICAgIHZpc2libGU6IFwiQ3p5IHdpZG9jem5lP1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwiQ3p5IHd5bWFnYWxuZT9cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkN6eSByb3pwb2N6eW5hIHNpxJkgbm93xIUgbGluacSFP1wiLFxuICAgIHJvd3M6IFwiTGljemJhIHdpZXJzenlcIixcbiAgICBwbGFjZUhvbGRlcjogXCJJbnB1dCBwbGFjZSBob2xkZXJcIixcbiAgICBzaG93UHJldmlldzogXCJJcyBpbWFnZSBwcmV2aWV3IHNob3duP1wiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJTdG9yZSBmaWxlIGNvbnRlbnQgaW4gSlNPTiByZXN1bHQgYXMgdGV4dFwiLFxuICAgIG1heFNpemU6IFwiTWF4aW11bSBmaWxlIHNpemUgaW4gYnl0ZXNcIixcbiAgICBpbWFnZUhlaWdodDogXCJJbWFnZSBoZWlnaHRcIixcbiAgICBpbWFnZVdpZHRoOiBcIkltYWdlIHdpZHRoXCIsXG4gICAgcm93Q291bnQ6IFwiUm93IGNvdW50XCIsXG4gICAgYWRkUm93VGV4dDogXCJBZGQgcm93IGJ1dHRvbiB0ZXh0XCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJSZW1vdmUgcm93IGJ1dHRvbiB0ZXh0XCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIk9waXMgbmFqbmnFvHN6ZWogb2NlbnlcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiT3BpcyBuYWp3ecW8c3plaiBvY2VueVwiLFxuICAgIGlucHV0VHlwZTogXCJJbnB1dCB0eXBlXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiT3B0aW9ucyBjYXB0aW9uXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIkRlZmF1bHQgdmFsdWVcIixcblxuICAgIHN1cnZleUVkaXRvclRpdGxlOiBcIkVkeXR1aiBhbmtpZXTEmVwiLFxuICAgIHFFZGl0b3JUaXRsZTogXCJFZHl0dWo6IHswfVwiLFxuXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwiUG9rYcW8L3VrcnlqIHR5dHXFglwiLFxuICAgIGxvY2FsZTogXCJEb215xZtsbnkgasSZenlrXCIsXG4gICAgbW9kZTogXCJUcnliIChlZHljamEvcG9kZ2zEhWQpXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiVXN1xYQgbmlld2lkb2N6bmUgb2Rwb3dpZWR6aVwiLFxuICAgIGNvb2tpZU5hbWU6IFwiQ29va2llIG5hbWUgKHRvIGRpc2FibGUgcnVuIHN1cnZleSB0d28gdGltZXMgbG9jYWxseSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJTZW5kIHN1cnZleSByZXN1bHRzIG9uIHBhZ2UgbmV4dFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIlN0b3JlICdvdGhlcnMnIHZhbHVlIGluIHNlcGFyYXRlIGZpZWxkXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiU2hvdyBwYWdlIHRpdGxlc1wiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJTaG93IHBhZ2UgbnVtYmVyc1wiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCJQYWdlIHByZXZpb3VzIGJ1dHRvbiB0ZXh0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlBhZ2UgbmV4dCBidXR0b24gdGV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZSBidXR0b24gdGV4dFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydCBidXR0b24gdGV4dFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJTaG93IG5hdmlnYXRpb24gYnV0dG9ucyAoZGVmYXVsdCBuYXZpZ2F0aW9uKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIlNob3cgcHJldmlvdXMgYnV0dG9uICh1c2VyIG1heSByZXR1cm4gb24gcHJldmlvdXMgcGFnZSlcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiVGhlIGZpcnN0IHBhZ2UgaW4gdGhlIHN1cnZleSBpcyBhIHN0YXJ0ZWQgcGFnZS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJTaG93IHRoZSBjb21wbGV0ZWQgcGFnZSBhdCB0aGUgZW5kIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIk9uIGFuc3dlcmluZyBhbGwgcXVlc3Rpb25zLCBnbyB0byB0aGUgbmV4dCBwYWdlIGF1dG9tYXRpY2FsbHlcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiU2hvdyBwcm9ncmVzcyBiYXJcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiUXVlc3Rpb24gdGl0bGUgbG9jYXRpb25cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiVGhlIHF1ZXN0aW9uIHJlcXVpcmVkIHN5bWJvbChzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJRdWVzdGlvbiBzdGFydCBpbmRleCAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIlNob3cgcXVlc3Rpb24gbnVtYmVyc1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwiUXVlc3Rpb24gdGl0bGUgdGVtcGxhdGUsIGRlZmF1bHQgaXM6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiUXVlc3Rpb24gZXJyb3IgbG9jYXRpb25cIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiRm9jdXMgZmlyc3QgcXVlc3Rpb24gb24gY2hhbmdpbmcgdGhlIHBhZ2VcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJFbGVtZW50cyBvcmRlciBvbiB0aGUgcGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJNYXhpbXVtIHRpbWUgdG8gZmluaXNoIHRoZSBzdXJ2ZXlcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIk1heGltdW0gdGltZSB0byBmaW5pc2ggYSBwYWdlIGluIHRoZSBzdXJ2ZXlcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJTaG93IHRpbWVyIHBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIlNob3cgdGltZXIgcGFuZWwgbW9kZVwiLFxuICAgIHJlbmRlck1vZGU6IFwiUmVuZGVyIG1vZGVcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIkFsbG93IGFkZGluZyBhIHBhbmVsXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJBbGxvdyByZW1vdmluZyB0aGUgcGFuZWxcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWRkaW5nIHBhbmVsIHRleHRcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiUmVtb3ZpbmcgcGFuZWwgdGV4dFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJTaG93IGFsbCBlbGVtZW50cyBvbiBvbmUgcGFnZVwiLFxuXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJPZ8OzbG5lXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCJPcHRpb25zXCIsXG4gICAgICBodG1sOiBcIkh0bWwgRWRpdG9yXCIsXG4gICAgICBjb2x1bW5zOiBcIktvbHVtbnlcIixcbiAgICAgIHJvd3M6IFwiV2llcnN6ZVwiLFxuICAgICAgY2hvaWNlczogXCJPZHBvd2llZHppXCIsXG4gICAgICB2aXNpYmxlSWY6IFwiV2lkb2N6bmUgamXFm2xpXCIsXG4gICAgICBlbmFibGVJZjogXCJFbmFibGUgSWZcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwiV2FydG/Fm8SHIG9jZW55XCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiT2Rwb3dpZWR6aSB6IHdlYnNlcndpc3VcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiRGVmYXVsdCBDaG9pY2VzXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJUZXh0IElucHV0c1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGF0b3JzXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmlnYXRpb25cIixcbiAgICAgIHF1ZXN0aW9uOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkNvbXBsZXRlZCBIdG1sXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJMb2FkaW5nIEh0bWxcIixcbiAgICAgIHRpbWVyOiBcIlRpbWVyL1F1aXpcIixcbiAgICAgIHRyaWdnZXJzOiBcIlRyaWdnZXJzXCIsXG4gICAgICB0ZW1wbGF0ZVRpdGxlOiBcIlRlbXBsYXRlIHRpdGxlXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCJFZGl0IHByb3BlcnR5ICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyBJdGVtczogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwiUGxlYXNlLCBlbnRlciB0aGUgdmFsdWUuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiVGhlcmUgaXMgbm8gYW55IHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJQbGVhc2UgY3JlYXRlIGEgdHJpZ2dlclwiLFxuICAgIHRyaWdnZXJPbjogXCJPbiBcIixcbiAgICB0cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZTogXCJNYWtlIHBhZ2VzIHZpc2libGU6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIk1ha2UgZWxlbWVudHMgdmlzaWJsZTpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIkNvbXBsZXRlIHRoZSBzdXJ2ZXkgaWYgc3VjY2VlZC5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIlRoZSB0cmlnZ2VyIGlzIG5vdCBzZXRcIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiUnVuIGlmXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDaGFuZ2UgdmFsdWUgb2Y6IFwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJ0bzogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiRG8gbm90IHB1dCB0aGUgdmFyaWFibGUgaW50byB0aGUgc3VydmV5IHJlc3VsdC5cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwicHJhd2RhXCIsXG4gICAgZmFsc2U6IFwiZmHFgnN6XCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJpcyBlbXB0eVwiLFxuICAgIG5vdGVtcHR5OiBcImlzIG5vdCBlbXB0eVwiLFxuICAgIGVxdWFsOiBcImVxdWFsc1wiLFxuICAgIG5vdGVxdWFsOiBcIm5vdCBlcXVhbHNcIixcbiAgICBjb250YWluczogXCJjb250YWluc1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcIm5vdCBjb250YWluc1wiLFxuICAgIGdyZWF0ZXI6IFwiZ3JlYXRlclwiLFxuICAgIGxlc3M6IFwibGVzc1wiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcImdyZWF0ZXIgb3IgZXF1YWxzXCIsXG4gICAgbGVzc29yZXF1YWw6IFwiTGVzcyBvciBFcXVhbHNcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiVXNlIEFuZ3VsYXIgdmVyc2lvblwiLFxuICAgIGpxdWVyeTogXCJVc2UgalF1ZXJ5IHZlcnNpb25cIixcbiAgICBrbm9ja291dDogXCJVc2UgS25vY2tvdXQgdmVyc2lvblwiLFxuICAgIHJlYWN0OiBcIlVzZSBSZWFjdCB2ZXJzaW9uXCIsXG4gICAgdnVlOiBcIlVzZSBWdWUgdmVyc2lvblwiLFxuICAgIGJvb3RzdHJhcDogXCJGb3IgYm9vdHN0cmFwIGZyYW1ld29ya1wiLFxuICAgIHN0YW5kYXJkOiBcIk5vIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiU2hvdyBzdXJ2ZXkgb24gYSBwYWdlXCIsXG4gICAgc2hvd0luV2luZG93OiBcIlNob3cgc3VydmV5IGluIGEgd2luZG93XCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiTG9hZCBTdXJ2ZXkgSlNPTiBmcm9tIHNlcnZlclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgYW5kIHN0eWxlc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJXeWJpZXJ6IHN0cm9uxJksIGFieSBqxIUgcHJ6ZXRlc3Rvd2HEhzpcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiYW5zd2VyIGNvdW50XCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRleHRcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJjb21wbGV0ZSBzdXJ2ZXlcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwic2V0IHZhbHVlXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiY2hhbmdlIHZpc2liaWxpdHlcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwibmF6d2FcIixcbiAgICB0aXRsZToge1xuICAgICAgbmFtZTogXCJ0eXR1xYJcIixcbiAgICAgIHRpdGxlOiBcIlBvem9zdGF3IHB1c3R5LCBqZcWbbGkgbWEgYnnEhyB0YWtpIHNhbSwgamFrICdOYXp3YSdcIlxuICAgIH0sXG4gICAgcGFnZV90aXRsZTogeyBuYW1lOiBcInR5dHXFglwiLCB0aXRsZTogXCJUeXR1xYIgc2VrY2ppXCIgfVxuICB9XG59O1xuXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcInBsXCJdID0gcG9saXNoU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcG9saXNoLnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG52YXIgcG9ydHVndWVzZVRyYW5zbGF0aW9uID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZHJvcFF1ZXN0aW9uOiBcIlBvciBmYXZvciBhcnJhc3RlIHVtYSBwZXJndW50YSBhcXVpLlwiLFxuICAgIGNvcHk6IFwiQ29waWFyXCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIkFkaWNpb25hciDDoCB0b29sYm94XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiUmVtb3ZlciBQYWluZWxcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCJSZW1vdmVyIFBlcmd1bnRhXCJcbiAgfSxcbiAgLy9xdWVzdGlvblR5cGVzXG4gIHF0OiB7XG4gICAgY2hlY2tib3g6IFwiQ2hlY2tib3hcIixcbiAgICBjb21tZW50OiBcIkNvbWVudMOhcmlvXCIsXG4gICAgZHJvcGRvd246IFwiRHJvcGRvd25cIixcbiAgICBmaWxlOiBcIkFycXVpdm9cIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBtYXRyaXg6IFwiTWF0cml6IChvcMOnw6NvIMO6bmljYSlcIixcbiAgICBtYXRyaXhkcm9wZG93bjogXCJNYXRyaXogKG11bHRpcGxhcyBvcMOnw7VlcylcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpeiAobGluaGFzIGRpbsOibWljYXMpXCIsXG4gICAgbXVsdGlwbGV0ZXh0OiBcIlRleHRvIG3Dumx0aXBsb1wiLFxuICAgIHBhbmVsOiBcIlBhaW5lbFwiLFxuICAgIHJhZGlvZ3JvdXA6IFwiUmFkaW9ncm91cFwiLFxuICAgIHJhdGluZzogXCJSYXRpbmdcIixcbiAgICB0ZXh0OiBcIlRleHRvIMO6bmljb1wiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBhZGROZXdQYWdlOiBcIkFkaWNpb25hciBOb3ZhIFDDoWdpbmFcIixcbiAgICBuZXdQYWdlTmFtZTogXCJww6FnaW5hXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcInBlcmd1bnRhXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcInBhaW5lbFwiLFxuICAgIHRlc3RTdXJ2ZXk6IFwiVGVzdGFyIHBlc3F1aXNhXCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIlRlc3RhciBwZXNxdWlzYSBub3ZhbWVudGVcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwiVGFtYW5obyBkbyBwZXNxdWlzYTogXCIsXG4gICAgZW1iZWRTdXJ2ZXk6IFwiSW5jb3Jwb3JhciBQZXNxdWlzYVwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiU2FsdmFyIFBlc3F1aXNhXCIsXG4gICAgZGVzaWduZXI6IFwiRGVzaWduZXIgZGUgUGVzcXVpc2FcIixcbiAgICBqc29uRWRpdG9yOiBcIkVkaXRvciBkZSBKU09OXCIsXG4gICAgdW5kbzogXCJEZXNmYXplclwiLFxuICAgIHJlZG86IFwiUmVmYXplclwiLFxuICAgIG9wdGlvbnM6IFwiT3DDp8O1ZXNcIixcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCJHZXJhciBKU09OIHbDoWxpZG9cIixcbiAgICBnZW5lcmF0ZVJlYWRhYmxlSlNPTjogXCJHZXJhciBKU09OIGxlZ8OtdmVsXCIsXG4gICAgdG9vbGJveDogXCJUb29sYm94XCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcIkFwYWdhciBvYmpldG8gc2VsZWNpb25hZG9cIixcbiAgICBjb3JyZWN0SlNPTjogXCJQb3IgZmF2b3IgY29ycmlqYSBvIEpTT04uXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJSZXN1bHRhZG8gZGEgcGVzcXVpc2E6IFwiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcIk9icmlnYXTDs3Jpbz9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJBcGxpY2FyXCIsXG4gICAgb2s6IFwiT0tcIixcbiAgICBjYW5jZWw6IFwiQ2FuY2VsYXJcIixcbiAgICByZXNldDogXCJMaW1wYXJcIixcbiAgICBjbG9zZTogXCJGZWNoYXJcIixcbiAgICBkZWxldGU6IFwiQXBhZ2FyXCIsXG4gICAgYWRkTmV3OiBcIkFkaWNpb25hciBOb3ZvXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlJlbW92ZXIgVG9kb3NcIixcbiAgICBlZGl0OiBcIkVkaXRhclwiLFxuICAgIGVtcHR5OiBcIjx2YXppbz5cIixcbiAgICBmYXN0RW50cnk6IFwiRW50cmFkYSBSw6FwaWRhXCIsXG4gICAgZm9ybUVudHJ5OiBcIkVudHJhZGEgY29tIGZvcm11bMOhcmlvXCIsXG4gICAgdGVzdFNlcnZpY2U6IFwiVGVzdGFyIG8gc2VydmnDp29cIixcbiAgICBleHByZXNzaW9uSGVscDpcbiAgICAgIFwiUG9yIGZhdm9yIGluZm9ybWUgdW1hIGV4cHJlc3PDo28gYm9sZWFuYS4gRWxhIGRldmUgcmV0b3JuYXIgdmVyZGFkZWlybyBwYXJhIG1hbnRlciBhIHBlcmd1bnRhL3DDoWdpbmEgdmlzw612ZWwuIFBvciBleGVtcGxvOiB7wrRwZXJndW50YTF9ID0gJ3ZhbG9yMScgb3IgKHtwZXJndW50YTJ9ID0gMyBhbmQge3Blcmd1bnRhM30gPCA1KVwiLFxuXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIlBvciBmYXZvciBpbmZvcm1lIHVtIHZhbG9yIG5hIHByb3ByaWVkYWRlXCIsXG4gICAgdmFsdWU6IFwiVmFsb3JcIixcbiAgICB0ZXh0OiBcIlRleHRvXCIsXG4gICAgY29sdW1uRWRpdDogXCJFZGl0YXIgY29sdW5hOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCJFZGl0YXIgaXRlbTogezB9XCIsXG5cbiAgICBoYXNPdGhlcjogXCJUZW0gb3V0cm8gaXRlbVwiLFxuICAgIG5hbWU6IFwiTm9tZVwiLFxuICAgIHRpdGxlOiBcIlTDrXR1bG9cIixcbiAgICBjZWxsVHlwZTogXCJUaXBvIGRlIGPDqWx1bGFcIixcbiAgICBjb2xDb3VudDogXCJDb250YWdlbSBkZSBjw6lsdWxhc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJTZWxlY2lvbmUgYSBvcmRlbSBkYXMgYWx0ZXJuYXRpdmFzXCIsXG4gICAgdmlzaWJsZTogXCLDiSB2aXPDrXZlbD9cIixcbiAgICBpc1JlcXVpcmVkOiBcIsOJIG9icmlnYXTDs3Jpbz9cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkNvbWXDp2EgY29tIHVtYSBub3ZhIGxpbmhhP1wiLFxuICAgIHJvd3M6IFwiQ29udGFnZW0gZGUgbGluaGFzXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwiVGV4dG8gZGUgcmVmZXLDqm5jaWFcIixcbiAgICBzaG93UHJldmlldzogXCJNb3N0cmEgcHLDqS12aXN1YWxpemHDp8OjbyBkZSBpbWFnZW0/XCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIkdyYXZhciBjb250ZcO6ZG8gZGUgYXJxdWl2byBubyByZXN1bHRhZG8gSlNPTiBjb21vIHRleHRvXCIsXG4gICAgbWF4U2l6ZTogXCJUYW1hbmhvIG3DoXhpbW8gZGUgYXJxdWl2byBlbSBieXRlc1wiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkFsdHVyYSBkYSBpbWFnZW1cIixcbiAgICBpbWFnZVdpZHRoOiBcIkxhcmd1cmEgZGEgaW1hZ2VtXCIsXG4gICAgcm93Q291bnQ6IFwiQ29udGFnZW0gZGUgbGluaGFzXCIsXG4gICAgYWRkUm93VGV4dDogXCJUZXh0byBkbyBib3TDo28gcGFyYSBhZGljaW9uYXIgbGluaGFzXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJUZXh0byBkbyBib3TDo28gcGFyYSByZW1vdmVyIGxpbmhhc1wiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmnDp8OjbyBkZSBxdWFsaWZpY2HDp8OjbyBtw61uaW1hXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyacOnw6NvIGRlIHF1YWxpZmljYcOnw6NvIG3DoXhpbWFcIixcbiAgICBpbnB1dFR5cGU6IFwiVGlwbyBkZSBlbnRyYWRhXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVMOtdHVsbyBkZSBvcMOnw6NvXCIsXG5cbiAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdGFyIHBlcmd1bnRhOiB7MH1cIixcbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIkdlcmFsXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCJPcMOnw7Vlc1wiLFxuICAgICAgaHRtbDogXCJFZGl0b3IgSHRtbFwiLFxuICAgICAgY29sdW1uczogXCJDb2x1bmFzXCIsXG4gICAgICByb3dzOiBcIkxpbmhhc1wiLFxuICAgICAgY2hvaWNlczogXCJPcMOnw7Vlc1wiLFxuICAgICAgdmlzaWJsZUlmOiBcIlZpc8OtdmVsIHNlXCIsXG4gICAgICByYXRlVmFsdWVzOiBcIlZhbG9yZXMgZGUgcXVhbGlmaWNhw6fDo29cIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJPcMOnw7VlcyBjb20gb3JpZ2VtIG5hIFdlYlwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJPcMOnw7VlcyBwYWRyw6NvXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJFbnRyYWRhcyBkZSB0ZXh0b1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGFkb3Jlc1wiXG4gICAgfSxcblxuICAgIGVkaXRQcm9wZXJ0eTogXCJFZGl0YXIgcHJvcHJpZWRhZGUgJ3swfSdcIixcbiAgICBpdGVtczogXCJbIEl0ZW1zOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJQb3IgZmF2b3IsIGluZm9ybWUgbyB2YWxvci5cIixcbiAgICBub3F1ZXN0aW9uczogXCJOw6NvIGjDoSBuZW5odW1hIHBlcmd1bnRhIG5hIHBlc3F1aXNhLlwiLFxuICAgIGNyZWF0ZXRyaWdnZXI6IFwiUG9yIGZhdm9yLCBjcmllIHVtIGdhdGlsaG9cIixcbiAgICB0cmlnZ2VyT246IFwiTGlnYWRvIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIlRvcm5hciBww6FnaW5hcyB2aXPDrXZlaXM6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIlRvcm5hciBwZXJndW50YXMgdmlzw612ZXM6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJDb21wbGV0YXIgYSBwZXNxdWlzYSBzZSBvYnRpdmVyIMOqeGl0by5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIk8gZ2F0aWxobyBuw6NvIGVzdMOhIGRlZmluaWRvXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIkV4ZWN1dGFyIHNlXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJNdWRhciBvIHZhbG9yIGRlOiBcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwicGFyYTogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiTsOjbyBjb2xvY2FyIGEgdmFyacOhdmVsIG5vIHJlc3VsdGFkbyBkYSBwZXNxdWlzYS5cIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcImVzdMOhIHZhemlvXCIsXG4gICAgbm90ZW1wdHk6IFwibsOjbyBlc3TDoSB2YXppb1wiLFxuICAgIGVxdWFsOiBcIsOpIGlndWFsXCIsXG4gICAgbm90ZXF1YWw6IFwibsOjbyDDqSBpZ3VhbFwiLFxuICAgIGNvbnRhaW5zOiBcImNvbnTDqW1cIixcbiAgICBub3Rjb250YWluczogXCJuw6NvIGNvbnTDqW1cIixcbiAgICBncmVhdGVyOiBcIm1haW9yXCIsXG4gICAgbGVzczogXCJtZW5vclwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcIm1haW9yIG91IGlndWFsXCIsXG4gICAgbGVzc29yZXF1YWw6IFwibWVub3Igb3UgaWd1YWxcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiVXNhciB2ZXJzw6NvIEFuZ3VsYXJcIixcbiAgICBqcXVlcnk6IFwiVXNhciB2ZXJzw6NvIGpRdWVyeVwiLFxuICAgIGtub2Nrb3V0OiBcIlVzYXIgdmVyc8OjbyBLbm9ja291dFwiLFxuICAgIHJlYWN0OiBcIlVzYXIgdmVyc8OjbyBSZWFjdFwiLFxuICAgIHZ1ZTogXCJVc2FyIHZlcnPDo28gVnVlXCIsXG4gICAgYm9vdHN0cmFwOiBcIlBhcmEgZnJhbWV3b3JrIGJvb3RzdHJhcFwiLFxuICAgIHN0YW5kYXJkOiBcIlNlbSBib290c3RyYXBcIixcbiAgICBzaG93T25QYWdlOiBcIk1vc3RyYXIgcGVzcXVpc2EgZW0gdW1hIHDDoWdpbmFcIixcbiAgICBzaG93SW5XaW5kb3c6IFwiTW9zdHJhciBwZXNxdWlzYSBlbSB1bWEgamFuZWxhXCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiQ2FycmVnYXIgSlNPTiBkYSBwZXNxdWlzYSBkZSB1bSBzZXJ2aWRvclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgZSBlc3RpbG9zXCIsXG4gICAgdGl0bGVIdG1sOiBcIkhUTUxcIixcbiAgICB0aXRsZUphdmFTY3JpcHQ6IFwiSmF2YVNjcmlwdFwiXG4gIH0sXG4gIC8vUHJvcGVydGllc1xuICBwOiB7XG4gICAgbmFtZTogXCJub21lXCIsXG4gICAgdGl0bGU6IHsgbmFtZTogXCJ0w610dWxvXCIsIHRpdGxlOiBcIkRlaXhhciB2YXppbyBzZSBmb3IgbyBtZXNtbyBxdWUgJ05vbWUnXCIgfSxcbiAgICBzdXJ2ZXlfdGl0bGU6IHsgbmFtZTogXCJ0w610dWxvXCIsIHRpdGxlOiBcIlNlcsOhIG1vc3RyYWRvIGVtIGNhZGEgcMOhZ2luYS5cIiB9LFxuICAgIHBhZ2VfdGl0bGU6IHsgbmFtZTogXCJ0w610dWxvXCIsIHRpdGxlOiBcIlTDrXR1bG8gZGUgcMOhZ2luYVwiIH1cbiAgfVxufTtcblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwdFwiXSA9IHBvcnR1Z3Vlc2VUcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIHNpbXBsaWZpZWRDaGluZXNlVHJhbnNsYXRpb24gPSB7XG4gIC8vIHN0cmluZ3MgZm9yIHN1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCLnvJbovpFcIixcbiAgICBkcm9wUXVlc3Rpb246IFwi6K+35bCG6Zeu6aKY5pS+572u5LqO5q2kXCIsXG4gICAgY29weTogXCLlpI3liLZcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwi5re75Yqg5Yiw5bel5YW3566xXCIsXG4gICAgZGVsZXRlUGFuZWw6IFwi5Yig6Zmk6Z2i5p2/XCIsXG4gICAgZGVsZXRlUXVlc3Rpb246IFwi5Yig6Zmk6aKY55uuXCIsXG4gICAgY29udmVydFRvOiBcIui9rOWPmOS4ulwiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIHF1ZXN0aW9uIHR5cGVzXG4gIHF0OiB7XG4gICAgY2hlY2tib3g6IFwi5aSa6aG56YCJ5oupXCIsXG4gICAgY29tbWVudDogXCLlpJrooYzmlofmnKzmoYZcIixcbiAgICBkcm9wZG93bjogXCLkuIvmi4nmoYZcIixcbiAgICBmaWxlOiBcIuaWh+S7tuS4iuS8oFwiLFxuICAgIGh0bWw6IFwiSHRtbCDku6PnoIFcIixcbiAgICBtYXRyaXg6IFwi55+p6Zi1ICjljZXpgInpopgpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwi55+p6Zi1ICjkuIvmi4nmoYYpXCIsXG4gICAgbWF0cml4ZHluYW1pYzogXCLnn6npmLUgKOWKqOaAgemXrumimClcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwi5paH5pys5qGG57uEXCIsXG4gICAgcGFuZWw6IFwi6Z2i5p2/XCIsXG4gICAgcGFuZWxkeW5hbWljOiBcIumdouadvyjliqjmgIEpXCIsXG4gICAgcmFkaW9ncm91cDogXCLljZXpobnpgInmi6lcIixcbiAgICByYXRpbmc6IFwi6K+E5YiGXCIsXG4gICAgdGV4dDogXCLmlofmnKzmoYZcIixcbiAgICBib29sZWFuOiBcIuW4g+WwlOmAieaLqVwiLFxuICAgIGV4cHJlc3Npb246IFwi6KGo6L6+5byPXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3IgZWRpdG9yXG4gIGVkOiB7XG4gICAgc3VydmV5OiBcIuiwg+afpemXruWNt1wiLFxuICAgIGVkaXRTdXJ2ZXk6IFwi5L+u5pS5XCIsXG4gICAgYWRkTmV3UGFnZTogXCLmt7vliqDmlrDpobXpnaJcIixcbiAgICBkZWxldGVQYWdlOiBcIuWIoOmZpOmhtemdolwiLFxuICAgIGVkaXRQYWdlOiBcIue8lui+kemhtemdolwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcIumhtemdolwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCLpl67pophcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwi6Z2i5p2/XCIsXG4gICAgdGVzdFN1cnZleTogXCLmtYvor5Xpl67ljbdcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwi5YaN5qyh5rWL6K+V6Zeu5Y23XCIsXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIumXruWNt+WuveW6pjogXCIsXG4gICAgZW1iZWRTdXJ2ZXk6IFwi5bCG6Zeu5Y235bWM5YWl572R6aG1XCIsXG4gICAgc2F2ZVN1cnZleTogXCLkv53lrZjpl67ljbdcIixcbiAgICBkZXNpZ25lcjogXCLpl67ljbforr7orqHlmahcIixcbiAgICBqc29uRWRpdG9yOiBcIkpTT04g57yW6L6R5ZmoXCIsXG4gICAgdW5kbzogXCLmkqTplIBcIixcbiAgICByZWRvOiBcIuaBouWkjVwiLFxuICAgIG9wdGlvbnM6IFwi6YCJ6aG5XCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwi55Sf5oiQIEpTT04g5pWw5o2uXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwi55Sf5oiQ5piT6K+755qEIEpTT04g5pWw5o2uXCIsXG4gICAgdG9vbGJveDogXCLlt6XlhbfnrrFcIixcbiAgICBkZWxTZWxPYmplY3Q6IFwi5Yig6Zmk5omA6YCJ5a+56LGhXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCLnvJbovpHmiYDpgInlr7nosaFcIixcbiAgICBjb3JyZWN0SlNPTjogXCLor7fkv67mraMgSlNPTiDmlbDmja5cIixcbiAgICBzdXJ2ZXlSZXN1bHRzOiBcIumXruWNt+e7k+aenDogXCIsXG4gICAgbW9kaWZpZWQ6IFwi5bey5L+u5pS5XCIsXG4gICAgc2F2aW5nOiBcIuS/neWtmOS4rS4uLlwiLFxuICAgIHNhdmVkOiBcIuW3suS/neWtmFwiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcIuaYr+WQpuS4uuW/heWhq+mhuT9cIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBwcm9wZXJ0eSBlZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwi5bqU55SoXCIsXG4gICAgb2s6IFwi56Gu5a6aXCIsXG4gICAgY2FuY2VsOiBcIuWPlua2iFwiLFxuICAgIHJlc2V0OiBcIumHjee9rlwiLFxuICAgIGNsb3NlOiBcIuWFs+mXrVwiLFxuICAgIGRlbGV0ZTogXCLliKDpmaRcIixcbiAgICBhZGROZXc6IFwi5paw5bu6XCIsXG4gICAgcmVtb3ZlQWxsOiBcIuWFqOmDqOWIoOmZpFwiLFxuICAgIGVkaXQ6IFwi57yW6L6R5ZmoXCIsXG4gICAgZW1wdHk6IFwiPOepuj5cIixcbiAgICBmYXN0RW50cnk6IFwi5b+r6YCf6L6T5YWlXCIsXG4gICAgZm9ybUVudHJ5OiBcIuihqOWNlei+k+WFpVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIua1i+ivleacjeWKoVwiLFxuICAgIHNob3dNb3JlOiBcIuabtOWkmue7huiKguivt+afpeeci+aWh+aho1wiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICBcIuivt+i+k+WFpeS4gOS4quW4g+WwlOihqOi+vuW8j+OAguW9k+W4g+WwlOWAvOS4uuecn++8jOmXrumimC/pobXpnaLlj6/op4HjgILkvovlpoLvvJp7cXVlc3Rpb24xfSA9ICd2YWx1ZTEnIG9yICh7cXVlc3Rpb24yfSAqIHtxdWVzdGlvbjR9ICA+IDIwIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIuivt+i+k+WFpeS4gOmhueadoeS7tuWIpOaWreOAguW9k+adoeS7tuWIpOaWreS4uuecn+aXtumXrumimC/pobXpnaLlsIblj6/op4HjgILkvovlpoI6IHtxdWVzdGlvbjF9ID0gJ3ZhbHVlMScgb3IgKHtxdWVzdGlvbjJ9ID0gMyBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIHByb3BlcnR5SXNFbXB0eTogXCLor7fkuLror6XlsZ7mgKforr7lrprkuIDkuKrlgLxcIixcbiAgICB2YWx1ZTogXCLlgLxcIixcbiAgICB0ZXh0OiBcIuaYvuekuuaWh+acrFwiLFxuICAgIGNvbHVtbkVkaXQ6IFwi57yW6L6R5YiXOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCLnvJbovpHpgInpobk6IHswfVwiLFxuICAgIGhhc090aGVyOiBcIuWPr+a3u+WKoOWFtuS7luetlOahiD9cIixcbiAgICBvdGhlclRleHQ6IFwi5YW25LuW562U5qGI5paH5pysXCIsXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwiUGF0aFwiLFxuICAgIHZhbHVlTmFtZTogXCJWYWx1ZSBuYW1lXCIsXG4gICAgdGl0bGVOYW1lOiBcIlRpdGxlIG5hbWVcIixcbiAgICBuYW1lOiBcIumimOebruWQjVwiLFxuICAgIHRpdGxlOiBcIumimOebruaWh+acrFwiLFxuICAgIGNlbGxUeXBlOiBcIuWNleWFg+agvOexu+Wei1wiLFxuICAgIGNvbENvdW50OiBcIuWIl+aVsFwiLFxuICAgIGNob2ljZXNPcmRlcjogXCLorr7nva7pgInpobnpobrluo9cIixcbiAgICB2aXNpYmxlOiBcIuaYr+WQpuWPr+ingT9cIixcbiAgICBpc1JlcXVpcmVkOiBcIuaYr+WQpuS4uuW/heWhq+mhuT9cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIumXrumimOaYr+WQpuaWsOi1t+S4gOihjD9cIixcbiAgICByb3dzOiBcIuaWh+acrOahhuihjOaVsFwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIuWNoOS9jeaWh+acrFwiLFxuICAgIHNob3dQcmV2aWV3OiBcIuaYr+WQpuaYvuekuuWbvuWDj+mihOiniD9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwi5LulIEpTT04g5paH5pys5pa55byP5a2Y5YKo5paH5Lu2XCIsXG4gICAgbWF4U2l6ZTogXCLmlofku7bmnIDlpKflsLrlr7ggKEJ5dGVzKVwiLFxuICAgIGltYWdlSGVpZ2h0OiBcIuWbvueJh+mrmOW6plwiLFxuICAgIGltYWdlV2lkdGg6IFwi5Zu+54mH5a695bqmXCIsXG4gICAgcm93Q291bnQ6IFwi6buY6K6k6KGM5pWwXCIsXG4gICAgYWRkUm93VGV4dDogXCLmt7vliqDmnaHnm67mjInpkq7mlofmnKxcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcIuWIoOmZpOadoeebruaMiemSruaWh+acrFwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCLmnIDlsI/lgLzmj5DnpLpcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwi5pyA5aSn5YC85o+Q56S6XCIsXG4gICAgaW5wdXRUeXBlOiBcIuaWh+acrOahhuexu+Wei1wiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIuS4i+aLieahhuaPkOekuuivrVwiLFxuICAgIHFFZGl0b3JUaXRsZTogXCLnvJbovpHpl67popg6IHswfVwiLFxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIuaYvuekui/pmpDol48g5qCH6aKYXCIsXG4gICAgbG9jYWxlOiBcIum7mOiupOivreiogFwiLFxuICAgIG1vZGU6IFwi5qih5byPICjnvJbovpEv5Y+q6K+7KVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIua4hemZpOmakOiXj+WAvFwiLFxuICAgIGNvb2tpZU5hbWU6IFwiQ29va2llIG5hbWUgKHRvIGRpc2FibGUgcnVuIHN1cnZleSB0d28gdGltZXMgbG9jYWxseSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJTZW5kIHN1cnZleSByZXN1bHRzIG9uIHBhZ2UgbmV4dFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIlN0b3JlICdvdGhlcnMnIHZhbHVlIGluIHNlcGFyYXRlIGZpZWxkXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwi5pi+56S66aG16Z2i5qCH6aKYXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIuaYvuekuumhteaVsFwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCLliY3kuIDpobXmjInpkq7mlofmnKxcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi5ZCO5LiA6aG15oyJ6ZKu5paH5pysXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuWujOaIkOaMiemSruaWh+acrFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLlvIDlp4vmjInpkq7mlofmnKxcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwi5pi+56S65a+86Iiq5oyJ6ZKuICjpu5jorqTlr7zoiKopXCIsXG4gICAgc2hvd1ByZXZCdXR0b246IFwi5pi+56S65YmN5LiA6aG15oyJ6ZKuICjnlKjmiLflj6/ov5Tlm57oh7PliY3kuIDpobXpnaIpXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIuiwg+afpeeahOesrOS4gOmhtemdouS4uui1t+Wni+mhtS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCLnu5PlsL7lsZXnpLrlrozmiJDlkI7nmoTpobXpnaIgKGNvbXBsZXRlZEh0bWwpXCIsXG4gICAgZ29OZXh0UGFnZUF1dG9tYXRpYzogXCLlm57nrZTmnKzpobXmiYDmnInpl67popjlkI7vvIzoh6rliqjot7PovazliLDkuIvkuIDpobVcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwi5pi+56S66L+b5bqm5p2hXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIumXrumimOeahOagh+mimOS9jee9rlwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJUaGUgcXVlc3Rpb24gcmVxdWlyZWQgc3ltYm9sKHMpXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIumXrumimOi1t+Wni+agh+W/lyAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIuaYvuekuumXrumimOe8luWPt1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCLpl67popjmoIfpopjmqKHmnb8sIOm7mOiupOS4ujogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCLpl67popjplJnor6/lrprkvY1cIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwi5pS55Y+Y6aG16Z2i5pe26IGa54Sm5Zyo56ys5LiA5Liq6Zeu6aKYXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwiRWxlbWVudHMgb3JkZXIgb24gdGhlIHBhZ2VcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwi5a6M5oiQ6LCD5p+l55qE5pyA6ZW/5pe26Ze0XCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCLlrozmiJDosIPmn6XkuK3pobXpnaLnmoTmnIDplb/ml7bpl7RcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCLmmL7npLrorqHml7blmajpnaLmnb9cIixcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwi5pi+56S66K6h5pe25Zmo6Z2i5p2/5qih5byPXCIsXG4gICAgcmVuZGVyTW9kZTogXCLmuLLmn5PmqKHlvI9cIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIuWFgeiuuOa3u+WKoOmdouadv1wiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwi5YWB6K645Yig6Zmk6Z2i5p2/XCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcIua3u+WKoOmdouadv+aWh+acrFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCLliKDpmaTpnaLmnb/mlofmnKxcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwi5Zyo5LiA5Liq6aG16Z2i5LiK5bGV56S65omA5pyJ5YWD57SgXCIsXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCLpgJrnlKjpoblcIixcbiAgICAgIG5hdmlnYXRpb246IFwi5a+86IiqXCIsXG4gICAgICBxdWVzdGlvbjogXCLpl67pophcIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwi5a6M5oiQ5ZCO55qESHRtbFwiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwi5Yqg6L295Lit55qESHRtbFwiLFxuICAgICAgdGltZXI6IFwi6Zeu5Y236K6h5pe25ZmoXCIsXG4gICAgICB0cmlnZ2VyOiBcIuinpuWPkeWZqFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwi6YCJ6aG5XCIsXG4gICAgICBodG1sOiBcIkhUTUwg57yW6L6R5ZmoXCIsXG4gICAgICBjb2x1bW5zOiBcIuiuvue9ruWIl1wiLFxuICAgICAgcm93czogXCLorr7nva7ooYxcIixcbiAgICAgIGNob2ljZXM6IFwi6K6+572u6YCJ6aG5XCIsXG4gICAgICB2aXNpYmxlSWY6IFwi6K6+572u5Y+v6KeB5p2h5Lu2XCIsXG4gICAgICBlbmFibGVJZjogXCJFbmFibGUgSWZcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwi6K6+572u6K+E5YiG5YC8XCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwi6YCa6L+HIFVSTCDlr7zlhaXpgInpoblcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwi6buY6K6k6YCJ6aG5XCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCLmlofmnKzovpPlhaVcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwi5qCh6aqM6KeE5YiZXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCLnvJbovpHlsZ7mgKc6ICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyDpobnnm67mlbDph486IHswfSBdXCIsXG4gICAgZW50ZXJOZXdWYWx1ZTogXCLor7forr7lrprlgLxcIixcbiAgICBub3F1ZXN0aW9uczogXCLpl67ljbfkuK3ov5jmsqHmnInliJvlu7rku7vkvZXpl67pophcIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIuivt+WIm+W7uuinpuWPkeWZqFwiLFxuICAgIHRyaWdnZXJPbjogXCLlvZMgXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwi5L2/6aG16Z2i5Y+v6KeBOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCLkvb/pl67popjlj6/op4E6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCLlpoLmnpzmu6HotrPmnaHku7bvvIzliJnlrozmiJDpl67ljbdcIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIuinpuWPkeWZqOWwmuacquiuvue9rlwiLFxuICAgIHRyaWdnZXJSdW5JZjogXCLmu6HotrPkuIvliJfmnaHku7bml7bmiafooYxcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcIuS/ruaUueS4i+WIl+mXrumimOWAvDogXCIsXG4gICAgdHJpZ2dlclNldFZhbHVlOiBcIuS/ruaUueS4ujogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwi5Zyo6Zeu5Y235o+Q5Lqk57uT5p6c5Lit5LiN6KaB5YyF5ZCr6K+l5Y+Y6YePXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3Igb3BlcmF0b3JzXG4gIG9wOiB7XG4gICAgZW1wdHk6IFwi5Li656m6XCIsXG4gICAgbm90ZW1wdHk6IFwi5LiN5Li656m6XCIsXG4gICAgZXF1YWw6IFwi562J5LqOXCIsXG4gICAgbm90ZXF1YWw6IFwi5LiN562J5LqOXCIsXG4gICAgY29udGFpbnM6IFwi5YyF5ZCrXCIsXG4gICAgbm90Y29udGFpbnM6IFwi5LiN5YyF5ZCrXCIsXG4gICAgZ3JlYXRlcjogXCLlpKfkuo5cIixcbiAgICBsZXNzOiBcIuWwj+S6jlwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcIuWkp+S6juetieS6jlwiLFxuICAgIGxlc3NvcmVxdWFsOiBcIuWwj+S6juetieS6jlwiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIGVtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwi5L2/55SoIEFuZ3VsYXIg5pe2XCIsXG4gICAganF1ZXJ5OiBcIuS9v+eUqCBKUXVlcnkg5pe2XCIsXG4gICAga25vY2tvdXQ6IFwi5L2/55SoIEtub2Nrb3V0IOaXtlwiLFxuICAgIHJlYWN0OiBcIuS9v+eUqCBSZWFjdCDml7ZcIixcbiAgICB2dWU6IFwi5L2/55SoIFZ1ZSDml7ZcIixcbiAgICBib290c3RyYXA6IFwi5L2/55SoIEJvb3RzdHJhcCDml7ZcIixcbiAgICBzdGFuZGFyZDogXCLkuI3kvb/nlKggQm9vdHN0cmFwIOaXtlwiLFxuICAgIHNob3dPblBhZ2U6IFwi5bWM5YWl6aG16Z2i5pi+56S6XCIsXG4gICAgc2hvd0luV2luZG93OiBcIuS9v+eUqOWNleeLrOeahOmXruWNt+eql+WPo1wiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcIuS7juacjeWKoeWZqOWKoOi9vemXruWNtyBKU09OIOaVsOaNrlwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIuiEmuacrOWSjOagt+W8j1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwi5pWw6YeP5qOA5p+lXCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiRW1haWxcIixcbiAgICBudW1lcmljdmFsaWRhdG9yOiBcIuaVsOWtl1wiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcIuato+WImeihqOi+vuW8j1wiLFxuICAgIHRleHR2YWxpZGF0b3I6IFwi5paH5pysXCJcbiAgfSxcbiAgdHJpZ2dlcnM6IHtcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwi5a6M5oiQ6Zeu5Y23XCIsXG4gICAgc2V0dmFsdWV0cmlnZ2VyOiBcIuiuvue9rumXrumimOWAvFwiLFxuICAgIHZpc2libGV0cmlnZ2VyOiBcIuS/ruaUueWPr+ingeaAp1wiXG4gIH0sXG4gIC8vIHN0cmluZ3Mgb2YgcHJvcGVydGllc1xuICBwOiB7XG4gICAgY29tbWVudFRleHQ6IFwi5aSH5rOo5paH5pysXCIsXG4gICAgY2hvaWNlczogXCLpgInpoblcIixcbiAgICBjaG9pY2VzQnlVcmw6IFwiVXJs6YCJ6aG5XCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIumAiemhueaOkuW6j1wiLFxuICAgIGNvbENvdW50OiBcIuWIl+aVsFwiLFxuICAgIGNvcnJlY3RBbnN3ZXI6IFwi5q2j56Gu562U5qGIXCIsXG4gICAgZGVmYXVsdFZhdWxlOiBcIum7mOiupOmAiemhuVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIuivtOaYjlwiLFxuICAgIGVuYWJsZUlmOiBcIuWFgeiuuOWIpOaWrVwiLFxuICAgIGhhc0NvbW1lbnQ6IFwiaGFzQ29tbWVudFwiLFxuICAgIGhhc090aGVyOiBcIuWFgeiuuOWFtuS7luetlOahiFwiLFxuICAgIG90aGVyVGV4dDogXCLlhbbku5bnrZTmoYjmlofmnKxcIixcbiAgICBwYWdlOiBcIuaJgOWcqOmhtemdolwiLFxuICAgIHJlYWRPbmx5OiBcIuWPquivu1wiLFxuICAgIGluZGVudDogXCLnvKnov5tcIixcbiAgICBpc1JlcXVpcmVkOiBcIuW/hemAiVwiLFxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgb3RoZXJFcnJvclRleHQ6IFwicmVxdWlyZWRFcnJvclRleHRcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIuWFgeiuuOmXrumimOWcqOaWsOihjFwiLFxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIuaYvuekui/pmpDol48g5qCH6aKYXCIsXG4gICAgbG9jYWxlOiBcIum7mOiupOivreiogFwiLFxuICAgIG1vZGU6IFwi5qih5byPICjnvJbovpEv5Y+q6K+7KVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIua4hemZpOmakOiXj+WAvFwiLFxuICAgIGNvb2tpZU5hbWU6IFwiQ29va2llIG5hbWUgKHRvIGRpc2FibGUgcnVuIHN1cnZleSB0d28gdGltZXMgbG9jYWxseSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJTZW5kIHN1cnZleSByZXN1bHRzIG9uIHBhZ2UgbmV4dFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIlN0b3JlICdvdGhlcnMnIHZhbHVlIGluIHNlcGFyYXRlIGZpZWxkXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwi5pi+56S66aG16Z2i5qCH6aKYXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIuaYvuekuumhteaVsFwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCLliY3kuIDpobXmjInpkq7mlofmnKxcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwi5ZCO5LiA6aG15oyJ6ZKu5paH5pysXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuWujOaIkOaMiemSruaWh+acrFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLlvIDlp4vmjInpkq7mlofmnKxcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwi5pi+56S65a+86Iiq5oyJ6ZKuICjpu5jorqTlr7zoiKopXCIsXG4gICAgc2hvd1ByZXZCdXR0b246IFwi5pi+56S65YmN5LiA6aG15oyJ6ZKuICjnlKjmiLflj6/ov5Tlm57oh7PliY3kuIDpobXpnaIpXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIuiwg+afpeeahOesrOS4gOmhtemdouS4uui1t+Wni+mhtS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCLnu5PlsL7lsZXnpLrlrozmiJDlkI7nmoTpobXpnaIgKGNvbXBsZXRlZEh0bWwpXCIsXG4gICAgZ29OZXh0UGFnZUF1dG9tYXRpYzogXCLlm57nrZTmnKzpobXmiYDmnInpl67popjlkI7vvIzoh6rliqjot7PovazliLDkuIvkuIDpobVcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwi5pi+56S66L+b5bqm5p2hXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIumXrumimOeahOagh+mimOS9jee9rlwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJUaGUgcXVlc3Rpb24gcmVxdWlyZWQgc3ltYm9sKHMpXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIumXrumimOi1t+Wni+agh+W/lyAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIuaYvuekuumXrumimOe8luWPt1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCLpl67popjmoIfpopjmqKHmnb8sIOm7mOiupOS4ujogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCLpl67popjplJnor6/lrprkvY1cIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwi5pS55Y+Y6aG16Z2i5pe26IGa54Sm5Zyo56ys5LiA5Liq6Zeu6aKYXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwi6aG16Z2i5Lit5YWD57Sg55qE6aG65bqPXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIuWujOaIkOiwg+afpeeahOacgOmVv+aXtumXtFwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwi5a6M5oiQ6LCD5p+l5Lit6aG16Z2i55qE5pyA6ZW/5pe26Ze0XCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwi5pi+56S66K6h5pe25Zmo6Z2i5p2/XCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIuaYvuekuuiuoeaXtuWZqOmdouadv+aooeW8j1wiLFxuICAgIHJlbmRlck1vZGU6IFwi5riy5p+T5qih5byPXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCLlhYHorrjmt7vliqDpnaLmnb9cIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIuWFgeiuuOWIoOmZpOmdouadv1wiLFxuICAgIHBhbmVsQWRkVGV4dDogXCLmt7vliqDpnaLmnb/mlofmnKxcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwi5Yig6Zmk6Z2i5p2/5paH5pysXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIuWcqOS4gOS4qumhtemdouS4iuWxleekuuaJgOacieWFg+e0oFwiLFxuICAgIG5hbWU6IFwi5ZCN5a2XXCIsXG4gICAgdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwi5qCH6aKYXCIsXG4gICAgICB0aXRsZTogXCLlpoLmnpzkuI7lkI3lrZfnm7jlkIzvvIzor7forr7nva7kuLrnqbrlgLxcIlxuICAgIH0sXG4gICAgc3VydmV5X3RpdGxlOiB7XG4gICAgICBuYW1lOiBcIuagh+mimFwiLFxuICAgICAgdGl0bGU6IFwi6Zeu5Y235qCH6aKY5Zyo5q+P6aG15LiK6YO95Lya5pi+56S6XCJcbiAgICB9LFxuICAgIHBhZ2VfdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwi5qCH6aKYXCIsXG4gICAgICB0aXRsZTogXCLpobXpnaLmoIfpophcIlxuICAgIH1cbiAgfVxufTtcblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ6aC1jblwiXSA9IHNpbXBsaWZpZWRDaGluZXNlVHJhbnNsYXRpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3NpbXBsaWZpZWQtY2hpbmVzZS50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIHNwYW5pc2hUcmFuc2xhdGlvbiA9IHtcbiAgLy8gc3RyaW5ncyBmb3Igc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIkVkaXRhclwiLFxuICAgIGRyb3BRdWVzdGlvbjpcbiAgICAgIFwiUG9yIGZhdm9yIGNvbG9xdWUgdW5hIHByZWd1bnRhIGFxdcOtIGRlIGxhIGNhamEgZGUgaGVycmFtaWVudGFzIGVuIGxhIGl6cXVpZXJkYS5cIixcbiAgICBjb3B5OiBcIkNvcGlhclwiLFxuICAgIGFkZFRvVG9vbGJveDogXCJBw7FhZGlyIGEgbGEgY2FqYSBkZSBoZXJyYW1pZW50YXNcIixcbiAgICBkZWxldGVQYW5lbDogXCJFbGltaW5hciBQYW5lbFwiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIkJvcnJhciBQcmVndW50YVwiLFxuICAgIGNvbnZlcnRUbzogXCJDb252ZXJ0aXIgYVwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGNoZWNrYm94OiBcIkNoZWNrYm94XCIsXG4gICAgY29tbWVudDogXCJDb21lbnRhcmlvXCIsXG4gICAgZHJvcGRvd246IFwiRHJvcGRvd25cIixcbiAgICBmaWxlOiBcIkFyY2hpdm9cIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBtYXRyaXg6IFwiTWF0cml6IChlbGVjY2nDs24gw7puaWNhKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIk1hdHJpeiAoZWxlY2Npw7NuIG3Dumx0aXBsZSlcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpeiAoZmlsYXMgZGluw6FtaWNhcylcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwiVGV4dG8gbcO6bHRpcGxlXCIsXG4gICAgcGFuZWw6IFwiUGFuZWxcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwiUGFuZWwgKHBhbmVsZXMgZGluw6FtaWNvcylcIixcbiAgICByYWRpb2dyb3VwOiBcIkdydXBvIGRlIHJhZGlvXCIsXG4gICAgcmF0aW5nOiBcIlJhdGluZ1wiLFxuICAgIHRleHQ6IFwiRW50cmFkYSBzZW5jaWxsYVwiLFxuICAgIGJvb2xlYW46IFwiQm9vbGVhbm9cIixcbiAgICBleHByZXNzaW9uOiBcIkV4cHJlc2nDs25cIlxuICB9LFxuICAvL1N0cmluZ3MgaW4gRWRpdG9yXG4gIGVkOiB7XG4gICAgc3VydmV5OiBcIkVuY3Vlc3RhXCIsXG4gICAgZWRpdFN1cnZleTogXCJFZGl0YXIgRW5jdWVzdGFcIixcbiAgICBhZGROZXdQYWdlOiBcIkHDsWFkaXIgTnVldmEgUMOhZ2luYVwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwiQm9ycmFyIFDDoWdpbmFcIixcbiAgICBlZGl0UGFnZTogXCJFZGl0YXIgUMOhZ2luYVwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcInDDoWdpbmFcIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwicHJlZ3VudGFcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwicGFuZWxcIixcbiAgICB0ZXN0U3VydmV5OiBcIlByb2JhciBFbmN1ZXN0YVwiLFxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJQcm9iYXIgRW5jdWVzdGEgT3RyYSBWZXpcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwiQW5jaG8gZGUgRW5jdWVzdGE6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtcG90cmFyIEVuY3Vlc3RhXCIsXG4gICAgc2F2ZVN1cnZleTogXCJHdWFyZGFyIEVuY3Vlc3RhXCIsXG4gICAgZGVzaWduZXI6IFwiRGlzZcOxYWRvciBkZSBFbmN1ZXN0YVwiLFxuICAgIGpzb25FZGl0b3I6IFwiRWRpdG9yIGRlIEpTT05cIixcbiAgICB1bmRvOiBcIkRlc2hhY2VyXCIsXG4gICAgcmVkbzogXCJSZWhhY2VyXCIsXG4gICAgb3B0aW9uczogXCJPcGNpb25lc1wiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIkdlbmVyYXIgSlNPTiB2w6FsaWRvXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiR2VuZXJhciBKU09OIGxlZ2libGVcIixcbiAgICB0b29sYm94OiBcIkNhamEgZGUgaGVycmFtaWVudGFzXCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcIkJvcnJhciBvYmpldG8gc2VsZWNjaW9uYWRvXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCJFZGl0YXIgb2JqZXRvIHNlbGVjY2lvbmFkb1wiLFxuICAgIGNvcnJlY3RKU09OOiBcIlBvciBmYXZvciBjb3JyaWphIEpTT04uXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJSZXN1bHRhZG8gZGUgRW5jdWVzdGE6IFwiLFxuICAgIG1vZGlmaWVkOiBcIk1vZGlmaWNhZG9cIixcbiAgICBzYXZpbmc6IFwiU2FsdmFuZG9cIixcbiAgICBzYXZlZDogXCJTYWx2YWRvXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBuYW1lcyBpbiB0YWJsZSBoZWFkZXJzXG4gIHBlbDoge1xuICAgIGlzUmVxdWlyZWQ6IFwiUmVxdWVyaWRvP1wiXG4gIH0sXG4gIC8vUHJvcGVydHkgRWRpdG9yc1xuICBwZToge1xuICAgIGFwcGx5OiBcIkFwbGljYXJcIixcbiAgICBvazogXCJPS1wiLFxuICAgIGNhbmNlbDogXCJDYW5jZWxhclwiLFxuICAgIHJlc2V0OiBcIlJlc3RhdXJhclwiLFxuICAgIGNsb3NlOiBcIkNlcnJhclwiLFxuICAgIGRlbGV0ZTogXCJCb3JyYXJcIixcbiAgICBhZGROZXc6IFwiQcOxYWRpciBudWV2b1wiLFxuICAgIGFkZEl0ZW06IFwiQ2xpY2sgcGFyYSBhw7FhZGlyIGFydGljdWxvLi4uXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlF1aXRhciB0b2Rvc1wiLFxuICAgIGVkaXQ6IFwiRWRpdGFyXCIsXG4gICAgbW92ZTogXCJNb3ZlclwiLFxuICAgIGVtcHR5OiBcIjx2YWPDrW8+XCIsXG4gICAgZmFzdEVudHJ5OiBcIkVudHJhZGEgcsOhcGlkYVwiLFxuICAgIGZvcm1FbnRyeTogXCJFbnRyYXIgZW4gZm9ybWFcIixcbiAgICB0ZXN0U2VydmljZTogXCJQcnVlYmUgZWwgc2VydmljaW9cIixcbiAgICBjb25kaXRpb25TZWxlY3RRdWVzdGlvbjogXCJTZWxlY2Npb25hciBwcmVndW50YS4uLlwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvbkFkZDogXCJBw7FhZGlyXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCJSZWVtcGxhemFyXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgIFwiUG9yIGZhdm9yIHByb3BvcmNpb25lIHVuYSBleHByZXNpw7NuIGJvb2xlYW5hLiBEZWJlcsOtYSByZWdyZXNhciB2ZXJkYWRlcm8gcGFyYSBtYW50ZW5lciBsYSBwcmVndW50YS9ww6FnaW5hIHZpc2libGUuIFBvciBlamVtcGxvOiB7cHJlZ3VudGExfSA9ICd2YWxvcjEnIG9yICh7cHJlZ3VudGEyfSAqIHtwcmVndW50YTR9ICA+IDIwIGFuZCB7cHJlZ3VudGEzfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIlBvciBmYXZvciBwcm9wb3JjaW9uZSB1bmEgZXhwcmVzacOzbi4gUHVlZGUgaGFjZXIgdXNvIGRlIGxsYXZlcyBwYXJhIHRlbmVyIGFjY2VzbyBhIGxvcyB2YWxvcmVzIGRlIGxhIHByZWd1bnRhOiAne3ByZWd1bnRhMX0gKyB7cHJlZ3VudGEyfScsICcoe3ByZWNpb30qe2NhbnRpZGFkfSkgKiAoMTAwIC0ge2Rlc2N1ZW50b30pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6XG4gICAgICBcIlByZXNpb25lIGN0cmwrZXNwYWNpbyBwYXJhIG9idGVuZXIgdW4gaW5kaWNpbyBkZSBjb21wbGV0YWRvIGRlIGV4cHJlc2nDs25cIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJGaWxhIGFjdHVhbFwiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiUGFuZWwgYWN0dWFsXCIsXG4gICAgc2hvd01vcmU6IFwiUG9yIGZhdm9yIHVzZSBsYSBkb2N1bWVudGFjacOzbiBwYXJhIG3DoXMgZGV0YWxsZXNcIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJQcmVndW50YXMgZGlzcG9uaWJsZXM6XCIsXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIlBvciBmYXZvciBwcm9wb3JjaW9uZSB1biB2YWxvclwiLFxuICAgIHZhbHVlOiBcIlZhbG9yXCIsXG4gICAgdGV4dDogXCJUZXh0b1wiLFxuICAgIGNvbHVtbkVkaXQ6IFwiRWRpdGFyIGNvbHVtbmE6IHswfVwiLFxuICAgIGl0ZW1FZGl0OiBcIkVkaXRhciBhcnTDrWN1bG86IHswfVwiLFxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcInRyYXllY3RvXCIsXG4gICAgdmFsdWVOYW1lOiBcIk5vbWJyZSBkZWwgdmFsb3JcIixcbiAgICB0aXRsZU5hbWU6IFwiVMOtdHVsb1wiLFxuICAgIGhhc090aGVyOiBcIlRpZW5lIG90cm8gYXJ0w61jdWxvXCIsXG4gICAgb3RoZXJUZXh0OiBcIlRleHRvIGRlIG90cm8gYXJ0w61jdWxvXCIsXG4gICAgbmFtZTogXCJOb21icmVcIixcbiAgICB0aXRsZTogXCJUw610dWxvXCIsXG4gICAgY2VsbFR5cGU6IFwiVGlwbyBkZSBjZWxkYVwiLFxuICAgIGNvbENvdW50OiBcIkNvbnRlbyBkZSBjb2x1bW5hc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJPcmRlbiBkZSBzZWxlY2Npw7NuIGRlIGVsZWNjaW9uZXNcIixcbiAgICB2aXNpYmxlOiBcIkVzIHZpc2libGU/XCIsXG4gICAgaXNSZXF1aXJlZDogXCJFcyByZXF1ZXJpZG8/XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJFcyBpbmljaW8gY29uIG51ZXZhIGzDrW5lYT9cIixcbiAgICByb3dzOiBcIkNvbnRlbyBkZSBmaWxhc1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcIk1hcmNhZG9yIGRlIGVudHJhZGFcIixcbiAgICBzaG93UHJldmlldzogXCJTZSBtdWVzdHJhIGF2YW5jZSBkZSBpbWFnZW4/XCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OlxuICAgICAgXCJHdWFyZGFyIGNvbnRlbmlkbyBkZSBhcmNoaXZvIGVuIHJlc3VsdGFkbyBKU09OIGNvbW8gdGV4dG9cIixcbiAgICBtYXhTaXplOiBcIlRhbWHDsW8gbcOheGltbyBkZSBhcmNoaXZvIGVuIGJ5dGVzXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiQWx0dXJhIGRlIGltYWdlblwiLFxuICAgIGltYWdlV2lkdGg6IFwiQW5jaG8gZGUgaW1hZ2VuXCIsXG4gICAgcm93Q291bnQ6IFwiQ29udGVvIGRlIGZpbGFzXCIsXG4gICAgYWRkUm93VGV4dDogXCJBw7FhZGlyIHRleHRvIGRlIGJvdG9uIGRlIGZpbGFcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcIlF1aXRhciB0ZXh0byBkZSBib3RvbiBkZSBmaWxhXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXBjacOzbiBkZSBsYSB0YXNhIG3DrW5pbWFcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiRGVzY3JpcGNpw7NuIGRlIGxhIHRhcmlmYSBtw6F4aW1hXCIsXG4gICAgaW5wdXRUeXBlOiBcIlRpcG8gZGUgZW50cmFkYVwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkxleWVuZGEgZGUgb3BjaW9uZXNcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiVmFsb3IgZGUgZGVmZWN0b1wiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiRWRpdGFyIGFqdXN0ZXMgZGUgZW5jdWVzdGFcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdGFyOiB7MH1cIixcblxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIk1vc3RyYXIvZXNjb25kZXIgdMOtdHVsb1wiLFxuICAgIGxvY2FsZTogXCJMZW5ndWFqZSBkZSBkZWZlY3RvXCIsXG4gICAgbW9kZTogXCJNb2RvIChlZGl0YXIvc29sbyBsZWN0dXJhKVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIkJvcnJhciB2YWxvcmVzIGludmlzaWJsZXNcIixcbiAgICBjb29raWVOYW1lOlxuICAgICAgXCJOb21icmUgZGUgQ29va2llIChwYXJhIGRlc2hhYmlsaXRhciBjb3JyYSBlbmN1ZXN0YSBkb3MgdmVjZXMgbG9jYWxtZW50ZSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJNYW5kYXIgcmVzdWx0YWRvcyBkZSBlbmN1ZXN0YSBlbiBww6FnaW5hIHNpZ3VpZW50ZVwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIkd1YXJkYXIgdmFsb3IgJ290cm9zJyBlbiBjYW1wbyBzZXBhcmFkb1wiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIk1vc3RyYXIgdMOtdHVsb3MgZGUgcMOhZ2luYVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJNb3N0cmFyIG7Dum1lcm9zIGRlIHDDoWdpbmFcIixcbiAgICBwYWdlUHJldlRleHQ6IFwiVGV4dG8gZGUgYm90w7NuIGRlIHDDoWdpbmEgcHJldmlhXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlRleHRvIGRlIGJvdMOzbiBkZSBww6FnaW5hIHByw7N4aW1hXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlRleHRvIGRlIGJvdMOzbiBkZSBjb21wbGV0YWRvXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlRleHRvIGRlIGJvdMOzbiBkZSBpbmljaW9cIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6XG4gICAgICBcIk1vc3RyYXIgYm90b25lcyBkZSBuYXZpZ2FjacOzbiAobmF2ZWdhY2nDs24gZGUgZGVmZWN0bylcIixcbiAgICBzaG93UHJldkJ1dHRvbjpcbiAgICAgIFwiTW9zdHJhciBib3TDs24gcHJldmlvIChlbCB1c3VhcmlvIHB1ZWRlIHJlZ3Jlc2FyIGVuIHDDoWdpbmEgcHJldmlhKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDpcbiAgICAgIFwiTGEgcHJpbWVyYSBww6FnaW5hIGVuIGxhIGVuY3Vlc3RhIGVzIHVuYSBww6FnaW5hIGluaWNpYWRhLlwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIk1vc3RyYXIgbGEgcMOhZ2luYSBjb21wbGV0YWRhIGFsIGZpbmFsIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIkFsIGNvbnRlc3RhciB0b2RhcyBsYXMgcHJlZ3VudGFzLCBpciBhIGxhIHByw7N4aW1hIHDDoWdpbmEgYXV0b23DoXRpY2FtZW50ZVwiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCJNb3N0cmFyIGJhcnJhIGRlIHByb2dyZXNvXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIkxvY2FsaXphY2nDs24gZGUgdMOtdHVsbyBkZSBwcmVndW50YVwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJMYSBwcmVndW50YSByZXF1aWVyZSBkZSBzw61tYm9sbyhzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLDjW5kaWNlIGRlIGluaWNpbyBkZSBwcmVndW50YSAoMSwgMiBvICdBJywgJ2EnKVwiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwiTW9zdHJhciBuw7ptZXJvcyBkZSBwcmVndW50YXNcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIlBsYW50aWxsYSBkZSB0w610dWxvIGRlIHByZWd1bnRhLCBkZWZlY3RvIGVzOiAne25vfS4ge3JlcXVpcmV9IHt0aXRsZX0nXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcIkxvY2FsaXphY2nDs24gZGUgZXJyb3IgZGUgcHJlZ3VudGFcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6XG4gICAgICBcIkZvY28gZW4gcHJpbWVyYSBwcmVndW50YSBhbCBjYW1iaWFyIGxhIHDDoWdpbmFcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCLDk3JkZW4gZGUgZWxlbWVudG9zIGVuIGxhIHDDoWdpbmFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiVGllbXBvIG3DoXhpbW8gcGFyYSBmaW5hbGl6YXIgbGEgZW5jdWVzdGFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOlxuICAgICAgXCJUaWVtcG8gbcOheGltbyBwYXJhIGZpbmFsaXphciB1bmEgcMOhZ2luYSBlbiBsYSBlbmN1ZXN0YVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIk1vc3RyYXIgcGFuZWwgZGUgdGVtcG9yaXphZG9yXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIk1vZG8gZGUgbXVlc3RyYSBkZSBwYW5lbCBkZSB0ZW1wb3JpemFkb3JcIixcbiAgICByZW5kZXJNb2RlOiBcIk1vZG8gZGUgaW50ZXJwcmV0YWRvclwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiUGVybWl0aXIgYWRpY2nDs24gZGUgdW4gcGFuZWxcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIlBlcm1pdGlyIHJlbW9jacOzbiBkZWwgcGFuZWxcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQcOxYWRpZW5kbyB0ZXh0byBkZSBwYW5lbFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJRdWl0YW5kbyB0ZXh0byBkZSBwYW5lbFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJNb3N0cmFyIHRvZG9zIGxvcyBlbGVtZW50b3MgZW4gdW5hIHDDoWdpbmFcIixcblxuICAgIHRhYnM6IHtcbiAgICAgIGdlbmVyYWw6IFwiR2VuZXJhbFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwiT3BjaW9uZXNcIixcbiAgICAgIGh0bWw6IFwiRWRpdG9yIEh0bWxcIixcbiAgICAgIGNvbHVtbnM6IFwiQ29sdW1uYXNcIixcbiAgICAgIHJvd3M6IFwiRmlsYXNcIixcbiAgICAgIGNob2ljZXM6IFwiT3BjaW9uZXNcIixcbiAgICAgIHZpc2libGVJZjogXCJWaXNpYmxlIFNpXCIsXG4gICAgICBlbmFibGVJZjogXCJIYWJpbGl0YXIgU2lcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwiVmFsb3JlcyBkZSB0YXNhXCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiT3BjaW9uZXMgZGUgbGEgV2ViXCIsXG4gICAgICBtYXRyaXhDaG9pY2VzOiBcIk9wY2lvbmVzIGRlIGRlZmVjdG9cIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIkVudHJhZGFzIGRlIHRleHRvXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcIlZhbGlkYWRvcmVzXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmVnYWNpw7NuXCIsXG4gICAgICBxdWVzdGlvbjogXCJQcmVndW50YVwiLFxuICAgICAgY29tcGxldGVkSHRtbDogXCJIdG1sIENvbXBsZXRhZG9cIixcbiAgICAgIGxvYWRpbmdIdG1sOiBcIkNhcmdhbmRvIEh0bWxcIixcbiAgICAgIHRpbWVyOiBcIlRlbXBvcml6YWRvci9RdWl6XCIsXG4gICAgICB0cmlnZ2VyczogXCJEaXNwYXJhZG9yZXNcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiVMOtdHVsbyBkZSBwbGFudGlsbGFcIlxuICAgIH0sXG4gICAgZWRpdFByb3BlcnR5OiBcIkVkaXRhciBwcm9waWVkYWQgJ3swfSdcIixcbiAgICBpdGVtczogXCJbIEl0ZW1zOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJQb3IgZmF2b3IsIHByb3BvcmNpb25lIGVsIHZhbG9yLlwiLFxuICAgIG5vcXVlc3Rpb25zOiBcIk5vIGhheSBuaSB1bmEgcHJlZ3VudGEgZW4gbGEgZW5jdWVzdGEuXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJQb3IgZmF2b3IgY3JlZSB1biBkaXNwYXJhZG9yXCIsXG4gICAgdHJpZ2dlck9uOiBcIkVuIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIkhhY2VyIHDDoWdpbmFzIHZpc2libGVzOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCJIYWNlciBlbGVtZW50b3MgdmlzaWJsZXM6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZSBsYSBlbmN1ZXN0YSBlbiBjYXNvIGRlIMOpeGl0by5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIkVsIGRpc3BhcmFkb3Igbm8gZXN0w6EgY29uZmlndXJhZG9cIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiQ29ycmVyIHNpXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDYW1iaWFyIHZhbG9yIGRlOiBcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwiYTogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiTm8gcG9uZXIgbGEgdmFyaWFibGUgZW4gZWwgcmVzdWx0YWRvIGRlIGxhIGVuY3Vlc3RhLlwiXG4gIH0sXG4gIC8vUHJvcGVydHkgdmFsdWVzXG4gIHB2OiB7XG4gICAgdHJ1ZTogXCJ2ZXJkYWRlcm9cIixcbiAgICBmYWxzZTogXCJmYWxzb1wiXG4gIH0sXG4gIC8vT3BlcmF0b3JzXG4gIG9wOiB7XG4gICAgZW1wdHk6IFwiZXMgdmFjw61vXCIsXG4gICAgbm90ZW1wdHk6IFwibm8gZXMgdmFjw61vXCIsXG4gICAgZXF1YWw6IFwiaWd1YWwgYVwiLFxuICAgIG5vdGVxdWFsOiBcIm5vIGlndWFsIGFcIixcbiAgICBjb250YWluczogXCJjb250aWVuZVwiLFxuICAgIG5vdGNvbnRhaW5zOiBcIm5vIGNvbnRpZW5lXCIsXG4gICAgZ3JlYXRlcjogXCJtYXlvclwiLFxuICAgIGxlc3M6IFwibWVub3JcIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCJtYXlvciBvIGlndWFsIGFcIixcbiAgICBsZXNzb3JlcXVhbDogXCJtZW5vciBvciBpZ3VhbCBhXCJcbiAgfSxcbiAgLy9FbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIlVzZSB2ZXJzacOzbiBBbmd1bGFyXCIsXG4gICAganF1ZXJ5OiBcIlVzZSB2ZXJzacOzbiBqUXVlcnlcIixcbiAgICBrbm9ja291dDogXCJVc2UgdmVyc2nDs24gS25vY2tvdXRcIixcbiAgICByZWFjdDogXCJVc2UgdmVyc2nDs24gUmVhY3RcIixcbiAgICB2dWU6IFwiVXNlIHZlcnNpw7NuIFZ1ZVwiLFxuICAgIGJvb3RzdHJhcDogXCJQYXJhIGVudG9ybm8gYm9vdHN0cmFwXCIsXG4gICAgc3RhbmRhcmQ6IFwiTm8gYm9vdHN0cmFwXCIsXG4gICAgc2hvd09uUGFnZTogXCJNb3N0cmFyIGVuY3Vlc3RhIGVuIHVuYSBww6FnaW5hXCIsXG4gICAgc2hvd0luV2luZG93OiBcIk1vc3RyYXIgZW5jdWVzdGEgZW4gdW5hIHZlbnRhbmFcIixcbiAgICBsb2FkRnJvbVNlcnZlcjogXCJDYXJnYXIgSlNPTiBkZSBlbmN1ZXN0YSBkZWwgc2Vydmlkb3JcIixcbiAgICB0aXRsZVNjcmlwdDogXCJTY3JpcHRzIHkgZXN0aWxvc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJTZWxlY2Npb25lIGxhIHDDoWdpbmEgcGFyYSBwcm9iYXJsYTpcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiY3VlbnRhIGRlIHJlc3B1ZXN0YXNcIixcbiAgICBlbWFpbHZhbGlkYXRvcjogXCJlLW1haWxcIixcbiAgICBudW1lcmljdmFsaWRhdG9yOiBcIm51bWVyaWNvXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRleHRvXCJcbiAgfSxcbiAgdHJpZ2dlcnM6IHtcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwiZW5jdWVzdGEgY29tcGxldGFcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwidmFsb3IgYWp1c3RhZG9cIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCJjYW1iaW8gZGUgdmlzaWJpbGlkYWRcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwibm9tYnJlXCIsXG4gICAgdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwidMOtdHVsb1wiLFxuICAgICAgdGl0bGU6IFwiRGVqYXJsbyB2YWPDrW8sIHNpIGVzIGlndWFsIHF1ZSAnTm9tYnJlJ1wiXG4gICAgfSxcbiAgICBwYWdlX3RpdGxlOiB7IG5hbWU6IFwidMOtdHVsb1wiLCB0aXRsZTogXCJUw610dWxvIGRlIHDDoWdpbmFcIiB9XG4gIH1cbn07XG5cbmVkaXRvckxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZXNcIl0gPSBzcGFuaXNoVHJhbnNsYXRpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3NwYW5pc2gudHMiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5RWRpdG9yIH0gZnJvbSBcIi4vZWRpdG9yXCI7XG5cbmNsYXNzIFNlcnZpY2VBUEkgZXh0ZW5kcyBTdXJ2ZXkuZHhTdXJ2ZXlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmcsIHByaXZhdGUgYWNjZXNzS2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZVN1cnZleXMoXG4gICAgb25Mb2FkOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIHRoaXMuYmFzZVVybCArIFwiL2dldEFjdGl2ZT9hY2Nlc3NLZXk9XCIgKyB0aGlzLmFjY2Vzc0tleSk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHhoci5yZXNwb25zZSA/IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKSA6IG51bGw7XG4gICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVN1cnZleShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb25DcmVhdGU6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXG4gICAgICBcIkdFVFwiLFxuICAgICAgdGhpcy5iYXNlVXJsICsgXCIvY3JlYXRlP2FjY2Vzc0tleT1cIiArIHRoaXMuYWNjZXNzS2V5ICsgXCImbmFtZT1cIiArIG5hbWVcbiAgICApO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZXN1bHQgPSB4aHIucmVzcG9uc2UgPyBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkgOiBudWxsO1xuICAgICAgb25DcmVhdGUoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIHNhdmVTdXJ2ZXkoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBqc29uOiBzdHJpbmcsXG4gICAgb25TYXZlPzogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcIlBPU1RcIiwgdGhpcy5iYXNlVXJsICsgXCIvY2hhbmdlSnNvbj9hY2Nlc3NLZXk9XCIgKyB0aGlzLmFjY2Vzc0tleSk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLThcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHhoci5yZXNwb25zZSA/IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKSA6IG51bGw7XG4gICAgICAhIW9uU2F2ZSAmJiBvblNhdmUoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHsgSWQ6IGlkLCBKc29uOiBqc29uLCBUZXh0OiBqc29uIH0pKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlU3VydmV5TmFtZShcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvblVwZGF0ZT86IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXG4gICAgICBcIkdFVFwiLFxuICAgICAgdGhpcy5iYXNlVXJsICtcbiAgICAgICAgXCIvY2hhbmdlTmFtZS9cIiArXG4gICAgICAgIGlkICtcbiAgICAgICAgXCI/YWNjZXNzS2V5PVwiICtcbiAgICAgICAgdGhpcy5hY2Nlc3NLZXkgK1xuICAgICAgICBcIiZuYW1lPVwiICtcbiAgICAgICAgbmFtZVxuICAgICk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHhoci5yZXNwb25zZSA/IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKSA6IG51bGw7XG4gICAgICAhIW9uVXBkYXRlICYmIG9uVXBkYXRlKHhoci5zdGF0dXMgPT0gMjAwLCByZXN1bHQsIHhoci5yZXNwb25zZSk7XG4gICAgfTtcbiAgICB4aHIuc2VuZCgpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUluZm8ge1xuICBuYW1lOiBLbm9ja291dE9ic2VydmFibGU8c3RyaW5nPjtcbiAgaWQ6IHN0cmluZztcbiAgcG9zdElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlEZXNjcmlwdGlvbiBpbXBsZW1lbnRzIElTdXJ2ZXlJbmZvIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWUgPSBrby5vYnNlcnZhYmxlKFwiXCIpLFxuICAgIHB1YmxpYyBjcmVhdGVkQXQgPSBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0RhdGVTdHJpbmcoKSxcbiAgICBwdWJsaWMgaWQgPSBcIlwiLFxuICAgIHB1YmxpYyByZXN1bHRJZCA9IFwiXCIsXG4gICAgcHVibGljIHBvc3RJZCA9IFwiXCJcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5c01hbmFnZXIge1xuICBwdWJsaWMgc3RhdGljIHNlcnZpY2VVcmxQYXRoOiBzdHJpbmcgPSBcIi9hcGkvTXlTdXJ2ZXlzXCI7XG4gIHN0YXRpYyBTdG9yYWdlS2V5ID0gXCJteVN1cnZleXNcIjtcbiAgcHJpdmF0ZSBhcGk6IFNlcnZpY2VBUEk7XG5cbiAgZ2V0U3VydmV5cygpOiBBcnJheTxTdXJ2ZXlEZXNjcmlwdGlvbj4ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFN1cnZleXNNYW5hZ2VyLlN0b3JhZ2VLZXkpIHx8IFwiW11cIlxuICAgICkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTdXJ2ZXlEZXNjcmlwdGlvbihcbiAgICAgICAga28ub2JzZXJ2YWJsZTxzdHJpbmc+KGl0ZW0ubmFtZSksXG4gICAgICAgIGl0ZW0uY3JlYXRlZEF0LFxuICAgICAgICBpdGVtLmlkLFxuICAgICAgICBpdGVtLnJlc3VsdElkLFxuICAgICAgICBpdGVtLnBvc3RJZFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFN1cnZleXMoc3VydmV5czogQXJyYXk8SVN1cnZleUluZm8+KSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFN1cnZleXNNYW5hZ2VyLlN0b3JhZ2VLZXksIGtvLnRvSlNPTihzdXJ2ZXlzKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIGFjY2Vzc0tleTogc3RyaW5nLFxuICAgIHByaXZhdGUgZWRpdG9yOiBTdXJ2ZXlFZGl0b3JcbiAgKSB7XG4gICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICBpZiAoaGFzaC5pbmRleE9mKFwiI1wiKSA9PT0gMCkge1xuICAgICAgdGhpcy5zdXJ2ZXlJZChoYXNoLnNsaWNlKDEpKTtcbiAgICB9XG4gICAgdGhpcy5hcGkgPSBuZXcgU2VydmljZUFQSShcbiAgICAgIGJhc2VVcmwgKyBTdXJ2ZXlzTWFuYWdlci5zZXJ2aWNlVXJsUGF0aCxcbiAgICAgIGFjY2Vzc0tleVxuICAgICk7XG5cbiAgICBlZGl0b3IuaXNBdXRvU2F2ZSA9IHRydWU7XG4gICAgZWRpdG9yLnNob3dTdGF0ZSA9IHRydWU7XG4gICAgZWRpdG9yLnNhdmVTdXJ2ZXlGdW5jID0gKHNhdmVObywgY2FsbGJhY2spID0+IHtcbiAgICAgIGlmICghZWRpdG9yLnN1cnZleUlkICYmICF0aGlzLnN1cnZleUlkKCkpIHtcbiAgICAgICAgdGhpcy5hZGRIYW5kbGVyKHN1Y2Nlc3MgPT4gY2FsbGJhY2soc2F2ZU5vLCBzdWNjZXNzKSk7XG4gICAgICB9XG4gICAgICBpZiAoISFlZGl0b3Iuc3VydmV5SWQgfHwgISF0aGlzLnN1cnZleUlkKCkpIHtcbiAgICAgICAgdGhpcy5hcGkuc2F2ZVN1cnZleShcbiAgICAgICAgICBlZGl0b3Iuc3VydmV5SWQgfHwgdGhpcy5zdXJ2ZXlJZCgpLFxuICAgICAgICAgIGVkaXRvci50ZXh0LFxuICAgICAgICAgIHN1Y2Nlc3MgPT4gY2FsbGJhY2soc2F2ZU5vLCBzdWNjZXNzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnN1cnZleXModGhpcy5nZXRTdXJ2ZXlzKCkpO1xuICAgIGlmICghdGhpcy5zdXJ2ZXlJZCgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdXJ2ZXkodGhpcy5zdXJ2ZXlzKClbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3VydmV5ID0gdGhpcy5zdXJ2ZXlzKCkuZmlsdGVyKHMgPT4gcy5pZCA9PT0gdGhpcy5zdXJ2ZXlJZCgpKVswXTtcbiAgICAgIGlmICghIXN1cnZleSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdXJ2ZXkoc3VydmV5KTtcbiAgICAgICAgdGhpcy5zdXJ2ZXlJZCh1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yLmxvYWRTdXJ2ZXkodGhpcy5zdXJ2ZXlJZCgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG9uQ3VycmVudFN1cnZleUNoYW5nZWQgPSAoc3VydmV5OiBJU3VydmV5SW5mbykgPT4ge1xuICAgICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5SWQodW5kZWZpbmVkKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBcIiNcIiArIHN1cnZleS5pZDtcbiAgICAgICAgaWYgKGVkaXRvci5zdXJ2ZXlJZCA9PT0gc3VydmV5LmlkKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5sb2FkU3VydmV5KHN1cnZleS5pZCk7XG4gICAgICAgIGVkaXRvci5zdXJ2ZXlJZCA9IHN1cnZleS5pZDtcbiAgICAgICAgZWRpdG9yLnN1cnZleVBvc3RJZCA9IHN1cnZleS5wb3N0SWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuc3VydmV5SWQoKSkge1xuICAgICAgICAgIGVkaXRvci5zdXJ2ZXlJZCA9IFwiXCI7XG4gICAgICAgICAgZWRpdG9yLnN1cnZleVBvc3RJZCA9IFwiXCI7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBcIlwiO1xuICAgICAgICAgIGVkaXRvci50ZXh0ID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50U3VydmV5LnN1YnNjcmliZShvbkN1cnJlbnRTdXJ2ZXlDaGFuZ2VkKTtcbiAgICBvbkN1cnJlbnRTdXJ2ZXlDaGFuZ2VkKHRoaXMuY3VycmVudFN1cnZleSgpKTtcblxuICAgIHZhciBjdXJyZW50U3VydmV5Q2FuQmVBdHRhY2hlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmN1cnJlbnRTdXJ2ZXkoKTtcbiAgICAgIGN1cnJlbnRTdXJ2ZXlDYW5CZUF0dGFjaGVkKGZhbHNlKTtcbiAgICAgIGlmICghIXN1cnZleSkge1xuICAgICAgICB0aGlzLmFwaS51cGRhdGVTdXJ2ZXlOYW1lKHN1cnZleS5pZCwgc3VydmV5Lm5hbWUucGVlaygpLCBzdWNjZXNzID0+IHtcbiAgICAgICAgICBjdXJyZW50U3VydmV5Q2FuQmVBdHRhY2hlZChzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbSA9IHtcbiAgICAgIGlkOiBcInN2ZC1hdHRhY2gtc3VydmV5XCIsXG4gICAgICB0ZW1wbGF0ZTogXCJhdHRhY2gtc3VydmV5XCIsXG4gICAgICB2aXNpYmxlOiBjdXJyZW50U3VydmV5Q2FuQmVBdHRhY2hlZCxcbiAgICAgIGFjdGlvbjoga28uY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgXCJodHRwczovL2R4c3VydmV5LmNvbS9Ib21lL0F0dGFjaFN1cnZleS9cIiArXG4gICAgICAgICAgKHRoaXMuY3VycmVudFN1cnZleSgpICYmIHRoaXMuY3VycmVudFN1cnZleSgpLmlkKVxuICAgICAgKSxcbiAgICAgIGNzczogXCJsaW5rLXRvLWF0dGFjaFwiLFxuICAgICAgaW5uZXJDc3M6IFwiaWNvbi1jbG91ZFwiLFxuICAgICAgdGl0bGU6IFwiQXR0YWNoIHN1cnZleSB0byB5b3VyIFN1cnZleUpTIHNlcnZpY2UgYWNjb3VudC4uLlwiXG4gICAgfTtcbiAgfVxuICB0b29sYmFySXRlbTtcblxuICBpc0VkaXRNb2RlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIGVkaXQobW9kZWwsIGV2ZW50KSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuY3VycmVudFN1cnZleSgpO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSgpKSB7XG4gICAgICAgIHN1cnZleS5uYW1lKHRoaXMuY3VycmVudFN1cnZleU5hbWUoKSk7XG4gICAgICAgIHRoaXMuc2V0U3VydmV5cyh0aGlzLnN1cnZleXMoKSk7XG4gICAgICAgIHRoaXMuYXBpLnVwZGF0ZVN1cnZleU5hbWUoc3VydmV5LmlkLCBzdXJ2ZXkubmFtZSgpKTtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RlKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFN1cnZleU5hbWUoc3VydmV5Lm5hbWUoKSk7XG4gICAgICAgIHRoaXMuaXNFZGl0TW9kZSh0cnVlKTtcbiAgICAgICAgJChldmVudC50YXJnZXQpXG4gICAgICAgICAgLnBhcmVudHMoXCIuc3ZkLW1hbmFnZVwiKVxuICAgICAgICAgIC5maW5kKFwiaW5wdXRcIilcbiAgICAgICAgICAuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRIYW5kbGVyKFxuICAgIG9uQWRkPzogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHRoaXMuaXNMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuYXBpLmNyZWF0ZVN1cnZleShcbiAgICAgIFwiTmV3U3VydmV5XCIsXG4gICAgICAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBhbnksIHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdmFyIG5ld1N1cnZleURlc2NyaXB0aW9uID0gbmV3IFN1cnZleURlc2NyaXB0aW9uKFxuICAgICAgICAgIGtvLm9ic2VydmFibGUocmVzdWx0Lk5hbWUpLFxuICAgICAgICAgIHJlc3VsdC5DcmVhdGVkQXQsXG4gICAgICAgICAgcmVzdWx0LklkLFxuICAgICAgICAgIHJlc3VsdC5SZXN1bHRJZCxcbiAgICAgICAgICByZXN1bHQuUG9zdElkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3VydmV5cy5wdXNoKG5ld1N1cnZleURlc2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy5zZXRTdXJ2ZXlzKHRoaXMuc3VydmV5cygpKTtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc3VydmV5SWQgPSByZXN1bHQuSWQ7XG4gICAgICAgIHRoaXMuZWRpdG9yLnN1cnZleVBvc3RJZCA9IHJlc3VsdC5Qb3N0SWQ7XG4gICAgICAgIHRoaXMuYXBpLnNhdmVTdXJ2ZXkocmVzdWx0LklkLCB0aGlzLmVkaXRvci50ZXh0KTtcbiAgICAgICAgdGhpcy5jdXJyZW50U3VydmV5KG5ld1N1cnZleURlc2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICBvbkFkZCAmJiBvbkFkZChzdWNjZXNzLCByZXN1bHQsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgYWRkKCkge1xuICAgIHRoaXMuYWRkSGFuZGxlcigpO1xuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIGlmIChjb25maXJtKFwiRG8geW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBjdXJyZW50IHN1cnZleT9cIikpIHtcbiAgICAgIHRoaXMuc3VydmV5cy5yZW1vdmUodGhpcy5jdXJyZW50U3VydmV5KCkpO1xuICAgICAgdGhpcy5zZXRTdXJ2ZXlzKHRoaXMuc3VydmV5cygpKTtcbiAgICAgIHRoaXMuY3VycmVudFN1cnZleSh0aGlzLnN1cnZleXMoKVswXSk7XG4gICAgfVxuICB9XG5cbiAgc3VydmV5SWQgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oKTtcbiAgc3VydmV5cyA9IGtvLm9ic2VydmFibGVBcnJheTxJU3VydmV5SW5mbz4oKTtcbiAgY3VycmVudFN1cnZleSA9IGtvLm9ic2VydmFibGU8SVN1cnZleUluZm8+KCk7XG4gIGN1cnJlbnRTdXJ2ZXlOYW1lID0ga28ub2JzZXJ2YWJsZTxzdHJpbmc+KFwiXCIpO1xuICBpc0xvYWRpbmcgPSBrby5vYnNlcnZhYmxlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBnZXQgY3NzRWRpdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRNb2RlKCkgPyBcImljb24tc2F2ZWRcIiA6IFwiaWNvbi1lZGl0XCI7XG4gIH1cbiAgZ2V0IGNzc0FkZCgpIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5SWQoKSA/IFwiaWNvbi1uZXdcIiA6IFwiaWNvbi1mb3JrXCI7XG4gIH1cbiAgZ2V0IHRpdGxlRWRpdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRNb2RlKCkgPyBcIlNhdmUgc3VydmV5IG5hbWVcIiA6IFwiRWRpdCBzdXJ2ZXkgbmFtZVwiO1xuICB9XG4gIGdldCB0aXRsZUFkZCgpIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5SWQoKSA/IFwiQWRkIG5ldyBzdXJ2ZXlcIiA6IFwiRm9yayB0aGlzIHN1cnZleVwiO1xuICB9XG4gIG5hbWVFZGl0b3JLZXlwcmVzcyA9IChtb2RlbCwgZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIHRoaXMuZWRpdChtb2RlbCwgZXZlbnQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHRoaXMuaXNFZGl0TW9kZShmYWxzZSk7XG4gICAgfVxuICB9O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL21hbmFnZS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyLCBPYmpUeXBlIH0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlPYmplY3RJdGVtIH0gZnJvbSBcIi4vc3VydmV5T2JqZWN0c1wiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JTaG93V2luZG93IH0gZnJvbSBcIi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlGb3JEZXNpZ25lciwgU3VydmV5RWRpdG9yIH0gZnJvbSBcIi4vZW50cmllc1wiO1xuaW1wb3J0IFwiLi4vdmVuZG9yL2tub2Nrb3V0LXNvcnRhYmxlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBQYWdlc0VkaXRvciB7XG4gIHByaXZhdGUgaXNOZWVkQXV0b1Njcm9sbCA9IHRydWU7XG4gIHByaXZhdGUgX3NlbGVjdGVkUGFnZSA9IGtvLm9ic2VydmFibGU8U3VydmV5LlBhZ2VNb2RlbD4oKTtcbiAgcGFnZXNTZWxlY3Rpb246IEtub2Nrb3V0Q29tcHV0ZWQ8U3VydmV5LlBhZ2VNb2RlbFtdPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvcjogU3VydmV5RWRpdG9yLCBwcml2YXRlIGVsZW1lbnQ6IGFueSkge1xuICAgIHRoaXMucGFnZXNTZWxlY3Rpb24gPSBrby5jb21wdXRlZDxTdXJ2ZXkuUGFnZU1vZGVsW10+KCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmVkaXRvclxuICAgICAgICAucGFnZXMoKVxuICAgICAgICAuY29uY2F0KFs8YW55PnsgbmFtZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5hZGROZXdQYWdlXCIpIH1dKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3RlZFBhZ2UodGhpcy5lZGl0b3IucGFnZXMoKVswXSk7XG4gICAgdGhpcy5lZGl0b3Iua29TZWxlY3RlZE9iamVjdC5zdWJzY3JpYmUobmV3VmFsID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSByZXR1cm47XG5cbiAgICAgIHRoaXMuX3NlbGVjdGVkUGFnZShuZXdWYWwudmFsdWUpO1xuXG4gICAgICBpZiAodGhpcy5pc05lZWRBdXRvU2Nyb2xsKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZFBhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNOZWVkQXV0b1Njcm9sbCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwYWdlU2VsZWN0aW9uID0ga28uY29tcHV0ZWQoe1xuICAgIHJlYWQ6ICgpID0+IHRoaXMuX3NlbGVjdGVkUGFnZSgpLFxuICAgIHdyaXRlOiBuZXdWYWwgPT4ge1xuICAgICAgaWYgKCEhbmV3VmFsICYmIHR5cGVvZiBuZXdWYWwuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlID0gbmV3VmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yLnBhZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuYWRkUGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBhZGRQYWdlKCkge1xuICAgIHRoaXMuZWRpdG9yLmFkZFBhZ2UoKTtcbiAgfVxuXG4gIGNvcHlQYWdlKHBhZ2U6IFN1cnZleS5QYWdlTW9kZWwpIHtcbiAgICB0aGlzLmVkaXRvci5jb3B5UGFnZShwYWdlKTtcbiAgfVxuXG4gIGRlbGV0ZVBhZ2UoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVsZXRlUGFnZSgpO1xuICB9XG5cbiAgc2hvd1BhZ2VTZXR0aW5ncyhwYWdlOiBTdXJ2ZXkuUGFnZU1vZGVsKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2hvd1F1ZXN0aW9uRWRpdG9yKHBhZ2UpO1xuICB9XG5cbiAgb25QYWdlQ2xpY2sgPSAobW9kZWwsIGV2ZW50KSA9PiB7XG4gICAgdGhpcy5pc05lZWRBdXRvU2Nyb2xsID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0b3Iuc2VsZWN0UGFnZShtb2RlbCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVNZW51UG9zaXRpb24oKTtcbiAgfTtcblxuICBnZXQgc29ydGFibGVPcHRpb25zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvbkVuZDogZXZ0ID0+IHtcbiAgICAgICAgdGhpcy5pc05lZWRBdXRvU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWRpdG9yLm1vdmVQYWdlKGV2dC5vbGRJbmRleCwgZXZ0Lm5ld0luZGV4KTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGU6IFwiLnN2ZC1wYWdlLW5hbWVcIixcbiAgICAgIGFuaW1hdGlvbjogMTUwXG4gICAgfTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGFnZSgpO1xuICB9XG4gIHNldCBzZWxlY3RlZFBhZ2UobmV3UGFnZSkge1xuICAgIHRoaXMuZWRpdG9yLnNlbGVjdFBhZ2UobmV3UGFnZSk7XG4gIH1cbiAgZ2V0UGFnZUNsYXNzID0gcGFnZSA9PiB7XG4gICAgdmFyIHJlc3VsdCA9XG4gICAgICBwYWdlID09PSB0aGlzLnNlbGVjdGVkUGFnZSA/IFwic3ZkX3NlbGVjdGVkX3BhZ2Ugc3ZkLWxpZ2h0LWJnLWNvbG9yXCIgOiBcIlwiO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yLnBhZ2VzKCkuaW5kZXhPZihwYWdlKSAhPT0gdGhpcy5lZGl0b3IucGFnZXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICByZXN1bHQgKz0gXCIgc3ZkLWJvcmRlci1yaWdodC1ub25lXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgZ2V0UGFnZU1lbnVJY29uQ2xhc3MgPSBwYWdlID0+IHtcbiAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy5zZWxlY3RlZFBhZ2UgJiYgdGhpcy5pc0FjdGl2ZSgpXG4gICAgICA/IFwiaWNvbi1nZWFyYWN0aXZlXCJcbiAgICAgIDogXCJpY29uLWdlYXJcIjtcbiAgfTtcbiAgc2hvd0FjdGlvbnMgPSBwYWdlID0+IHtcbiAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy5zZWxlY3RlZFBhZ2UgJiYgdGhpcy5pc0FjdGl2ZSgpO1xuICB9O1xuICBpc0xhc3RQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5wYWdlcygpLmxlbmd0aCA9PT0gMTtcbiAgfVxuICBtb3ZlTGVmdChtb2RlbCwgZXZlbnQpIHtcbiAgICB2YXIgcGFnZXNFbGVtZW50ID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc3ZkLXBhZ2VzXCIpO1xuICAgIHBhZ2VzRWxlbWVudC5zY3JvbGxMZWZ0IC09IDUwO1xuICAgIHRoaXMudXBkYXRlTWVudVBvc2l0aW9uKCk7XG4gIH1cbiAgbW92ZVJpZ2h0KG1vZGVsLCBldmVudCkge1xuICAgIHZhciBwYWdlc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgcGFnZXNFbGVtZW50LnNjcm9sbExlZnQgKz0gNTA7XG4gICAgdGhpcy51cGRhdGVNZW51UG9zaXRpb24oKTtcbiAgfVxuICBzY3JvbGxUb1NlbGVjdGVkUGFnZSgpIHtcbiAgICB2YXIgcGFnZXNFbGVtZW50OiBhbnkgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgaWYgKCFwYWdlc0VsZW1lbnQpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmVkaXRvci5wYWdlcygpLmluZGV4T2YodGhpcy5zZWxlY3RlZFBhZ2UpO1xuICAgIHZhciBwYWdlRWxlbWVudCA9IHBhZ2VzRWxlbWVudC5jaGlsZHJlbltpbmRleF07XG4gICAgaWYgKCFwYWdlRWxlbWVudCkgcmV0dXJuO1xuICAgIHBhZ2VzRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgIHBhZ2VFbGVtZW50Lm9mZnNldExlZnQgLVxuICAgICAgcGFnZXNFbGVtZW50Lm9mZnNldExlZnQgLVxuICAgICAgcGFnZXNFbGVtZW50Lm9mZnNldFdpZHRoIC8gMjtcbiAgICB0aGlzLnVwZGF0ZU1lbnVQb3NpdGlvbigpO1xuICB9XG4gIC8vIG9uS2V5RG93bihlbDogYW55LCBlOiBLZXlib2FyZEV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMua29QYWdlcygpLmxlbmd0aCA8PSAxKSByZXR1cm47XG4gIC8vICAgdmFyIHBhZ2VzID0gdGhpcy5rb1BhZ2VzKCk7XG4gIC8vICAgdmFyIHBhZ2VJbmRleCA9IC0xO1xuICAvLyAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGlmIChwYWdlc1tpXS5wYWdlICYmIHBhZ2VzW2ldLmtvU2VsZWN0ZWQoKSkge1xuICAvLyAgICAgICBwYWdlSW5kZXggPSBpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICBpZiAocGFnZUluZGV4IDwgMCkgcmV0dXJuO1xuICAvLyAgIGlmIChlLmtleUNvZGUgPT0gNDYgJiYgdGhpcy5vbkRlbGV0ZVBhZ2VDYWxsYmFjaylcbiAgLy8gICAgIHRoaXMub25EZWxldGVQYWdlQ2FsbGJhY2soZWwucGFnZSk7XG4gIC8vICAgaWYgKChlLmtleUNvZGUgPT0gMzcgfHwgZS5rZXlDb2RlID09IDM5KSAmJiB0aGlzLm9uU2VsZWN0UGFnZUNhbGxiYWNrKSB7XG4gIC8vICAgICBwYWdlSW5kZXggKz0gZS5rZXlDb2RlID09IDM3ID8gLTEgOiAxO1xuICAvLyAgICAgaWYgKHBhZ2VJbmRleCA8IDApIHBhZ2VJbmRleCA9IHBhZ2VzLmxlbmd0aCAtIDE7XG4gIC8vICAgICBpZiAocGFnZUluZGV4ID49IHBhZ2VzLmxlbmd0aCkgcGFnZUluZGV4ID0gMDtcbiAgLy8gICAgIHZhciBwYWdlID0gcGFnZXNbcGFnZUluZGV4XS5wYWdlO1xuICAvLyAgICAgdGhpcy5vblNlbGVjdFBhZ2VDYWxsYmFjayhwYWdlKTtcbiAgLy8gICAgIHRoaXMuc2V0U2VsZWN0ZWRQYWdlKHBhZ2UpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIG9uV2hlZWwobW9kZWwsIGV2ZW50KSB7XG4gICAgdmFyIHBhZ2VzRWxlbWVudCA9IG1vZGVsLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgaWYgKCEhZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgZXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuICAgIH1cbiAgICB2YXIgZGVsdGEgPSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IGV2ZW50LndoZWVsRGVsdGE7XG4gICAgcGFnZXNFbGVtZW50LnNjcm9sbExlZnQgLT0gZGVsdGE7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQgPyBldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogKGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlTWVudVBvc2l0aW9uKCk7XG4gIH1cbiAgdXBkYXRlTWVudVBvc2l0aW9uKCkge1xuICAgIHZhciBwYWdlc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgdmFyIG1lbnVFbGVtZW50cyA9IHBhZ2VzRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic3ZkLXBhZ2UtYWN0aW9uc1wiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lbnVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgbWVudUVsZW1lbnRzW2ldLnN0eWxlLmxlZnQgPVxuICAgICAgICBtZW51RWxlbWVudHNbaV0ucGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0IC1cbiAgICAgICAgcGFnZXNFbGVtZW50LnNjcm9sbExlZnQgK1xuICAgICAgICBcInB4XCI7XG4gICAgfVxuICB9XG4gIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7XG4gIH1cbiAgaXNBY3RpdmUoKSB7XG4gICAgdmFyIHNlbGVjdGVkT2JqZWN0ID0gdGhpcy5lZGl0b3Iua29TZWxlY3RlZE9iamVjdCgpO1xuICAgIGlmICghc2VsZWN0ZWRPYmplY3QpIHJldHVybjtcbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUoc2VsZWN0ZWRPYmplY3QudmFsdWUpID09PSBPYmpUeXBlLlBhZ2U7XG4gIH1cbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInBhZ2VzLWVkaXRvclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQYWdlc0VkaXRvcihwYXJhbXMuZWRpdG9yLCBjb21wb25lbnRJbmZvLmVsZW1lbnQpO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHsgZWxlbWVudDogXCJzdmQtcGFnZS1zZWxlY3Rvci10ZW1wbGF0ZVwiIH1cbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3BhZ2VzRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5TW9kYWxFZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUNlbGxzRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB7XG4gIGtvUm93czogYW55O1xuICBrb0NvbHVtbnM6IGFueTtcbiAga29DYW5FZGl0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29Sb3dzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb0NvbHVtbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmtvQ2FuRWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIHN0ck5hbWUgPSAhdmFsdWUgPyBcImVtcHR5XCIgOiBcIm5vdEVtcHR5XCI7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5cIiArIHN0ck5hbWUpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVTaG93KCkge1xuICAgIHN1cGVyLmJlZm9yZVNob3coKTtcbiAgICB0aGlzLnNldHVwQ2VsbHMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICBpZiAoIXRoaXMuY2FuRWRpdCkgcmV0dXJuO1xuICAgIHZhciBtYXRyaXggPSBuZXcgU3VydmV5LlF1ZXN0aW9uTWF0cml4KFwiXCIpO1xuICAgIG1hdHJpeC5zZXRTdXJ2ZXlJbXBsKHRoaXMub2JqZWN0LnN1cnZleSk7XG4gICAgbWF0cml4LnJvd3MgPSB0aGlzLnJvd3M7XG4gICAgbWF0cml4LmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgbWF0cml4LmNlbGxzID0gdGhpcy5vYmplY3QuY2VsbHM7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmtvUm93cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICB2YXIgY2VsbHMgPSByb3cua29DZWxscygpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXRyaXguY29sdW1ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocm93LnJvd0luZGV4IDwgMCkge1xuICAgICAgICAgICg8YW55Pm1hdHJpeCkuc2V0RGVmYXVsdENlbGxUZXh0KGosIGNlbGxzW2pdLnRleHQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4LnNldENlbGxUZXh0KHJvd3NbaV0ucm93SW5kZXgsIGosIGNlbGxzW2pdLnRleHQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtYXRyaXguY2VsbHMuaXNFbXB0eSkge1xuICAgICAgdGhpcy5rb1ZhbHVlKG1hdHJpeC5jZWxscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua29WYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY2VsbHNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nTW9kYWwpIHtcbiAgICAgIHRoaXMuc2V0dXBDZWxscygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGNhbkVkaXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3QgJiYgdGhpcy5vYmplY3Qucm93cyA/IHRoaXMub2JqZWN0LnJvd3MgOiBbXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0ICYmIHRoaXMub2JqZWN0LmNvbHVtbnMgPyB0aGlzLm9iamVjdC5jb2x1bW5zIDogW107XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxUZXh0KHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybiB0aGlzLm9iamVjdC5nZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uSW5kZXgpO1xuICAgIHJldHVybiB0aGlzLm9iamVjdC5nZXRDZWxsVGV4dChyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBzZXR1cENlbGxzKCkge1xuICAgIHRoaXMua29Sb3dzKFtdKTtcbiAgICB0aGlzLmtvQ29sdW1ucyhbXSk7XG4gICAgdGhpcy5rb0NhbkVkaXQodGhpcy5jYW5FZGl0KTtcbiAgICBpZiAoIXRoaXMuY2FuRWRpdCkgcmV0dXJuO1xuICAgIHZhciBjb2xzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbHMucHVzaCh0aGlzLmNvbHVtbnNbaV0udGV4dCk7XG4gICAgfVxuICAgIHZhciByb3dzID0gW107XG4gICAgcm93cy5wdXNoKFxuICAgICAgdGhpcy5jcmVhdGVSb3coLTEsIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5jZWxsc0RlZmF1bHRSb3dcIikpXG4gICAgKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKHRoaXMuY3JlYXRlUm93KGksIHRoaXMucm93c1tpXS50ZXh0KSk7XG4gICAgfVxuICAgIHRoaXMua29Db2x1bW5zKGNvbHMpO1xuICAgIHRoaXMua29Sb3dzKHJvd3MpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSb3cocm93SW5kZXg6IG51bWJlciwgcm93VGV4dDogc3RyaW5nKTogYW55IHtcbiAgICB2YXIgcm93ID0ge1xuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93VGV4dDogcm93VGV4dCxcbiAgICAgIGtvQ2VsbHM6IGtvLm9ic2VydmFibGVBcnJheSgpXG4gICAgfTtcbiAgICB2YXIgY2VsbHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY2VsbHMucHVzaCh7IHRleHQ6IGtvLm9ic2VydmFibGUodGhpcy5nZXRDZWxsVGV4dChyb3dJbmRleCwgaSkpIH0pO1xuICAgIH1cbiAgICByb3cua29DZWxscyhjZWxscyk7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxufVxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiY2VsbHNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5Q2VsbHNFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q2VsbHNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eVRleHRFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuaW1wb3J0ICogYXMgZWRpdG9yTG9jYWxpemF0aW9uIGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yIHtcbiAgcHVibGljIGF2YWlsYWJsZU9wZXJhdG9ycyA9IFtdO1xuICBrb0lzVmFsaWQ6IGFueTtcbiAga29DYW5BZGRDb25kaXRpb246IGFueTtcbiAga29BZGRDb25kaXRpb25RdWVzdGlvbnM6IGFueTtcbiAga29BZGRDb25kaXRpb25RdWVzdGlvbjogYW55O1xuICBrb0FkZENvbmRpdGlvbk9wZXJhdG9yOiBhbnk7XG4gIGtvQWRkQ29uZGl0aW9uVmFsdWU6IGFueTtcbiAga29BZGRDb25kaXRpb25UeXBlOiBhbnk7XG4gIGtvU2hvd0FkZENvbmRpdGlvblR5cGU6IGFueTtcbiAga29BZGRDb25kaXRpb25CdXR0b25UZXh0OiBhbnk7XG4gIGtvQWRkQ29udGlvblZhbHVlRW5hYmxlZDogYW55O1xuICBrb0hhc1ZhbHVlU3VydmV5OiBhbnk7XG4gIG9uQ29uZGl0aW9uQWRkQ2xpY2s6IGFueTtcbiAga29WYWx1ZVN1cnZleTogYW55O1xuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBlbXB0eVN1cnZleSA9IG5ldyBTdXJ2ZXkuU3VydmV5KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9IFwiY29uZGl0aW9uXCIsXG4gICAgcHVibGljIHN5bnRheENoZWNrTWV0aG9kTmFtZTogc3RyaW5nID0gXCJjcmVhdGVDb25kaXRpb25cIlxuICApIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMgPSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuZ2V0T3BlcmF0b3JzKCk7XG4gICAgdGhpcy5rb0lzVmFsaWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uUXVlc3Rpb24gPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25PcGVyYXRvciA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvblZhbHVlID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uVHlwZSA9IGtvLm9ic2VydmFibGUoXCJhbmRcIik7XG4gICAgdGhpcy5rb0hhc1ZhbHVlU3VydmV5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gICAgdGhpcy5rb1ZhbHVlU3VydmV5ID0ga28ub2JzZXJ2YWJsZShcbiAgICAgIFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yLmVtcHR5U3VydmV5XG4gICAgKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvblF1ZXN0aW9uLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5vblZhbHVlU3VydmV5Q2hhbmdlZChuZXdWYWx1ZSwgc2VsZi5rb0FkZENvbmRpdGlvbk9wZXJhdG9yKCkpO1xuICAgIH0pO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25PcGVyYXRvci5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYub25WYWx1ZVN1cnZleUNoYW5nZWQoc2VsZi5rb0FkZENvbmRpdGlvblF1ZXN0aW9uKCksIG5ld1ZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoc2VsZi5rb0hhc1ZhbHVlU3VydmV5KCkpIHtcbiAgICAgICAgc2VsZi5pc1ZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICBzZWxmLmtvVmFsdWVTdXJ2ZXkoKS5zZXRWYWx1ZShcInF1ZXN0aW9uXCIsIEpTT04ucGFyc2UobmV3VmFsdWUpKTtcbiAgICAgICAgc2VsZi5pc1ZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmtvQ2FuQWRkQ29uZGl0aW9uID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmtvQWRkQ29uZGl0aW9uUXVlc3Rpb24oKSAhPSBcIlwiICYmXG4gICAgICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbigpICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLmtvQWRkQ29uZGl0aW9uT3BlcmF0b3IoKSAhPSBcIlwiICYmXG4gICAgICAgICghdGhpcy5rb0FkZENvbnRpb25WYWx1ZUVuYWJsZWQoKSB8fCB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUoKSAhPSBcIlwiKVxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLmtvU2hvd0FkZENvbmRpdGlvblR5cGUgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5rb0lzVmFsaWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHRleHQgPSB0aGlzLmtvVGV4dFZhbHVlKCk7XG4gICAgICBpZiAodGV4dCkgdGV4dCA9IHRleHQudHJpbSgpO1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvbkJ1dHRvblRleHQgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5rb0lzVmFsaWQoKVxuICAgICAgICA/IFwiY29uZGl0aW9uQnV0dG9uQWRkXCJcbiAgICAgICAgOiBcImNvbmRpdGlvbkJ1dHRvblJlcGxhY2VcIjtcbiAgICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLlwiICsgbmFtZSk7XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5rb0FkZENvbnRpb25WYWx1ZUVuYWJsZWQgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzZWxmLmNhblNob3dWYWx1ZUJ5T3BlcmF0b3Ioc2VsZi5rb0FkZENvbmRpdGlvbk9wZXJhdG9yKCkpO1xuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMub25Db25kaXRpb25BZGRDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5hZGRDb25kaXRpb24oKTtcbiAgICB9O1xuICAgIHRoaXMucmVzZXRBZGRDb25kaXRpb25WYWx1ZXMoKTtcbiAgfVxuICBwdWJsaWMgc2V0T2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5zZXRPYmplY3QodmFsdWUpO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbnModGhpcy5hbGxDb25kdGlvblF1ZXN0aW9ucyk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgcHVibGljIGdldCBhdmFpbGFibGVRdWVzdGlvbnMoKTogYW55W10ge1xuICAgIGlmICh0aGlzLm9iamVjdCBpbnN0YW5jZW9mIFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMub2JqZWN0LmNvbE93bmVyW1wic3VydmV5XCJdLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMub2JqZWN0ICYmXG4gICAgICAgIHRoaXMub2JqZWN0LnN1cnZleSAmJlxuICAgICAgICB0aGlzLm9iamVjdC5zdXJ2ZXkuZ2V0QWxsUXVlc3Rpb25zKCkpIHx8XG4gICAgICBbXVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBhbGxDb25kdGlvblF1ZXN0aW9ucygpOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLm9iamVjdCkgcmV0dXJuIFtdO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmF2YWlsYWJsZVF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRDb25kaXRpb25RdWVzdGlvbk5hbWVzKHF1ZXN0aW9uc1tpXSwgbmFtZXMpO1xuICAgIH1cbiAgICB0aGlzLmFkZE1hdHJpeENvbHVtbnNUb0NvbmR0aW9uKG5hbWVzKTtcbiAgICB0aGlzLmFkZFBhbmVsRHluYW1pY1F1ZXN0aW9uc1RvQ29uZGl0aW9uKG5hbWVzKTtcbiAgICBuYW1lcy5zb3J0KCk7XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG4gIHByaXZhdGUgYWRkQ29uZGl0aW9uUXVlc3Rpb25OYW1lcyhcbiAgICBxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZSxcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPlxuICApIHtcbiAgICBpZiAocXVlc3Rpb24gPT0gdGhpcy5vYmplY3QpIHJldHVybjtcbiAgICBxdWVzdGlvbi5hZGRDb25kaXRpb25OYW1lcyhuYW1lcyk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRNYXRyaXhDb2x1bW5zVG9Db25kdGlvbihuYW1lczogQXJyYXk8c3RyaW5nPikge1xuICAgIGlmIChcbiAgICAgICEodGhpcy5vYmplY3QgaW5zdGFuY2VvZiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4pIHx8XG4gICAgICAhdGhpcy5vYmplY3QgfHxcbiAgICAgICF0aGlzLm9iamVjdC5jb2xPd25lciB8fFxuICAgICAgIXRoaXMub2JqZWN0LmNvbE93bmVyW1wiY29sdW1uc1wiXVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMub2JqZWN0LmNvbE93bmVyW1wiY29sdW1uc1wiXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjb2x1bW5zW2ldID09IHRoaXMub2JqZWN0KSBjb250aW51ZTtcbiAgICAgIG5hbWVzLnB1c2goXCJyb3cuXCIgKyBjb2x1bW5zW2ldLm5hbWUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZFBhbmVsRHluYW1pY1F1ZXN0aW9uc1RvQ29uZGl0aW9uKG5hbWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKCEodGhpcy5vYmplY3QuZGF0YSBpbnN0YW5jZW9mIFN1cnZleS5RdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0pKSByZXR1cm47XG4gICAgdmFyIHBhbmVsOiBTdXJ2ZXkuUGFuZWxNb2RlbCA9IHRoaXMub2JqZWN0LmRhdGEucGFuZWw7XG4gICAgdmFyIHF1ZXN0aW9uTmFtZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsLnF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBwYW5lbC5xdWVzdGlvbnNbaV07XG4gICAgICBpZiAocS5uYW1lID09IHRoaXMub2JqZWN0Lm5hbWUpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5hZGRDb25kaXRpb25RdWVzdGlvbk5hbWVzKHEsIHF1ZXN0aW9uTmFtZXMpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVzLnB1c2goXCJwYW5lbC5cIiArIHF1ZXN0aW9uTmFtZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG9uVmFsdWVTdXJ2ZXlDaGFuZ2VkKHF1ZXN0aW9uTmFtZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2FuU2hvd1ZhbHVlQnlPcGVyYXRvcihvcGVyYXRvcikgfHxcbiAgICAgICFxdWVzdGlvbk5hbWUgfHxcbiAgICAgICF0aGlzLm9iamVjdCB8fFxuICAgICAgIXRoaXMub2JqZWN0LnN1cnZleVxuICAgICkge1xuICAgICAgdGhpcy5rb0hhc1ZhbHVlU3VydmV5KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGpzb24gPSB0aGlzLmdldFF1ZXN0aW9uQ29uZGl0aW9uSnNvbihxdWVzdGlvbk5hbWUsIG9wZXJhdG9yKTtcbiAgICB0aGlzLmtvSGFzVmFsdWVTdXJ2ZXkoanNvbiAmJiBqc29uLnR5cGUpO1xuICAgIGlmICh0aGlzLmtvSGFzVmFsdWVTdXJ2ZXkoKSkge1xuICAgICAgdGhpcy5rb1ZhbHVlU3VydmV5KHRoaXMuY3JlYXRlVmFsdWVTdXJ2ZXkoanNvbikpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZVZhbHVlU3VydmV5KHFqc29uOiBhbnkpOiBTdXJ2ZXkuU3VydmV5IHtcbiAgICBxanNvbi5uYW1lID0gXCJxdWVzdGlvblwiO1xuICAgIHFqc29uLnRpdGxlID0gZWRpdG9yTG9jYWxpemF0aW9uLmVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXG4gICAgICBcInBlLmNvbmRpdGlvblZhbHVlUXVlc3Rpb25UaXRsZVwiXG4gICAgKTtcbiAgICBkZWxldGUgcWpzb25bXCJ2aXNpYmxlXCJdO1xuICAgIGRlbGV0ZSBxanNvbltcInZpc2libGVJZlwiXTtcbiAgICBkZWxldGUgcWpzb25bXCJlbmFibGVcIl07XG4gICAgZGVsZXRlIHFqc29uW1wiZW5hYmxlSWZcIl07XG4gICAgdmFyIGpzb24gPSB7XG4gICAgICBxdWVzdGlvbnM6IFtdLFxuICAgICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwib2ZmXCJcbiAgICB9O1xuICAgIGpzb24ucXVlc3Rpb25zLnB1c2gocWpzb24pO1xuICAgIHZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5LlN1cnZleShqc29uKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc3VydmV5Lm9uVmFsdWVDaGFuZ2VkLmFkZChmdW5jdGlvbihzdXJ2ZXksIG9wdGlvbnMpIHtcbiAgICAgIGlmICghc2VsZi5pc1ZhbHVlQ2hhbmdpbmcpIHtcbiAgICAgICAgc2VsZi5rb0FkZENvbmRpdGlvblZhbHVlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25Db25kaXRpb25Kc29uKFxuICAgIHF1ZXN0aW9uTmFtZTogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB2YXIgcGF0aCA9IFwiXCI7XG4gICAgdmFyIHBvcyA9IHF1ZXN0aW9uTmFtZS5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAocG9zID4gLTEpIHtcbiAgICAgIHBhdGggPSBxdWVzdGlvbk5hbWUuc3Vic3RyKHBvcyArIDEpO1xuICAgICAgcXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lLnN1YnN0cigwLCBwb3MpO1xuICAgICAgcG9zID0gcXVlc3Rpb25OYW1lLmluZGV4T2YoXCJbXCIpO1xuICAgICAgaWYgKHBvcyA+IC0xKSB7XG4gICAgICAgIHF1ZXN0aW9uTmFtZSA9IHF1ZXN0aW9uTmFtZS5zdWJzdHIoMCwgcG9zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5vYmplY3Quc3VydmV5LmdldFF1ZXN0aW9uQnlOYW1lKHF1ZXN0aW9uTmFtZSk7XG4gICAgdmFyIGpzb24gPVxuICAgICAgcXVlc3Rpb24gJiYgcXVlc3Rpb24uZ2V0Q29uZGl0aW9uSnNvblxuICAgICAgICA/IHF1ZXN0aW9uLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IsIHBhdGgpXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4ganNvbiAmJiAoanNvbi50eXBlICE9PSBcInRleHRcIiB8fCBqc29uLmlucHV0VHlwZSkgPyBqc29uIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGNhblNob3dWYWx1ZUJ5T3BlcmF0b3Iob3BlcmF0b3I6IHN0cmluZykge1xuICAgIHJldHVybiBvcGVyYXRvciAhPSBcImVtcHR5XCIgJiYgb3BlcmF0b3IgIT0gXCJub3RlbXB0eVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQWNlRWRpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgYWNlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB0eXBlb2YgYWNlLnJlcXVpcmUoXCJhY2UvZXh0L2xhbmd1YWdlX3Rvb2xzXCIpICE9PSBcInVuZGVmaW5lZFwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGFkZENvbmRpdGlvblF1ZXN0aW9uT3B0aW9ucygpOiBzdHJpbmcge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcbiAgICAgIFwicGUuY29uZGl0aW9uU2VsZWN0UXVlc3Rpb25cIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMua29DYW5BZGRDb25kaXRpb24oKSkgcmV0dXJuO1xuICAgIHZhciB0ZXh0ID0gXCJcIjtcbiAgICBpZiAodGhpcy5rb1Nob3dBZGRDb25kaXRpb25UeXBlKCkpIHtcbiAgICAgIHRleHQgPSB0aGlzLmtvVGV4dFZhbHVlKCkgKyBcIiBcIiArIHRoaXMua29BZGRDb25kaXRpb25UeXBlKCkgKyBcIiBcIjtcbiAgICB9XG4gICAgdGV4dCArPVxuICAgICAgXCJ7XCIgK1xuICAgICAgdGhpcy5rb0FkZENvbmRpdGlvblF1ZXN0aW9uKCkgK1xuICAgICAgXCJ9IFwiICtcbiAgICAgIHRoaXMuZ2V0QWRkQ29uZGl0aW9uT3BlcmF0b3IoKTtcbiAgICBpZiAodGhpcy5rb0FkZENvbnRpb25WYWx1ZUVuYWJsZWQoKSkge1xuICAgICAgdGV4dCArPSBcIiBcIiArIHRoaXMuZ2V0QWRkQ29uZGl0aW9uVmFsdWUoKTtcbiAgICB9XG4gICAgdGhpcy5rb1RleHRWYWx1ZSh0ZXh0KTtcbiAgICB0aGlzLnJlc2V0QWRkQ29uZGl0aW9uVmFsdWVzKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRBZGRDb25kaXRpb25PcGVyYXRvcigpOiBzdHJpbmcge1xuICAgIHZhciBvcCA9IHRoaXMua29BZGRDb25kaXRpb25PcGVyYXRvcigpO1xuICAgIGlmIChvcCA9PSBcImVxdWFsXCIpIHJldHVybiBcIj1cIjtcbiAgICBpZiAob3AgPT0gXCJub3RlcXVhbFwiKSByZXR1cm4gXCI8PlwiO1xuICAgIGlmIChvcCA9PSBcImdyZWF0ZXJcIikgcmV0dXJuIFwiPlwiO1xuICAgIGlmIChvcCA9PSBcImxlc3NcIikgcmV0dXJuIFwiPFwiO1xuICAgIGlmIChvcCA9PSBcImdyZWF0ZXJvcmVxdWFsXCIpIHJldHVybiBcIj49XCI7XG4gICAgaWYgKG9wID09IFwibGVzc29yZXF1YWxcIikgcmV0dXJuIFwiPD1cIjtcbiAgICByZXR1cm4gb3A7XG4gIH1cbiAgcHJpdmF0ZSBnZXRBZGRDb25kaXRpb25WYWx1ZSgpOiBzdHJpbmcge1xuICAgIHZhciB2YWwgPSB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUoKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIHZhbDtcbiAgICBpZiAodmFsID09IFwidHJ1ZVwiIHx8IHZhbCA9PSBcImZhbHNlXCIpIHJldHVybiB2YWw7XG4gICAgaWYgKCFpc05hTih2YWwpKSByZXR1cm4gdmFsO1xuICAgIGlmICh2YWxbMF0gPT0gXCJbXCIpIHJldHVybiB2YWw7XG4gICAgaWYgKCF0aGlzLmlzUXVvdGUodmFsWzBdKSkgdmFsID0gXCInXCIgKyB2YWw7XG4gICAgaWYgKCF0aGlzLmlzUXVvdGUodmFsW3ZhbC5sZW5ndGggLSAxXSkpIHZhbCA9IHZhbCArIFwiJ1wiO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJpdmF0ZSBpc1F1b3RlKGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2ggPT0gXCInXCIgfHwgY2ggPT0gJ1wiJztcbiAgfVxuICBwcm90ZWN0ZWQgb25rb1RleHRWYWx1ZUNoYW5nZWQobmV3VmFsdWUpIHtcbiAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmtvSXNWYWxpZCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbmRpdGlvblBhcnNlcjogYW55ID0gbmV3IFN1cnZleS5Db25kaXRpb25zUGFyc2VyKCk7XG4gICAgICBjb25kaXRpb25QYXJzZXJbdGhpcy5zeW50YXhDaGVja01ldGhvZE5hbWVdKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMua29Jc1ZhbGlkKCFjb25kaXRpb25QYXJzZXIuZXJyb3IpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlc2V0QWRkQ29uZGl0aW9uVmFsdWVzKCkge1xuICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbihcIlwiKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uT3BlcmF0b3IoXCJlcXVhbFwiKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUoXCJcIik7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiY29uZGl0aW9uXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvcihcbiAgICBwcm9wZXJ0eSxcbiAgICBcImNvbmRpdGlvblwiLFxuICAgIFwiY3JlYXRlQ29uZGl0aW9uXCJcbiAgKTtcbn0pO1xuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlDb25kaXRpb25FZGl0b3IoXG4gICAgcHJvcGVydHksXG4gICAgXCJleHByZXNzaW9uXCIsXG4gICAgXCJwYXJzZUV4cHJlc3Npb25cIlxuICApO1xufSk7XG5cbnZhciBvcGVyYXRpb25zID0gW1xuICB7XG4gICAgdmFsdWU6IFwiYW5kXCIsXG4gICAgdGl0bGU6IFwibG9naWNhbCAnYW5kJyBvcGVyYXRvclwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCImJlwiLFxuICAgIHRpdGxlOiBcImxvZ2ljYWwgJ2FuZCcgb3BlcmF0b3JcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwib3JcIixcbiAgICB0aXRsZTogXCJsb2dpY2FsICdvcicgb3BlcmF0b3JcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwifHxcIixcbiAgICB0aXRsZTogXCJsb2dpY2FsICdvcicgb3BlcmF0b3JcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiZW1wdHlcIixcbiAgICB0aXRsZTogXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBlbXB0eVx0e3F1ZXN0aW9uTmFtZX0gZW1wdHlcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwibm90ZW1wdHlcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgaXMgbm90IGVtcHR5XHR7cXVlc3Rpb25OYW1lfSBub3RlbXB0eVwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCI9XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPSA1LCB7cXVlc3Rpb25OYW1lfSA9PSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIj09XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPSA1LCB7cXVlc3Rpb25OYW1lfSA9PSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcImVxdWFsXCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPSA1LCB7cXVlc3Rpb25OYW1lfSA9PSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIjw+XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBub3QgZXF1YWxcdHtxdWVzdGlvbk5hbWV9IDw+IDUsIHtxdWVzdGlvbk5hbWV9ICE9ICdhYmMnLCB7cXVlc3Rpb25OYW1lfSBub3RlcXVhbCAxMjRcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiIT1cIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHR3byB2YWx1ZXMgYXJlIG5vdCBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPD4gNSwge3F1ZXN0aW9uTmFtZX0gIT0gJ2FiYycsIHtxdWVzdGlvbk5hbWV9IG5vdGVxdWFsIDEyNFwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJub3RlcXVhbFwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdHdvIHZhbHVlcyBhcmUgbm90IGVxdWFsXHR7cXVlc3Rpb25OYW1lfSA8PiA1LCB7cXVlc3Rpb25OYW1lfSAhPSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gbm90ZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIj5cIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZ3JlYXRlciB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZFx0e3F1ZXN0aW9uTmFtZX0gPiAyLCB7cXVlc3Rpb25OYW1lfSBncmVhdGVyICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJncmVhdGVyXCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0aGUgbGVmdCBvcGVyYW5kIGdyZWF0ZXIgdGhlbiB0aGUgc2Vjb25kIG9wZXJhbmRcdHtxdWVzdGlvbk5hbWV9ID4gMiwge3F1ZXN0aW9uTmFtZX0gZ3JlYXRlciAnYSdcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiPFwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBsZXNzIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kXHR7cXVlc3Rpb25OYW1lfSA8IDIsIHtxdWVzdGlvbk5hbWV9IGxlc3MgJ2EnXCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcImxlc3NcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgbGVzcyB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZFx0e3F1ZXN0aW9uTmFtZX0gPCAyLCB7cXVlc3Rpb25OYW1lfSBsZXNzICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCI+PVwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBlcXVhbCBvciBncmVhdGVyIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kXHR7cXVlc3Rpb25OYW1lfSA+PSAyLCB7cXVlc3Rpb25OYW1lfSBncmVhdGVyb3JlcXVhbCAnYSdcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiZ3JlYXRlcm9yZXF1YWxcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZXF1YWwgb3IgZ3JlYXRlciB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZFx0e3F1ZXN0aW9uTmFtZX0gPj0gMiwge3F1ZXN0aW9uTmFtZX0gZ3JlYXRlcm9yZXF1YWwgJ2EnXCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIjw9XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0aGUgbGVmdCBvcGVyYW5kIGVxdWFsIG9yIGxlc3MgdGhlbiB0aGUgc2Vjb25kIG9wZXJhbmRcdHtxdWVzdGlvbk5hbWV9IDw9IDIsIHtxdWVzdGlvbk5hbWV9IGxlc3NvcmVxdWFsICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJsZXNzb3JlcXVhbFwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBlcXVhbCBvciBsZXNzIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kXHR7cXVlc3Rpb25OYW1lfSA8PSAyLCB7cXVlc3Rpb25OYW1lfSBsZXNzb3JlcXVhbCAnYSdcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiY29udGFpbnNcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJuIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBhbiBhcnJheSBhbmQgaXQgY29udGFpbnMgYSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmRcdHtxdWVzdGlvbk5hbWV9IGNvbnRhaW5zICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJub3Rjb250YWluc1wiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm4gdHJ1ZSBpZiB0aGUgbGVmdCBvcGVyYW5kIGlzIGFuIGFycmF5IGFuZCBpdCBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kXCJcbiAgfVxuXTtcblxuY29uc3QgY3JlYXRlQW5ub3RhdGlvbnMgPSAoXG4gIGNvbmRpdGlvbjogc3RyaW5nLFxuICBzeW50YXhDaGVja01ldGhvZE5hbWU6IHN0cmluZ1xuKTogQWNlQWpheC5Bbm5vdGF0aW9uW10gPT4ge1xuICBjb25kaXRpb24gPSBjb25kaXRpb24gfHwgXCJcIjtcbiAgdmFyIGFubm90YXRpb25zID0gbmV3IEFycmF5PEFjZUFqYXguQW5ub3RhdGlvbj4oKTtcbiAgdmFyIGNvbmRpdGlvblBhcnNlcjogYW55ID0gbmV3IFN1cnZleS5Db25kaXRpb25zUGFyc2VyKCk7XG4gIGNvbmRpdGlvblBhcnNlcltzeW50YXhDaGVja01ldGhvZE5hbWVdKGNvbmRpdGlvbik7XG4gIGlmICghIWNvbmRpdGlvbiAmJiBjb25kaXRpb25QYXJzZXIuZXJyb3IpIHtcbiAgICB2YXIgdG9FcnJvclN1YnN0cmluZyA9IGNvbmRpdGlvbi5zdWJzdHJpbmcoMCwgY29uZGl0aW9uUGFyc2VyLmVycm9yLmF0KTtcbiAgICB2YXIgY29sdW1uID0gdG9FcnJvclN1YnN0cmluZy5sZW5ndGggLSB0b0Vycm9yU3Vic3RyaW5nLmxhc3RJbmRleE9mKFwiXFxuXCIpO1xuICAgIHZhciBhbm5vdGF0aW9uOiBBY2VBamF4LkFubm90YXRpb24gPSB7XG4gICAgICByb3c6IGNvbmRpdGlvbi5tYXRjaCgvXFxuL2cpID8gY29uZGl0aW9uLm1hdGNoKC9cXG4vZykubGVuZ3RoIDogMCxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgdGV4dDogY29uZGl0aW9uUGFyc2VyLmVycm9yLmNvZGUgKyBcIiAoXCIgKyBjb2x1bW4gKyBcIilcIixcbiAgICAgIHR5cGU6IFwiZXJyb3JcIlxuICAgIH07XG4gICAgYW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcbiAgfVxuICByZXR1cm4gYW5ub3RhdGlvbnM7XG59O1xuXG52YXIgSURfUkVHRVhQID0gL1thLXpBLVpfMC05e1xcKlxcL1xcPFxcPlxcPVxcIVxcJFxcLlxcLVxcdTAwQTItXFx1RkZGRl0vO1xuXG5leHBvcnQgZnVuY3Rpb24gZG9HZXRDb21wbGV0aW9ucyhcbiAgcHJldklkZW50aWZpZXI6IHN0cmluZyxcbiAgcHJlZml4OiBzdHJpbmcsXG4gIGNvbmZpZzogeyBxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uQmFzZTsgcXVlc3Rpb25zOiBTdXJ2ZXkuUXVlc3Rpb25bXSB9LFxuICBjb21wbGV0ZXIgPSBudWxsXG4pIHtcbiAgdmFyIGNvbXBsZXRpb25zID0gW107XG4gIHZhciBjdXJyZW50UXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkJhc2UgPSBjb25maWcucXVlc3Rpb247XG4gIHZhciB1c2FibGVRdWVzdGlvbnMgPSAoY29uZmlnLnF1ZXN0aW9ucyB8fCBbXSkuZmlsdGVyKFxuICAgIHEgPT4gcSAhPT0gY3VycmVudFF1ZXN0aW9uXG4gICk7XG4gIGlmIChcbiAgICAhIXVzYWJsZVF1ZXN0aW9ucyB8fFxuICAgIGN1cnJlbnRRdWVzdGlvbiBpbnN0YW5jZW9mIFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbiB8fFxuICAgIGN1cnJlbnRRdWVzdGlvbi5kYXRhIGluc3RhbmNlb2YgU3VydmV5LlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICApIHtcbiAgICBpZiAoXG4gICAgICBwcmV2SWRlbnRpZmllciA9PT0gXCJyb3dcIiAmJlxuICAgICAgY3VycmVudFF1ZXN0aW9uIGluc3RhbmNlb2YgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICAgKSB7XG4gICAgICBjb21wbGV0aW9ucyA9IGN1cnJlbnRRdWVzdGlvbi5jb2xPd25lcltcImNvbHVtbnNcIl1cbiAgICAgICAgLmZpbHRlcihlID0+IGUubmFtZSAhPT0gY3VycmVudFF1ZXN0aW9uLm5hbWUpXG4gICAgICAgIC5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIntyb3cuXCIgKyBjb2x1bW4ubmFtZSArIFwifVwiLFxuICAgICAgICAgICAgc29tZTogXCJcIixcbiAgICAgICAgICAgIG1ldGE6IGNvbHVtbi50aXRsZSxcbiAgICAgICAgICAgIGlkZW50aWZpZXJSZWdleDogSURfUkVHRVhQXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHByZXZJZGVudGlmaWVyID09PSBcInBhbmVsXCIgJiZcbiAgICAgIGN1cnJlbnRRdWVzdGlvbi5kYXRhIGluc3RhbmNlb2YgU3VydmV5LlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICkge1xuICAgICAgdmFyIHBhbmVsOiBTdXJ2ZXkuUGFuZWxNb2RlbCA9IGN1cnJlbnRRdWVzdGlvbi5kYXRhLnBhbmVsO1xuICAgICAgY29tcGxldGlvbnMgPSBwYW5lbC5lbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGUgPT4gZS5uYW1lICE9PSBjdXJyZW50UXVlc3Rpb24ubmFtZSlcbiAgICAgICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIntwYW5lbC5cIiArIGVsZW1lbnQubmFtZSArIFwifVwiLFxuICAgICAgICAgICAgc29tZTogXCJcIixcbiAgICAgICAgICAgIG1ldGE6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgIGlkZW50aWZpZXJSZWdleDogSURfUkVHRVhQXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvcGVyYXRpb25zRmlsdGVyZWQgPSBvcGVyYXRpb25zLmZpbHRlcihcbiAgICAgICAgb3AgPT4gIXByZWZpeCB8fCBvcC52YWx1ZS5pbmRleE9mKHByZWZpeCkgIT09IC0xXG4gICAgICApO1xuICAgICAgdmFyIHF1ZXN0aW9uc0ZpbHRlcmVkID0gdXNhYmxlUXVlc3Rpb25zLmZpbHRlcihcbiAgICAgICAgb3AgPT4gIXByZWZpeCB8fCBvcC5uYW1lLmluZGV4T2YocHJlZml4KSAhPT0gLTFcbiAgICAgICk7XG4gICAgICBpZiAoY3VycmVudFF1ZXN0aW9uIGluc3RhbmNlb2YgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgICAgIGNvbXBsZXRpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgdmFsdWU6IFwie3Jvdy5cIixcbiAgICAgICAgICBzb21lOiBcIlwiLFxuICAgICAgICAgIG1ldGE6IGVkaXRvckxvY2FsaXphdGlvbi5lZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFxuICAgICAgICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmRlZmF1bHRTdHJpbmdzLnBlLmFjZUVkaXRvclJvd1RpdGxlXG4gICAgICAgICAgKSxcbiAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IElEX1JFR0VYUFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvbi5kYXRhIGluc3RhbmNlb2YgU3VydmV5LlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgKSB7XG4gICAgICAgIGNvbXBsZXRpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgdmFsdWU6IFwie3BhbmVsLlwiLFxuICAgICAgICAgIHNvbWU6IFwiXCIsXG4gICAgICAgICAgbWV0YTogZWRpdG9yTG9jYWxpemF0aW9uLmVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXG4gICAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZGVmYXVsdFN0cmluZ3MucGUuYWNlRWRpdG9yUGFuZWxUaXRsZVxuICAgICAgICAgICksXG4gICAgICAgICAgaWRlbnRpZmllclJlZ2V4OiBJRF9SRUdFWFBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb21wbGV0aW9ucyA9IGNvbXBsZXRpb25zXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgcXVlc3Rpb25zRmlsdGVyZWQubWFwKHEgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29tcGxldGVyOiBjb21wbGV0ZXIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBcIntcIiArIHEubmFtZSArIFwifVwiLFxuICAgICAgICAgICAgICBzb21lOiBcIlwiLFxuICAgICAgICAgICAgICBtZXRhOiBxLnRpdGxlLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IElEX1JFR0VYUFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgb3BlcmF0aW9uc0ZpbHRlcmVkLm1hcChvcCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICB2YWx1ZTogb3AudmFsdWUsXG4gICAgICAgICAgICAgIHNvbWU6IFwiXCIsXG4gICAgICAgICAgICAgIG1ldGE6IG9wLnRpdGxlLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IElEX1JFR0VYUFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcGxldGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNYXRjaChlZGl0b3IsIGRhdGEpIHtcbiAgaWYgKGVkaXRvci5jb21wbGV0ZXIuY29tcGxldGlvbnMuZmlsdGVyVGV4dCkge1xuICAgIHZhciBhbGxSYW5nZXMgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEFsbFJhbmdlcygpO1xuICAgIGZvciAoXG4gICAgICB2YXIgcmFuZ2VJbmRleCA9IDAsIHJhbmdlO1xuICAgICAgKHJhbmdlID0gYWxsUmFuZ2VzW3JhbmdlSW5kZXhdKTtcbiAgICAgIHJhbmdlSW5kZXgrK1xuICAgICkge1xuICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uIC09IGVkaXRvci5jb21wbGV0ZXIuY29tcGxldGlvbnMuZmlsdGVyVGV4dC5sZW5ndGg7XG4gICAgICB2YXIgcmFuZ2VUZXh0ID0gZWRpdG9yLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgIGlmIChyYW5nZVRleHQuaW5kZXhPZihcIntcIikgIT09IDApIHtcbiAgICAgICAgdmFyIGV4dFJhbmdlID0gcmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgZXh0UmFuZ2Uuc3RhcnQuY29sdW1uLS07XG4gICAgICAgIGlmIChlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoZXh0UmFuZ2UpLmluZGV4T2YoXCJ7XCIpID09PSAwKSB7XG4gICAgICAgICAgcmFuZ2UgPSBleHRSYW5nZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTtcbiAgICB9XG4gIH1cbiAgZWRpdG9yLmV4ZWNDb21tYW5kKFwiaW5zZXJ0c3RyaW5nXCIsIGRhdGEudmFsdWUgfHwgZGF0YSk7XG59XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5hY2VFZGl0b3IgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29uZmlncyA9IG9wdGlvbnMoKTtcbiAgICB2YXIgbGFuZ1Rvb2xzID0gYWNlLnJlcXVpcmUoXCJhY2UvZXh0L2xhbmd1YWdlX3Rvb2xzXCIpO1xuICAgIHZhciBsYW5nVXRpbHMgPSBhY2UucmVxdWlyZShcImFjZS9hdXRvY29tcGxldGUvdXRpbFwiKTtcbiAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQoZWxlbWVudCk7XG4gICAgdmFyIG9iamVjdEVkaXRvcjogU3VydmV5UHJvcGVydHlDb25kaXRpb25FZGl0b3IgPSBjb25maWdzLmVkaXRvcjtcbiAgICB2YXIgaXNVcGRhdGluZyA9IGZhbHNlO1xuXG4gICAgZWRpdG9yLnNldE9wdGlvbihcInVzZVdvcmtlclwiLCBmYWxzZSk7XG5cbiAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVycm9ycyA9IGNyZWF0ZUFubm90YXRpb25zKFxuICAgICAgICBlZGl0b3IuZ2V0VmFsdWUoKSxcbiAgICAgICAgb2JqZWN0RWRpdG9yLnN5bnRheENoZWNrTWV0aG9kTmFtZVxuICAgICAgKTtcbiAgICAgIGlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgb2JqZWN0RWRpdG9yLmtvVGV4dFZhbHVlKGVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgIGlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIC8vICAgb2JqZWN0RWRpdG9yLmtvSGFzRXJyb3IoZXJyb3JzLmxlbmd0aCA+IDApO1xuICAgICAgLy8gICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vICAgICBvYmplY3RFZGl0b3Iua29FcnJvclRleHQoZXJyb3JzWzBdLnRleHQpO1xuICAgICAgLy8gICB9XG4gICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldEFubm90YXRpb25zKGVycm9ycyk7XG4gICAgfSk7XG5cbiAgICB2YXIgdXBkYXRlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIWlzVXBkYXRpbmcpIHtcbiAgICAgICAgZWRpdG9yLnNldFZhbHVlKG9iamVjdEVkaXRvci5rb1RleHRWYWx1ZSgpIHx8IFwiXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHZhbHVlU3Vic2NyaXB0aW9uID0gb2JqZWN0RWRpdG9yLmtvVGV4dFZhbHVlLnN1YnNjcmliZSh1cGRhdGVDYWxsYmFjayk7XG4gICAgdXBkYXRlQ2FsbGJhY2soKTtcblxuICAgIHZhciBjb21wbGV0ZXIgPSB7XG4gICAgICBpZGVudGlmaWVyUmVnZXhwczogW0lEX1JFR0VYUF0sXG4gICAgICBpbnNlcnRNYXRjaDogaW5zZXJ0TWF0Y2gsXG4gICAgICBnZXRDb21wbGV0aW9uczogKGVkaXRvciwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHZhciBwcmV2SWRlbnRpZmllciA9IGxhbmdVdGlscy5yZXRyaWV2ZVByZWNlZGluZ0lkZW50aWZpZXIoXG4gICAgICAgICAgc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLFxuICAgICAgICAgIHBvcy5jb2x1bW4gLSAxXG4gICAgICAgICk7XG4gICAgICAgIHZhciBjb21wbGV0aW9ucyA9IGRvR2V0Q29tcGxldGlvbnMoXG4gICAgICAgICAgcHJldklkZW50aWZpZXIsXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICAgIGNvbmZpZ3MsXG4gICAgICAgICAgY29tcGxldGVyXG4gICAgICAgICk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGNvbXBsZXRpb25zKTtcbiAgICAgIH0sXG4gICAgICBnZXREb2NUb29sdGlwOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIGl0ZW0uZG9jSFRNTCA9XG4gICAgICAgICAgXCI8ZGl2IHN0eWxlPSdtYXgtd2lkdGg6IDMwMHB4OyB3aGl0ZS1zcGFjZTogbm9ybWFsOyc+XCIgK1xuICAgICAgICAgIGl0ZW0ubWV0YSArXG4gICAgICAgICAgXCI8L2Rpdj5cIjtcbiAgICAgIH1cbiAgICB9O1xuICAgIGxhbmdUb29scy5zZXRDb21wbGV0ZXJzKFtjb21wbGV0ZXJdKTtcbiAgICBlZGl0b3Iuc2V0T3B0aW9ucyh7XG4gICAgICBlbmFibGVCYXNpY0F1dG9jb21wbGV0aW9uOiB0cnVlLFxuICAgICAgZW5hYmxlTGl2ZUF1dG9jb21wbGV0aW9uOiB0cnVlXG4gICAgfSk7XG5cbiAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgZWRpdG9yLmRlc3Ryb3koKTtcbiAgICAgIHZhbHVlU3Vic2NyaXB0aW9uLmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIGVkaXRvci5mb2N1cygpO1xuICB9XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUNvbmRpdGlvbkVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIHtcbiAgcHVibGljIHN1cnZleTogU3VydmV5LlN1cnZleTtcbiAgcHVibGljIHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb247XG4gIGtvU3VydmV5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgdGhpcy5rb1N1cnZleSA9IGtvLm9ic2VydmFibGUobmV3IFN1cnZleS5TdXJ2ZXkoKSk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlVGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmVtcHR5XCIpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgc3VwZXIuYmVmb3JlU2hvdygpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKHRoaXMuc3VydmV5LmdldFZhbHVlKHRoaXMub2JqZWN0Lm5hbWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YWx1ZVwiO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlU3VydmV5KCkge1xuICAgIHZhciBxanNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdCh0aGlzLm9iamVjdCk7XG4gICAgcWpzb24udHlwZSA9IHRoaXMuZ2V0SnNvblR5cGUodGhpcy5vYmplY3QuZ2V0VHlwZSgpKTtcbiAgICBxanNvbi50aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIjtcbiAgICBkZWxldGUgcWpzb25bXCJ2aXNpYmxlXCJdO1xuICAgIGRlbGV0ZSBxanNvbltcInZpc2libGVJZlwiXTtcbiAgICBkZWxldGUgcWpzb25bXCJlbmFibGVcIl07XG4gICAgZGVsZXRlIHFqc29uW1wiZW5hYmxlSWZcIl07XG4gICAgdmFyIGpzb24gPSB7IHF1ZXN0aW9uczogW10sIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogZmFsc2UgfTtcbiAgICBqc29uLnF1ZXN0aW9ucy5wdXNoKHFqc29uKTtcbiAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXkuU3VydmV5KGpzb24pO1xuXG4gICAgdGhpcy5zdXJ2ZXkuc2V0VmFsdWUodGhpcy5vYmplY3QubmFtZSwgdGhpcy5lZGl0aW5nVmFsdWUpO1xuICAgIHRoaXMua29TdXJ2ZXkodGhpcy5zdXJ2ZXkpO1xuICB9XG4gIHByaXZhdGUgZ2V0SnNvblR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZSAhPSBcImV4cHJlc3Npb25cIiA/IHR5cGUgOiBcInRleHRcIjtcbiAgfVxufVxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwidmFsdWVcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleU9iamVjdFByb3BlcnR5IH0gZnJvbSBcIi4uL29iamVjdFByb3BlcnR5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IGdldE5leHRWYWx1ZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uIH0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvckRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yLFxuICBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckl0ZW0sXG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yRWRpdG9yQ2VsbCxcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW5cbn0gZnJvbSBcIi4vcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3IgfSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvciB7XG4gIHByaXZhdGUgZGV0YWlsRGVmaW5pdGlvbjogYW55O1xuICBwcml2YXRlIG9wdGlvbnNTaG93VGV4dFZpZXc6IGJvb2xlYW4gPSB0cnVlO1xuICBrb0FjdGl2ZVZpZXc6IGFueTtcbiAga29JdGVtc1RleHQ6IGFueTtcbiAga29TaG93VGV4dFZpZXc6IGFueTtcbiAgY2hhbmdlVG9UZXh0Vmlld0NsaWNrOiBhbnk7XG4gIGNoYW5nZVRvRm9ybVZpZXdDbGljazogYW55O1xuICBwcml2YXRlIGNvbHVtbnNWYWx1ZTogQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4+O1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvU2hvd1RleHRWaWV3ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICB0aGlzLmRldGFpbERlZmluaXRpb24gPVxuICAgICAgICBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZGVmaW5pdGlvblt0aGlzLmdldEl0ZW1WYWx1ZUNsYXNzTmFtZSgpXTtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zVmFsdWUgPSB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICB0aGlzLmtvQWN0aXZlVmlldyA9IGtvLm9ic2VydmFibGUoXCJmb3JtXCIpO1xuICAgIHRoaXMua29JdGVtc1RleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHRoaXMua29BY3RpdmVWaWV3LnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgaWYgKG5ld1ZhbHVlID09IFwiZm9ybVwiKSBzZWxmLnVwZGF0ZUl0ZW1zKHNlbGYua29JdGVtc1RleHQoKSk7XG4gICAgICBlbHNlIHNlbGYua29JdGVtc1RleHQoc2VsZi5nZXRJdGVtc1RleHQoKSk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VUb1RleHRWaWV3Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYua29BY3RpdmVWaWV3KFwidGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMuY2hhbmdlVG9Gb3JtVmlld0NsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmtvQWN0aXZlVmlldyhcImZvcm1cIik7XG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJpdGVtdmFsdWVzXCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNEZXRhaWxCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXRhaWxEZWZpbml0aW9uO1xuICB9XG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckNvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnNWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlQ2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5ID8gdGhpcy5lZGl0b3JUeXBlICsgXCJAXCIgKyB0aGlzLnByb3BlcnR5Lm5hbWUgOiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFZGl0b3JOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtvRWRpdEl0ZW0oKSB8fCAhdGhpcy5rb0VkaXRJdGVtKCkuaXRlbSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInBlLml0ZW1FZGl0XCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5rb0VkaXRJdGVtKCkuaXRlbS52YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNoZWNrRm9yRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMua29JdGVtcygpLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMua29JdGVtcygpW2ldO1xuICAgICAgcmVzdWx0ID0gaXRlbS5oYXNFcnJvcigpIHx8IHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHtcbiAgICBzdXBlci5iZWZvcmVTaG93KCk7XG4gICAgdmFyIHByb3BzID0gdGhpcy5nZXREZWZpbmVkUHJvcGVydGllcygpO1xuICAgIGlmICghIXByb3BzICYmIHByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1uc1ZhbHVlID0gdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRQcm9wZXJ0aWVzKCk6IEFycmF5PFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLmdldERlZmluZWRQcm9wZXJ0aWVzKCk7XG4gICAgaWYgKCEhcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkgcmV0dXJuIHByb3BzO1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtVmFsdWVDbGFzc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMucHJvcGVydHkgPyB0aGlzLnByb3BlcnR5LnR5cGUgOiBcIml0ZW12YWx1ZVwiO1xuICAgIGlmIChjbGFzc05hbWUgPT0gdGhpcy5lZGl0b3JUeXBlKSBjbGFzc05hbWUgPSBcIml0ZW12YWx1ZVwiO1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmluZWRQcm9wZXJ0aWVzKCk6IEFycmF5PGFueT4ge1xuICAgIGlmICh0aGlzLnByb3BlcnR5ICYmIHRoaXMub2JqZWN0ICYmIHRoaXMub2JqZWN0LmdldFR5cGUpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldFByb3BlcnRpZXMoXG4gICAgICAgIHRoaXMub2JqZWN0LmdldFR5cGUoKSArIFwiQFwiICsgdGhpcy5wcm9wZXJ0eS5uYW1lXG4gICAgICApO1xuICAgICAgaWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnRpZXNCeU5hbWVzKHRoaXMuaXRlbVZhbHVlQ2xhc3NlTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFByb3BlcnRpZXMoKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhcbiAgICAgIHRoaXMuaXRlbVZhbHVlQ2xhc3NlTmFtZVxuICAgICk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzW2ldLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvck9wdGlvbnMoKTogYW55IHtcbiAgICB2YXIgb3B0aW9ucyA9IHN1cGVyLmNyZWF0ZUVkaXRvck9wdGlvbnMoKTtcbiAgICBvcHRpb25zLnNob3dUZXh0VmlldyA9IHRydWU7XG4gICAgb3B0aW9ucy5pdGVtc0VudHJ5VHlwZSA9XG4gICAgICAodGhpcy5vcHRpb25zW1wib3B0aW9uc1wiXSAmJlxuICAgICAgICB0aGlzLm9wdGlvbnNbXCJvcHRpb25zXCJdLml0ZW1WYWx1ZXNFZGl0b3JFbnRyeVR5cGUpIHx8XG4gICAgICBcImZvcm1cIjtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXRFZGl0b3JPcHRpb25zKGVkaXRvck9wdGlvbnM6IGFueSkge1xuICAgIHN1cGVyLm9uU2V0RWRpdG9yT3B0aW9ucyhlZGl0b3JPcHRpb25zKTtcbiAgICB0aGlzLm9wdGlvbnNTaG93VGV4dFZpZXcgPSBlZGl0b3JPcHRpb25zLnNob3dUZXh0VmlldztcbiAgICB0aGlzLnVwZGF0ZVNob3dUZXh0Vmlld1Zpc2liaWxpdHkoKTtcbiAgICB0aGlzLmtvQWN0aXZlVmlldyhlZGl0b3JPcHRpb25zLml0ZW1zRW50cnlUeXBlIHx8IFwiZm9ybVwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkge1xuICAgIHZhciBuZXh0VmFsdWUgPSBudWxsO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmtvSXRlbXMoKS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uaXRlbS5pdGVtVmFsdWU7XG4gICAgfSk7XG4gICAgbmV4dFZhbHVlID0gZ2V0TmV4dFZhbHVlKFwiaXRlbVwiLCB2YWx1ZXMpO1xuXG4gICAgdmFyIGl0ZW1WYWx1ZSA9IHRoaXMuY3JlYXRlRWRpdG9ySXRlbUNvcmUobmV4dFZhbHVlKTtcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25JdGVtVmFsdWVBZGRlZENhbGxiYWNrKFxuICAgICAgICB0aGlzLmVkaXRhYmxlUHJvcGVydHlOYW1lLFxuICAgICAgICBpdGVtVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9ySXRlbShcbiAgICAgIGl0ZW1WYWx1ZSxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMuZ2V0SXRlbVZhbHVlQ2xhc3NOYW1lKClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JJdGVtKGl0ZW06IGFueSk6IGFueSB7XG4gICAgdmFyIGl0ZW1WYWx1ZSA9IHRoaXMuY3JlYXRlRWRpdG9ySXRlbUNvcmUobnVsbCk7XG4gICAgaXRlbVZhbHVlLnNldERhdGEoaXRlbSk7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3JJdGVtKFxuICAgICAgaXRlbVZhbHVlLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5nZXRJdGVtVmFsdWVDbGFzc05hbWUoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JJdGVtQ29yZShpdGVtOiBhbnkpIHtcbiAgICB2YXIgaXRlbVZhbHVlID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoaXRlbSk7XG4gICAgaWYgKGl0ZW1WYWx1ZVtcInZpc2libGVJZlwiXSkge1xuICAgICAgaXRlbVZhbHVlW1wic3VydmV5XCJdID0gdGhpcy5vYmplY3Quc3VydmV5O1xuICAgIH1cbiAgICBpdGVtVmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIHJldHVybiBpdGVtVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcbiAgICB2YXIgaXRlbSA9IGVkaXRvckl0ZW0uaXRlbTtcbiAgICB2YXIgYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzID1cbiAgICAgIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzO1xuICAgIGlmICghYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzICYmIGl0ZW0udGV4dCA9PSBpdGVtLnZhbHVlKSB7XG4gICAgICBpdGVtLnRleHQgPSBudWxsO1xuICAgIH1cbiAgICB2YXIgaXRlbVZhbHVlID0gbmV3IFN1cnZleS5JdGVtVmFsdWUobnVsbCk7XG4gICAgaXRlbVZhbHVlLnNldERhdGEoaXRlbSk7XG4gICAgcmV0dXJuIGl0ZW1WYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmdNb2RhbCkge1xuICAgICAgaWYgKHRoaXMua29BY3RpdmVWaWV3KCkgIT09IFwiZm9ybVwiKSB7XG4gICAgICAgIHRoaXMua29JdGVtc1RleHQodGhpcy5nZXRJdGVtc1RleHQoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU2hvd1RleHRWaWV3VmlzaWJpbGl0eSgpO1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZUFwcGx5KCkge1xuICAgIGlmICh0aGlzLmtvQWN0aXZlVmlldygpICE9PSBcImZvcm1cIikge1xuICAgICAgdGhpcy51cGRhdGVJdGVtcyh0aGlzLmtvSXRlbXNUZXh0KCkpO1xuICAgIH1cbiAgICBzdXBlci5vbkJlZm9yZUFwcGx5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTGlzdERldGFpbFZpZXdDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uTGlzdERldGFpbFZpZXdDaGFuZ2VkKCk7XG4gICAgdGhpcy51cGRhdGVTaG93VGV4dFZpZXdWaXNpYmlsaXR5KCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUl0ZW1zKHRleHQ6IHN0cmluZykge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgICAgdmFyIHRleHRzID0gdGV4dC5zcGxpdChcIlxcblwiKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCF0ZXh0c1tpXSkgY29udGludWU7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IHRleHRzW2ldLnNwbGl0KFN1cnZleS5JdGVtVmFsdWUuU2VwYXJhdG9yKTtcbiAgICAgICAgdmFyIHZhbHVlSXRlbSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKFwiXCIpO1xuICAgICAgICB2YXIgaXRlbTogYW55ID0ge307XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICAgIHZhbHVlSXRlbVtwLm5hbWVdID0gZWxlbWVudHNbaV07XG4gICAgICAgICAgaXRlbVtwLm5hbWVdID0gZWxlbWVudHNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICBpdGVtLnRleHQgPSB2YWx1ZUl0ZW0uaGFzVGV4dCA/IHZhbHVlSXRlbS50ZXh0IDogXCJcIjtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5rb0l0ZW1zKHRoaXMuZ2V0SXRlbXNGcm9tVmFsdWUoaXRlbXMpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbXNUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua29JdGVtcygpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uY2VsbHNbMF0uaGFzRXJyb3IpXG4gICAgICAubWFwKGl0ZW0gPT5cbiAgICAgICAgaXRlbS5jZWxsc1xuICAgICAgICAgIC5tYXAoY2VsbCA9PiBjZWxsLnZhbHVlIHx8IFwiXCIpXG4gICAgICAgICAgLmpvaW4oU3VydmV5Lkl0ZW1WYWx1ZS5TZXBhcmF0b3IpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcfCQvLCBcIlwiKVxuICAgICAgKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTaG93VGV4dFZpZXdWaXNpYmlsaXR5KCkge1xuICAgIGlmICghdGhpcy5rb1Nob3dUZXh0VmlldykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5vcHRpb25zU2hvd1RleHRWaWV3IHx8IHRoaXMuY29sdW1ucy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5rb1Nob3dUZXh0VmlldyhmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5rb1Nob3dUZXh0VmlldyghdGhpcy5oYXNWaXNpYmxlSWYoKSk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNWaXNpYmxlSWYoKTogYm9vbGVhbiB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5rb0l0ZW1zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLml0ZW0udmlzaWJsZUlmKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3JJdGVtIGV4dGVuZHMgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JJdGVtIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGl0ZW06IFN1cnZleS5JdGVtVmFsdWUsXG4gICAgcHVibGljIGNvbHVtbnM6IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPixcbiAgICBwcml2YXRlIGNsYXNzTmFtZTogc3RyaW5nID0gXCJcIlxuICApIHtcbiAgICBzdXBlcihpdGVtLCBjb2x1bW5zKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5UXVlc3Rpb25FZGl0b3IoKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvcih0aGlzLml0ZW0sIG51bGwsIHRoaXMuY2xhc3NOYW1lLCBudWxsKTtcbiAgfVxufVxuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXG4gIFwiaXRlbXZhbHVlc1wiLFxuICBmdW5jdGlvbihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3IocHJvcGVydHkpO1xuICB9LFxuICBcIml0ZW12YWx1ZVwiXG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvciB9IGZyb20gXCIuLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5SXRlbVZhbHVlc0VkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5SXRlbVZhbHVlc0VkaXRvclwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHtcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSxcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4sXG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yRWRpdG9yQ2VsbFxufSBmcm9tIFwiLi9wcm9wZXJ0eU5lc3RlZFByb3BlcnR5RWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eURyb3Bkb3duQ29sdW1uc0VkaXRvciBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yIHtcbiAgcHJpdmF0ZSBjb2x1bW5zVmFsdWU6IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPjtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgdGhpcy5jb2x1bW5zVmFsdWUgPSB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtbnNcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEVkaXRvck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMua29FZGl0SXRlbSgpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwicGUuY29sdW1uRWRpdFwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMua29FZGl0SXRlbSgpLmNvbHVtbi5uYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkge1xuICAgIHZhciBuZXdDb2x1bW4gPSB0aGlzLmNyZWF0ZUVkaXRvckl0ZW1Db3JlKG51bGwpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vbk1hdHJpeERyb3Bkb3duQ29sdW1uQWRkZWRDYWxsYmFjayhuZXdDb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbShcbiAgICAgIG5ld0NvbHVtbixcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvckl0ZW0oaXRlbTogYW55KSB7XG4gICAgdmFyIG5ld0NvbHVtbiA9IHRoaXMuY3JlYXRlRWRpdG9ySXRlbUNvcmUoaXRlbSk7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0l0ZW0oXG4gICAgICBuZXdDb2x1bW4sXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVJdGVtRnJvbUVkaXRvckl0ZW0oZWRpdG9ySXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGVkaXRvckl0ZW0uY29sdW1uO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JJdGVtQ29yZShpdGVtOiBhbnkpOiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHZhciBuZXdDb2x1bW4gPSBuZXcgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uKFwiXCIpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChpdGVtKTtcbiAgICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIG5ld0NvbHVtbik7XG4gICAgfVxuICAgIG5ld0NvbHVtbi5jb2xPd25lciA9IHRoaXMub2JqZWN0O1xuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXMoKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBuYW1lcyA9IHRoaXMuZ2V0UHJvcGVydGllc05hbWVzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydGllc0J5TmFtZXMoXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLCBuYW1lcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXNOYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZ2V0UHJvcGVydGllcyhcbiAgICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIlxuICAgICk7XG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgIHJlcy5wdXNoKHByb3AubmFtZSA/IHByb3AubmFtZSA6IHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXMgPSBbXCJpc1JlcXVpcmVkXCIsIFwiY2VsbFR5cGVcIiwgXCJuYW1lXCIsIFwidGl0bGVcIl07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbSBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwdWJsaWMgY29sdW1uczogQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4+LFxuICAgIHB1YmxpYyBvcHRpb25zID0gbnVsbFxuICApIHtcbiAgICBzdXBlcihjb2x1bW4sIGNvbHVtbnMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBjb2x1bW4ucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcImNlbGxUeXBlXCIsXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5yZXNldFN1cnZleVF1ZXN0aW9uRWRpdG9yKCk7XG4gICAgICB9LFxuICAgICAgXCJjb2xFZGl0XCJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXlRdWVzdGlvbkVkaXRvcigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yKFxuICAgICAgdGhpcy5jb2x1bW4sXG4gICAgICBudWxsLFxuICAgICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBcIiArIHRoaXMuY29sdW1uLmNlbGxUeXBlLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcbiAgfVxufVxuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJtYXRyaXhkcm9wZG93bmNvbHVtbnNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5RHJvcGRvd25Db2x1bW5zRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlNdWx0aXBsZVZhbHVlc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3Ige1xuICBwcml2YXRlIGl0ZW1zOiBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPiA9IFtdO1xuICBrb0l0ZW1zOiBhbnk7XG4gIGtvRWRpdGluZ1ZhbHVlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29FZGl0aW5nVmFsdWUgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmtvSXRlbXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLnNldEl0ZW1zKCk7XG4gIH1cbiAgcHVibGljIGdldFZhbHVlVGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmVtcHR5XCIpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW3ZhbHVlXTtcbiAgICB2YXIgc3RyID0gXCJbXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiAwKSBzdHIgKz0gXCIsIFwiO1xuICAgICAgc3RyICs9IHRoaXMuZ2V0VGV4dEJ5SXRlbVZhbHVlKHZhbHVlW2ldKTtcbiAgICB9XG4gICAgc3RyICs9IFwiXVwiO1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcHVibGljIHNldE9iamVjdCh2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0T2JqZWN0KHZhbHVlKTtcbiAgICB0aGlzLnNldEl0ZW1zKCk7XG4gICAgdGhpcy5zZXRFZGl0aW5nVmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUoKSB7XG4gICAgc3VwZXIudXBkYXRlVmFsdWUoKTtcbiAgICB0aGlzLnNldEVkaXRpbmdWYWx1ZSgpO1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZUFwcGx5KCkge1xuICAgIHRoaXMua29WYWx1ZSh0aGlzLmtvRWRpdGluZ1ZhbHVlKCkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldmFsdWVzXCI7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJdGVtcygpIHtcbiAgICBTdXJ2ZXkuSXRlbVZhbHVlLnNldERhdGEodGhpcy5pdGVtcywgdGhpcy5wcm9wZXJ0eS5jaG9pY2VzKTtcbiAgICB0aGlzLmtvSXRlbXModGhpcy5pdGVtcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUZXh0QnlJdGVtVmFsdWUodmFsOiBhbnkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zW2ldLnZhbHVlID09IHZhbCkgcmV0dXJuIHRoaXMuaXRlbXNbaV0udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcml2YXRlIHNldEVkaXRpbmdWYWx1ZSgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy5rb1ZhbHVlKCk7XG4gICAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbCA9PSB1bmRlZmluZWQpIHZhbCA9IFtdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB2YWwgPSBbdmFsXTtcbiAgICB0aGlzLmtvRWRpdGluZ1ZhbHVlKHZhbCk7XG4gIH1cbn1cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcIm11bHRpcGxldmFsdWVzXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eU11bHRpcGxlVmFsdWVzRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU11bHRpcGxlVmFsdWVzRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5TW9kYWxFZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIHtcbiAga29JdGVtczogYW55O1xuICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5O1xuICBwdWJsaWMgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbkRyb3Bkb3duO1xuICBwcml2YXRlIGl0ZW1zOiBBcnJheTxTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3JJdGVtPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29JdGVtcyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KCk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicmVzdGZ1bGxcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlc3RmdWxsVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ09iamVjdCkgcmV0dXJuIHRoaXMuZWRpdGluZ09iamVjdFt0aGlzLnByb3BlcnR5Lm5hbWVdO1xuICAgIGlmICh0aGlzLmVkaXRpbmdWYWx1ZSkgcmV0dXJuIHRoaXMuZWRpdGluZ1ZhbHVlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudXJsKSByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmVtcHR5XCIpO1xuICAgIHZhciBzdHIgPSB2YWx1ZS51cmw7XG4gICAgaWYgKHN0ci5sZW5ndGggPiAyMCkge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAyMCkgKyBcIi4uLlwiO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHByaXZhdGUgYWRkSXRlbShwcm9wTmFtZTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLml0ZW1zLnB1c2goXG4gICAgICBuZXcgU3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9ySXRlbShcbiAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgIHZhbCA/IHZhbFtwcm9wTmFtZV0gOiBcIlwiLFxuICAgICAgICBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgc2VsZi5vbkl0ZW1WYWx1ZUNoYW5nZWQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgb25JdGVtVmFsdWVDaGFuZ2VkKGl0ZW06IFN1cnZleVByb3BlcnR5UmVzdWx0ZnVsbEVkaXRvckl0ZW0pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNob2ljZXNCeVVybFtpdGVtLm5hbWVdID0gaXRlbS5rb1ZhbHVlKCk7XG4gICAgdGhpcy5ydW4oKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMucmVzdGZ1bGxWYWx1ZTtcbiAgICB0aGlzLml0ZW1zID0gW107XG4gICAgdGhpcy5hZGRJdGVtKFwidXJsXCIsIHZhbCk7XG4gICAgdGhpcy5hZGRJdGVtKFwicGF0aFwiLCB2YWwpO1xuICAgIHRoaXMuYWRkSXRlbShcInZhbHVlTmFtZVwiLCB2YWwpO1xuICAgIHRoaXMuYWRkSXRlbShcInRpdGxlTmFtZVwiLCB2YWwpO1xuICAgIGlmICh2YWwgJiYgdmFsW1wiZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzXCJdKSB7XG4gICAgICB2YXIgY3VzdG9tUHJvcGVydGllcyA9IHZhbFtcImdldEN1c3RvbVByb3BlcnRpZXNOYW1lc1wiXSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXN0b21Qcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IGN1c3RvbVByb3BlcnRpZXNbaV07XG4gICAgICAgIGlmIChwcm9wTmFtZSA9PT0gXCJ2aXNpYmxlSWZOYW1lXCIpIGNvbnRpbnVlOyAvL1RPRE8gcmVtb3ZlIGxhdGVyXG4gICAgICAgIHRoaXMuYWRkSXRlbShwcm9wTmFtZSwgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5rb0l0ZW1zKHRoaXMuaXRlbXMpO1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZUFwcGx5KCkge1xuICAgIHZhciB2YWwgPSBuZXcgU3VydmV5LkNob2ljZXNSZXN0ZnVsbCgpO1xuICAgIHZhbFtcIm93bmVyXCJdID0gdGhpcy5lZGl0aW5nT2JqZWN0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgdmFsW2l0ZW0ubmFtZV0gPSBpdGVtLmtvVmFsdWUoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRWYWx1ZUNvcmUodmFsKTtcbiAgfVxuICBwcml2YXRlIHJ1bigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmNob2ljZXNCeVVybC5ydW4oKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVN1cnZleSgpIHtcbiAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXkuU3VydmV5KCk7XG4gICAgdGhpcy5zdXJ2ZXkuc2hvd05hdmlnYXRpb25CdXR0b25zID0gZmFsc2U7XG4gICAgdGhpcy5zdXJ2ZXkuc2hvd1F1ZXN0aW9uTnVtYmVycyA9IFwib2ZmXCI7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLnN1cnZleS5hZGROZXdQYWdlKFwicGFnZTFcIik7XG4gICAgdGhpcy5xdWVzdGlvbiA9IDxTdXJ2ZXkuUXVlc3Rpb25Ecm9wZG93bj5wYWdlLmFkZE5ld1F1ZXN0aW9uKFxuICAgICAgXCJkcm9wZG93blwiLFxuICAgICAgXCJxMVwiXG4gICAgKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnRpdGxlID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnRlc3RTZXJ2aWNlXCIpO1xuICAgIHRoaXMucXVlc3Rpb24uY2hvaWNlcyA9IFtdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3JJdGVtIHtcbiAgcHVibGljIGtvVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBpc1NldHR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICB2YWw6IHN0cmluZyxcbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQ6IChpdGVtOiBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3JJdGVtKSA9PiBhbnlcbiAgKSB7XG4gICAgdGhpcy5rb1ZhbHVlID0ga28ub2JzZXJ2YWJsZSh2YWwgPyB2YWwgOiBcIlwiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb1ZhbHVlLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgaWYgKCFzZWxmLmlzU2V0dHRpbmdWYWx1ZSkge1xuICAgICAgICBzZWxmLm9uVmFsdWVDaGFuZ2VkKHNlbGYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuaXNTZXR0dGluZ1ZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLmtvVmFsdWUodmFsKTtcbiAgICB0aGlzLmlzU2V0dHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG59XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInJlc3RmdWxsXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5UmVzdGZ1bGxFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWxwZXIgfSBmcm9tIFwiLi4vc3VydmV5SGVscGVyXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvciB9IGZyb20gXCIuLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JcIjtcbmltcG9ydCB7XG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yLFxuICBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckl0ZW1cbn0gZnJvbSBcIi4vcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVRleHRJdGVtc0VkaXRvciBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yIHtcbiAgcHVibGljIGlzVGl0bGVWaXNpYmxlOiBib29sZWFuO1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmlzVGl0bGVWaXNpYmxlID0gdGhpcy5nZXRJc1RpdGxlVmlzaWJsZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRleHRpdGVtc1wiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFZGl0b3JOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtvRWRpdEl0ZW0oKSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInBlLmNvbHVtbkVkaXRcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmtvRWRpdEl0ZW0oKS5rb05hbWUoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld0VkaXRvckl0ZW0oKTogYW55IHtcbiAgICB2YXIgbmV3SXRlbSA9IG5ldyBTdXJ2ZXkuTXVsdGlwbGVUZXh0SXRlbSh0aGlzLmdldE5ld05hbWUoKSk7XG4gICAgLy9uZXdDb2x1bW4uY29sT3duZXIgPSBUT0RPIHNldCBjb2xPd25lci5cbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zSXRlbShuZXdJdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zSXRlbShpdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlSXRlbUZyb21FZGl0b3JJdGVtKGVkaXRvckl0ZW06IGFueSkge1xuICAgIHJldHVybiBlZGl0b3JJdGVtLml0ZW07XG4gIH1cblxuICBwcml2YXRlIGdldE5ld05hbWUoKTogc3RyaW5nIHtcbiAgICB2YXIgb2JqcyA9IFtdO1xuICAgIHZhciBpdGVtcyA9IHRoaXMua29JdGVtcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9ianMucHVzaCh7IG5hbWU6IGl0ZW1zW2ldLmtvTmFtZSgpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE5ld05hbWUob2JqcywgXCJ0ZXh0XCIpO1xuICB9XG4gIHByaXZhdGUgZ2V0SXNUaXRsZVZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgdmFyIHByb3BlcnR5ID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFxuICAgICAgXCJtdWx0aXBsZXRleHRpdGVtXCIsXG4gICAgICBcInRpdGxlXCJcbiAgICApO1xuICAgIHJldHVybiBwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5LnZpc2libGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zSXRlbSBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSB7XG4gIGtvTmFtZTogYW55O1xuICBrb1RpdGxlOiBhbnk7XG4gIGtvSXNSZXF1aXJlZDogYW55O1xuICBrb0hhc0Vycm9yOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpdGVtOiBTdXJ2ZXkuTXVsdGlwbGVUZXh0SXRlbSkge1xuICAgIHN1cGVyKGl0ZW0sIFtdKTtcbiAgICB0aGlzLmtvTmFtZSA9IGtvLm9ic2VydmFibGUoaXRlbS5uYW1lKTtcbiAgICB0aGlzLmtvVGl0bGUgPSBrby5vYnNlcnZhYmxlKGl0ZW0ubmFtZSA9PT0gaXRlbS50aXRsZSA/IFwiXCIgOiBpdGVtLnRpdGxlKTtcbiAgICB0aGlzLmtvSXNSZXF1aXJlZCA9IGtvLm9ic2VydmFibGUodGhpcy5pdGVtLmlzUmVxdWlyZWQpO1xuICAgIHRoaXMua29IYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXlRdWVzdGlvbkVkaXRvcigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yKHRoaXMuaXRlbSwgbnVsbCwgXCJtdWx0aXBsZXRleHRpdGVtXCIpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICBpZiAoc3VwZXIuaGFzRXJyb3IoKSkgcmV0dXJuIHRydWU7XG4gICAgdGhpcy5rb0hhc0Vycm9yKCF0aGlzLmtvTmFtZSgpKTtcbiAgICByZXR1cm4gdGhpcy5rb0hhc0Vycm9yKCk7XG4gIH1cbiAgcHVibGljIGFwcGx5KCkge1xuICAgIHN1cGVyLmFwcGx5KCk7XG4gICAgdGhpcy5pdGVtLm5hbWUgPSB0aGlzLmtvTmFtZSgpO1xuICAgIHRoaXMuaXRlbS50aXRsZSA9IHRoaXMua29UaXRsZSgpO1xuICAgIHRoaXMuaXRlbS5pc1JlcXVpcmVkID0gdGhpcy5rb0lzUmVxdWlyZWQoKTtcbiAgfVxufVxuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJ0ZXh0aXRlbXNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVRleHRJdGVtc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUcmlnZ2Vyc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3Ige1xuICBrb0VsZW1lbnRzOiBhbnk7XG4gIGtvUXVlc3Rpb25zOiBhbnk7XG4gIGtvUGFnZXM6IGFueTtcbiAga29RdWVzdGlvbk5hbWVzOiBhbnk7XG4gIHB1YmxpYyBrb1NlbGVjdGVkOiBhbnk7XG4gIHB1YmxpYyBrb1RyaWdnZXJzOiBhbnk7XG4gIHB1YmxpYyBhdmFpbGFibGVUcmlnZ2VyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcml2YXRlIHRyaWdnZXJDbGFzc2VzOiBBcnJheTxTdXJ2ZXkuSnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm9uRGVsZXRlQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYua29JdGVtcy5yZW1vdmUoc2VsZi5rb1NlbGVjdGVkKCkpO1xuICAgIH07XG4gICAgdGhpcy5vbkFkZENsaWNrID0gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgc2VsZi5hZGRJdGVtKGl0ZW0udmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5rb1NlbGVjdGVkID0ga28ub2JzZXJ2YWJsZShudWxsKTtcbiAgICB0aGlzLmtvUGFnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmtvUXVlc3Rpb25zID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb1F1ZXN0aW9uTmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmtvRWxlbWVudHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLnRyaWdnZXJDbGFzc2VzID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZ2V0Q2hpbGRyZW5DbGFzc2VzKFxuICAgICAgXCJzdXJ2ZXl0cmlnZ2VyXCIsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICB0aGlzLmF2YWlsYWJsZVRyaWdnZXJzID0gdGhpcy5nZXRBdmFpbGFibGVUcmlnZ2VycygpO1xuICAgIHRoaXMua29UcmlnZ2VycyA9IGtvLm9ic2VydmFibGVBcnJheSh0aGlzLmdldExvY2FsaXplZFRyaWdnZXJzKCkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRyaWdnZXJzXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdPYmplY3QpIHtcbiAgICAgIHZhciBhbGxRdWVzdGlvbnMgPSAoPFN1cnZleS5TdXJ2ZXk+dGhpcy5lZGl0aW5nT2JqZWN0KS5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICAgIHRoaXMua29QYWdlcyh0aGlzLmdldE5hbWVzKCg8U3VydmV5LlN1cnZleT50aGlzLmVkaXRpbmdPYmplY3QpLnBhZ2VzKSk7XG4gICAgICB0aGlzLmtvUXVlc3Rpb25zKHRoaXMuZ2V0TmFtZXMoYWxsUXVlc3Rpb25zKSk7XG4gICAgICB0aGlzLmtvUXVlc3Rpb25OYW1lcyh0aGlzLmdldFF1ZXN0aW9uTmFtZXMoYWxsUXVlc3Rpb25zKSk7XG4gICAgICB0aGlzLmtvRWxlbWVudHModGhpcy5nZXROYW1lcyh0aGlzLmdldEFsbEVsZW1lbnRzKCkpKTtcbiAgICB9XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5rb1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmtvU2VsZWN0ZWQodGhpcy5rb0l0ZW1zKCkubGVuZ3RoID4gMCA/IHRoaXMua29JdGVtcygpWzBdIDogbnVsbCk7XG4gICAgfVxuICB9XG4gIC8vVE9ETyB0aGlzIGNvZGUgc2hvdWxkIGJlIGluIHRoZSBsaWJyYXJ5XG4gIHByaXZhdGUgZ2V0QWxsRWxlbWVudHMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBwYWdlcyA9ICg8U3VydmV5LlN1cnZleT50aGlzLmVkaXRpbmdPYmplY3QpLnBhZ2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkRWxlbWVuZXRzSW50b0xpc3QocGFnZXNbaV0sIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBhZGRFbGVtZW5ldHNJbnRvTGlzdChlbGVtZW50OiBhbnksIGxpc3Q6IEFycmF5PGFueT4pIHtcbiAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50LmdldEVsZW1lbnRzSW5EZXNpZ24oZmFsc2UpO1xuICAgIGlmICghZWxlbWVudHMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsaXN0LnB1c2goZWxlbWVudHNbaV0pO1xuICAgICAgdGhpcy5hZGRFbGVtZW5ldHNJbnRvTGlzdCg8U3VydmV5LlN1cnZleUVsZW1lbnQ+ZWxlbWVudHNbaV0sIGxpc3QpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGFkZEl0ZW0odHJpZ2dlclR5cGU6IHN0cmluZykge1xuICAgIHZhciB0cmlnZ2VyID0gU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuY3JlYXRlQ2xhc3ModHJpZ2dlclR5cGUpO1xuICAgIHZhciB0cmlnZ2VySXRlbSA9IHRoaXMuY3JlYXRlUHJvcGVydHlUcmlnZ2VyKHRyaWdnZXIpO1xuICAgIHRoaXMua29JdGVtcy5wdXNoKHRyaWdnZXJJdGVtKTtcbiAgICB0aGlzLmtvU2VsZWN0ZWQodHJpZ2dlckl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JJdGVtKGl0ZW06IGFueSkge1xuICAgIHZhciBqc29uT2JqID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCk7XG4gICAgdmFyIHRyaWdnZXIgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyhpdGVtLmdldFR5cGUoKSk7XG4gICAganNvbk9iai50b09iamVjdChpdGVtLCB0cmlnZ2VyKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQcm9wZXJ0eVRyaWdnZXIoPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyPnRyaWdnZXIpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVJdGVtRnJvbUVkaXRvckl0ZW0oZWRpdG9ySXRlbTogYW55KSB7XG4gICAgdmFyIGVkaXRvclRyaWdnZXIgPSA8U3VydmV5UHJvcGVydHlUcmlnZ2VyPmVkaXRvckl0ZW07XG4gICAgcmV0dXJuIGVkaXRvclRyaWdnZXIuY3JlYXRlVHJpZ2dlcigpO1xuICB9XG4gIHByaXZhdGUgZ2V0TG9jYWxpemVkVHJpZ2dlcnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdmFpbGFibGVUcmlnZ2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSB0aGlzLmF2YWlsYWJsZVRyaWdnZXJzW2ldO1xuICAgICAgcmVzLnB1c2goeyB2YWx1ZTogbmFtZSwgdGV4dDogZWRpdG9yTG9jYWxpemF0aW9uLmdldFRyaWdnZXJOYW1lKG5hbWUpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZ2V0QXZhaWxhYmxlVHJpZ2dlcnMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmlnZ2VyQ2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy50cmlnZ2VyQ2xhc3Nlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldE5hbWVzKGl0ZW1zOiBBcnJheTxhbnk+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIGlmIChpdGVtW1wibmFtZVwiXSkge1xuICAgICAgICBuYW1lcy5wdXNoKGl0ZW1bXCJuYW1lXCJdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25OYW1lcyhxdWVzdGlvbnM6IEFycmF5PFN1cnZleS5JUXVlc3Rpb24+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICg8U3VydmV5LlF1ZXN0aW9uQmFzZT5xdWVzdGlvbnNbaV0pLmFkZENvbmRpdGlvbk5hbWVzKGl0ZW1zKTtcbiAgICB9XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLmluZGV4T2YoXCJbXCIpIDwgMCkge1xuICAgICAgICBuYW1lcy5wdXNoKGl0ZW1zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlUHJvcGVydHlUcmlnZ2VyKFxuICAgIHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyXG4gICk6IFN1cnZleVByb3BlcnR5VHJpZ2dlciB7XG4gICAgdmFyIHRyaWdnZXJJdGVtID0gbnVsbDtcbiAgICBpZiAodHJpZ2dlci5nZXRUeXBlKCkgPT0gXCJ2aXNpYmxldHJpZ2dlclwiKSB7XG4gICAgICB0cmlnZ2VySXRlbSA9IG5ldyBTdXJ2ZXlQcm9wZXJ0eVZpc2libGVUcmlnZ2VyKFxuICAgICAgICA8U3VydmV5LlN1cnZleVRyaWdnZXJWaXNpYmxlPnRyaWdnZXIsXG4gICAgICAgIHRoaXMua29QYWdlcyxcbiAgICAgICAgdGhpcy5rb0VsZW1lbnRzXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHJpZ2dlci5nZXRUeXBlKCkgPT0gXCJzZXR2YWx1ZXRyaWdnZXJcIikge1xuICAgICAgdHJpZ2dlckl0ZW0gPSBuZXcgU3VydmV5UHJvcGVydHlTZXRWYWx1ZVRyaWdnZXIoXG4gICAgICAgIDxTdXJ2ZXkuU3VydmV5VHJpZ2dlclNldFZhbHVlPnRyaWdnZXIsXG4gICAgICAgIHRoaXMua29RdWVzdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdHJpZ2dlckl0ZW0pIHtcbiAgICAgIHRyaWdnZXJJdGVtID0gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlcih0cmlnZ2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyaWdnZXJJdGVtO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgcHJpdmF0ZSB0cmlnZ2VyVHlwZTogc3RyaW5nO1xuICBhdmFpbGFibGVPcGVyYXRvcnMgPSBbXTtcbiAga29OYW1lOiBhbnk7XG4gIGtvT3BlcmF0b3I6IGFueTtcbiAga29WYWx1ZTogYW55O1xuICBrb1R5cGU6IGFueTtcbiAga29UZXh0OiBhbnk7XG4gIGtvSXNWYWxpZDogYW55O1xuICBrb1JlcXVpcmVWYWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlcikge1xuICAgIHRoaXMuYXZhaWxhYmxlT3BlcmF0b3JzID0gU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmdldE9wZXJhdG9ycygpO1xuICAgIHRoaXMudHJpZ2dlclR5cGUgPSB0cmlnZ2VyLmdldFR5cGUoKTtcbiAgICB0aGlzLmtvVHlwZSA9IGtvLm9ic2VydmFibGUodGhpcy50cmlnZ2VyVHlwZSk7XG4gICAgdGhpcy5rb05hbWUgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXIubmFtZSk7XG4gICAgdGhpcy5rb09wZXJhdG9yID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyLm9wZXJhdG9yKTtcbiAgICB0aGlzLmtvVmFsdWUgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXIudmFsdWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvUmVxdWlyZVZhbHVlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlbGYua29PcGVyYXRvcigpICE9IFwiZW1wdHlcIiAmJiBzZWxmLmtvT3BlcmF0b3IoKSAhPSBcIm5vdGVtcHR5XCI7XG4gICAgfSk7XG4gICAgdGhpcy5rb0lzVmFsaWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICBpZiAoc2VsZi5rb05hbWUoKSAmJiAoIXNlbGYua29SZXF1aXJlVmFsdWUoKSB8fCBzZWxmLmtvVmFsdWUoKSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMua29UZXh0ID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgc2VsZi5rb05hbWUoKTtcbiAgICAgIHNlbGYua29PcGVyYXRvcigpO1xuICAgICAgc2VsZi5rb1ZhbHVlKCk7XG4gICAgICByZXR1cm4gc2VsZi5nZXRUZXh0KCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVRyaWdnZXIoKTogU3VydmV5LlN1cnZleVRyaWdnZXIge1xuICAgIHZhciB0cmlnZ2VyID0gPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyPlN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKFxuICAgICAgdGhpcy50cmlnZ2VyVHlwZVxuICAgICk7XG4gICAgdHJpZ2dlci5uYW1lID0gdGhpcy5rb05hbWUoKTtcbiAgICB0cmlnZ2VyLm9wZXJhdG9yID0gdGhpcy5rb09wZXJhdG9yKCk7XG4gICAgdHJpZ2dlci52YWx1ZSA9IHRoaXMua29WYWx1ZSgpO1xuICAgIHJldHVybiB0cmlnZ2VyO1xuICB9XG4gIHByaXZhdGUgZ2V0VGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5rb0lzVmFsaWQoKSlcbiAgICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudHJpZ2dlck5vdFNldFwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnRyaWdnZXJSdW5JZlwiKSArXG4gICAgICBcIiAnXCIgK1xuICAgICAgdGhpcy5rb05hbWUoKSArXG4gICAgICBcIicgXCIgK1xuICAgICAgdGhpcy5nZXRPcGVyYXRvclRleHQoKSArXG4gICAgICB0aGlzLmdldFZhbHVlVGV4dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldE9wZXJhdG9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHZhciBvcCA9IHRoaXMua29PcGVyYXRvcigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdmFpbGFibGVPcGVyYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmF2YWlsYWJsZU9wZXJhdG9yc1tpXS5uYW1lID09IG9wKVxuICAgICAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVPcGVyYXRvcnNbaV0udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG9wO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtvUmVxdWlyZVZhbHVlKCkpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBcIiBcIiArIHRoaXMua29WYWx1ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVZpc2libGVUcmlnZ2VyIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgcHVibGljIHBhZ2VzOiBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJPYmplY3RzO1xuICBwdWJsaWMgcXVlc3Rpb25zOiBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJPYmplY3RzO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXJWaXNpYmxlLFxuICAgIGtvUGFnZXM6IGFueSxcbiAgICBrb1F1ZXN0aW9uczogYW55XG4gICkge1xuICAgIHN1cGVyKHRyaWdnZXIpO1xuICAgIHRoaXMucGFnZXMgPSBuZXcgU3VydmV5UHJvcGVydHlUcmlnZ2VyT2JqZWN0cyhcbiAgICAgIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZVwiKSxcbiAgICAgIGtvUGFnZXMoKSxcbiAgICAgIHRyaWdnZXIucGFnZXNcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25zID0gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHMoXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlXCIpLFxuICAgICAga29RdWVzdGlvbnMoKSxcbiAgICAgIHRyaWdnZXIucXVlc3Rpb25zXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlVHJpZ2dlcigpOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlciB7XG4gICAgdmFyIHRyaWdnZXIgPSA8U3VydmV5LlN1cnZleVRyaWdnZXJWaXNpYmxlPnN1cGVyLmNyZWF0ZVRyaWdnZXIoKTtcbiAgICB0cmlnZ2VyLnBhZ2VzID0gdGhpcy5wYWdlcy5rb0Nob29zZW4oKTtcbiAgICB0cmlnZ2VyLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zLmtvQ2hvb3NlbigpO1xuICAgIHJldHVybiB0cmlnZ2VyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVNldFZhbHVlVHJpZ2dlciBleHRlbmRzIFN1cnZleVByb3BlcnR5VHJpZ2dlciB7XG4gIGtvUXVlc3Rpb25zOiBhbnk7XG4gIGtvc2V0VG9OYW1lOiBhbnk7XG4gIGtvc2V0VmFsdWU6IGFueTtcbiAga29pc1ZhcmlhYmxlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlclNldFZhbHVlLCBrb1F1ZXN0aW9uczogYW55KSB7XG4gICAgc3VwZXIodHJpZ2dlcik7XG4gICAgdGhpcy5rb1F1ZXN0aW9ucyA9IGtvUXVlc3Rpb25zO1xuICAgIHRoaXMua29zZXRUb05hbWUgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXIuc2V0VG9OYW1lKTtcbiAgICB0aGlzLmtvc2V0VmFsdWUgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXIuc2V0VmFsdWUpO1xuICAgIHRoaXMua29pc1ZhcmlhYmxlID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyLmlzVmFyaWFibGUpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVUcmlnZ2VyKCk6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyIHtcbiAgICB2YXIgdHJpZ2dlciA9IDxTdXJ2ZXkuU3VydmV5VHJpZ2dlclNldFZhbHVlPnN1cGVyLmNyZWF0ZVRyaWdnZXIoKTtcbiAgICB0cmlnZ2VyLnNldFRvTmFtZSA9IHRoaXMua29zZXRUb05hbWUoKTtcbiAgICB0cmlnZ2VyLnNldFZhbHVlID0gdGhpcy5rb3NldFZhbHVlKCk7XG4gICAgdHJpZ2dlci5pc1ZhcmlhYmxlID0gdGhpcy5rb2lzVmFyaWFibGUoKTtcbiAgICByZXR1cm4gdHJpZ2dlcjtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHMge1xuICBrb09iamVjdHM6IGFueTtcbiAga29DaG9vc2VuOiBhbnk7XG4gIGtvU2VsZWN0ZWQ6IGFueTtcbiAga29DaG9vc2VuU2VsZWN0ZWQ6IGFueTtcbiAgcHVibGljIG9uRGVsZXRlQ2xpY2s6IGFueTtcbiAgcHVibGljIG9uQWRkQ2xpY2s6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmcsXG4gICAgYWxsT2JqZWN0czogQXJyYXk8c3RyaW5nPixcbiAgICBjaG9vc2VuT2JqZWN0czogQXJyYXk8c3RyaW5nPlxuICApIHtcbiAgICB0aGlzLmtvQ2hvb3NlbiA9IGtvLm9ic2VydmFibGVBcnJheShjaG9vc2VuT2JqZWN0cyk7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFsbE9iamVjdHNbaV07XG4gICAgICBpZiAoY2hvb3Nlbk9iamVjdHMuaW5kZXhPZihpdGVtKSA8IDApIHtcbiAgICAgICAgYXJyYXkucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5rb09iamVjdHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoYXJyYXkpO1xuICAgIHRoaXMua29TZWxlY3RlZCA9IGtvLm9ic2VydmFibGUoKTtcbiAgICB0aGlzLmtvQ2hvb3NlblNlbGVjdGVkID0ga28ub2JzZXJ2YWJsZSgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm9uRGVsZXRlQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZGVsZXRlSXRlbSgpO1xuICAgIH07XG4gICAgdGhpcy5vbkFkZENsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFkZEl0ZW0oKTtcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZGVsZXRlSXRlbSgpIHtcbiAgICB0aGlzLmNoYW5nZUl0ZW1zKHRoaXMua29DaG9vc2VuU2VsZWN0ZWQoKSwgdGhpcy5rb0Nob29zZW4sIHRoaXMua29PYmplY3RzKTtcbiAgfVxuICBwcml2YXRlIGFkZEl0ZW0oKSB7XG4gICAgdGhpcy5jaGFuZ2VJdGVtcyh0aGlzLmtvU2VsZWN0ZWQoKSwgdGhpcy5rb09iamVjdHMsIHRoaXMua29DaG9vc2VuKTtcbiAgfVxuICBwcml2YXRlIGNoYW5nZUl0ZW1zKGl0ZW06IHN0cmluZywgcmVtb3ZlZEZyb206IGFueSwgYWRkVG86IGFueSkge1xuICAgIHJlbW92ZWRGcm9tLnJlbW92ZShpdGVtKTtcbiAgICBhZGRUby5wdXNoKGl0ZW0pO1xuICAgIHJlbW92ZWRGcm9tLnNvcnQoKTtcbiAgICBhZGRUby5zb3J0KCk7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwidHJpZ2dlcnNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlcnNFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VHJpZ2dlcnNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlPYmplY3RFZGl0b3IgfSBmcm9tIFwiLi4vb2JqZWN0RWRpdG9yXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VmFsaWRhdG9yc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3Ige1xuICBwcml2YXRlIHNlbGVjdGVkT2JqZWN0RWRpdG9yOiBTdXJ2ZXlPYmplY3RFZGl0b3I7XG4gIHB1YmxpYyBrb1NlbGVjdGVkOiBhbnk7XG4gIHB1YmxpYyBrb1ZhbGlkYXRvcnM6IGFueTtcbiAgcHVibGljIGF2YWlsYWJsZVZhbGlkYXRvcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JDbGFzc2VzOiBBcnJheTxTdXJ2ZXkuSnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yID0gbmV3IFN1cnZleU9iamVjdEVkaXRvcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3Iub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgc2VsZi5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICBvcHRpb25zLnByb3BlcnR5LFxuICAgICAgICBvcHRpb25zLm9iamVjdCxcbiAgICAgICAgb3B0aW9ucy5uZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmtvU2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuICAgIHRoaXMua29TZWxlY3RlZC5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYuc2VsZWN0ZWRPYmplY3RFZGl0b3Iuc2VsZWN0ZWRPYmplY3QgPVxuICAgICAgICBuZXdWYWx1ZSAhPSBudWxsID8gbmV3VmFsdWUudmFsaWRhdG9yIDogbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnZhbGlkYXRvckNsYXNzZXMgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoXG4gICAgICBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdGhpcy5hdmFpbGFibGVWYWxpZGF0b3JzID0gdGhpcy5nZXRBdmFpbGFibGVWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5rb1ZhbGlkYXRvcnMgPSBrby5vYnNlcnZhYmxlQXJyYXkodGhpcy5nZXRMb2NhbGl6ZWRWYWxpZGF0b3JzKCkpO1xuICAgIHRoaXMub25EZWxldGVDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5rb0l0ZW1zLnJlbW92ZShzZWxmLmtvU2VsZWN0ZWQoKSk7XG4gICAgfTtcbiAgICB0aGlzLm9uQWRkQ2xpY2sgPSBmdW5jdGlvbihpdGVtKSB7XG4gICAgICBzZWxmLmFkZEl0ZW0oaXRlbS52YWx1ZSk7XG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YWxpZGF0b3JzXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMua29TZWxlY3RlZCkge1xuICAgICAgdGhpcy5rb1NlbGVjdGVkKHRoaXMua29JdGVtcygpLmxlbmd0aCA+IDAgPyB0aGlzLmtvSXRlbXMoKVswXSA6IG51bGwpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHtcbiAgICB2YXIganNvbk9iaiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpO1xuICAgIHZhciB2YWxpZGF0b3IgPSBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyhpdGVtLmdldFR5cGUoKSk7XG4gICAganNvbk9iai50b09iamVjdChpdGVtLCB2YWxpZGF0b3IpO1xuICAgIHRoaXMuc2V0SXRlbVByb3BlcnRpZXModmFsaWRhdG9yKTtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VmFsaWRhdG9ySXRlbSh2YWxpZGF0b3IpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVJdGVtRnJvbUVkaXRvckl0ZW0oZWRpdG9ySXRlbTogYW55KSB7XG4gICAgdmFyIGl0ZW0gPSA8U3VydmV5UHJvcGVydHlWYWxpZGF0b3JJdGVtPmVkaXRvckl0ZW07XG4gICAgZGVsZXRlIGl0ZW0udmFsaWRhdG9yW1wic3VydmV5XCJdO1xuICAgIHJldHVybiBpdGVtLnZhbGlkYXRvcjtcbiAgfVxuICBwcml2YXRlIGFkZEl0ZW0odmFsaWRhdG9yVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIG5ld1ZhbGlkYXRvciA9IG5ldyBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvckl0ZW0oXG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyh2YWxpZGF0b3JUeXBlKVxuICAgICk7XG4gICAgdGhpcy5zZXRJdGVtUHJvcGVydGllcyhuZXdWYWxpZGF0b3IudmFsaWRhdG9yKTtcbiAgICB0aGlzLmtvSXRlbXMucHVzaChuZXdWYWxpZGF0b3IpO1xuICAgIHRoaXMua29TZWxlY3RlZChuZXdWYWxpZGF0b3IpO1xuICB9XG4gIHByaXZhdGUgc2V0SXRlbVByb3BlcnRpZXModmFsaWRhdG9yOiBhbnkpIHtcbiAgICBpZiAodGhpcy5vYmplY3QpIHtcbiAgICAgIHZhbGlkYXRvcltcInN1cnZleVwiXSA9IHRoaXMub2JqZWN0LnN1cnZleTtcbiAgICB9XG4gICAgdmFsaWRhdG9yLmxvY093bmVyID0gdGhpcztcbiAgfVxuICBwcml2YXRlIGdldExvY2FsaXplZFZhbGlkYXRvcnMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hdmFpbGFibGVWYWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMuYXZhaWxhYmxlVmFsaWRhdG9yc1tpXTtcbiAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHRleHQ6IGVkaXRvckxvY2FsaXphdGlvbi5nZXRWYWxpZGF0b3JOYW1lKG5hbWUpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldEF2YWlsYWJsZVZhbGlkYXRvcnMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52YWxpZGF0b3JDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaCh0aGlzLnZhbGlkYXRvckNsYXNzZXNbaV0ubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBvblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIG9iajogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgaWYgKHRoaXMua29TZWxlY3RlZCgpID09IG51bGwpIHJldHVybjtcbiAgICB0aGlzLmtvU2VsZWN0ZWQoKS52YWxpZGF0b3JbcHJvcGVydHkubmFtZV0gPSBuZXdWYWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlWYWxpZGF0b3JJdGVtIHtcbiAgcHVibGljIHRleHQ6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHVibGljIHZhbGlkYXRvcjogU3VydmV5LlN1cnZleVZhbGlkYXRvcikge1xuICAgIHRoaXMudGV4dCA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRWYWxpZGF0b3JOYW1lKHZhbGlkYXRvci5nZXRUeXBlKCkpO1xuICB9XG59XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInZhbGlkYXRvcnNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VmFsaWRhdG9yc0VkaXRvcihwcm9wZXJ0eSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlWYWxpZGF0b3JzRWRpdG9yLnRzIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hZG9ybmVycy9pdGVtLWVkaXRvci5zY3NzXG4vLyBtb2R1bGUgaWQgPSA2M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Fkb3JuZXJzL2xhYmVsLWVkaXRvci5zY3NzXG4vLyBtb2R1bGUgaWQgPSA2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hZG9ybmVycy9yYXRpbmctaXRlbS1lZGl0b3Iuc2Nzc1xuLy8gbW9kdWxlIGlkID0gNjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hZG9ybmVycy9zZWxlY3QtaXRlbXMtZWRpdG9yLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDY3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYWRvcm5lcnMvdGl0bGUtZWRpdG9yLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDY4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHN0eWxlPVxcXCJkaXNwbGF5Om5vbmU7XFxcIj48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWN0aW9uYWRkdG90b29sYm94XFxcIj48cGF0aCBkPVxcXCJNNy4zIDhIMXYyaDUuMmMuMi0uNy42LTEuNCAxLjEtMnpNMTAgNi4yVjVIMXYyaDcuM2MuNS0uMyAxLjEtLjYgMS43LS44ek0xIDJoOXYySDF6TTExLjUgN0M5IDcgNyA5IDcgMTEuNVM5IDE2IDExLjUgMTZzNC41LTIgNC41LTQuNVMxNCA3IDExLjUgN3ptMi41IDVoLTJ2MmgtMXYtMkg5di0xaDJWOWgxdjJoMnYxelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25jb252ZXJ0dG9cXFwiPjxwYXRoIGQ9XFxcIk0zIDEwTDAgN2g2ek0xMyA3bDMgM2gtNnpcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNOCA0YzEuNSAwIDIuOC44IDMuNCAyaDIuMmMtLjgtMi4zLTMtNC01LjctNEM0LjcgMiAyIDQuNyAyIDhoMmMwLTIuMiAxLjgtNCA0LTR6TTExLjkgOWMtLjQgMS43LTIgMy0zLjkgMy0xIDAtMS45LS40LTIuNi0xSDIuOGMxIDEuOCAzIDMgNS4yIDMgMyAwIDUuNC0yLjIgNS45LTVoLTJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmNvcHlcXFwiPjxwYXRoIGQ9XFxcIk0yIDZoOXY5SDJ6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTUgM3YyaDd2N2gyVjN6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmRlbGV0ZVxcXCI+PHBhdGggZD1cXFwiTTggMkM0LjcgMiAyIDQuNyAyIDhzMi43IDYgNiA2IDYtMi43IDYtNi0yLjctNi02LTZ6bTMgOGwtMSAxLTItMi0yIDItMS0xIDItMi0yLTIgMS0xIDIgMiAyLTIgMSAxLTIgMiAyIDJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMzIgMzJcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmRyYWdlbGVtZW50XFxcIj48cGF0aCBkPVxcXCJNNCAxMGgyNGEyIDIgMCAwIDAgMC00SDRhMiAyIDAgMCAwIDAgNHptMjQgNEg0YTIgMiAwIDAgMCAwIDRoMjRhMiAyIDAgMCAwIDAtNHptMCA4SDRhMiAyIDAgMCAwIDAgNGgyNGEyIDIgMCAwIDAgMC00elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25lZGl0ZWxlbWVudFxcXCI+PHBhdGggZD1cXFwiTTEgMTVoNGwtNC00ek03IDVsLTUgNSA0IDQgNS01ek0xNCA2bC00LTQtMiAyIDQgNHpNOSAxNGg1djFIOXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWN0aW9uaGlkZXRpdGxlXFxcIj48cGF0aCBkPVxcXCJNMTUuNyA3LjdjLS4xLS4xLTEuNS0xLjctMy40LTNMMTUgMmwtMS0xLTIuOSAyLjlDMTAuMSAzLjQgOSAzIDggMyA0LjMgMyAuNCA3LjUuMyA3LjdMMCA4bC4zLjNjLjEuMSAxLjUgMS43IDMuNCAzTDEgMTRsMSAxIDIuOS0yLjljMSAuNSAyLjEuOSAzLjEuOSAzLjcgMCA3LjYtNC41IDcuNy00LjdMMTYgOGwtLjMtLjN6TTIgOGMuOC0uOCAzLjQtMyA2LTMgLjYgMCAuNiAwIDAgMC0xLjcgMC0zIDEuMy0zIDMgMCAuNi4yIDEuMS40IDEuNmwtLjYuNkMzLjUgOS40IDIuNSA4LjUgMiA4em02IDNjLS42IDAtLjYgMCAwIDAgMS43IDAgMy0xLjMgMy0zIDAtLjYtLjItMS4xLS40LTEuNmwuNi0uNmMxLjMuOCAyLjMgMS43IDIuOCAyLjItLjguOC0zLjQgMy02IDN6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmlzcmVxdWlyZWRcXFwiPjxjaXJjbGUgY3g9XFxcIjcuNVxcXCIgY3k9XFxcIjEzLjVcXFwiIHI9XFxcIjEuNVxcXCI+PC9jaXJjbGU+PHBhdGggZD1cXFwiTTggMTBsMS05SDZsMSA5elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25ub3RyZXF1aXJlZFxcXCI+PHBhdGggZD1cXFwiTTE0IDFMOC40IDYuNiA5IDFINmwuOCA3LjJMMSAxNGwxIDFMMTUgMnpcXFwiPjwvcGF0aD48Y2lyY2xlIGN4PVxcXCI3LjVcXFwiIGN5PVxcXCIxMy41XFxcIiByPVxcXCIxLjVcXFwiPjwvY2lyY2xlPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25zaG93dGl0bGVcXFwiPjxwYXRoIGQ9XFxcIk0xNS43IDcuN0MxNS42IDcuNSAxMS43IDMgOCAzUy40IDcuNS4zIDcuN0wwIDhsLjMuM2MuMS4yIDQgNC43IDcuNyA0LjdzNy42LTQuNSA3LjctNC43TDE2IDhsLS4zLS4zek04IDExYy0yLjYgMC01LjItMi4yLTYtMyAuOC0uOCAzLjQtMyA2LTNzNS4yIDIuMiA2IDNjLS44LjgtMy40IDMtNiAzelxcXCI+PC9wYXRoPjxjaXJjbGUgY3g9XFxcIjhcXFwiIGN5PVxcXCI4XFxcIiByPVxcXCIzXFxcIj48L2NpcmNsZT48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWRkXFxcIj48cGF0aCBkPVxcXCJNMTQgN2gtNFYzSDd2NEgzdjNoNHY0aDN2LTRoNHpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMCAxMFxcXCIgaWQ9XFxcImljb24tYXJyb3dfZG93bl8xMHgxMFxcXCI+PHBhdGggZD1cXFwiTTIgMkwwIDRsNSA1IDUtNS0yLTItMyAzelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEwIDEwXFxcIiBpZD1cXFwiaWNvbi1hcnJvd191cF8xMHgxMFxcXCI+PHBhdGggZD1cXFwiTTggOWwyLTItNS01LTUgNSAyIDIgMy0zelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDM0IDM0XFxcIiBpZD1cXFwiaWNvbi1hcnJvd2Rvd25fMzR4MzRcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6I2ZmZn1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0xMiAxNmwyLTIgMyAzIDMtMyAyIDItNSA1elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiBpZD1cXFwiaWNvbi1jbG91ZF8yNHgyNFxcXCI+PHN0eWxlPjwhW0NEQVRBWy5zdDB7ZmlsbDojMWFiMzk0fV1dPjwvc3R5bGU+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTc1IDYuNUM3NSA0LjYgNzMuNCAzIDcxLjUgM1M2OCA0LjYgNjggNi41YzAgMS40LjggMi42IDIgMy4yLS4yIDEtLjcgMS44LTEuNyAyLjMtLjQuMi0uOS40LTEuMy42LS44LjMtMS43LjYtMi41LjktLjIuMS0uMy4xLS41LjJ2LTZjMS4yLS42IDItMS44IDItMy4yQzY2IDIuNiA2NC40IDEgNjIuNSAxUzU5IDIuNiA1OSA0LjVjMCAxLjQuOCAyLjYgMiAzLjJ2OS43Yy0xLjIuNi0yIDEuOC0yIDMuMiAwIDEuOCAxLjYgMy40IDMuNSAzLjRzMy41LTEuNiAzLjUtMy41YzAtMS40LS44LTIuNi0yLTMuMi4xLS41LjQtMSAuOS0xLjIuMy0uMS42LS4zIDEtLjQgMS4xLS40IDIuMS0uNyAzLjItMS4yIDEuNC0uNiAyLjUtMS41IDMuMS0yLjkuMi0uNC4zLTEuMS40LTEuOEM3NCA5LjMgNzUgOC4xIDc1IDYuNXpNNjIuNSAzYy44IDAgMS41LjcgMS41IDEuNVM2My4zIDYgNjIuNSA2IDYxIDUuMyA2MSA0LjUgNjEuNyAzIDYyLjUgM3ptMCAxOWMtLjggMC0xLjUtLjctMS41LTEuNXMuNy0xLjUgMS41LTEuNSAxLjUuNyAxLjUgMS41LS43IDEuNS0xLjUgMS41ek03MCA2LjVjMC0uOC43LTEuNSAxLjUtMS41czEuNS43IDEuNSAxLjVTNzIuMyA4IDcxLjUgOCA3MCA3LjMgNzAgNi41ek05IDE4bDEgMSAyLTJ2Nmgydi02bDIgMiAxLTEtNC00elxcXCI+PC9wYXRoPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0yMC45IDcuOWMuMS0uMy4xLS42LjEtLjkgMC0yLjgtMi4yLTUtNS01LTIuNiAwLTQuNyAxLjktNC45IDQuNEMxMC4zIDUuNiA5LjIgNSA4IDUgNS44IDUgNCA2LjggNCA5di4yYy0xLjcuNC0zIDEuMy0zIDMuOCAwIDIuMyAyLjQgMyA0IDNoM2w1LTUgNSA1YzIuOCAwIDUtMS4yIDUtNCAwLTEuNy0uOC0zLjEtMi4xLTQuMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYXV0b2NvbXBsZXRlXFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiMzZDRkNWR9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTUgNkg3djEwaDl2LTFIOHYtMmg3djJoMVY2aC0xem0wIDZIOHYtMmg3djJ6bTAtM0g4VjdoN3Yyek0zIDEwSDFWNGgyVjNIMHY4aDN6TTE0IDVoMVYzSDZ2MWg4ek01IDFoMVYwSDN2MWgxdjExSDN2MWgzdi0xSDV6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWJhcnJhdGluZ1xcXCI+PHN0eWxlPjwhW0NEQVRBWy5zdDB7ZmlsbDojM2Q0ZDVkfV1dPjwvc3R5bGU+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTEyLjEgMTVsLTQuNi0yLjRMMi45IDE1bC45LTUuMUwwIDYuM2w1LjItLjdMNy41IDFsMi4zIDQuNiA1LjIuNy0zLjggMy42LjkgNS4xelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1kYXRlcGlja2VyXFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiMzZDRkNWR9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMyA3aDJ2Mkgzek03IDExaDJ2Mkg3ek0zIDExaDJ2Mkgzek0xMSAxMWgydjJoLTJ6TTExIDdoMnYyaC0yek0xMCA2SDZ2NGg0VjZ6TTkgOUg3VjdoMnYyek00IDBoMXYzSDR6TTExIDBoMXYzaC0xelxcXCI+PC9wYXRoPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0xMyAydjJoLTNWMkg2djJIM1YySDB2MTRoMTZWMmgtM3ptMiAxM0gxVjVoMTR2MTB6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWVkaXRvclxcXCI+PHN0eWxlPjwhW0NEQVRBWy5zdDB7ZmlsbDojM2Q0ZDVkfV1dPjwvc3R5bGU+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTEgM2gydjVIMnYxaDRWOEg1VjNoMnYxaDFWMUgwdjNoMXpNMTAgNWg2djFoLTZ6TTEwIDhoNnYxaC02ek0wIDExaDE2djFIMHpNMCAxNGgxNnYxSDB6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWltYWdlcGlja2VyXFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiMzZDRkNWR9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTUgMTRIMFYxaDE1djEzek0xIDEzaDEzVjJIMXYxMXpcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMiAzdjloMTFWM0gyem00IDFjLjYgMCAxIC40IDEgMXMtLjQgMS0xIDEtMS0uNC0xLTEgLjQtMSAxLTF6bS0zIDdsMi0zIDEgMSAyLTMgNCA1SDN6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLW5vdWlzbGlkZXJcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0wIDEwaDE2djJIMHpNMiA0djNsMiAyIDItMlY0ek0xMCA0djNsMiAyIDItMlY0elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1zaW5nYXR1cmVwYWRcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0wIDB2MTVoMTZWMEgwem0xNSAxNEgxVjFoMTR2MTN6XFxcIj48L3BhdGg+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTIuNiAxMC4yYy4xLjEuMS4yLjIuMy0uMi4zLS40LjYtLjcuOGwuNy43Yy4yLS4zLjUtLjYuNy0uOWguMWMuMi4xLjkuMSAxLjEuMSAxLjUtLjEgMi4zLS41IDIuOC0uOGguMWwuNi4zaC42Yy43LS4xIDEuOS0uOCAyLjUtMS4yLjItLjEuNS0uMy41LS4zdi4yYzAgLjIgMCAuMy4xLjUuMS4zLjMuNC42LjUuMiAwIC40IDAgLjUtLjEuMS0uMy44LTEgMS0xLjNWOGMtLjEuMS0uMy4yLS40LjQtLjIuMi0uNS40LS44LjZsLS4xLjF2LS4zYzAtLjIgMC0uNC0uMS0uNS0uMS0uNC0uNS0uNi0uOS0uNC0uMS4xLS40LjItLjYuNC0uOS42LTIgMS4yLTIuMiAxLjMtLjEgMC0uMi4xLS40LjFsLjEtLjFjLjMtLjMuNy0uNi45LTEgLjItLjMuMy0uNi4zLS45IDAtLjQgMC0uNy0uMi0xLjEtLjEtLjMtLjQtLjYtLjgtLjctLjItLjEtLjQtLjEtLjcgMC0uMi4xLS41LjItLjcuNC0uMy4zLS41LjYtLjYgMS0uMS4yLS4xLjUtLjEuNyAwIC40IDAgLjcuMSAxLjEgMCAuMi4xLjMuMi41LS42LjMtMS41LjctMi44LjZ2LS4xYzAtLjEuMS0uMy4yLS40LjQtLjcuNy0xLjQuOS0yLjEuMi0uNi4zLTEuMy4zLTEuOVY0LjNjMC0uMy0uMS0uNi0uMy0uOC0uMi0uNC0uNi0uNi0xLS41LS4zLjEtLjUuMi0uNy40LS4zLjItLjYuNS0uOC45LS4yLjUtLjQgMS0uNiAxLjYtLjEuNS0uMiAxLS4yIDEuNXMwIDEgLjEgMS40Yy4xLjYuMyAxIC41IDEuNHptNS0yLjVjLjEtLjIuMi0uNS40LS42LjItLjIuNC0uMi43LS4yLjEgMCAuMi4xLjIuMi4xLjMuMS42LS4xLjgtLjIuMy0uNC42LS42LjgtLjIuMi0uMy4zLS41LjQtLjEtLjEtLjEtLjItLjEtLjR2LTF6TTMgNi43Yy4xLS42LjMtMS4zLjYtMS44LjEtLjMuMy0uNS41LS44LjEgMCAuMi0uMS4yLS4xLjEtLjEuMiAwIC4zLjEuMS4xLjEuMy4xLjQgMCAuNC4xLjkgMCAxLjMgMCAuOC0uMiAxLjYtLjUgMi4zLS4zLjUtLjUgMS0uOCAxLjUtLjEgMC0uMi0uMS0uMi0uMi0uMi0uNi0uMy0xLjItLjMtMS44IDAtLjMuMS0uNi4xLS45elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1zb3J0YWJsZWpzXFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiMzZDRkNWR9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNNyAxaDl2Mkg3ek05IDZoN3YySDl6TTExIDExaDV2MmgtNXpNNSAxMGwxIDFjLTIuMiAwLTQtMS44LTQtNCAwLTEuOSAxLjMtMy40IDMtMy45di0yQzIuMiAxLjUgMCA0IDAgN2MwIDMuMyAyLjcgNiA1LjkgNkg2bC0xIDEgMSAxIDMtMy0zLTMtMSAxelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi10YWdib3hcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0xNSAxMUgwVjVoMTV2NnpNMSAxMGgxM1Y2SDF2NHpcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMiA3aDR2Mkgyek03IDdoNHYySDd6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGlkPVxcXCJpY29uLWRlbGV0ZV8yNHgyNFxcXCI+PHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGZpbGw9XFxcIiMxQUIzOTRcXFwiIGQ9XFxcIk02IDhsMi0yIDQgNCA0LTQgMiAyLTQgNCA0IDQtMiAyLTQtNC00IDQtMi0yIDQtNC00LTR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGlkPVxcXCJpY29uLWVkaXRcXFwiPjxnIGZpbGwtcnVsZT1cXFwiZXZlbm9kZFxcXCIgY2xpcC1ydWxlPVxcXCJldmVub2RkXFxcIj48cGF0aCBkPVxcXCJNMTkgNGwtOSA5IDQgNCA5LTktNC00ek04IDE1djRoNGwtNC00ek0xIDE3djJoNHYtMkgxelxcXCI+PC9wYXRoPjwvZz48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYm9vbGVhblxcXCI+PHBhdGggZD1cXFwiTTAgMTZoMTBWNkgwdjEwem0yLTZsMiAyIDQtNCAxIDEtNSA1LTMtMyAxLTF6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTUgMXY0aDFWMmg4djhoLTN2MWg0VjF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWNoZWNrYm94XFxcIj48cGF0aCBkPVxcXCJNMSAxdjE0aDE0VjFIMXptNiAxMEw0IDhsMS0xIDIgMiA0LTQgMSAxLTUgNXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tY29tbWVudFxcXCI+PHBhdGggZD1cXFwiTTggMkM0LjEgMiAxIDQuMiAxIDdjMCAxLjkgMS41IDMuNiAzLjggNC40QzQuNiAxMy4xIDMgMTQgMyAxNHMxLjUtLjIgMi43LS45Yy40LS4yLjktLjggMS4zLTEuMi4zLjEuNi4xIDEgLjEgMy45IDAgNy0yLjIgNy01cy0zLjEtNS03LTV6TTQgOGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMXptNCAwYy0uNiAwLTEtLjQtMS0xcy40LTEgMS0xIDEgLjQgMSAxLS40IDEtMSAxem00IDBjLS42IDAtMS0uNC0xLTFzLjQtMSAxLTEgMSAuNCAxIDEtLjQgMS0xIDF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWRlZmF1bHRcXFwiPjxwYXRoIGQ9XFxcIk0wIDRoNFYwSDB2NHptNiAwaDRWMEg2djR6bTYtNHY0aDRWMGgtNHpNMCAxMGg0VjZIMHY0em02IDBoNFY2SDZ2NHptNiAwaDRWNmgtNHY0ek0wIDE2aDR2LTRIMHY0em02IDBoNHYtNEg2djR6bTYgMGg0di00aC00djR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWRyb3Bkb3duXFxcIj48cGF0aCBkPVxcXCJNMSAxdjZoMTRWMUgxem0xMCA1TDggM2wxLTEgMiAyIDItMiAxIDEtMyAzem0tOCA1aDEyVjlIM3Yyem0wIDRoMTJ2LTJIM3YyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1leHByZXNzaW9uXFxcIj48cGF0aCBkPVxcXCJNMTUgOWwtNCA0LTItMi0xIDEgMyAzIDUtNXpNNCA0djFoMnYxSDN2M2g0VjRINHptMiA0SDRWN2gydjF6TTggOGgxdjFIOHpcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMSAxaDEzdjdsMS0xVjBIMHYxMmg2bDEtMUgxelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0xMCA0aDF2MWgtMXpNOSA1aDF2MUg5ek0xMSA1aDF2MWgtMXpNMTEgM2gxdjFoLTF6TTkgM2gxdjFIOXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tZmlsZVxcXCI+PHBhdGggZD1cXFwiTTkgMHY1aDV6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTggMEgydjE2aDEyVjZIOHpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24taHRtbFxcXCI+PHBhdGggZD1cXFwiTTQgNEwwIDhsNCA0IDEtMS0zLTMgMy0zek0xMSA0bC0xIDEgMyAzLTMgMyAxIDEgNC00elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1tYXRyaXhcXFwiPjxwYXRoIGQ9XFxcIk00IDFDMi4zIDEgMSAyLjMgMSA0czEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjxjaXJjbGUgY3g9XFxcIjRcXFwiIGN5PVxcXCI0XFxcIiByPVxcXCIxXFxcIj48L2NpcmNsZT48cGF0aCBkPVxcXCJNMTIgN2MxLjcgMCAzLTEuMyAzLTNzLTEuMy0zLTMtMy0zIDEuMy0zIDMgMS4zIDMgMyAzem0wLTVjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yek00IDljLTEuNyAwLTMgMS4zLTMgM3MxLjMgMyAzIDMgMy0xLjMgMy0zLTEuMy0zLTMtM3ptMCA1Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMTIgOWMtMS43IDAtMyAxLjMtMyAzczEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1tYXRyaXhkcm9wZG93blxcXCI+PHBhdGggZD1cXFwiTTQgMUMyLjMgMSAxIDIuMyAxIDRzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiNFxcXCIgY3k9XFxcIjRcXFwiIHI9XFxcIjFcXFwiPjwvY2lyY2xlPjxwYXRoIGQ9XFxcIk0xMiA3YzEuNyAwIDMtMS4zIDMtM3MtMS4zLTMtMy0zLTMgMS4zLTMgMyAxLjMgMyAzIDN6bTAtNWMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6TTQgOWMtMS43IDAtMyAxLjMtMyAzczEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjxjaXJjbGUgY3g9XFxcIjRcXFwiIGN5PVxcXCIxMlxcXCIgcj1cXFwiMVxcXCI+PC9jaXJjbGU+PHBhdGggZD1cXFwiTTEyIDljLTEuNyAwLTMgMS4zLTMgM3MxLjMgMyAzIDMgMy0xLjMgMy0zLTEuMy0zLTMtM3ptMCA1Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tbWF0cml4ZHluYW1pY1xcXCI+PHBhdGggZD1cXFwiTTMgMUMxLjMgMSAwIDIuMyAwIDRzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiM1xcXCIgY3k9XFxcIjRcXFwiIHI9XFxcIjFcXFwiPjwvY2lyY2xlPjxwYXRoIGQ9XFxcIk0xMSA3YzEuNyAwIDMtMS4zIDMtM3MtMS4zLTMtMy0zLTMgMS4zLTMgMyAxLjMgMyAzIDN6bTAtNWMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6TTMgOWMtMS43IDAtMyAxLjMtMyAzczEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek04IDE1aDJsLTItMnpNOS4wMyAxMS45OWw0LjAzLTQuMDMgMS45OCAxLjk4LTQuMDMgNC4wM3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tbXVsdGlwbGV0ZXh0XFxcIj48cGF0aCBkPVxcXCJNMCAydjEyaDE2VjJIMHptNSA5SDJWOWgzdjJ6bTAtNEgyVjVoM3Yyem05IDRIN1Y5aDd2MnptMC00SDdWNWg3djJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLXBhbmVsX2R5bmFtaWNcXFwiPjxwYXRoIGQ9XFxcIk0yIDhoMTB2MUgyek0yIDExaDhsMS0xSDJ6TTkgMTZoMmwtMi0yek0xNCA5bC00IDQgMiAyIDQtNHpNMyAzdjJIMmwyIDIgMi0ySDVWM3pNMTEgNVYzSDl2Mkg4bDIgMiAyLTJ6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTEgMWgxMnY3bDEtMVYwSDB2MTRoN2wxLTFIMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tcGFuZWxcXFwiPjxwYXRoIGQ9XFxcIk0wIDB2MTZoMTZWMEgwem0xNSAxNUgxVjFoMTR2MTR6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTIgMTJoMTJ2Mkgyek0yIDloMTJ2Mkgyek0xMSA4TDggNWgyVjJoMnYzaDJ6TTUgOEwyIDVoMlYyaDJ2M2gyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1wYW5lbGR5bmFtaWNcXFwiPjxwYXRoIGQ9XFxcIk0yIDhoMTB2MUgyek0yIDExaDhsMS0xSDJ6TTkgMTZoMmwtMi0yek0xNCA5bC00IDQgMiAyIDQtNHpNMyAzdjJIMmwyIDIgMi0ySDVWM3pNMTEgNVYzSDl2Mkg4bDIgMiAyLTJ6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTEgMWgxMnY3bDEtMVYwSDB2MTRoN2wxLTFIMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tcmFkaW9ncm91cFxcXCI+PHBhdGggZD1cXFwiTTMgMUMxLjMgMSAwIDIuMyAwIDRzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMXptMCA0Yy0xLjcgMC0zIDEuMy0zIDNzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMXpNOCAzdjJoOFYzSDh6bTAgMTBoOHYtMkg4djJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLXJhdGluZ1xcXCI+PHBhdGggZD1cXFwiTTAgN2gxbDEtMXY1aDFWNUgyTDAgN3ptNSA1aDVWNEg1djh6bTEtNWgyVjZINlY1aDN2M0g3djJoMnYxSDZWN3ptNi0ydjFoMnYxaC0ydjFoMnYyaC0ydjFoM1Y1aC0zelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi10ZXh0XFxcIj48cGF0aCBkPVxcXCJNMiAxdjNoMVYzaDR2MTBINXYxaDZ2LTFIOVYzaDR2MWgxVjFIMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgaWQ9XFxcImljb24tZm9ya18yNHgyNFxcXCI+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGQ9XFxcIk0tNDAtMjBjLTEuMiAwLTItLjktMi0ydi0yYzAtMS4xLjktMiAyLTJoLjFjMS4xIDAgMiAuOSAyIDJ2Mi4xYy0uMSAxLTEgMS45LTIuMSAxLjl6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjVcXFwiIGQ9XFxcIk0tNDAtMmMtMS4yIDAtMi0uOS0yLTJ2LTJjMC0xLjEuOS0yIDItMmguMWMxLjEgMCAyIC45IDIgMnYyYy0uMSAxLjEtMSAyLTIuMSAyelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4yXFxcIiBkPVxcXCJNLTUyLTE0YzAtMS4yLjktMiAyLTJoMi4xYzEuMSAwIDIgLjkgMiAydi4xYzAgMS4xLS45IDItMiAySC01MGMtMS4xLS4xLTItMS0yLTIuMXpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuN1xcXCIgZD1cXFwiTS0zNC0xNGMwLTEuMi45LTIgMi0yaDIuMWMxLjEgMCAyIC45IDIgMnYuMWMwIDEuMS0uOSAyLTIgMkgtMzJjLTEuMS0uMS0yLTEtMi0yLjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjFcXFwiIGQ9XFxcIk0tNDQuNS0xOC42Yy0uOC44LTIuMS44LTIuOC4xbC0xLjItMS4yYy0uOC0uOC0uOC0yIDAtMi44bC4xLS4xYy44LS44IDItLjggMi44IDBsMS4yIDEuMmMuNy44LjcgMi4xLS4xIDIuOHpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuNlxcXCIgZD1cXFwiTS0zMS41LTUuNWMtLjguOC0yLjEuOC0yLjguMWwtMS4yLTEuMmMtLjgtLjgtLjgtMiAwLTIuOGwuMS0uMWMuOC0uOCAyLS44IDIuOCAwbDEuMiAxLjJjLjcuOC43IDItLjEgMi44elxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4zXFxcIiBkPVxcXCJNLTQ4LjUtNS41Yy0uOC0uOC0uOC0yLjEtLjEtMi44bDEuMi0xLjJjLjgtLjggMi0uOCAyLjggMGwuMS4xYy44LjguOCAyIDAgMi44bC0xLjIgMS4yYy0uNy43LTIgLjctMi44LS4xelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi44XFxcIiBkPVxcXCJNLTM1LjQtMTguNWMtLjgtLjgtLjgtMi4xLS4xLTIuOGwxLjItMS4yYy44LS44IDItLjggMi44IDBsLjEuMWMuOC44LjggMiAwIDIuOGwtMS4yIDEuMmMtLjguNy0yLjEuNy0yLjgtLjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tMjItMTNsMi0yIDQgNCA5LTkgMiAyLTExIDExelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk00MS0xOWgtMS4yYy0uMi0uNy0uNC0xLjMtLjgtMS45bC44LS44Yy40LS40LjQtMSAwLTEuNGwtLjctLjdjLS40LS40LTEtLjQtMS40IDBsLS44LjhjLS42LS40LTEuMi0uNi0xLjktLjhWLTI1YzAtLjUtLjUtMS0xLTFoLTFjLS41IDAtMSAuNS0xIDF2MS4yYy0uNy4yLTEuMy40LTEuOS44bC0uOC0uOGMtLjQtLjQtMS0uNC0xLjQgMGwtLjcuN2MtLjQuNC0uNCAxIDAgMS40bC44LjhjLS40LjYtLjYgMS4yLS44IDEuOUgyNmMtLjUgMC0xIC41LTEgMXYxYzAgLjUuNSAxIDEgMWgxLjJjLjIuNy40IDEuMy44IDEuOWwtLjguOGMtLjQuNC0uNCAxIDAgMS40bC43LjdjLjQuNCAxIC40IDEuNCAwbC44LS44Yy42LjQgMS4yLjYgMS45Ljh2MS4yYzAgLjUuNSAxIDEgMWgxYy41IDAgMS0uNSAxLTF2LTEuMmMuNy0uMiAxLjMtLjQgMS45LS44bC44LjhjLjQuNCAxIC40IDEuNCAwbC43LS43Yy40LS40LjQtMSAwLTEuNGwtLjgtLjhjLjQtLjYuNi0xLjIuOC0xLjlINDFjLjUgMCAxLS41IDEtMXYtMWMwLS41LS41LTEtMS0xem0tNy41IDUuNWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0elxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi45XFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNMTMtMTV2LTNoLTEuMmMtLjEtLjQtLjMtLjgtLjUtMS4ybC45LS45LTIuMi0yLS45LjljLS40LS4yLS44LS40LTEuMi0uNVYtMjNINXYxLjJjLS40LjEtLjguMy0xLjIuNWwtLjgtLjhMLjgtMjBsLjkuOWMtLjIuNC0uNC44LS41IDEuMkgwdjNoMS4yYy4xLjQuMy44LjUgMS4ybC0uOS43TDMtMTAuOGwuOS0uOWMuNC4yLjguNCAxLjIuNXYxLjJoM3YtMS4yYy40LS4xLjgtLjMgMS4yLS41bC45LjkgMi4xLTIuMS0uOS0uOWMuMi0uNC40LS44LjUtMS4ySDEzem0tNi41IDEuNWMtMS43IDAtMy0xLjMtMy0zczEuMy0zIDMtMyAzIDEuMyAzIDMtMS4zIDMtMyAzelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi42XFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNMjMtOXYtMmgtMS4xYy0uMS0uNC0uMi0uNy0uNC0xbC44LS44LTEuNC0xLjQtLjkuOGMtLjMtLjItLjctLjMtMS0uNFYtMTVoLTJ2MS4xYy0uNC4xLS43LjItMSAuNGwtLjgtLjgtMS40IDEuNC44LjhjLS4yLjMtLjMuNy0uNCAxSDEzdjJoMS4xYy4xLjQuMi43LjQgMWwtLjguOCAxLjQgMS40LjktLjdjLjMuMi43LjMgMSAuNFYtNWgydi0xLjFjLjQtLjEuNy0uMiAxLS40bC44LjggMS40LTEuNC0uOC0uOWMuMi0uMy4zLS43LjQtMUgyM3ptLTUgMWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjVcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNjktN2gzdjVoLTN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNjktMjNoM3Y1aC0zelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4yXFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNLTcyLjk5My0xMy45OTN2M2gtNXYtM3pcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuN1xcXCIgZmlsbD1cXFwiIzlEOUZBMVxcXCIgZD1cXFwiTS01Ni45OTMtMTMuOTkzdjNoLTV2LTN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjZcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNjQuNjE1LTcuNTQ5bDIuMTIxLTIuMTIgMy41MzYgMy41MzUtMi4xMjIgMi4xMjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjFcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNzUuOTgtMTguNzkxbDIuMTIxLTIuMTIyIDMuNTM2IDMuNTM2LTIuMTIyIDIuMTIxelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4zXFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNLTcyLjUwNS05LjY2OWwyLjEyMSAyLjEyMS0zLjUzNSAzLjUzNi0yLjEyMi0yLjEyMXpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuOFxcXCIgZmlsbD1cXFwiIzlEOUZBMVxcXCIgZD1cXFwiTS02MS4xNC0yMC45MTJsMi4xMjEgMi4xMjEtMy41MzUgMy41MzYtMi4xMjItMi4xMjF6XFxcIj48L3BhdGg+PHBhdGggZmlsbD1cXFwiIzFBQjM5NFxcXCIgZD1cXFwiTTIxIDYuNUMyMSA0LjYgMTkuNCAzIDE3LjUgM1MxNCA0LjYgMTQgNi41YzAgMS40LjggMi42IDIgMy4yLS4yIDEtLjcgMS44LTEuNyAyLjMtLjQuMi0uOS40LTEuMy42LS44LjMtMS43LjYtMi41LjktLjIuMS0uMy4xLS41LjJ2LTZjMS4yLS42IDItMS44IDItMy4yQzEyIDIuNiAxMC40IDEgOC41IDFTNSAyLjYgNSA0LjVjMCAxLjQuOCAyLjYgMiAzLjJ2OS43Yy0xLjIuNi0yIDEuOC0yIDMuMkM1IDIyLjQgNi42IDI0IDguNSAyNHMzLjUtMS42IDMuNS0zLjVjMC0xLjQtLjgtMi42LTItMy4yLjEtLjUuNC0xIC45LTEuMi4zLS4xLjYtLjMgMS0uNCAxLjEtLjQgMi4xLS43IDMuMi0xLjIgMS40LS42IDIuNS0xLjUgMy4xLTIuOS4yLS40LjMtMS4xLjQtMS44QzIwIDkuMyAyMSA4LjEgMjEgNi41ek04LjUgM2MuOCAwIDEuNS43IDEuNSAxLjVTOS4zIDYgOC41IDYgNyA1LjMgNyA0LjUgNy43IDMgOC41IDN6bTAgMTljLS44IDAtMS41LS43LTEuNS0xLjVTNy43IDE5IDguNSAxOXMxLjUuNyAxLjUgMS41UzkuMyAyMiA4LjUgMjJ6TTE2IDYuNWMwLS44LjctMS41IDEuNS0xLjVzMS41LjcgMS41IDEuNVMxOC4zIDggMTcuNSA4IDE2IDcuMyAxNiA2LjV6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTIgMTJcXFwiIGlkPVxcXCJpY29uLWdlYXJcXFwiPjxwYXRoIGQ9XFxcIk0xMiA3VjVIOS45Yy0uMS0uNC0uMy0uNy0uNS0xbDEuNS0xLjUtMS40LTEuNEw4IDIuNmMtLjMtLjItLjYtLjQtMS0uNVYwSDV2Mi4xYy0uNC4xLS43LjMtMSAuNUwyLjUgMS4xIDEuMSAyLjUgMi42IDRjLS4yLjMtLjQuNi0uNSAxSDB2MmgyLjFjLjEuNC4yLjcuNCAxTDEuMSA5LjVsMS40IDEuNEw0IDkuNGMuMy4yLjcuMyAxIC40VjEyaDJWOS45Yy40LS4xLjctLjIgMS0uNEw5LjUgMTFsMS40LTEuNEw5LjQgOGMuMi0uMy4zLS43LjQtMUgxMnpNNiA4Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24tZ2VhcmFjdGl2ZVxcXCI+PHBhdGggZD1cXFwiTTEyIDdWNUg5LjljLS4xLS40LS4zLS43LS41LTFsMS41LTEuNS0xLjQtMS40TDggMi42Yy0uMy0uMi0uNi0uNC0xLS41VjBINXYyLjFjLS40LjEtLjcuMy0xIC41TDIuNSAxLjEgMS4xIDIuNSAyLjYgNGMtLjIuMy0uNC42LS41IDFIMHYyaDIuMWMuMS40LjIuNy40IDFMMS4xIDkuNWwxLjQgMS40TDQgOS40Yy4zLjIuNy4zIDEgLjRWMTJoMlY5LjljLjQtLjEuNy0uMiAxLS40TDkuNSAxMWwxLjQtMS40TDkuNCA4Yy4yLS4zLjMtLjcuNC0xSDEyek02IDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1pbnBsYWNlY2hlY2tcXFwiPjxwYXRoIGQ9XFxcIk0yIDdsMS0xIDIgMiA1LTUgMSAxLTYgNnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24taW5wbGFjZWRlbGV0ZVxcXCI+PHBhdGggZD1cXFwiTTMgMkwyIDNsMyAzLTMgMyAxIDEgMy0zIDMgMyAxLTEtMy0zIDMtMy0xLTEtMyAzelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1pbnBsYWNlZHJhZ2dhYmxlXFxcIj48cGF0aCBkPVxcXCJNMCA0aDd2N0gwelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0yIDNoNnY2aDFWMkgyelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk00IDFoNnY2aDFWMEg0elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1pbnBsYWNlZWRpdFxcXCI+PHBhdGggZD1cXFwiTTEgMTFoM0wxIDh6TTYgM0wyIDdsMyAzIDQtNHpNMTEgNEw4IDEgNyAybDMgM3pNNyAxMGg1djFIN3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24taW5wbGFjZXBsdXNcXFwiPjxwYXRoIGQ9XFxcIk0xMSA1SDdWMUg1djRIMXYyaDR2NGgyVjdoNHpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tbGVmdFxcXCI+PHBhdGggZD1cXFwiTTExIDEybC0yIDItNi02IDYtNiAyIDItNCA0elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiBpZD1cXFwiaWNvbi1uZXdfMjR4MjRcXFwiPjxwYXRoIGZpbGw9XFxcIiMxQUIzOTRcXFwiIGQ9XFxcIk0xOCAxMWgtNVY2aC0zdjVINXYzaDV2NWgzdi01aDV6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjAgMjBcXFwiIGlkPVxcXCJpY29uLW5vbmNvbW1lcmNpYWxcXFwiPjxwYXRoIGQ9XFxcIk0xMCAwQzQuNSAwIDAgNC41IDAgMTBzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNS41IDAgMTAgMHpNMiAxMGMwLTEuNC40LTIuOCAxLjEtMy45bDcuNiA3LjZjLS4zLjEtLjYuMi0uOS4yLTEuMSAwLTIuMS0uNC0zLTEuMWwtMSAxLjhjLjIuMi41LjUuOS43cy45LjQgMS40LjVjLjMuMS42LjEuOS4ydjFoMnYtMS4zYy41LS4xLjktLjMgMS4yLS41bDEuNyAxLjdjLTEuMS43LTIuNSAxLjEtMy45IDEuMS00LjQgMC04LTMuNi04LTh6bTE0LjEgNS4xbC0yLjQtMi40di0uM2MwLS42LS4xLTEuMi0uMy0xLjZzLS41LS43LS44LS45Yy0uMy0uMi0uNy0uNC0xLjEtLjVsLTEuMi0uM2MtLjEtLjEtLjItLjEtLjQtLjJMOC40IDcuNGMwLS4zLjItLjYuNC0uOC4zLS4yLjctLjMgMS4zLS4zLjggMCAxLjYuMyAyLjQgMWwuOS0xLjhjLS41LS40LTEtLjctMS42LS45LS4zLS4xLS42LS4yLS45LS4yVjNIOXYxLjRjLS43LjEtMS4zLjMtMS43LjctLjIuMi0uNC40LS41LjdMNC45IDMuOUM2LjMgMi43IDggMiAxMCAyYzQuNCAwIDggMy42IDggOCAwIDItLjcgMy43LTEuOSA1LjF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLXJpZ2h0XFxcIj48cGF0aCBkPVxcXCJNNSA0bDItMiA2IDYtNiA2LTItMiA0LTR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGlkPVxcXCJpY29uLW1vZGlmaWVkXFxcIj48cGF0aCBvcGFjaXR5PVxcXCIuOVxcXCIgZD1cXFwiTTE0IDExVjhoLTEuMmMtLjEtLjQtLjMtLjgtLjUtMS4ybC45LS44TDExIDMuOGwtLjkuOWMtLjMtLjItLjctLjQtMS4xLS41VjNINnYxLjJjLS40LjEtLjguMy0xLjIuNUw0IDMuOCAxLjggNmwuOS45Yy0uMi4zLS40LjctLjUgMS4xSDF2M2gxLjJjLjEuNC4zLjguNSAxLjJsLS45LjhMNCAxNS4ybC45LS45Yy40LjIuOC40IDEuMi41VjE2aDN2LTEuMmMuNC0uMS44LS4zIDEuMi0uNWwuOS45IDIuMS0yLjEtLjktLjljLjItLjQuNC0uOC41LTEuMkgxNHptLTYuNSAxLjVjLTEuNyAwLTMtMS4zLTMtM3MxLjMtMyAzLTMgMyAxLjMgMyAzLTEuMyAzLTMgM3pcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuNlxcXCIgZD1cXFwiTTI0IDE3di0yaC0xLjFjLS4xLS40LS4yLS43LS40LTFsLjgtLjgtMS40LTEuNC0uOS44Yy0uMy0uMi0uNy0uMy0xLS40VjExaC0ydjEuMWMtLjQuMS0uNy4yLTEgLjRsLS44LS44LTEuNCAxLjQuOC44Yy0uMi4zLS4zLjctLjQgMUgxNHYyaDEuMWMuMS40LjIuNy40IDFsLS44LjggMS40IDEuNC44LS44Yy4zLjIuNy4zIDEgLjRWMjFoMnYtMS4xYy40LS4xLjctLjIgMS0uNGwuOC44IDEuNC0xLjQtLjctLjljLjItLjMuMy0uNy40LTFIMjR6bS01IDFjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiBpZD1cXFwiaWNvbi1zYXZlZFxcXCI+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGQ9XFxcIk00IDEzbDItMiA0IDQgOS05IDIgMi0xMSAxMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgaWQ9XFxcImljb24tc2F2aW5nXFxcIj48cGF0aCBvcGFjaXR5PVxcXCIuNVxcXCIgZD1cXFwiTTEwIDE3aDN2NWgtM3pcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuOVxcXCIgZD1cXFwiTTEwIDFoM3Y1aC0zelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4yXFxcIiBkPVxcXCJNNiAxMHYzSDF2LTN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjdcXFwiIGQ9XFxcIk0yMiAxMHYzaC01di0zelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi42XFxcIiBkPVxcXCJNMTQuMzkgMTYuNDVsMi4xMi0yLjEyMSAzLjUzNiAzLjUzNS0yLjEyMSAyLjEyMXpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuMVxcXCIgZD1cXFwiTTIuOTU0IDUuMTM2bDIuMTIxLTIuMTIxTDguNjEgNi41NSA2LjQ5IDguNjcyelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4zXFxcIiBkPVxcXCJNNi40OSAxNC4zMjhsMi4xMiAyLjEyMi0zLjUzNSAzLjUzNS0yLjEyMS0yLjEyMXpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuOFxcXCIgZD1cXFwiTTE3LjkyNSAzLjAxNWwyLjEyMSAyLjEyLTMuNTM1IDMuNTM2LTIuMTIyLTIuMTJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PC9zdmc+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvc3ZnYnVuZGxlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDY5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcImNvbnZlcnQtYWN0aW9uXFxcIj5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZGFfcXVlc3Rpb25fYWN0aW9uXFxcIj5cXG4gICAgICAgIDwhLS0ga28gaWY6IGFsbG93Q2hhbmdlVHlwZSAtLT5cXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XFxcInN2ZGFfY3VycmVudF90eXBlIHN2ZC1tYWluLWNvbG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJmb3JlYWNoOiBhdmFpbGFibGVUeXBlcywgZXZlbnQ6IHsgY2hhbmdlOiBvbkNvbnZlcnRUeXBlIH0sIGF0dHI6IHt0aXRsZTogdGl0bGV9XFxcIj5cXG4gICAgICAgICAgICA8b3B0aW9uIGNsYXNzPVxcXCJzdmQtbGlnaHQtYmctY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJGRhdGEubmFtZSwgdmFsdWU6ICRkYXRhLnZhbHVlLCBhdHRyOntzZWxlY3RlZDogJGRhdGEudmFsdWUgPT09ICRwYXJlbnQudHlwZSA/ICdzZWxlY3RlZCc6IG51bGx9XFxcIj48L29wdGlvbj5cXG4gICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICA8IS0tIGtvIGlmbm90OiBhbGxvd0NoYW5nZVR5cGUgLS0+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRleHRcXFwiIGNsYXNzPVxcXCJzdmRhX2N1cnJlbnRfdHlwZSBzdmQtbWFpbi1jb2xvclxcXCI+IDwvc3Bhbj5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8L3NwYW4+XFxuPC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJhY3Rpb24tc2VwYXJhdG9yXFxcIj5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZGFfYWN0aW9uX3NlcGFyYXRvciBzdmQtZGFyay1ib3JkZXItY29sb3JcXFwiPlxcbiAgICA8L3NwYW4+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL2NvbnZlcnQtYWN0aW9uLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDcwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRfY29udGFpbmVyIHN2ZC1saWdodC1iZy1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHRoZW1lQ3NzXFxcIj5cXG4gICAgPCEtLSBrbyBpZm5vdDogaGF2ZUNvbW1lcmNpYWxMaWNlbnNlIC0tPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzdmRfY29tbWVyY2lhbF9jb250YWluZXJcXFwiPlxcbiAgICAgICAgPGEgY2xhc3M9XFxcInN2ZF9jb21tZXJjaWFsX3RleHRcXFwiIGhyZWY9XFxcImh0dHBzOi8vc3VydmV5anMuaW8vTGljZW5zZXMjQnVpbGRTdXJ2ZXlcXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj5cXG4gICAgICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1ub25jb21tZXJjaWFsJywgc2l6ZTogMjBcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRfY29tbWVyY2lhbF9wcm9kdWN0IHN2ZC1tYWluLWNvbG9yXFxcIj5TdXJ2ZXlKUyBCdWlsZGVyPC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRfbm9uY29tbWVyY2lhbF91c2Ugc3ZkLWxpZ2h0LXRleHQtY29sb3JcXFwiPmZvciBub24tY29tbWVyY2lhbCB1c2Ugb25seTwvc3Bhbj5cXG4gICAgICAgIDwvYT5cXG4gICAgPC9kaXY+XFxuICAgIDwhLS0gL2tvICAtLT5cXG4gICAgPHVsIGNsYXNzPVxcXCJuYXZiYXItZGVmYXVsdCBjb250YWluZXItZmx1aWQgbmF2IG5hdi10YWJzIGVkaXRvci10YWJzIHN2ZC1saWdodC1iZy1jb2xvclxcXCI+XFxuICAgICAgICA8bGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIiBkYXRhLWJpbmQ9XFxcImNzczoge2FjdGl2ZToga29WaWV3VHlwZSgpID09ICdkZXNpZ25lcid9XFxcIj5cXG4gICAgICAgICAgICA8YSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6c2VsZWN0RGVzaWduZXJDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC5kZXNpZ25lcicpXFxcIj48L2E+XFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPGxpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBzaG93SlNPTkVkaXRvclRhYiwgY3NzOiB7YWN0aXZlOiBrb1ZpZXdUeXBlKCkgPT0gJ2VkaXRvcid9XFxcIj5cXG4gICAgICAgICAgICA8YSBjbGFzcz1cXFwibmF2LWxpbmtcXFwiIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6c2VsZWN0RWRpdG9yQ2xpY2ssIHRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQuanNvbkVkaXRvcicpXFxcIj48L2E+XFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPGxpIGNsYXNzPVxcXCJuYXYtaXRlbVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBzaG93VGVzdFN1cnZleVRhYiwgY3NzOiB7YWN0aXZlOiBrb1ZpZXdUeXBlKCkgPT0gJ3Rlc3QnfVxcXCI+XFxuICAgICAgICAgICAgPGEgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOnNlbGVjdFRlc3RDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC50ZXN0U3VydmV5JylcXFwiPjwvYT5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgICA8bGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IHNob3dFbWJlZGVkU3VydmV5VGFiLCBjc3M6IHthY3RpdmU6IGtvVmlld1R5cGUoKSA9PSAnZW1iZWQnfVxcXCI+XFxuICAgICAgICAgICAgPGEgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOnNlbGVjdEVtYmVkQ2xpY2ssIHRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQuZW1iZWRTdXJ2ZXknKVxcXCI+PC9hPlxcbiAgICAgICAgPC9saT5cXG4gICAgPC91bD5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicGFuZWwgY2FyZCBzdmRfY29udGVudCBzdmQtZGFyay1iZy1jb2xvclxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgc3ZkX3N1cnZleV9kZXNpZ25lclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1ZpZXdUeXBlKCkgPT0gJ2Rlc2lnbmVyJ1xcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTIgY29sLW1kLTIgY29sLXNtLTEgY29sLXhzLTEgc3ZkX3Rvb2xib3ggc3ZkLWRhcmstYmctY29sb3JcXFwiPlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiB0b29sYm94LmtvSGFzQ2F0ZWdvcmllcyAtLT5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwtZ3JvdXBcXFwiIHJvbGU9XFxcInRhYmxpc3RcXFwiIGRhdGEtYmluZD1cXFwiZm9yZWFjaDogdG9vbGJveC5rb0NhdGVnb3JpZXNcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtaW5mb1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLXRvb2xib3gtY2F0ZWdvcnktaGVhZGVyXFxcIiByb2xlPVxcXCJ0YWJcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGV4cGFuZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwiY3NzOiB7ICdzdmQtbWFpbi1jb2xvcic6ICFrb0NvbGxhcHNlZCgpIH0sIHRleHQ6IG5hbWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjoga29Db2xsYXBzZWQgLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwiaWNvbi10b29sYm94LWFycm93XFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hcnJvd19kb3duXzEweDEwJywgc2l6ZTogMTBcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBrb0NvbGxhcHNlZCAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJpY29uLXRvb2xib3gtYXJyb3cgc3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYXJyb3dfdXBfMTB4MTAnLCBzaXplOiAxMFxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVxcXCJ0YWJwYW5lbFxcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsgJ3BhbmVsLWNvbGxhcHNlIGNvbGxhcHNlJzoga29Db2xsYXBzZWR9XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBpdGVtcyAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkcmFnZ2FibGU9XFxcInRydWVcXFwiIGNsYXNzPVxcXCJzdmRfdG9vbGJveF9pdGVtIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRyb290LmNsaWNrVG9vbGJveEl0ZW0sIGV2ZW50OntkcmFnc3RhcnQ6IGZ1bmN0aW9uKGVsLCBlKSB7ICRyb290LmRyYWdnaW5nVG9vbGJveEl0ZW0oJGRhdGEsIGUpOyByZXR1cm4gdHJ1ZTt9LCBkcmFnZW5kOiBmdW5jdGlvbihlbCwgZSkgeyAkcm9vdC5kcmFnRW5kKCk7IH19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwiYXR0cjoge3RpdGxlOiB0aXRsZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBwYXJhbXM9XFxcImljb25OYW1lOiBpY29uTmFtZVxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRfdG9vbGJveF9pdGVtX3RleHQgaGlkZGVuLXNtIGhpZGRlbi14c1xcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OnRpdGxlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogIXRvb2xib3gua29IYXNDYXRlZ29yaWVzKCkgLS0+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF90b29sYm94X3RpdGxlIGhpZGRlbi1zbSBoaWRkZW4teHNcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdlZC50b29sYm94JylcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHRvb2xib3gua29JdGVtcyAtLT5cXG4gICAgICAgICAgICAgICAgPGRpdiBkcmFnZ2FibGU9XFxcInRydWVcXFwiIGNsYXNzPVxcXCJzdmRfdG9vbGJveF9pdGVtIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRyb290LmNsaWNrVG9vbGJveEl0ZW0sIGV2ZW50OntkcmFnc3RhcnQ6IGZ1bmN0aW9uKGVsLCBlKSB7ICRyb290LmRyYWdnaW5nVG9vbGJveEl0ZW0oJGRhdGEsIGUpOyByZXR1cm4gdHJ1ZTt9LCBkcmFnZW5kOiBmdW5jdGlvbihlbCwgZSkgeyAkcm9vdC5kcmFnRW5kKCk7IH19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwiYXR0cjoge3RpdGxlOiB0aXRsZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBwYXJhbXM9XFxcImljb25OYW1lOiBpY29uTmFtZVxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRfdG9vbGJveF9pdGVtX3RleHQgaGlkZGVuLXNtIGhpZGRlbi14c1xcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OnRpdGxlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTEgc3ZkX2VkaXRvcnNcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7J2NvbC1sZy03IGNvbC1tZC03IGNvbC1zbS04Jzoga29TaG93UHJvcGVydHlHcmlkLCAnY29sLWxnLTEwIGNvbC1tZC0xMCBjb2wtc20tMTEnOiAha29TaG93UHJvcGVydHlHcmlkKCksICdzdmRfd2lkZSc6ICFrb1Nob3dQcm9wZXJ0eUdyaWQoKX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmRfdG9vbGJhclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHRvb2xiYXJJdGVtcyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRfYWN0aW9uXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogJGRhdGEuY3NzLCB2aXNpYmxlOiB2aXNpYmxlLCBhdHRyOiB7IGlkOiBpZCB9XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICRkYXRhLnRlbXBsYXRlIHx8ICdzdmQtdG9vbGJhci1idXR0b24nLCBkYXRhOiAkZGF0YS5kYXRhIHx8ICRkYXRhIH0gLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDxwYWdlcy1lZGl0b3IgcGFyYW1zPVxcXCJlZGl0b3I6JGRhdGFcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29TaG93UGFnZXNUb29sYm94XFxcIj5cXG4gICAgICAgICAgICAgICAgPC9wYWdlcy1lZGl0b3I+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9xdWVzdGlvbnNfZWRpdG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCIgaWQ9XFxcInNjcm9sbGFibGVEaXZcXFwiIGRhdGEtYmluZD1cXFwic3R5bGU6IHsgaGVpZ2h0OiBrb0Rlc2lnbmVySGVpZ2h0IH0sIGV2ZW50OiB7IGRyYWdvdmVyOiBkcmFnT3ZlclF1ZXN0aW9uc0VkaXRvciwgZHJvcDogZHJvcE9uUXVlc3Rpb25zRWRpdG9yIH1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cXFwic3VydmV5anNcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogaXNDdXJyZW50UGFnZUVtcHR5IC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZW1wdHktbWVzc2FnZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3N1cnZleS5kcm9wUXVlc3Rpb24nKVxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTMgY29sLW1kLTMgY29sLXNtLTMgaGlkZGVuLXhzIHN2ZF9wcm9wZXJ0aWVzIHN2ZC1saWdodC1ib3JkZXItY29sb3Igc3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2hvd1Byb3BlcnR5R3JpZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9vYmplY3Rfc2VsZWN0b3Igc3ZkLWxpZ2h0LWJvcmRlci1jb2xvclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmRfY3VzdG9tX3NlbGVjdFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cXFwib2JqZWN0U2VsZWN0b3JcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29PYmplY3RzLCBvcHRpb25zVGV4dDogJ3RleHQnLCB2YWx1ZToga29TZWxlY3RlZE9iamVjdFxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwiY2xpY2s6IGVkaXRDdXJyZW50T2JqZWN0LCBhdHRyOiB7IHRpdGxlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2VkLmVkaXRTZWxPYmplY3QnKX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvbiBpY29uLWVkaXRcXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWVkaXQnLCBzaXplOjI0XFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX29iamVjdF9lZGl0b3JcXFwiIGRhdGEtYmluZD1cXFwic3R5bGU6IHtoZWlnaHQ6IGtvRGVzaWduZXJIZWlnaHR9XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnb2JqZWN0ZWRpdG9yJywgZGF0YTogc2VsZWN0ZWRPYmplY3RFZGl0b3IgfVxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29WaWV3VHlwZSgpID09ICdlZGl0b3InXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidGVtcGxhdGU6IHsgbmFtZTogJ2pzb25lZGl0b3InLCBkYXRhOiBqc29uRWRpdG9yIH1cXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29WaWV3VHlwZSgpID09ICd0ZXN0Jywgc3R5bGU6IHt3aWR0aDoga29UZXN0U3VydmV5V2lkdGh9XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlqc0V4YW1wbGVcXFwiIGRhdGEtYmluZD1cXFwidGVtcGxhdGU6IHsgbmFtZTogJ3N1cnZleWxpdmUnLCBkYXRhOiBzdXJ2ZXlMaXZlIH1cXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29WaWV3VHlwZSgpID09ICdlbWJlZCdcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAnc3VydmV5ZW1iZWRpbmcnLCBkYXRhOiBzdXJ2ZXlFbWJlZGluZyB9XFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRlbXBsYXRlOiB7IG5hbWU6ICdxdWVzdGlvbmVkaXRvcicsIGRhdGE6IHF1ZXN0aW9uRWRpdG9yV2luZG93IH1cXFwiPjwvZGl2PlxcbjwvZGl2PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9pbmRleC5odG1sXG4vLyBtb2R1bGUgaWQgPSA3MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJqc29uZWRpdG9yXFxcIj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICFoYXNBY2VFZGl0b3JcXFwiPlxcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVxcXCJzdmRfanNvbl9lZGl0b3JfYXJlYVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6a29UZXh0XFxcIj48L3RleHRhcmVhPlxcbiAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb0Vycm9ycyAtLT5cXG4gICAgICAgIDxkaXY+XFxuICAgICAgICAgICAgPHNwYW4+RXJyb3I6IDwvc3Bhbj48c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPCEtLSAva28gIC0tPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBpZD1cXFwic3VydmV5anNKU09ORWRpdG9yXFxcIiBjbGFzcz1cXFwic3ZkX2pzb25fZWRpdG9yXFxcIj48L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvanNvbmVkaXRvci5odG1sXG4vLyBtb2R1bGUgaWQgPSA3MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXlzLW1hbmFnZVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1tYW5hZ2VcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLW1hbmFnZS1tYXNrXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGlzTG9hZGluZ1xcXCI+PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtbWFuYWdlLWNvbnRyb2wgc3ZkLWxpZ2h0LWJvcmRlci1jb2xvclxcXCI+XFxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwic3ZkLW1hbmFnZS1zZWxlY3RcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWlzRWRpdE1vZGUoKSwgb3B0aW9uczogc3VydmV5cyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ25hbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjdXJyZW50U3VydmV5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnQ2hvb3NlIHN1cnZleSB0byBlZGl0IG9yIHN0YXJ0IGVkaXRpbmcgYW5kIHN1cnZleSB3aWxsIGJlIHNhdmVkIGF1dG9tYXRpY2FsbHkuLi4nXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcInN2ZC1tYW5hZ2UtbmFtZVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpc0VkaXRNb2RlLCB2YWx1ZTogY3VycmVudFN1cnZleU5hbWUsIGV2ZW50OiB7IGtleXVwOiBuYW1lRWRpdG9yS2V5cHJlc3MgfVxcXCJcXG4gICAgICAgICAgICAvPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtbWFuYWdlLWJ1dHRvbnNcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpY29uXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGN1cnJlbnRTdXJ2ZXksIGNsaWNrOiBlZGl0LCBjc3M6IGNzc0VkaXQsIGF0dHI6IHsgdGl0bGU6IHRpdGxlRWRpdCB9XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImljb25cXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWlzRWRpdE1vZGUoKSwgY2xpY2s6IGFkZCwgY3NzOiBjc3NBZGQsIGF0dHI6IHsgdGl0bGU6IHRpdGxlQWRkIH1cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaWNvbiBpY29uLWRlbGV0ZVxcXCIgdGl0bGU9XFxcIkRlbGV0ZSBjdXJyZW50IHN1cnZleVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhaXNFZGl0TW9kZSgpICYmICFzdXJ2ZXlJZCgpICYmIGN1cnJlbnRTdXJ2ZXkoKSwgY2xpY2s6cmVtb3ZlXFxcIj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJhdHRhY2gtc3VydmV5XFxcIj5cXG4gICAgPGEgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjogeyBocmVmOiBhY3Rpb24sIHRpdGxlOiB0aXRsZSB9XFxcIj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpY29uXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogaW5uZXJDc3NcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogdGl0bGVcXFwiPjwvc3Bhbj5cXG4gICAgPC9hPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9tYW5hZ2UuaHRtbFxuLy8gbW9kdWxlIGlkID0gNzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwib2JqZWN0ZWRpdG9yXFxcIj5cXG4gICAgPHRhYmxlIGNsYXNzPVxcXCJ0YWJsZSBzdmRfdGFibGUtbm93cmFwIHN2ZF9wcm9wZXJ0aWVzX2dyaWRcXFwiPlxcbiAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cXFwiZm9yZWFjaDoga29Qcm9wZXJ0aWVzXFxcIj5cXG4gICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdvYmplY3RlZGl0b3Jwcm9wZXJ0eScsIGFmdGVyUmVuZGVyOiAkcGFyZW50LmtvQWZ0ZXJSZW5kZXIgfSAtLT5cXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgIDwvdGJvZHk+XFxuICAgIDwvdGFibGU+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJvYmplY3RlZGl0b3Jwcm9wZXJ0eVxcXCI+XFxuICAgIDx0ciBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkcGFyZW50LmNoYW5nZUFjdGl2ZVByb3BlcnR5KCRkYXRhKSwgY3NzOiB7J2FjdGl2ZSc6ICRwYXJlbnQua29BY3RpdmVQcm9wZXJ0eSgpID09ICRkYXRhfVxcXCI+XFxuICAgICAgICA8dGQgd2lkdGg9XFxcIjUwJVxcXCI+XFxuICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBkaXNwbGF5TmFtZSwgYXR0cjoge3RpdGxlOiB0aXRsZSB8fCBkaXNwbGF5TmFtZX1cXFwiPjwvc3Bhbj5cXG4gICAgICAgIDwvdGQ+XFxuICAgICAgICA8dGQgY2xhc3M9XFxcInN2ZC1saWdodC10ZXh0LWNvbG9yXFxcIiB3aWR0aD1cXFwiNTAlXFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcImNzczogeydmb3JtLWNvbnRyb2wnOiAhZWRpdG9yLmFsd2F5c1Nob3dFZGl0b3IgJiYgKGtvVGV4dCgpID09PSAnJyB8fCBrb1RleHQoKSA9PT0gbnVsbCkgfSwgdGV4dDoga29UZXh0LCB2aXNpYmxlOiAha29Jc1Nob3dFZGl0b3IoKSwgYXR0cjoge3RpdGxlOiBrb1RleHR9XFxcIlxcbiAgICAgICAgICAgICAgICBzdHlsZT1cXFwidGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvSXNTaG93RWRpdG9yKClcXFwiPlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci0nICsgZWRpdG9yVHlwZSwgZGF0YTogJGRhdGEuZWRpdG9yIH0gLS0+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC90ZD5cXG4gICAgPC90cj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvb2JqZWN0ZWRpdG9yLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDc0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN2ZC1wYWdlLXNlbGVjdG9yLXRlbXBsYXRlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic3ZkLXBhZ2Utc2VsZWN0b3Igc3ZkX2N1c3RvbV9zZWxlY3Qgc3ZkLWxpZ2h0LWJnLWNvbG9yIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiPlxcbiAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IHBhZ2VzU2VsZWN0aW9uLCB2YWx1ZTogcGFnZVNlbGVjdGlvbiwgb3B0aW9uc1RleHQ6J25hbWUnXFxcIj48L3NlbGVjdD5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1wYWdlLXNjcm9sbGVyLWFycm93XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBtb3ZlTGVmdCwgYXR0cjoge3RpdGxlOiBnZXRMb2NTdHJpbmcoJ2VkLm1vdmVMZWZ0Jyl9XFxcIj5cXG4gICAgICAgIDxzcGFuPlxcbiAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXNlY29uZGFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1sZWZ0J1xcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuXFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1wYWdlc1xcXCIgZGF0YS1iaW5kPVxcXCJzb3J0YWJsZToge2ZvcmVhY2g6IGVkaXRvci5wYWdlcywgb3B0aW9uczogc29ydGFibGVPcHRpb25zfSwgZXZlbnQ6IHt3aGVlbDogb25XaGVlbH1cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLXBhZ2Ugc3ZkLWxpZ2h0LWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJjc3M6ICRwYXJlbnQuZ2V0UGFnZUNsYXNzKCRkYXRhKSwgY2xpY2s6ICRwYXJlbnQub25QYWdlQ2xpY2tcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtcGFnZS1uYW1lXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IG5hbWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkLXBhZ2UtYWN0aW9ucy1jb250YWluZXJcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3ZnLWljb24gZGF0YS1iaW5kPVxcXCJjc3M6ICRwYXJlbnQuZ2V0UGFnZU1lbnVJY29uQ2xhc3MoJGRhdGEpXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAkcGFyZW50LmdldFBhZ2VNZW51SWNvbkNsYXNzKCRkYXRhKSwgc2l6ZTogMTJcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XFxcInBvc2l0aW9uOiBzdGF0aWNcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLXBhZ2UtYWN0aW9ucyBzdmQtZGFyay1ib3JkZXItY29sb3Igc3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICRwYXJlbnQuc2hvd0FjdGlvbnMoJGRhdGEpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkLXBhZ2UtYWN0aW9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBmdW5jdGlvbihtb2RlbCwgZXZlbnQpIHskcGFyZW50LnNob3dQYWdlU2V0dGluZ3MoJGRhdGEpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9LCBhdHRyOiB7dGl0bGU6ICRwYXJlbnQuZ2V0TG9jU3RyaW5nKCdlZC5lZGl0UGFnZScpfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hY3Rpb25lZGl0ZWxlbWVudCdcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1tYWluLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRwYXJlbnQuZ2V0TG9jU3RyaW5nKCdlZC5lZGl0JylcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1wYWdlLWFjdGlvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24obW9kZWwsIGV2ZW50KSB7JHBhcmVudC5kZWxldGVQYWdlKCRkYXRhKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fSwgYXR0cjoge3RpdGxlOiAkcGFyZW50LmdldExvY1N0cmluZygnZWQuZGVsZXRlUGFnZScpfSwgdmlzaWJsZTogISRwYXJlbnQuaXNMYXN0UGFnZSgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hY3Rpb25kZWxldGUnXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYV9hY3Rpb25fc2VwYXJhdG9yIHN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhJHBhcmVudC5pc0xhc3RQYWdlKClcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkLXBhZ2UtYWN0aW9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBmdW5jdGlvbihtb2RlbCwgZXZlbnQpIHskcGFyZW50LmNvcHlQYWdlKCRkYXRhKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fSwgYXR0cjoge3RpdGxlOiAkcGFyZW50LmdldExvY1N0cmluZygnc3VydmV5LkNvcHknKX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWFjdGlvbmNvcHknXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1wYWdlLXNjcm9sbGVyLWFycm93XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBtb3ZlUmlnaHQsIGF0dHI6IHt0aXRsZTogZ2V0TG9jU3RyaW5nKCdlZC5tb3ZlUmlnaHQnKX1cXFwiPlxcbiAgICAgICAgPHNwYW4+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtc2Vjb25kYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLXJpZ2h0J1xcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1wYWdlLWFkZFxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogYWRkUGFnZSwgYXR0cjoge3RpdGxlOiBnZXRMb2NTdHJpbmcoJ2VkLmFkZE5ld1BhZ2UnKX1cXFwiPlxcbiAgICAgICAgPHNwYW4+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtc2Vjb25kYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWFkZCdcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICA8L3NwYW4+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wYWdlZWRpdG9yLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDc1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLWJvb2xlYW5cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzanMtY2Itd3JhcHBlclxcXCI+XFxuICAgICAgICA8bGFiZWw+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic2pzLWNiLWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cXFwic3ZkX2VkaXRvcl9jb250cm9sXFxcIiB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOiBrb1ZhbHVlLCBkaXNhYmxlOiAkZGF0YS5yZWFkT25seVxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJjaGVja21hcmtcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7ICdzdmQtbWFpbi1iYWNrZ3JvdW5kLWNvbG9yJzoga29WYWx1ZSwgJ3N2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yJzogIWtvVmFsdWUoKSB9XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRkYXRhLmlzRGlwbGF5TmFtZVZpc2libGUgLS0+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzanMtY2ItbGFiZWxcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJGRhdGEuZGlzcGxheU5hbWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICA8L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWJvb2xlYW4uaHRtbFxuLy8gbW9kdWxlIGlkID0gNzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItY2VsbHNcXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWNlbGxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicGFuZWwgY2FyZFxcXCI+XFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToha29DYW5FZGl0KCksIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuY2VsbHNFbXB0eVJvd3NDb2x1bW5zJylcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiAgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0NhbkVkaXRcXFwiIHN0eWxlPVxcXCJvdmVyZmxvdzphdXRvXFxcIj5cXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XFxcInRhYmxlXFxcIj5cXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29Db2x1bW5zIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgICAgIDx0Ym9keT5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29Sb3dzICAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OnJvd1RleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29DZWxscyAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XFxcIm1pbi13aWR0aDoxMjBweFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVxcXCIyXFxcIiBjb2xzPVxcXCIyNVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6dGV4dFxcXCI+PC90ZXh0YXJlYT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxcbiAgICAgICAgICAgIDwvdGFibGU+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jZWxscy5odG1sXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1jb25kaXRpb25cXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcblxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWNvbmRpdGlvblxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInByb3BlcnR5ZWRpdG9yLWNvbmRpdGlvblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWlubGluZSBmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3RcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPVxcXCJtYXgtd2lkdGg6MjAwcHhcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29BZGRDb25kaXRpb25RdWVzdGlvbnMsIHZhbHVlOiBrb0FkZENvbmRpdGlvblF1ZXN0aW9uLCBvcHRpb25zQ2FwdGlvbjogYWRkQ29uZGl0aW9uUXVlc3Rpb25PcHRpb25zXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3RcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cXFwib3B0aW9uczphdmFpbGFibGVPcGVyYXRvcnMsIG9wdGlvbnNWYWx1ZTogJ25hbWUnLCBvcHRpb25zVGV4dDogJ3RleHQnLCB2YWx1ZTprb0FkZENvbmRpdGlvbk9wZXJhdG9yXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgdHlwZT1cXFwidGV4dFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6a29BZGRDb25kaXRpb25WYWx1ZSwgZW5hYmxlOiBrb0FkZENvbnRpb25WYWx1ZUVuYWJsZWRcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMjBweFxcXCJcXG4gICAgICAgICAgICAvPlxcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImVuYWJsZToga29DYW5BZGRDb25kaXRpb24sIGNsaWNrOiBvbkNvbmRpdGlvbkFkZENsaWNrLCB2YWx1ZToga29BZGRDb25kaXRpb25CdXR0b25UZXh0XFxcIlxcbiAgICAgICAgICAgIC8+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX3dyYXBfZWxlbWVudHNcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTprb0hhc1ZhbHVlU3VydmV5XFxcIj5cXG4gICAgICAgICAgICAgICAgPHN1cnZleS13aWRnZXQgcGFyYW1zPVxcXCJzdXJ2ZXk6IGtvVmFsdWVTdXJ2ZXlcXFwiPjwvc3VydmV5LXdpZGdldD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudC5oYXNBY2VFZGl0b3IgLS0+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JGRhdGEuZ2V0TG9jU3RyaW5nKCdwZS5hY2VFZGl0b3JIZWxwJylcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxkaXYgaWQ9XFxcImV4cHJlc3Npb24tYWNlLWVkaXRvclxcXCIgc3R5bGU9XFxcImhlaWdodDogMjAwcHg7IHdpZHRoOiAxMDAlO1xcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlLCBhY2VFZGl0b3I6e3F1ZXN0aW9uczogJHBhcmVudC5hdmFpbGFibGVRdWVzdGlvbnMsIHF1ZXN0aW9uOiAkZGF0YS5lZGl0aW5nT2JqZWN0LCBlZGl0b3I6ICRwYXJlbnR9XFxcIj48L2Rpdj5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcblxcbiAgICAgICAgPCEtLSBrbyBpZjogISRwYXJlbnQuaGFzQWNlRWRpdG9yIC0tPlxcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVxcXCJzdmQtZGFyay1ib3JkZXItY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29WYWx1ZVxcXCIgcm93cz1cXFwiOFxcXCIgYXV0b2ZvY3VzPVxcXCJhdXRvZm9jdXNcXFwiPjwvdGV4dGFyZWE+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG5cXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhc3Npc3RhbnQtdGl0bGVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDokZGF0YS5nZXRMb2NTdHJpbmcoJ3BlLmFzc2lzdGFudFRpdGxlJylcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFzc2lzdGFudC1jb250ZW50XFxcIiBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6YXZhaWxhYmxlUXVlc3Rpb25zXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50LWl0ZW1cXFwiIGRhdGEtYmluZD1cXFwiIHRleHQ6bmFtZSwgY2xpY2s6ZnVuY3Rpb24gKCkgeyAkcGFyZW50Lmluc2VydFF1ZXN0aW9uKCRkYXRhLCAkZWxlbWVudCk7IH0gXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PiAtLT5cXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDokZGF0YS5nZXRMb2NTdHJpbmcoJ3BlLmNvbmRpdGlvbkhlbHAnKVxcXCIgc3R5bGU9XFxcIndoaXRlLXNwYWNlOm5vcm1hbCBcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkZGF0YS5oYXNMb2NTdHJpbmcoJ3BlLmNvbmRpdGlvblNob3dNb3JlVXJsJylcXFwiPlxcbiAgICAgICAgICAgIDxhIGRhdGEtYmluZD1cXFwiYXR0cjogeyBocmVmOiAkZGF0YS5nZXRMb2NTdHJpbmcoJ3BlLmNvbmRpdGlvblNob3dNb3JlVXJsJyl9LCB0ZXh0OiRkYXRhLmdldExvY1N0cmluZygncGUuc2hvd01vcmUnKVxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPjwvYT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWNvbmRpdGlvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSA3OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1jdXN0b21cXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJwcm9wZXJ0eWVkaXRvci1jdXN0b21jb250ZW50XFxcIiwgZGF0YTogJGRhdGEsIGFmdGVyUmVuZGVyOiAkZGF0YS5rb0FmdGVyUmVuZGVyIH0gLS0+PCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1jdXN0b21jb250ZW50XFxcIj48ZGl2PjwvZGl2Pjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItY3VzdG9tLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDc5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXZhbHVlXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC12YWx1ZVxcXCI+XFxuICAgIDxmb3JtPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX3dyYXBfZWxlbWVudHNcXFwiPlxcbiAgICAgICAgICAgIDxzdXJ2ZXktd2lkZ2V0IHBhcmFtcz1cXFwic3VydmV5OiBrb1N1cnZleVxcXCI+PC9zdXJ2ZXktd2lkZ2V0PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZm9ybT5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRlZmF1bHR2YWx1ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1kcm9wZG93blxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9jdXN0b21fc2VsZWN0IHN2ZF9wcm9wZXJ0eV9lZGl0b3JfZHJvcGRvd25cXFwiPlxcbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9lZGl0b3JfY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZSwgZGlzYWJsZTogcmVhZE9ubHksIG9wdGlvbnM6IGtvQ2hvaWNlcywgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJywgIG9wdGlvbnNUZXh0OiAndGV4dCdcXFwiICBzdHlsZT1cXFwid2lkdGg6MTAwJVxcXCI+PC9zZWxlY3Q+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PiBcIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRyb3Bkb3duLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDgxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb25cXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcblxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWV4cHJlc3Npb25cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJwcm9wZXJ0eWVkaXRvci1leHByZXNzaW9uXFxcIj5cXG4gICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuaGFzQWNlRWRpdG9yIC0tPlxcbiAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRyb290LmdldExvY1N0cmluZygncGUuYWNlRWRpdG9ySGVscCcpXFxcIj48L3NwYW4+XFxuICAgICAgICA8ZGl2IGlkPVxcXCJleHByZXNzaW9uLWFjZS1lZGl0b3JcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6IDQwMHB4OyB3aWR0aDogMTAwJTtcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29WYWx1ZSwgYWNlRWRpdG9yOiB7cXVlc3Rpb25zOiAkcGFyZW50LmF2YWlsYWJsZVF1ZXN0aW9ucywgcXVlc3Rpb246ICRkYXRhLmVkaXRpbmdPYmplY3QsIGVkaXRvcjogJHBhcmVudH1cXFwiPjwvZGl2PlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuXFxuICAgICAgICA8IS0tIGtvIGlmOiAhJHBhcmVudC5oYXNBY2VFZGl0b3IgLS0+XFxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XFxcInN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlXFxcIiByb3dzPVxcXCI4XFxcIiBhdXRvZm9jdXM9XFxcImF1dG9mb2N1c1xcXCI+PC90ZXh0YXJlYT5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcblxcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVxcXCJhc3Npc3RhbnRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFzc2lzdGFudC10aXRsZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiRyb290LmdldExvY1N0cmluZygncGUuYXNzaXN0YW50VGl0bGUnKVxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50LWNvbnRlbnRcXFwiIGRhdGEtYmluZD1cXFwiZm9yZWFjaDphdmFpbGFibGVRdWVzdGlvbnNcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhc3Npc3RhbnQtaXRlbVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0Om5hbWUsIGNsaWNrOmZ1bmN0aW9uICgpIHsgJHBhcmVudC5pbnNlcnRRdWVzdGlvbigkZGF0YSwgJGVsZW1lbnQpOyB9IFxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj4gLS0+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5leHByZXNzaW9uSGVscCcpXFxcIiBzdHlsZT1cXFwid2hpdGUtc3BhY2U6bm9ybWFsXFxcIj48L3NwYW4+XFxuICAgICAgICA8IS0tIDxkaXY+XFxuICAgICAgICAgICAgPGEgZGF0YS1iaW5kPVxcXCJ0ZXh0OiRyb290LmdldExvY1N0cmluZygncGUuc2hvd01vcmUnKVxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIGhyZWY9XFxcImh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5UGFyYW1ldGVyP2lkPVF1ZXN0aW9uQmFzZSZwYXJhbWV0ZXI9dmlzaWJsZUlmXFxcIj48L2E+XFxuICAgICAgICA8L2Rpdj4gLS0+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZXhwcmVzc2lvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSA4MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1odG1sXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPjwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcblxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWh0bWxcXFwiPlxcbiAgICA8dGV4dGFyZWEgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlLCBkaXNhYmxlOiByZWFkT25seVxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiIHJvd3M9XFxcIjEwXFxcIiBhdXRvZm9jdXM9XFxcImF1dG9mb2N1c1xcXCI+PC90ZXh0YXJlYT5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWh0bWwuaHRtbFxuLy8gbW9kdWxlIGlkID0gODNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItaXRlbXZhbHVlc1xcXCI+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJyB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1pdGVtdmFsdWVzXFxcIj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvSXNMaXN0XFxcIj5cXG4gICAgICAgIDxkaXYgc3R5bGU9XFxcIm1hcmdpbi1ib3R0b206M3B4XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2hvd1RleHRWaWV3XFxcIj5cXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXNtIGJ0bi14c1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsnYnRuLXByaW1hcnknOiBrb0FjdGl2ZVZpZXcoKSA9PT0gJ2Zvcm0nLCAnYnRuLWxpbmsnOiBrb0FjdGl2ZVZpZXcoKSAhPT0gJ2Zvcm0nfSwgY2xpY2s6Y2hhbmdlVG9Gb3JtVmlld0NsaWNrLCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmZvcm1FbnRyeScpXFxcIj48L2J1dHRvbj5cXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXNtIGJ0bi14c1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsnYnRuLXByaW1hcnknOiBrb0FjdGl2ZVZpZXcoKSAhPT0gJ2Zvcm0nLCAnYnRuLWxpbmsnOiBrb0FjdGl2ZVZpZXcoKSA9PT0gJ2Zvcm0nfSwgY2xpY2s6Y2hhbmdlVG9UZXh0Vmlld0NsaWNrLCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmZhc3RFbnRyeScpXFxcIj48L2J1dHRvbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29BY3RpdmVWaWV3KCkgPT0gJ2Zvcm0nXFxcIiBzdHlsZT1cXFwib3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDpoaWRkZW47IG1heC1oZWlnaHQ6NDAwcHg7bWluLWhlaWdodDoyMDBweFxcXCI+XFxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVxcXCJzdmRfaXRlbXNfdGFibGVcXFwiPlxcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XFxuICAgICAgICAgICAgICAgICAgICA8dHI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBjb2x1bW5zIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6IHRleHRcXFwiPjwvdGg+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XFxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzLWl0ZW1zJyB9IC0tPlxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICA8L3RhYmxlPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtaXRlbXMtY29udHJvbC1mb290ZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTprb0FjdGl2ZVZpZXcoKSA9PSAnZm9ybSdcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zLCBjbGljazogb25BZGRDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuYWRkTmV3JylcXFwiXFxuICAgICAgICAgICAgLz5cXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kYW5nZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zLCBjbGljazogb25DbGVhckNsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5yZW1vdmVBbGwnKVxcXCJcXG4gICAgICAgICAgICAvPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTprb0FjdGl2ZVZpZXcoKSAhPSAnZm9ybSdcXFwiPlxcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInRleHRJbnB1dDoga29JdGVtc1RleHRcXFwiIHN0eWxlPVxcXCJvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OmhpZGRlbjsgbWF4LWhlaWdodDo0MDBweDsgbWluLWhlaWdodDoyNTBweDsgd2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSBrbyBpZjogIWtvSXNMaXN0KCkgLS0+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogXFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1uZXN0ZWRcXFwiLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzLWl0ZW1zXFxcIj5cXG4gICAgPHRib2R5IGRhdGEtYmluZD1cXFwic29ydGFibGU6IHsgZm9yZWFjaDoga29JdGVtcywgb3B0aW9uczogc29ydGFibGVPcHRpb25zIH1cXFwiPlxcbiAgICAgICAgPHRyPlxcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cXFwic3ZkLWl0ZW12YWx1ZS1hY3Rpb25zLWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1kcmFnLWhhbmRsZSBzdmQtaXRlbXZhbHVlLWFjdGlvblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICDimLBcXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zbSBzdmQtdGV4dGl0ZW1zLWVkaXQgc3ZkLWl0ZW12YWx1ZS1hY3Rpb25cXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJHBhcmVudC5oYXNEZXRhaWxCdXR0b24sIGNsaWNrOiAkcGFyZW50Lm9uRWRpdEl0ZW1DbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuaXRlbVZhbHVlRWRpdCcpXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBjZWxscyAtLT5cXG4gICAgICAgICAgICA8dGQ+XFxuICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yJywgZGF0YTogb2JqZWN0UHJvcGVydHkuZWRpdG9yIH0gLS0+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgPHRkPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gYnRuLXhzIGJ0bi1kYW5nZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJHBhcmVudC5rb0FsbG93QWRkUmVtb3ZlSXRlbXMsIGNsaWNrOiAkcGFyZW50Lm9uRGVsZXRlQ2xpY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlXFxcIiBhcmlhLWhpZGRlbj1cXFwidHJ1ZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgPC90cj5cXG4gICAgPC90Ym9keT5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWl0ZW12YWx1ZXMuaHRtbFxuLy8gbW9kdWxlIGlkID0gODRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItbWF0cml4ZHJvcGRvd25jb2x1bW5zXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1tYXRyaXhkcm9wZG93bmNvbHVtbnNcXFwiPlxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29Jc0xpc3RcXFwiPlxcbiAgICAgICAgPHRhYmxlIGNsYXNzPVxcXCJzdmRfaXRlbXNfdGFibGUgc3ZkLW1hdHJpeGRyb3Bkb3duY29sdW1ucy10YWJsZVxcXCI+XFxuICAgICAgICAgICAgPHRoZWFkPlxcbiAgICAgICAgICAgICAgICA8dHI+XFxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogY29sdW1ucyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWJpbmQ9XFxcInRleHQ6IHRleHRcXFwiPjwvdGg+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcbiAgICAgICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cXFwic29ydGFibGU6IHsgZm9yZWFjaDoga29JdGVtcywgb3B0aW9uczogeyBoYW5kbGU6ICcuc3ZkLWRyYWctaGFuZGxlJywgYW5pbWF0aW9uOiAxNTAgfSB9XFxcIj5cXG4gICAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVxcXCJzdmQtaXRlbXZhbHVlLWFjdGlvbnMtY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtZHJhZy1oYW5kbGUgc3ZkLWl0ZW12YWx1ZS1hY3Rpb25cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDimLBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gc3ZkLXRleHRpdGVtcy1lZGl0IHN2ZC1pdGVtdmFsdWUtYWN0aW9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkcGFyZW50Lm9uRWRpdEl0ZW1DbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXRcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5lZGl0JylcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGNlbGxzIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yJywgZGF0YTogb2JqZWN0UHJvcGVydHkuZWRpdG9yIH0gLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XFxcInN2ZC10ZXh0aXRlbXMtY29sdW1uXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gYnRuLWRhbmdlclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkcGFyZW50LmtvQWxsb3dBZGRSZW1vdmVJdGVtcywgY2xpY2s6ICRwYXJlbnQub25EZWxldGVDbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZVxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgPC90Ym9keT5cXG4gICAgICAgIDwvdGFibGU+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtaXRlbXMtY29udHJvbC1mb290ZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBvbkFkZENsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hZGROZXcnKVxcXCIgLz5cXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kYW5nZXJcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uQ2xlYXJDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUucmVtb3ZlQWxsJylcXFwiIC8+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDwhLS0ga28gaWY6ICFrb0lzTGlzdCgpIC0tPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtbmVzdGVkXFxcIiwgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbWF0cml4ZHJvcGRvd25jb2x1bW5zLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW1vZGFsXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXBcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTohJGRhdGEuaXNFZGl0YWJsZVxcXCI+XFxuICAgICAgICA8YSBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkZGF0YS5vblNob3dNb2RhbCwgYXR0cjogeydkYXRhLXRhcmdldCcgOiBtb2RhbE5hbWVUYXJnZXR9XFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IGtvVGV4dFxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9hPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb25cXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXRcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkZGF0YS5vblNob3dNb2RhbCwgYXR0cjogeydkYXRhLXRhcmdldCcgOiBtb2RhbE5hbWVUYXJnZXR9LCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmVkaXQnKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiRkYXRhLmlzRWRpdGFibGVcXFwiPlxcbiAgICAgICAgPGlucHV0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2VkaXRvcl9jb250cm9sXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOiBrb1ZhbHVlXFxcIiAvPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb25cXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXRcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkZGF0YS5vblNob3dNb2RhbCwgYXR0cjogeydkYXRhLXRhcmdldCcgOiBtb2RhbE5hbWVUYXJnZXR9LCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmVkaXQnKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwiYXR0cjoge2lkIDogbW9kYWxOYW1lfVxcXCIgY2xhc3M9XFxcIm1vZGFsXFxcIiByb2xlPVxcXCJkaWFsb2dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1jb250ZW50XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uUmVzZXRDbGlja1xcXCI+JnRpbWVzOzwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVxcXCJtb2RhbC10aXRsZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLmtvVGl0bGVDYXB0aW9uXFxcIj48L2g0PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtYm9keSBzdmRfbm90b3Bib3R0b21wYWRkaW5nc1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbGNvbnRlbnQnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1mb290ZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkZGF0YS5rb1Nob3dBcHBseUJ1dHRvbiwgY2xpY2s6ICRkYXRhLm9uQXBwbHlDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuYXBwbHknKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zZWNvbmRhcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRkYXRhLm9uT2tDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUub2snKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkZGF0YS5vblJlc2V0Q2xpY2ssIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmNhbmNlbCcpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tb2RhbC5odG1sXG4vLyBtb2R1bGUgaWQgPSA4NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1tb2RhbGNvbnRlbnRcXFwiPlxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwiaHRtbDogJGRhdGEua29IdG1sVG9wXFxcIj48L2Rpdj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3Jjb250ZW50LScgKyBlZGl0b3JUeXBlLCBkYXRhOiAkZGF0YSwgYWZ0ZXJSZW5kZXI6ICRkYXRhLmtvQWZ0ZXJSZW5kZXIgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJodG1sOiAkZGF0YS5rb0h0bWxCb3R0b21cXFwiPjwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWxjb250ZW50Lmh0bWxcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW11bHRpcGxldmFsdWVzXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgY2xhc3M9XFxcImJ0bi14c1xcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1tdWx0aXBsZXZhbHVlc1xcXCI+XFxuICAgIDxkaXYgc3R5bGU9XFxcIm1heC1oZWlnaHQ6MzAwcHg7IG92ZXJmbG93LXk6c2Nyb2xsO1xcXCI+XFxuICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHsgZGF0YToga29JdGVtcywgYXM6ICdpdGVtJ30gIC0tPlxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInN0eWxlOntkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xcXCI+XFxuICAgICAgICAgICAgPGxhYmVsPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjoge3ZhbHVlOiBpdGVtLnZhbHVlfSwgY2hlY2tlZDogJHBhcmVudC5rb0VkaXRpbmdWYWx1ZVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImNoZWNrYm94LW1hdGVyaWFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJjaGVja1xcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVxcXCJwb3NpdGlvbjogc3RhdGljO1xcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLnRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tdWx0aXBsZXZhbHVlcy5odG1sXG4vLyBtb2R1bGUgaWQgPSA4OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtbmVzdGVkXFxcIj5cXG4gICAgPGRpdiBzdHlsZT1cXFwicGFkZGluZzogNXB4XFxcIj5cXG4gICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zbVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25DYW5jZWxFZGl0SXRlbUNsaWNrXFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1saXN0LWFsdFxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9idXR0b24+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IGtvRWRpdG9yTmFtZVxcXCI+PC9zcGFuPlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicXVlc3Rpb25lZGl0b3ItY29udGVudFxcXCIsIGRhdGE6IGtvRWRpdEl0ZW0oKS5pdGVtRWRpdG9yIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbmVzdGVkLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDg5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW51bWJlclxcXCI+XFxuICAgIDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9lZGl0b3JfY29udHJvbFxcXCIgdHlwZT1cXFwibnVtYmVyXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOiBrb1ZhbHVlLCBkaXNhYmxlOiByZWFkT25seVxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiIC8+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1udW1iZXIuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItcmVzdGZ1bGxcXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcblxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LXJlc3RmdWxsXFxcIj5cXG4gICAgPGZvcm0+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6IGtvSXRlbXNcXFwiPlxcbiAgICAgICAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XFxcImF0dHI6IHtmb3I6IG5hbWV9LCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLicrbmFtZSlcXFwiPjwvbGFiZWw+XFxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjoge2lkOiBuYW1lfSwgdmFsdWU6a29WYWx1ZVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+PC9pbnB1dD5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cXFwidGl0bGVOYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRyb290LmdldExvY1N0cmluZygncGUudGVzdFNlcnZpY2UnKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIiBzdHlsZT1cXFwiZGlzcGxheTogYmxvY2s7XFxcIj5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IHF1ZXN0aW9uLmtvVmlzaWJsZUNob2ljZXMsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJywgb3B0aW9uc0NhcHRpb246IHF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Zvcm0+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1yZXN0ZnVsbC5odG1sXG4vLyBtb2R1bGUgaWQgPSA5MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1zdHJpbmdcXFwiPlxcbiAgICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6IGtvVmFsdWUsIGRpc2FibGU6IHJlYWRPbmx5LCBhdHRyOiB7cGxhY2Vob2xkZXI6IGRlZmF1bHRWYWx1ZX1cXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlXFxcIiAvPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3Itc3RyaW5nLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDkyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXRleHRcXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+PCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdGV4dFxcXCI+XFxuICAgIDx0ZXh0YXJlYSBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVmFsdWUsIGRpc2FibGU6IHJlYWRPbmx5LCBhdHRyOiB7cm93czogaXNEaXBsYXlOYW1lVmlzaWJsZSA/ICcyJyA6ICc1J31cXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlXFxcIiBhdXRvZm9jdXM9XFxcImF1dG9mb2N1c1xcXCI+PC90ZXh0YXJlYT5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHQuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItdGV4dGl0ZW1zXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC10ZXh0aXRlbXNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbCBjYXJkXFxcIj5cXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cXFwidGFibGVcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29Jc0xpc3RcXFwiPlxcbiAgICAgICAgICAgIDx0aGVhZD5cXG4gICAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5pc1JlcXVpcmVkJylcXFwiPjwvdGg+XFxuICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLm5hbWUnKSwgc3R5bGU6IHt3aWR0aDogaXNUaXRsZVZpc2libGU/ICcnOiAnMTAwJSd9XFxcIj48L3RoPlxcbiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtYmluZD1cXFwidmlzaWJsZTogaXNUaXRsZVZpc2libGUsIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudGl0bGUnKVxcXCI+PC90aD5cXG4gICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcbiAgICAgICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgPHRib2R5PlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGtvSXRlbXMgLS0+XFxuICAgICAgICAgICAgICAgIDx0cj5cXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cXFwic3ZkLXRleHRpdGVtcy1jb2x1bW5cXFwiIHN0eWxlPVxcXCJ3aWR0aDogMTMwcHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtdGV4dGl0ZW1zLWlzcmVxdWlyZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJwcm9wZXJ0eWVkaXRvci1ib29sZWFuXFxcIiwgZGF0YTogeyBrb1ZhbHVlOiBrb0lzUmVxdWlyZWQgfSB9IC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gc3ZkLXRleHRpdGVtcy1lZGl0XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkcGFyZW50Lm9uRWRpdEl0ZW1DbGljaywgYXR0cjogeyB0aXRsZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5lZGl0JykgfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXRcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5lZGl0JylcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICAgICAgICA8dGQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29OYW1lLCBzdHlsZToge3dpZHRoOiAkcGFyZW50LmlzVGl0bGVWaXNpYmxlPyAnMTgwcHgnOiAnMTAwJSd9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XFxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJHBhcmVudC5pc1RpdGxlVmlzaWJsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29UaXRsZVxcXCIgc3R5bGU9XFxcIndpZHRoOjE4MHB4XFxcIiAvPlxcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cXFwic3ZkLXRleHRpdGVtcy1jb2x1bW5cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICRwYXJlbnQua29BbGxvd0FkZFJlbW92ZUl0ZW1zLCBjbGljazogJHBhcmVudC5vbkRlbGV0ZUNsaWNrLCBhdHRyOiB7IHRpdGxlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmRlbGV0ZScpIH1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmVcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XFxcIjRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zLCBjbGljazogb25BZGRDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuYWRkTmV3JylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kYW5nZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zLCBjbGljazogb25DbGVhckNsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5yZW1vdmVBbGwnKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgICAgPC90cj5cXG4gICAgICAgICAgICA8L3Rib2R5PlxcbiAgICAgICAgPC90YWJsZT5cXG4gICAgICAgIDwhLS0ga28gaWY6ICFrb0lzTGlzdCgpIC0tPlxcbiAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicHJvcGVydHllZGl0b3Jjb250ZW50LW5lc3RlZFxcXCIsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHRpdGVtcy5odG1sXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc1xcXCI+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdHJpZ2dlcnNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJwcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvbiBmaXJzdC1hZGRvblxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0FsbG93QWRkUmVtb3ZlSXRlbXNcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkZG1lbnUtY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XFxcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApXFxcIiBvbmNsaWNrPVxcXCJyZXR1cm4gdHJ1ZVxcXCI+PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkZG1lbnVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRhYmluZGV4PVxcXCIwXFxcIiBkYXRhLWJpbmQ9XFxcImF0dHI6IHsgdGl0bGU6ICRyb290LmdldExvY1N0cmluZygncGUuYWRkTmV3JykgfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMgc3ZkLW1haW4tY29sb3JcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgb25jbGljaz1cXFwicmV0dXJuIHRydWVcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwic3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb1RyaWdnZXJzIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkcGFyZW50Lm9uQWRkQ2xpY2ssIHRleHQ6JGRhdGEudGV4dFxcXCI+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3RcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cXFwib3B0aW9uczoga29JdGVtcywgb3B0aW9uc1RleHQ6ICdrb1RleHQnLCB2YWx1ZToga29TZWxlY3RlZFxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0FsbG93QWRkUmVtb3ZlSXRlbXMsIGF0dHI6IHsgdGl0bGU6ICRyb290LmdldExvY1N0cmluZygncGUuZGVsZXRlJykgfSwgZW5hYmxlOiBrb1NlbGVjdGVkKCkgIT0gbnVsbCwgY2xpY2s6IG9uRGVsZXRlQ2xpY2tcXFwiXFxuICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvbiBidG4tZGFuZ2VyXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29TZWxlY3RlZCgpID09IG51bGxcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1F1ZXN0aW9uTmFtZXMoKS5sZW5ndGggPT0gMCwgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5ub3F1ZXN0aW9ucycpXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29RdWVzdGlvbk5hbWVzKCkubGVuZ3RoID4gMCwgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5jcmVhdGV0cmlnZ2VyJylcXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29TZWxlY3RlZCgpICE9IG51bGxcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ3aXRoOiBrb1NlbGVjdGVkXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1pbmxpbmUgZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXBcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VyT24nKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cXFwib3B0aW9uczokcGFyZW50LmtvUXVlc3Rpb25OYW1lcywgdmFsdWU6IGtvTmFtZVxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfY3VzdG9tX3NlbGVjdFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6YXZhaWxhYmxlT3BlcmF0b3JzLCBvcHRpb25zVmFsdWU6ICduYW1lJywgb3B0aW9uc1RleHQ6ICd0ZXh0JywgdmFsdWU6a29PcGVyYXRvclxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvUmVxdWlyZVZhbHVlLCB2YWx1ZTprb1ZhbHVlXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBpZjoga29UeXBlKCkgPT0gJ3Zpc2libGV0cmlnZ2VyJyAtLT5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy02IGNvbC1zbS02XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc2l0ZW1zJywgZGF0YTogcGFnZXMgfSAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTYgY29sLXNtLTZcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzaXRlbXMnLCBkYXRhOiBxdWVzdGlvbnMgfSAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGtvVHlwZSgpID09ICdjb21wbGV0ZXRyaWdnZXInIC0tPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cXFwibWFyZ2luOiAxMHB4XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudHJpZ2dlckNvbXBsZXRlVGV4dCcpXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBrb1R5cGUoKSA9PSAnc2V0dmFsdWV0cmlnZ2VyJyAtLT5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy02IGNvbC1zbS02XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudHJpZ2dlclNldFRvTmFtZScpXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29zZXRUb05hbWVcXFwiIC8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy02IGNvbC1zbS02XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudHJpZ2dlclNldFZhbHVlJylcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29zZXRWYWx1ZVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicHJvcGVydHllZGl0b3ItYm9vbGVhblxcXCIsIGRhdGE6IHsga29WYWx1ZToga29pc1ZhcmlhYmxlLCBkaXNwbGF5TmFtZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VySXNWYXJpYWJsZScpIH0gfSAtLT5cXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdHJpZ2dlcnMuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtc1xcXCI+XFxuICAgIDxkaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRpdGxlXFxcIj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXAgaW5wdXQtZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgbXVsdGlwbGU9XFxcIm11bHRpcGxlXFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6a29DaG9vc2VuLCB2YWx1ZToga29DaG9vc2VuU2VsZWN0ZWRcXFwiPjwvc2VsZWN0PlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvbiBidG4tZGFuZ2VyXFxcIiBkYXRhLWJpbmQ9XFxcImVuYWJsZToga29DaG9vc2VuU2VsZWN0ZWQoKSAhPSBudWxsLCBjbGljazogb25EZWxldGVDbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBpbnB1dC1ncm91cFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIj5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6a29PYmplY3RzLCB2YWx1ZToga29TZWxlY3RlZFxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJ0bi1kZWZhdWx0XFxcIiBkYXRhLWJpbmQ9XFxcImVuYWJsZToga29TZWxlY3RlZCgpICE9IG51bGwsIGNsaWNrOiBvbkFkZENsaWNrXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyBzdmQtbWFpbi1jb2xvclxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzaXRlbXMuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItdmFsaWRhdG9yc1xcXCI+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdmFsaWRhdG9yc1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInByb3BlcnR5ZWRpdG9yLXZhbGlkYXRvcnNcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAgZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gZmlyc3QtYWRkb25cXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGRtZW51LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVxcXCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKVxcXCIgb25jbGljaz1cXFwicmV0dXJuIHRydWVcXFwiPjwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGRtZW51XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0YWJpbmRleD1cXFwiMFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMgc3ZkLW1haW4tY29sb3JcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgb25jbGljaz1cXFwicmV0dXJuIHRydWVcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwic3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb1ZhbGlkYXRvcnMgLS0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRwYXJlbnQub25BZGRDbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLnRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIj5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IGtvSXRlbXMsIG9wdGlvbnNUZXh0OiAndGV4dCcsIHZhbHVlOiBrb1NlbGVjdGVkXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gYnRuLWRhbmdlclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0FsbG93QWRkUmVtb3ZlSXRlbXMsIGVuYWJsZToga29TZWxlY3RlZCgpICE9IG51bGwsIGNsaWNrOiBvbkRlbGV0ZUNsaWNrXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcmVtb3ZlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidGVtcGxhdGU6IHsgbmFtZTogJ29iamVjdGVkaXRvcicsIGRhdGE6IHNlbGVjdGVkT2JqZWN0RWRpdG9yIH1cXFwiPjwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXZhbGlkYXRvcnMuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3JcXFwiPlxcbiAgICA8bGFiZWwgZGF0YS1iaW5kPVxcXCJ0ZXh0OmRpc3BsYXlOYW1lLCB2aXNpYmxlOiBzaG93RGlzcGxheU5hbWVPblRvcFxcXCI+PC9sYWJlbD5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYWxlcnQgYWxlcnQtZGFuZ2VyXFxcIiByb2xlPVxcXCJhbGVydFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmtvSGFzRXJyb3JcXFwiPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzci1vbmx5XFxcIj5FcnJvcjo8L3NwYW4+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6a29FcnJvclRleHRcXFwiPjwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHtuYW1lOiAkZGF0YS5jb250ZW50VGVtcGxhdGVOYW1lLCBkYXRhOiAkZGF0YX0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gOThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicXVlc3Rpb25lZGl0b3ItY29udGVudFxcXCI+XFxuICAgIDx1bCBjbGFzcz1cXFwibmF2IG5hdi10YWJzXFxcIiBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6IGtvVGFic1xcXCI+XFxuICAgICAgICA8bGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIiByb2xlPVxcXCJwcmVzZW50YXRpb25cXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7YWN0aXZlOiAkcGFyZW50LmtvQWN0aXZlVGFiKCkgPT0gJGRhdGEubmFtZX0sIGNsaWNrOiAkcGFyZW50Lm9uVGFiQ2xpY2tcXFwiPlxcbiAgICAgICAgICAgIDxhIGNsYXNzPVxcXCJuYXYtbGlua1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHthY3RpdmU6ICRwYXJlbnQua29BY3RpdmVUYWIoKSA9PSAkZGF0YS5uYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDokZGF0YS50aXRsZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvYT5cXG4gICAgICAgIDwvbGk+XFxuICAgIDwvdWw+XFxuICAgIDwhLS0ga28gZm9yZWFjaDoga29UYWJzIC0tPlxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwiaWY6ICRwYXJlbnQua29BY3RpdmVUYWIoKSA9PT0gJGRhdGEubmFtZVxcXCIgc3R5bGU9XFxcIm1hcmdpbi10b3A6NXB4XFxcIj5cXG4gICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJGRhdGEuaHRtbFRlbXBsYXRlLCBkYXRhOiAkZGF0YS50ZW1wbGF0ZU9iamVjdCwgYWZ0ZXJSZW5kZXI6ICRkYXRhLmtvQWZ0ZXJSZW5kZXIgfSAtLT5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSAva28gIC0tPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3ItY29udGVudC5odG1sXG4vLyBtb2R1bGUgaWQgPSA5OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJxdWVzdGlvbmVkaXRvclxcXCI+XFxuICAgIDxkaXYgaWQ9XFxcInN1cnZleXF1ZXN0aW9uZWRpdG9yd2luZG93XFxcIiBjbGFzcz1cXFwibW9kYWxcXFwiIGRhdGEtYmluZD1cXFwid2l0aDprb0VkaXRvclxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1kaWFsb2dcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1oZWFkZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJjbG9zZVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25SZXNldENsaWNrXFxcIj4mdGltZXM7PC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XFxcIm1vZGFsLXRpdGxlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6a29UaXRsZVxcXCI+PC9oND5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWJvZHkgc3ZkX25vdG9wYm90dG9tcGFkZGluZ3NcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicXVlc3Rpb25lZGl0b3ItY29udGVudFxcXCIsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWZvb3RlclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2hvd0FwcGx5QnV0dG9uLCBjbGljazogb25BcHBseUNsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hcHBseScpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCIgLz5cXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25Pa0NsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5vaycpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCIgLz5cXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uUmVzZXRDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuY2FuY2VsJylcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIC8+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInF1ZXN0aW9uZWRpdG9ydGFiXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1zbS0xMlxcXCI+XFxuICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBwcm9wZXJ0aWVzLnJvd3MgLS0+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogcHJvcGVydGllcyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yJywgZGF0YTogb2JqZWN0UHJvcGVydHkuZWRpdG9yIH0gLS0+PCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvcnRhYi5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5ZW1iZWRpbmdcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0IHN2ZF9lbWJlZF90YWJcXFwiPlxcbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb0xpYnJhcnlWZXJzaW9uXFxcIj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiYW5ndWxhclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LmFuZ3VsYXInKVxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcImpxdWVyeVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LmpxdWVyeScpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwia25vY2tvdXRcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5rbm9ja291dCcpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwicmVhY3RcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5yZWFjdCcpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwidnVlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcudnVlJylcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3Qgc3ZkX2VtYmVkX3RhYlxcXCI+XFxuICAgICAgICAgICAgPHNlbGVjdCBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvU2NyaXB0VXNpbmdcXFwiPlxcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJib290c3RyYXBcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5ib290c3RyYXAnKVxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcInN0YW5kYXJkXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc3RhbmRhcmQnKVxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgPC9zZWxlY3Q+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfY3VzdG9tX3NlbGVjdCBzdmRfZW1iZWRfdGFiXFxcIj5cXG4gICAgICAgICAgICA8c2VsZWN0IGRhdGEtYmluZD1cXFwidmFsdWU6a29TaG93QXNXaW5kb3dcXFwiPlxcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJwYWdlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc2hvd09uUGFnZScpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwid2luZG93XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc2hvd0luV2luZG93JylcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8bGFiZWwgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmb3JtLWNoZWNrLWxhYmVsXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29IYXNJZHNcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOmtvTG9hZFN1cnZleVxcXCIgLz5cXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcubG9hZEZyb21TZXJ2ZXInKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwtaGVhZGluZyBjYXJkLWhlYWRlclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LnRpdGxlU2NyaXB0JylcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6aGFzQWNlRWRpdG9yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlFbWJlZGluZ0hlYWRcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6NzBweDt3aWR0aDoxMDAlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPHRleHRhcmVhIGRhdGEtYmluZD1cXFwidmlzaWJsZTohaGFzQWNlRWRpdG9yLCB0ZXh0OiBrb0hlYWRUZXh0XFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjcwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmRcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29WaXNpYmxlSHRtbFxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nIGNhcmQtaGVhZGVyXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcudGl0bGVIdG1sJylcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6aGFzQWNlRWRpdG9yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlFbWJlZGluZ0JvZHlcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6MzBweDt3aWR0aDoxMDAlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPHRleHRhcmVhIGRhdGEtYmluZD1cXFwidmlzaWJsZTohaGFzQWNlRWRpdG9yLCB0ZXh0OiBrb0JvZHlUZXh0XFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjMwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwtaGVhZGluZyBjYXJkLWhlYWRlclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LnRpdGxlSmF2YVNjcmlwdCcpXFxcIj48L2Rpdj5cXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmhhc0FjZUVkaXRvclxcXCI+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwic3VydmV5RW1iZWRpbmdKYXZhXFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjMwMHB4O3dpZHRoOjEwMCVcXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8dGV4dGFyZWEgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiFoYXNBY2VFZGl0b3IsIHRleHQ6IGtvSmF2YVRleHRcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3N1cnZleWVtYmVkaW5nLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEwMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXlsaXZlXFxcIj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvSXNSdW5uaW5nKCkgJiYga29QYWdlcygpLmxlbmd0aCA+IDFcXFwiPlxcbiAgICAgICAgPGxhYmVsIGZvcj1cXFwidGVzdFN1cnZleVBhZ2VDaGFuZ2VkXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHNlbGVjdFBhZ2VUZXh0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPHNwYW4gaWQ9XFxcInRlc3RTdXJ2ZXlQYWdlQ2hhbmdlZFxcXCI+XFxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IGtvUGFnZXMsIG9wdGlvbnNUZXh0OiAndGl0bGUnLCBvcHRpb25zVmFsdWU6ICdwYWdlJywgdmFsdWU6IGtvQWN0aXZlUGFnZSwgb3B0aW9uc0FmdGVyUmVuZGVyOiBzZXRQYWdlRGlzYWJsZVxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICA8L3NwYW4+XFxuICAgIDwvZGl2PlxcbiAgICA8c3VydmV5LXdpZGdldCBwYXJhbXM9XFxcInN1cnZleToga29TdXJ2ZXlcXFwiPjwvc3VydmV5LXdpZGdldD5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6IGtvUmVzdWx0VGV4dCwgdmlzaWJsZToga29Jc1J1bm5pbmcoKSA9PSBmYWxzZVxcXCI+PC9kaXY+XFxuICAgIDxidXR0b24gZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0lzUnVubmluZygpID09IGZhbHNlLCBjbGljazpzZWxlY3RUZXN0Q2xpY2ssIHRleHQ6IHRlc3RTdXJ2ZXlBZ2FpblRleHRcXFwiPlRlc3QgQWdhaW48L2J1dHRvbj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvc3VydmV5bGl2ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3ZkLXRvb2xiYXItYnV0dG9uXFxcIj5cXG4gICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiZW5hYmxlOiAkZGF0YS5lbmFibGVkIHx8IHRydWUsIGNsaWNrOiBhY3Rpb24sIGNzczogJGRhdGEuaW5uZXJDc3NcXFwiPlxcbiAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0aXRsZVxcXCI+PC9zcGFuPlxcbiAgICA8L2J1dHRvbj5cXG48L3NjcmlwdD5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN2ZC10b29sYmFyLW9wdGlvbnNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJkZG1lbnUtY29udGFpbmVyIHRvb2xiYXItb3B0aW9ucyBidG4tZ3JvdXAgaW5saW5lXFxcIj5cXG4gICAgICAgIDxkaXYgc3R5bGU9XFxcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApXFxcIiBvbmNsaWNrPVxcXCJyZXR1cm4gdHJ1ZVxcXCI+PC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkZG1lbnVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIHRhYmluZGV4PVxcXCIwXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0aXRsZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiY2FyZXRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgb25jbGljaz1cXFwicmV0dXJuIHRydWVcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwic3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIj5cXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBpdGVtcyAtLT5cXG4gICAgICAgICAgICAgICAgPGxpIGRhdGEtYmluZD1cXFwiY3NzOiAkZGF0YS5jc3NcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cXFwiI1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogYWN0aW9uLCB0ZXh0OiB0aXRsZVxcXCI+PC9hPlxcbiAgICAgICAgICAgICAgICA8L2xpPlxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICA8L3VsPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3ZkLXRvb2xiYXItc3RhdGVcXFwiPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwiaWNvblxcXCI+XFxuICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcImljb24tc3RhdHVzXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiBpbm5lckNzcywgc2l6ZTogMjRcXFwiPjwvc3ZnLWljb24+XFxuICAgIDwvc3Bhbj5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1saWdodC10ZXh0LWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRpdGxlXFxcIj48L3NwYW4+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Rvb2xiYXIuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRhLWNvbnRlbnRcXFwiPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYS10aXRsZS1lZGl0b3ItY29udGVudFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpc0VkaXRpbmdcXFwiIHN0eWxlPVxcXCJkaXNwbGF5OiBub25lO1xcXCI+XFxuICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6IGVkaXRpbmdOYW1lLCBldmVudDogeyBrZXl1cDogbmFtZUVkaXRvcktleXByZXNzLCBibHVyOiBwb3N0RWRpdCB9XFxcIiBzdHlsZT1cXFwiYm9yZGVyLXRvcDogbm9uZTsgYm9yZGVyLWxlZnQ6IG5vbmU7IGJvcmRlci1yaWdodDogbm9uZTsgb3V0bGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcXFwiXFxuICAgICAgICAvPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZGEtZWRpdC1idXR0b25cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IHBvc3RFZGl0LCBlbmFibGU6IGVkaXRpbmdOYW1lKCkgIT0gJydcXFwiPlxcbiAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWNoZWNrJywgc2l6ZTogMTJcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVxcXCJzdmRhLWVkaXQtYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBjYW5jZWxFZGl0XFxcIj7inJU8L3NwYW4+IC0tPlxcbiAgICA8L3NwYW4+XFxuICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRhLXRpdGxlLWVkaXRvci1jb250ZW50IHN2ZGEtdGl0bGUtZWRpdG9yLXN0YXJ0XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICFpc0VkaXRpbmcoKVxcXCI+XFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFwiZGlzcGxheTogbm9uZTtcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogZWRpdGluZ05hbWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJlZGl0LXN1cnZleS1uYW1lXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBzdGFydEVkaXQsIGF0dHI6IHsgdGl0bGU6IGdldExvY1N0cmluZygncGUuZWRpdCcpIH1cXFwiPlxcbiAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWVkaXQnLCBzaXplOiAxMlxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8IS0tIGtvIGlmOiBub3RPdGhlciAtLT5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZGEtZHJhZy1oYW5kbGVcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjogeyB0aXRsZTogZ2V0TG9jU3RyaW5nKCdwZS5tb3ZlJykgfSwgdmlzaWJsZTogIWlzRWRpdGluZygpXFxcIj5cXG4gICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWRyYWdnYWJsZScsIHNpemU6IDEyXFxcIj48L3N2Zy1pY29uPlxcbiAgICA8L3NwYW4+XFxuICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYS1kZWxldGUtaXRlbVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZGVsZXRlSXRlbSwgYXR0cjogeyB0aXRsZTogZ2V0TG9jU3RyaW5nKCdwZS5kZWxldGUnKSB9LCB2aXNpYmxlOiAhaXNFZGl0aW5nKClcXFwiPlxcbiAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlZGVsZXRlJywgc2l6ZTogMTJcXFwiPjwvc3ZnLWljb24+XFxuICAgIDwvc3Bhbj5cXG48L2Rpdj5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhLi9+L3ZhbC1sb2FkZXIhLi9zcmMvYWRvcm5lcnMvaXRlbS1lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2PlxcbiAgICA8IS0tIGtvIGZvcmVhY2g6IGFjdGlvbnMgLS0+XFxuICAgIDwhLS0ga28gaWY6ICEkZGF0YS50ZW1wbGF0ZSAtLT5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZGFfcXVlc3Rpb25fYWN0aW9uIHN2ZC1tYWluLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBmdW5jdGlvbigpIHsgb25DbGljaygkcGFyZW50LnF1ZXN0aW9uKTsgfSwgYXR0cjoge3RpdGxlOiB0ZXh0fVxcXCI+XFxuICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIGRhdGEtYmluZD1cXFwiY3NzOiAkcGFyZW50LmdldFN0eWxlKCRkYXRhKVxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJHBhcmVudC5nZXRTdHlsZSgkZGF0YSlcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRkYXRhLmhhc1RpdGxlID8gdGV4dDogJydcXFwiPjwvc3Bhbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSBrbyBpZjogISEkZGF0YS50ZW1wbGF0ZSAtLT5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogdGVtcGxhdGUgLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9kaXY+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTA2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRhLWNvbnRlbnRcXFwiPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYS10aXRsZS1lZGl0b3ItY29udGVudFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpc0VkaXRpbmdcXFwiIHN0eWxlPVxcXCJkaXNwbGF5OiBub25lO1xcXCI+XFxuICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6IGVkaXRpbmdOYW1lLCBldmVudDogeyBrZXl1cDogbmFtZUVkaXRvcktleXByZXNzLCBibHVyOiBwb3N0RWRpdCB9XFxcIiBzdHlsZT1cXFwiYm9yZGVyLXRvcDogbm9uZTsgYm9yZGVyLWxlZnQ6IG5vbmU7IGJvcmRlci1yaWdodDogbm9uZTsgb3V0bGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAtNnB4O1xcXCJcXG4gICAgICAgIC8+XFxuICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYS1lZGl0LWJ1dHRvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogcG9zdEVkaXQsIGVuYWJsZTogZWRpdGluZ05hbWUoKSAhPSAnJ1xcXCI+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlY2hlY2snLCBzaXplOiAxMlxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XFxcInN2ZGEtZWRpdC1idXR0b25cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGNhbmNlbEVkaXRcXFwiPuKclTwvc3Bhbj4gLS0+XFxuICAgIDwvc3Bhbj5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZGEtdGl0bGUtZWRpdG9yLWNvbnRlbnQgc3ZkYS10aXRsZS1lZGl0b3Itc3RhcnRcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWlzRWRpdGluZygpXFxcIj5cXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXCJkaXNwbGF5OiBub25lO1xcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBlZGl0aW5nTmFtZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcImVkaXQtc3VydmV5LW5hbWVcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IHN0YXJ0RWRpdCwgYXR0cjogeyB0aXRsZTogZ2V0TG9jU3RyaW5nKCdwZS5lZGl0JykgfVxcXCI+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlZWRpdCcsIHNpemU6IDEyXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICA8L3NwYW4+XFxuICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRhLWRlbGV0ZS1pdGVtXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBkZWxldGVJdGVtLCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmRlbGV0ZScpIH0sIHZpc2libGU6ICFpc0VkaXRpbmcoKVxcXCI+XFxuICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VkZWxldGUnLCBzaXplOiAxMlxcXCI+PC9zdmctaWNvbj5cXG4gICAgPC9zcGFuPlxcbjwvZGl2PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy9hZG9ybmVycy9yYXRpbmctaXRlbS1lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRhLXNlbGVjdC1pdGVtcy1lZGl0b3JcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzdmRhLXNlbGVjdC1pdGVtcy10aXRsZVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogdG9nZ2xlXFxcIj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtbWFpbi1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBnZXRMb2NTdHJpbmcoJ3BlLmVkaXRDaG9pY2VzJylcXFwiPjwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZGEtc2VsZWN0LWl0ZW1zLWNvbnRlbnQgc3ZkLWRhcmstYm9yZGVyLWNvbG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpc0V4cGFuZGVkXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZGEtc2VsZWN0LWl0ZW1zLWNvbGxlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogeyBkYXRhOiBjaG9pY2VzLCBhZnRlclJlbmRlcjogY2hvaWNlc1JlbmRlcmVkIH0gLS0+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaXRlbV9lZGl0YWJsZSBpdGVtX2RyYWdnYWJsZVxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogdGV4dFxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgIDxpdGVtLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJ0ZXh0XFxcIiwgdGFyZ2V0OiAkZGF0YSwgaXRlbTogJGRhdGEsIHF1ZXN0aW9uOiAkcGFyZW50LnF1ZXN0aW9uLCBlZGl0b3I6ICRwYXJlbnQuZWRpdG9yJz48L2l0ZW0tZWRpdG9yPlxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5oYXNPdGhlciAtLT5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIml0ZW1fZWRpdGFibGVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogcXVlc3Rpb24ub3RoZXJUZXh0XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4+XFxuICAgICAgICAgICAgICAgIDxpdGVtLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJvdGhlclRleHRcXFwiLCB0YXJnZXQ6IHF1ZXN0aW9uLCBpdGVtOiBxdWVzdGlvbi5vdGhlckl0ZW0sIHF1ZXN0aW9uOiBxdWVzdGlvbiwgZWRpdG9yOiBlZGl0b3InPjwvaXRlbS1lZGl0b3I+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmRhLWFkZC1uZXctaXRlbVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogYWRkSXRlbSwgYXR0cjogeyB0aXRsZTogZ2V0TG9jU3RyaW5nKCdwZS5hZGRJdGVtJykgfVxcXCI+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlcGx1cycsIHNpemU6IDEyXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy9hZG9ybmVycy9zZWxlY3QtaXRlbXMtZWRpdG9yLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEwOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwic3ZkYS1jb250ZW50XFxcIj5cXG4gICAgPHNwYW4gY2xhc3M9XFxcInN2ZGEtdGl0bGUtZWRpdG9yLWNvbnRlbnRcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogaXNFZGl0aW5nXFxcIiBzdHlsZT1cXFwiZGlzcGxheTogbm9uZTtcXFwiPlxcbiAgICAgICAgPGlucHV0IGRhdGEtYmluZD1cXFwidGV4dElucHV0OiBlZGl0aW5nTmFtZSwgZXZlbnQ6IHsga2V5dXA6IG5hbWVFZGl0b3JLZXlwcmVzcywgYmx1cjogcG9zdEVkaXQgfVxcXCIgc3R5bGU9XFxcImJvcmRlci10b3A6IG5vbmU7IGJvcmRlci1sZWZ0OiBub25lOyBib3JkZXItcmlnaHQ6IG5vbmU7IG91dGxpbmU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxcIlxcbiAgICAgICAgLz5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRhLWVkaXQtYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBwb3N0RWRpdCwgZW5hYmxlOiBlZGl0aW5nTmFtZSgpICE9ICcnXFxcIj5cXG4gICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VjaGVjaycsIHNpemU6IDEyXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cXFwic3ZkYS1lZGl0LWJ1dHRvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogY2FuY2VsRWRpdFxcXCI+4pyVPC9zcGFuPiAtLT5cXG4gICAgPC9zcGFuPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYS10aXRsZS1lZGl0b3ItY29udGVudCBzdmRhLXRpdGxlLWVkaXRvci1zdGFydFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhaXNFZGl0aW5nKClcXFwiPlxcbiAgICAgICAgPHNwYW4gc3R5bGU9XFxcImRpc3BsYXk6IG5vbmU7XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IGVkaXRpbmdOYW1lXFxcIj48L3NwYW4+XFxuICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZWRpdC1zdXJ2ZXktbmFtZVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogc3RhcnRFZGl0LCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmVkaXQnKSB9XFxcIj5cXG4gICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VlZGl0Jywgc2l6ZTogMTJcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICA8L3NwYW4+XFxuICAgIDwvc3Bhbj5cXG48L2Rpdj5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhLi9+L3ZhbC1sb2FkZXIhLi9zcmMvYWRvcm5lcnMvdGl0bGUtZWRpdG9yLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEwOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiXCIgKyByZXF1aXJlKCcuL2luZGV4Lmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi9qc29uZWRpdG9yLmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi9vYmplY3RlZGl0b3IuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3BhZ2VlZGl0b3IuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vc3VydmV5bGl2ZS5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vc3VydmV5ZW1iZWRpbmcuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvci5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9yLWNvbnRlbnQuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9ydGFiLmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3IuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1ib29sZWFuLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1kcm9wZG93bi5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWh0bWwuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jb25kaXRpb24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb24uaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tdWx0aXBsZXZhbHVlcy5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW5lc3RlZC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbWF0cml4ZHJvcGRvd25jb2x1bW5zLmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWwuaHRtbCcpICsgXCJcIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW1vZGFsY29udGVudC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbnVtYmVyLmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItcmVzdGZ1bGwuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1kZWZhdWx0dmFsdWUuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXN0cmluZy5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHQuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jZWxscy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdGV4dGl0ZW1zLmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdHJpZ2dlcnMuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzaXRlbXMuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci12YWxpZGF0b3JzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jdXN0b20uaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL21hbmFnZS5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vdG9vbGJhci5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vY29udmVydC1hY3Rpb24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4uL3N2Z2J1bmRsZS5odG1sJykgKyBcIlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy90ZW1wbGF0ZXMvZW50cnkuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5VGV4dFdvcmtlciB9IGZyb20gXCIuL3RleHRXb3JrZXJcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlKU09ORWRpdG9yIHtcbiAgcHVibGljIHN0YXRpYyB1cGRhdGVUZXh0VGltZW91dDogbnVtYmVyID0gMTAwMDtcblxuICBwcml2YXRlIGlzUHJvY2Vzc2luZ0ltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYWNlRWRpdG9yOiBBY2VBamF4LkVkaXRvcjtcbiAgcHJpdmF0ZSB0ZXh0V29ya2VyOiBTdXJ2ZXlUZXh0V29ya2VyO1xuICBrb1RleHQ6IGFueTtcbiAga29FcnJvcnM6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmtvVGV4dCA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgdGhpcy5rb0Vycm9ycyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvVGV4dC5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYub25Kc29uRWRpdG9yQ2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBpbml0KGVkaXRvckVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCF0aGlzLmhhc0FjZUVkaXRvcikgcmV0dXJuO1xuICAgIHRoaXMuYWNlRWRpdG9yID0gYWNlLmVkaXQoZWRpdG9yRWxlbWVudCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vVE9ETyBhZGQgZXZlbnQgdG8gY2hhbmdlIGFjZSB0aGVtZSBhbmQgbW9kZVxuICAgIC8vdGhpcy5hY2VFZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcbiAgICAvL3RoaXMuYWNlRWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2pzb25cIik7XG4gICAgdGhpcy5hY2VFZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcbiAgICB0aGlzLmFjZUVkaXRvci5nZXRTZXNzaW9uKCkub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLm9uSnNvbkVkaXRvckNoYW5nZWQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmFjZUVkaXRvci5nZXRTZXNzaW9uKCkuc2V0VXNlV29ya2VyKHRydWUpO1xuICAgIFN1cnZleVRleHRXb3JrZXIubmV3TGluZUNoYXIgPSB0aGlzLmFjZUVkaXRvci5zZXNzaW9uLmRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBY2VFZGl0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBhY2UgIT09IFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmhhc0FjZUVkaXRvcikgcmV0dXJuIHRoaXMua29UZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMuYWNlRWRpdG9yLmdldFZhbHVlKCk7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzUHJvY2Vzc2luZ0ltbWVkaWF0ZWx5ID0gdHJ1ZTtcbiAgICB0aGlzLmtvVGV4dCh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuYWNlRWRpdG9yKSB7XG4gICAgICB0aGlzLmFjZUVkaXRvci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLmFjZUVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NKc29uKHZhbHVlKTtcbiAgICB0aGlzLmlzUHJvY2Vzc2luZ0ltbWVkaWF0ZWx5ID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNob3codmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGV4dCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLmFjZUVkaXRvcikge1xuICAgICAgdGhpcy5hY2VFZGl0b3IuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0pzb25Db3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIHRoaXMudGV4dFdvcmtlciA9IG5ldyBTdXJ2ZXlUZXh0V29ya2VyKHRoaXMudGV4dCk7XG4gICAgcmV0dXJuIHRoaXMudGV4dFdvcmtlci5pc0pzb25Db3JyZWN0O1xuICB9XG4gIHB1YmxpYyBnZXQgc3VydmV5KCk6IFN1cnZleS5TdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLnRleHRXb3JrZXIuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgdGltZW91dElkOiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSBvbkpzb25FZGl0b3JDaGFuZ2VkKCk6IGFueSB7XG4gICAgaWYgKHRoaXMudGltZW91dElkID4gLTEpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUHJvY2Vzc2luZ0ltbWVkaWF0ZWx5KSB7XG4gICAgICB0aGlzLnRpbWVvdXRJZCA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLnRpbWVvdXRJZCA9IC0xO1xuICAgICAgICBzZWxmLnByb2Nlc3NKc29uKHNlbGYudGV4dCk7XG4gICAgICB9LCBTdXJ2ZXlKU09ORWRpdG9yLnVwZGF0ZVRleHRUaW1lb3V0KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzSnNvbih0ZXh0OiBzdHJpbmcpOiBhbnkge1xuICAgIHRoaXMudGV4dFdvcmtlciA9IG5ldyBTdXJ2ZXlUZXh0V29ya2VyKHRleHQpO1xuICAgIGlmICh0aGlzLmFjZUVkaXRvcikge1xuICAgICAgdGhpcy5hY2VFZGl0b3JcbiAgICAgICAgLmdldFNlc3Npb24oKVxuICAgICAgICAuc2V0QW5ub3RhdGlvbnModGhpcy5jcmVhdGVBbm5vdGF0aW9ucyh0ZXh0LCB0aGlzLnRleHRXb3JrZXIuZXJyb3JzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua29FcnJvcnModGhpcy50ZXh0V29ya2VyLmVycm9ycyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlQW5ub3RhdGlvbnModGV4dDogc3RyaW5nLCBlcnJvcnM6IGFueVtdKTogQWNlQWpheC5Bbm5vdGF0aW9uW10ge1xuICAgIHZhciBhbm5vdGF0aW9ucyA9IG5ldyBBcnJheTxBY2VBamF4LkFubm90YXRpb24+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlcnJvciA9IGVycm9yc1tpXTtcbiAgICAgIHZhciBhbm5vdGF0aW9uOiBBY2VBamF4LkFubm90YXRpb24gPSB7XG4gICAgICAgIHJvdzogZXJyb3IucG9zaXRpb24uc3RhcnQucm93LFxuICAgICAgICBjb2x1bW46IGVycm9yLnBvc2l0aW9uLnN0YXJ0LmNvbHVtbixcbiAgICAgICAgdGV4dDogZXJyb3IudGV4dCxcbiAgICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgICB9O1xuICAgICAgYW5ub3RhdGlvbnMucHVzaChhbm5vdGF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGFubm90YXRpb25zO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5SlNPTkVkaXRvci50cyIsIi8qIGZvcmsgb2YgdGhlIGh0dHBzOi8vZ2l0aHViLmNvbS9Tb3J0YWJsZUpTL2tub2Nrb3V0LXNvcnRhYmxlanMgYmVjYXVzZSBvZiBlcyBtb2R1bGVzIGJ1aWxkIGVycm9yIFxuICAgIHdhaXRpbmcgZm9yIGFwcHJvdmUgcHVsbHJlcXVlc3RzOlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Tb3J0YWJsZUpTL2tub2Nrb3V0LXNvcnRhYmxlanMvcHVsbC85KVxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Tb3J0YWJsZUpTL2tub2Nrb3V0LXNvcnRhYmxlanMvcHVsbC8xL2ZpbGVzXG4qL1xuXG4vKmdsb2JhbCBrbyovXG5cbihmdW5jdGlvbihmYWN0b3J5KSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICAvL2dldCBrbyByZWYgdmlhIGdsb2JhbCBvciByZXF1aXJlXG4gIHZhciBrb1JlZjtcbiAgaWYgKHR5cGVvZiBrbyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vZ2xvYmFsIHJlZiBhbHJlYWR5IGRlZmluZWRcbiAgICBrb1JlZiA9IGtvO1xuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgLy9jb21tb25qcyAvIG5vZGUuanNcbiAgICBrb1JlZiA9IHJlcXVpcmUoXCJrbm9ja291dFwiKTtcbiAgfVxuICAvL2dldCBzb3J0YWJsZSByZWYgdmlhIGdsb2JhbCBvciByZXF1aXJlXG4gIHZhciBzb3J0YWJsZVJlZjtcbiAgaWYgKHR5cGVvZiBTb3J0YWJsZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vZ2xvYmFsIHJlZiBhbHJlYWR5IGRlZmluZWRcbiAgICBzb3J0YWJsZVJlZiA9IFNvcnRhYmxlO1xuICB9IGVsc2UgaWYgKFxuICAgIHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgLy9jb21tb25qcyAvIG5vZGUuanNcbiAgICBzb3J0YWJsZVJlZiA9IHJlcXVpcmUoXCJzb3J0YWJsZWpzXCIpO1xuICB9XG4gIC8vdXNlIHJlZmVyZW5jZXMgaWYgd2UgZm91bmQgdGhlbVxuICBpZiAoa29SZWYgIT09IHVuZGVmaW5lZCAmJiBzb3J0YWJsZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZmFjdG9yeShrb1JlZiwgc29ydGFibGVSZWYpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy9pZiBib3RoIHJlZmVyZW5jZXMgYXJlbid0IGZvdW5kIHlldCwgZ2V0IHZpYSBBTUQgaWYgYXZhaWxhYmxlXG4gICAgLy93ZSBtYXkgaGF2ZSBhIHJlZmVyZW5jZSB0byBvbmx5IDEsIG9yIG5vbmVcbiAgICBpZiAoa29SZWYgIT09IHVuZGVmaW5lZCAmJiBzb3J0YWJsZVJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZpbmUoW1wic29ydGFibGVqc1wiXSwgZnVuY3Rpb24oYW1kU29ydGFibGVSZWYpIHtcbiAgICAgICAgZmFjdG9yeShrb1JlZiwgYW1kU29ydGFibGVSZWYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChrb1JlZiA9PT0gdW5kZWZpbmVkICYmIHNvcnRhYmxlUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmluZShbXCJrbm9ja291dFwiXSwgZnVuY3Rpb24oYW1kS25vY2tvdXQpIHtcbiAgICAgICAgZmFjdG9yeShhbWRLbm9ja291dCwgc29ydGFibGVSZWYpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChrb1JlZiA9PT0gdW5kZWZpbmVkICYmIHNvcnRhYmxlUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmluZShbXCJrbm9ja291dFwiLCBcInNvcnRhYmxlanNcIl0sIGZhY3RvcnkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvL25vIG1vcmUgcm91dGVzIHRvIGdldCByZWZlcmVuY2VzXG4gICAgLy9yZXBvcnQgc3BlY2lmaWMgZXJyb3JcbiAgICBpZiAoa29SZWYgIT09IHVuZGVmaW5lZCAmJiBzb3J0YWJsZVJlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrbm9ja291dC1zb3J0YWJsZSBjb3VsZCBub3QgZ2V0IHJlZmVyZW5jZSB0byBTb3J0YWJsZVwiKTtcbiAgICB9IGVsc2UgaWYgKGtvUmVmID09PSB1bmRlZmluZWQgJiYgc29ydGFibGVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwia25vY2tvdXQtc29ydGFibGUgY291bGQgbm90IGdldCByZWZlcmVuY2UgdG8gS25vY2tvdXRcIik7XG4gICAgfSBlbHNlIGlmIChrb1JlZiA9PT0gdW5kZWZpbmVkICYmIHNvcnRhYmxlUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJrbm9ja291dC1zb3J0YWJsZSBjb3VsZCBub3QgZ2V0IHJlZmVyZW5jZSB0byBLbm9ja291dCBvciBTb3J0YWJsZVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufSkoZnVuY3Rpb24oa28sIFNvcnRhYmxlKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBpbml0ID0gZnVuY3Rpb24oXG4gICAgICBlbGVtZW50LFxuICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgdmlld01vZGVsLFxuICAgICAgYmluZGluZ0NvbnRleHQsXG4gICAgICBzb3J0YWJsZU9wdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBvcHRpb25zID0gYnVpbGRPcHRpb25zKHZhbHVlQWNjZXNzb3IsIHNvcnRhYmxlT3B0aW9ucyk7XG5cbiAgICAgIC8vIEl0J3Mgc2VlbXMgdGhhdCB3ZSBjYW5ub3QgdXBkYXRlIHRoZSBldmVudGhhbmRsZXJzIGFmdGVyIHdlJ3ZlIGNyZWF0ZWRcbiAgICAgIC8vIHRoZSBzb3J0YWJsZSwgc28gZGVmaW5lIHRoZW0gaW4gaW5pdCBpbnN0ZWFkIG9mIHVwZGF0ZVxuICAgICAgW1xuICAgICAgICBcIm9uU3RhcnRcIixcbiAgICAgICAgXCJvbkVuZFwiLFxuICAgICAgICBcIm9uUmVtb3ZlXCIsXG4gICAgICAgIFwib25BZGRcIixcbiAgICAgICAgXCJvblVwZGF0ZVwiLFxuICAgICAgICBcIm9uU29ydFwiLFxuICAgICAgICBcIm9uRmlsdGVyXCIsXG4gICAgICAgIFwib25Nb3ZlXCIsXG4gICAgICAgIFwib25DbG9uZVwiXG4gICAgICBdLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAob3B0aW9uc1tlXSB8fCBldmVudEhhbmRsZXJzW2VdKVxuICAgICAgICAgIG9wdGlvbnNbZV0gPSBmdW5jdGlvbihcbiAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgIHBhcmVudFZNLFxuICAgICAgICAgICAgcGFyZW50QmluZGluZ3MsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIGl0ZW1WTSA9IGtvLmRhdGFGb3IoZS5pdGVtKSxcbiAgICAgICAgICAgICAgLy8gQWxsIG9mIHRoZSBiaW5kaW5ncyBvbiB0aGUgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgICAgICAgYmluZGluZ3MgPSBrby51dGlscy5wZWVrT2JzZXJ2YWJsZShwYXJlbnRCaW5kaW5ncygpKSxcbiAgICAgICAgICAgICAgLy8gVGhlIGJpbmRpbmcgb3B0aW9ucyBmb3IgdGhlIGRyYWdnYWJsZS9zb3J0YWJsZSBiaW5kaW5nIG9mIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICAgICAgICBiaW5kaW5nSGFuZGxlckJpbmRpbmcgPSBiaW5kaW5ncy5zb3J0YWJsZSB8fCBiaW5kaW5ncy5kcmFnZ2FibGUsXG4gICAgICAgICAgICAgIC8vIFRoZSBjb2xsZWN0aW9uIHRoYXQgd2Ugc2hvdWxkIG1vZGlmeVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uID1cbiAgICAgICAgICAgICAgICBiaW5kaW5nSGFuZGxlckJpbmRpbmcuY29sbGVjdGlvbiB8fFxuICAgICAgICAgICAgICAgIGJpbmRpbmdIYW5kbGVyQmluZGluZy5mb3JlYWNoO1xuICAgICAgICAgICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIoZSwgaXRlbVZNLCBwYXJlbnRWTSwgY29sbGVjdGlvbiwgYmluZGluZ3MpO1xuICAgICAgICAgICAgaWYgKGV2ZW50SGFuZGxlcnNbZXZlbnRUeXBlXSlcbiAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyc1tldmVudFR5cGVdKFxuICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgaXRlbVZNLFxuICAgICAgICAgICAgICAgIHBhcmVudFZNLFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgYmluZGluZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LmJpbmQodW5kZWZpbmVkLCBlLCB2aWV3TW9kZWwsIGFsbEJpbmRpbmdzLCBvcHRpb25zW2VdKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc29ydGFibGVFbGVtZW50ID0gU29ydGFibGUuY3JlYXRlKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBEZXN0cm95IHRoZSBzb3J0YWJsZSBpZiBrbm9ja291dCBkaXNwb3NlcyB0aGUgZWxlbWVudCBpdCdzIGNvbm5lY3RlZCB0b1xuICAgICAga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgc29ydGFibGVFbGVtZW50LmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtvLmJpbmRpbmdIYW5kbGVycy50ZW1wbGF0ZS5pbml0KGVsZW1lbnQsIHZhbHVlQWNjZXNzb3IpO1xuICAgIH0sXG4gICAgdXBkYXRlID0gZnVuY3Rpb24oXG4gICAgICBlbGVtZW50LFxuICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgdmlld01vZGVsLFxuICAgICAgYmluZGluZ0NvbnRleHQsXG4gICAgICBzb3J0YWJsZU9wdGlvbnNcbiAgICApIHtcbiAgICAgIC8vIFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgcHJvYmxlbXMgd2l0aCB1cGRhdGluZyB0aGUgb3B0aW9ucyBvZiBhIHNvcnRhYmxlXG4gICAgICAvLyBUZXN0ZWQgdG8gY2hhbmdlIGV2ZW50aGFuZGxlcnMgYW5kIHRoZSBncm91cCBvcHRpb25zIHdpdGhvdXQgYW55IGx1Y2tcblxuICAgICAgcmV0dXJuIGtvLmJpbmRpbmdIYW5kbGVycy50ZW1wbGF0ZS51cGRhdGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHZhbHVlQWNjZXNzb3IsXG4gICAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgICB2aWV3TW9kZWwsXG4gICAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgICApO1xuICAgIH0sXG4gICAgZXZlbnRIYW5kbGVycyA9IChmdW5jdGlvbihoYW5kbGVycykge1xuICAgICAgdmFyIG1vdmVPcGVyYXRpb25zID0gW10sXG4gICAgICAgIHRyeU1vdmVPcGVyYXRpb24gPSBmdW5jdGlvbihcbiAgICAgICAgICBlLFxuICAgICAgICAgIGl0ZW1WTSxcbiAgICAgICAgICBwYXJlbnRWTSxcbiAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgIHBhcmVudEJpbmRpbmdzXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEEgbW92ZSBvcGVyYXRpb24gaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGEgYWRkIGFuZCByZW1vdmUgZXZlbnQsXG4gICAgICAgICAgLy8gdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGJvdGggdGhlIHRhcmdldCBhbmQgb3JpZ2luIGNvbGxlY3Rpb25zXG4gICAgICAgICAgdmFyIGN1cnJlbnRPcGVyYXRpb24gPSB7XG4gICAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgICBpdGVtVk06IGl0ZW1WTSxcbiAgICAgICAgICAgICAgcGFyZW50Vk06IHBhcmVudFZNLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBwYXJlbnRCaW5kaW5nczogcGFyZW50QmluZGluZ3NcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGlzdGluZ09wZXJhdGlvbiA9IG1vdmVPcGVyYXRpb25zLmZpbHRlcihmdW5jdGlvbihvcCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3AuaXRlbVZNID09PSBjdXJyZW50T3BlcmF0aW9uLml0ZW1WTTtcbiAgICAgICAgICAgIH0pWzBdO1xuXG4gICAgICAgICAgaWYgKCFleGlzdGluZ09wZXJhdGlvbikge1xuICAgICAgICAgICAgbW92ZU9wZXJhdGlvbnMucHVzaChjdXJyZW50T3BlcmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gV2UncmUgZmluaXNoaW5nIHRoZSBvcGVyYXRpb24gYW5kIGFscmVhZHkgaGF2ZSBhIGhhbmRsZSBvblxuICAgICAgICAgICAgLy8gdGhlIG9wZXJhdGlvbiBpdGVtIG1lYW5pbmcgdGhhdCBpdCdzIHNhZmUgdG8gcmVtb3ZlIGl0XG4gICAgICAgICAgICBtb3ZlT3BlcmF0aW9ucy5zcGxpY2UobW92ZU9wZXJhdGlvbnMuaW5kZXhPZihleGlzdGluZ09wZXJhdGlvbiksIDEpO1xuXG4gICAgICAgICAgICB2YXIgcmVtb3ZlT3BlcmF0aW9uID1cbiAgICAgICAgICAgICAgICBjdXJyZW50T3BlcmF0aW9uLmV2ZW50LnR5cGUgPT09IFwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgID8gY3VycmVudE9wZXJhdGlvblxuICAgICAgICAgICAgICAgICAgOiBleGlzdGluZ09wZXJhdGlvbixcbiAgICAgICAgICAgICAgYWRkT3BlcmF0aW9uID1cbiAgICAgICAgICAgICAgICBjdXJyZW50T3BlcmF0aW9uLmV2ZW50LnR5cGUgPT09IFwiYWRkXCJcbiAgICAgICAgICAgICAgICAgID8gY3VycmVudE9wZXJhdGlvblxuICAgICAgICAgICAgICAgICAgOiBleGlzdGluZ09wZXJhdGlvbjtcblxuICAgICAgICAgICAgbW92ZUl0ZW0oXG4gICAgICAgICAgICAgIGl0ZW1WTSxcbiAgICAgICAgICAgICAgcmVtb3ZlT3BlcmF0aW9uLmNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgIGFkZE9wZXJhdGlvbi5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBhZGRPcGVyYXRpb24uZXZlbnQuY2xvbmUsXG4gICAgICAgICAgICAgIGFkZE9wZXJhdGlvbi5ldmVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIE1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgXCJmcm9tXCIgY29sbGVjdGlvbiB0byB0aGUgXCJ0b1wiIGNvbGxlY3Rpb24sIHRoZXNlXG4gICAgICAgIC8vIGNhbiBiZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIGNvbGxlY3Rpb24gd2hpY2ggbWVhbnMgaXQncyBhIHNvcnQuXG4gICAgICAgIC8vIGNsb25lIGluZGljYXRlcyBpZiB3ZSBzaG91bGQgbW92ZSBvciBjb3B5IHRoZSBpdGVtIGludG8gdGhlIG5ldyBjb2xsZWN0aW9uXG4gICAgICAgIG1vdmVJdGVtID0gZnVuY3Rpb24oaXRlbVZNLCBmcm9tLCB0bywgY2xvbmUsIGUpIHtcbiAgICAgICAgICAvLyBVbndyYXBwaW5nIHRoaXMgYWxsb3dzIHVzIHRvIG1hbmlwdWxhdGUgdGhlIGFjdHVhbCBhcnJheVxuICAgICAgICAgIHZhciBmcm9tQXJyYXkgPSBmcm9tKCksXG4gICAgICAgICAgICAvLyBJdCdzIG5vdCBjZXJ0YWluIHRoYXQgdGhlIGl0ZW1zIGFjdHVhbCBpbmRleCBpcyB0aGUgc2FtZVxuICAgICAgICAgICAgLy8gYXMgdGhlIGluZGV4IHJlcG9ydGVkIGJ5IHNvcnRhYmxlIGR1ZSB0byBmaWx0ZXJpbmcgZXRjLlxuICAgICAgICAgICAgb3JpZ2luYWxJbmRleCA9IGZyb21BcnJheS5pbmRleE9mKGl0ZW1WTSksXG4gICAgICAgICAgICBuZXdJbmRleCA9IGUubmV3SW5kZXg7XG5cbiAgICAgICAgICAvLyBXZSBoYXZlIHRvIGZpbmQgb3V0IHRoZSBhY3R1YWwgZGVzaXJlZCBpbmRleCBvZiB0aGUgdG8gYXJyYXksXG4gICAgICAgICAgLy8gYXMgdGhpcyBtaWdodCBiZSBhIGNvbXB1dGVkIGFycmF5LiBXZSBjb3VsZCBvdGhlcndpc2UgcG90ZW50aWFsbHlcbiAgICAgICAgICAvLyBkcm9wIGFuIGl0ZW0gYWJvdmUgdGhlIDNyZCB2aXNpYmxlIGl0ZW0sIGJ1dCB0aGUgMm5kIHZpc2libGUgaXRlbVxuICAgICAgICAgIC8vIGhhcyBhbiBhY3R1YWwgaW5kZXggb2YgNS5cbiAgICAgICAgICBpZiAoZS5pdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gdG8oKS5pbmRleE9mKGtvLmRhdGFGb3IoZS5pdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKTtcbiAgICAgICAgICAgIG5ld0luZGV4ICs9IG5ld0luZGV4ID4gb3JpZ2luYWxJbmRleCA/IDAgOiAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlbW92ZSBzb3J0YWJsZXMgXCJ1bmJvdW5kXCIgZWxlbWVudFxuICAgICAgICAgIGUuaXRlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUuaXRlbSk7XG5cbiAgICAgICAgICAvLyBUaGlzIHNwbGljZSBpcyBuZWNlc3NhcnkgZm9yIGJvdGggY2xvbmUgYW5kIG1vdmUvc29ydFxuICAgICAgICAgIC8vIEluIHNvcnQvbW92ZSBzaW5jZSBpdCBzaG91bGRuJ3QgYmUgYXQgdGhpcyBpbmRleC9pbiB0aGlzIGFycmF5IGFueW1vcmVcbiAgICAgICAgICAvLyBJbiBjbG9uZSBzaW5jZSB3ZSBoYXZlIHRvIHdvcmsgYXJvdW5kIGtub2Nrb3V0cyB2YWx1SGFzTXV0YXRlZFxuICAgICAgICAgIC8vIHdoZW4gbWFuaXB1bGF0aW5nIGFycmF5cyBhbmQgYXZvaWQgYSBcInVuYm91bmRcIiBpdGVtIGFkZGVkIGJ5IHNvcnRhYmxlXG4gICAgICAgICAgZnJvbUFycmF5LnNwbGljZShvcmlnaW5hbEluZGV4LCAxKTtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGFycmF5LCB0aGlzIHdpbGwgYWxzbyByZW1vdmUgc29ydGFibGVzIFwidW5ib3VuZFwiIGNsb25lXG4gICAgICAgICAgZnJvbS52YWx1ZUhhc011dGF0ZWQoKTtcbiAgICAgICAgICBpZiAoY2xvbmUgJiYgZnJvbSAhPT0gdG8pIHtcbiAgICAgICAgICAgIC8vIFJlYWQgdGhlIGl0ZW1cbiAgICAgICAgICAgIGZyb21BcnJheS5zcGxpY2Uob3JpZ2luYWxJbmRleCwgMCwgaXRlbVZNKTtcbiAgICAgICAgICAgIC8vIEZvcmNlIGtub2Nrb3V0IHRvIHVwZGF0ZVxuICAgICAgICAgICAgZnJvbS52YWx1ZUhhc011dGF0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gRm9yY2UgZGVmZXJyZWQgdGFza3MgdG8gcnVuIG5vdywgcmVnaXN0ZXJpbmcgdGhlIHJlbW92YWxcbiAgICAgICAgICAhIWtvLnRhc2tzICYmIGtvLnRhc2tzLnJ1bkVhcmx5KCk7XG4gICAgICAgICAgLy8gSW5zZXJ0IHRoZSBpdGVtIG9uIGl0cyBuZXcgcG9zaXRpb25cbiAgICAgICAgICB0bygpLnNwbGljZShuZXdJbmRleCwgMCwgaXRlbVZNKTtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCBrbm9ja291dCB0aGF0IHdlJ3ZlIG1vZGlmaWVkIHRoZSBhY3R1YWwgYXJyYXkuXG4gICAgICAgICAgdG8udmFsdWVIYXNNdXRhdGVkKCk7XG4gICAgICAgIH07XG5cbiAgICAgIGhhbmRsZXJzLm9uUmVtb3ZlID0gdHJ5TW92ZU9wZXJhdGlvbjtcbiAgICAgIGhhbmRsZXJzLm9uQWRkID0gdHJ5TW92ZU9wZXJhdGlvbjtcbiAgICAgIGhhbmRsZXJzLm9uVXBkYXRlID0gZnVuY3Rpb24oXG4gICAgICAgIGUsXG4gICAgICAgIGl0ZW1WTSxcbiAgICAgICAgcGFyZW50Vk0sXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIHBhcmVudEJpbmRpbmdzXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGJlIHBlcmZvcm1lZCBhcyBhIHNvcnQgc2luY2UgdGhlIHRvL2Zyb20gY29sbGVjdGlvbnNcbiAgICAgICAgLy8gcmVmZXJlbmNlIHRoZSBzYW1lIGNvbGxlY3Rpb24gYW5kIGNsb25lIGlzIHNldCB0byBmYWxzZVxuICAgICAgICBtb3ZlSXRlbShpdGVtVk0sIGNvbGxlY3Rpb24sIGNvbGxlY3Rpb24sIGZhbHNlLCBlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBoYW5kbGVycztcbiAgICB9KSh7fSksXG4gICAgLy8gYmluZGluZ09wdGlvbnMgYXJlIHRoZSBvcHRpb25zIHNldCBpbiB0aGUgXCJkYXRhLWJpbmRcIiBhdHRyaWJ1dGUgaW4gdGhlIHVpLlxuICAgIC8vIG9wdGlvbnMgYXJlIGN1c3RvbSBvcHRpb25zLCBmb3IgaW5zdGFuY2UgZHJhZ2dhYmxlL3NvcnRhYmxlIHNwZWNpZmljIG9wdGlvbnNcbiAgICBidWlsZE9wdGlvbnMgPSBmdW5jdGlvbihiaW5kaW5nT3B0aW9ucywgb3B0aW9ucykge1xuICAgICAgLy8gZGVlcCBjbG9uZS9jb3B5IG9mIHByb3BlcnRpZXMgZnJvbSB0aGUgXCJmcm9tXCIgYXJndW1lbnQgb250b1xuICAgICAgLy8gdGhlIFwiaW50b1wiIGFyZ3VtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBcImludG9cIlxuICAgICAgdmFyIG1lcmdlID0gZnVuY3Rpb24oaW50bywgZnJvbSkge1xuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gZnJvbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZnJvbVtwcm9wXSkgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGludG9bcHJvcF0pICE9PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGludG9bcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbnRvW3Byb3BdID0gbWVyZ2UoaW50b1twcm9wXSwgZnJvbVtwcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2UgaW50b1twcm9wXSA9IGZyb21bcHJvcF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGludG87XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHVud3JhcCB0aGUgc3VwcGxpZWQgb3B0aW9uc1xuICAgICAgICB1bndyYXBwZWRPcHRpb25zID1cbiAgICAgICAgICBrby51dGlscy5wZWVrT2JzZXJ2YWJsZShiaW5kaW5nT3B0aW9ucygpKS5vcHRpb25zIHx8IHt9O1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBtb2RpZnkgdGhlIHByb3ZpZGVkIHNldHRpbmdzIG9iamVjdFxuICAgICAgb3B0aW9ucyA9IG1lcmdlKHt9LCBvcHRpb25zKTtcblxuICAgICAgLy8gZ3JvdXAgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBzaW5jZSB3ZSBzaG91bGQgYm90aCBhbGxvdyB0byBjaGFuZ2VcbiAgICAgIC8vIGEgZHJhZ2dhYmxlIHRvIGEgc29ydGFibGUgKGFuZCB2aWNlIHZlcnNhKSwgYnV0IHN0aWxsIGJlIGFibGUgdG8gc2V0XG4gICAgICAvLyBhIG5hbWUgb24gYSBkcmFnZ2FibGUgd2l0aG91dCBpdCBiZWNvbWluZyBhIGRyb3AgdGFyZ2V0LlxuICAgICAgaWYgKFxuICAgICAgICB1bndyYXBwZWRPcHRpb25zLmdyb3VwICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh1bndyYXBwZWRPcHRpb25zLmdyb3VwKSAhPT1cbiAgICAgICAgICBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAgICApIHtcbiAgICAgICAgLy8gZ3JvdXAgcHJvcGVydHkgaXMgYSBuYW1lIHN0cmluZyBkZWNsYXJhdGlvbiwgY29udmVydCB0byBvYmplY3QuXG4gICAgICAgIHVud3JhcHBlZE9wdGlvbnMuZ3JvdXAgPSB7IG5hbWU6IHVud3JhcHBlZE9wdGlvbnMuZ3JvdXAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlKG9wdGlvbnMsIHVud3JhcHBlZE9wdGlvbnMpO1xuICAgIH07XG5cbiAga28uYmluZGluZ0hhbmRsZXJzLmRyYWdnYWJsZSA9IHtcbiAgICBzb3J0YWJsZU9wdGlvbnM6IHtcbiAgICAgIGdyb3VwOiB7IHB1bGw6IFwiY2xvbmVcIiwgcHV0OiBmYWxzZSB9LFxuICAgICAgc29ydDogZmFsc2VcbiAgICB9LFxuICAgIGluaXQ6IGZ1bmN0aW9uKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlQWNjZXNzb3IsXG4gICAgICBhbGxCaW5kaW5ncyxcbiAgICAgIHZpZXdNb2RlbCxcbiAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgKSB7XG4gICAgICByZXR1cm4gaW5pdChcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgICAgYWxsQmluZGluZ3MsXG4gICAgICAgIHZpZXdNb2RlbCxcbiAgICAgICAgYmluZGluZ0NvbnRleHQsXG4gICAgICAgIGtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUuc29ydGFibGVPcHRpb25zXG4gICAgICApO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgYWxsQmluZGluZ3MsXG4gICAgICB2aWV3TW9kZWwsXG4gICAgICBiaW5kaW5nQ29udGV4dFxuICAgICkge1xuICAgICAgcmV0dXJuIHVwZGF0ZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgICAgYWxsQmluZGluZ3MsXG4gICAgICAgIHZpZXdNb2RlbCxcbiAgICAgICAgYmluZGluZ0NvbnRleHQsXG4gICAgICAgIGtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUuc29ydGFibGVPcHRpb25zXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBrby5iaW5kaW5nSGFuZGxlcnMuc29ydGFibGUgPSB7XG4gICAgc29ydGFibGVPcHRpb25zOiB7XG4gICAgICBncm91cDogeyBwdWxsOiB0cnVlLCBwdXQ6IHRydWUgfVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24oXG4gICAgICBlbGVtZW50LFxuICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgdmlld01vZGVsLFxuICAgICAgYmluZGluZ0NvbnRleHRcbiAgICApIHtcbiAgICAgIHJldHVybiBpbml0KFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgICBhbGxCaW5kaW5ncyxcbiAgICAgICAgdmlld01vZGVsLFxuICAgICAgICBiaW5kaW5nQ29udGV4dCxcbiAgICAgICAga28uYmluZGluZ0hhbmRsZXJzLnNvcnRhYmxlLnNvcnRhYmxlT3B0aW9uc1xuICAgICAgKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24oXG4gICAgICBlbGVtZW50LFxuICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgdmlld01vZGVsLFxuICAgICAgYmluZGluZ0NvbnRleHRcbiAgICApIHtcbiAgICAgIHJldHVybiB1cGRhdGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHZhbHVlQWNjZXNzb3IsXG4gICAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgICB2aWV3TW9kZWwsXG4gICAgICAgIGJpbmRpbmdDb250ZXh0LFxuICAgICAgICBrby5iaW5kaW5nSGFuZGxlcnMuc29ydGFibGUuc29ydGFibGVPcHRpb25zXG4gICAgICApO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi92ZW5kb3Iva25vY2tvdXQtc29ydGFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDExMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBzdHlsZXNcbmltcG9ydCBcIi4uL3V0aWxzL2N1c3RvbS1jaGVja2JveC5zY3NzXCI7XG5pbXBvcnQgXCIuLi91dGlscy9jdXN0b20tc2VsZWN0LnNjc3NcIjtcbmltcG9ydCBcIi4uL3V0aWxzL2RkbWVudS5zY3NzXCI7XG5pbXBvcnQgXCIuLi9tYWluLnNjc3NcIjtcblxuZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG5leHBvcnQgeyBlblN0cmluZ3MgfSBmcm9tIFwiLi4vbG9jYWxpemF0aW9uL2VuZ2xpc2hcIjtcbmV4cG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgZGVmYXVsdFN0cmluZ3MgfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbmV4cG9ydCB7IERyYWdEcm9wSGVscGVyIH0gZnJvbSBcIi4uL2RyYWdkcm9waGVscGVyXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Vcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5Q3VzdG9tRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlDdXN0b21FZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeVxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuZXhwb3J0IHtcbiAgU3VydmV5U3RyaW5nUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleURyb3Bkb3duUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleUJvb2xlYW5Qcm9wZXJ0eUVkaXRvcixcbiAgU3VydmV5TnVtYmVyUHJvcGVydHlFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlUZXh0SXRlbXNFZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5TXVsdGlwbGVWYWx1ZXNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU11bHRpcGxlVmFsdWVzRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvcixcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JJdGVtXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlEcm9wZG93bkNvbHVtbnNFZGl0b3IsXG4gIFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbVxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNb2RhbEVkaXRvclwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yLFxuICBTdXJ2ZXlQcm9wZXJ0eUh0bWxFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvclxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q29uZGl0aW9uRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVJlc3RmdWxsRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvclxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJzRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlUcmlnZ2Vyc0VkaXRvclwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlWYWxpZGF0b3JzRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlWYWxpZGF0b3JzRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUNlbGxzRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlDZWxsc0VkaXRvclwiO1xuZXhwb3J0IHsgU3VydmV5T2JqZWN0cyB9IGZyb20gXCIuLi9zdXJ2ZXlPYmplY3RzXCI7XG5cbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydGllcyxcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JSb3csXG4gIFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHlcbn0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclByb3BlcnRpZXNcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvblxufSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvblwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlFZGl0b3JTaG93V2luZG93LFxuICBTdXJ2ZXlRdWVzdGlvbkVkaXRvcixcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWJcbn0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuXG5leHBvcnQgeyBRdWVzdGlvblRvb2xib3ggfSBmcm9tIFwiLi4vcXVlc3Rpb25Ub29sYm94XCI7XG5leHBvcnQgeyBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSB9IGZyb20gXCIuLi9vYmplY3RQcm9wZXJ0eVwiO1xuZXhwb3J0IHsgU3VydmV5T2JqZWN0RWRpdG9yIH0gZnJvbSBcIi4uL29iamVjdEVkaXRvclwiO1xuZXhwb3J0IHsgUGFnZXNFZGl0b3IgfSBmcm9tIFwiLi4vcGFnZXNFZGl0b3JcIjtcbmV4cG9ydCB7IFN1cnZleVRleHRXb3JrZXIgfSBmcm9tIFwiLi4vdGV4dFdvcmtlclwiO1xuZXhwb3J0IHsgT2JqVHlwZSwgU3VydmV5SGVscGVyIH0gZnJvbSBcIi4uL3N1cnZleUhlbHBlclwiO1xuZXhwb3J0IHsgU3VydmV5TGl2ZVRlc3RlciB9IGZyb20gXCIuLi9zdXJ2ZXlsaXZlXCI7XG5leHBvcnQgeyBTdXJ2ZXlFbWJlZGluZ1dpbmRvdyB9IGZyb20gXCIuLi9zdXJ2ZXlFbWJlZGluZ1dpbmRvd1wiO1xuZXhwb3J0IHsgUXVlc3Rpb25Db252ZXJ0ZXIgfSBmcm9tIFwiLi4vcXVlc3Rpb25jb252ZXJ0ZXJcIjtcbmV4cG9ydCB7IFN1cnZleVVuZG9SZWRvLCBVbmRvUmVkb0l0ZW0gfSBmcm9tIFwiLi4vdW5kb3JlZG9cIjtcbmV4cG9ydCB7XG4gIFN1cnZleUZvckRlc2lnbmVyLFxuICByZWdpc3RlckFkb3JuZXIsXG4gIHJlbW92ZUFkb3JuZXJzXG59IGZyb20gXCIuLi9zdXJ2ZXlqc09iamVjdHNcIjtcbmV4cG9ydCB7IEV4dGVudGlvbnMgfSBmcm9tIFwiLi4vZXh0ZW50aW9uc1wiO1xuZXhwb3J0IHsgU3VydmV5RWRpdG9yIH0gZnJvbSBcIi4uL2VkaXRvclwiO1xuXG5leHBvcnQgeyBTdXJ2ZXlzTWFuYWdlciB9IGZyb20gXCIuLi9tYW5hZ2VcIjtcblxuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuLi9zdHlsZXNtYW5hZ2VyXCI7XG5cbi8vZWRpdG9yTG9jYWxpemF0aW9uXG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vZnJlbmNoXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vZ2VybWFuXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vaXRhbGlhblwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL3BlcnNpYW5cIjtcbmltcG9ydCBcIi4uL2xvY2FsaXphdGlvbi9wb2xpc2hcIjtcbmltcG9ydCBcIi4uL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vc2ltcGxpZmllZC1jaGluZXNlXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vc3BhbmlzaFwiO1xuXG4vL2Fkb3JuZXJzXG5leHBvcnQgeyB0aXRsZUFkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvdGl0bGUtZWRpdG9yXCI7XG5leHBvcnQgeyBpdGVtQWRvcm5lciB9IGZyb20gXCIuLi9hZG9ybmVycy9pdGVtLWVkaXRvclwiO1xuZXhwb3J0IHsgbGFiZWxBZG9ybmVyIH0gZnJvbSBcIi4uL2Fkb3JuZXJzL2xhYmVsLWVkaXRvclwiO1xuZXhwb3J0IHsgcXVlc3Rpb25BY3Rpb25zQWRvcm5lciB9IGZyb20gXCIuLi9hZG9ybmVycy9xdWVzdGlvbi1hY3Rpb25zXCI7XG5leHBvcnQgeyBzZWxlY3RJdGVtc0VkaXRvckFkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvc2VsZWN0LWl0ZW1zLWVkaXRvclwiO1xuZXhwb3J0IHsgcmF0aW5nSXRlbUFkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvcmF0aW5nLWl0ZW0tZWRpdG9yXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9pbmRleC50cyJdLCJzb3VyY2VSb290IjoiIn0=
| ver. 1.4 |
Github
|
.
| PHP 7.2.34 | Generation time: 3.47 |
proxy
|
phpinfo
|
Settings