(self["webpackChunkiride"] = self["webpackChunkiride"] || []).push([["include_js_utils_js"],{ /***/ "./include/js/utils.js": /*!*****************************!*\ !*** ./include/js/utils.js ***! \*****************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { function _wrapRegExp() { _wrapRegExp = function _wrapRegExp(e, r) { return new BabelRegExp(e, void 0, r); }; var e = RegExp.prototype, r = new WeakMap(); function BabelRegExp(e, t, p) { var o = new RegExp(e, t); return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype); } function buildGroups(e, t) { var p = r.get(t); return Object.keys(p).reduce(function (r, t) { var o = p[t]; if ("number" == typeof o) r[t] = e[o];else { for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++; r[t] = e[o[i]]; } return r; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) { var t = e.exec.call(this, r); if (t) { t.groups = buildGroups(t, this); var p = t.indices; p && (p.groups = buildGroups(p, this)); } return t; }, BabelRegExp.prototype[Symbol.replace] = function (t, p) { if ("string" == typeof p) { var o = r.get(this); return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) { var t = o[r]; return "$" + (Array.isArray(t) ? t.join("$") : t); })); } if ("function" == typeof p) { var i = this; return e[Symbol.replace].call(this, t, function () { var e = arguments; return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e); }); } return e[Symbol.replace].call(this, t, p); }, _wrapRegExp.apply(this, arguments); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } __webpack_require__(/*! core-js/modules/es.symbol.js */ "./node_modules/core-js/modules/es.symbol.js"); __webpack_require__(/*! core-js/modules/es.symbol.description.js */ "./node_modules/core-js/modules/es.symbol.description.js"); __webpack_require__(/*! core-js/modules/es.symbol.iterator.js */ "./node_modules/core-js/modules/es.symbol.iterator.js"); __webpack_require__(/*! core-js/modules/es.symbol.replace.js */ "./node_modules/core-js/modules/es.symbol.replace.js"); __webpack_require__(/*! core-js/modules/es.symbol.to-primitive.js */ "./node_modules/core-js/modules/es.symbol.to-primitive.js"); __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js"); __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js"); __webpack_require__(/*! core-js/modules/es.array.for-each.js */ "./node_modules/core-js/modules/es.array.for-each.js"); __webpack_require__(/*! core-js/modules/es.array.from.js */ "./node_modules/core-js/modules/es.array.from.js"); __webpack_require__(/*! core-js/modules/es.array.includes.js */ "./node_modules/core-js/modules/es.array.includes.js"); __webpack_require__(/*! core-js/modules/es.array.index-of.js */ "./node_modules/core-js/modules/es.array.index-of.js"); __webpack_require__(/*! core-js/modules/es.array.is-array.js */ "./node_modules/core-js/modules/es.array.is-array.js"); __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js"); __webpack_require__(/*! core-js/modules/es.array.join.js */ "./node_modules/core-js/modules/es.array.join.js"); __webpack_require__(/*! core-js/modules/es.array.map.js */ "./node_modules/core-js/modules/es.array.map.js"); __webpack_require__(/*! core-js/modules/es.array.reduce.js */ "./node_modules/core-js/modules/es.array.reduce.js"); __webpack_require__(/*! core-js/modules/es.array.reverse.js */ "./node_modules/core-js/modules/es.array.reverse.js"); __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js"); __webpack_require__(/*! core-js/modules/es.date.to-primitive.js */ "./node_modules/core-js/modules/es.date.to-primitive.js"); __webpack_require__(/*! core-js/modules/es.date.to-string.js */ "./node_modules/core-js/modules/es.date.to-string.js"); __webpack_require__(/*! core-js/modules/es.function.bind.js */ "./node_modules/core-js/modules/es.function.bind.js"); __webpack_require__(/*! core-js/modules/es.function.name.js */ "./node_modules/core-js/modules/es.function.name.js"); __webpack_require__(/*! core-js/modules/es.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.js"); __webpack_require__(/*! core-js/modules/es.number.parse-int.js */ "./node_modules/core-js/modules/es.number.parse-int.js"); __webpack_require__(/*! core-js/modules/es.number.to-fixed.js */ "./node_modules/core-js/modules/es.number.to-fixed.js"); __webpack_require__(/*! core-js/modules/es.object.create.js */ "./node_modules/core-js/modules/es.object.create.js"); __webpack_require__(/*! core-js/modules/es.object.define-properties.js */ "./node_modules/core-js/modules/es.object.define-properties.js"); __webpack_require__(/*! core-js/modules/es.object.define-property.js */ "./node_modules/core-js/modules/es.object.define-property.js"); __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptor.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"); __webpack_require__(/*! core-js/modules/es.object.get-own-property-descriptors.js */ "./node_modules/core-js/modules/es.object.get-own-property-descriptors.js"); __webpack_require__(/*! core-js/modules/es.object.keys.js */ "./node_modules/core-js/modules/es.object.keys.js"); __webpack_require__(/*! core-js/modules/es.object.set-prototype-of.js */ "./node_modules/core-js/modules/es.object.set-prototype-of.js"); __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js"); __webpack_require__(/*! core-js/modules/es.parse-float.js */ "./node_modules/core-js/modules/es.parse-float.js"); __webpack_require__(/*! core-js/modules/es.parse-int.js */ "./node_modules/core-js/modules/es.parse-int.js"); __webpack_require__(/*! core-js/modules/es.regexp.constructor.js */ "./node_modules/core-js/modules/es.regexp.constructor.js"); __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js"); __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js"); __webpack_require__(/*! core-js/modules/es.string.includes.js */ "./node_modules/core-js/modules/es.string.includes.js"); __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js"); __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js"); __webpack_require__(/*! core-js/modules/es.string.starts-with.js */ "./node_modules/core-js/modules/es.string.starts-with.js"); __webpack_require__(/*! core-js/modules/es.string.trim.js */ "./node_modules/core-js/modules/es.string.trim.js"); __webpack_require__(/*! core-js/modules/es.weak-map.js */ "./node_modules/core-js/modules/es.weak-map.js"); __webpack_require__(/*! core-js/modules/esnext.string.match-all.js */ "./node_modules/core-js/modules/esnext.string.match-all.js"); __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js"); __webpack_require__(/*! core-js/modules/web.timers.js */ "./node_modules/core-js/modules/web.timers.js"); __webpack_require__(/*! core-js/modules/web.url.js */ "./node_modules/core-js/modules/web.url.js"); __webpack_require__(/*! core-js/modules/web.url-search-params.js */ "./node_modules/core-js/modules/web.url-search-params.js"); var $ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); var DataTable = __webpack_require__(/*! datatables.net-dt */ "./node_modules/datatables.net-dt/js/dataTables.dataTables.mjs"); /** * Created by PhpStorm * User: daniele * Date: 15/05/20 * Time: 13.05 */ var interval_avanzamento; $(window).on('load', function () { //$('#container').fadeIn('slow'); $('#container').show(); setTimeout(function () { adjustDataTables(); }, 300); }); module.exports = { in_array: function in_array(myArray, element) { var res = false; for (var e = 0; e < myArray.length; e++) { if (myArray[e] == element) { res = true; break; } } return res; }, is_array: function is_array(mixed_var) { return mixed_var.isArray() || _typeof(mixed_var) === "object"; }, roundTo: function roundTo(decimalpositions) { var i = this * Math.pow(10, decimalpositions); i = Math.round(i); return i / Math.pow(10, decimalpositions); }, array_unique: function array_unique(value, index, array) { return array.indexOf(value) === index; }, countDecimals: function countDecimals(value) { var text = value.toString(); // verify if number 0.000005 is represented as "5e-6" if (text.indexOf('e-') > -1) { var _text$split = text.split('e-'), _text$split2 = _slicedToArray(_text$split, 2), base = _text$split2[0], trail = _text$split2[1]; var deg = parseInt(trail, 10); return deg; } // count decimals for number in representation like "0.123456" if (Math.floor(value) !== value) { return value.toString().split(".")[1].length || 0; } return 0; }, round: function round(num, dec) { if (!dec) dec = 0; var num_sign = num >= 0 ? 1 : -1; return parseFloat((Math.round(num * Math.pow(10, dec) + num_sign * 0.0001) / Math.pow(10, dec)).toFixed(dec)); }, getFloat: function getFloat(s0, dec) { var s = new String(s0); trim(s); s = s.replace(",", "."); var f = parseFloat(s); if (typeof f === "undefined" || isNaN(f)) return 0; if (dec) return round(f, dec); return f; }, getFloat2: function getFloat2(s) { return round(getFloat(s), 2); }, openWindow: function openWindow(file, w, h, nomefinestra) { if (nomefinestra == null) nomefinestra = "_blank"; var l = (screen.width - w) / 2; var t = (screen.height - h) / 2 - 100; window.open(file, nomefinestra, "fullscreen=yes,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,status=no,location=no,directories=no,copyhistory=no,height=" + h + ",width=" + w + ",left=" + l + ",top=" + t); }, checkKey: function checkKey(e, chars) { var keynum = e.keyCode; if (e.which) keynum = e.which; var is_keyfunction = false; if (keynum in [8, 37, 39, 9, 36, 35, 46]) is_keyfunction = true; var keychar = String.fromCharCode(keynum); if (keychar === '.') is_keyfunction = false; var check = false; for (var i = 0; i < chars.length; i++) { if (chars[i] === keychar) { check = true; break; } } if (is_keyfunction) return true;else return check; }, number_format: function number_format(a, b, c, d) { a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b); var e = a + ''; var f = e.split('.'); if (!f[0]) f[0] = '0'; if (!f[1]) f[1] = ''; if (f[1].length < b) { var g = f[1]; for (var i = f[1].length + 1; i <= b; i++) { g += '0'; } f[1] = g; } if (d != '' && f[0].length > 3) { var h = f[0]; f[0] = ''; for (var _j = 3; _j < h.length; _j += 3) { var _i = h.slice(h.length - _j, h.length - _j + 3); f[0] = d + _i + f[0] + ''; } var j = h.substr(0, h.length % 3 == 0 ? 3 : h.length % 3); f[0] = j + f[0]; } c = b <= 0 ? '' : c; return f[0] + c + f[1]; }, toEuro: function toEuro(n, decimals, se_zero_stringa_vuota) { if (se_zero_stringa_vuota == null) se_zero_stringa_vuota = false; n = getFloat(n, decimals); var CURRENCY__DECIMAL_SEPARATOR = $("#CURRENCY__DECIMAL_SEPARATOR").val(); var CURRENCY__THOUSANDS_SEPARATOR = $("#CURRENCY__THOUSANDS_SEPARATOR").val(); if (!decimals) decimals = 2; var sign = n < 0 ? "- " : ""; var s = number_format(Math.abs(n), decimals, CURRENCY__DECIMAL_SEPARATOR, CURRENCY__THOUSANDS_SEPARATOR); if (se_zero_stringa_vuota && parseFloat(s) === 0) s = ""; return sign + s; }, trim: function trim(str, chars) { return ltrim(rtrim(str, chars), chars); }, ltrim: function ltrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("^[" + chars + "]+", "g"), ""); }, rtrim: function rtrim(str, chars) { chars = chars || "\\s"; return str.replace(new RegExp("[" + chars + "]+$", "g"), ""); }, waiting: function waiting(visibile) { waiting2(visibile); }, waiting2: function waiting2(visibile, view_progress) { if (visibile == null) visibile = true; if (view_progress == null) view_progress = false; if (visibile) { dialogShow("div_waiting2"); if (view_progress) { $("#span_perc_avanzamento").show(); $("#span_symbol_perc").show(); interval_avanzamento = setInterval("runAjaxAvanzamento()", 200); } } else { $("#div_waiting2").dialog("close"); clearInterval(interval_avanzamento); } }, runAjaxAvanzamento: function runAjaxAvanzamento() { $.ajax({ url: "ajax.php?JSON=1&object=IWRoot&tipoview=getProgressBar", dataType: "json", success: function success(json) { $("#span_perc_avanzamento").html(json.perc_avanzamento + "%"); }, error: function error() { clearInterval(interval_avanzamento); } }); }, str_pad: function str_pad(input, pad_length, pad_string, pad_type) { var half = '', pad_to_go; var str_pad_repeater = function str_pad_repeater(s, len) { var collect = '', i; while (collect.length < len) { collect += s; } collect = collect.substr(0, len); return collect; }; input += ''; pad_string = pad_string != null ? pad_string : " "; if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') { pad_type = 'STR_PAD_RIGHT'; } if ((pad_to_go = pad_length - input.length) > 0) { if (pad_type == 'STR_PAD_LEFT') { input = str_pad_repeater(pad_string, pad_to_go) + input; } else if (pad_type == 'STR_PAD_RIGHT') { input = input + str_pad_repeater(pad_string, pad_to_go); } else if (pad_type == 'STR_PAD_BOTH') { half = str_pad_repeater(pad_string, Math.ceil(pad_to_go / 2)); input = half + input + half; input = input.substr(0, pad_length); } } return input; }, //visualizza un messaggio nell footer footerMsg: function footerMsg(tipo, titolo, testo) { if ($("#no_footermsg").val() === 1 || $("#IWEnv").val() === "bootstrap") { if (tipo == 0) $.growl.notice({ title: $("#transaction_success").val(), message: '' }); if (tipo == 1) $.growl.error({ duration: 30000, title: $("#transaction_error").val(), message: testo }); return true; } //tipo=0 (yes=verde) 1=(no=rosso) 2=(alert, giallo) var $div = $("#divMsg"); $div.fadeOut(); $div.html(titolo); $div.removeClass("msgOK3").removeClass("msgERR3"); if (tipo == 0) $div.addClass("msgOK3"); if (tipo == 1) $div.addClass("msgERR3"); //testo=testo.replace(/
/gi,"\n"); $div.prop("messaggio", testo); $div.fadeIn(); setTimeout("$('#divMsg').fadeOut();", 3 * 60000); return true; }, get_ean13_checkdigit: function get_ean13_checkdigit(s) { if (s.length > 12) s = s.substr(0, 12); s = parseInt(s, 10); s = str_pad(s, 12, "0", "STR_PAD_LEFT"); var even_sum = parseInt(s.substr(1, 1), 10) + parseInt(s.substr(3, 1), 10) + parseInt(s.substr(5, 1), 10) + parseInt(s.substr(7, 1), 10) + parseInt(s.substr(9, 1), 10) + parseInt(s.substr(11, 1), 10); var even_sum_three = even_sum * 3; var odd_sum = parseInt(s.substr(0, 1), 10) + parseInt(s.substr(2, 1), 10) + parseInt(s.substr(4, 1), 10) + parseInt(s.substr(6, 1), 10) + parseInt(s.substr(8, 1), 10) + parseInt(s.substr(10, 1), 10); var total_sum = even_sum_three + odd_sum; var next_ten = Math.ceil(total_sum / 10) * 10; var check_digit = next_ten - total_sum; return check_digit; }, get_ean8_checkdigit: function get_ean8_checkdigit(s) { var sum = s.toString().split('').reverse().reduce(function (sum, _char, idx) { var digit = Number.parseInt(_char); var weight = (idx + 1) % 2 === 0 ? 1 : 3; var partial = digit * weight; return sum + partial; }, 0); var remainder = sum % 10; var checksum = remainder ? 10 - remainder : 0; return checksum; }, //visualizza o nasconde le altre voci nella combo del sian sian_combo_swap: function sian_combo_swap(idcombo) { for (var i = 0; i < $("#causalesian option").size(); i++) { var id = "#sian_option_" + i; if ($(id).prop("disabled") != "") { $(id).removeAttr("disabled"); $(id).show(); } else { $(id).prop("disabled", "disabled"); $(id).hide(); } } }, strpos: function strpos(haystack, needle, offset) { var i = (haystack + '').indexOf(needle, offset || 0); return i === -1 ? false : i; }, //sezione iva ivaGet: function ivaGet(idiva, campo) { if (idiva == null) idiva = 0; if (idiva == 0) return; var a = $("#hidden_idiva" + idiva).attr(campo); if (campo == "aliquota" || campo == "percindetraibilita") a = getFloat2(a); return a; }, getHtmlFromAjax: function getHtmlFromAjax(url, divname, is_async, show_waiting, callbackFunction) { var data = {}; if (_typeof(url) === "object") { divname = url["divname"]; is_async = url["is_async"]; show_waiting = url["show_waiting"]; callbackFunction = url["onSuccess"]; data = url["data"]; url = url["url"]; } if (typeof is_async === "undefined") is_async = true; if (typeof show_waiting === "undefined") show_waiting = false; if (show_waiting) waiting(); var self = this; $.ajax({ url: url + "&JSON", type: "post", async: is_async, dataType: 'json', data: data, success: function success(json) { var text_to_print = json.text; $("#" + divname).html(text_to_print); if (show_waiting) waiting(false); $(".ui-tooltip").hide(); self.reloadComponents("#" + divname + " "); if (typeof callbackFunction === "function") callbackFunction(json); } }); }, btnLoad_onclick: function btnLoad_onclick(action) { var $form = $("#form1"); if (action == "") $form.submit();else { $form.method = "get"; $form.target = "_blank"; $form.action = action; $form.submit(); } }, btnLoad2_onclick: function btnLoad2_onclick() { var $form = $("#form1"); $form.attr("action", ""); $form.removeAttr("target"); $form.submit(); }, PageChange: function PageChange(pagen) { $("#npage").val(pagen); btnLoad2_onclick(); }, deleteObject: function deleteObject(id, forza_eliminazione, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll, callback) { IWConfirm($("#conferma_cancellazione1").val() + " (1/2)", function () { IWConfirm2($("#conferma_cancellazione2").val() + " (2/2)", function () { btnDel2_onclick(id, forza_eliminazione, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll, callback); }); }); }, btnDel2_onclick: function (_btnDel2_onclick) { function btnDel2_onclick(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8) { return _btnDel2_onclick.apply(this, arguments); } btnDel2_onclick.toString = function () { return _btnDel2_onclick.toString(); }; return btnDel2_onclick; }(function (id, forza_eliminazione, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll, callback) { if (typeof parametri_aggiuntivi === "undefined") parametri_aggiuntivi = ""; if (typeof reload === "undefined") reload = false; if (typeof iddocumento === "undefined") iddocumento = 0; if (typeof codicedocumento === "undefined") codicedocumento = ""; if (typeof reload_tablescroll === "undefined") reload_tablescroll = ""; var object = $("#object").val(); var tipoview = $("#tipoview").val(); //Procedo alla cancellazione var url = "view.php?DEL_FROM_AJAX"; var data = "JSON=1"; if (iddocumento > 0 && codicedocumento) data += "&iddocumento=" + iddocumento + "&codicedocumento=" + codicedocumento + "&tipoview=view";else data += "&id=" + id + "&object=" + object + "&tipoview=" + tipoview; if (parametri_aggiuntivi) data += "&" + parametri_aggiuntivi; if (forza_eliminazione) url += "&FORZA_ELIMINAZIONE"; waiting(true); $.ajax({ url: url, data: data, type: "post", dataType: "json", success: function success(json) { waiting(false); var chiedi_conferma = json.chiedi_conferma; var debug = json.debug; ajaxSubmitOnSuccessFunction(json, true, chiedi_conferma); var ret = json.ret; if (ret) { if (reload && !debug) { if (iddocumento > 0) window.location.href = "?codicedocumento=" + codicedocumento + "&tipoview=view";else location.reload(); } if (reload_tablescroll) reloadTable(reload_tablescroll); $("#tr_" + id).hideRow(); if (typeof callback === "function") callback(); } else { if (chiedi_conferma) { IWConfirm(chiedi_conferma, function () { btnDel2_onclick(id, 1, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll, callback); }); } } } }); return true; }), btnSave_onclick: function btnSave_onclick(reload, set_progress, url, on_complete, beforeSubmitCallback) { if (reload == "") reload = false; if (set_progress == "") set_progress = false; var $btns = $("button"); $btns.prop("disabled", true); if (set_progress) waiting2(true, true); if (typeof beforeSubmitCallback === "function") beforeSubmitCallback(); var $OP_FROM_AJAX = $("#OP_FROM_AJAX"); $OP_FROM_AJAX.val(1); $.ajax({ url: "view.php", type: "post", dataType: "xml", data: $("#form1").serialize(), success: function success(res) { ajaxSubmitOnSuccessFunction(res); $OP_FROM_AJAX.val(""); var ret = $(res).find("ret").text(); var debug = $(res).find("debug").text(); var id = $(res).find("id").text(); if (ret) { $("#id").val(id); $btns.fadeIn(); $('#no_beforeunload').val(1); if (reload && !debug) window.location.reload(); //eventuale URL di destinazione. Accodo l'id generato o recuperato direttamente quindi l'url deve essere formattata bene lato php if (url != null && url != "" && !debug) window.location.href = url + id; if (typeof on_complete === "function") on_complete(true, res); } else { if (typeof on_complete === "function") on_complete(false, res); } $btns.prop("disabled", false); if (set_progress) waiting2(false); }, error: function error(xhr, ajaxOptions, thrownError) { $("#boxDebug").html("
" + xhr.status + "
" + thrownError + "
"); $btns.prop("disabled", false); } }); }, btnPrint_onclick: function btnPrint_onclick(is_senza_prezzi) { var page_print = $('#page_print').val(); var stringhe = page_print.split('iddocumento'); var iddocumento = $("#iddocumento").val(); var url = stringhe[0] + "&iddocumento=" + iddocumento; if (is_senza_prezzi == 1) url += "&NON_STAMPARE_PREZZI"; window.open(url, '_blank'); }, btnPrint2_onclick: function btnPrint2_onclick(tipostampa, id, codicedocumento, object, parametri, setfilename, is_excel, form, set_progress, on_complete) { if (!form) form = "form1"; if (!set_progress) set_progress = false; if (setfilename === "true") { if (!id) id = 0; waiting2(true, set_progress); var $allarmi = $("#avvisi_footer_ul0"); $allarmi.hide(); var $form = $("#" + form); $("#tipostampa").val(tipostampa); if (id > 0 && codicedocumento) $("#iddocumento").val(id); var action = "print.php?setfilename&id=" + id; if (is_excel === "true") action += "&EXCEL"; $.ajax({ url: action + "&JSON", type: "post", dataType: "json", data: $form.serialize(), success: function success(json) { if (typeof on_complete === "function") on_complete(); if (json.data.ret) { if (is_excel !== "true") window.open(json.data.outfile, '_blank');else window.location.href = json.data.outfile; } else alert("Errore. Impossibile stampare"); $allarmi.show(); waiting2(false); }, error: function error(jqXHR) { waiting2(false); alert(JSON.parse(jqXHR.responseText).error.description); } }); } else { var url = "print.php?tipostampa=" + tipostampa; var params = parametri.split(","); $.each(params, function (i) { url += "&" + params[i]; }); if (codicedocumento) url += "&iddocumento=" + id + "&codicedocumento=" + codicedocumento;else url += "&id=" + id + "&object=" + object; window.open(url, "_blank"); } }, btnPrintMultiple: function btnPrintMultiple(dati, set_progress) { if (set_progress) waiting2(true, true); dati.object = "IWPrintMultiple"; dati.tipoview = "printMultiple"; $.ajax({ url: "ajax.php?JSON", type: "post", dataType: "json", data: dati, success: function success(json) { var ret = json.ret; var outfile = json.outfile; if (set_progress) waiting2(false); if (ret) window.open("tmp/" + outfile);else alert($("#alert_no_stampa").val()); } }); }, btnPrint: function btnPrint(params, is_excel, callback, no_return_after_callback, is_json) { $.ajax({ url: "print.php?setfilename" + (is_excel ? "&EXCEL" : "") + (is_json ? "&JSON" : ""), type: "post", dataType: is_json ? "json" : "xml", data: params, success: function success(res) { if (typeof callback === "function") { callback(res.data); if (!no_return_after_callback) return; } var ret = is_json ? res.data.ret : $(res).find("ret").text() === "true"; if (!ret) { alert($("#alert_no_stampa").val()); return; } var outfile = is_json ? res.data.outfile : $(res).find("outfile").text(); if (!is_excel) window.open(outfile);else window.location.href = outfile; }, error: function error(jqXHR) { alert(JSON.parse(jqXHR.responseText).error.description); waiting(false); } }); }, getDatiComuneItaliano: function getDatiComuneItaliano(comune_id, callback) { $.ajax({ url: "ajax.php?JSON&object=IWComuni&tipoview=getDatiComune&id=" + comune_id, type: "get", dataType: "json", success: function success(json) { if (typeof callback === "function") callback(json); } }); }, setNewPassword: function setNewPassword(inputname, restapi, force_length) { if (typeof restapi === "undefined") restapi = false; $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=getNewPassword&restapi=" + (restapi ? "1" : "0") + "&force_length=" + (force_length ? "1" : "0"), dataType: "json", success: function success(json) { $("#" + inputname).val(json.password); } }); }, btnNew_onclick: function btnNew_onclick() { var codicedocumento = $("#codicedocumento").val(); var object = $("#object").val(); var tipoview = $("#tipoview").val(); var reload = "?tipoview=" + tipoview; if (typeof codicedocumento === "undefined") reload += "&object=" + object;else { if ($("#page_controls").val() != "") reload = "?tipoview=controls"; reload += "&codicedocumento=" + codicedocumento; } window.location = reload; }, btnMail_onclick: function btnMail_onclick() { var iddocumento = $("#iddocumento").valFloat(); IWConfirm($("#conferma_prosegui").val(), function () { $.get("ajax.php?tipoview=inviaemaildoc&iddocumento=" + iddocumento + "&codicedocumento=" + $("#codicedocumento").val(), function (xml) { var ret = $(xml).find("ret").text(); if (ret) { footerMsg(0, "Email inviata", $(xml).find("msg").text()); $("#btnEmail").fadeOut(); } else footerMsg(1, "Errore nell'invio della email", $(xml).find("msg").text()); }); }); }, checkAll_onclick: function checkAll_onclick() { var val = ""; var $chk; var checked = $("#chk_0").is(':checked'); if (!checked) val = "checked"; var nrows = $("#i_count").valFloat(); if (nrows == 0) nrows = 1000; for (var i = 0; i < nrows; i++) { $chk = $("#chk_" + i); if (val == "") $chk.prop("checked", false);else $chk.prop("checked", val); } }, iwCurrencyElement: function iwCurrencyElement() { $(".Currency2").each(function () { $(this).off("blur"); $(this).off("focus"); $(this).on("blur", function () { var symbol = $(this).attr("symbol") ? $(this).attr("symbol") : $("#CURRENCY__SYMBOL").val(); var decimals = $(this).attr("decimals") ? $(this).attr("decimals") : $("#CURRENCY__DECIMALS").val(); var decimal_separator = $("#CURRENCY__DECIMAL_SEPARATOR").val(); var thousand_separator = $("#CURRENCY__THOUSANDS_SEPARATOR").val(); var hidden = $("#" + $(this).attr("id") + "_hidden"); var if_zero_empty = $(this).attr("if_zero_empty"); var s = $(this).val(); s = s.replace(symbol, ''); var n = getFloat(s); hidden.val(n); var sign = n < 0 ? "- " : ""; var n2 = number_format(Math.abs(n), decimals, decimal_separator, thousand_separator); if (!n && if_zero_empty) $(this).val("");else $(this).val(sign + symbol + " " + n2); var onchange = $(this).data("onchange_event"); if (onchange) eval(onchange); }); $(this).on("focus", function () { var id = $(this).attr("id"); var hidden = $("#" + id + "_hidden"); var decimals = $(this).attr("decimals"); var number = hidden.valFloat(); var n = Number(number); $(this).val(n.toFixed(decimals)); $(this).select(); $(this).one('mouseup', function (e) { e.preventDefault(); }); }); }); }, showColumn: function showColumn(table, index, visible) { if (visible == null) visible = true; var $t = $("#" + table); var dt = $t.dataTable().api(); var c = dt.column(index); c.visible(visible); //dt.columns.adjust(); }, hideColumn: function hideColumn(table, index) { showColumn(table, index, false); }, getCodiciIVA: function getCodiciIVA(attivitapassivita, data_limite) { var url = "ajax.php?object=CodiceIVA&tipoview=getCodici&attivitapassivita=" + attivitapassivita + "&data_limite=" + data_limite; var options = []; $.ajax({ url: url, dataType: "xml", async: false, success: function success(xml) { var codici_count = $(xml).find("codici_count").text(); var i; for (i = 0; i < codici_count; i++) { var id = $(xml).find("id" + i).text(); options[id] = $(xml).find("descrizione" + i).text(); } } }); return options; }, scorporaIva: function scorporaIva(importo, idiva) { var aliquota = ivaGet(idiva, "aliquota"); return getFloat2(importo / (1 + aliquota / 100)); }, IWAutocomplete: function IWAutocomplete(id, IWObject, filters, dinamic_search, iddialog, excelProcess, cssClass, callback) { if (!filters) filters = {}; var $idAutocomplete = $("#" + id); if (cssClass) $idAutocomplete = $("." + cssClass); filters.cssClasses = $idAutocomplete.attr("class"); var is_extended = parseInt($idAutocomplete.data("extended")); var runAutocomplete = function runAutocomplete() { return $idAutocomplete.autocomplete({ source: function source(request, response) { ajaxSourceIWAutocomplete(filters, IWObject, request, response, excelProcess, dinamic_search); }, minLength: 2, autoFocus: true, select: function select(event, ui) { if (IWObject.startsWith("IWAutocompleteArticolo")) { checkArticoloDelFornitore(ui.item.id, id); if (ui.item.da_confermare) { showDialogArticoloDaConfermare(ui.item.id, id); return; } } if (cssClass) id = event.target.id; var $id = $("#" + id + "_hidden"); $id.val(ui.item.id); $id.change(); if (typeof callback === "function") callback(ui.item); }, appendTo: iddialog ? "#" + iddialog : "" }); }; if (is_extended) { runAutocomplete().autocomplete("instance")._renderItem = function (ul, item) { return $("
  • ").append("
    " + item.label + "
    " + item.desc + "
    ").appendTo(ul); }; return; } runAutocomplete(); }, checkArticoloDelFornitore: function checkArticoloDelFornitore(idarticolo, id_field) { var $codicedocumento = $("#codicedocumento"); if (!$codicedocumento.val()) return; if ($("#is_passivita").valFloat() === 0) return; if (getFloat($codicedocumento.data("tipo_recupero_prezzi_passivita")) !== 2 && getFloat($codicedocumento.data("tipo_recupero_prezzi_passivita")) !== 4) return; var idfornitore = $("#anagrafica_hidden").valFloat(); if (idfornitore === 0) return; var object = $("#class_articolo").val(); $.ajax({ url: "ajax.php?JSON", data: { object: object, id: idarticolo, idfornitore: idfornitore, tipoview: "checkIfArticoloDelFornitore", codice_documento: $codicedocumento.val() }, type: "post", dataType: "json", success: function success(json) { if (json.ret) return; IWConfirmTrueFalse($codicedocumento.data("articolo_non_presente_in_fornitore"), function (ret) { if (ret) return; $("#" + id_field + "_hidden").val(0); $("#" + id_field).val(""); $("#" + id_field).change(); }); } }); }, showDialogArticoloDaConfermare: function showDialogArticoloDaConfermare(idarticolo, id_field) { var object = $("#class_articolo").val(); getHtmlFromAjax({ url: "ajax.php?JSON", data: { object: object, id_daconfermare: idarticolo, tipoview: "getDialogArticoloDaConfermare", object_provenienza: $("#object").val() }, divname: "dialog_articoli_da_confermare", onSuccess: function onSuccess() { dialogShow("dialog_articoli_da_confermare", function (res) { var $hidden = $("#" + id_field + "_hidden"); if (!res) { //se non confermo elimino articolo $hidden.val(0); $("#" + id_field).val(""); $("#dialog_articoli_da_confermare").dialog("close"); return; } $.ajax({ url: "view.php", dataType: "json", type: "post", data: "JSON=1&OP_FROM_AJAX=1&tipoview=confermaArticolo&object=" + object + "&" + $("#dialog_articoli_da_confermare :input,:checkbox").serialize(), success: function success(json) { ajaxSubmitOnSuccessFunction(json, true, !json.ret); if (json.ret) { $hidden.val(json.idarticolo); $hidden.change(); $("#dialog_articoli_da_confermare").dialog("close"); } else { alert(json.msg); $hidden.val(0); $("#" + id_field).val(""); } } }); }); } }); }, ajaxSourceIWAutocomplete: function ajaxSourceIWAutocomplete(filters, IWObject, request, response, excelProcess, dinamic_search) { var term; if (excelProcess == null) term = request.term;else term = request; $.each(filters, function (k, v) { if (typeof v === "string" && v.startsWith("$('#")) filters[k] = eval(v);else filters[k] = v; }); filters.letters = term; $.each(dinamic_search, function (key, value) { if (value.startsWith("$('#")) filters[key] = value + '.val()';else filters[key] = $("#" + value).val(); }); $.ajax({ url: 'ajax.php?JSON&object=' + IWObject + "&tipoview=getAutocomplete", dataType: "json", type: 'POST', data: filters, success: function success(data) { if (excelProcess == null) { response($.map(data.objects, function (item) { return item; /*{ label: item.label, //visualizza la formattazione di ogni risultato, es. [codice] descrizione [codfiscale] [piva] value: item.value, //dopo la selezione del risultato compila il campo, ad es. solo descrizione oppure [codice] descrizione id: item.id, //l'id da salvare nel campo hidden che riconosce il valore nel database _raw: item }*/ })); } else { excelProcess($.map(data.objects, function (item) { return item.label; })); } } }); }, setKeywordsOnCKEditor: function setKeywordsOnCKEditor(e, editor) { if (editor == null) return false; var ckeditor = CKEDITOR.instances[editor]; ckeditor.insertText($(e.target).val().trim()); $(e.target).val('-1'); return true; }, IWConfirm: function IWConfirm(text, r) { $("#IWConfirm").html(text); dialogShow("IWConfirm", function (res) { if (res) r(res); }); }, IWConfirm2: function IWConfirm2(text, r) { $("#IWConfirm2").html(text); dialogShow("IWConfirm2", function (res) { if (res) r(res); }); }, IWConfirm3: function IWConfirm3(text, r) { $("#IWConfirm3").html(text); dialogShow("IWConfirm3", function (res) { if (res) r(res); }); }, IWConfirmTrueFalse: function IWConfirmTrueFalse(text, r) { $("#IWConfirm").html(text); dialogShow("IWConfirm", function (res) { r(res); }); }, reloadTable: function reloadTable(table_id, resetpaging, callback) { var $table = $('#' + table_id); if (typeof resetpaging === "undefined") resetpaging = true; var myCallback = null; if (typeof callback === "function") myCallback = function myCallback() { setTimeout(function () { callback(); }, 300); }; $table.DataTable().ajax.reload(myCallback, resetpaging); $(".ui-tooltip").hide(); }, ajaxSubmitOnSuccessFunction: function ajaxSubmitOnSuccessFunction(res, is_json, hide_okmessage) { if (typeof is_json === "undefined") is_json = false; if (typeof hide_okmessage === "undefined") hide_okmessage = false; var ret, debug, sdebug, msg; if (is_json) { ret = res.ret; debug = res.debug; sdebug = res.sdebug; msg = res.msg; } else { ret = $(res).find("ret").text(); debug = $(res).find("debug").text(); sdebug = $(res).find("sdebug").text(); msg = $(res).find("msg").text(); } if (ret) { if (!hide_okmessage) footerMsg(0, $("#transaction_success").val(), msg); } else { if (!hide_okmessage) footerMsg(1, $("#transaction_error").val(), msg); } if (debug) $("#boxDebug").html(sdebug); }, setDateFromPeriodoFiscale: function setDateFromPeriodoFiscale(id_periodofiscale, id_data_da, id_data_a, is_periodogestionale) { var $periodofiscale = $("#" + id_periodofiscale); var arr = Date__getIntervalloFromPeriodoFiscale($periodofiscale.val(), is_periodogestionale); if (arr === null) return false; $("#" + id_data_da).val(Date__it(arr[0])); $("#" + id_data_a).val(Date__it(arr[1])); return true; }, setDateAnnoSolare: function setDateAnnoSolare(id_periodofiscale, id_data_da, id_data_a) { var $anno = $("#" + id_periodofiscale).val(); if ($anno === "") return false; $("#" + id_data_da).val(Date__it($anno + "/01/01")); $("#" + id_data_a).val(Date__it($anno + "/12/31")); return true; }, changeDateTrimestre: function changeDateTrimestre(trimestre_id, anno_id, data_da_id, data_a_id) { if (typeof trimestre_id === "undefined") trimestre_id = "trimestre"; if (typeof anno_id === "undefined") anno_id = "anno"; if (typeof data_da_id === "undefined") data_da_id = "data_da"; if (typeof data_a_id === "undefined") data_a_id = "data_a"; var trimestre = $('#' + trimestre_id).valFloat(); var anno = $('#' + anno_id).val(); if (trimestre === 1) { $('#' + data_da_id).val(Date__it(anno + '/01/01')); $('#' + data_a_id).val(Date__it(anno + '/03/31')); } if (trimestre === 2) { $('#' + data_da_id).val(Date__it(anno + '/04/01')); $('#' + data_a_id).val(Date__it(anno + '/06/30')); } if (trimestre === 3) { $('#' + data_da_id).val(Date__it(anno + '/07/01')); $('#' + data_a_id).val(Date__it(anno + '/09/30')); } if (trimestre === 4) { $('#' + data_da_id).val(Date__it(anno + '/10/01')); $('#' + data_a_id).val(Date__it(anno + '/12/31')); } }, changeDateBimestre: function changeDateBimestre(bimestre_id, anno_id, data_da_id, data_a_id) { if (typeof bimestre_id === "undefined") bimestre_id = "bimestre"; if (typeof anno_id === "undefined") anno_id = "anno"; if (typeof data_da_id === "undefined") data_da_id = "data_da"; if (typeof data_a_id === "undefined") data_a_id = "data_a"; var bimestre = $('#' + bimestre_id).valFloat(); var anno = $('#' + anno_id).val(); var d; if (bimestre === 1) { $('#' + data_da_id).val(Date__it(anno + '/01/01')); d = new Date(anno, 2, 0); } else if (bimestre === 2) { $('#' + data_da_id).val(Date__it(anno + '/03/01')); d = new Date(anno, 4, 0); } else if (bimestre === 3) { $('#' + data_da_id).val(Date__it(anno + '/05/01')); d = new Date(anno, 6, 0); } else if (bimestre === 4) { $('#' + data_da_id).val(Date__it(anno + '/07/01')); d = new Date(anno, 8, 0); } else if (bimestre === 5) { $('#' + data_da_id).val(Date__it(anno + '/09/01')); d = new Date(anno, 10, 0); } else { $('#' + data_da_id).val(Date__it(anno + '/10/01')); d = new Date(anno, 12, 0); } $('#' + data_a_id).val(Date__it(d.getFullYear() + "/" + str_pad(d.getMonth() + 1, 2, 0, "STR_PAD_LEFT") + "/" + str_pad(d.getDate(), 2, 0, "STR_PAD_LEFT"))); }, changeDateMese: function changeDateMese(mese_id, anno_id, data_da_id, data_a_id) { if (typeof mese_id === "undefined") mese_id = "nmese"; if (typeof anno_id === "undefined") anno_id = "anno"; if (typeof data_da_id === "undefined") data_da_id = "data_da"; if (typeof data_a_id === "undefined") data_a_id = "data_a"; var nmese = $('#' + mese_id).val(); var anno = $('#' + anno_id).valFloat(); var d = new Date(anno, nmese, 0); var last_day = d.getDate(); $('#' + data_da_id).val('01/' + nmese + '/' + anno); $('#' + data_a_id).val(last_day + '/' + nmese + '/' + anno); }, //da modificare quando sistemo registro saveFirmaDocumento: function saveFirmaDocumento(form_name) { var url = "ajax.php?object=AnagraficaOlma&tipoview=saveFirma"; $.ajax({ type: "POST", url: url, data: $("#" + form_name).serialize(), // serializes the form's elements. success: function success(xml) { alert("doc"); // show response from the php script. } }); }, getInfoTable: function getInfoTable(classname, id, onsuccess) { $.ajax({ type: "GET", url: "ajax.php", data: "object=" + $("#object").val() + "&tipoview=getInfoTable&id=" + id + "&classname=" + classname, success: function success(xml) { onsuccess(xml); } }); }, setReadonly: function setReadonly(elementid, exclude) { if (elementid == null) elementid = "form1"; if (exclude == null) exclude = ""; $("#" + elementid + " input, #" + elementid + " textarea").not($(exclude)).prop('readonly', true).off(); $("#" + elementid + " [type='checkbox'],[type='radio']").not($(exclude)).off().click(function () { return false; }); $("#" + elementid + " select option:not(:selected)").not($(exclude)).prop('disabled', true); }, setColumn: function setColumn(colname, azione) { $("td[colname='" + colname + "']").each(function () { if (azione == 'show') $(this).show(); if (azione == 'hide') $(this).hide(); }); $("th[colname='" + colname + "']").each(function () { if (azione == 'show') $(this).show(); if (azione == 'hide') $(this).hide(); }); }, forzaScreenwidthUtente: function forzaScreenwidthUtente(idutente) { var screenwidth = $("#screenwidth").valFloat(); if (screenwidth === 0) screenwidth = window.innerWidth; $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=forzaScreenwidthUtente&id=" + idutente + "&screenwidth=" + screenwidth, success: function success() { location.reload(); } }); }, impostaTema: function impostaTema(idutente) { var tema = $("#tema").valFloat(); $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=setIrideTemaUtente&id=" + idutente + "&tema=" + tema, success: function success() { location.reload(); } }); }, setPreviewTemaJqueryUi: function setPreviewTemaJqueryUi(tema, is_pure) { if (is_pure) return setPreviewPureCss(tema); $.ajax({ url: "ajax.php?JSON&object=ProfiloUtente&tipoview=getCssTema&tema=" + tema, dataType: "json", success: function success(json) { $("#preview_css").html(json.css); } }); }, setPreviewPureCss: function setPreviewPureCss(tema) { var assetsPath = "assets/css/temi/pure-" + tema + "-vars.css"; var linkClass = tema === "dark" ? "-dark" : ""; var cssLink = $("", { rel: "stylesheet", type: "text/css", href: assetsPath, "class": "css-user-theme" + linkClass }); var $cssUserTheme = $(".css-user-theme"); if (tema === "dark") { if ($cssUserTheme.length > 0) { $cssUserTheme.after(cssLink); } else { $("#css-vars").after(cssLink); } } else if (tema === "light") { $(".css-user-theme-dark").remove(); } else { $cssUserTheme.remove(); if (tema !== "") $("#css-vars").after(cssLink); } }, toggleDarkMode: function toggleDarkMode(darkmode) { $("#darkmode-dark, #darkmode-light , #darkmode-auto").hide(); if (darkmode === 0) $(".css-user-theme-dark").remove(); if (darkmode === 1) setPreviewPureCss('dark'); if (darkmode === 2) getAutoDarkMode(); }, getAutoDarkMode: function getAutoDarkMode() { var darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); setPreviewPureCss(darkModeMediaQuery.matches ? "dark" : "light"); darkModeMediaQuery.addEventListener('change', function (event) { setPreviewPureCss(darkModeMediaQuery.matches ? "dark" : "light"); }); }, setFontSize: function setFontSize(event) { var root = document.documentElement; root.style.setProperty('--font-size', $(event.target).val() + 'px'); }, loadProfiloUtente: function loadProfiloUtente() { location.href = "?object=ProfiloUtente"; }, viewDialogNewPassword: function viewDialogNewPassword(iduser, _onSuccess) { getHtmlFromAjax({ url: "ajax.php?object=ProfiloUtente&tipoview=changePassword&id=" + iduser, divname: "dialogChangePassword", onSuccess: function onSuccess() { dialogShow("dialogChangePassword", function (r) { if (!r) return; $.ajax({ url: "view.php", type: "post", dataType: "json", data: "OP_FROM_AJAX=1&JSON=1&tipoview=saveChangePassword&object=ProfiloUtente&id=" + iduser + "&" + $("#dialogChangePassword :input, :checkbox").serialize(), success: function success(json) { ajaxSubmitOnSuccessFunction(json, true); if (typeof _onSuccess === "function") _onSuccess(ret); } }); }); } }); }, /** * * @param periodofiscale * @param is_periodogestionale * @returns {null|string[]} * @constructor */ Date__getIntervalloFromPeriodoFiscale: function Date__getIntervalloFromPeriodoFiscale(periodofiscale, is_periodogestionale) { if (!periodofiscale) return null; var data_da = $("#data_da_fisc").val(); var data_a = $("#data_a_fisc").val(); if (getFloat2(is_periodogestionale) === 1) { data_da = $("#data_da_gest").val(); data_a = $("#data_a_gest").val(); } data_da = periodofiscale.substr(0, 4) + data_da.substr(4); if (periodofiscale.length > 5) data_a = periodofiscale.substr(5) + data_a.substr(4);else data_a = periodofiscale.substr(0) + data_a.substr(4); return [data_da, data_a]; }, noopLog: function noopLog() { $.get("noop-log", function () { //noop }); }, switch_as_user: function switch_as_user() { var $switch = $("#switch_as_user"); dialogShow("confirm_dialog_switch", function (res) { if (!res) return false; var user = $switch.val(); waiting(); $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=switchAsUser", type: 'post', data: { "user": user, "switch_pwd": $("#switch_password").val() }, dataType: "json", success: function success(json) { if (json.ret) window.location.reload();else { waiting(false); alert("Utente inesistente!"); } } }); return true; }); }, switch_to_azienda: function switch_to_azienda() { var codazienda = $("#switch_to_azienda").val(); waiting2(); $.ajax({ url: "ajax.php?JSON&object=IWUser&tipoview=switchAzienda&codicecliente=" + codazienda, dataType: "json", success: function success(json) { console.log(json); if (json.ret) { window.location = 'home.php?idmenu=0&__sck__=1'; return; } waiting(false); alert("Azienda NON TROVATA
    Company NOT FOUND"); } }); }, eanCheckDigit: function eanCheckDigit(s) { var result = 0; for (var counter = s.length - 1; counter >= 0; counter--) { result = result + parseInt(s.charAt(counter)) * (1 + 2 * (counter % 2)); } return (10 - result % 10) % 10; }, generaBarcode: function generaBarcode(value, elem_id, preview_id) { __webpack_require__(/*! jsbarcode */ "./node_modules/jsbarcode/bin/JsBarcode.js"); var bcode = ("000000000000" + value).slice(-12); bcode += eanCheckDigit(bcode); JsBarcode("#" + preview_id, bcode, { format: "EAN13", fontSize: 18, textMargin: 0, height: 120, width: 4, flat: true }).render(); $("#" + elem_id).val(bcode); }, getHtmlDialogCisterne: function getHtmlDialogCisterne(opts) { var $dialog = $("#dialog_cisterne"); opts.object = $dialog.data("object"); opts.tipoview = "getHtmlDialogCisterne"; var anagrafica_field = "anagrafica_hidden"; if (opts.anagrafica_field) anagrafica_field = opts.anagrafica_field; opts.idanagrafica = $("#" + anagrafica_field).valFloat(); var committente_field = "anagrafica3_hidden"; if (opts.committente_field) committente_field = opts.committente_field; opts.idcommittente = $("#" + committente_field).valFloat(); var data_field = "regdata"; if (opts.data_field) data_field = opts.data_field; opts.data = $("#" + data_field).val(); var orario_field = "orario_movmagazzini"; if (opts.orario_field) orario_field = opts.orario_field; opts.orario = $("#" + orario_field).val(); if (!opts.idmagazzinosorgente && opts.field_magazzino) opts.idmagazzinosorgente = $("#" + opts.field_magazzino).val(); if (opts.articolo_field) opts.articolo_id = $("#" + opts.articolo_field).valFloat(); if (opts.causale_field) opts.causale = $("#" + opts.causale_field).valFloat(); if (opts.check_tipo_moliture) opts.causale = $('input[name="tipo_molitura"]:checked').valFloat() === 1 ? "B3" : "T4"; var callback = opts.callback; opts.callback = null; getHtmlFromAjax({ url: "ajax.php?1", divname: "dialog_cisterne", data: opts, onSuccess: function onSuccess() { if (typeof callback === "function") callback(); } }); }, showDialogSelectCisterne: function showDialogSelectCisterne(opts) { var $selectCisterna = $(".selectCisterna"); $selectCisterna.off(); $selectCisterna.on("click", function (event) { opts.idmagazzinosorgente = undefined; var $cisterna_text = $(this); var $cisterna_id = $("#" + $cisterna_text.attr("id").replace("_text_", "")); var $dialog = $("#dialog_cisterne"); var iddeposito = $cisterna_id.data("dialog-iddeposito"); var field_magazzino = $cisterna_id.data("magazzino_field"); var articolo_field = $cisterna_id.data("articolo_field"); var causale_field = $cisterna_id.data("causale_field"); var check_tipo_molitura = parseInt($cisterna_id.data("check_tipo_molitura")); if (iddeposito) opts.idmagazzinosorgente = iddeposito; if (field_magazzino) opts.field_magazzino = field_magazzino; if (articolo_field) opts.articolo_field = articolo_field; if (causale_field) opts.causale_field = causale_field; if (check_tipo_molitura) opts.check_tipo_moliture = 1; waiting(); opts.callback = function () { waiting(false); dialogShow("dialog_cisterne", function () {}, function () { var $cisterneElem = $(".cisternaElem"); $cisterneElem.off(); $cisterneElem.on("click", function () { var index = $(this).data("index"); var $href = $("#dialog_cisterna_codice_" + index); $cisterna_text.val($href.data("descrizione_cisterna")); $cisterna_id.val($href.data("cisterna_id")); $cisterna_id.data("dialog-index", index); $cisterna_id.data("dialog-info", $href.data()); $dialog.data('loaded', true); $dialog.dialog("close"); $cisterna_id.change(); }); $("#elenco_cisterne").DataTable().columns.adjust(); }); }; getHtmlDialogCisterne(opts); }); if (opts.afterLoaded && typeof opts.afterLoaded === "function") opts.afterLoaded(); }, getDialogStandardCisterneFrantoio: function getDialogStandardCisterneFrantoio(opts) { if (!opts) opts = { dialog: "dialog_cisterne", idtiposfuso: 1, afterLoaded: null }; if (!opts.dialog) opts.dialog = "dialog_cisterne"; showDialogSelectCisterne(opts); }, selectMultiItems: function selectMultiItems(opts) { var ids_items = $("#" + opts.hidden_ids); var $id_item = $("#" + opts.autocomplete + "_hidden"); var ids_anagrafiche = !ids_items.val() ? [] : ids_items.val().split(","); ids_anagrafiche.push($id_item.valFloat()); ids_anagrafiche = ids_anagrafiche.join(","); ids_items.val(ids_anagrafiche.toString()); if (typeof opts.callback === "function") opts.callback(opts); }, removeIdFromMultiItems: function removeIdFromMultiItems(opts) { var $ids_items = $("#" + opts.hidden_ids); var ids_items = $ids_items.val().split(","); var new_ids = []; for (var i = 0; i < ids_items.length; i++) { if (parseInt(opts.id) === parseInt(ids_items[i])) continue; new_ids.push(ids_items[i]); } new_ids = new_ids.join(","); $ids_items.val(new_ids); if (typeof opts.callback === "function") opts.callback(opts); }, updateDivEntitySelezionate: function updateDivEntitySelezionate(opts) { var self = this; getHtmlFromAjax({ url: "ajax.php?1", data: { object: opts.object, tipoview: opts.tipoview, entity_ids: $("#" + opts.hidden_ids).val(), hidden_ids: opts.hidden_ids, autocomplete: opts.autocomplete, div: opts.div, max_entities_shown: opts.max_entities_shown }, divname: opts.div, onSuccess: function onSuccess() { var $btn = $("#svuota_" + opts.div); var $x = $(".removeSingleElement"); $btn.focus(); $("#" + opts.autocomplete).val(""); $("#" + opts.autocomplete + "_hidden").val(0); $btn.off(); $btn.on("click", function () { self.eraseMultiItems(opts); }); $x.off(); $x.on("click", function (event) { opts.id = $(event.target).data("id"); self.removeIdFromMultiItems(opts); }); } }); }, updateDivNominativiSelezionati: function updateDivNominativiSelezionati(opts) { opts.object = "Anagrafica2"; opts.tipoview = "viewFieldsetAnagraficheSelezionate"; this.updateDivEntitySelezionate(opts); }, updateDivArticoliSelezionati: function updateDivArticoliSelezionati(opts) { opts.object = "Articolo"; opts.tipoview = "viewFieldsetArticoliSelezionati"; this.updateDivEntitySelezionate(opts); }, eraseMultiItems: function eraseMultiItems(opts) { $("#" + opts.hidden_ids).val(""); $("#" + opts.autocomplete).val(""); $("#" + opts.autocomplete + "_hidden").val(0); if (typeof opts.callback === "function") opts.callback(opts); }, openDialogRicercaAnagrafica: function openDialogRicercaAnagrafica(opts) { if (!opts) opts = {}; if (!opts.object) opts.object = "Anagrafica2"; if (!opts.tipoview) opts.tipoview = "openDialogRicercaAnagrafica"; if (!opts.hidden_ids) opts.hidden_ids = "anagrafiche_ids"; var self = this; getHtmlFromAjax({ url: "ajax.php?1", divname: "dialog_ricerca_anagrafica", data: opts, onSuccess: function onSuccess() { dialogShow("dialog_ricerca_anagrafica", function () { var anags = []; $(".chk_dialog_ricerca_anagrafiche").each(function () { if (!$(this).is(":checked")) return; var anag_id = parseInt($(this).data("anagrafica_id")); anags.push(anag_id); }); $("#" + opts.hidden_ids).val(anags.join(",")); self.updateDivNominativiSelezionati(opts); }); } }); }, getDivDettaglioDichiarazione: function getDivDettaglioDichiarazione(opts) { if (!opts.object) opts.object = "DichiarazioniIntento"; opts.tipoview = "getDivDettaglioDichiarazione"; var callback = null; if (typeof opts.onSuccess === "function") callback = opts.onSuccess; opts.onSuccess = undefined; getHtmlFromAjax({ url: "ajax.php?1", data: opts, divname: opts.div, onSuccess: function onSuccess() { if (typeof callback === "function") callback(opts); } }); }, countdownJs: function countdownJs(opts) { // Set the date we're counting down to var countDownDate = moment(opts.data_futuro).format("X"); new Date().getDate(); // Update the count down every 1 second var x = setInterval(function () { // Get today's date and time var now = moment().format("X"); // Find the distance between now and the count down date var distance = countDownDate - now; // Time calculations for days, hours, minutes and seconds var text = {}; text.days = Math.floor(distance / (60 * 60 * 60) % 60); text.hours = Math.floor(distance / (60 * 60) % 60); text.minutes = Math.floor(distance / 60 % 60); text.seconds = Math.floor(distance % 60); //console.log(text); // Output the result in an element with id="demo" var textToPrint = (opts.showDays ? text.days + "d " : "") + (opts.showHours ? text.hours + "h " : "") + (opts.showMinutes ? text.minutes + "m " : "") + (opts.showSeconds ? text.seconds + "s " : ""); var $elem = $("#" + opts.elem); $elem.html(textToPrint); // If the count down is over, write some text if (distance < 0) { clearInterval(x); $elem.html((opts.showDays ? "0d " : "") + (opts.showHours ? "0h " : "") + (opts.showMinutes ? "0m " : "") + (opts.showSeconds ? "0s " : "")); } }, 1000); }, confirmButtonEvent: function confirmButtonEvent(id) { var $button_id = $("#" + id); var button_bool = getFloat($button_id.data("button_bool")); if (button_bool) { $button_id.animate({ backgroundColor: '#009900', color: '#fff' }, { progress: function progress() { $button_id.text($button_id.data("final_text")); } }); $button_id.data("button_bool", 0); } else { eval($button_id.data("onclick")); } }, setImageFERegistro: function setImageFERegistro(json, id, image) { if (!json.ret) { if (json.msg) alert(json.msg); return false; } var $link = $("#paxml_" + id); if ($link.find("svg").length > 0) { var matches = _toConsumableArray(image.matchAll(/_(.*?)\.png/gm)); if (matches) $link.addClass("fe-status-icon-" + matches[0][1]); } else { $link.html("fe"); } return true; }, adjustDataTables: function adjustDataTables() { $($.fn.dataTable.tables(true)).DataTable().columns.adjust(); }, onVisible: function onVisible(element, callback) { new IntersectionObserver(function (entries, observer) { entries.forEach(function (entry) { if (entry.intersectionRatio > 0) { callback(element); observer.disconnect(); } }); }).observe(element); if (!callback) return callback(); }, observer: function observer(element, callback) { if (!element) return false; var observer = new IntersectionObserver(function (entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { callback(entry, observer); //observer.disconnect(); } }); }); observer.observe(element); }, getMaxVisibleZIndex: function getMaxVisibleZIndex() { var elements = Array.from(document.querySelectorAll('body *')); var zIndexes = elements.filter(function (el) { var style = window.getComputedStyle(el); return style.display !== 'none' && style.visibility !== 'hidden' && el.offsetWidth > 0 && el.offsetHeight > 0; }).map(function (el) { if (el.id === "sidr") return NaN; return parseFloat(window.getComputedStyle(el).zIndex); }).filter(function (zIndex) { return !isNaN(zIndex); }); return zIndexes.length > 0 ? Math.max.apply(Math, _toConsumableArray(zIndexes)) : 0; }, deleteJqueryUpload: function deleteJqueryUpload(elem) { var id = $(elem).data("id"); var check = $("#myfile_del_" + id); IWConfirmTrueFalse(check.data("elimina-text"), function (res) { if (res) { $("#nomefile_" + id).val(""); $("#idupload_" + id).val(0); console.log("#span_dradDropStr_" + id); $("#span_dradDropStr_" + id).html(check.data("trascina-text")); var ondeleteCallback = check.data("ondelete_callback"); if (ondeleteCallback) eval(ondeleteCallback); } if (check.is(':checked')) check.prop("checked", false);else check.prop("checked", true); }); }, reloadComponents: function reloadComponents(selector, from_datatables) { if (!selector) selector = ""; if (!from_datatables) $(selector + ".IWDataTables").each(function () { try { IWDatatable.buildDatatables(this); } catch (e) { console.log("Errore caricamento Datatable: " + $(this).attr("id")); console.log(e); } }); $(selector + ".iwSelect2").each(function () { IWDatatable.buildSelect2(this); }); this.iwCurrencyElement(); var elements = [selector + ".iw-autocomplete-input", selector + ".datepicker", selector + ".iw-qtip-jquery-ui", selector + ".iw-minicolors", selector + ".iw-dropdown-multiselect", selector + ".iw-simple-xml", selector + ".iw-timeentry"]; elements.map(function (elem) { $(elem).each(function () { eval($(this).data("iwfunction")); if (elem === selector + ".iw-autocomplete-input") $(this).autocompleteOnFocusEvent(); }); }); $(selector + ".iw-jquery-upload").each(function () { IWDatatable.buildJqueryUploadFile(this); }); $(selector + ".iw-ckeditor").each(function () { IWDatatable.buildCkEditor(this); }); }, electronApi: function electronApi(opts) { var $electron_token = $("#electron_token"); var defaultOptions = { baseUrl: getFloat2($electron_token.data("electron_api")) === 1 ? "https://localhost.iwapps.it:3433" : "https://localhost:3433", route: "/", type: "get", dataType: "json", headers: { 'Authorization': 'Basic ' + $electron_token.val(), 'Content-Type': 'application/json' }, data: null, successCallback: null, errorCallback: null, show_waiting: false, useConsoleLog: false }; var options = _objectSpread(_objectSpread({}, defaultOptions), opts); options.url = options.baseUrl + options.route; if (options.show_waiting) waiting(true); $.ajax(_objectSpread(_objectSpread({}, options), {}, { success: function success(json) { if (options.show_waiting) waiting(false); console.log(json); if (options.successCallback) options.successCallback(json); }, error: function error(xhr) { if (options.show_waiting) waiting(false); var errorMsg = ''; try { var _error = JSON.parse(xhr.responseText); errorMsg = _error.message; } catch (err) { errorMsg = xhr.responseText; } var error = 'Error ' + xhr.status + '
    ' + errorMsg; if (options.useConsoleLog) console.log(error);else alert(error); if (options.errorCallback) options.errorCallback(error, xhr); } })); }, avviaPesataOdeca: function avviaPesataOdeca(opts) { if (opts.show_waiting) waiting(true); if (!opts.route) opts.route = "readPeso"; var $electron_token = $("#electron_token"); var url = getFloat2($electron_token.data("electron_api")) === 1 ? "https://localhost.iwapps.it:3433/" : "https://localhost:3433/"; $.ajax({ url: url + opts.route, type: "get", crossDomain: true, dataType: "json", headers: { 'Authorization': 'Basic ' + $electron_token.val(), 'Content-Type': 'application/json' }, success: function success(json) { if (opts.show_waiting) waiting(false); console.log(json); if (json.data) { try { // CMD STATUS NET TARE AWS PCS COD1 COD2 PROGR var _exec$groups = /*#__PURE__*/_wrapRegExp(/([A-Z])(\w)(.{7})(.{7})(.{7})(.{6})(.{6})(.{6})(.{7})/gm, { CMD: 1, STATUS: 2, NET: 3, TARE: 4, AWS: 5, PCS: 6, COD1: 7, COD2: 8, PROGR: 9 }).exec(json.data).groups, NET = _exec$groups.NET, TARE = _exec$groups.TARE; //Mantengo 3 decimali all'arrotondamento in caso di bilance con um in grammi var netto = Math.round(getFloat(NET) * 1000) / 1000; var tara = Math.round(getFloat(TARE) * 1000) / 1000; opts.success(netto, tara, json); } catch (error) { if (typeof opts.error === "function") opts.error(error); } } }, error: function error(xhr) { if (opts.show_waiting) waiting(false); var errorMsg = ''; try { var _error2 = JSON.parse(xhr.responseText); errorMsg = _error2.message; } catch (err) { errorMsg = xhr.responseText; } var error = 'Error ' + xhr.status + '
    ' + errorMsg; if (opts.useConsoleLog) console.log(error);else alert(error); if (typeof opts.error === "function") opts.error(error); } }); }, avviaPesataVega: function avviaPesataVega(opts) { electronApi({ route: "/" + opts.route, show_waiting: opts.show_waiting, successCallback: function successCallback(json) { if (json.data) { try { // STX STATUS NETTO(6) LORDO (6) ETX C C EOT var _exec$groups2 = /*#__PURE__*/_wrapRegExp(/(\w)(.{6})(.{6})/gm, { STATUS: 1, NETTO: 2, LORDO: 3 }).exec(json.data).groups, NETTO = _exec$groups2.NETTO, LORDO = _exec$groups2.LORDO, STATUS = _exec$groups2.STATUS; //Mantengo 3 decimali all'arrotondamento in caso di bilance con um in grammi var netto = Math.round(getFloat(NETTO) * 1000) / 1000; var lordo = Math.round(getFloat(LORDO) * 1000) / 1000; opts.success(netto, lordo, json); } catch (error) { if (typeof opts.error === "function") opts.error(error); } } } }); }, directPrint: function directPrint(url, options) { /* printer ( string, optional): Sends the file to the specified printer. pages (string, optional): Specifies which pages to print in the PDF document. subset (string, optional): Prints odd pages only when the value is odd, and even pages only when it is even. orientation (string, optional): Provides 90-degree rotation of contents (NOT the rotation of paper which must be pre-set by the choice of printer defaults). scale (string, optional): Supported names are noscale, shrink, and fit. monochrome (boolean, optional): Prints the document in black and white. The default value is false. side (string, optional): Supported names are duplex, duplexshort, duplexlong, and simplex. bin (string, optional): Select tray to print to. Number or name. paperSize (string, optional): Specifies the paper size. A2, A3, A4, A5, A6, letter, legal, tabloid, statement, or a name selectable from your printer settings. silent (boolean, optional): Silences error messages. printDialog (boolean, optional): Displays the print dialog for all the files indicated on this command line. copies(number, optional): Specifies how many copies will be printed. */ var opts = { printer: null, pages: null, subset: null, scale: null, monochrome: false, side: 'simplex', bin: null, paperSize: 'A4', printDialog: false, copies: 1 }; options = _objectSpread(_objectSpread({}, opts), options); var data = { pdfUrl: url, options: options }; var main_options = {}; Object.keys(options).filter(function (o) { if (!Object.keys(opts).includes(o)) main_options[o] = options[o]; }); electronApi(_objectSpread({ route: '/printPdf', type: 'post', data: JSON.stringify(data) }, main_options)); }, replaceFormField: function replaceFormField(params, elem) { if (!elem) elem = 'form1'; if ($("#" + elem).get(0).tagName === "DIV") elem += " :input, :checkbox"; var form_arr = $("#" + elem).serializeArray(); $.each(params, function (k, v) { var item = form_arr.find(function (item) { return item.name === k; }); if (item) item.value = v;else form_arr.push({ name: k, value: v }); }); return form_arr; }, addRigheTableScroll: function addRigheTableScroll(params) { var idtable = params.idtable; var entity = params.entity; var callback = params.callback; var field = params.field; var is_autocomplete = params.is_autocomplete; var json = []; var id_check_field; var check_field; for (var i = 0; i < $("#" + idtable + "_table_nrows").valFloat(); i++) { check_field = idtable + "_" + field + "_" + i + (is_autocomplete ? "_hidden" : ""); id_check_field = $("#" + check_field).valFloat(); if (!id_check_field) continue; var elem = callback(i); json.push(elem); } $("#" + idtable + "_" + entity + "_json").val(JSON.stringify(json)); $("#" + idtable + "_addRow").val(1); reloadTable(idtable, false, function () { $("#" + idtable + "_" + entity + "_json").val(""); $("#" + idtable + "_addRow").val(0); }); }, addRigaCultivar: function addRigaCultivar(idtable) { addRigheTableScroll({ idtable: idtable, entity: "cultivar", field: "idcultivar", is_autocomplete: false, callback: function callback(i) { return { idcultivar: $("#" + idtable + "_idcultivar_" + i).valFloat(), perc: $("#" + idtable + "_perc_" + i).valFloat() }; } }); }, addRigheContabilizzazione: function addRigheContabilizzazione(idtable) { addRigheTableScroll({ idtable: idtable, entity: "contab", field: "pdc", is_autocomplete: true, callback: function callback(i) { var json_row = { is_socio: $("#" + idtable + "_is_socio_" + i).valFloat(), idnazione: $("#" + idtable + "_idnazione_" + i).valFloat(), macrozona: $("#" + idtable + "_macrozona_" + i).valFloat(), id_deposito: $("#" + idtable + "_id_deposito_" + i).valFloat(), idgrupponominativi: $("#" + idtable + "_idgrupponominativi_" + i).valFloat(), idcanaledivendita: $("#" + idtable + "idcanaledivendita" + i).valFloat(), id_categoriaarticoli: $("#" + idtable + "_id_categoriaarticoli_" + i).valFloat(), id_pdc: $("#" + idtable + "_pdc_" + i + "_hidden").valFloat(), id_cdc: $("#" + idtable + "_cdc_" + i + "_hidden").valFloat() }; return json_row; } }); }, addRigheScadenzePagamento: function addRigheScadenzePagamento(idtable) { addRigheTableScroll({ idtable: idtable, entity: "modpagamento_scadenze", field: "ngiorni", callback: function callback(i) { return { ngiorni: $("#" + idtable + "_ngiorni_" + i).valFloat(), add_fine_mese: $("#" + idtable + "_add_fine_mese_" + i).valFloat(), perc: $("#" + idtable + "_perc_" + i).valFloat(), importo_iva: $("#" + idtable + "_importo_iva_" + i).is(":checked") ? 1 : 0, tipo_pag: $("#" + idtable + "_tipo_pag_" + i).valFloat() }; } }); }, openDialogCultivar: function openDialogCultivar(i) { var cultivar_json = $("#row_hidden_cultivar_" + i).val(); if (cultivar_json) cultivar_json = JSON.parse(cultivar_json); getHtmlFromAjax({ url: "ajax.php?1", divname: "dialog_modifica_cultivar", data: { codicedocumento: $("#codicedocumento").val(), tipoview: "openDialogCultivar", cultivar: cultivar_json }, onSuccess: function onSuccess() { dialogShow("dialog_modifica_cultivar", function (ret) { if (!ret) return; var $href = $("#href_tablescroll_cultivar_" + i); var cultivar = []; var cultivars = []; var idcultivar, perc; for (var nrow = 0; nrow < $("#table_doc_cultivar_table_nrows").valFloat(); nrow++) { idcultivar = $("#table_doc_cultivar_idcultivar_" + nrow).valFloat(); if (!idcultivar) continue; perc = $("#table_doc_cultivar_perc_" + nrow).valFloat(); cultivar.push({ idcultivar: idcultivar, perc: perc }); cultivars.push($("#table_doc_cultivar_idcultivar_" + nrow + " option:selected").text()); } if (!cultivar.length) cultivar = "";else cultivar = JSON.stringify(cultivar); $("#row_hidden_cultivar_" + i).val(cultivar); $href.html(!cultivars.length ? $href.data("insert_cultivar_text") : $href.data("cultivar_text") + ": " + cultivars.join(", ")); }); } }); }, compilaCampiCultivar: function compilaCampiCultivar(info, i) { var cultivar = info.cultivar; var cultivar_text = info.cultivar_text; var $href = $('#href_tablescroll_cultivar_' + i); if (!cultivar_text) cultivar_text = $href.data('insert_cultivar_text'); $('#row_hidden_cultivar_' + i).val(JSON.stringify(cultivar)); $href.html(cultivar_text); }, inlineTextFileDownload: function inlineTextFileDownload(content, filename, mimetype) { if (!mimetype) mimetype = 'plain'; var a = document.createElement('a'); var blob = new Blob([content], { type: 'text/' + mimetype }); var url = URL.createObjectURL(blob); a.setAttribute('href', url); a.setAttribute('download', filename); a.click(); }, openDialogSelezioneIndirizzo: function openDialogSelezioneIndirizzo(elem, anagrafica_id_field) { if (!anagrafica_id_field) anagrafica_id_field = "anagrafica_hidden"; var anagrafica_id = $("#" + anagrafica_id_field).valFloat(); if (!anagrafica_id) return; var $elem = $("#" + elem); var dialog = "dialog_selezione_indirizzo_" + $elem.attr("name"); getHtmlFromAjax({ url: "ajax.php?1", divname: dialog, data: { object: "Anagrafica2", tipoview: "openDialogSelezioneIndirizzo", id: anagrafica_id, indirizzo_name: $elem.attr("name") }, onSuccess: function onSuccess() { dialogShow(dialog, function () {}); } }); }, selectIndirizzoInElement: function selectIndirizzoInElement(elem) { var $elem = $(elem); var field = $elem.data("field"); var nsede = $elem.data("nsede"); var $field = $("#" + field); $field.val(nsede); $field.change(); $("#dialog_selezione_indirizzo_" + field).dialog("close"); } }; $.fn.exists = function () { return this.length > 0; }; //sostituisce il .val() nel jquery, e legge direttamente il valore numerico $.fn.valFloat = function () { return getFloat($(this).val()); }; $.fn.valFloat2 = function () { return getFloat2($(this).val()); }; //Footer Datatables $.fn.IWFooterDatatable = function () { try { this.datatable = eval("datatable_" + this.attr("id")); } catch (e) { this.datatable = $("#" + this.attr("id")).DataTable(); } this.setFooterText = function (text, col, row) { if (!row) row = 0; if (row === 0) $(this.datatable.column(col).footer()).html(text);else $("tr:eq(" + row + ") th:eq(" + col + ")", this.datatable.table().footer()).html(text); }; return this; }; $.fn.toggleRow = function () { if ($(this).css('display') == 'none') { $(this).showRow(); } else { $(this).hideRow(); } }; $.fn.hideRow = function () { $(this).hide(); }; $.fn.showRow = function () { if ($(this).css('display') == 'none') { $(this).css('display', 'table-row'); } }; /***/ }) }]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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USxDQUFDUyxDQUFDLENBQUNtQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUN0QzVDLFFBQVEsQ0FBQ1MsQ0FBQyxDQUFDbUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FDMUI1QyxRQUFRLENBQUNTLENBQUMsQ0FBQ21DLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQzFCNUMsUUFBUSxDQUFDUyxDQUFDLENBQUNtQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUMxQjVDLFFBQVEsQ0FBQ1MsQ0FBQyxDQUFDbUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FDMUI1QyxRQUFRLENBQUNTLENBQUMsQ0FBQ21DLE1BQU0sQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDO0lBRS9CLElBQUkyRCxjQUFjLEdBQUdELFFBQVEsR0FBRyxDQUFDO0lBQ2pDLElBQUlFLE9BQU8sR0FBSXhHLFFBQVEsQ0FBQ1MsQ0FBQyxDQUFDbUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FDckM1QyxRQUFRLENBQUNTLENBQUMsQ0FBQ21DLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQzFCNUMsUUFBUSxDQUFDUyxDQUFDLENBQUNtQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxHQUMxQjVDLFFBQVEsQ0FBQ1MsQ0FBQyxDQUFDbUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsR0FDMUI1QyxRQUFRLENBQUNTLENBQUMsQ0FBQ21DLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEdBQzFCNUMsUUFBUSxDQUFDUyxD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O0VBQ3RCbk8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDdUssSUFBSSxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVEdkssQ0FBQyxDQUFDbWpCLEVBQUUsQ0FBQzJKLE9BQU8sR0FBRyxZQUFXO0VBQ3RCLElBQUc5c0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDNmEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFFLE1BQU0sRUFBQztJQUM5QjdhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzZhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO0VBQ3ZDO0FBQ0osQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2lyaWRlLy4vaW5jbHVkZS9qcy91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCAkID0gcmVxdWlyZShcImpxdWVyeVwiKTtcbmNvbnN0IERhdGFUYWJsZSA9IHJlcXVpcmUoXCJkYXRhdGFibGVzLm5ldC1kdFwiKTtcblxuLyoqXG4gKiBDcmVhdGVkIGJ5IFBocFN0b3JtXG4gKiBVc2VyOiBkYW5pZWxlXG4gKiBEYXRlOiAxNS8wNS8yMFxuICogVGltZTogMTMuMDVcbiAqL1xubGV0IGludGVydmFsX2F2YW56YW1lbnRvO1xuXG5cblxuXG4kKHdpbmRvdykub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAgICAvLyQoJyNjb250YWluZXInKS5mYWRlSW4oJ3Nsb3cnKTtcbiAgICAkKCcjY29udGFpbmVyJykuc2hvdygpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCl7XG4gICAgICAgIGFkanVzdERhdGFUYWJsZXMoKTtcbiAgICB9LCAzMDApO1xufSk7XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIGluX2FycmF5OiBmdW5jdGlvbiAobXlBcnJheSwgZWxlbWVudClcbiAgICB7XG4gICAgICAgIHZhciByZXM9ZmFsc2U7XG4gICAgICAgIGZvcih2YXIgZT0wO2U8bXlBcnJheS5sZW5ndGg7ZSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihteUFycmF5W2VdID09IGVsZW1lbnQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzPXRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgaXNfYXJyYXk6IGZ1bmN0aW9uIChtaXhlZF92YXIpIHtcbiAgICAgICAgcmV0dXJuIG1peGVkX3Zhci5pc0FycmF5KCkgfHwgdHlwZW9mIG1peGVkX3ZhciA9PT0gXCJvYmplY3RcIjtcbiAgICB9LFxuXG4gICAgcm91bmRUbzogZnVuY3Rpb24gKGRlY2ltYWxwb3NpdGlvbnMpXG4gICAge1xuICAgICAgICB2YXIgaSA9IHRoaXMgKiBNYXRoLnBvdygxMCxkZWNpbWFscG9zaXRpb25zKTtcbiAgICAgICAgaSA9IE1hdGgucm91bmQoaSk7XG4gICAgICAgIHJldHVybiBpIC8gTWF0aC5wb3coMTAsZGVjaW1hbHBvc2l0aW9ucyk7XG4gICAgfSxcblxuICAgIGFycmF5X3VuaXF1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpe1xuICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuICAgIH0sXG5cbiAgICBjb3VudERlY2ltYWxzOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBsZXQgdGV4dCA9IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgLy8gdmVyaWZ5IGlmIG51bWJlciAwLjAwMDAwNSBpcyByZXByZXNlbnRlZCBhcyBcIjVlLTZcIlxuICAgICAgICBpZiAodGV4dC5pbmRleE9mKCdlLScpID4gLTEpIHtcbiAgICAgICAgICAgIGxldCBbYmFzZSwgdHJhaWxdID0gdGV4dC5zcGxpdCgnZS0nKTtcbiAgICAgICAgICAgIGxldCBkZWcgPSBwYXJzZUludCh0cmFpbCwgMTApO1xuICAgICAgICAgICAgcmV0dXJuIGRlZztcbiAgICAgICAgfVxuICAgICAgICAvLyBjb3VudCBkZWNpbWFscyBmb3IgbnVtYmVyIGluIHJlcHJlc2VudGF0aW9uIGxpa2UgXCIwLjEyMzQ1NlwiXG4gICAgICAgIGlmIChNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXS5sZW5ndGggfHwgMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9LFxuXG4gICAgcm91bmQ6IGZ1bmN0aW9uIChudW0sIGRlYyl7XG4gICAgICAgIGlmKCFkZWMpXG4gICAgICAgICAgICBkZWMgPSAwO1xuICAgICAgICB2YXIgbnVtX3NpZ24gPSBudW0gPj0gMCA/IDEgOiAtMTtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKE1hdGgucm91bmQoKG51bSAqIE1hdGgucG93KDEwLCBkZWMpKSArIChudW1fc2lnbiAqIDAuMDAwMSkpIC8gTWF0aC5wb3coMTAsIGRlYykpLnRvRml4ZWQoZGVjKSk7XG4gICAgfSxcblxuICAgIGdldEZsb2F0OiBmdW5jdGlvbihzMCwgZGVjKVxuICAgIHtcbiAgICAgICAgdmFyIHM9bmV3IFN0cmluZyhzMCk7XG4gICAgICAgIHRyaW0ocyk7XG4gICAgICAgIHM9cy5yZXBsYWNlKFwiLFwiLFwiLlwiKTtcbiAgICAgICAgdmFyIGY9cGFyc2VGbG9hdChzKTtcbiAgICAgICAgaWYodHlwZW9mIGYgPT09IFwidW5kZWZpbmVkXCIgfHwgaXNOYU4oZikpXG4gICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICBpZihkZWMpIHJldHVybiByb3VuZChmLCBkZWMpO1xuXG4gICAgICAgIHJldHVybiBmO1xuICAgIH0sXG5cbiAgICBnZXRGbG9hdDI6IGZ1bmN0aW9uKHMpXG4gICAge1xuICAgICAgICByZXR1cm4gcm91bmQoZ2V0RmxvYXQocyksMik7XG4gICAgfSxcblxuICAgIG9wZW5XaW5kb3c6IGZ1bmN0aW9uKGZpbGUsdyxoLG5vbWVmaW5lc3RyYSlcbiAgICB7XG4gICAgICAgIGlmKG5vbWVmaW5lc3RyYT09bnVsbCkgbm9tZWZpbmVzdHJhPVwiX2JsYW5rXCI7XG4gICAgICAgIGxldCBsPShzY3JlZW4ud2lkdGgtdykvMjtcbiAgICAgICAgbGV0IHQ9KHNjcmVlbi5oZWlnaHQtaCkvMi0xMDA7XG4gICAgICAgIHdpbmRvdy5vcGVuKGZpbGUsbm9tZWZpbmVzdHJhLFwiZnVsbHNjcmVlbj15ZXMsdG9vbGJhcj1ubyxtZW51YmFyPW5vLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJsZT15ZXMsc3RhdHVzPW5vLGxvY2F0aW9uPW5vLGRpcmVjdG9yaWVzPW5vLGNvcHloaXN0b3J5PW5vLGhlaWdodD1cIitoK1wiLHdpZHRoPVwiK3crXCIsbGVmdD1cIitsK1wiLHRvcD1cIit0KTtcbiAgICB9LFxuXG4gICAgY2hlY2tLZXk6IGZ1bmN0aW9uKGUsY2hhcnMpXG4gICAge1xuICAgICAgICB2YXIga2V5bnVtPWUua2V5Q29kZTtcbiAgICAgICAgaWYoZS53aGljaClcbiAgICAgICAgICAgIGtleW51bT1lLndoaWNoO1xuXG4gICAgICAgIHZhciBpc19rZXlmdW5jdGlvbj1mYWxzZTtcbiAgICAgICAgaWYoa2V5bnVtIGluIFs4LCAzNywgMzksIDksIDM2LCAzNSwgNDZdKVxuICAgICAgICAgICAgaXNfa2V5ZnVuY3Rpb249dHJ1ZTtcblxuICAgICAgICB2YXIga2V5Y2hhcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGtleW51bSk7XG5cbiAgICAgICAgaWYoIGtleWNoYXIgPT09ICcuJyApIGlzX2tleWZ1bmN0aW9uPWZhbHNlO1xuICAgICAgICB2YXIgY2hlY2s9ZmFsc2U7XG4gICAgICAgIGZvcih2YXIgaT0wO2k8Y2hhcnMubGVuZ3RoO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoY2hhcnNbaV0gPT09IGtleWNoYXIpIHtcbiAgICAgICAgICAgICAgICBjaGVjaz10cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKCBpc19rZXlmdW5jdGlvbilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSxcblxuICAgIG51bWJlcl9mb3JtYXQ6IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgYSA9IE1hdGgucm91bmQoYSAqIE1hdGgucG93KDEwLCBiKSkgLyBNYXRoLnBvdygxMCwgYik7XG4gICAgICAgIGxldCBlID0gYSArICcnO1xuICAgICAgICBsZXQgZiA9IGUuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYoIWZbMF0pIGZbMF0gPSAnMCc7XG4gICAgICAgIGlmKCFmWzFdKSBmWzFdID0gJyc7XG4gICAgICAgIGlmKGZbMV0ubGVuZ3RoIDwgYil7XG4gICAgICAgICAgICBsZXQgZyA9IGZbMV07XG4gICAgICAgICAgICBmb3IobGV0IGkgPSBmWzFdLmxlbmd0aCArIDE7IGkgPD0gYjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZyArPSAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmWzFdID0gZztcbiAgICAgICAgfVxuICAgICAgICBpZihkICE9ICcnICYmIGZbMF0ubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgbGV0IGggPSBmWzBdO1xuICAgICAgICAgICAgZlswXSA9ICcnO1xuICAgICAgICAgICAgZm9yKGxldCBqID0gMzsgaiA8IGgubGVuZ3RoOyBqICs9IDMpIHtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IGguc2xpY2UoaC5sZW5ndGggLSBqLCBoLmxlbmd0aCAtIGogKyAzKTtcbiAgICAgICAgICAgICAgICBmWzBdID0gZCArIGkgKyBmWzBdICsgJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaiA9IGguc3Vic3RyKDAsIChoLmxlbmd0aCAlIDMgPT0gMCkgPyAzIDogKGgubGVuZ3RoICUgMykpO1xuICAgICAgICAgICAgZlswXSA9IGogKyBmWzBdO1xuICAgICAgICB9XG4gICAgICAgIGMgPSAoYiA8PSAwKSA/ICcnOiBjO1xuICAgICAgICByZXR1cm4gZlswXSArIGMgKyBmWzFdO1xuICAgIH0sXG5cbiAgICB0b0V1cm86IGZ1bmN0aW9uKG4sZGVjaW1hbHMsc2VfemVyb19zdHJpbmdhX3Z1b3RhKVxuICAgIHtcbiAgICAgICAgaWYoc2VfemVyb19zdHJpbmdhX3Z1b3RhPT1udWxsKSBzZV96ZXJvX3N0cmluZ2FfdnVvdGEgPSBmYWxzZTtcbiAgICAgICAgbiA9IGdldEZsb2F0KG4sIGRlY2ltYWxzKTtcbiAgICAgICAgdmFyIENVUlJFTkNZX19ERUNJTUFMX1NFUEFSQVRPUiA9ICQoXCIjQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX1RIT1VTQU5EU19TRVBBUkFUT1IgPSAkKFwiI0NVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICBpZighZGVjaW1hbHMpIGRlY2ltYWxzPTI7XG4gICAgICAgIHZhciBzaWduID0gKG48MCA/IFwiLSBcIiA6IFwiXCIpO1xuICAgICAgICB2YXIgcyA9IG51bWJlcl9mb3JtYXQoTWF0aC5hYnMobiksZGVjaW1hbHMsQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SLENVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SKTtcblxuICAgICAgICBpZihzZV96ZXJvX3N0cmluZ2FfdnVvdGEgJiYgcGFyc2VGbG9hdChzKSA9PT0gMCkgcyA9IFwiXCI7XG5cbiAgICAgICAgcmV0dXJuIHNpZ24gKyBzO1xuICAgIH0sXG5cbiAgICB0cmltOiBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICByZXR1cm4gbHRyaW0ocnRyaW0oc3RyLCBjaGFycyksIGNoYXJzKTtcbiAgICB9LFxuXG4gICAgbHRyaW06IGZ1bmN0aW9uKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgY2hhcnMgPSBjaGFycyB8fCBcIlxcXFxzXCI7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFwiXltcIiArIGNoYXJzICsgXCJdK1wiLCBcImdcIiksIFwiXCIpO1xuICAgIH0sXG5cbiAgICBydHJpbTogZnVuY3Rpb24oc3RyLCBjaGFycykge1xuICAgICAgICBjaGFycyA9IGNoYXJzIHx8IFwiXFxcXHNcIjtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCJbXCIgKyBjaGFycyArIFwiXSskXCIsIFwiZ1wiKSwgXCJcIik7XG4gICAgfSxcblxuICAgIHdhaXRpbmc6IGZ1bmN0aW9uKHZpc2liaWxlKVxuICAgIHtcbiAgICAgICAgd2FpdGluZzIodmlzaWJpbGUpO1xuICAgIH0sXG5cbiAgICB3YWl0aW5nMjogZnVuY3Rpb24odmlzaWJpbGUsdmlld19wcm9ncmVzcylcbiAgICB7XG4gICAgICAgIGlmKHZpc2liaWxlPT1udWxsKSB2aXNpYmlsZT10cnVlO1xuICAgICAgICBpZih2aWV3X3Byb2dyZXNzPT1udWxsKSB2aWV3X3Byb2dyZXNzPWZhbHNlO1xuICAgICAgICBpZih2aXNpYmlsZSkge1xuICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpdl93YWl0aW5nMlwiKTtcbiAgICAgICAgICAgIGlmKHZpZXdfcHJvZ3Jlc3Mpe1xuICAgICAgICAgICAgICAgICQoXCIjc3Bhbl9wZXJjX2F2YW56YW1lbnRvXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fc3ltYm9sX3BlcmNcIikuc2hvdygpO1xuICAgICAgICAgICAgICAgIGludGVydmFsX2F2YW56YW1lbnRvPXNldEludGVydmFsKFwicnVuQWpheEF2YW56YW1lbnRvKClcIiwgMjAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICQoXCIjZGl2X3dhaXRpbmcyXCIpLmRpYWxvZyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbF9hdmFuemFtZW50byk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcnVuQWpheEF2YW56YW1lbnRvOiBmdW5jdGlvbigpe1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT049MSZvYmplY3Q9SVdSb290JnRpcG92aWV3PWdldFByb2dyZXNzQmFyXCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihqc29uKXtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fcGVyY19hdmFuemFtZW50b1wiKS5odG1sKCBqc29uLnBlcmNfYXZhbnphbWVudG8gKyBcIiVcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbF9hdmFuemFtZW50byk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzdHJfcGFkOiBmdW5jdGlvbiAoaW5wdXQsIHBhZF9sZW5ndGgsIHBhZF9zdHJpbmcsIHBhZF90eXBlKSB7XG4gICAgICAgIHZhciBoYWxmID0gJycsIHBhZF90b19nbztcbiAgICAgICAgdmFyIHN0cl9wYWRfcmVwZWF0ZXIgPSBmdW5jdGlvbiAocywgbGVuKSB7XG4gICAgICAgICAgICB2YXIgY29sbGVjdCA9ICcnLCBpO1xuXG4gICAgICAgICAgICB3aGlsZSAoY29sbGVjdC5sZW5ndGggPCBsZW4pIHtjb2xsZWN0ICs9IHM7fVxuICAgICAgICAgICAgY29sbGVjdCA9IGNvbGxlY3Quc3Vic3RyKDAsbGVuKTtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlucHV0ICs9ICcnOyAgICBwYWRfc3RyaW5nID0gKHBhZF9zdHJpbmcgIT0gbnVsbCA/IHBhZF9zdHJpbmcgOiBcIiBcIik7XG5cbiAgICAgICAgaWYgKHBhZF90eXBlICE9ICdTVFJfUEFEX0xFRlQnICYmIHBhZF90eXBlICE9ICdTVFJfUEFEX1JJR0hUJyAmJiBwYWRfdHlwZSAhPSAnU1RSX1BBRF9CT1RIJykgeyBwYWRfdHlwZSA9ICdTVFJfUEFEX1JJR0hUJzsgfVxuICAgICAgICBpZiAoKHBhZF90b19nbyA9IHBhZF9sZW5ndGggLSBpbnB1dC5sZW5ndGgpID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhZF90eXBlID09ICdTVFJfUEFEX0xFRlQnKSB7IGlucHV0ID0gc3RyX3BhZF9yZXBlYXRlcihwYWRfc3RyaW5nLCBwYWRfdG9fZ28pICsgaW5wdXQ7IH0gICAgICAgIGVsc2UgaWYgKHBhZF90eXBlID09ICdTVFJfUEFEX1JJR0hUJykgeyBpbnB1dCA9IGlucHV0ICsgc3RyX3BhZF9yZXBlYXRlcihwYWRfc3RyaW5nLCBwYWRfdG9fZ28pOyB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYWRfdHlwZSA9PSAnU1RSX1BBRF9CT1RIJykge1xuICAgICAgICAgICAgICAgIGhhbGYgPSBzdHJfcGFkX3JlcGVhdGVyKHBhZF9zdHJpbmcsIE1hdGguY2VpbChwYWRfdG9fZ28vMikpO1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaGFsZiArIGlucHV0ICsgaGFsZjtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cigwLCBwYWRfbGVuZ3RoKTsgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfSxcblxuICAgIC8vdmlzdWFsaXp6YSB1biBtZXNzYWdnaW8gbmVsbCBmb290ZXJcbiAgICBmb290ZXJNc2c6IGZ1bmN0aW9uKHRpcG8sdGl0b2xvLHRlc3RvKVxuICAgIHtcbiAgICAgICAgaWYoJChcIiNub19mb290ZXJtc2dcIikudmFsKCkgID09PSAxIHx8ICQoXCIjSVdFbnZcIikudmFsKCkgPT09IFwiYm9vdHN0cmFwXCIpe1xuICAgICAgICAgICAgaWYodGlwbz09MCkgJC5ncm93bC5ub3RpY2Uoe3RpdGxlOiAkKFwiI3RyYW5zYWN0aW9uX3N1Y2Nlc3NcIikudmFsKCksbWVzc2FnZTogJyd9KTtcbiAgICAgICAgICAgIGlmKHRpcG89PTEpICQuZ3Jvd2wuZXJyb3Ioe2R1cmF0aW9uOiAzMDAwMCx0aXRsZTogJChcIiN0cmFuc2FjdGlvbl9lcnJvclwiKS52YWwoKSxtZXNzYWdlOiB0ZXN0b30pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3RpcG89MCAoeWVzPXZlcmRlKSAxPShubz1yb3NzbykgMj0oYWxlcnQsIGdpYWxsbylcbiAgICAgICAgdmFyICRkaXY9JChcIiNkaXZNc2dcIik7XG4gICAgICAgICRkaXYuZmFkZU91dCgpO1xuICAgICAgICAkZGl2Lmh0bWwodGl0b2xvKTtcbiAgICAgICAgJGRpdi5yZW1vdmVDbGFzcyhcIm1zZ09LM1wiKS5yZW1vdmVDbGFzcyhcIm1zZ0VSUjNcIik7XG4gICAgICAgIGlmKHRpcG89PTApXG4gICAgICAgICAgICAkZGl2LmFkZENsYXNzKFwibXNnT0szXCIpO1xuICAgICAgICBpZih0aXBvPT0xKVxuICAgICAgICAgICAgJGRpdi5hZGRDbGFzcyhcIm1zZ0VSUjNcIik7XG5cbiAgICAgICAgLy90ZXN0bz10ZXN0by5yZXBsYWNlKC88YnI+L2dpLFwiXFxuXCIpO1xuICAgICAgICAkZGl2LnByb3AoXCJtZXNzYWdnaW9cIix0ZXN0byk7XG4gICAgICAgICRkaXYuZmFkZUluKCk7XG5cbiAgICAgICAgc2V0VGltZW91dChcIiQoJyNkaXZNc2cnKS5mYWRlT3V0KCk7XCIsMyo2MDAwMCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGdldF9lYW4xM19jaGVja2RpZ2l0OiBmdW5jdGlvbihzKVxuICAgIHtcbiAgICAgICAgaWYoIHMubGVuZ3RoPjEyICkgcz1zLnN1YnN0cigwLDEyKTtcbiAgICAgICAgcz1wYXJzZUludChzLDEwKTtcbiAgICAgICAgcz1zdHJfcGFkKHMsIDEyLCBcIjBcIiwgXCJTVFJfUEFEX0xFRlRcIik7XG4gICAgICAgIHZhciBldmVuX3N1bSA9IFx0cGFyc2VJbnQocy5zdWJzdHIoMSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMywxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoNSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoNywxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoOSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMTEsMSksMTApO1xuXG4gICAgICAgIHZhciBldmVuX3N1bV90aHJlZSA9IGV2ZW5fc3VtICogMztcbiAgICAgICAgdmFyIG9kZF9zdW0gPSBcdHBhcnNlSW50KHMuc3Vic3RyKDAsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDIsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDQsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDYsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDgsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDEwLDEpLDEwKTtcblxuICAgICAgICB2YXIgdG90YWxfc3VtID0gZXZlbl9zdW1fdGhyZWUgKyBvZGRfc3VtO1xuICAgICAgICB2YXIgbmV4dF90ZW4gPSAoTWF0aC5jZWlsKHRvdGFsX3N1bS8xMCkpKjEwO1xuICAgICAgICB2YXIgY2hlY2tfZGlnaXQgPSBuZXh0X3RlbiAtIHRvdGFsX3N1bTtcblxuICAgICAgICByZXR1cm4gY2hlY2tfZGlnaXQ7XG4gICAgfSxcblxuICAgIGdldF9lYW44X2NoZWNrZGlnaXQ6IGZ1bmN0aW9uKHMpXG4gICAge1xuICAgICAgICBjb25zdCBzdW0gPSBzLnRvU3RyaW5nKCkuc3BsaXQoJycpLnJldmVyc2UoKS5yZWR1Y2UoKHN1bSwgY2hhciwgaWR4KSA9PiB7XG4gICAgICAgICAgICBsZXQgZGlnaXQgPSBOdW1iZXIucGFyc2VJbnQoY2hhcik7XG4gICAgICAgICAgICBsZXQgd2VpZ2h0ID0gKGlkeCArIDEpICUgMiA9PT0gMCA/IDEgOiAzO1xuICAgICAgICAgICAgbGV0IHBhcnRpYWwgPSBkaWdpdCAqIHdlaWdodDtcbiAgICAgICAgICAgIHJldHVybiBzdW0gKyBwYXJ0aWFsO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gc3VtICUgMTA7XG4gICAgICAgIGNvbnN0IGNoZWNrc3VtID0gcmVtYWluZGVyID8gKDEwIC0gcmVtYWluZGVyKSA6IDA7XG4gICAgICAgIHJldHVybiBjaGVja3N1bTtcbiAgICB9LFxuXG4gICAgLy92aXN1YWxpenphIG8gbmFzY29uZGUgbGUgYWx0cmUgdm9jaSBuZWxsYSBjb21ibyBkZWwgc2lhblxuICAgIHNpYW5fY29tYm9fc3dhcDogZnVuY3Rpb24oaWRjb21ibylcbiAgICB7XG5cbiAgICAgICAgZm9yKHZhciBpPTA7aTwkKFwiI2NhdXNhbGVzaWFuIG9wdGlvblwiKS5zaXplKCk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgaWQ9XCIjc2lhbl9vcHRpb25fXCIraTtcbiAgICAgICAgICAgIGlmKCAkKGlkKS5wcm9wKFwiZGlzYWJsZWRcIikhPVwiXCIgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICQoaWQpLnJlbW92ZUF0dHIoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICAgICAkKGlkKS5zaG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJChpZCkucHJvcChcImRpc2FibGVkXCIsXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICAgICAkKGlkKS5oaWRlKCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHJwb3M6IGZ1bmN0aW9uIChoYXlzdGFjaywgbmVlZGxlLCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIGkgPSAoaGF5c3RhY2sgKyAnJykuaW5kZXhPZihuZWVkbGUsIChvZmZzZXQgfHwgMCkpO1xuICAgICAgICByZXR1cm4gaSA9PT0gLTEgPyBmYWxzZSA6IGk7XG4gICAgfSxcblxuXG4gICAgLy9zZXppb25lIGl2YVxuICAgIGl2YUdldDogZnVuY3Rpb24oaWRpdmEsY2FtcG8pXG4gICAge1xuICAgICAgICBpZihpZGl2YT09bnVsbCkgaWRpdmE9MDtcbiAgICAgICAgaWYoIGlkaXZhPT0wICkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBhPSQoXCIjaGlkZGVuX2lkaXZhXCIraWRpdmEpLmF0dHIoY2FtcG8pO1xuICAgICAgICBpZiggY2FtcG89PVwiYWxpcXVvdGFcIiB8fCBjYW1wbz09XCJwZXJjaW5kZXRyYWliaWxpdGFcIiApIGE9Z2V0RmxvYXQyKGEpO1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9LFxuXG4gICAgZ2V0SHRtbEZyb21BamF4OiBmdW5jdGlvbih1cmwsZGl2bmFtZSxpc19hc3luYyxzaG93X3dhaXRpbmcsY2FsbGJhY2tGdW5jdGlvbikge1xuICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICBpZih0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiKXtcbiAgICAgICAgICAgIGRpdm5hbWUgPSB1cmxbXCJkaXZuYW1lXCJdO1xuICAgICAgICAgICAgaXNfYXN5bmMgPSB1cmxbXCJpc19hc3luY1wiXTtcbiAgICAgICAgICAgIHNob3dfd2FpdGluZyA9IHVybFtcInNob3dfd2FpdGluZ1wiXTtcbiAgICAgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24gPSB1cmxbXCJvblN1Y2Nlc3NcIl07XG4gICAgICAgICAgICBkYXRhID0gdXJsW1wiZGF0YVwiXTtcbiAgICAgICAgICAgIHVybCA9IHVybFtcInVybFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZih0eXBlb2YgaXNfYXN5bmMgPT09IFwidW5kZWZpbmVkXCIpIGlzX2FzeW5jPXRydWU7XG4gICAgICAgIGlmKHR5cGVvZiBzaG93X3dhaXRpbmcgPT09IFwidW5kZWZpbmVkXCIpIHNob3dfd2FpdGluZz1mYWxzZTtcblxuXG4gICAgICAgIGlmKHNob3dfd2FpdGluZykgd2FpdGluZygpO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwrXCImSlNPTlwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBhc3luYzogaXNfYXN5bmMsXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0X3RvX3ByaW50PWpzb24udGV4dDtcbiAgICAgICAgICAgICAgICAkKFwiI1wiK2Rpdm5hbWUpLmh0bWwodGV4dF90b19wcmludCk7XG4gICAgICAgICAgICAgICAgaWYoc2hvd193YWl0aW5nKSB3YWl0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAkKFwiLnVpLXRvb2x0aXBcIikuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5yZWxvYWRDb21wb25lbnRzKFwiI1wiICsgZGl2bmFtZSArIFwiIFwiKTtcblxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjYWxsYmFja0Z1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrRnVuY3Rpb24oanNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBidG5Mb2FkX29uY2xpY2s6IGZ1bmN0aW9uKGFjdGlvbilcbiAgICB7XG4gICAgICAgIHZhciAkZm9ybT0kKFwiI2Zvcm0xXCIpO1xuICAgICAgICBpZihhY3Rpb249PVwiXCIpICRmb3JtLnN1Ym1pdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICRmb3JtLm1ldGhvZD1cImdldFwiO1xuICAgICAgICAgICAgJGZvcm0udGFyZ2V0PVwiX2JsYW5rXCI7XG4gICAgICAgICAgICAkZm9ybS5hY3Rpb249YWN0aW9uO1xuICAgICAgICAgICAgJGZvcm0uc3VibWl0KCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYnRuTG9hZDJfb25jbGljazogZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyICRmb3JtPSQoXCIjZm9ybTFcIik7XG4gICAgICAgICRmb3JtLmF0dHIoXCJhY3Rpb25cIixcIlwiKTtcbiAgICAgICAgJGZvcm0ucmVtb3ZlQXR0cihcInRhcmdldFwiKTtcbiAgICAgICAgJGZvcm0uc3VibWl0KCk7XG4gICAgfSxcblxuICAgIFBhZ2VDaGFuZ2U6IGZ1bmN0aW9uKHBhZ2VuKVxuICAgIHtcbiAgICAgICAgJChcIiNucGFnZVwiKS52YWwocGFnZW4pO1xuICAgICAgICBidG5Mb2FkMl9vbmNsaWNrKCk7XG4gICAgfSxcblxuICAgIGRlbGV0ZU9iamVjdDogZnVuY3Rpb24oaWQsZm9yemFfZWxpbWluYXppb25lLHBhcmFtZXRyaV9hZ2dpdW50aXZpLHJlbG9hZCxpZGRvY3VtZW50byxjb2RpY2Vkb2N1bWVudG8scmVsb2FkX3RhYmxlc2Nyb2xsLGNhbGxiYWNrKXtcbiAgICAgICAgSVdDb25maXJtKCQoXCIjY29uZmVybWFfY2FuY2VsbGF6aW9uZTFcIikudmFsKCkrXCIgKDEvMilcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgSVdDb25maXJtMigkKFwiI2NvbmZlcm1hX2NhbmNlbGxhemlvbmUyXCIpLnZhbCgpK1wiICgyLzIpXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBidG5EZWwyX29uY2xpY2soaWQsZm9yemFfZWxpbWluYXppb25lLHBhcmFtZXRyaV9hZ2dpdW50aXZpLHJlbG9hZCxpZGRvY3VtZW50byxjb2RpY2Vkb2N1bWVudG8scmVsb2FkX3RhYmxlc2Nyb2xsLGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBidG5EZWwyX29uY2xpY2s6IGZ1bmN0aW9uKGlkLGZvcnphX2VsaW1pbmF6aW9uZSxwYXJhbWV0cmlfYWdnaXVudGl2aSxyZWxvYWQsaWRkb2N1bWVudG8sY29kaWNlZG9jdW1lbnRvLHJlbG9hZF90YWJsZXNjcm9sbCxjYWxsYmFjayl7XG4gICAgICAgIGlmKHR5cGVvZiBwYXJhbWV0cmlfYWdnaXVudGl2aSA9PT0gXCJ1bmRlZmluZWRcIikgcGFyYW1ldHJpX2FnZ2l1bnRpdmkgPSBcIlwiO1xuICAgICAgICBpZih0eXBlb2YgcmVsb2FkID09PSBcInVuZGVmaW5lZFwiKSByZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgaWYodHlwZW9mIGlkZG9jdW1lbnRvID09PSBcInVuZGVmaW5lZFwiKSBpZGRvY3VtZW50byA9IDA7XG4gICAgICAgIGlmKHR5cGVvZiBjb2RpY2Vkb2N1bWVudG8gPT09IFwidW5kZWZpbmVkXCIpIGNvZGljZWRvY3VtZW50byA9IFwiXCI7XG4gICAgICAgIGlmKHR5cGVvZiByZWxvYWRfdGFibGVzY3JvbGwgPT09IFwidW5kZWZpbmVkXCIpIHJlbG9hZF90YWJsZXNjcm9sbCA9IFwiXCI7XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gJChcIiNvYmplY3RcIikudmFsKCk7XG4gICAgICAgIGNvbnN0IHRpcG92aWV3ID0gJChcIiN0aXBvdmlld1wiKS52YWwoKTtcbiAgICAgICAgLy9Qcm9jZWRvIGFsbGEgY2FuY2VsbGF6aW9uZVxuICAgICAgICBsZXQgdXJsID0gXCJ2aWV3LnBocD9ERUxfRlJPTV9BSkFYXCI7XG4gICAgICAgIGxldCBkYXRhID0gXCJKU09OPTFcIjtcbiAgICAgICAgaWYoaWRkb2N1bWVudG8gPiAwICYmIGNvZGljZWRvY3VtZW50bykgZGF0YSArPSBcIiZpZGRvY3VtZW50bz1cIiArIGlkZG9jdW1lbnRvICsgXCImY29kaWNlZG9jdW1lbnRvPVwiICsgY29kaWNlZG9jdW1lbnRvICsgXCImdGlwb3ZpZXc9dmlld1wiO1xuICAgICAgICBlbHNlIGRhdGEgKz0gXCImaWQ9XCIgKyBpZCArIFwiJm9iamVjdD1cIiArIG9iamVjdCArIFwiJnRpcG92aWV3PVwiICsgdGlwb3ZpZXc7XG4gICAgICAgIGlmKHBhcmFtZXRyaV9hZ2dpdW50aXZpKSBkYXRhICs9IFwiJlwiK3BhcmFtZXRyaV9hZ2dpdW50aXZpO1xuICAgICAgICBpZiAoZm9yemFfZWxpbWluYXppb25lKSB1cmwgKz0gXCImRk9SWkFfRUxJTUlOQVpJT05FXCI7XG4gICAgICAgIHdhaXRpbmcodHJ1ZSk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWVkaV9jb25mZXJtYSA9IGpzb24uY2hpZWRpX2NvbmZlcm1hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnID0ganNvbi5kZWJ1ZztcbiAgICAgICAgICAgICAgICBhamF4U3VibWl0T25TdWNjZXNzRnVuY3Rpb24oanNvbiwgdHJ1ZSwgY2hpZWRpX2NvbmZlcm1hKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSBqc29uLnJldDtcbiAgICAgICAgICAgICAgICBpZihyZXQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihyZWxvYWQgJiYgIWRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpZGRvY3VtZW50bz4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmPVwiP2NvZGljZWRvY3VtZW50bz1cIitjb2RpY2Vkb2N1bWVudG8rXCImdGlwb3ZpZXc9dmlld1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZihyZWxvYWRfdGFibGVzY3JvbGwpIHJlbG9hZFRhYmxlKHJlbG9hZF90YWJsZXNjcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjdHJfXCIraWQpLmhpZGVSb3coKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrPT09XCJmdW5jdGlvblwiKSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihjaGllZGlfY29uZmVybWEpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIElXQ29uZmlybShjaGllZGlfY29uZmVybWEsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5EZWwyX29uY2xpY2soaWQsMSxwYXJhbWV0cmlfYWdnaXVudGl2aSxyZWxvYWQsaWRkb2N1bWVudG8sY29kaWNlZG9jdW1lbnRvLHJlbG9hZF90YWJsZXNjcm9sbCxjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBidG5TYXZlX29uY2xpY2s6IGZ1bmN0aW9uKHJlbG9hZCxzZXRfcHJvZ3Jlc3MsdXJsLG9uX2NvbXBsZXRlLGJlZm9yZVN1Ym1pdENhbGxiYWNrKVxuICAgIHtcbiAgICAgICAgaWYocmVsb2FkPT1cIlwiKSByZWxvYWQ9ZmFsc2U7XG4gICAgICAgIGlmKHNldF9wcm9ncmVzcz09XCJcIikgc2V0X3Byb2dyZXNzPWZhbHNlO1xuXG4gICAgICAgIHZhciAkYnRucyA9ICQoXCJidXR0b25cIik7XG5cbiAgICAgICAgJGJ0bnMucHJvcChcImRpc2FibGVkXCIsdHJ1ZSk7XG4gICAgICAgIGlmKHNldF9wcm9ncmVzcykgd2FpdGluZzIodHJ1ZSx0cnVlKTtcbiAgICAgICAgaWYodHlwZW9mIGJlZm9yZVN1Ym1pdENhbGxiYWNrPT09XCJmdW5jdGlvblwiKSBiZWZvcmVTdWJtaXRDYWxsYmFjaygpO1xuICAgICAgICB2YXIgJE9QX0ZST01fQUpBWCA9ICQoXCIjT1BfRlJPTV9BSkFYXCIpO1xuICAgICAgICAkT1BfRlJPTV9BSkFYLnZhbCgxKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcInZpZXcucGhwXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcInhtbFwiLFxuICAgICAgICAgICAgZGF0YTogICQoXCIjZm9ybTFcIikuc2VyaWFsaXplKCksXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKHJlcyk7XG4gICAgICAgICAgICAgICAgJE9QX0ZST01fQUpBWC52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9ICQocmVzKS5maW5kKFwicmV0XCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgZGVidWcgPSAkKHJlcykuZmluZChcImRlYnVnXCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAkKHJlcykuZmluZChcImlkXCIpLnRleHQoKTtcblxuICAgICAgICAgICAgICAgIGlmKHJldClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjaWRcIikudmFsKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgJGJ0bnMuZmFkZUluKCk7XG4gICAgICAgICAgICAgICAgICAgICQoJyNub19iZWZvcmV1bmxvYWQnKS52YWwoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYocmVsb2FkICYmICFkZWJ1Zykgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICAvL2V2ZW50dWFsZSBVUkwgZGkgZGVzdGluYXppb25lLiBBY2NvZG8gbCdpZCBnZW5lcmF0byBvIHJlY3VwZXJhdG8gZGlyZXR0YW1lbnRlIHF1aW5kaSBsJ3VybCBkZXZlIGVzc2VyZSBmb3JtYXR0YXRhIGJlbmUgbGF0byBwaHBcbiAgICAgICAgICAgICAgICAgICAgaWYodXJsIT1udWxsICYmIHVybCE9XCJcIiAmJiAhZGVidWcpIHdpbmRvdy5sb2NhdGlvbi5ocmVmPXVybCtpZDtcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIG9uX2NvbXBsZXRlPT09XCJmdW5jdGlvblwiKSBvbl9jb21wbGV0ZSh0cnVlLHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBvbl9jb21wbGV0ZT09PVwiZnVuY3Rpb25cIikgb25fY29tcGxldGUoZmFsc2UscmVzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkYnRucy5wcm9wKFwiZGlzYWJsZWRcIixmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYoc2V0X3Byb2dyZXNzKSB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcikge1xuICAgICAgICAgICAgICAgICQoXCIjYm94RGVidWdcIikuaHRtbChcIjxwcmU+XCIreGhyLnN0YXR1cyArIFwiPGJyPlwiICsgdGhyb3duRXJyb3IgKyBcIjwvcHJlPlwiKTtcbiAgICAgICAgICAgICAgICAkYnRucy5wcm9wKFwiZGlzYWJsZWRcIixmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBidG5QcmludF9vbmNsaWNrOiBmdW5jdGlvbihpc19zZW56YV9wcmV6emkpXG4gICAge1xuICAgICAgICB2YXIgcGFnZV9wcmludD0kKCcjcGFnZV9wcmludCcpLnZhbCgpO1xuICAgICAgICB2YXIgc3RyaW5naGU9cGFnZV9wcmludC5zcGxpdCgnaWRkb2N1bWVudG8nKTtcbiAgICAgICAgdmFyIGlkZG9jdW1lbnRvPSQoXCIjaWRkb2N1bWVudG9cIikudmFsKCk7XG4gICAgICAgIHZhciB1cmw9c3RyaW5naGVbMF0rXCImaWRkb2N1bWVudG89XCIraWRkb2N1bWVudG87XG4gICAgICAgIGlmKGlzX3NlbnphX3ByZXp6aT09MSlcbiAgICAgICAgICAgIHVybCs9XCImTk9OX1NUQU1QQVJFX1BSRVpaSVwiO1xuICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgICB9LFxuXG4gICAgYnRuUHJpbnQyX29uY2xpY2s6IGZ1bmN0aW9uKHRpcG9zdGFtcGEsaWQsY29kaWNlZG9jdW1lbnRvLG9iamVjdCxwYXJhbWV0cmksc2V0ZmlsZW5hbWUsaXNfZXhjZWwsZm9ybSxzZXRfcHJvZ3Jlc3Msb25fY29tcGxldGUpIHtcbiAgICAgICAgaWYgKCFmb3JtKSBmb3JtID0gXCJmb3JtMVwiO1xuICAgICAgICBpZiAoIXNldF9wcm9ncmVzcykgc2V0X3Byb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIGlmIChzZXRmaWxlbmFtZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGlmICghaWQpIGlkID0gMDtcbiAgICAgICAgICAgIHdhaXRpbmcyKHRydWUsIHNldF9wcm9ncmVzcyk7XG4gICAgICAgICAgICBjb25zdCAkYWxsYXJtaSA9ICQoXCIjYXZ2aXNpX2Zvb3Rlcl91bDBcIik7XG4gICAgICAgICAgICAkYWxsYXJtaS5oaWRlKCk7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoXCIjXCIgKyBmb3JtKTtcbiAgICAgICAgICAgICQoXCIjdGlwb3N0YW1wYVwiKS52YWwodGlwb3N0YW1wYSk7XG4gICAgICAgICAgICBpZiAoaWQgPiAwICYmIGNvZGljZWRvY3VtZW50bykgJChcIiNpZGRvY3VtZW50b1wiKS52YWwoaWQpO1xuICAgICAgICAgICAgbGV0IGFjdGlvbiA9IFwicHJpbnQucGhwP3NldGZpbGVuYW1lJmlkPVwiICsgaWQ7XG4gICAgICAgICAgICBpZiAoaXNfZXhjZWwgPT09IFwidHJ1ZVwiKSBhY3Rpb24gKz0gXCImRVhDRUxcIjtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBhY3Rpb24gKyBcIiZKU09OXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgICAgIGRhdGE6ICRmb3JtLnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25fY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikgb25fY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uZGF0YS5yZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19leGNlbCAhPT0gXCJ0cnVlXCIpIHdpbmRvdy5vcGVuKGpzb24uZGF0YS5vdXRmaWxlLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0ganNvbi5kYXRhLm91dGZpbGU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJFcnJvcmUuIEltcG9zc2liaWxlIHN0YW1wYXJlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICRhbGxhcm1pLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgd2FpdGluZzIoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChqcVhIUikge1xuICAgICAgICAgICAgICAgICAgICB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KEpTT04ucGFyc2UoanFYSFIucmVzcG9uc2VUZXh0KS5lcnJvci5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHVybCA9IFwicHJpbnQucGhwP3RpcG9zdGFtcGE9XCIgKyB0aXBvc3RhbXBhO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBwYXJhbWV0cmkuc3BsaXQoXCIsXCIpO1xuXG4gICAgICAgICAgICAkLmVhY2gocGFyYW1zLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBcIiZcIiArIHBhcmFtc1tpXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29kaWNlZG9jdW1lbnRvKSB1cmwgKz0gXCImaWRkb2N1bWVudG89XCIgKyBpZCArIFwiJmNvZGljZWRvY3VtZW50bz1cIiArIGNvZGljZWRvY3VtZW50bztcbiAgICAgICAgICAgIGVsc2UgdXJsICs9IFwiJmlkPVwiICsgaWQgKyBcIiZvYmplY3Q9XCIgKyBvYmplY3Q7XG5cbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYnRuUHJpbnRNdWx0aXBsZTogZnVuY3Rpb24oZGF0aSxzZXRfcHJvZ3Jlc3Mpe1xuICAgICAgICBpZihzZXRfcHJvZ3Jlc3MpIHdhaXRpbmcyKHRydWUsdHJ1ZSk7XG4gICAgICAgIGRhdGkub2JqZWN0PSBcIklXUHJpbnRNdWx0aXBsZVwiO1xuICAgICAgICBkYXRpLnRpcG92aWV3ID0gXCJwcmludE11bHRpcGxlXCI7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTlwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRpLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0ganNvbi5yZXQ7XG4gICAgICAgICAgICAgICAgdmFyIG91dGZpbGUgPSBqc29uLm91dGZpbGU7XG4gICAgICAgICAgICAgICAgaWYoc2V0X3Byb2dyZXNzKSB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYocmV0KVxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihcInRtcC9cIitvdXRmaWxlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoXCIjYWxlcnRfbm9fc3RhbXBhXCIpLnZhbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYnRuUHJpbnQ6IGZ1bmN0aW9uIChwYXJhbXMsIGlzX2V4Y2VsLCBjYWxsYmFjaywgbm9fcmV0dXJuX2FmdGVyX2NhbGxiYWNrLCBpc19qc29uKXtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogXCJwcmludC5waHA/c2V0ZmlsZW5hbWVcIiArIChpc19leGNlbCA/IFwiJkVYQ0VMXCIgOiBcIlwiKSArIChpc19qc29uID8gXCImSlNPTlwiIDogXCJcIiksXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBpc19qc29uID8gXCJqc29uXCIgOiBcInhtbFwiLFxuICAgICAgICAgICAgZGF0YTogcGFyYW1zLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9fcmV0dXJuX2FmdGVyX2NhbGxiYWNrKSByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gaXNfanNvbiA/IHJlcy5kYXRhLnJldCA6ICQocmVzKS5maW5kKFwicmV0XCIpLnRleHQoKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJChcIiNhbGVydF9ub19zdGFtcGFcIikudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG91dGZpbGUgPSBpc19qc29uID8gcmVzLmRhdGEub3V0ZmlsZSA6ICQocmVzKS5maW5kKFwib3V0ZmlsZVwiKS50ZXh0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzX2V4Y2VsKSB3aW5kb3cub3BlbihvdXRmaWxlKTtcbiAgICAgICAgICAgICAgICBlbHNlIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gb3V0ZmlsZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoSlNPTi5wYXJzZShqcVhIUi5yZXNwb25zZVRleHQpLmVycm9yLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB3YWl0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0RGF0aUNvbXVuZUl0YWxpYW5vOiBmdW5jdGlvbiAoY29tdW5lX2lkLCBjYWxsYmFjaykge1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXQ29tdW5pJnRpcG92aWV3PWdldERhdGlDb211bmUmaWQ9XCIgKyBjb211bmVfaWQsXG4gICAgICAgICAgICB0eXBlOiBcImdldFwiLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc2V0TmV3UGFzc3dvcmQ6IGZ1bmN0aW9uKGlucHV0bmFtZSwgcmVzdGFwaSwgZm9yY2VfbGVuZ3RoKXtcbiAgICAgICAgaWYodHlwZW9mIHJlc3RhcGkgPT09IFwidW5kZWZpbmVkXCIpIHJlc3RhcGkgPSBmYWxzZTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1nZXROZXdQYXNzd29yZCZyZXN0YXBpPVwiICsgKHJlc3RhcGkgPyBcIjFcIiA6IFwiMFwiKSArIFwiJmZvcmNlX2xlbmd0aD1cIiArIChmb3JjZV9sZW5ndGggPyBcIjFcIiA6IFwiMFwiKSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgJChcIiNcIitpbnB1dG5hbWUpLnZhbChqc29uLnBhc3N3b3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGJ0bk5ld19vbmNsaWNrOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgY29kaWNlZG9jdW1lbnRvPSQoXCIjY29kaWNlZG9jdW1lbnRvXCIpLnZhbCgpO1xuICAgICAgICB2YXIgb2JqZWN0PSQoXCIjb2JqZWN0XCIpLnZhbCgpO1xuICAgICAgICB2YXIgdGlwb3ZpZXc9JChcIiN0aXBvdmlld1wiKS52YWwoKTtcbiAgICAgICAgdmFyIHJlbG9hZD1cIj90aXBvdmlldz1cIit0aXBvdmlldztcbiAgICAgICAgaWYodHlwZW9mIGNvZGljZWRvY3VtZW50bz09PVwidW5kZWZpbmVkXCIpIHJlbG9hZCs9XCImb2JqZWN0PVwiK29iamVjdDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZigkKFwiI3BhZ2VfY29udHJvbHNcIikudmFsKCkhPVwiXCIpIHJlbG9hZD1cIj90aXBvdmlldz1jb250cm9sc1wiO1xuICAgICAgICAgICAgcmVsb2FkKz1cIiZjb2RpY2Vkb2N1bWVudG89XCIrY29kaWNlZG9jdW1lbnRvO1xuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbj1yZWxvYWQ7XG4gICAgfSxcblxuICAgIGJ0bk1haWxfb25jbGljazogZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgdmFyIGlkZG9jdW1lbnRvPSQoXCIjaWRkb2N1bWVudG9cIikudmFsRmxvYXQoKTtcbiAgICAgICAgSVdDb25maXJtKCQoXCIjY29uZmVybWFfcHJvc2VndWlcIikudmFsKCksZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQuZ2V0KFwiYWpheC5waHA/dGlwb3ZpZXc9aW52aWFlbWFpbGRvYyZpZGRvY3VtZW50bz1cIitpZGRvY3VtZW50bytcIiZjb2RpY2Vkb2N1bWVudG89XCIrJChcIiNjb2RpY2Vkb2N1bWVudG9cIikudmFsKCksIGZ1bmN0aW9uKHhtbCkge1xuICAgICAgICAgICAgICAgIHZhciByZXQ9JCh4bWwpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmKHJldClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlck1zZygwLFwiRW1haWwgaW52aWF0YVwiLCQoeG1sKS5maW5kKFwibXNnXCIpLnRleHQoKSk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjYnRuRW1haWxcIikuZmFkZU91dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlck1zZygxLFwiRXJyb3JlIG5lbGwnaW52aW8gZGVsbGEgZW1haWxcIiwkKHhtbCkuZmluZChcIm1zZ1wiKS50ZXh0KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBjaGVja0FsbF9vbmNsaWNrOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgdmFsPVwiXCI7dmFyICRjaGs7XG4gICAgICAgIHZhciBjaGVja2VkPSQoXCIjY2hrXzBcIikuaXMoJzpjaGVja2VkJyk7XG4gICAgICAgIGlmKCAhY2hlY2tlZCApIHZhbD1cImNoZWNrZWRcIjtcbiAgICAgICAgdmFyIG5yb3dzPSQoXCIjaV9jb3VudFwiKS52YWxGbG9hdCgpO1xuICAgICAgICBpZihucm93cz09MCkgbnJvd3M9MTAwMDtcblxuICAgICAgICBmb3IodmFyIGk9MDtpPG5yb3dzO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgJGNoaz0kKFwiI2Noa19cIitpKTtcbiAgICAgICAgICAgIGlmKHZhbD09XCJcIikgJGNoay5wcm9wKFwiY2hlY2tlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgIGVsc2UgJGNoay5wcm9wKFwiY2hlY2tlZFwiLHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXdDdXJyZW5jeUVsZW1lbnQ6IGZ1bmN0aW9uICgpe1xuICAgICAgICAkKFwiLkN1cnJlbmN5MlwiKS5lYWNoKGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgJCh0aGlzKS5vZmYoXCJibHVyXCIpO1xuICAgICAgICAgICAgJCh0aGlzKS5vZmYoXCJmb2N1c1wiKTtcbiAgICAgICAgICAgICQodGhpcykub24oXCJibHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3ltYm9sID0gJCh0aGlzKS5hdHRyKFwic3ltYm9sXCIpID8gJCh0aGlzKS5hdHRyKFwic3ltYm9sXCIpIDogJChcIiNDVVJSRU5DWV9fU1lNQk9MXCIpLnZhbCgpO1xuICAgICAgICAgICAgICAgIGxldCBkZWNpbWFscyA9ICQodGhpcykuYXR0cihcImRlY2ltYWxzXCIpID8gJCh0aGlzKS5hdHRyKFwiZGVjaW1hbHNcIikgOiAkKFwiI0NVUlJFTkNZX19ERUNJTUFMU1wiKS52YWwoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFsX3NlcGFyYXRvciA9ICQoXCIjQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRob3VzYW5kX3NlcGFyYXRvciA9ICQoXCIjQ1VSUkVOQ1lfX1RIT1VTQU5EU19TRVBBUkFUT1JcIikudmFsKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuID0gJChcIiNcIiArICQodGhpcykuYXR0cihcImlkXCIpICsgXCJfaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGxldCBpZl96ZXJvX2VtcHR5PSAkKHRoaXMpLmF0dHIoXCJpZl96ZXJvX2VtcHR5XCIpO1xuICAgICAgICAgICAgICAgIGxldCBzID0gJCh0aGlzKS52YWwoKTtcblxuICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2Uoc3ltYm9sLCAnJyk7XG4gICAgICAgICAgICAgICAgbGV0IG4gPSBnZXRGbG9hdCggcyApO1xuICAgICAgICAgICAgICAgIGhpZGRlbi52YWwoIG4gKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWduID0gbiA8IDAgPyBcIi0gXCIgOiBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IG4yID0gbnVtYmVyX2Zvcm1hdChNYXRoLmFicyhuKSxkZWNpbWFscywgZGVjaW1hbF9zZXBhcmF0b3IsIHRob3VzYW5kX3NlcGFyYXRvcik7XG5cbiAgICAgICAgICAgICAgICBpZiggIW4gJiYgaWZfemVyb19lbXB0eSlcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbChzaWduICsgc3ltYm9sICsgXCIgXCIgKyBuMiApO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb25jaGFuZ2UgPSAkKHRoaXMpLmRhdGEoXCJvbmNoYW5nZV9ldmVudFwiKTtcbiAgICAgICAgICAgICAgICBpZiAob25jaGFuZ2UpIGV2YWwob25jaGFuZ2UpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgJCh0aGlzKS5vbihcImZvY3VzXCIsIGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gJCh0aGlzKS5hdHRyKFwiaWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuID0gJChcIiNcIiArIGlkICsgXCJfaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxzID0gJCh0aGlzKS5hdHRyKFwiZGVjaW1hbHNcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gaGlkZGVuLnZhbEZsb2F0KCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbiA9IE51bWJlcihudW1iZXIpO1xuICAgICAgICAgICAgICAgICQodGhpcykudmFsKG4udG9GaXhlZChkZWNpbWFscykpO1xuICAgICAgICAgICAgICAgICQodGhpcykuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5vbmUoJ21vdXNldXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dDb2x1bW46IGZ1bmN0aW9uKHRhYmxlLGluZGV4LHZpc2libGUpe1xuICAgICAgICBpZih2aXNpYmxlPT1udWxsKSB2aXNpYmxlPXRydWU7XG5cbiAgICAgICAgY29uc3QgJHQgPSAkKFwiI1wiK3RhYmxlKTtcbiAgICAgICAgY29uc3QgZHQgPSAkdC5kYXRhVGFibGUoKS5hcGkoKTtcbiAgICAgICAgY29uc3QgYyA9IGR0LmNvbHVtbihpbmRleCk7XG4gICAgICAgIGMudmlzaWJsZSggdmlzaWJsZSApO1xuICAgICAgICAvL2R0LmNvbHVtbnMuYWRqdXN0KCk7XG4gICAgfSxcblxuICAgIGhpZGVDb2x1bW46IGZ1bmN0aW9uKHRhYmxlLGluZGV4KXtcbiAgICAgICAgc2hvd0NvbHVtbih0YWJsZSxpbmRleCxmYWxzZSk7XG4gICAgfSxcblxuICAgIGdldENvZGljaUlWQTogZnVuY3Rpb24oYXR0aXZpdGFwYXNzaXZpdGEsZGF0YV9saW1pdGUpe1xuICAgICAgICB2YXIgdXJsPVwiYWpheC5waHA/b2JqZWN0PUNvZGljZUlWQSZ0aXBvdmlldz1nZXRDb2RpY2kmYXR0aXZpdGFwYXNzaXZpdGE9XCIrYXR0aXZpdGFwYXNzaXZpdGErXCImZGF0YV9saW1pdGU9XCIrZGF0YV9saW1pdGU7XG4gICAgICAgIHZhciBvcHRpb25zPVtdO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJ4bWxcIixcbiAgICAgICAgICAgIGFzeW5jIDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHZhciBjb2RpY2lfY291bnQ9JCh4bWwpLmZpbmQoXCJjb2RpY2lfY291bnRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgICAgIGZvcihpPTA7aTxjb2RpY2lfY291bnQ7aSsrKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkPSQoeG1sKS5maW5kKFwiaWRcIitpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaWRdPSQoeG1sKS5maW5kKFwiZGVzY3JpemlvbmVcIitpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcblxuICAgIHNjb3Jwb3JhSXZhOiBmdW5jdGlvbihpbXBvcnRvLCBpZGl2YSkge1xuICAgICAgICB2YXIgYWxpcXVvdGEgPSBpdmFHZXQoaWRpdmEsIFwiYWxpcXVvdGFcIik7XG4gICAgICAgIHJldHVybiBnZXRGbG9hdDIoaW1wb3J0by8oMSthbGlxdW90YS8xMDApKTtcbiAgICB9LFxuXG4gICAgSVdBdXRvY29tcGxldGU6IGZ1bmN0aW9uKGlkLElXT2JqZWN0LGZpbHRlcnMsZGluYW1pY19zZWFyY2gsaWRkaWFsb2csZXhjZWxQcm9jZXNzLGNzc0NsYXNzLGNhbGxiYWNrKXtcbiAgICAgICAgaWYoIWZpbHRlcnMpIGZpbHRlcnMgPSB7fTtcblxuICAgICAgICB2YXIgJGlkQXV0b2NvbXBsZXRlID0gJChcIiNcIitpZCk7XG4gICAgICAgIGlmKGNzc0NsYXNzKSAkaWRBdXRvY29tcGxldGUgPSAkKFwiLlwiK2Nzc0NsYXNzKTtcblxuICAgICAgICBmaWx0ZXJzLmNzc0NsYXNzZXMgPSAkaWRBdXRvY29tcGxldGUuYXR0cihcImNsYXNzXCIpO1xuICAgICAgICBjb25zdCBpc19leHRlbmRlZCA9IHBhcnNlSW50KCRpZEF1dG9jb21wbGV0ZS5kYXRhKFwiZXh0ZW5kZWRcIikpXG5cbiAgICAgICAgY29uc3QgcnVuQXV0b2NvbXBsZXRlID0gZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICByZXR1cm4gJGlkQXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZSh7XG4gICAgICAgICAgICAgICAgc291cmNlOiBmdW5jdGlvbiggcmVxdWVzdCwgcmVzcG9uc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFqYXhTb3VyY2VJV0F1dG9jb21wbGV0ZShmaWx0ZXJzLCBJV09iamVjdCwgcmVxdWVzdCwgcmVzcG9uc2UsIGV4Y2VsUHJvY2VzcywgZGluYW1pY19zZWFyY2gpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWluTGVuZ3RoOiAyLFxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKElXT2JqZWN0LnN0YXJ0c1dpdGgoXCJJV0F1dG9jb21wbGV0ZUFydGljb2xvXCIpKXtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBcnRpY29sb0RlbEZvcm5pdG9yZSh1aS5pdGVtLmlkLCBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVpLml0ZW0uZGFfY29uZmVybWFyZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0RpYWxvZ0FydGljb2xvRGFDb25mZXJtYXJlKHVpLml0ZW0uaWQsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGNzc0NsYXNzKSBpZCA9IGV2ZW50LnRhcmdldC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpZD0kKFwiI1wiK2lkK1wiX2hpZGRlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgJGlkLnZhbCh1aS5pdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgJGlkLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikgY2FsbGJhY2sodWkuaXRlbSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhcHBlbmRUbzogaWRkaWFsb2cgPyBcIiNcIitpZGRpYWxvZyA6IFwiXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzX2V4dGVuZGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBydW5BdXRvY29tcGxldGUoKS5hdXRvY29tcGxldGUoIFwiaW5zdGFuY2VcIiApLl9yZW5kZXJJdGVtID0gZnVuY3Rpb24oIHVsLCBpdGVtICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkKCBcIjxsaT5cIiApXG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIFwiPGRpdj48Yj5cIiArIGl0ZW0ubGFiZWwgKyBcIjwvYj48YnI+XCIgKyBpdGVtLmRlc2MgKyBcIjwvZGl2PlwiIClcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCB1bCApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bkF1dG9jb21wbGV0ZSgpO1xuICAgIH0sXG5cblxuICAgIGNoZWNrQXJ0aWNvbG9EZWxGb3JuaXRvcmU6IGZ1bmN0aW9uKGlkYXJ0aWNvbG8sIGlkX2ZpZWxkKXtcbiAgICAgICAgdmFyICRjb2RpY2Vkb2N1bWVudG8gPSAkKFwiI2NvZGljZWRvY3VtZW50b1wiKTtcbiAgICAgICAgaWYoISRjb2RpY2Vkb2N1bWVudG8udmFsKCkpIHJldHVybjtcblxuICAgICAgICBpZigkKFwiI2lzX3Bhc3Npdml0YVwiKS52YWxGbG9hdCgpID09PSAwKSByZXR1cm47XG4gICAgICAgIGlmKGdldEZsb2F0KCRjb2RpY2Vkb2N1bWVudG8uZGF0YShcInRpcG9fcmVjdXBlcm9fcHJlenppX3Bhc3Npdml0YVwiKSkgIT09IDIgJiYgZ2V0RmxvYXQoJGNvZGljZWRvY3VtZW50by5kYXRhKFwidGlwb19yZWN1cGVyb19wcmV6emlfcGFzc2l2aXRhXCIpKSAhPT0gNCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBpZGZvcm5pdG9yZSA9ICQoXCIjYW5hZ3JhZmljYV9oaWRkZW5cIikudmFsRmxvYXQoKTtcbiAgICAgICAgaWYoaWRmb3JuaXRvcmUgPT09IDApIHJldHVybjtcblxuICAgICAgICB2YXIgb2JqZWN0ID0gJChcIiNjbGFzc19hcnRpY29sb1wiKS52YWwoKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD9KU09OXCIsXG4gICAgICAgICAgICBkYXRhOiB7IG9iamVjdDogb2JqZWN0LCBpZDogaWRhcnRpY29sbywgaWRmb3JuaXRvcmU6IGlkZm9ybml0b3JlLCB0aXBvdmlldzogXCJjaGVja0lmQXJ0aWNvbG9EZWxGb3JuaXRvcmVcIiwgY29kaWNlX2RvY3VtZW50bzogJGNvZGljZWRvY3VtZW50by52YWwoKSB9LFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbil7XG4gICAgICAgICAgICAgICAgaWYoanNvbi5yZXQpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIElXQ29uZmlybVRydWVGYWxzZSgkY29kaWNlZG9jdW1lbnRvLmRhdGEoXCJhcnRpY29sb19ub25fcHJlc2VudGVfaW5fZm9ybml0b3JlXCIpLCBmdW5jdGlvbihyZXQpe1xuICAgICAgICAgICAgICAgICAgICBpZihyZXQpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgaWRfZmllbGQgKyBcIl9oaWRkZW5cIikudmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgaWRfZmllbGQpLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArIGlkX2ZpZWxkKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nQXJ0aWNvbG9EYUNvbmZlcm1hcmU6IGZ1bmN0aW9uIChpZGFydGljb2xvLGlkX2ZpZWxkKSB7XG4gICAgICAgIGxldCBvYmplY3QgPSAkKFwiI2NsYXNzX2FydGljb2xvXCIpLnZhbCgpO1xuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT05cIixcbiAgICAgICAgICAgIGRhdGE6IHtvYmplY3Q6IG9iamVjdCwgaWRfZGFjb25mZXJtYXJlOiBpZGFydGljb2xvLCB0aXBvdmlldzogXCJnZXREaWFsb2dBcnRpY29sb0RhQ29uZmVybWFyZVwiLCBvYmplY3RfcHJvdmVuaWVuemE6ICQoXCIjb2JqZWN0XCIpLnZhbCgpIH0sXG4gICAgICAgICAgICBkaXZuYW1lOiBcImRpYWxvZ19hcnRpY29saV9kYV9jb25mZXJtYXJlXCIsXG4gICAgICAgICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dTaG93KFwiZGlhbG9nX2FydGljb2xpX2RhX2NvbmZlcm1hcmVcIiwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgJGhpZGRlbiA9ICQoXCIjXCIgKyBpZF9maWVsZCArIFwiX2hpZGRlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2Ugbm9uIGNvbmZlcm1vIGVsaW1pbm8gYXJ0aWNvbG9cbiAgICAgICAgICAgICAgICAgICAgICAgICRoaWRkZW4udmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArIGlkX2ZpZWxkKS52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI2RpYWxvZ19hcnRpY29saV9kYV9jb25mZXJtYXJlXCIpLmRpYWxvZyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogXCJKU09OPTEmT1BfRlJPTV9BSkFYPTEmdGlwb3ZpZXc9Y29uZmVybWFBcnRpY29sbyZvYmplY3Q9XCIgKyBvYmplY3QgKyBcIiZcIiArICQoXCIjZGlhbG9nX2FydGljb2xpX2RhX2NvbmZlcm1hcmUgOmlucHV0LDpjaGVja2JveFwiKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKGpzb24sIHRydWUsICFqc29uLnJldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24ucmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoaWRkZW4udmFsKGpzb24uaWRhcnRpY29sbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoaWRkZW4uY2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjZGlhbG9nX2FydGljb2xpX2RhX2NvbmZlcm1hcmVcIikuZGlhbG9nKFwiY2xvc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoanNvbi5tc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLnZhbCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArIGlkX2ZpZWxkKS52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIGFqYXhTb3VyY2VJV0F1dG9jb21wbGV0ZTogZnVuY3Rpb24oZmlsdGVycywgSVdPYmplY3QsIHJlcXVlc3QsIHJlc3BvbnNlLCBleGNlbFByb2Nlc3MsIGRpbmFtaWNfc2VhcmNoKXtcbiAgICAgICAgdmFyIHRlcm07XG4gICAgICAgIGlmIChleGNlbFByb2Nlc3MgPT0gbnVsbCkgdGVybSA9IHJlcXVlc3QudGVybTtcbiAgICAgICAgZWxzZSB0ZXJtID0gcmVxdWVzdDtcblxuICAgICAgICAkLmVhY2goZmlsdGVycywgZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LnN0YXJ0c1dpdGgoXCIkKCcjXCIpKVxuICAgICAgICAgICAgICAgIGZpbHRlcnNba10gPSBldmFsKHYpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZpbHRlcnNba10gPSB2O1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVycy5sZXR0ZXJzID0gdGVybTtcblxuICAgICAgICAkLmVhY2goZGluYW1pY19zZWFyY2gsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiJCgnI1wiKSkgZmlsdGVyc1trZXldID0gdmFsdWUgKyAnLnZhbCgpJztcbiAgICAgICAgICAgIGVsc2UgZmlsdGVyc1trZXldID0gJChcIiNcIiArIHZhbHVlKS52YWwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogJ2FqYXgucGhwP0pTT04mb2JqZWN0PScrSVdPYmplY3QrXCImdGlwb3ZpZXc9Z2V0QXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICBkYXRhOiBmaWx0ZXJzLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oIGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgaWYoZXhjZWxQcm9jZXNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UoICQubWFwKCBkYXRhLm9iamVjdHMsIGZ1bmN0aW9uKCBpdGVtICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07Lyp7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCwgLy92aXN1YWxpenphIGxhIGZvcm1hdHRhemlvbmUgZGkgb2duaSByaXN1bHRhdG8sIGVzLiBbY29kaWNlXSBkZXNjcml6aW9uZSBbY29kZmlzY2FsZV0gW3BpdmFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsIC8vZG9wbyBsYSBzZWxlemlvbmUgZGVsIHJpc3VsdGF0byBjb21waWxhIGlsIGNhbXBvLCBhZCBlcy4gc29sbyBkZXNjcml6aW9uZSBvcHB1cmUgW2NvZGljZV0gZGVzY3JpemlvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCwgLy9sJ2lkIGRhIHNhbHZhcmUgbmVsIGNhbXBvIGhpZGRlbiBjaGUgcmljb25vc2NlIGlsIHZhbG9yZSBuZWwgZGF0YWJhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmF3OiBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgICAgICBleGNlbFByb2Nlc3MoJC5tYXAoIGRhdGEub2JqZWN0cywgZnVuY3Rpb24oIGl0ZW0gKSB7IHJldHVybiBpdGVtLmxhYmVsIH0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHNldEtleXdvcmRzT25DS0VkaXRvcjogZnVuY3Rpb24oZSxlZGl0b3Ipe1xuICAgICAgICBpZihlZGl0b3I9PW51bGwpIHJldHVybiBmYWxzZTtcblxuICAgICAgICB2YXIgY2tlZGl0b3I9Q0tFRElUT1IuaW5zdGFuY2VzW2VkaXRvcl07XG4gICAgICAgIGNrZWRpdG9yLmluc2VydFRleHQoJChlLnRhcmdldCkudmFsKCkudHJpbSgpKTtcbiAgICAgICAgJChlLnRhcmdldCkudmFsKCctMScpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBJV0NvbmZpcm06IGZ1bmN0aW9uKHRleHQscil7XG4gICAgICAgICQoXCIjSVdDb25maXJtXCIpLmh0bWwodGV4dCk7XG4gICAgICAgIGRpYWxvZ1Nob3coXCJJV0NvbmZpcm1cIixmdW5jdGlvbihyZXMpe2lmKHJlcykgcihyZXMpO30pO1xuICAgIH0sXG4gICAgSVdDb25maXJtMjogZnVuY3Rpb24odGV4dCxyKXtcbiAgICAgICAgJChcIiNJV0NvbmZpcm0yXCIpLmh0bWwodGV4dCk7XG4gICAgICAgIGRpYWxvZ1Nob3coXCJJV0NvbmZpcm0yXCIsZnVuY3Rpb24ocmVzKXtpZihyZXMpIHIocmVzKTt9KTtcbiAgICB9LFxuICAgIElXQ29uZmlybTM6IGZ1bmN0aW9uKHRleHQscil7XG4gICAgICAgICQoXCIjSVdDb25maXJtM1wiKS5odG1sKHRleHQpO1xuICAgICAgICBkaWFsb2dTaG93KFwiSVdDb25maXJtM1wiLGZ1bmN0aW9uKHJlcyl7aWYocmVzKSByKHJlcyk7fSk7XG4gICAgfSxcblxuICAgIElXQ29uZmlybVRydWVGYWxzZTogZnVuY3Rpb24odGV4dCxyKXtcbiAgICAgICAgJChcIiNJV0NvbmZpcm1cIikuaHRtbCh0ZXh0KTtcbiAgICAgICAgZGlhbG9nU2hvdyhcIklXQ29uZmlybVwiLGZ1bmN0aW9uKHJlcyl7IHIocmVzKTsgfSk7XG4gICAgfSxcblxuICAgIHJlbG9hZFRhYmxlOiBmdW5jdGlvbih0YWJsZV9pZCxyZXNldHBhZ2luZyxjYWxsYmFjayl7XG4gICAgICAgIHZhciAkdGFibGU9JCgnIycrdGFibGVfaWQpO1xuICAgICAgICBpZih0eXBlb2YgcmVzZXRwYWdpbmcgPT09IFwidW5kZWZpbmVkXCIpIHJlc2V0cGFnaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgbXlDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGlmKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSBteUNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH0sMzAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgJHRhYmxlLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKG15Q2FsbGJhY2sscmVzZXRwYWdpbmcpO1xuICAgICAgICAkKFwiLnVpLXRvb2x0aXBcIikuaGlkZSgpO1xuICAgIH0sXG5cbiAgICBhamF4U3VibWl0T25TdWNjZXNzRnVuY3Rpb246IGZ1bmN0aW9uKHJlcywgaXNfanNvbiwgaGlkZV9va21lc3NhZ2Upe1xuICAgICAgICBpZih0eXBlb2YgaXNfanNvbiA9PT0gXCJ1bmRlZmluZWRcIikgaXNfanNvbiA9IGZhbHNlO1xuICAgICAgICBpZih0eXBlb2YgaGlkZV9va21lc3NhZ2UgPT09IFwidW5kZWZpbmVkXCIpIGhpZGVfb2ttZXNzYWdlID0gZmFsc2U7XG4gICAgICAgIHZhciByZXQsIGRlYnVnLCBzZGVidWcsIG1zZztcbiAgICAgICAgaWYoaXNfanNvbil7XG4gICAgICAgICAgICByZXQgPSByZXMucmV0O1xuICAgICAgICAgICAgZGVidWcgPSByZXMuZGVidWc7XG4gICAgICAgICAgICBzZGVidWcgPSByZXMuc2RlYnVnO1xuICAgICAgICAgICAgbXNnID0gcmVzLm1zZztcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgcmV0ID0gJChyZXMpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgZGVidWcgPSAkKHJlcykuZmluZChcImRlYnVnXCIpLnRleHQoKTtcbiAgICAgICAgICAgIHNkZWJ1ZyA9ICQocmVzKS5maW5kKFwic2RlYnVnXCIpLnRleHQoKTtcbiAgICAgICAgICAgIG1zZyA9ICQocmVzKS5maW5kKFwibXNnXCIpLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZihyZXQpe1xuICAgICAgICAgICAgaWYoIWhpZGVfb2ttZXNzYWdlKSBmb290ZXJNc2coMCwkKFwiI3RyYW5zYWN0aW9uX3N1Y2Nlc3NcIikudmFsKCksbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgaWYoIWhpZGVfb2ttZXNzYWdlKSBmb290ZXJNc2coMSwkKFwiI3RyYW5zYWN0aW9uX2Vycm9yXCIpLnZhbCgpLG1zZyk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmKGRlYnVnKSAkKFwiI2JveERlYnVnXCIpLmh0bWwoc2RlYnVnKTtcbiAgICB9LFxuXG4gICAgc2V0RGF0ZUZyb21QZXJpb2RvRmlzY2FsZTogZnVuY3Rpb24oaWRfcGVyaW9kb2Zpc2NhbGUsaWRfZGF0YV9kYSxpZF9kYXRhX2EsaXNfcGVyaW9kb2dlc3Rpb25hbGUpe1xuICAgICAgICB2YXIgJHBlcmlvZG9maXNjYWxlPSQoXCIjXCIraWRfcGVyaW9kb2Zpc2NhbGUpO1xuICAgICAgICB2YXIgYXJyPURhdGVfX2dldEludGVydmFsbG9Gcm9tUGVyaW9kb0Zpc2NhbGUoJHBlcmlvZG9maXNjYWxlLnZhbCgpLGlzX3BlcmlvZG9nZXN0aW9uYWxlKTtcbiAgICAgICAgaWYoIGFyciA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICQoXCIjXCIraWRfZGF0YV9kYSkudmFsKCBEYXRlX19pdChhcnJbMF0pICk7XG4gICAgICAgICQoXCIjXCIraWRfZGF0YV9hKS52YWwoICBEYXRlX19pdChhcnJbMV0pICk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHNldERhdGVBbm5vU29sYXJlOiBmdW5jdGlvbihpZF9wZXJpb2RvZmlzY2FsZSxpZF9kYXRhX2RhLGlkX2RhdGFfYSl7XG4gICAgICAgIHZhciAkYW5ubz0kKFwiI1wiK2lkX3BlcmlvZG9maXNjYWxlKS52YWwoKTtcbiAgICAgICAgaWYoICRhbm5vID09PSBcIlwiKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgJChcIiNcIitpZF9kYXRhX2RhKS52YWwoIERhdGVfX2l0KCRhbm5vICsgXCIvMDEvMDFcIikgKTtcbiAgICAgICAgJChcIiNcIitpZF9kYXRhX2EpLnZhbCggIERhdGVfX2l0KCRhbm5vICsgXCIvMTIvMzFcIikgKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgY2hhbmdlRGF0ZVRyaW1lc3RyZTogZnVuY3Rpb24odHJpbWVzdHJlX2lkLCBhbm5vX2lkLCBkYXRhX2RhX2lkLCBkYXRhX2FfaWQpe1xuICAgICAgICBpZih0eXBlb2YgdHJpbWVzdHJlX2lkID09PSBcInVuZGVmaW5lZFwiKSB0cmltZXN0cmVfaWQgPSBcInRyaW1lc3RyZVwiO1xuICAgICAgICBpZih0eXBlb2YgYW5ub19pZCA9PT0gXCJ1bmRlZmluZWRcIikgYW5ub19pZCA9IFwiYW5ub1wiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9kYV9pZCA9PT0gXCJ1bmRlZmluZWRcIikgZGF0YV9kYV9pZCA9IFwiZGF0YV9kYVwiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9hX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2FfaWQgPSBcImRhdGFfYVwiO1xuXG4gICAgICAgIHZhciB0cmltZXN0cmU9JCgnIycrdHJpbWVzdHJlX2lkKS52YWxGbG9hdCgpO1xuICAgICAgICB2YXIgYW5ubz0kKCcjJythbm5vX2lkKS52YWwoKTtcblxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDEpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMS8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMy8zMScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDIpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNC8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNi8zMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDMpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNy8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wOS8zMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDQpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMC8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMi8zMScpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VEYXRlQmltZXN0cmU6IGZ1bmN0aW9uKGJpbWVzdHJlX2lkLCBhbm5vX2lkLCBkYXRhX2RhX2lkLCBkYXRhX2FfaWQpe1xuICAgICAgICBpZih0eXBlb2YgYmltZXN0cmVfaWQgPT09IFwidW5kZWZpbmVkXCIpIGJpbWVzdHJlX2lkID0gXCJiaW1lc3RyZVwiO1xuICAgICAgICBpZih0eXBlb2YgYW5ub19pZCA9PT0gXCJ1bmRlZmluZWRcIikgYW5ub19pZCA9IFwiYW5ub1wiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9kYV9pZCA9PT0gXCJ1bmRlZmluZWRcIikgZGF0YV9kYV9pZCA9IFwiZGF0YV9kYVwiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9hX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2FfaWQgPSBcImRhdGFfYVwiO1xuXG4gICAgICAgIHZhciBiaW1lc3RyZT0kKCcjJytiaW1lc3RyZV9pZCkudmFsRmxvYXQoKTtcbiAgICAgICAgdmFyIGFubm89JCgnIycrYW5ub19pZCkudmFsKCk7XG5cbiAgICAgICAgdmFyIGQ7XG4gICAgICAgIGlmKGJpbWVzdHJlID09PSAxKXtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfZGFfaWQpLnZhbChEYXRlX19pdChhbm5vKycvMDEvMDEnKSk7XG4gICAgICAgICAgICBkID0gbmV3IERhdGUoYW5ubywyLDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoYmltZXN0cmUgPT09IDIpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMy8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDQsMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihiaW1lc3RyZSA9PT0gMyl7XG4gICAgICAgICAgICAkKCcjJytkYXRhX2RhX2lkKS52YWwoRGF0ZV9faXQoYW5ubysnLzA1LzAxJykpO1xuICAgICAgICAgICAgZCA9IG5ldyBEYXRlKGFubm8sNiwwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGJpbWVzdHJlID09PSA0KXtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfZGFfaWQpLnZhbChEYXRlX19pdChhbm5vKycvMDcvMDEnKSk7XG4gICAgICAgICAgICBkID0gbmV3IERhdGUoYW5ubyw4LDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoYmltZXN0cmUgPT09IDUpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wOS8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDEwLDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMC8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDEyLDApO1xuICAgICAgICB9XG4gICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGQuZ2V0RnVsbFllYXIoKStcIi9cIitzdHJfcGFkKChkLmdldE1vbnRoKCkgKyAxKSwyLDAsXCJTVFJfUEFEX0xFRlRcIikrXCIvXCIgKyBzdHJfcGFkKGQuZ2V0RGF0ZSgpLDIsMCxcIlNUUl9QQURfTEVGVFwiKSkpO1xuICAgIH0sXG5cbiAgICBjaGFuZ2VEYXRlTWVzZTogZnVuY3Rpb24obWVzZV9pZCwgYW5ub19pZCwgZGF0YV9kYV9pZCwgZGF0YV9hX2lkKXtcbiAgICAgICAgaWYodHlwZW9mIG1lc2VfaWQgPT09IFwidW5kZWZpbmVkXCIpIG1lc2VfaWQgPSBcIm5tZXNlXCI7XG4gICAgICAgIGlmKHR5cGVvZiBhbm5vX2lkID09PSBcInVuZGVmaW5lZFwiKSBhbm5vX2lkID0gXCJhbm5vXCI7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhX2RhX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2RhX2lkID0gXCJkYXRhX2RhXCI7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhX2FfaWQgPT09IFwidW5kZWZpbmVkXCIpIGRhdGFfYV9pZCA9IFwiZGF0YV9hXCI7XG5cbiAgICAgICAgdmFyIG5tZXNlPSQoJyMnICsgbWVzZV9pZCkudmFsKCk7XG4gICAgICAgIHZhciBhbm5vPSQoJyMnICsgYW5ub19pZCkudmFsRmxvYXQoKTtcbiAgICAgICAgdmFyIGQ9bmV3IERhdGUoYW5ubyxubWVzZSwwKTtcbiAgICAgICAgdmFyIGxhc3RfZGF5PWQuZ2V0RGF0ZSgpO1xuICAgICAgICAkKCcjJyArIGRhdGFfZGFfaWQpLnZhbCgnMDEvJytubWVzZSsnLycrYW5ubyk7XG4gICAgICAgICQoJyMnICsgZGF0YV9hX2lkKS52YWwobGFzdF9kYXkrJy8nK25tZXNlKycvJythbm5vKTtcbiAgICB9LFxuXG4gICAgLy9kYSBtb2RpZmljYXJlIHF1YW5kbyBzaXN0ZW1vIHJlZ2lzdHJvXG4gICAgc2F2ZUZpcm1hRG9jdW1lbnRvOiBmdW5jdGlvbihmb3JtX25hbWUpXG4gICAge1xuICAgICAgICB2YXIgdXJsPVwiYWpheC5waHA/b2JqZWN0PUFuYWdyYWZpY2FPbG1hJnRpcG92aWV3PXNhdmVGaXJtYVwiO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGRhdGE6ICQoXCIjXCIrZm9ybV9uYW1lKS5zZXJpYWxpemUoKSwgLy8gc2VyaWFsaXplcyB0aGUgZm9ybSdzIGVsZW1lbnRzLlxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oeG1sKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFsZXJ0KFwiZG9jXCIpOyAvLyBzaG93IHJlc3BvbnNlIGZyb20gdGhlIHBocCBzY3JpcHQuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBnZXRJbmZvVGFibGU6IGZ1bmN0aW9uKGNsYXNzbmFtZSxpZCxvbnN1Y2Nlc3Mpe1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocFwiLFxuICAgICAgICAgICAgZGF0YTogXCJvYmplY3Q9XCIrJChcIiNvYmplY3RcIikudmFsKCkrXCImdGlwb3ZpZXc9Z2V0SW5mb1RhYmxlJmlkPVwiK2lkK1wiJmNsYXNzbmFtZT1cIitjbGFzc25hbWUsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpIHtcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MoeG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHNldFJlYWRvbmx5OiBmdW5jdGlvbihlbGVtZW50aWQsZXhjbHVkZSl7XG5cbiAgICAgICAgaWYoZWxlbWVudGlkPT1udWxsKSBlbGVtZW50aWQ9XCJmb3JtMVwiO1xuICAgICAgICBpZihleGNsdWRlPT1udWxsKSBleGNsdWRlPVwiXCI7XG5cbiAgICAgICAgJChcIiNcIiArIGVsZW1lbnRpZCArIFwiIGlucHV0LCAjXCIgKyBlbGVtZW50aWQgKyBcIiB0ZXh0YXJlYVwiKS5ub3QoJChleGNsdWRlKSkucHJvcCgncmVhZG9ubHknLHRydWUpLm9mZigpO1xuICAgICAgICAkKFwiI1wiICsgZWxlbWVudGlkICsgXCIgW3R5cGU9J2NoZWNrYm94J10sW3R5cGU9J3JhZGlvJ11cIikubm90KCQoZXhjbHVkZSkpLm9mZigpLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSk7XG4gICAgICAgICQoXCIjXCIgKyBlbGVtZW50aWQgKyBcIiBzZWxlY3Qgb3B0aW9uOm5vdCg6c2VsZWN0ZWQpXCIpLm5vdCgkKGV4Y2x1ZGUpKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuXG4gICAgfSxcblxuICAgIHNldENvbHVtbjogZnVuY3Rpb24oY29sbmFtZSxhemlvbmUpXG4gICAge1xuICAgICAgICAkKFwidGRbY29sbmFtZT0nXCIrY29sbmFtZStcIiddXCIpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKGF6aW9uZT09J3Nob3cnKVxuICAgICAgICAgICAgICAgICQodGhpcykuc2hvdygpO1xuICAgICAgICAgICAgaWYoYXppb25lPT0naGlkZScpXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgICQoXCJ0aFtjb2xuYW1lPSdcIitjb2xuYW1lK1wiJ11cIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYoYXppb25lPT0nc2hvdycpXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgICAgICBpZihhemlvbmU9PSdoaWRlJylcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTtcblxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgZm9yemFTY3JlZW53aWR0aFV0ZW50ZTogZnVuY3Rpb24oaWR1dGVudGUpe1xuICAgICAgICBsZXQgc2NyZWVud2lkdGggPSAkKFwiI3NjcmVlbndpZHRoXCIpLnZhbEZsb2F0KCk7XG4gICAgICAgIGlmKHNjcmVlbndpZHRoID09PSAwKSBzY3JlZW53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1mb3J6YVNjcmVlbndpZHRoVXRlbnRlJmlkPVwiICsgaWR1dGVudGUgKyBcIiZzY3JlZW53aWR0aD1cIiArIHNjcmVlbndpZHRoLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIGltcG9zdGFUZW1hOiBmdW5jdGlvbiAoaWR1dGVudGUpIHtcbiAgICAgICAgbGV0IHRlbWEgPSAkKFwiI3RlbWFcIikudmFsRmxvYXQoKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD9KU09OJm9iamVjdD1JV1VzZXImdGlwb3ZpZXc9c2V0SXJpZGVUZW1hVXRlbnRlJmlkPVwiICsgaWR1dGVudGUgKyBcIiZ0ZW1hPVwiICsgdGVtYSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRQcmV2aWV3VGVtYUpxdWVyeVVpOiBmdW5jdGlvbiAodGVtYSwgaXNfcHVyZSkge1xuICAgICAgICBpZiAoaXNfcHVyZSkgcmV0dXJuIHNldFByZXZpZXdQdXJlQ3NzKHRlbWEpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PVByb2ZpbG9VdGVudGUmdGlwb3ZpZXc9Z2V0Q3NzVGVtYSZ0ZW1hPVwiICsgdGVtYSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgICAgICAgJChcIiNwcmV2aWV3X2Nzc1wiKS5odG1sKGpzb24uY3NzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRQcmV2aWV3UHVyZUNzcyh0ZW1hKSB7XG4gICAgICAgIGNvbnN0IGFzc2V0c1BhdGggPSBcImFzc2V0cy9jc3MvdGVtaS9wdXJlLVwiICsgdGVtYSArIFwiLXZhcnMuY3NzXCI7XG4gICAgICAgIGNvbnN0IGxpbmtDbGFzcyA9IHRlbWEgPT09IFwiZGFya1wiID8gXCItZGFya1wiIDogXCJcIjtcbiAgICAgICAgdmFyIGNzc0xpbmsgPSAkKFwiPGxpbms+XCIsIHtcbiAgICAgICAgICAgIHJlbDogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgICAgICB0eXBlOiBcInRleHQvY3NzXCIsXG4gICAgICAgICAgICBocmVmOiBhc3NldHNQYXRoLFxuICAgICAgICAgICAgY2xhc3M6IFwiY3NzLXVzZXItdGhlbWVcIiArIGxpbmtDbGFzc1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCAkY3NzVXNlclRoZW1lID0gJChcIi5jc3MtdXNlci10aGVtZVwiKTtcbiAgICAgICAgaWYgKHRlbWEgPT09IFwiZGFya1wiKSB7XG4gICAgICAgICAgICBpZiAoJGNzc1VzZXJUaGVtZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgJGNzc1VzZXJUaGVtZS5hZnRlcihjc3NMaW5rKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJChcIiNjc3MtdmFyc1wiKS5hZnRlcihjc3NMaW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZW1hID09PSBcImxpZ2h0XCIpIHtcbiAgICAgICAgICAgICQoXCIuY3NzLXVzZXItdGhlbWUtZGFya1wiKS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRjc3NVc2VyVGhlbWUucmVtb3ZlKCk7XG4gICAgICAgICAgICBpZiAodGVtYSAhPT0gXCJcIilcbiAgICAgICAgICAgICAgICAkKFwiI2Nzcy12YXJzXCIpLmFmdGVyKGNzc0xpbmspO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHRvZ2dsZURhcmtNb2RlOiBmdW5jdGlvbiAoZGFya21vZGUpIHtcblxuICAgICAgICAkKFwiI2Rhcmttb2RlLWRhcmssICNkYXJrbW9kZS1saWdodCAsICNkYXJrbW9kZS1hdXRvXCIpLmhpZGUoKTtcblxuICAgICAgICBpZiAoZGFya21vZGUgPT09IDApXG4gICAgICAgICAgICAkKFwiLmNzcy11c2VyLXRoZW1lLWRhcmtcIikucmVtb3ZlKCk7XG5cbiAgICAgICAgaWYgKGRhcmttb2RlID09PSAxKVxuICAgICAgICAgICAgc2V0UHJldmlld1B1cmVDc3MoJ2RhcmsnKTtcblxuICAgICAgICBpZiAoZGFya21vZGUgPT09IDIpXG4gICAgICAgICAgICBnZXRBdXRvRGFya01vZGUoKTtcbiAgICB9LFxuXG4gICAgZ2V0QXV0b0RhcmtNb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhcmtNb2RlTWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJyk7XG4gICAgICAgIHNldFByZXZpZXdQdXJlQ3NzKGRhcmtNb2RlTWVkaWFRdWVyeS5tYXRjaGVzID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIpO1xuXG4gICAgICAgIGRhcmtNb2RlTWVkaWFRdWVyeS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBzZXRQcmV2aWV3UHVyZUNzcyhkYXJrTW9kZU1lZGlhUXVlcnkubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHNldEZvbnRTaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1mb250LXNpemUnLCAkKGV2ZW50LnRhcmdldCkudmFsKCkgKyAncHgnKTtcbiAgICB9LFxuXG4gICAgbG9hZFByb2ZpbG9VdGVudGU6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGxvY2F0aW9uLmhyZWYgPSBcIj9vYmplY3Q9UHJvZmlsb1V0ZW50ZVwiO1xuICAgIH0sXG5cbiAgICB2aWV3RGlhbG9nTmV3UGFzc3dvcmQ6IGZ1bmN0aW9uKGlkdXNlciwgb25TdWNjZXNzKXtcbiAgICAgICAgZ2V0SHRtbEZyb21BamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD9vYmplY3Q9UHJvZmlsb1V0ZW50ZSZ0aXBvdmlldz1jaGFuZ2VQYXNzd29yZCZpZD1cIiArIGlkdXNlcixcbiAgICAgICAgICAgIGRpdm5hbWU6IFwiZGlhbG9nQ2hhbmdlUGFzc3dvcmRcIixcbiAgICAgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpYWxvZ0NoYW5nZVBhc3N3b3JkXCIsZnVuY3Rpb24ocil7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFyKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJ2aWV3LnBocFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTpcInBvc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFwiT1BfRlJPTV9BSkFYPTEmSlNPTj0xJnRpcG92aWV3PXNhdmVDaGFuZ2VQYXNzd29yZCZvYmplY3Q9UHJvZmlsb1V0ZW50ZSZpZD1cIiArIGlkdXNlciArIFwiJlwiICsgJChcIiNkaWFsb2dDaGFuZ2VQYXNzd29yZCA6aW5wdXQsIDpjaGVja2JveFwiKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhTdWJtaXRPblN1Y2Nlc3NGdW5jdGlvbihqc29uLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygb25TdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIG9uU3VjY2VzcyhyZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwZXJpb2RvZmlzY2FsZVxuICAgICAqIEBwYXJhbSBpc19wZXJpb2RvZ2VzdGlvbmFsZVxuICAgICAqIEByZXR1cm5zIHtudWxsfHN0cmluZ1tdfVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIERhdGVfX2dldEludGVydmFsbG9Gcm9tUGVyaW9kb0Zpc2NhbGU6IGZ1bmN0aW9uKHBlcmlvZG9maXNjYWxlLCBpc19wZXJpb2RvZ2VzdGlvbmFsZSlcbiAgICB7XG4gICAgICAgIGlmKCFwZXJpb2RvZmlzY2FsZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgdmFyIGRhdGFfZGEgPSAkKFwiI2RhdGFfZGFfZmlzY1wiKS52YWwoKTtcbiAgICAgICAgdmFyIGRhdGFfYSA9ICQoXCIjZGF0YV9hX2Zpc2NcIikudmFsKCk7XG5cbiAgICAgICAgaWYoZ2V0RmxvYXQyKGlzX3BlcmlvZG9nZXN0aW9uYWxlKSA9PT0gMSl7XG4gICAgICAgICAgICBkYXRhX2RhID0gJChcIiNkYXRhX2RhX2dlc3RcIikudmFsKCk7XG4gICAgICAgICAgICBkYXRhX2EgPSAkKFwiI2RhdGFfYV9nZXN0XCIpLnZhbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YV9kYT1wZXJpb2RvZmlzY2FsZS5zdWJzdHIoMCw0KStkYXRhX2RhLnN1YnN0cig0KTtcbiAgICAgICAgaWYoIHBlcmlvZG9maXNjYWxlLmxlbmd0aD41IClcbiAgICAgICAgICAgIGRhdGFfYT1wZXJpb2RvZmlzY2FsZS5zdWJzdHIoNSkrZGF0YV9hLnN1YnN0cig0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGF0YV9hPXBlcmlvZG9maXNjYWxlLnN1YnN0cigwKStkYXRhX2Euc3Vic3RyKDQpO1xuXG4gICAgICAgIHJldHVybiBbZGF0YV9kYSxkYXRhX2FdO1xuICAgIH0sXG5cbiAgICBub29wTG9nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgJC5nZXQoXCJub29wLWxvZ1wiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAvL25vb3BcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHN3aXRjaF9hc191c2VyOiBmdW5jdGlvbigpe1xuICAgICAgICB2YXIgJHN3aXRjaCA9ICQoXCIjc3dpdGNoX2FzX3VzZXJcIik7XG4gICAgICAgIGRpYWxvZ1Nob3coXCJjb25maXJtX2RpYWxvZ19zd2l0Y2hcIiwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgaWYoIXJlcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICB2YXIgdXNlciA9ICRzd2l0Y2gudmFsKCk7XG4gICAgICAgICAgICB3YWl0aW5nKCk7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogXCJhamF4LnBocD9KU09OJm9iamVjdD1JV1VzZXImdGlwb3ZpZXc9c3dpdGNoQXNVc2VyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcInVzZXJcIjogdXNlcixcInN3aXRjaF9wd2RcIjogJChcIiNzd2l0Y2hfcGFzc3dvcmRcIikudmFsKCl9LFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihqc29uKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoanNvbi5yZXQpIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiVXRlbnRlIGluZXNpc3RlbnRlIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHN3aXRjaF90b19hemllbmRhOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgY29kYXppZW5kYT0kKFwiI3N3aXRjaF90b19hemllbmRhXCIpLnZhbCgpO1xuICAgICAgICB3YWl0aW5nMigpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1zd2l0Y2hBemllbmRhJmNvZGljZWNsaWVudGU9XCIrY29kYXppZW5kYSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhqc29uKTtcbiAgICAgICAgICAgICAgICBpZihqc29uLnJldCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb249J2hvbWUucGhwP2lkbWVudT0wJl9fc2NrX189MSc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2FpdGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJBemllbmRhIE5PTiBUUk9WQVRBPGJyPkNvbXBhbnkgTk9UIEZPVU5EXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgZWFuQ2hlY2tEaWdpdDogZnVuY3Rpb24ocyl7XG4gICAgICAgIHZhciByZXN1bHQgPSAwO1xuICAgICAgICBmb3IgKHZhciBjb3VudGVyID0gcy5sZW5ndGgtMTsgY291bnRlciA+PTA7IGNvdW50ZXItLSl7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBwYXJzZUludChzLmNoYXJBdChjb3VudGVyKSkgKiAoMSsoMiooY291bnRlciAlIDIpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgxMCAtIChyZXN1bHQgJSAxMCkpICUgMTA7XG4gICAgfSxcblxuICAgIGdlbmVyYUJhcmNvZGU6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtX2lkLCBwcmV2aWV3X2lkKXtcbiAgICAgICAgcmVxdWlyZShcImpzYmFyY29kZVwiKTtcbiAgICAgICAgdmFyIGJjb2RlID0gKFwiMDAwMDAwMDAwMDAwXCIgKyB2YWx1ZSkuc2xpY2UoLTEyKTtcbiAgICAgICAgYmNvZGUgKz0gZWFuQ2hlY2tEaWdpdChiY29kZSk7XG4gICAgICAgIEpzQmFyY29kZShcIiNcIiArIHByZXZpZXdfaWQsIGJjb2RlLCB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRUFOMTNcIixcbiAgICAgICAgICAgIGZvbnRTaXplOiAxOCxcbiAgICAgICAgICAgIHRleHRNYXJnaW46IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDEyMCxcbiAgICAgICAgICAgIHdpZHRoOiA0LFxuICAgICAgICAgICAgZmxhdDogdHJ1ZVxuICAgICAgICB9KS5yZW5kZXIoKTtcblxuICAgICAgICAkKFwiI1wiICsgZWxlbV9pZCkudmFsKGJjb2RlKTtcbiAgICB9LFxuXG4gICAgZ2V0SHRtbERpYWxvZ0Npc3Rlcm5lOiBmdW5jdGlvbiAob3B0cyl7XG4gICAgICAgIGNvbnN0ICRkaWFsb2cgPSAkKFwiI2RpYWxvZ19jaXN0ZXJuZVwiKTtcbiAgICAgICAgb3B0cy5vYmplY3QgPSAkZGlhbG9nLmRhdGEoXCJvYmplY3RcIik7XG4gICAgICAgIG9wdHMudGlwb3ZpZXcgPSBcImdldEh0bWxEaWFsb2dDaXN0ZXJuZVwiO1xuXG4gICAgICAgIHZhciBhbmFncmFmaWNhX2ZpZWxkID0gXCJhbmFncmFmaWNhX2hpZGRlblwiO1xuICAgICAgICBpZihvcHRzLmFuYWdyYWZpY2FfZmllbGQpIGFuYWdyYWZpY2FfZmllbGQgPSBvcHRzLmFuYWdyYWZpY2FfZmllbGQ7XG4gICAgICAgIG9wdHMuaWRhbmFncmFmaWNhID0gJChcIiNcIiArIGFuYWdyYWZpY2FfZmllbGQpLnZhbEZsb2F0KCk7XG5cbiAgICAgICAgdmFyIGNvbW1pdHRlbnRlX2ZpZWxkID0gXCJhbmFncmFmaWNhM19oaWRkZW5cIjtcbiAgICAgICAgaWYob3B0cy5jb21taXR0ZW50ZV9maWVsZCkgY29tbWl0dGVudGVfZmllbGQgPSBvcHRzLmNvbW1pdHRlbnRlX2ZpZWxkO1xuICAgICAgICBvcHRzLmlkY29tbWl0dGVudGUgPSAkKFwiI1wiICsgY29tbWl0dGVudGVfZmllbGQpLnZhbEZsb2F0KCk7XG5cbiAgICAgICAgdmFyIGRhdGFfZmllbGQgPSBcInJlZ2RhdGFcIjtcbiAgICAgICAgaWYob3B0cy5kYXRhX2ZpZWxkKSBkYXRhX2ZpZWxkID0gb3B0cy5kYXRhX2ZpZWxkO1xuICAgICAgICBvcHRzLmRhdGEgPSAkKFwiI1wiICsgZGF0YV9maWVsZCkudmFsKCk7XG5cbiAgICAgICAgdmFyIG9yYXJpb19maWVsZCA9IFwib3JhcmlvX21vdm1hZ2F6emluaVwiO1xuICAgICAgICBpZihvcHRzLm9yYXJpb19maWVsZCkgb3JhcmlvX2ZpZWxkID0gb3B0cy5vcmFyaW9fZmllbGQ7XG4gICAgICAgIG9wdHMub3JhcmlvID0gJChcIiNcIiArIG9yYXJpb19maWVsZCkudmFsKCk7XG5cbiAgICAgICAgaWYoIW9wdHMuaWRtYWdhenppbm9zb3JnZW50ZSAmJiBvcHRzLmZpZWxkX21hZ2F6emlubylcbiAgICAgICAgICAgIG9wdHMuaWRtYWdhenppbm9zb3JnZW50ZSA9ICQoXCIjXCIgKyBvcHRzLmZpZWxkX21hZ2F6emlubykudmFsKCk7XG4gICAgICAgIGlmIChvcHRzLmFydGljb2xvX2ZpZWxkKVxuICAgICAgICAgICAgb3B0cy5hcnRpY29sb19pZCA9ICQoXCIjXCIgKyBvcHRzLmFydGljb2xvX2ZpZWxkKS52YWxGbG9hdCgpO1xuICAgICAgICBpZiAob3B0cy5jYXVzYWxlX2ZpZWxkKVxuICAgICAgICAgICAgb3B0cy5jYXVzYWxlID0gJChcIiNcIiArIG9wdHMuY2F1c2FsZV9maWVsZCkudmFsRmxvYXQoKTtcbiAgICAgICAgaWYgKG9wdHMuY2hlY2tfdGlwb19tb2xpdHVyZSlcbiAgICAgICAgICAgIG9wdHMuY2F1c2FsZSA9ICQoJ2lucHV0W25hbWU9XCJ0aXBvX21vbGl0dXJhXCJdOmNoZWNrZWQnKS52YWxGbG9hdCgpID09PSAxID8gXCJCM1wiIDogXCJUNFwiO1xuXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gb3B0cy5jYWxsYmFjaztcbiAgICAgICAgb3B0cy5jYWxsYmFjayA9IG51bGw7XG5cbiAgICAgICAgZ2V0SHRtbEZyb21BamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD8xXCIsXG4gICAgICAgICAgICBkaXZuYW1lOiBcImRpYWxvZ19jaXN0ZXJuZVwiLFxuICAgICAgICAgICAgZGF0YTogb3B0cyxcbiAgICAgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2dTZWxlY3RDaXN0ZXJuZTogZnVuY3Rpb24gKG9wdHMpe1xuICAgICAgICBjb25zdCAkc2VsZWN0Q2lzdGVybmEgPSAkKFwiLnNlbGVjdENpc3Rlcm5hXCIpO1xuICAgICAgICAkc2VsZWN0Q2lzdGVybmEub2ZmKCk7XG4gICAgICAgICRzZWxlY3RDaXN0ZXJuYS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgICAgICBvcHRzLmlkbWFnYXp6aW5vc29yZ2VudGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCAkY2lzdGVybmFfdGV4dCA9ICQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCAkY2lzdGVybmFfaWQgPSAkKFwiI1wiICsgJGNpc3Rlcm5hX3RleHQuYXR0cihcImlkXCIpLnJlcGxhY2UoXCJfdGV4dF9cIiwgXCJcIikpO1xuICAgICAgICAgICAgY29uc3QgJGRpYWxvZyA9ICQoXCIjZGlhbG9nX2Npc3Rlcm5lXCIpO1xuICAgICAgICAgICAgY29uc3QgaWRkZXBvc2l0byA9ICRjaXN0ZXJuYV9pZC5kYXRhKFwiZGlhbG9nLWlkZGVwb3NpdG9cIik7XG4gICAgICAgICAgICBjb25zdCBmaWVsZF9tYWdhenppbm8gPSAkY2lzdGVybmFfaWQuZGF0YShcIm1hZ2F6emlub19maWVsZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGFydGljb2xvX2ZpZWxkID0gJGNpc3Rlcm5hX2lkLmRhdGEoXCJhcnRpY29sb19maWVsZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNhdXNhbGVfZmllbGQgPSAkY2lzdGVybmFfaWQuZGF0YShcImNhdXNhbGVfZmllbGRcIik7XG4gICAgICAgICAgICBjb25zdCBjaGVja190aXBvX21vbGl0dXJhID0gcGFyc2VJbnQoJGNpc3Rlcm5hX2lkLmRhdGEoXCJjaGVja190aXBvX21vbGl0dXJhXCIpKTtcbiAgICAgICAgICAgIGlmIChpZGRlcG9zaXRvKSBvcHRzLmlkbWFnYXp6aW5vc29yZ2VudGUgPSBpZGRlcG9zaXRvO1xuICAgICAgICAgICAgaWYgKGZpZWxkX21hZ2F6emlubykgb3B0cy5maWVsZF9tYWdhenppbm8gPSBmaWVsZF9tYWdhenppbm87XG4gICAgICAgICAgICBpZiAoYXJ0aWNvbG9fZmllbGQpIG9wdHMuYXJ0aWNvbG9fZmllbGQgPSBhcnRpY29sb19maWVsZDtcbiAgICAgICAgICAgIGlmIChjYXVzYWxlX2ZpZWxkKSBvcHRzLmNhdXNhbGVfZmllbGQgPSBjYXVzYWxlX2ZpZWxkO1xuICAgICAgICAgICAgaWYgKGNoZWNrX3RpcG9fbW9saXR1cmEpIG9wdHMuY2hlY2tfdGlwb19tb2xpdHVyZSA9IDE7XG5cbiAgICAgICAgICAgIHdhaXRpbmcoKTtcblxuICAgICAgICAgICAgb3B0cy5jYWxsYmFjayA9IGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGRpYWxvZ1Nob3coXCJkaWFsb2dfY2lzdGVybmVcIiwgZnVuY3Rpb24gKCkge30sIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRjaXN0ZXJuZUVsZW0gPSAkKFwiLmNpc3Rlcm5hRWxlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5lRWxlbS5vZmYoKTtcbiAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5lRWxlbS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gJCh0aGlzKS5kYXRhKFwiaW5kZXhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkaHJlZiA9ICQoXCIjZGlhbG9nX2Npc3Rlcm5hX2NvZGljZV9cIiArIGluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5hX3RleHQudmFsKCRocmVmLmRhdGEoXCJkZXNjcml6aW9uZV9jaXN0ZXJuYVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfaWQudmFsKCRocmVmLmRhdGEoXCJjaXN0ZXJuYV9pZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfaWQuZGF0YShcImRpYWxvZy1pbmRleFwiLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfaWQuZGF0YShcImRpYWxvZy1pbmZvXCIsICRocmVmLmRhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZGlhbG9nLmRhdGEoJ2xvYWRlZCcsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkZGlhbG9nLmRpYWxvZyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5hX2lkLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNlbGVuY29fY2lzdGVybmVcIikuRGF0YVRhYmxlKCkuY29sdW1ucy5hZGp1c3QoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnZXRIdG1sRGlhbG9nQ2lzdGVybmUob3B0cyk7XG4gICAgICAgIH0pXG4gICAgICAgIGlmKG9wdHMuYWZ0ZXJMb2FkZWQgJiYgdHlwZW9mIG9wdHMuYWZ0ZXJMb2FkZWQgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIG9wdHMuYWZ0ZXJMb2FkZWQoKTtcbiAgICB9LFxuXG4gICAgZ2V0RGlhbG9nU3RhbmRhcmRDaXN0ZXJuZUZyYW50b2lvOiBmdW5jdGlvbiAob3B0cyl7XG4gICAgICAgIGlmKCFvcHRzKSBvcHRzID0ge1xuICAgICAgICAgICAgZGlhbG9nOiBcImRpYWxvZ19jaXN0ZXJuZVwiLFxuICAgICAgICAgICAgaWR0aXBvc2Z1c286IDEsXG4gICAgICAgICAgICBhZnRlckxvYWRlZDogbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmKCFvcHRzLmRpYWxvZykgb3B0cy5kaWFsb2cgPSBcImRpYWxvZ19jaXN0ZXJuZVwiO1xuXG4gICAgICAgIHNob3dEaWFsb2dTZWxlY3RDaXN0ZXJuZShvcHRzKTtcbiAgICB9LFxuXG4gICAgc2VsZWN0TXVsdGlJdGVtczogZnVuY3Rpb24ob3B0cyl7XG4gICAgICAgIGNvbnN0IGlkc19pdGVtcyA9ICQoXCIjXCIgKyBvcHRzLmhpZGRlbl9pZHMpO1xuICAgICAgICBjb25zdCAkaWRfaXRlbSA9ICQoXCIjXCIgKyBvcHRzLmF1dG9jb21wbGV0ZSArIFwiX2hpZGRlblwiKTtcbiAgICAgICAgbGV0IGlkc19hbmFncmFmaWNoZSA9ICFpZHNfaXRlbXMudmFsKCkgPyBbXSA6IGlkc19pdGVtcy52YWwoKS5zcGxpdChcIixcIik7XG4gICAgICAgIGlkc19hbmFncmFmaWNoZS5wdXNoKCRpZF9pdGVtLnZhbEZsb2F0KCkpO1xuICAgICAgICBpZHNfYW5hZ3JhZmljaGUgPSBpZHNfYW5hZ3JhZmljaGUuam9pbihcIixcIik7XG4gICAgICAgIGlkc19pdGVtcy52YWwoIGlkc19hbmFncmFmaWNoZS50b1N0cmluZygpICk7XG4gICAgICAgIGlmKHR5cGVvZiBvcHRzLmNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIG9wdHMuY2FsbGJhY2sob3B0cyk7XG4gICAgfSxcblxuICAgIHJlbW92ZUlkRnJvbU11bHRpSXRlbXM6IGZ1bmN0aW9uIChvcHRzKXtcbiAgICAgICAgY29uc3QgJGlkc19pdGVtcyA9ICQoXCIjXCIgKyBvcHRzLmhpZGRlbl9pZHMpO1xuICAgICAgICBsZXQgaWRzX2l0ZW1zID0gJGlkc19pdGVtcy52YWwoKS5zcGxpdChcIixcIik7XG4gICAgICAgIGxldCBuZXdfaWRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPCBpZHNfaXRlbXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgaWYocGFyc2VJbnQob3B0cy5pZCkgPT09IHBhcnNlSW50KGlkc19pdGVtc1tpXSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbmV3X2lkcy5wdXNoKGlkc19pdGVtc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3X2lkcyA9IG5ld19pZHMuam9pbihcIixcIik7XG4gICAgICAgICRpZHNfaXRlbXMudmFsKG5ld19pZHMpO1xuICAgICAgICBpZih0eXBlb2Ygb3B0cy5jYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSBvcHRzLmNhbGxiYWNrKG9wdHMpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVEaXZFbnRpdHlTZWxlemlvbmF0ZTogZnVuY3Rpb24gKG9wdHMpe1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZ2V0SHRtbEZyb21BamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD8xXCIsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiBvcHRzLm9iamVjdCxcbiAgICAgICAgICAgICAgICB0aXBvdmlldzogb3B0cy50aXBvdmlldyxcbiAgICAgICAgICAgICAgICBlbnRpdHlfaWRzOiAkKFwiI1wiICsgb3B0cy5oaWRkZW5faWRzKS52YWwoKSxcbiAgICAgICAgICAgICAgICBoaWRkZW5faWRzOiBvcHRzLmhpZGRlbl9pZHMsXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBvcHRzLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgICAgICBkaXY6IG9wdHMuZGl2LFxuICAgICAgICAgICAgICAgIG1heF9lbnRpdGllc19zaG93bjogb3B0cy5tYXhfZW50aXRpZXNfc2hvd25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXZuYW1lOiBvcHRzLmRpdixcbiAgICAgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgY29uc3QgJGJ0biA9ICQoXCIjc3Z1b3RhX1wiICsgb3B0cy5kaXYpO1xuICAgICAgICAgICAgICAgIGNvbnN0ICR4ID0gJChcIi5yZW1vdmVTaW5nbGVFbGVtZW50XCIpO1xuICAgICAgICAgICAgICAgICRidG4uZm9jdXMoKTtcblxuXG4gICAgICAgICAgICAgICAgJChcIiNcIiArIG9wdHMuYXV0b2NvbXBsZXRlKS52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgJChcIiNcIiArIG9wdHMuYXV0b2NvbXBsZXRlICsgXCJfaGlkZGVuXCIpLnZhbCgwKTtcblxuICAgICAgICAgICAgICAgICRidG4ub2ZmKCk7XG4gICAgICAgICAgICAgICAgJGJ0bi5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmVyYXNlTXVsdGlJdGVtcyhvcHRzKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICR4Lm9mZigpO1xuICAgICAgICAgICAgICAgICR4Lm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KXtcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5pZCA9ICQoZXZlbnQudGFyZ2V0KS5kYXRhKFwiaWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlSWRGcm9tTXVsdGlJdGVtcyhvcHRzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZURpdk5vbWluYXRpdmlTZWxlemlvbmF0aTogZnVuY3Rpb24gKG9wdHMpe1xuICAgICAgICBvcHRzLm9iamVjdCA9IFwiQW5hZ3JhZmljYTJcIjtcbiAgICAgICAgb3B0cy50aXBvdmlldyA9IFwidmlld0ZpZWxkc2V0QW5hZ3JhZmljaGVTZWxlemlvbmF0ZVwiO1xuICAgICAgICB0aGlzLnVwZGF0ZURpdkVudGl0eVNlbGV6aW9uYXRlKG9wdHMpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVEaXZBcnRpY29saVNlbGV6aW9uYXRpOiBmdW5jdGlvbiAob3B0cyl7XG4gICAgICAgIG9wdHMub2JqZWN0ID0gXCJBcnRpY29sb1wiO1xuICAgICAgICBvcHRzLnRpcG92aWV3ID0gXCJ2aWV3RmllbGRzZXRBcnRpY29saVNlbGV6aW9uYXRpXCI7XG4gICAgICAgIHRoaXMudXBkYXRlRGl2RW50aXR5U2VsZXppb25hdGUob3B0cyk7XG4gICAgfSxcblxuICAgIGVyYXNlTXVsdGlJdGVtczogZnVuY3Rpb24gKG9wdHMpe1xuICAgICAgICAkKFwiI1wiICsgb3B0cy5oaWRkZW5faWRzKS52YWwoXCJcIik7XG4gICAgICAgICQoXCIjXCIgKyBvcHRzLmF1dG9jb21wbGV0ZSkudmFsKFwiXCIpO1xuICAgICAgICAkKFwiI1wiICsgb3B0cy5hdXRvY29tcGxldGUgKyBcIl9oaWRkZW5cIikudmFsKDApO1xuICAgICAgICBpZih0eXBlb2Ygb3B0cy5jYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSBvcHRzLmNhbGxiYWNrKG9wdHMpO1xuICAgIH0sXG5cbiAgICBvcGVuRGlhbG9nUmljZXJjYUFuYWdyYWZpY2E6IGZ1bmN0aW9uKG9wdHMpIHtcbiAgICAgICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgICAgIGlmICghb3B0cy5vYmplY3QpIG9wdHMub2JqZWN0ID0gXCJBbmFncmFmaWNhMlwiO1xuICAgICAgICBpZiAoIW9wdHMudGlwb3ZpZXcpIG9wdHMudGlwb3ZpZXcgPSBcIm9wZW5EaWFsb2dSaWNlcmNhQW5hZ3JhZmljYVwiO1xuICAgICAgICBpZiAoIW9wdHMuaGlkZGVuX2lkcykgb3B0cy5oaWRkZW5faWRzID0gXCJhbmFncmFmaWNoZV9pZHNcIjtcblxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgZ2V0SHRtbEZyb21BamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD8xXCIsXG4gICAgICAgICAgICBkaXZuYW1lOiBcImRpYWxvZ19yaWNlcmNhX2FuYWdyYWZpY2FcIixcbiAgICAgICAgICAgIGRhdGE6IG9wdHMsXG4gICAgICAgICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgIGRpYWxvZ1Nob3coXCJkaWFsb2dfcmljZXJjYV9hbmFncmFmaWNhXCIsIGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmFncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAkKFwiLmNoa19kaWFsb2dfcmljZXJjYV9hbmFncmFmaWNoZVwiKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5hZ19pZCA9IHBhcnNlSW50KCQodGhpcykuZGF0YShcImFuYWdyYWZpY2FfaWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5hZ3MucHVzaChhbmFnX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcIiNcIiArIG9wdHMuaGlkZGVuX2lkcykudmFsKGFuYWdzLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVEaXZOb21pbmF0aXZpU2VsZXppb25hdGkob3B0cyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0RGl2RGV0dGFnbGlvRGljaGlhcmF6aW9uZTogZnVuY3Rpb24ob3B0cyl7XG4gICAgICAgIGlmKCFvcHRzLm9iamVjdCkgb3B0cy5vYmplY3Q9IFwiRGljaGlhcmF6aW9uaUludGVudG9cIjtcbiAgICAgICAgb3B0cy50aXBvdmlldyA9IFwiZ2V0RGl2RGV0dGFnbGlvRGljaGlhcmF6aW9uZVwiO1xuICAgICAgICBsZXQgY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBpZih0eXBlb2Ygb3B0cy5vblN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikgY2FsbGJhY2sgPSBvcHRzLm9uU3VjY2VzcztcbiAgICAgICAgb3B0cy5vblN1Y2Nlc3MgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgZ2V0SHRtbEZyb21BamF4KHtcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocD8xXCIsXG4gICAgICAgICAgICBkYXRhOiBvcHRzLFxuICAgICAgICAgICAgZGl2bmFtZTogb3B0cy5kaXYsXG4gICAgICAgICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSBjYWxsYmFjayhvcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgY291bnRkb3duSnM6IGZ1bmN0aW9uIChvcHRzKXtcbiAgICAgICAgLy8gU2V0IHRoZSBkYXRlIHdlJ3JlIGNvdW50aW5nIGRvd24gdG9cbiAgICAgICAgY29uc3QgY291bnREb3duRGF0ZSA9IG1vbWVudChvcHRzLmRhdGFfZnV0dXJvKS5mb3JtYXQoXCJYXCIpO25ldyBEYXRlKCkuZ2V0RGF0ZSgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY291bnQgZG93biBldmVyeSAxIHNlY29uZFxuICAgICAgICBjb25zdCB4ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCB0b2RheSdzIGRhdGUgYW5kIHRpbWVcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpLmZvcm1hdChcIlhcIik7XG5cbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIGRpc3RhbmNlIGJldHdlZW4gbm93IGFuZCB0aGUgY291bnQgZG93biBkYXRlXG4gICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBjb3VudERvd25EYXRlIC0gbm93O1xuXG4gICAgICAgICAgICAvLyBUaW1lIGNhbGN1bGF0aW9ucyBmb3IgZGF5cywgaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHNcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSB7fTtcbiAgICAgICAgICAgIHRleHQuZGF5cyA9IE1hdGguZmxvb3IoZGlzdGFuY2UgLyAoNjAgKiA2MCAqIDYwKSAlIDYwKTtcbiAgICAgICAgICAgIHRleHQuaG91cnMgPSBNYXRoLmZsb29yKGRpc3RhbmNlIC8gKDYwICogNjApICUgNjApO1xuICAgICAgICAgICAgdGV4dC5taW51dGVzID0gTWF0aC5mbG9vcihkaXN0YW5jZSAvIDYwICUgNjApO1xuICAgICAgICAgICAgdGV4dC5zZWNvbmRzID0gTWF0aC5mbG9vcihkaXN0YW5jZSAlIDYwKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgICAgICAgIC8vIE91dHB1dCB0aGUgcmVzdWx0IGluIGFuIGVsZW1lbnQgd2l0aCBpZD1cImRlbW9cIlxuICAgICAgICAgICAgY29uc3QgdGV4dFRvUHJpbnQgPSAob3B0cy5zaG93RGF5cyA/IHRleHQuZGF5cyArIFwiZCBcIiA6IFwiXCIpICsgKG9wdHMuc2hvd0hvdXJzID8gdGV4dC5ob3VycyArIFwiaCBcIiA6IFwiXCIpICsgKG9wdHMuc2hvd01pbnV0ZXMgPyB0ZXh0Lm1pbnV0ZXMgKyBcIm0gXCIgOiBcIlwiKSArIChvcHRzLnNob3dTZWNvbmRzID8gdGV4dC5zZWNvbmRzICsgXCJzIFwiIDogXCJcIilcbiAgICAgICAgICAgIGNvbnN0ICRlbGVtID0gJChcIiNcIiArIG9wdHMuZWxlbSk7XG4gICAgICAgICAgICAkZWxlbS5odG1sKHRleHRUb1ByaW50KTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGNvdW50IGRvd24gaXMgb3Zlciwgd3JpdGUgc29tZSB0ZXh0XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh4KTtcbiAgICAgICAgICAgICAgICAkZWxlbS5odG1sKChvcHRzLnNob3dEYXlzID8gXCIwZCBcIiA6IFwiXCIpICsgKG9wdHMuc2hvd0hvdXJzID8gXCIwaCBcIiA6IFwiXCIpICsgKG9wdHMuc2hvd01pbnV0ZXMgPyBcIjBtIFwiIDogXCJcIikgKyAob3B0cy5zaG93U2Vjb25kcyA/IFwiMHMgXCIgOiBcIlwiKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgfSxcblxuICAgIGNvbmZpcm1CdXR0b25FdmVudDogZnVuY3Rpb24gKGlkKXtcbiAgICAgICAgY29uc3QgJGJ1dHRvbl9pZCA9ICQoXCIjXCIgKyBpZCk7XG4gICAgICAgIGxldCBidXR0b25fYm9vbCA9IGdldEZsb2F0KCRidXR0b25faWQuZGF0YShcImJ1dHRvbl9ib29sXCIpKTtcblxuICAgICAgICBpZiAoYnV0dG9uX2Jvb2wpIHtcbiAgICAgICAgICAgICRidXR0b25faWQuYW5pbWF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyMwMDk5MDAnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkYnV0dG9uX2lkLnRleHQoJGJ1dHRvbl9pZC5kYXRhKFwiZmluYWxfdGV4dFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICRidXR0b25faWQuZGF0YShcImJ1dHRvbl9ib29sXCIsIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZhbCgkYnV0dG9uX2lkLmRhdGEoXCJvbmNsaWNrXCIpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRJbWFnZUZFUmVnaXN0cm86IGZ1bmN0aW9uKGpzb24sIGlkLCBpbWFnZSl7XG4gICAgICAgIGlmKCFqc29uLnJldCkge1xuICAgICAgICAgICAgaWYgKGpzb24ubXNnKSBhbGVydChqc29uLm1zZyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgJGxpbmsgPSAkKFwiI3BheG1sX1wiICsgaWQpO1xuICAgICAgICBpZiAoJGxpbmsuZmluZChcInN2Z1wiKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uaW1hZ2UubWF0Y2hBbGwoL18oLio/KVxcLnBuZy9nbSldO1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMpXG4gICAgICAgICAgICAgICAgJGxpbmsuYWRkQ2xhc3MoXCJmZS1zdGF0dXMtaWNvbi1cIiArIG1hdGNoZXNbMF1bMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGxpbmsuaHRtbChcIjxpbWcgYWx0PSdmZScgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyBzcmM9J2ltYWdlcy9cIiArIGltYWdlICsgXCInPlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBhZGp1c3REYXRhVGFibGVzOiBmdW5jdGlvbiAoKXtcbiAgICAgICAgJCggJC5mbi5kYXRhVGFibGUudGFibGVzKCB0cnVlICkgKS5EYXRhVGFibGUoKS5jb2x1bW5zLmFkanVzdCgpO1xuICAgIH0sXG5cbiAgICBvblZpc2libGU6IGZ1bmN0aW9uIChlbGVtZW50LCBjYWxsYmFjaykge1xuICAgICAgICBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkub2JzZXJ2ZShlbGVtZW50KTtcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfSxcblxuICAgIG9ic2VydmVyOiBmdW5jdGlvbiAoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZW50cnksIG9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy9vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgIH0sXG5cbiAgICBnZXRNYXhWaXNpYmxlWkluZGV4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5IConKSk7XG5cbiAgICAgICAgY29uc3QgekluZGV4ZXMgPSBlbGVtZW50cy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgICAgICAgICBzdHlsZS52aXNpYmlsaXR5ICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAgICAgICAgICAgICBlbC5vZmZzZXRXaWR0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZWwub2Zmc2V0SGVpZ2h0ID4gMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KS5tYXAoZWwgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbC5pZCA9PT0gXCJzaWRyXCIpIHJldHVybiBOYU47XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnpJbmRleCk7XG4gICAgICAgICAgICB9KS5maWx0ZXIoekluZGV4ID0+ICFpc05hTih6SW5kZXgpKTtcblxuICAgICAgICByZXR1cm4gekluZGV4ZXMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLnpJbmRleGVzKSA6IDA7XG4gICAgfSxcblxuICAgIGRlbGV0ZUpxdWVyeVVwbG9hZDogZnVuY3Rpb24gKGVsZW0pe1xuICAgICAgICBjb25zdCBpZCA9ICQoZWxlbSkuZGF0YShcImlkXCIpO1xuXG4gICAgICAgIGNvbnN0IGNoZWNrID0gJChcIiNteWZpbGVfZGVsX1wiICsgaWQpO1xuICAgICAgICBJV0NvbmZpcm1UcnVlRmFsc2UoY2hlY2suZGF0YShcImVsaW1pbmEtdGV4dFwiKSwgZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIGlmKHJlcyl7XG4gICAgICAgICAgICAgICAgJChcIiNub21lZmlsZV9cIiArIGlkKS52YWwoXCJcIik7XG4gICAgICAgICAgICAgICAgJChcIiNpZHVwbG9hZF9cIiArIGlkKS52YWwoMCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIjc3Bhbl9kcmFkRHJvcFN0cl9cIiArIGlkKTtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fZHJhZERyb3BTdHJfXCIgKyBpZCkuaHRtbChjaGVjay5kYXRhKFwidHJhc2NpbmEtdGV4dFwiKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25kZWxldGVDYWxsYmFjayA9IGNoZWNrLmRhdGEoXCJvbmRlbGV0ZV9jYWxsYmFja1wiKTtcbiAgICAgICAgICAgICAgICBpZihvbmRlbGV0ZUNhbGxiYWNrKSBldmFsKG9uZGVsZXRlQ2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoY2hlY2suaXMoJzpjaGVja2VkJykpIGNoZWNrLnByb3AoXCJjaGVja2VkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIGVsc2UgY2hlY2sucHJvcChcImNoZWNrZWRcIiwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZWxvYWRDb21wb25lbnRzOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGZyb21fZGF0YXRhYmxlcyl7XG4gICAgICAgIGlmKCFzZWxlY3Rvcikgc2VsZWN0b3IgPSBcIlwiO1xuXG4gICAgICAgIGlmKCFmcm9tX2RhdGF0YWJsZXMpXG4gICAgICAgICAgICAkKHNlbGVjdG9yICsgXCIuSVdEYXRhVGFibGVzXCIpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICBJV0RhdGF0YWJsZS5idWlsZERhdGF0YWJsZXModGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvcmUgY2FyaWNhbWVudG8gRGF0YXRhYmxlOiBcIiArICQodGhpcykuYXR0cihcImlkXCIpKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAkKHNlbGVjdG9yICsgXCIuaXdTZWxlY3QyXCIpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBJV0RhdGF0YWJsZS5idWlsZFNlbGVjdDIodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaXdDdXJyZW5jeUVsZW1lbnQoKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtzZWxlY3RvciArIFwiLml3LWF1dG9jb21wbGV0ZS1pbnB1dFwiLCBzZWxlY3RvciArIFwiLmRhdGVwaWNrZXJcIiwgc2VsZWN0b3IgKyBcIi5pdy1xdGlwLWpxdWVyeS11aVwiLCBzZWxlY3RvciArIFwiLml3LW1pbmljb2xvcnNcIiwgc2VsZWN0b3IgKyBcIi5pdy1kcm9wZG93bi1tdWx0aXNlbGVjdFwiLCBzZWxlY3RvciArIFwiLml3LXNpbXBsZS14bWxcIiwgc2VsZWN0b3IgKyBcIi5pdy10aW1lZW50cnlcIl07XG5cbiAgICAgICAgZWxlbWVudHMubWFwKGZ1bmN0aW9uIChlbGVtKXtcbiAgICAgICAgICAgICQoZWxlbSkuZWFjaChmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgICAgICBldmFsKCQodGhpcykuZGF0YShcIml3ZnVuY3Rpb25cIikpO1xuICAgICAgICAgICAgICAgIGlmKGVsZW0gPT09IHNlbGVjdG9yICsgXCIuaXctYXV0b2NvbXBsZXRlLWlucHV0XCIpXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXV0b2NvbXBsZXRlT25Gb2N1c0V2ZW50KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCggc2VsZWN0b3IgKyBcIi5pdy1qcXVlcnktdXBsb2FkXCIpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBJV0RhdGF0YWJsZS5idWlsZEpxdWVyeVVwbG9hZEZpbGUodGhpcyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgJChzZWxlY3RvciArIFwiLml3LWNrZWRpdG9yXCIpLmVhY2goZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBJV0RhdGF0YWJsZS5idWlsZENrRWRpdG9yKHRoaXMpO1xuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBlbGVjdHJvbkFwaTogZnVuY3Rpb24gKG9wdHMpIHtcbiAgICAgICAgY29uc3QgJGVsZWN0cm9uX3Rva2VuID0gJChcIiNlbGVjdHJvbl90b2tlblwiKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBiYXNlVXJsOiBnZXRGbG9hdDIoJGVsZWN0cm9uX3Rva2VuLmRhdGEoXCJlbGVjdHJvbl9hcGlcIikpID09PSAxID8gXCJodHRwczovL2xvY2FsaG9zdC5pd2FwcHMuaXQ6MzQzM1wiIDogXCJodHRwczovL2xvY2FsaG9zdDozNDMzXCIsXG4gICAgICAgICAgICByb3V0ZTogXCIvXCIsXG4gICAgICAgICAgICB0eXBlOiBcImdldFwiLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljICcgKyAkZWxlY3Ryb25fdG9rZW4udmFsKCksXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxuICAgICAgICAgICAgc2hvd193YWl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZUNvbnNvbGVMb2c6IGZhbHNlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7Li4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdHN9O1xuICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMuYmFzZVVybCArIG9wdGlvbnMucm91dGU7XG4gICAgICAgIGlmKG9wdGlvbnMuc2hvd193YWl0aW5nKSB3YWl0aW5nKHRydWUpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5zaG93X3dhaXRpbmcpIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpzb24pO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN1Y2Nlc3NDYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zdWNjZXNzQ2FsbGJhY2soanNvbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zLnNob3dfd2FpdGluZykgd2FpdGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yTXNnID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2cgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9ICdFcnJvciAnICsgeGhyLnN0YXR1cyArICc8YnIgLz4nICsgZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy51c2VDb25zb2xlTG9nKSBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgZWxzZSBhbGVydChlcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXJyb3JDYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvckNhbGxiYWNrKGVycm9yLCB4aHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBhdnZpYVBlc2F0YU9kZWNhOiBmdW5jdGlvbiAob3B0cyl7XG4gICAgICAgIGlmKG9wdHMuc2hvd193YWl0aW5nKSB3YWl0aW5nKHRydWUpO1xuICAgICAgICBpZighb3B0cy5yb3V0ZSkgb3B0cy5yb3V0ZSA9IFwicmVhZFBlc29cIjtcbiAgICAgICAgY29uc3QgJGVsZWN0cm9uX3Rva2VuID0gJChcIiNlbGVjdHJvbl90b2tlblwiKTtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0RmxvYXQyKCRlbGVjdHJvbl90b2tlbi5kYXRhKFwiZWxlY3Ryb25fYXBpXCIpKSA9PT0gMSA/IFwiaHR0cHM6Ly9sb2NhbGhvc3QuaXdhcHBzLml0OjM0MzMvXCIgOiBcImh0dHBzOi8vbG9jYWxob3N0OjM0MzMvXCJcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogdXJsICsgb3B0cy5yb3V0ZSxcbiAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgICAgICAgICBjcm9zc0RvbWFpbjogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyAnICsgJGVsZWN0cm9uX3Rva2VuLnZhbCgpLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikge1xuICAgICAgICAgICAgICAgIGlmKG9wdHMuc2hvd193YWl0aW5nKSB3YWl0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhqc29uKTtcbiAgICAgICAgICAgICAgICBpZiAoanNvbi5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENNRCBTVEFUVVMgTkVUIFRBUkUgQVdTIFBDUyBDT0QxIENPRDIgUFJPR1JcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFSRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAvKD88Q01EPltBLVpdKSg/PFNUQVRVUz5cXHcpKD88TkVUPi57N30pKD88VEFSRT4uezd9KSg/PEFXUz4uezd9KSg/PFBDUz4uezZ9KSg/PENPRDE+Lns2fSkoPzxDT0QyPi57Nn0pKD88UFJPR1I+Lns3fSkvZ20uZXhlYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICApLmdyb3VwcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9NYW50ZW5nbyAzIGRlY2ltYWxpIGFsbCdhcnJvdG9uZGFtZW50byBpbiBjYXNvIGRpIGJpbGFuY2UgY29uIHVtIGluIGdyYW1taVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ldHRvID0gTWF0aC5yb3VuZChnZXRGbG9hdChORVQpICogMTAwMCkgLyAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmEgPSBNYXRoLnJvdW5kKGdldEZsb2F0KFRBUkUpICogMTAwMCkgLyAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnN1Y2Nlc3MobmV0dG8sIHRhcmEsIGpzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygb3B0cy5lcnJvciA9PT0gXCJmdW5jdGlvblwiKSBvcHRzLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgaWYob3B0cy5zaG93X3dhaXRpbmcpIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGxldCBlcnJvck1zZyA9ICcnO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2cgPSBlcnJvci5tZXNzYWdlO1xuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTXNnID0geGhyLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAnRXJyb3IgJyArIHhoci5zdGF0dXMgKyAnPGJyIC8+JyArIGVycm9yTXNnO1xuICAgICAgICAgICAgICAgIGlmKG9wdHMudXNlQ29uc29sZUxvZykgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICAgICAgICAgIGVsc2UgYWxlcnQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBvcHRzLmVycm9yID09PSBcImZ1bmN0aW9uXCIpIG9wdHMuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBhdnZpYVBlc2F0YVZlZ2E6IGZ1bmN0aW9uIChvcHRzKXtcbiAgICAgICAgZWxlY3Ryb25BcGkoe1xuICAgICAgICAgICAgcm91dGU6IFwiL1wiICsgb3B0cy5yb3V0ZSxcbiAgICAgICAgICAgIHNob3dfd2FpdGluZzogb3B0cy5zaG93X3dhaXRpbmcsXG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2s6IGZ1bmN0aW9uIChqc29uKXtcbiAgICAgICAgICAgICAgICBpZiAoanNvbi5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNUWCBTVEFUVVMgTkVUVE8oNikgTE9SRE8gKDYpIEVUWCBDIEMgRU9UXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUVE8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTE9SRE8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVFVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IC8oPzxTVEFUVVM+XFx3KSg/PE5FVFRPPi57Nn0pKD88TE9SRE8+Lns2fSkvZ20uZXhlYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICApLmdyb3VwcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9NYW50ZW5nbyAzIGRlY2ltYWxpIGFsbCdhcnJvdG9uZGFtZW50byBpbiBjYXNvIGRpIGJpbGFuY2UgY29uIHVtIGluIGdyYW1taVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ldHRvID0gTWF0aC5yb3VuZChnZXRGbG9hdChORVRUTykgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbG9yZG8gPSBNYXRoLnJvdW5kKGdldEZsb2F0KExPUkRPKSAqIDEwMDApIC8gMTAwMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5zdWNjZXNzKG5ldHRvLCBsb3JkbywganNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBvcHRzLmVycm9yID09PSBcImZ1bmN0aW9uXCIpIG9wdHMuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBkaXJlY3RQcmludCA6IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgLyogcHJpbnRlciAoIHN0cmluZywgb3B0aW9uYWwpOiBTZW5kcyB0aGUgZmlsZSB0byB0aGUgc3BlY2lmaWVkIHByaW50ZXIuXG4gICAgICAgIHBhZ2VzIChzdHJpbmcsIG9wdGlvbmFsKTogU3BlY2lmaWVzIHdoaWNoIHBhZ2VzIHRvIHByaW50IGluIHRoZSBQREYgZG9jdW1lbnQuXG4gICAgICAgIHN1YnNldCAoc3RyaW5nLCBvcHRpb25hbCk6IFByaW50cyBvZGQgcGFnZXMgb25seSB3aGVuIHRoZSB2YWx1ZSBpcyBvZGQsIGFuZCBldmVuIHBhZ2VzIG9ubHkgd2hlbiBpdCBpcyBldmVuLlxuICAgICAgICBvcmllbnRhdGlvbiAoc3RyaW5nLCBvcHRpb25hbCk6IFByb3ZpZGVzIDkwLWRlZ3JlZSByb3RhdGlvbiBvZiBjb250ZW50cyAoTk9UIHRoZSByb3RhdGlvbiBvZiBwYXBlciB3aGljaCBtdXN0IGJlIHByZS1zZXQgYnkgdGhlIGNob2ljZSBvZiBwcmludGVyIGRlZmF1bHRzKS5cbiAgICAgICAgc2NhbGUgKHN0cmluZywgb3B0aW9uYWwpOiBTdXBwb3J0ZWQgbmFtZXMgYXJlIG5vc2NhbGUsIHNocmluaywgYW5kIGZpdC5cbiAgICAgICAgbW9ub2Nocm9tZSAoYm9vbGVhbiwgb3B0aW9uYWwpOiBQcmludHMgdGhlIGRvY3VtZW50IGluIGJsYWNrIGFuZCB3aGl0ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAgICAgIHNpZGUgKHN0cmluZywgb3B0aW9uYWwpOiBTdXBwb3J0ZWQgbmFtZXMgYXJlIGR1cGxleCwgZHVwbGV4c2hvcnQsIGR1cGxleGxvbmcsIGFuZCBzaW1wbGV4LlxuICAgICAgICBiaW4gKHN0cmluZywgb3B0aW9uYWwpOiBTZWxlY3QgdHJheSB0byBwcmludCB0by4gTnVtYmVyIG9yIG5hbWUuXG4gICAgICAgIHBhcGVyU2l6ZSAoc3RyaW5nLCBvcHRpb25hbCk6IFNwZWNpZmllcyB0aGUgcGFwZXIgc2l6ZS4gQTIsIEEzLCBBNCwgQTUsIEE2LCBsZXR0ZXIsIGxlZ2FsLCB0YWJsb2lkLCBzdGF0ZW1lbnQsIG9yIGEgbmFtZSBzZWxlY3RhYmxlIGZyb20geW91ciBwcmludGVyIHNldHRpbmdzLlxuICAgICAgICBzaWxlbnQgKGJvb2xlYW4sIG9wdGlvbmFsKTogU2lsZW5jZXMgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgIHByaW50RGlhbG9nIChib29sZWFuLCBvcHRpb25hbCk6IERpc3BsYXlzIHRoZSBwcmludCBkaWFsb2cgZm9yIGFsbCB0aGUgZmlsZXMgaW5kaWNhdGVkIG9uIHRoaXMgY29tbWFuZCBsaW5lLlxuICAgICAgICBjb3BpZXMobnVtYmVyLCBvcHRpb25hbCk6IFNwZWNpZmllcyBob3cgbWFueSBjb3BpZXMgd2lsbCBiZSBwcmludGVkLiAqL1xuXG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICBwcmludGVyOiBudWxsLFxuICAgICAgICAgICAgcGFnZXM6IG51bGwsXG4gICAgICAgICAgICBzdWJzZXQ6IG51bGwsXG4gICAgICAgICAgICBzY2FsZTogbnVsbCxcbiAgICAgICAgICAgIG1vbm9jaHJvbWU6IGZhbHNlLFxuICAgICAgICAgICAgc2lkZTogJ3NpbXBsZXgnLFxuICAgICAgICAgICAgYmluOiBudWxsLFxuICAgICAgICAgICAgcGFwZXJTaXplOiAnQTQnLFxuICAgICAgICAgICAgcHJpbnREaWFsb2c6IGZhbHNlLFxuICAgICAgICAgICAgY29waWVzOiAxXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gey4uLm9wdHMsIC4uLm9wdGlvbnN9O1xuICAgICAgICBjb25zdCBkYXRhID0ge3BkZlVybDogdXJsLCBvcHRpb25zfTtcbiAgICAgICAgY29uc3QgbWFpbl9vcHRpb25zID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcigobyk9PiB7aWYgKCFPYmplY3Qua2V5cyhvcHRzKS5pbmNsdWRlcyhvKSkgbWFpbl9vcHRpb25zW29dID0gb3B0aW9uc1tvXTt9KTtcblxuICAgICAgICBlbGVjdHJvbkFwaSh7XG4gICAgICAgICAgICByb3V0ZTogJy9wcmludFBkZicsXG4gICAgICAgICAgICB0eXBlOiAncG9zdCcsXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgIC4uLm1haW5fb3B0aW9uc1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgcmVwbGFjZUZvcm1GaWVsZChwYXJhbXMsIGVsZW0pe1xuICAgICAgICBpZighZWxlbSlcbiAgICAgICAgICAgIGVsZW0gPSAnZm9ybTEnO1xuXG4gICAgICAgIGlmKCQoXCIjXCIgKyBlbGVtKS5nZXQoMCkudGFnTmFtZSA9PT0gXCJESVZcIikgZWxlbSArPSBcIiA6aW5wdXQsIDpjaGVja2JveFwiO1xuICAgICAgICBsZXQgZm9ybV9hcnIgPSAkKFwiI1wiICsgZWxlbSkuc2VyaWFsaXplQXJyYXkoKTtcblxuICAgICAgICAkLmVhY2gocGFyYW1zLCAoaywgdikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGZvcm1fYXJyLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGspXG4gICAgICAgICAgICBpZihpdGVtKVxuICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvcm1fYXJyLnB1c2goe25hbWU6IGssIHZhbHVlOiB2fSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIGZvcm1fYXJyO1xuICAgIH0sXG5cbiAgICBhZGRSaWdoZVRhYmxlU2Nyb2xsKHBhcmFtcyl7XG4gICAgICAgIGNvbnN0IGlkdGFibGUgPSBwYXJhbXMuaWR0YWJsZTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gcGFyYW1zLmVudGl0eTtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBwYXJhbXMuY2FsbGJhY2s7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcGFyYW1zLmZpZWxkO1xuICAgICAgICBjb25zdCBpc19hdXRvY29tcGxldGUgPSBwYXJhbXMuaXNfYXV0b2NvbXBsZXRlO1xuXG4gICAgICAgIGxldCBqc29uID0gW107XG5cbiAgICAgICAgbGV0IGlkX2NoZWNrX2ZpZWxkO1xuICAgICAgICBsZXQgY2hlY2tfZmllbGQ7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCAkKFwiI1wiICsgaWR0YWJsZSArIFwiX3RhYmxlX25yb3dzXCIpLnZhbEZsb2F0KCk7IGkrKyl7XG4gICAgICAgICAgICBjaGVja19maWVsZCA9IGlkdGFibGUgKyBcIl9cIiArIGZpZWxkICsgXCJfXCIgKyBpICsgKGlzX2F1dG9jb21wbGV0ZSA/IFwiX2hpZGRlblwiIDogXCJcIik7XG4gICAgICAgICAgICBpZF9jaGVja19maWVsZCA9ICQoXCIjXCIgKyBjaGVja19maWVsZCkudmFsRmxvYXQoKTtcbiAgICAgICAgICAgIGlmKCFpZF9jaGVja19maWVsZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSBjYWxsYmFjayhpKTtcbiAgICAgICAgICAgIGpzb24ucHVzaChlbGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfXCIgKyBlbnRpdHkgKyBcIl9qc29uXCIpLnZhbChKU09OLnN0cmluZ2lmeShqc29uKSk7XG4gICAgICAgICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfYWRkUm93XCIpLnZhbCgxKTtcblxuICAgICAgICByZWxvYWRUYWJsZShpZHRhYmxlLCBmYWxzZSwgKCkgPT4ge1xuICAgICAgICAgICAgJChcIiNcIiArIGlkdGFibGUgKyBcIl9cIiArIGVudGl0eSArIFwiX2pzb25cIikudmFsKFwiXCIpO1xuICAgICAgICAgICAgJChcIiNcIiArIGlkdGFibGUgKyBcIl9hZGRSb3dcIikudmFsKDApO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYWRkUmlnYUN1bHRpdmFyKGlkdGFibGUpe1xuICAgICAgICBhZGRSaWdoZVRhYmxlU2Nyb2xsKHtcbiAgICAgICAgICAgIGlkdGFibGU6IGlkdGFibGUsXG4gICAgICAgICAgICBlbnRpdHk6IFwiY3VsdGl2YXJcIixcbiAgICAgICAgICAgIGZpZWxkOiBcImlkY3VsdGl2YXJcIixcbiAgICAgICAgICAgIGlzX2F1dG9jb21wbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICBjYWxsYmFjazogKGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpZGN1bHRpdmFyOiAkKFwiI1wiICsgaWR0YWJsZSArIFwiX2lkY3VsdGl2YXJfXCIgKyBpKS52YWxGbG9hdCgpLFxuICAgICAgICAgICAgICAgICAgICBwZXJjOiAkKFwiI1wiICsgaWR0YWJsZSArIFwiX3BlcmNfXCIgKyBpKS52YWxGbG9hdCgpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWRkUmlnaGVDb250YWJpbGl6emF6aW9uZShpZHRhYmxlKXtcbiAgICAgICAgYWRkUmlnaGVUYWJsZVNjcm9sbCh7XG4gICAgICAgICAgICBpZHRhYmxlOiBpZHRhYmxlLFxuICAgICAgICAgICAgZW50aXR5OiBcImNvbnRhYlwiLFxuICAgICAgICAgICAgZmllbGQ6IFwicGRjXCIsXG4gICAgICAgICAgICBpc19hdXRvY29tcGxldGU6IHRydWUsXG4gICAgICAgICAgICBjYWxsYmFjazogKGkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQganNvbl9yb3cgPSAge1xuICAgICAgICAgICAgICAgICAgICBpc19zb2NpbzogJChcIiNcIiArIGlkdGFibGUgKyBcIl9pc19zb2Npb19cIiArIGkpLnZhbEZsb2F0KCksXG4gICAgICAgICAgICAgICAgICAgIGlkbmF6aW9uZTogJChcIiNcIiArIGlkdGFibGUgKyBcIl9pZG5hemlvbmVfXCIgKyBpKS52YWxGbG9hdCgpLFxuICAgICAgICAgICAgICAgICAgICBtYWNyb3pvbmE6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfbWFjcm96b25hX1wiICsgaSkudmFsRmxvYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgaWRfZGVwb3NpdG86ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfaWRfZGVwb3NpdG9fXCIgKyBpKS52YWxGbG9hdCgpLFxuICAgICAgICAgICAgICAgICAgICBpZGdydXBwb25vbWluYXRpdmk6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfaWRncnVwcG9ub21pbmF0aXZpX1wiICsgaSkudmFsRmxvYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgaWRjYW5hbGVkaXZlbmRpdGE6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJpZGNhbmFsZWRpdmVuZGl0YVwiICsgaSkudmFsRmxvYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgaWRfY2F0ZWdvcmlhYXJ0aWNvbGk6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfaWRfY2F0ZWdvcmlhYXJ0aWNvbGlfXCIgKyBpKS52YWxGbG9hdCgpLFxuICAgICAgICAgICAgICAgICAgICBpZF9wZGM6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfcGRjX1wiICsgaSArIFwiX2hpZGRlblwiKS52YWxGbG9hdCgpLFxuICAgICAgICAgICAgICAgICAgICBpZF9jZGM6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfY2RjX1wiICsgaSArIFwiX2hpZGRlblwiKS52YWxGbG9hdCgpLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBqc29uX3JvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWRkUmlnaGVTY2FkZW56ZVBhZ2FtZW50byhpZHRhYmxlKXtcbiAgICAgICAgYWRkUmlnaGVUYWJsZVNjcm9sbCh7XG4gICAgICAgICAgICBpZHRhYmxlOiBpZHRhYmxlLFxuICAgICAgICAgICAgZW50aXR5OiBcIm1vZHBhZ2FtZW50b19zY2FkZW56ZVwiLFxuICAgICAgICAgICAgZmllbGQ6IFwibmdpb3JuaVwiLFxuICAgICAgICAgICAgY2FsbGJhY2s6IChpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmdpb3JuaTogJChcIiNcIiArIGlkdGFibGUgKyBcIl9uZ2lvcm5pX1wiICsgaSkudmFsRmxvYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgYWRkX2ZpbmVfbWVzZTogJChcIiNcIiArIGlkdGFibGUgKyBcIl9hZGRfZmluZV9tZXNlX1wiICsgaSkudmFsRmxvYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgcGVyYzogJChcIiNcIiArIGlkdGFibGUgKyBcIl9wZXJjX1wiICsgaSkudmFsRmxvYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0b19pdmE6ICQoXCIjXCIgKyBpZHRhYmxlICsgXCJfaW1wb3J0b19pdmFfXCIgKyBpKS5pcyhcIjpjaGVja2VkXCIpID8gMSA6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRpcG9fcGFnOiAkKFwiI1wiICsgaWR0YWJsZSArIFwiX3RpcG9fcGFnX1wiICsgaSkudmFsRmxvYXQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBvcGVuRGlhbG9nQ3VsdGl2YXIoaSl7XG4gICAgICAgIHZhciBjdWx0aXZhcl9qc29uID0gJChcIiNyb3dfaGlkZGVuX2N1bHRpdmFyX1wiICsgaSkudmFsKCk7XG4gICAgICAgIGlmKGN1bHRpdmFyX2pzb24pIGN1bHRpdmFyX2pzb24gPSBKU09OLnBhcnNlKGN1bHRpdmFyX2pzb24pO1xuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwPzFcIixcbiAgICAgICAgICAgIGRpdm5hbWU6IFwiZGlhbG9nX21vZGlmaWNhX2N1bHRpdmFyXCIsXG4gICAgICAgICAgICBkYXRhOiB7Y29kaWNlZG9jdW1lbnRvOiAkKFwiI2NvZGljZWRvY3VtZW50b1wiKS52YWwoKSwgdGlwb3ZpZXc6IFwib3BlbkRpYWxvZ0N1bHRpdmFyXCIsIGN1bHRpdmFyOiBjdWx0aXZhcl9qc29ufSxcbiAgICAgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpYWxvZ19tb2RpZmljYV9jdWx0aXZhclwiLCBmdW5jdGlvbiAocmV0KXtcbiAgICAgICAgICAgICAgICAgICAgaWYoIXJldCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkaHJlZiA9ICQoXCIjaHJlZl90YWJsZXNjcm9sbF9jdWx0aXZhcl9cIiArIGkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY3VsdGl2YXIgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1bHRpdmFycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWRjdWx0aXZhciwgcGVyYztcbiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBucm93ID0gMDsgbnJvdyA8ICQoXCIjdGFibGVfZG9jX2N1bHRpdmFyX3RhYmxlX25yb3dzXCIpLnZhbEZsb2F0KCk7IG5yb3crKyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZGN1bHRpdmFyID0gJChcIiN0YWJsZV9kb2NfY3VsdGl2YXJfaWRjdWx0aXZhcl9cIiArIG5yb3cpLnZhbEZsb2F0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaWRjdWx0aXZhcikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjID0gJChcIiN0YWJsZV9kb2NfY3VsdGl2YXJfcGVyY19cIiArIG5yb3cpLnZhbEZsb2F0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdWx0aXZhci5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGN1bHRpdmFyOiBpZGN1bHRpdmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmM6IHBlcmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWx0aXZhcnMucHVzaCgkKFwiI3RhYmxlX2RvY19jdWx0aXZhcl9pZGN1bHRpdmFyX1wiICsgbnJvdyArIFwiIG9wdGlvbjpzZWxlY3RlZFwiKS50ZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoIWN1bHRpdmFyLmxlbmd0aCkgY3VsdGl2YXIgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGN1bHRpdmFyID0gSlNPTi5zdHJpbmdpZnkoY3VsdGl2YXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICQoXCIjcm93X2hpZGRlbl9jdWx0aXZhcl9cIiArIGkpLnZhbChjdWx0aXZhcik7XG4gICAgICAgICAgICAgICAgICAgICRocmVmLmh0bWwoIWN1bHRpdmFycy5sZW5ndGggPyAkaHJlZi5kYXRhKFwiaW5zZXJ0X2N1bHRpdmFyX3RleHRcIikgOiAkaHJlZi5kYXRhKFwiY3VsdGl2YXJfdGV4dFwiKSArIFwiOiBcIiArIGN1bHRpdmFycy5qb2luKFwiLCBcIikpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgY29tcGlsYUNhbXBpQ3VsdGl2YXIoaW5mbywgaSl7XG4gICAgICAgIHZhciBjdWx0aXZhciA9IGluZm8uY3VsdGl2YXI7XG4gICAgICAgIHZhciBjdWx0aXZhcl90ZXh0ID0gaW5mby5jdWx0aXZhcl90ZXh0O1xuICAgICAgICB2YXIgJGhyZWYgPSAkKCcjaHJlZl90YWJsZXNjcm9sbF9jdWx0aXZhcl8nICsgaSk7XG4gICAgICAgIGlmKCFjdWx0aXZhcl90ZXh0KSBjdWx0aXZhcl90ZXh0ID0gJGhyZWYuZGF0YSgnaW5zZXJ0X2N1bHRpdmFyX3RleHQnKTtcbiAgICAgICAgJCgnI3Jvd19oaWRkZW5fY3VsdGl2YXJfJyArIGkpLnZhbChKU09OLnN0cmluZ2lmeShjdWx0aXZhcikpO1xuICAgICAgICAkaHJlZi5odG1sKGN1bHRpdmFyX3RleHQpO1xuICAgIH0sXG5cbiAgICBpbmxpbmVUZXh0RmlsZURvd25sb2FkKGNvbnRlbnQsIGZpbGVuYW1lLCBtaW1ldHlwZSkge1xuICAgICAgICBpZighbWltZXR5cGUpXG4gICAgICAgICAgICBtaW1ldHlwZSA9ICdwbGFpbic7XG4gICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjb250ZW50XSwge3R5cGU6ICd0ZXh0LycgKyBtaW1ldHlwZX0pO1xuICAgICAgICB2YXIgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgICBhLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XG4gICAgICAgIGEuY2xpY2soKTtcbiAgICB9LFxuXG4gICAgb3BlbkRpYWxvZ1NlbGV6aW9uZUluZGlyaXp6bzogZnVuY3Rpb24gKGVsZW0sIGFuYWdyYWZpY2FfaWRfZmllbGQpIHtcbiAgICAgICAgaWYgKCFhbmFncmFmaWNhX2lkX2ZpZWxkKSBhbmFncmFmaWNhX2lkX2ZpZWxkID0gXCJhbmFncmFmaWNhX2hpZGRlblwiO1xuICAgICAgICBjb25zdCBhbmFncmFmaWNhX2lkID0gJChcIiNcIiArIGFuYWdyYWZpY2FfaWRfZmllbGQpLnZhbEZsb2F0KCk7XG4gICAgICAgIGlmICghYW5hZ3JhZmljYV9pZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCAkZWxlbSA9ICQoXCIjXCIgKyBlbGVtKTtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gXCJkaWFsb2dfc2VsZXppb25lX2luZGlyaXp6b19cIiArICRlbGVtLmF0dHIoXCJuYW1lXCIpO1xuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwPzFcIixcbiAgICAgICAgICAgIGRpdm5hbWU6IGRpYWxvZyxcbiAgICAgICAgICAgIGRhdGE6IHsgb2JqZWN0OiBcIkFuYWdyYWZpY2EyXCIsIHRpcG92aWV3OiBcIm9wZW5EaWFsb2dTZWxlemlvbmVJbmRpcml6em9cIiwgaWQ6IGFuYWdyYWZpY2FfaWQsIGluZGlyaXp6b19uYW1lOiAkZWxlbS5hdHRyKFwibmFtZVwiKSB9LFxuICAgICAgICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nU2hvdyhkaWFsb2csIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdEluZGlyaXp6b0luRWxlbWVudDogZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgY29uc3QgJGVsZW0gPSAkKGVsZW0pO1xuICAgICAgICBjb25zdCBmaWVsZCA9ICRlbGVtLmRhdGEoXCJmaWVsZFwiKTtcbiAgICAgICAgY29uc3QgbnNlZGUgPSAkZWxlbS5kYXRhKFwibnNlZGVcIik7XG4gICAgICAgIGNvbnN0ICRmaWVsZCA9ICQoXCIjXCIgKyBmaWVsZCk7XG4gICAgICAgICRmaWVsZC52YWwobnNlZGUpO1xuICAgICAgICAkZmllbGQuY2hhbmdlKCk7XG4gICAgICAgICQoXCIjZGlhbG9nX3NlbGV6aW9uZV9pbmRpcml6em9fXCIgKyBmaWVsZCkuZGlhbG9nKFwiY2xvc2VcIik7XG4gICAgfVxufVxuXG4kLmZuLmV4aXN0cyA9IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPjA7fTtcblxuLy9zb3N0aXR1aXNjZSBpbCAudmFsKCkgbmVsIGpxdWVyeSwgZSBsZWdnZSBkaXJldHRhbWVudGUgaWwgdmFsb3JlIG51bWVyaWNvXG4kLmZuLnZhbEZsb2F0ID0gZnVuY3Rpb24oKVxue1xuICAgIHJldHVybiBnZXRGbG9hdCggJCh0aGlzKS52YWwoKSApO1xufTtcbiQuZm4udmFsRmxvYXQyID0gZnVuY3Rpb24oKVxue1xuICAgIHJldHVybiBnZXRGbG9hdDIoICQodGhpcykudmFsKCkgKTtcbn07XG5cbi8vRm9vdGVyIERhdGF0YWJsZXNcbiQuZm4uSVdGb290ZXJEYXRhdGFibGUgPSBmdW5jdGlvbigpe1xuICAgIHRyeXtcbiAgICAgICAgdGhpcy5kYXRhdGFibGUgPSBldmFsKFwiZGF0YXRhYmxlX1wiICsgdGhpcy5hdHRyKFwiaWRcIikpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmRhdGF0YWJsZSA9ICQoXCIjXCIgKyB0aGlzLmF0dHIoXCJpZFwiKSkuRGF0YVRhYmxlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRGb290ZXJUZXh0ID0gZnVuY3Rpb24gKHRleHQsIGNvbCwgcm93KSB7XG4gICAgICAgIGlmKCFyb3cpIHJvdyA9IDA7XG5cbiAgICAgICAgaWYocm93ID09PSAwKVxuICAgICAgICAgICAgJCggdGhpcy5kYXRhdGFibGUuY29sdW1uKCBjb2wgKS5mb290ZXIoKSApLmh0bWwodGV4dCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgICQoXCJ0cjplcShcIiArIHJvdyArIFwiKSB0aDplcShcIiArIGNvbCArXCIpXCIsIHRoaXMuZGF0YXRhYmxlLnRhYmxlKCkuZm9vdGVyKCkpLmh0bWwodGV4dCk7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuJC5mbi50b2dnbGVSb3cgPSBmdW5jdGlvbigpIHtcbiAgICBpZigkKHRoaXMpLmNzcygnZGlzcGxheScpPT0nbm9uZScpIHtcbiAgICAgICAgJCh0aGlzKS5zaG93Um93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJCh0aGlzKS5oaWRlUm93KCk7XG4gICAgfVxufTtcblxuJC5mbi5oaWRlUm93ID0gZnVuY3Rpb24oKSB7XG4gICAgJCh0aGlzKS5oaWRlKCk7XG59O1xuXG4kLmZuLnNob3dSb3cgPSBmdW5jdGlvbigpIHtcbiAgICBpZigkKHRoaXMpLmNzcygnZGlzcGxheScpPT0nbm9uZScpe1xuICAgICAgICAkKHRoaXMpLmNzcygnZGlzcGxheScsICd0YWJsZS1yb3cnKTtcbiAgICB9XG59OyJdLCJuYW1lcyI6WyIkIiwicmVxdWlyZSIsIkRhdGFUYWJsZSIsImludGVydmFsX2F2YW56YW1lbnRvIiwid2luZG93Iiwib24iLCJzaG93Iiwic2V0VGltZW91dCIsImFkanVzdERhdGFUYWJsZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiaW5fYXJyYXkiLCJteUFycmF5IiwiZWxlbWVudCIsInJlcyIsImUiLCJsZW5ndGgiLCJpc19hcnJheSIsIm1peGVkX3ZhciIsImlzQXJyYXkiLCJfdHlwZW9mIiwicm91bmRUbyIsImRlY2ltYWxwb3NpdGlvbnMiLCJpIiwiTWF0aCIsInBvdyIsInJvdW5kIiwiYXJyYXlfdW5pcXVlIiwidmFsdWUiLCJpbmRleCIsImFycmF5IiwiaW5kZXhPZiIsImNvdW50RGVjaW1hbHMiLCJ0ZXh0IiwidG9TdHJpbmciLCJfdGV4dCRzcGxpdCIsInNwbGl0IiwiX3RleHQkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJiYXNlIiwidHJhaWwiLCJkZWciLCJwYXJzZUludCIsImZsb29yIiwibnVtIiwiZGVjIiwibnVtX3NpZ24iLCJwYXJzZUZsb2F0IiwidG9GaXhlZCIsImdldEZsb2F0IiwiczAiLCJzIiwiU3RyaW5nIiwidHJpbSIsInJlcGxhY2UiLCJmIiwiaXNOYU4iLCJnZXRGbG9hdDIiLCJvcGVuV2luZG93IiwiZmlsZSIsInciLCJoIiwibm9tZWZpbmVzdHJhIiwibCIsInNjcmVlbiIsIndpZHRoIiwidCIsImhlaWdodCIsIm9wZW4iLCJjaGVja0tleSIsImNoYXJzIiwia2V5bnVtIiwia2V5Q29kZSIsIndoaWNoIiwiaXNfa2V5ZnVuY3Rpb24iLCJrZXljaGFyIiwiZnJvbUNoYXJDb2RlIiwiY2hlY2siLCJudW1iZXJfZm9ybWF0IiwiYSIsImIiLCJjIiwiZCIsImciLCJqIiwic2xpY2UiLCJzdWJzdHIiLCJ0b0V1cm8iLCJuIiwiZGVjaW1hbHMiLCJzZV96ZXJvX3N0cmluZ2FfdnVvdGEiLCJDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1IiLCJ2YWwiLCJDVVJSRU5DWV9fVEhPVVNBTkRTX1NFUEFSQVRPUiIsInNpZ24iLCJhYnMiLCJzdHIiLCJsdHJpbSIsInJ0cmltIiwiUmVnRXhwIiwid2FpdGluZyIsInZpc2liaWxlIiwid2FpdGluZzIiLCJ2aWV3X3Byb2dyZXNzIiwiZGlhbG9nU2hvdyIsInNldEludGVydmFsIiwiZGlhbG9nIiwiY2xlYXJJbnRlcnZhbCIsInJ1bkFqYXhBdmFuemFtZW50byIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJqc29uIiwiaHRtbCIsInBlcmNfYXZhbnphbWVudG8iLCJlcnJvciIsInN0cl9wYWQiLCJpbnB1dCIsInBhZF9sZW5ndGgiLCJwYWRfc3RyaW5nIiwicGFkX3R5cGUiLCJoYWxmIiwicGFkX3RvX2dvIiwic3RyX3BhZF9yZXBlYXRlciIsImxlbiIsImNvbGxlY3QiLCJjZWlsIiwiZm9vdGVyTXNnIiwidGlwbyIsInRpdG9sbyIsInRlc3RvIiwiZ3Jvd2wiLCJub3RpY2UiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJkdXJhdGlvbiIsIiRkaXYiLCJmYWRlT3V0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInByb3AiLCJmYWRlSW4iLCJnZXRfZWFuMTNfY2hlY2tkaWdpdCIsImV2ZW5fc3VtIiwiZXZlbl9zdW1fdGhyZWUiLCJvZGRfc3VtIiwidG90YWxfc3VtIiwibmV4dF90ZW4iLCJjaGVja19kaWdpdCIsImdldF9lYW44X2NoZWNrZGlnaXQiLCJzdW0iLCJyZXZlcnNlIiwicmVkdWNlIiwiY2hhciIsImlkeCIsImRpZ2l0IiwiTnVtYmVyIiwid2VpZ2h0IiwicGFydGlhbCIsInJlbWFpbmRlciIsImNoZWNrc3VtIiwic2lhbl9jb21ib19zd2FwIiwiaWRjb21ibyIsInNpemUiLCJpZCIsInJlbW92ZUF0dHIiLCJoaWRlIiwic3RycG9zIiwiaGF5c3RhY2siLCJuZWVkbGUiLCJvZmZzZXQiLCJpdmFHZXQiLCJpZGl2YSIsImNhbXBvIiwiYXR0ciIsImdldEh0bWxGcm9tQWpheCIsImRpdm5hbWUiLCJpc19hc3luYyIsInNob3dfd2FpdGluZyIsImNhbGxiYWNrRnVuY3Rpb24iLCJkYXRhIiwic2VsZiIsInR5cGUiLCJhc3luYyIsInRleHRfdG9fcHJpbnQiLCJyZWxvYWRDb21wb25lbnRzIiwiYnRuTG9hZF9vbmNsaWNrIiwiYWN0aW9uIiwiJGZvcm0iLCJzdWJtaXQiLCJtZXRob2QiLCJ0YXJnZXQiLCJidG5Mb2FkMl9vbmNsaWNrIiwiUGFnZUNoYW5nZSIsInBhZ2VuIiwiZGVsZXRlT2JqZWN0IiwiZm9yemFfZWxpbWluYXppb25lIiwicGFyYW1ldHJpX2FnZ2l1bnRpdmkiLCJyZWxvYWQiLCJpZGRvY3VtZW50byIsImNvZGljZWRvY3VtZW50byIsInJlbG9hZF90YWJsZXNjcm9sbCIsImNhbGxiYWNrIiwiSVdDb25maXJtIiwiSVdDb25maXJtMiIsImJ0bkRlbDJfb25jbGljayIsIl9idG5EZWwyX29uY2xpY2siLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsImFwcGx5IiwiYXJndW1lbnRzIiwib2JqZWN0IiwidGlwb3ZpZXciLCJjaGllZGlfY29uZmVybWEiLCJkZWJ1ZyIsImFqYXhTdWJtaXRPblN1Y2Nlc3NGdW5jdGlvbiIsInJldCIsImxvY2F0aW9uIiwiaHJlZiIsInJlbG9hZFRhYmxlIiwiaGlkZVJvdyIsImJ0blNhdmVfb25jbGljayIsInNldF9wcm9ncmVzcyIsIm9uX2NvbXBsZXRlIiwiYmVmb3JlU3VibWl0Q2FsbGJhY2siLCIkYnRucyIsIiRPUF9GUk9NX0FKQVgiLCJzZXJpYWxpemUiLCJmaW5kIiwieGhyIiwiYWpheE9wdGlvbnMiLCJ0aHJvd25FcnJvciIsInN0YXR1cyIsImJ0blByaW50X29uY2xpY2siLCJpc19zZW56YV9wcmV6emkiLCJwYWdlX3ByaW50Iiwic3RyaW5naGUiLCJidG5QcmludDJfb25jbGljayIsInRpcG9zdGFtcGEiLCJwYXJhbWV0cmkiLCJzZXRmaWxlbmFtZSIsImlzX2V4Y2VsIiwiZm9ybSIsIiRhbGxhcm1pIiwib3V0ZmlsZSIsImFsZXJ0IiwianFYSFIiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJkZXNjcmlwdGlvbiIsInBhcmFtcyIsImVhY2giLCJidG5QcmludE11bHRpcGxlIiwiZGF0aSIsImJ0blByaW50Iiwibm9fcmV0dXJuX2FmdGVyX2NhbGxiYWNrIiwiaXNfanNvbiIsImdldERhdGlDb211bmVJdGFsaWFubyIsImNvbXVuZV9pZCIsInNldE5ld1Bhc3N3b3JkIiwiaW5wdXRuYW1lIiwicmVzdGFwaSIsImZvcmNlX2xlbmd0aCIsInBhc3N3b3JkIiwiYnRuTmV3X29uY2xpY2siLCJidG5NYWlsX29uY2xpY2siLCJ2YWxGbG9hdCIsImdldCIsInhtbCIsImNoZWNrQWxsX29uY2xpY2siLCIkY2hrIiwiY2hlY2tlZCIsImlzIiwibnJvd3MiLCJpd0N1cnJlbmN5RWxlbWVudCIsIm9mZiIsInN5bWJvbCIsImRlY2ltYWxfc2VwYXJhdG9yIiwidGhvdXNhbmRfc2VwYXJhdG9yIiwiaGlkZGVuIiwiaWZfemVyb19lbXB0eSIsIm4yIiwib25jaGFuZ2UiLCJldmFsIiwibnVtYmVyIiwic2VsZWN0Iiwib25lIiwicHJldmVudERlZmF1bHQiLCJzaG93Q29sdW1uIiwidGFibGUiLCJ2aXNpYmxlIiwiJHQiLCJkdCIsImRhdGFUYWJsZSIsImFwaSIsImNvbHVtbiIsImhpZGVDb2x1bW4iLCJnZXRDb2RpY2lJVkEiLCJhdHRpdml0YXBhc3Npdml0YSIsImRhdGFfbGltaXRlIiwib3B0aW9ucyIsImNvZGljaV9jb3VudCIsInNjb3Jwb3JhSXZhIiwiaW1wb3J0byIsImFsaXF1b3RhIiwiSVdBdXRvY29tcGxldGUiLCJJV09iamVjdCIsImZpbHRlcnMiLCJkaW5hbWljX3NlYXJjaCIsImlkZGlhbG9nIiwiZXhjZWxQcm9jZXNzIiwiY3NzQ2xhc3MiLCIkaWRBdXRvY29tcGxldGUiLCJjc3NDbGFzc2VzIiwiaXNfZXh0ZW5kZWQiLCJydW5BdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiLCJzb3VyY2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJhamF4U291cmNlSVdBdXRvY29tcGxldGUiLCJtaW5MZW5ndGgiLCJhdXRvRm9jdXMiLCJldmVudCIsInVpIiwic3RhcnRzV2l0aCIsImNoZWNrQXJ0aWNvbG9EZWxGb3JuaXRvcmUiLCJpdGVtIiwiZGFfY29uZmVybWFyZSIsInNob3dEaWFsb2dBcnRpY29sb0RhQ29uZmVybWFyZSIsIiRpZCIsImNoYW5nZSIsImFwcGVuZFRvIiwiX3JlbmRlckl0ZW0iLCJ1bCIsImFwcGVuZCIsImxhYmVsIiwiZGVzYyIsImlkYXJ0aWNvbG8iLCJpZF9maWVsZCIsIiRjb2RpY2Vkb2N1bWVudG8iLCJpZGZvcm5pdG9yZSIsImNvZGljZV9kb2N1bWVudG8iLCJJV0NvbmZpcm1UcnVlRmFsc2UiLCJpZF9kYWNvbmZlcm1hcmUiLCJvYmplY3RfcHJvdmVuaWVuemEiLCJvblN1Y2Nlc3MiLCIkaGlkZGVuIiwibXNnIiwidGVybSIsImsiLCJ2IiwibGV0dGVycyIsImtleSIsIm1hcCIsIm9iamVjdHMiLCJzZXRLZXl3b3Jkc09uQ0tFZGl0b3IiLCJlZGl0b3IiLCJja2VkaXRvciIsIkNLRURJVE9SIiwiaW5zdGFuY2VzIiwiaW5zZXJ0VGV4dCIsInIiLCJJV0NvbmZpcm0zIiwidGFibGVfaWQiLCJyZXNldHBhZ2luZyIsIiR0YWJsZSIsIm15Q2FsbGJhY2siLCJoaWRlX29rbWVzc2FnZSIsInNkZWJ1ZyIsInNldERhdGVGcm9tUGVyaW9kb0Zpc2NhbGUiLCJpZF9wZXJpb2RvZmlzY2FsZSIsImlkX2RhdGFfZGEiLCJpZF9kYXRhX2EiLCJpc19wZXJpb2RvZ2VzdGlvbmFsZSIsIiRwZXJpb2RvZmlzY2FsZSIsImFyciIsIkRhdGVfX2dldEludGVydmFsbG9Gcm9tUGVyaW9kb0Zpc2NhbGUiLCJEYXRlX19pdCIsInNldERhdGVBbm5vU29sYXJlIiwiJGFubm8iLCJjaGFuZ2VEYXRlVHJpbWVzdHJlIiwidHJpbWVzdHJlX2lkIiwiYW5ub19pZCIsImRhdGFfZGFfaWQiLCJkYXRhX2FfaWQiLCJ0cmltZXN0cmUiLCJhbm5vIiwiY2hhbmdlRGF0ZUJpbWVzdHJlIiwiYmltZXN0cmVfaWQiLCJiaW1lc3RyZSIsIkRhdGUiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNoYW5nZURhdGVNZXNlIiwibWVzZV9pZCIsIm5tZXNlIiwibGFzdF9kYXkiLCJzYXZlRmlybWFEb2N1bWVudG8iLCJmb3JtX25hbWUiLCJnZXRJbmZvVGFibGUiLCJjbGFzc25hbWUiLCJvbnN1Y2Nlc3MiLCJzZXRSZWFkb25seSIsImVsZW1lbnRpZCIsImV4Y2x1ZGUiLCJub3QiLCJjbGljayIsInNldENvbHVtbiIsImNvbG5hbWUiLCJhemlvbmUiLCJmb3J6YVNjcmVlbndpZHRoVXRlbnRlIiwiaWR1dGVudGUiLCJzY3JlZW53aWR0aCIsImlubmVyV2lkdGgiLCJpbXBvc3RhVGVtYSIsInRlbWEiLCJzZXRQcmV2aWV3VGVtYUpxdWVyeVVpIiwiaXNfcHVyZSIsInNldFByZXZpZXdQdXJlQ3NzIiwiY3NzIiwiYXNzZXRzUGF0aCIsImxpbmtDbGFzcyIsImNzc0xpbmsiLCJyZWwiLCIkY3NzVXNlclRoZW1lIiwiYWZ0ZXIiLCJyZW1vdmUiLCJ0b2dnbGVEYXJrTW9kZSIsImRhcmttb2RlIiwiZ2V0QXV0b0RhcmtNb2RlIiwiZGFya01vZGVNZWRpYVF1ZXJ5IiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJhZGRFdmVudExpc3RlbmVyIiwic2V0Rm9udFNpemUiLCJyb290IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzdHlsZSIsInNldFByb3BlcnR5IiwibG9hZFByb2ZpbG9VdGVudGUiLCJ2aWV3RGlhbG9nTmV3UGFzc3dvcmQiLCJpZHVzZXIiLCJwZXJpb2RvZmlzY2FsZSIsImRhdGFfZGEiLCJkYXRhX2EiLCJub29wTG9nIiwic3dpdGNoX2FzX3VzZXIiLCIkc3dpdGNoIiwidXNlciIsInN3aXRjaF90b19hemllbmRhIiwiY29kYXppZW5kYSIsImNvbnNvbGUiLCJsb2ciLCJlYW5DaGVja0RpZ2l0IiwicmVzdWx0IiwiY291bnRlciIsImNoYXJBdCIsImdlbmVyYUJhcmNvZGUiLCJlbGVtX2lkIiwicHJldmlld19pZCIsImJjb2RlIiwiSnNCYXJjb2RlIiwiZm9ybWF0IiwiZm9udFNpemUiLCJ0ZXh0TWFyZ2luIiwiZmxhdCIsInJlbmRlciIsImdldEh0bWxEaWFsb2dDaXN0ZXJuZSIsIm9wdHMiLCIkZGlhbG9nIiwiYW5hZ3JhZmljYV9maWVsZCIsImlkYW5hZ3JhZmljYSIsImNvbW1pdHRlbnRlX2ZpZWxkIiwiaWRjb21taXR0ZW50ZSIsImRhdGFfZmllbGQiLCJvcmFyaW9fZmllbGQiLCJvcmFyaW8iLCJpZG1hZ2F6emlub3NvcmdlbnRlIiwiZmllbGRfbWFnYXp6aW5vIiwiYXJ0aWNvbG9fZmllbGQiLCJhcnRpY29sb19pZCIsImNhdXNhbGVfZmllbGQiLCJjYXVzYWxlIiwiY2hlY2tfdGlwb19tb2xpdHVyZSIsInNob3dEaWFsb2dTZWxlY3RDaXN0ZXJuZSIsIiRzZWxlY3RDaXN0ZXJuYSIsInVuZGVmaW5lZCIsIiRjaXN0ZXJuYV90ZXh0IiwiJGNpc3Rlcm5hX2lkIiwiaWRkZXBvc2l0byIsImNoZWNrX3RpcG9fbW9saXR1cmEiLCIkY2lzdGVybmVFbGVtIiwiJGhyZWYiLCJjb2x1bW5zIiwiYWRqdXN0IiwiYWZ0ZXJMb2FkZWQiLCJnZXREaWFsb2dTdGFuZGFyZENpc3Rlcm5lRnJhbnRvaW8iLCJpZHRpcG9zZnVzbyIsInNlbGVjdE11bHRpSXRlbXMiLCJpZHNfaXRlbXMiLCJoaWRkZW5faWRzIiwiJGlkX2l0ZW0iLCJpZHNfYW5hZ3JhZmljaGUiLCJwdXNoIiwiam9pbiIsInJlbW92ZUlkRnJvbU11bHRpSXRlbXMiLCIkaWRzX2l0ZW1zIiwibmV3X2lkcyIsInVwZGF0ZURpdkVudGl0eVNlbGV6aW9uYXRlIiwiZW50aXR5X2lkcyIsImRpdiIsIm1heF9lbnRpdGllc19zaG93biIsIiRidG4iLCIkeCIsImZvY3VzIiwiZXJhc2VNdWx0aUl0ZW1zIiwidXBkYXRlRGl2Tm9taW5hdGl2aVNlbGV6aW9uYXRpIiwidXBkYXRlRGl2QXJ0aWNvbGlTZWxlemlvbmF0aSIsIm9wZW5EaWFsb2dSaWNlcmNhQW5hZ3JhZmljYSIsImFuYWdzIiwiYW5hZ19pZCIsImdldERpdkRldHRhZ2xpb0RpY2hpYXJhemlvbmUiLCJjb3VudGRvd25KcyIsImNvdW50RG93bkRhdGUiLCJtb21lbnQiLCJkYXRhX2Z1dHVybyIsIngiLCJub3ciLCJkaXN0YW5jZSIsImRheXMiLCJob3VycyIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwidGV4dFRvUHJpbnQiLCJzaG93RGF5cyIsInNob3dIb3VycyIsInNob3dNaW51dGVzIiwic2hvd1NlY29uZHMiLCIkZWxlbSIsImVsZW0iLCJjb25maXJtQnV0dG9uRXZlbnQiLCIkYnV0dG9uX2lkIiwiYnV0dG9uX2Jvb2wiLCJhbmltYXRlIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJwcm9ncmVzcyIsInNldEltYWdlRkVSZWdpc3RybyIsImltYWdlIiwiJGxpbmsiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsImZuIiwidGFibGVzIiwib25WaXNpYmxlIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJlbnRyaWVzIiwib2JzZXJ2ZXIiLCJmb3JFYWNoIiwiZW50cnkiLCJpbnRlcnNlY3Rpb25SYXRpbyIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwiaXNJbnRlcnNlY3RpbmciLCJnZXRNYXhWaXNpYmxlWkluZGV4IiwiZWxlbWVudHMiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiekluZGV4ZXMiLCJmaWx0ZXIiLCJlbCIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwidmlzaWJpbGl0eSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiTmFOIiwiekluZGV4IiwibWF4IiwiZGVsZXRlSnF1ZXJ5VXBsb2FkIiwib25kZWxldGVDYWxsYmFjayIsInNlbGVjdG9yIiwiZnJvbV9kYXRhdGFibGVzIiwiSVdEYXRhdGFibGUiLCJidWlsZERhdGF0YWJsZXMiLCJidWlsZFNlbGVjdDIiLCJhdXRvY29tcGxldGVPbkZvY3VzRXZlbnQiLCJidWlsZEpxdWVyeVVwbG9hZEZpbGUiLCJidWlsZENrRWRpdG9yIiwiZWxlY3Ryb25BcGkiLCIkZWxlY3Ryb25fdG9rZW4iLCJkZWZhdWx0T3B0aW9ucyIsImJhc2VVcmwiLCJyb3V0ZSIsImhlYWRlcnMiLCJzdWNjZXNzQ2FsbGJhY2siLCJlcnJvckNhbGxiYWNrIiwidXNlQ29uc29sZUxvZyIsIl9vYmplY3RTcHJlYWQiLCJlcnJvck1zZyIsImVyciIsImF2dmlhUGVzYXRhT2RlY2EiLCJjcm9zc0RvbWFpbiIsIl9leGVjJGdyb3VwcyIsIl93cmFwUmVnRXhwIiwiQ01EIiwiU1RBVFVTIiwiTkVUIiwiVEFSRSIsIkFXUyIsIlBDUyIsIkNPRDEiLCJDT0QyIiwiUFJPR1IiLCJleGVjIiwiZ3JvdXBzIiwibmV0dG8iLCJ0YXJhIiwiYXZ2aWFQZXNhdGFWZWdhIiwiX2V4ZWMkZ3JvdXBzMiIsIk5FVFRPIiwiTE9SRE8iLCJsb3JkbyIsImRpcmVjdFByaW50IiwicHJpbnRlciIsInBhZ2VzIiwic3Vic2V0Iiwic2NhbGUiLCJtb25vY2hyb21lIiwic2lkZSIsImJpbiIsInBhcGVyU2l6ZSIsInByaW50RGlhbG9nIiwiY29waWVzIiwicGRmVXJsIiwibWFpbl9vcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm8iLCJpbmNsdWRlcyIsInN0cmluZ2lmeSIsInJlcGxhY2VGb3JtRmllbGQiLCJ0YWdOYW1lIiwiZm9ybV9hcnIiLCJzZXJpYWxpemVBcnJheSIsIm5hbWUiLCJhZGRSaWdoZVRhYmxlU2Nyb2xsIiwiaWR0YWJsZSIsImVudGl0eSIsImZpZWxkIiwiaXNfYXV0b2NvbXBsZXRlIiwiaWRfY2hlY2tfZmllbGQiLCJjaGVja19maWVsZCIsImFkZFJpZ2FDdWx0aXZhciIsImlkY3VsdGl2YXIiLCJwZXJjIiwiYWRkUmlnaGVDb250YWJpbGl6emF6aW9uZSIsImpzb25fcm93IiwiaXNfc29jaW8iLCJpZG5hemlvbmUiLCJtYWNyb3pvbmEiLCJpZF9kZXBvc2l0byIsImlkZ3J1cHBvbm9taW5hdGl2aSIsImlkY2FuYWxlZGl2ZW5kaXRhIiwiaWRfY2F0ZWdvcmlhYXJ0aWNvbGkiLCJpZF9wZGMiLCJpZF9jZGMiLCJhZGRSaWdoZVNjYWRlbnplUGFnYW1lbnRvIiwibmdpb3JuaSIsImFkZF9maW5lX21lc2UiLCJpbXBvcnRvX2l2YSIsInRpcG9fcGFnIiwib3BlbkRpYWxvZ0N1bHRpdmFyIiwiY3VsdGl2YXJfanNvbiIsImN1bHRpdmFyIiwiY3VsdGl2YXJzIiwibnJvdyIsImNvbXBpbGFDYW1waUN1bHRpdmFyIiwiaW5mbyIsImN1bHRpdmFyX3RleHQiLCJpbmxpbmVUZXh0RmlsZURvd25sb2FkIiwiY29udGVudCIsImZpbGVuYW1lIiwibWltZXR5cGUiLCJjcmVhdGVFbGVtZW50IiwiYmxvYiIsIkJsb2IiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJzZXRBdHRyaWJ1dGUiLCJvcGVuRGlhbG9nU2VsZXppb25lSW5kaXJpenpvIiwiYW5hZ3JhZmljYV9pZF9maWVsZCIsImFuYWdyYWZpY2FfaWQiLCJpbmRpcml6em9fbmFtZSIsInNlbGVjdEluZGlyaXp6b0luRWxlbWVudCIsIm5zZWRlIiwiJGZpZWxkIiwiZXhpc3RzIiwidmFsRmxvYXQyIiwiSVdGb290ZXJEYXRhdGFibGUiLCJkYXRhdGFibGUiLCJzZXRGb290ZXJUZXh0IiwiY29sIiwicm93IiwiZm9vdGVyIiwidG9nZ2xlUm93Iiwic2hvd1JvdyJdLCJzb3VyY2VSb290IjoiIn0=