(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["bootstrap_env~dettagli-fe~documenti~jquery-ui_env"],{
/***/ "./include/js/utils.js":
/*!*****************************!*\
!*** ./include/js/utils.js ***!
\*****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
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(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
__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.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.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.array.index-of.js */ "./node_modules/core-js/modules/es.array.index-of.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.string.split.js */ "./node_modules/core-js/modules/es.string.split.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.parse-float.js */ "./node_modules/core-js/modules/es.parse-float.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.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.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.regexp.constructor.js */ "./node_modules/core-js/modules/es.regexp.constructor.js");
__webpack_require__(/*! core-js/modules/web.timers.js */ "./node_modules/core-js/modules/web.timers.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.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.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.array.map.js */ "./node_modules/core-js/modules/es.array.map.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.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.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js");
__webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.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/es.array.is-array.js */ "./node_modules/core-js/modules/es.array.is-array.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.array.from.js */ "./node_modules/core-js/modules/es.array.from.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
/**
* Created by PhpStorm
* User: daniele
* Date: 15/05/20
* Time: 13.05
*/
var interval_avanzamento;
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);
},
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);
e = a + '';
f = e.split('.');
if (!f[0]) f[0] = '0';
if (!f[1]) f[1] = '';
if (f[1].length < b) {
g = f[1];
for (i = f[1].length + 1; i <= b; i++) {
g += '0';
}
f[1] = g;
}
if (d != '' && f[0].length > 3) {
h = f[0];
f[0] = '';
for (j = 3; j < h.length; j += 3) {
i = h.slice(h.length - j, h.length - j + 3);
f[0] = d + i + f[0] + '';
}
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 = getFloat2(n);
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 + "%");
}
});
},
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;
},
//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();
$.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);
$("#" + divname + " .IWDataTables").each(function () {
IWDatatable.buildDatatables(this);
});
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) {
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);
});
});
},
btnDel2_onclick: function (_btnDel2_onclick) {
function btnDel2_onclick(_x, _x2, _x3, _x4, _x5, _x6, _x7) {
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) {
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&id=" + id + "&object=" + object + "&tipoview=" + tipoview;
if (iddocumento > 0 && codicedocumento) url = "view.php?DEL_FROM_AJAX&iddocumento=" + iddocumento + "&codicedocumento=" + codicedocumento + "&tipoview=view";
if (parametri_aggiuntivi) url += "&" + parametri_aggiuntivi;
if (forza_eliminazione) url += "&FORZA_ELIMINAZIONE";
waiting(true);
$.ajax({
url: url,
dataType: "xml",
success: function success(xml) {
waiting(false);
var chiedi_conferma = $(xml).find("chiedi_conferma").text();
ajaxSubmitOnSuccessFunction(xml, false, chiedi_conferma);
var ret = $(xml).find("ret").text();
if (ret) {
if (reload) {
if (iddocumento > 0) window.location.href = "?codicedocumento=" + codicedocumento + "&tipoview=view";else location.reload();
}
if (reload_tablescroll) reloadTable(reload_tablescroll, "form1");
$("#tr_" + id).hideRow();
} else {
if (chiedi_conferma) {
IWConfirm(chiedi_conferma, function () {
btnDel2_onclick(id, 1, parametri_aggiuntivi, reload, iddocumento, codicedocumento, reload_tablescroll);
});
}
}
}
});
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 :input, :checkbox").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 == null) form = "form1";
if (set_progress == null) 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);
var action = "print.php?setfilename&id=" + id;
if (is_excel != "false") action += "&EXCEL";
$.post(action, $form.serialize(), function (xml) {
var ret = $(xml).find("ret").text();
var outfile = $(xml).find("outfile").text();
if (typeof on_complete === "function") on_complete();
if (ret == "true") {
if (is_excel == "false") window.open(outfile, '_blank');else window.location.href = outfile;
} else alert("Errore. Impossibile stampare");
$allarmi.show();
waiting2(false);
});
} 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) {
$.ajax({
url: "print.php?setfilename",
type: "post",
dataType: "xml",
data: params,
success: function success(xml) {
if (typeof callback === "function") {
callback(xml);
return;
}
var ret = $(xml).find("ret").text();
if (ret !== "true") {
alert($("#alert_no_stampa").val());
return;
}
var outfile = $(xml).find("outfile").text();
if (!is_excel) window.open(outfile);else window.location.href = outfile;
}
});
},
setNewPassword: function setNewPassword(inputname, restapi) {
if (typeof restapi === "undefined") restapi = false;
$.ajax({
url: "ajax.php?JSON&object=IWUser&tipoview=getNewPassword&restapi=" + (restapi ? "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);
}
},
CurrencyOnBlur: function CurrencyOnBlur(objID) {
var CURRENCY__SYMBOL = $("#CURRENCY__SYMBOL").val();
var CURRENCY__DECIMALS = $("#CURRENCY__DECIMALS").val();
var CURRENCY__DECIMAL_SEPARATOR = $("#CURRENCY__DECIMAL_SEPARATOR").val();
var CURRENCY__THOUSANDS_SEPARATOR = $("#CURRENCY__THOUSANDS_SEPARATOR").val();
var $objID = $("#" + objID);
var $objID_hidden = $("#" + objID + "_hidden");
var if_zero_empty = false;
var mCURRENCY__SYMBOL = CURRENCY__SYMBOL;
var mCURRENCY__DECIMALS = CURRENCY__DECIMALS; //overload eventuali del simbolo e del numero di decimali
if ($objID.attr("if_zero_empty") != undefined) if_zero_empty = true;
if ($objID.attr("symbol") != undefined) mCURRENCY__SYMBOL = $objID.attr("symbol");
if ($objID.attr("decimals") != undefined) mCURRENCY__DECIMALS = $objID.attr("decimals");
var s = $objID.val();
s = s.replace(mCURRENCY__SYMBOL, '.'); //quando compilo il campo QUALSIASI SIA LA LINGUA COMPILO USANDO IL . COME SEPARATORE DECIMALE
//s=s.replace(CURRENCY__THOUSANDS_SEPARATOR,'');
//s=s.replace(CURRENCY__DECIMAL_SEPARATOR,'.');
var n = getFloat(s);
$objID_hidden.val(n); //alert($objID_hidden.val());
var sign = n < 0 ? "- " : "";
var n2 = number_format(Math.abs(n), mCURRENCY__DECIMALS, CURRENCY__DECIMAL_SEPARATOR, CURRENCY__THOUSANDS_SEPARATOR);
if (n == 0 && if_zero_empty) $objID.val("");else $objID.val(sign + mCURRENCY__SYMBOL + " " + n2);
$objID_hidden.change();
},
CurrencyOnFocus: function CurrencyOnFocus(objID) {
var objID_hidden = objID + "_hidden";
var $objID = $("#" + objID);
var mCURRENCY__DECIMALS = $objID.attr("decimals");
var s = getFloat($("#" + objID_hidden).val());
var n = new Number(s);
$objID.val(n.toFixed(mCURRENCY__DECIMALS));
$objID.select();
$objID.one('mouseup', function (e) {
e.preventDefault();
});
},
showColumn: function showColumn(table, index, visible) {
if (visible == null) visible = true;
var t = $("#" + table).dataTable().api();
var c = t.column(index);
c.visible(visible);
},
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 (iddialog == null) iddialog = "";
if (filters == null) filters = {};
if (cssClass == null) cssClass = "";
var $idAutocomplete = $("#" + id);
if (cssClass) $idAutocomplete = $("." + cssClass);
filters.cssClasses = $idAutocomplete.attr("class");
$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 (cssClass) id = event.target.id;
var $id = $("#" + id + "_hidden");
$id.val(ui.item.id);
$id.change();
if (IWObject.startsWith("IWAutocompleteArticolo")) {
checkArticoloDelFornitore(ui.item.id, id);
if (ui.item.da_confermare) {
showDialogArticoloDaConfermare(ui.item.id, id);
return;
}
}
if (typeof callback === "function") callback(ui.item);
},
appendTo: iddialog ? "#" + iddialog : ""
});
},
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"
},
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("");
return false;
}
$.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);
if (json.ret) {
$hidden.val(json.idarticolo);
$hidden.change();
} else {
$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;
},
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,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();
}
});
},
loadComboLotti: function loadComboLotti(nomecampo, show_combo, giacenzenegative, idmagazzino, proponi_lotto_piu_vecchio, is_asincrono, classArticolo, params) {
if (is_asincrono == null) is_asincrono = true;
if (idmagazzino == null) idmagazzino = 0;
if (giacenzenegative == null) giacenzenegative = "";
if (giacenzenegative == true) giacenzenegative = "&conGiacenzeNegative";
if (proponi_lotto_piu_vecchio == null) proponi_lotto_piu_vecchio = false;
if (classArticolo == null) classArticolo = "Articolo";
var $combo = $("#" + nomecampo + "_combo");
var $text = $("#" + nomecampo + "_text");
var idarticolo = $combo.attr("idarticolo");
var data = $combo.attr("data");
var orario = $combo.attr("orario");
if (orario == "") orario = $("#orario_movmagazzini").val();
if (orario == "" || typeof orario === "undefined") orario = $("#oraarrivo").val();
if (orario == "" || typeof orario === "undefined") orario = Date__OraNow(); //Se clicco dal bottone, e sto visualizzando la combo, mostro il campo text col valore selezionato nella combo
//Se invece passo dall'onchange articolo o clicco sul bottone mentre visualizzo il campo text
if (show_combo == true || !$combo.is(":visible")) {
$text.hide();
$text.prop("disabled", "disabled");
$combo.removeAttr("disabled");
$combo.fadeIn(); //Recupero da DB le informazioni sui lotti
if (idarticolo > 0) {
$combo.removeOption(/./);
$combo.css("background", "url('/images/loading1.gif') no-repeat");
$combo.attr("disabled", "disabled");
var min_data_primocarico = "9999/99/99";
var my_lotto = "";
var datescadenza = [];
var lotti_disabled = [];
$.ajax({
url: "ajax.php?object=" + classArticolo + "&tipoview=getLottiDatoArticolo&id=" + idarticolo + giacenzenegative + "&data=" + Date__it(data) + "&orario=" + orario + "&idmagazzino=" + idmagazzino,
dataType: "xml",
async: is_asincrono,
type: "post",
data: params,
success: function success(xml) {
var lotti_count = $(xml).find('lotti_count').text();
for (var i = 0; i < lotti_count; i++) {
var lotto = $(xml).find('lotto' + i).text();
var datascadenza = $(xml).find('datascadenza' + i).text();
var data_primocarico = $(xml).find('data_primocarico' + i).text();
var lotto2 = $(xml).find('lotto2_' + i).text();
var q = $(xml).find('giacenza' + i).text();
lotti_disabled[lotto] = getFloat($(xml).find('DISABLED_' + i).text());
var descrizione = lotto;
if (lotto2 != "") descrizione = descrizione + " - " + lotto2;
descrizione = str_pad(descrizione, descrizione.length + 5);
descrizione += str_pad("stock: " + q, 16);
if (datascadenza != "") descrizione += " scad: " + datascadenza;
if (lotto == '') {
lotto = "_no_lotto_";
descrizione = str_pad("NO-LOTTO", 16) + str_pad("stock: " + q, 16);
}
$combo.addOption(lotto, descrizione.replace(/ /g, "\xA0"), false);
datescadenza[lotto] = datascadenza;
if (data_primocarico < min_data_primocarico) {
min_data_primocarico = data_primocarico;
my_lotto = lotto;
}
} //Imposto l'attributo delle scadenze sulle option
$combo.find("option").each(function () {
var $this = $(this);
var key;
for (key in datescadenza) {
if ($this.attr("value") == key) {
$this.attr("scadenza", datescadenza[key]);
break;
}
}
for (key in lotti_disabled) {
if ($this.attr("value") == key) {
$this.prop("disabled", lotti_disabled[key] == 1 ? "disabled" : "");
break;
}
}
});
$combo.css("background", "url('#') no-repeat");
$combo.removeAttr("disabled");
$combo.selectOptions($text.val());
if (proponi_lotto_piu_vecchio) $combo.selectOptions(my_lotto);
}
});
}
} else {
var lotto = $combo.val();
$combo.hide();
$text.val(lotto);
$combo.prop("disabled", "disabled");
$text.removeAttr("disabled");
$text.fadeIn();
}
},
viewDialogNewPassword: function viewDialogNewPassword(iduser, _onSuccess) {
getHtmlFromAjax({
url: "ajax.php?object=IWuser&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=changePassword&object=IWUser&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("include/noop-log.php", function (xml) {//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();
$.get("ajax.php?object=IWUser&tipoview=switchAzienda&codicecliente=" + codazienda, function () {
window.location = 'home.php?idmenu=0';
});
},
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);
},
calcolaCoordinate: function calcolaCoordinate(indirizzo, field_lat, field_long) {
var url = "ajax.php?JSON&object=GoogleMapsObject&tipoview=calcolaCoordinate&indirizzo=" + indirizzo;
$.ajax({
url: url,
dataType: "json",
async: false,
success: function success(json) {
var lat = json.lat;
var _long = json["long"];
if (lat === null || _long === null) alert("Inserire l'indirizzo nel formato corretto");else {
$("#" + field_lat).val(lat);
$("#" + field_long).val(_long);
}
}
});
},
getHtmlDialogCisterne: function getHtmlDialogCisterne(opts) {
if (!opts) opts = {
dialog: "dialog_cisterne"
};
if (!opts.dialog) opts.dialog = "dialog_cisterne";
var $dialog = $("#" + opts.dialog);
$dialog.html("" + $("#div_waiting2").html() + "
");
if (!opts.object) opts.object = $dialog.data("object");
opts.tipoview = "getHtmlDialogCisterne";
if (opts.data) opts.data = $("#" + opts.data).val();
if (opts.orario) opts.orario = $("#" + opts.orario).val();
if (!opts.name_text) opts.name_text = "idcisterna";
var callback = opts.callback;
opts.callback = null;
getHtmlFromAjax({
url: "ajax.php?1",
divname: opts.dialog,
data: opts,
onSuccess: function onSuccess() {
if (typeof callback === "function") callback();
}
});
},
showDialogSelectCisterne: function showDialogSelectCisterne(dialog, afterLoaded) {
var $dialog = $("#" + dialog);
var name_text = $dialog.data("name_text") ? $dialog.data("name_text") : "idcisterna";
var $selectCisterna = $(".selectCisterna_" + dialog);
$selectCisterna.off();
$selectCisterna.on("click", function (event) {
var $cisterna_text = $(this);
var $cisterna_id = $("#" + $cisterna_text.attr("id").replace("_text_", ""));
event.preventDefault();
dialogShow(dialog, function () {}, function () {
var $cisterneElem = $(".cisternaElem");
$cisterneElem.off();
$cisterneElem.on("click", function () {
var index = $(this).data("index");
var $href = $("#" + name_text + "_dialog_cisterna_codice_" + index);
$cisterna_text.val($href.data("descrizione_cisterna"));
$cisterna_id.val($href.data("cisterna_id"));
$cisterna_id.data("dialog-index", index);
$dialog.data('loaded', true);
$("#" + dialog).dialog("close");
$cisterna_id.change();
});
$("#elenco_cisterne_" + name_text).DataTable().columns.adjust();
});
});
if (afterLoaded && typeof afterLoaded === "function") afterLoaded();
},
getDialogStandardCisterneFrantoio: function getDialogStandardCisterneFrantoio(opts) {
if (!opts) opts = {
dialog: "dialog_cisterne",
idtiposfuso: 1,
afterLoaded: null
};
if (!opts.dialog) opts.dialog = "dialog_cisterne";
opts.callback = function () {
showDialogSelectCisterne(opts.dialog, opts.afterLoaded);
};
getHtmlDialogCisterne(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);
}
});
}
};
jQuery.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;
};
/***/ })
}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9pbmNsdWRlL2pzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImludGVydmFsX2F2YW56YW1lbnRvIiwibW9kdWxlIiwiZXhwb3J0cyIsImluX2FycmF5IiwibXlBcnJheSIsImVsZW1lbnQiLCJyZXMiLCJlIiwibGVuZ3RoIiwiaXNfYXJyYXkiLCJtaXhlZF92YXIiLCJpc0FycmF5Iiwicm91bmRUbyIsImRlY2ltYWxwb3NpdGlvbnMiLCJpIiwiTWF0aCIsInBvdyIsInJvdW5kIiwiY291bnREZWNpbWFscyIsInZhbHVlIiwidGV4dCIsInRvU3RyaW5nIiwiaW5kZXhPZiIsInNwbGl0IiwiYmFzZSIsInRyYWlsIiwiZGVnIiwicGFyc2VJbnQiLCJmbG9vciIsIm51bSIsImRlYyIsIm51bV9zaWduIiwicGFyc2VGbG9hdCIsInRvRml4ZWQiLCJnZXRGbG9hdCIsInMwIiwicyIsIlN0cmluZyIsInRyaW0iLCJyZXBsYWNlIiwiZiIsImlzTmFOIiwiZ2V0RmxvYXQyIiwib3BlbldpbmRvdyIsImZpbGUiLCJ3IiwiaCIsIm5vbWVmaW5lc3RyYSIsImwiLCJzY3JlZW4iLCJ3aWR0aCIsInQiLCJoZWlnaHQiLCJ3aW5kb3ciLCJvcGVuIiwiY2hlY2tLZXkiLCJjaGFycyIsImtleW51bSIsImtleUNvZGUiLCJ3aGljaCIsImlzX2tleWZ1bmN0aW9uIiwia2V5Y2hhciIsImZyb21DaGFyQ29kZSIsImNoZWNrIiwibnVtYmVyX2Zvcm1hdCIsImEiLCJiIiwiYyIsImQiLCJnIiwiaiIsInNsaWNlIiwic3Vic3RyIiwidG9FdXJvIiwibiIsImRlY2ltYWxzIiwic2VfemVyb19zdHJpbmdhX3Z1b3RhIiwiQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SIiwiJCIsInZhbCIsIkNVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SIiwic2lnbiIsImFicyIsInN0ciIsImx0cmltIiwicnRyaW0iLCJSZWdFeHAiLCJ3YWl0aW5nIiwidmlzaWJpbGUiLCJ3YWl0aW5nMiIsInZpZXdfcHJvZ3Jlc3MiLCJkaWFsb2dTaG93Iiwic2hvdyIsInNldEludGVydmFsIiwiZGlhbG9nIiwiY2xlYXJJbnRlcnZhbCIsInJ1bkFqYXhBdmFuemFtZW50byIsImFqYXgiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJqc29uIiwiaHRtbCIsInBlcmNfYXZhbnphbWVudG8iLCJzdHJfcGFkIiwiaW5wdXQiLCJwYWRfbGVuZ3RoIiwicGFkX3N0cmluZyIsInBhZF90eXBlIiwiaGFsZiIsInBhZF90b19nbyIsInN0cl9wYWRfcmVwZWF0ZXIiLCJsZW4iLCJjb2xsZWN0IiwiY2VpbCIsImZvb3Rlck1zZyIsInRpcG8iLCJ0aXRvbG8iLCJ0ZXN0byIsImdyb3dsIiwibm90aWNlIiwidGl0bGUiLCJtZXNzYWdlIiwiZXJyb3IiLCJkdXJhdGlvbiIsIiRkaXYiLCJmYWRlT3V0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInByb3AiLCJmYWRlSW4iLCJzZXRUaW1lb3V0IiwiZ2V0X2VhbjEzX2NoZWNrZGlnaXQiLCJldmVuX3N1bSIsImV2ZW5fc3VtX3RocmVlIiwib2RkX3N1bSIsInRvdGFsX3N1bSIsIm5leHRfdGVuIiwiY2hlY2tfZGlnaXQiLCJzaWFuX2NvbWJvX3N3YXAiLCJpZGNvbWJvIiwic2l6ZSIsImlkIiwicmVtb3ZlQXR0ciIsImhpZGUiLCJzdHJwb3MiLCJoYXlzdGFjayIsIm5lZWRsZSIsIm9mZnNldCIsIml2YUdldCIsImlkaXZhIiwiY2FtcG8iLCJhdHRyIiwiZ2V0SHRtbEZyb21BamF4IiwiZGl2bmFtZSIsImlzX2FzeW5jIiwic2hvd193YWl0aW5nIiwiY2FsbGJhY2tGdW5jdGlvbiIsImRhdGEiLCJ0eXBlIiwiYXN5bmMiLCJ0ZXh0X3RvX3ByaW50IiwiZWFjaCIsIklXRGF0YXRhYmxlIiwiYnVpbGREYXRhdGFibGVzIiwiYnRuTG9hZF9vbmNsaWNrIiwiYWN0aW9uIiwiJGZvcm0iLCJzdWJtaXQiLCJtZXRob2QiLCJ0YXJnZXQiLCJidG5Mb2FkMl9vbmNsaWNrIiwiUGFnZUNoYW5nZSIsInBhZ2VuIiwiZGVsZXRlT2JqZWN0IiwiZm9yemFfZWxpbWluYXppb25lIiwicGFyYW1ldHJpX2FnZ2l1bnRpdmkiLCJyZWxvYWQiLCJpZGRvY3VtZW50byIsImNvZGljZWRvY3VtZW50byIsInJlbG9hZF90YWJsZXNjcm9sbCIsIklXQ29uZmlybSIsIklXQ29uZmlybTIiLCJidG5EZWwyX29uY2xpY2siLCJvYmplY3QiLCJ0aXBvdmlldyIsInhtbCIsImNoaWVkaV9jb25mZXJtYSIsImZpbmQiLCJhamF4U3VibWl0T25TdWNjZXNzRnVuY3Rpb24iLCJyZXQiLCJsb2NhdGlvbiIsImhyZWYiLCJyZWxvYWRUYWJsZSIsImhpZGVSb3ciLCJidG5TYXZlX29uY2xpY2siLCJzZXRfcHJvZ3Jlc3MiLCJvbl9jb21wbGV0ZSIsImJlZm9yZVN1Ym1pdENhbGxiYWNrIiwiJGJ0bnMiLCIkT1BfRlJPTV9BSkFYIiwic2VyaWFsaXplIiwiZGVidWciLCJ4aHIiLCJhamF4T3B0aW9ucyIsInRocm93bkVycm9yIiwic3RhdHVzIiwiYnRuUHJpbnRfb25jbGljayIsImlzX3NlbnphX3ByZXp6aSIsInBhZ2VfcHJpbnQiLCJzdHJpbmdoZSIsImJ0blByaW50Ml9vbmNsaWNrIiwidGlwb3N0YW1wYSIsInBhcmFtZXRyaSIsInNldGZpbGVuYW1lIiwiaXNfZXhjZWwiLCJmb3JtIiwiJGFsbGFybWkiLCJwb3N0Iiwib3V0ZmlsZSIsImFsZXJ0IiwicGFyYW1zIiwiYnRuUHJpbnRNdWx0aXBsZSIsImRhdGkiLCJidG5QcmludCIsImNhbGxiYWNrIiwic2V0TmV3UGFzc3dvcmQiLCJpbnB1dG5hbWUiLCJyZXN0YXBpIiwicGFzc3dvcmQiLCJidG5OZXdfb25jbGljayIsImJ0bk1haWxfb25jbGljayIsInZhbEZsb2F0IiwiZ2V0IiwiY2hlY2tBbGxfb25jbGljayIsIiRjaGsiLCJjaGVja2VkIiwiaXMiLCJucm93cyIsIkN1cnJlbmN5T25CbHVyIiwib2JqSUQiLCJDVVJSRU5DWV9fU1lNQk9MIiwiQ1VSUkVOQ1lfX0RFQ0lNQUxTIiwiJG9iaklEIiwiJG9iaklEX2hpZGRlbiIsImlmX3plcm9fZW1wdHkiLCJtQ1VSUkVOQ1lfX1NZTUJPTCIsIm1DVVJSRU5DWV9fREVDSU1BTFMiLCJ1bmRlZmluZWQiLCJuMiIsImNoYW5nZSIsIkN1cnJlbmN5T25Gb2N1cyIsIm9iaklEX2hpZGRlbiIsIk51bWJlciIsInNlbGVjdCIsIm9uZSIsInByZXZlbnREZWZhdWx0Iiwic2hvd0NvbHVtbiIsInRhYmxlIiwiaW5kZXgiLCJ2aXNpYmxlIiwiZGF0YVRhYmxlIiwiYXBpIiwiY29sdW1uIiwiaGlkZUNvbHVtbiIsImdldENvZGljaUlWQSIsImF0dGl2aXRhcGFzc2l2aXRhIiwiZGF0YV9saW1pdGUiLCJvcHRpb25zIiwiY29kaWNpX2NvdW50Iiwic2NvcnBvcmFJdmEiLCJpbXBvcnRvIiwiYWxpcXVvdGEiLCJJV0F1dG9jb21wbGV0ZSIsIklXT2JqZWN0IiwiZmlsdGVycyIsImRpbmFtaWNfc2VhcmNoIiwiaWRkaWFsb2ciLCJleGNlbFByb2Nlc3MiLCJjc3NDbGFzcyIsIiRpZEF1dG9jb21wbGV0ZSIsImNzc0NsYXNzZXMiLCJhdXRvY29tcGxldGUiLCJzb3VyY2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJhamF4U291cmNlSVdBdXRvY29tcGxldGUiLCJtaW5MZW5ndGgiLCJhdXRvRm9jdXMiLCJldmVudCIsInVpIiwiJGlkIiwiaXRlbSIsInN0YXJ0c1dpdGgiLCJjaGVja0FydGljb2xvRGVsRm9ybml0b3JlIiwiZGFfY29uZmVybWFyZSIsInNob3dEaWFsb2dBcnRpY29sb0RhQ29uZmVybWFyZSIsImFwcGVuZFRvIiwiaWRhcnRpY29sbyIsImlkX2ZpZWxkIiwiJGNvZGljZWRvY3VtZW50byIsImlkZm9ybml0b3JlIiwiY29kaWNlX2RvY3VtZW50byIsIklXQ29uZmlybVRydWVGYWxzZSIsImlkX2RhY29uZmVybWFyZSIsIm9uU3VjY2VzcyIsIiRoaWRkZW4iLCJ0ZXJtIiwiayIsInYiLCJldmFsIiwibGV0dGVycyIsImtleSIsIm1hcCIsIm9iamVjdHMiLCJsYWJlbCIsInNldEtleXdvcmRzT25DS0VkaXRvciIsImVkaXRvciIsImNrZWRpdG9yIiwiQ0tFRElUT1IiLCJpbnN0YW5jZXMiLCJpbnNlcnRUZXh0IiwiciIsIklXQ29uZmlybTMiLCJ0YWJsZV9pZCIsInJlc2V0cGFnaW5nIiwiJHRhYmxlIiwibXlDYWxsYmFjayIsIkRhdGFUYWJsZSIsImlzX2pzb24iLCJoaWRlX29rbWVzc2FnZSIsInNkZWJ1ZyIsIm1zZyIsInNldERhdGVGcm9tUGVyaW9kb0Zpc2NhbGUiLCJpZF9wZXJpb2RvZmlzY2FsZSIsImlkX2RhdGFfZGEiLCJpZF9kYXRhX2EiLCJpc19wZXJpb2RvZ2VzdGlvbmFsZSIsIiRwZXJpb2RvZmlzY2FsZSIsImFyciIsIkRhdGVfX2dldEludGVydmFsbG9Gcm9tUGVyaW9kb0Zpc2NhbGUiLCJEYXRlX19pdCIsImNoYW5nZURhdGVUcmltZXN0cmUiLCJ0cmltZXN0cmVfaWQiLCJhbm5vX2lkIiwiZGF0YV9kYV9pZCIsImRhdGFfYV9pZCIsInRyaW1lc3RyZSIsImFubm8iLCJjaGFuZ2VEYXRlQmltZXN0cmUiLCJiaW1lc3RyZV9pZCIsImJpbWVzdHJlIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiY2hhbmdlRGF0ZU1lc2UiLCJtZXNlX2lkIiwibm1lc2UiLCJsYXN0X2RheSIsInNhdmVGaXJtYURvY3VtZW50byIsImZvcm1fbmFtZSIsImdldEluZm9UYWJsZSIsImNsYXNzbmFtZSIsIm9uc3VjY2VzcyIsInNldFJlYWRvbmx5IiwiZWxlbWVudGlkIiwiZXhjbHVkZSIsIm5vdCIsIm9mZiIsImNsaWNrIiwic2V0Q29sdW1uIiwiY29sbmFtZSIsImF6aW9uZSIsImZvcnphU2NyZWVud2lkdGhVdGVudGUiLCJpZHV0ZW50ZSIsInNjcmVlbndpZHRoIiwiaW5uZXJXaWR0aCIsImxvYWRDb21ib0xvdHRpIiwibm9tZWNhbXBvIiwic2hvd19jb21ibyIsImdpYWNlbnplbmVnYXRpdmUiLCJpZG1hZ2F6emlubyIsInByb3BvbmlfbG90dG9fcGl1X3ZlY2NoaW8iLCJpc19hc2luY3Jvbm8iLCJjbGFzc0FydGljb2xvIiwiJGNvbWJvIiwiJHRleHQiLCJvcmFyaW8iLCJEYXRlX19PcmFOb3ciLCJyZW1vdmVPcHRpb24iLCJjc3MiLCJtaW5fZGF0YV9wcmltb2NhcmljbyIsIm15X2xvdHRvIiwiZGF0ZXNjYWRlbnphIiwibG90dGlfZGlzYWJsZWQiLCJsb3R0aV9jb3VudCIsImxvdHRvIiwiZGF0YXNjYWRlbnphIiwiZGF0YV9wcmltb2NhcmljbyIsImxvdHRvMiIsInEiLCJkZXNjcml6aW9uZSIsImFkZE9wdGlvbiIsIiR0aGlzIiwic2VsZWN0T3B0aW9ucyIsInZpZXdEaWFsb2dOZXdQYXNzd29yZCIsImlkdXNlciIsInBlcmlvZG9maXNjYWxlIiwiZGF0YV9kYSIsImRhdGFfYSIsIm5vb3BMb2ciLCJzd2l0Y2hfYXNfdXNlciIsIiRzd2l0Y2giLCJ1c2VyIiwic3dpdGNoX3RvX2F6aWVuZGEiLCJjb2RhemllbmRhIiwiZWFuQ2hlY2tEaWdpdCIsInJlc3VsdCIsImNvdW50ZXIiLCJjaGFyQXQiLCJnZW5lcmFCYXJjb2RlIiwiZWxlbV9pZCIsInByZXZpZXdfaWQiLCJyZXF1aXJlIiwiYmNvZGUiLCJKc0JhcmNvZGUiLCJmb3JtYXQiLCJmb250U2l6ZSIsInRleHRNYXJnaW4iLCJmbGF0IiwicmVuZGVyIiwiY2FsY29sYUNvb3JkaW5hdGUiLCJpbmRpcml6em8iLCJmaWVsZF9sYXQiLCJmaWVsZF9sb25nIiwibGF0IiwibG9uZyIsImdldEh0bWxEaWFsb2dDaXN0ZXJuZSIsIm9wdHMiLCIkZGlhbG9nIiwibmFtZV90ZXh0Iiwic2hvd0RpYWxvZ1NlbGVjdENpc3Rlcm5lIiwiYWZ0ZXJMb2FkZWQiLCIkc2VsZWN0Q2lzdGVybmEiLCJvbiIsIiRjaXN0ZXJuYV90ZXh0IiwiJGNpc3Rlcm5hX2lkIiwiJGNpc3Rlcm5lRWxlbSIsIiRocmVmIiwiY29sdW1ucyIsImFkanVzdCIsImdldERpYWxvZ1N0YW5kYXJkQ2lzdGVybmVGcmFudG9pbyIsImlkdGlwb3NmdXNvIiwiZ2V0RGl2RGV0dGFnbGlvRGljaGlhcmF6aW9uZSIsImRpdiIsImpRdWVyeSIsImZuIiwiZXhpc3RzIiwidmFsRmxvYXQyIiwiSVdGb290ZXJEYXRhdGFibGUiLCJkYXRhdGFibGUiLCJzZXRGb290ZXJUZXh0IiwiY29sIiwicm93IiwiZm9vdGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLG9CQUFKO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUViQyxVQUFRLEVBQUUsa0JBQVVDLE9BQVYsRUFBbUJDLE9BQW5CLEVBQ1Y7QUFDSSxRQUFJQyxHQUFHLEdBQUMsS0FBUjs7QUFDQSxTQUFJLElBQUlDLENBQUMsR0FBQyxDQUFWLEVBQVlBLENBQUMsR0FBQ0gsT0FBTyxDQUFDSSxNQUF0QixFQUE2QkQsQ0FBQyxFQUE5QixFQUNBO0FBQ0ksVUFBR0gsT0FBTyxDQUFDRyxDQUFELENBQVAsSUFBY0YsT0FBakIsRUFDQTtBQUNJQyxXQUFHLEdBQUMsSUFBSjtBQUNBO0FBQ0g7QUFDSjs7QUFDRCxXQUFPQSxHQUFQO0FBQ0gsR0FkWTtBQWdCYkcsVUFBUSxFQUFFLGtCQUFVQyxTQUFWLEVBQXFCO0FBQzNCLFdBQU9BLFNBQVMsQ0FBQ0MsT0FBVixNQUF1QixRQUFPRCxTQUFQLE1BQXFCLFFBQW5EO0FBQ0gsR0FsQlk7QUFvQmJFLFNBQU8sRUFBRSxpQkFBVUMsZ0JBQVYsRUFDVDtBQUNJLFFBQUlDLENBQUMsR0FBRyxPQUFPQyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQVlILGdCQUFaLENBQWY7QUFDQUMsS0FBQyxHQUFHQyxJQUFJLENBQUNFLEtBQUwsQ0FBV0gsQ0FBWCxDQUFKO0FBQ0EsV0FBT0EsQ0FBQyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQVlILGdCQUFaLENBQVg7QUFDSCxHQXpCWTtBQTJCYkssZUFBYSxFQUFFLHVCQUFTQyxLQUFULEVBQWdCO0FBQzNCLFFBQUlDLElBQUksR0FBR0QsS0FBSyxDQUFDRSxRQUFOLEVBQVgsQ0FEMkIsQ0FFM0I7O0FBQ0EsUUFBSUQsSUFBSSxDQUFDRSxPQUFMLENBQWEsSUFBYixJQUFxQixDQUFDLENBQTFCLEVBQTZCO0FBQ3pCLHdCQUFvQkYsSUFBSSxDQUFDRyxLQUFMLENBQVcsSUFBWCxDQUFwQjtBQUFBO0FBQUEsVUFBS0MsSUFBTDtBQUFBLFVBQVdDLEtBQVg7O0FBQ0EsVUFBSUMsR0FBRyxHQUFHQyxRQUFRLENBQUNGLEtBQUQsRUFBUSxFQUFSLENBQWxCO0FBQ0EsYUFBT0MsR0FBUDtBQUNILEtBUDBCLENBUTNCOzs7QUFDQSxRQUFJWCxJQUFJLENBQUNhLEtBQUwsQ0FBV1QsS0FBWCxNQUFzQkEsS0FBMUIsRUFBaUM7QUFDN0IsYUFBT0EsS0FBSyxDQUFDRSxRQUFOLEdBQWlCRSxLQUFqQixDQUF1QixHQUF2QixFQUE0QixDQUE1QixFQUErQmYsTUFBL0IsSUFBeUMsQ0FBaEQ7QUFDSDs7QUFDRCxXQUFPLENBQVA7QUFDSCxHQXhDWTtBQTBDYlMsT0FBSyxFQUFFLGVBQVVZLEdBQVYsRUFBZUMsR0FBZixFQUFtQjtBQUN0QixRQUFHLENBQUNBLEdBQUosRUFDSUEsR0FBRyxHQUFHLENBQU47QUFDSixRQUFJQyxRQUFRLEdBQUdGLEdBQUcsSUFBSSxDQUFQLEdBQVcsQ0FBWCxHQUFlLENBQUMsQ0FBL0I7QUFDQSxXQUFPRyxVQUFVLENBQUMsQ0FBQ2pCLElBQUksQ0FBQ0UsS0FBTCxDQUFZWSxHQUFHLEdBQUdkLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEVBQVQsRUFBYWMsR0FBYixDQUFQLEdBQTZCQyxRQUFRLEdBQUcsTUFBbkQsSUFBOERoQixJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQWFjLEdBQWIsQ0FBL0QsRUFBa0ZHLE9BQWxGLENBQTBGSCxHQUExRixDQUFELENBQWpCO0FBQ0gsR0EvQ1k7QUFpRGJJLFVBQVEsRUFBRSxrQkFBU0MsRUFBVCxFQUFhTCxHQUFiLEVBQ1Y7QUFDSSxRQUFJTSxDQUFDLEdBQUMsSUFBSUMsTUFBSixDQUFXRixFQUFYLENBQU47QUFDQUcsUUFBSSxDQUFDRixDQUFELENBQUo7QUFDQUEsS0FBQyxHQUFDQSxDQUFDLENBQUNHLE9BQUYsQ0FBVSxHQUFWLEVBQWMsR0FBZCxDQUFGO0FBQ0EsUUFBSUMsQ0FBQyxHQUFDUixVQUFVLENBQUNJLENBQUQsQ0FBaEI7QUFDQSxRQUFHLE9BQU9JLENBQVAsS0FBYSxXQUFiLElBQTRCQyxLQUFLLENBQUNELENBQUQsQ0FBcEMsRUFDSSxPQUFPLENBQVA7QUFFSixRQUFHVixHQUFILEVBQVEsT0FBT2IsS0FBSyxDQUFDdUIsQ0FBRCxFQUFJVixHQUFKLENBQVo7QUFFUixXQUFPVSxDQUFQO0FBQ0gsR0E3RFk7QUErRGJFLFdBQVMsRUFBRSxtQkFBU04sQ0FBVCxFQUNYO0FBQ0ksV0FBT25CLEtBQUssQ0FBQ2lCLFFBQVEsQ0FBQ0UsQ0FBRCxDQUFULEVBQWEsQ0FBYixDQUFaO0FBQ0gsR0FsRVk7QUFvRWJPLFlBQVUsRUFBRSxvQkFBU0MsSUFBVCxFQUFjQyxDQUFkLEVBQWdCQyxDQUFoQixFQUFrQkMsWUFBbEIsRUFDWjtBQUNJLFFBQUdBLFlBQVksSUFBRSxJQUFqQixFQUF1QkEsWUFBWSxHQUFDLFFBQWI7QUFDdkIsUUFBSUMsQ0FBQyxHQUFDLENBQUNDLE1BQU0sQ0FBQ0MsS0FBUCxHQUFhTCxDQUFkLElBQWlCLENBQXZCO0FBQ0EsUUFBSU0sQ0FBQyxHQUFDLENBQUNGLE1BQU0sQ0FBQ0csTUFBUCxHQUFjTixDQUFmLElBQWtCLENBQWxCLEdBQW9CLEdBQTFCO0FBQ0FPLFVBQU0sQ0FBQ0MsSUFBUCxDQUFZVixJQUFaLEVBQWlCRyxZQUFqQixFQUE4QixrSUFBZ0lELENBQWhJLEdBQWtJLFNBQWxJLEdBQTRJRCxDQUE1SSxHQUE4SSxRQUE5SSxHQUF1SkcsQ0FBdkosR0FBeUosT0FBekosR0FBaUtHLENBQS9MO0FBQ0gsR0ExRVk7QUE0RWJJLFVBQVEsRUFBRSxrQkFBU2hELENBQVQsRUFBV2lELEtBQVgsRUFDVjtBQUNJLFFBQUlDLE1BQU0sR0FBQ2xELENBQUMsQ0FBQ21ELE9BQWI7QUFDQSxRQUFHbkQsQ0FBQyxDQUFDb0QsS0FBTCxFQUNJRixNQUFNLEdBQUNsRCxDQUFDLENBQUNvRCxLQUFUO0FBRUosUUFBSUMsY0FBYyxHQUFDLEtBQW5CO0FBQ0EsUUFBR0gsTUFBTSxJQUFJLENBQUMsQ0FBRCxFQUFJLEVBQUosRUFBUSxFQUFSLEVBQVksQ0FBWixFQUFlLEVBQWYsRUFBbUIsRUFBbkIsRUFBdUIsRUFBdkIsQ0FBYixFQUNJRyxjQUFjLEdBQUMsSUFBZjtBQUVKLFFBQUlDLE9BQU8sR0FBQ3hCLE1BQU0sQ0FBQ3lCLFlBQVAsQ0FBb0JMLE1BQXBCLENBQVo7QUFFQSxRQUFJSSxPQUFPLEtBQUssR0FBaEIsRUFBc0JELGNBQWMsR0FBQyxLQUFmO0FBQ3RCLFFBQUlHLEtBQUssR0FBQyxLQUFWOztBQUNBLFNBQUksSUFBSWpELENBQUMsR0FBQyxDQUFWLEVBQVlBLENBQUMsR0FBQzBDLEtBQUssQ0FBQ2hELE1BQXBCLEVBQTJCTSxDQUFDLEVBQTVCLEVBQ0E7QUFDSSxVQUFHMEMsS0FBSyxDQUFDMUMsQ0FBRCxDQUFMLEtBQWErQyxPQUFoQixFQUF5QjtBQUNyQkUsYUFBSyxHQUFDLElBQU47QUFDQTtBQUNIO0FBQ0o7O0FBQ0QsUUFBSUgsY0FBSixFQUNJLE9BQU8sSUFBUCxDQURKLEtBR0ksT0FBT0csS0FBUDtBQUNQLEdBckdZO0FBdUdiQyxlQUFhLEVBQUUsdUJBQVNDLENBQVQsRUFBWUMsQ0FBWixFQUFlQyxDQUFmLEVBQWtCQyxDQUFsQixFQUFxQjtBQUNoQ0gsS0FBQyxHQUFHbEQsSUFBSSxDQUFDRSxLQUFMLENBQVdnRCxDQUFDLEdBQUdsRCxJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQWFrRCxDQUFiLENBQWYsSUFBa0NuRCxJQUFJLENBQUNDLEdBQUwsQ0FBUyxFQUFULEVBQWFrRCxDQUFiLENBQXRDO0FBQ0EzRCxLQUFDLEdBQUcwRCxDQUFDLEdBQUcsRUFBUjtBQUNBekIsS0FBQyxHQUFHakMsQ0FBQyxDQUFDZ0IsS0FBRixDQUFRLEdBQVIsQ0FBSjtBQUNBLFFBQUcsQ0FBQ2lCLENBQUMsQ0FBQyxDQUFELENBQUwsRUFBVUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPLEdBQVA7QUFDVixRQUFHLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQUwsRUFBVUEsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPLEVBQVA7O0FBQ1YsUUFBR0EsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLaEMsTUFBTCxHQUFjMEQsQ0FBakIsRUFBbUI7QUFDZkcsT0FBQyxHQUFHN0IsQ0FBQyxDQUFDLENBQUQsQ0FBTDs7QUFDQSxXQUFJMUIsQ0FBQyxHQUFHMEIsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLaEMsTUFBTCxHQUFjLENBQXRCLEVBQXlCTSxDQUFDLElBQUlvRCxDQUE5QixFQUFpQ3BELENBQUMsRUFBbEMsRUFBc0M7QUFDbEN1RCxTQUFDLElBQUksR0FBTDtBQUNIOztBQUNEN0IsT0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPNkIsQ0FBUDtBQUNIOztBQUNELFFBQUdELENBQUMsSUFBSSxFQUFMLElBQVc1QixDQUFDLENBQUMsQ0FBRCxDQUFELENBQUtoQyxNQUFMLEdBQWMsQ0FBNUIsRUFBK0I7QUFDM0JzQyxPQUFDLEdBQUdOLENBQUMsQ0FBQyxDQUFELENBQUw7QUFDQUEsT0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPLEVBQVA7O0FBQ0EsV0FBSThCLENBQUMsR0FBRyxDQUFSLEVBQVdBLENBQUMsR0FBR3hCLENBQUMsQ0FBQ3RDLE1BQWpCLEVBQXlCOEQsQ0FBQyxJQUFJLENBQTlCLEVBQWlDO0FBQzdCeEQsU0FBQyxHQUFHZ0MsQ0FBQyxDQUFDeUIsS0FBRixDQUFRekIsQ0FBQyxDQUFDdEMsTUFBRixHQUFXOEQsQ0FBbkIsRUFBc0J4QixDQUFDLENBQUN0QyxNQUFGLEdBQVc4RCxDQUFYLEdBQWUsQ0FBckMsQ0FBSjtBQUNBOUIsU0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPNEIsQ0FBQyxHQUFHdEQsQ0FBSixHQUFRMEIsQ0FBQyxDQUFDLENBQUQsQ0FBVCxHQUFlLEVBQXRCO0FBQ0g7O0FBQ0Q4QixPQUFDLEdBQUd4QixDQUFDLENBQUMwQixNQUFGLENBQVMsQ0FBVCxFQUFhMUIsQ0FBQyxDQUFDdEMsTUFBRixHQUFXLENBQVgsSUFBZ0IsQ0FBakIsR0FBc0IsQ0FBdEIsR0FBMkJzQyxDQUFDLENBQUN0QyxNQUFGLEdBQVcsQ0FBbEQsQ0FBSjtBQUNBZ0MsT0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPOEIsQ0FBQyxHQUFHOUIsQ0FBQyxDQUFDLENBQUQsQ0FBWjtBQUNIOztBQUNEMkIsS0FBQyxHQUFJRCxDQUFDLElBQUksQ0FBTixHQUFXLEVBQVgsR0FBZUMsQ0FBbkI7QUFDQSxXQUFPM0IsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPMkIsQ0FBUCxHQUFXM0IsQ0FBQyxDQUFDLENBQUQsQ0FBbkI7QUFDSCxHQWhJWTtBQWtJYmlDLFFBQU0sRUFBRSxnQkFBU0MsQ0FBVCxFQUFXQyxRQUFYLEVBQW9CQyxxQkFBcEIsRUFDUjtBQUNJLFFBQUdBLHFCQUFxQixJQUFFLElBQTFCLEVBQWdDQSxxQkFBcUIsR0FBQyxLQUF0QjtBQUNoQ0YsS0FBQyxHQUFDaEMsU0FBUyxDQUFDZ0MsQ0FBRCxDQUFYO0FBQ0EsUUFBSUcsMkJBQTJCLEdBQUNDLENBQUMsQ0FBQyw4QkFBRCxDQUFELENBQWtDQyxHQUFsQyxFQUFoQztBQUNBLFFBQUlDLDZCQUE2QixHQUFDRixDQUFDLENBQUMsZ0NBQUQsQ0FBRCxDQUFvQ0MsR0FBcEMsRUFBbEM7QUFDQSxRQUFHLENBQUNKLFFBQUosRUFBY0EsUUFBUSxHQUFDLENBQVQ7QUFDZCxRQUFJTSxJQUFJLEdBQUVQLENBQUMsR0FBQyxDQUFGLEdBQU0sSUFBTixHQUFhLEVBQXZCO0FBQ0EsUUFBSXRDLENBQUMsR0FBQzRCLGFBQWEsQ0FBQ2pELElBQUksQ0FBQ21FLEdBQUwsQ0FBU1IsQ0FBVCxDQUFELEVBQWFDLFFBQWIsRUFBc0JFLDJCQUF0QixFQUFrREcsNkJBQWxELENBQW5CO0FBRUEsUUFBR0oscUJBQXFCLElBQUk1QyxVQUFVLENBQUNJLENBQUQsQ0FBVixLQUFrQixDQUE5QyxFQUFpREEsQ0FBQyxHQUFDLEVBQUY7QUFFakQsV0FBTzZDLElBQUksR0FBRzdDLENBQWQ7QUFDSCxHQS9JWTtBQWlKYkUsTUFBSSxFQUFFLGNBQVU2QyxHQUFWLEVBQWUzQixLQUFmLEVBQXNCO0FBQ3hCLFdBQU80QixLQUFLLENBQUNDLEtBQUssQ0FBQ0YsR0FBRCxFQUFNM0IsS0FBTixDQUFOLEVBQW9CQSxLQUFwQixDQUFaO0FBQ0gsR0FuSlk7QUFxSmI0QixPQUFLLEVBQUUsZUFBU0QsR0FBVCxFQUFjM0IsS0FBZCxFQUFxQjtBQUN4QkEsU0FBSyxHQUFHQSxLQUFLLElBQUksS0FBakI7QUFDQSxXQUFPMkIsR0FBRyxDQUFDNUMsT0FBSixDQUFZLElBQUkrQyxNQUFKLENBQVcsT0FBTzlCLEtBQVAsR0FBZSxJQUExQixFQUFnQyxHQUFoQyxDQUFaLEVBQWtELEVBQWxELENBQVA7QUFDSCxHQXhKWTtBQTBKYjZCLE9BQUssRUFBRSxlQUFTRixHQUFULEVBQWMzQixLQUFkLEVBQXFCO0FBQ3hCQSxTQUFLLEdBQUdBLEtBQUssSUFBSSxLQUFqQjtBQUNBLFdBQU8yQixHQUFHLENBQUM1QyxPQUFKLENBQVksSUFBSStDLE1BQUosQ0FBVyxNQUFNOUIsS0FBTixHQUFjLEtBQXpCLEVBQWdDLEdBQWhDLENBQVosRUFBa0QsRUFBbEQsQ0FBUDtBQUNILEdBN0pZO0FBK0piK0IsU0FBTyxFQUFFLGlCQUFTQyxRQUFULEVBQ1Q7QUFDSUMsWUFBUSxDQUFDRCxRQUFELENBQVI7QUFDSCxHQWxLWTtBQW9LYkMsVUFBUSxFQUFFLGtCQUFTRCxRQUFULEVBQWtCRSxhQUFsQixFQUNWO0FBQ0ksUUFBR0YsUUFBUSxJQUFFLElBQWIsRUFBbUJBLFFBQVEsR0FBQyxJQUFUO0FBQ25CLFFBQUdFLGFBQWEsSUFBRSxJQUFsQixFQUF3QkEsYUFBYSxHQUFDLEtBQWQ7O0FBQ3hCLFFBQUdGLFFBQUgsRUFBYTtBQUNURyxnQkFBVSxDQUFDLGNBQUQsQ0FBVjs7QUFDQSxVQUFHRCxhQUFILEVBQWlCO0FBQ2JaLFNBQUMsQ0FBQyx3QkFBRCxDQUFELENBQTRCYyxJQUE1QjtBQUNBZCxTQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QmMsSUFBdkI7QUFDQTVGLDRCQUFvQixHQUFDNkYsV0FBVyxDQUFDLHNCQUFELEVBQXlCLEdBQXpCLENBQWhDO0FBQ0g7QUFDSixLQVBELE1BUUs7QUFDRGYsT0FBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQmdCLE1BQW5CLENBQTBCLE9BQTFCO0FBQ0FDLG1CQUFhLENBQUMvRixvQkFBRCxDQUFiO0FBQ0g7QUFDSixHQXBMWTtBQXNMYmdHLG9CQUFrQixFQUFFLDhCQUFVO0FBQzFCbEIsS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFNBQUcsRUFBRSx1REFERjtBQUVIQyxjQUFRLEVBQUUsTUFGUDtBQUdIQyxhQUFPLEVBQUUsaUJBQVNDLElBQVQsRUFBYztBQUNuQnZCLFNBQUMsQ0FBQyx3QkFBRCxDQUFELENBQTRCd0IsSUFBNUIsQ0FBa0NELElBQUksQ0FBQ0UsZ0JBQUwsR0FBd0IsR0FBMUQ7QUFDSDtBQUxFLEtBQVA7QUFPSCxHQTlMWTtBQWdNYkMsU0FBTyxFQUFFLGlCQUFVQyxLQUFWLEVBQWlCQyxVQUFqQixFQUE2QkMsVUFBN0IsRUFBeUNDLFFBQXpDLEVBQW1EO0FBQ3hELFFBQUlDLElBQUksR0FBRyxFQUFYO0FBQUEsUUFBZUMsU0FBZjs7QUFDQSxRQUFJQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLENBQVUzRSxDQUFWLEVBQWE0RSxHQUFiLEVBQWtCO0FBQ3JDLFVBQUlDLE9BQU8sR0FBRyxFQUFkO0FBQUEsVUFBa0JuRyxDQUFsQjs7QUFFQSxhQUFPbUcsT0FBTyxDQUFDekcsTUFBUixHQUFpQndHLEdBQXhCLEVBQTZCO0FBQUNDLGVBQU8sSUFBSTdFLENBQVg7QUFBYzs7QUFDNUM2RSxhQUFPLEdBQUdBLE9BQU8sQ0FBQ3pDLE1BQVIsQ0FBZSxDQUFmLEVBQWlCd0MsR0FBakIsQ0FBVjtBQUNBLGFBQU9DLE9BQVA7QUFDSCxLQU5EOztBQVFBUixTQUFLLElBQUksRUFBVDtBQUFnQkUsY0FBVSxHQUFJQSxVQUFVLElBQUksSUFBZCxHQUFxQkEsVUFBckIsR0FBa0MsR0FBaEQ7O0FBRWhCLFFBQUlDLFFBQVEsSUFBSSxjQUFaLElBQThCQSxRQUFRLElBQUksZUFBMUMsSUFBNkRBLFFBQVEsSUFBSSxjQUE3RSxFQUE2RjtBQUFFQSxjQUFRLEdBQUcsZUFBWDtBQUE2Qjs7QUFDNUgsUUFBSSxDQUFDRSxTQUFTLEdBQUdKLFVBQVUsR0FBR0QsS0FBSyxDQUFDakcsTUFBaEMsSUFBMEMsQ0FBOUMsRUFBaUQ7QUFDN0MsVUFBSW9HLFFBQVEsSUFBSSxjQUFoQixFQUFnQztBQUFFSCxhQUFLLEdBQUdNLGdCQUFnQixDQUFDSixVQUFELEVBQWFHLFNBQWIsQ0FBaEIsR0FBMENMLEtBQWxEO0FBQTBELE9BQTVGLE1BQXlHLElBQUlHLFFBQVEsSUFBSSxlQUFoQixFQUFpQztBQUFFSCxhQUFLLEdBQUdBLEtBQUssR0FBR00sZ0JBQWdCLENBQUNKLFVBQUQsRUFBYUcsU0FBYixDQUFoQztBQUEwRCxPQUE3RixNQUNwRyxJQUFJRixRQUFRLElBQUksY0FBaEIsRUFBZ0M7QUFDakNDLFlBQUksR0FBR0UsZ0JBQWdCLENBQUNKLFVBQUQsRUFBYTVGLElBQUksQ0FBQ21HLElBQUwsQ0FBVUosU0FBUyxHQUFDLENBQXBCLENBQWIsQ0FBdkI7QUFDQUwsYUFBSyxHQUFHSSxJQUFJLEdBQUdKLEtBQVAsR0FBZUksSUFBdkI7QUFDQUosYUFBSyxHQUFHQSxLQUFLLENBQUNqQyxNQUFOLENBQWEsQ0FBYixFQUFnQmtDLFVBQWhCLENBQVI7QUFBNkM7QUFDcEQ7O0FBQ0QsV0FBT0QsS0FBUDtBQUNILEdBck5ZO0FBdU5iO0FBQ0FVLFdBQVMsRUFBRSxtQkFBU0MsSUFBVCxFQUFjQyxNQUFkLEVBQXFCQyxLQUFyQixFQUNYO0FBQ0ksUUFBR3hDLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUJDLEdBQW5CLE9BQThCLENBQTlCLElBQW1DRCxDQUFDLENBQUMsUUFBRCxDQUFELENBQVlDLEdBQVosT0FBc0IsV0FBNUQsRUFBd0U7QUFDcEUsVUFBR3FDLElBQUksSUFBRSxDQUFULEVBQVl0QyxDQUFDLENBQUN5QyxLQUFGLENBQVFDLE1BQVIsQ0FBZTtBQUFDQyxhQUFLLEVBQUUzQyxDQUFDLENBQUMsc0JBQUQsQ0FBRCxDQUEwQkMsR0FBMUIsRUFBUjtBQUF3QzJDLGVBQU8sRUFBRTtBQUFqRCxPQUFmO0FBQ1osVUFBR04sSUFBSSxJQUFFLENBQVQsRUFBWXRDLENBQUMsQ0FBQ3lDLEtBQUYsQ0FBUUksS0FBUixDQUFjO0FBQUNDLGdCQUFRLEVBQUUsS0FBWDtBQUFpQkgsYUFBSyxFQUFFM0MsQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0JDLEdBQXhCLEVBQXhCO0FBQXNEMkMsZUFBTyxFQUFFSjtBQUEvRCxPQUFkO0FBQ1osYUFBTyxJQUFQO0FBQ0gsS0FMTCxDQU9JOzs7QUFDQSxRQUFJTyxJQUFJLEdBQUMvQyxDQUFDLENBQUMsU0FBRCxDQUFWO0FBQ0ErQyxRQUFJLENBQUNDLE9BQUw7QUFDQUQsUUFBSSxDQUFDdkIsSUFBTCxDQUFVZSxNQUFWO0FBQ0FRLFFBQUksQ0FBQ0UsV0FBTCxDQUFpQixRQUFqQixFQUEyQkEsV0FBM0IsQ0FBdUMsU0FBdkM7QUFDQSxRQUFHWCxJQUFJLElBQUUsQ0FBVCxFQUNJUyxJQUFJLENBQUNHLFFBQUwsQ0FBYyxRQUFkO0FBQ0osUUFBR1osSUFBSSxJQUFFLENBQVQsRUFDSVMsSUFBSSxDQUFDRyxRQUFMLENBQWMsU0FBZCxFQWZSLENBaUJJOztBQUNBSCxRQUFJLENBQUNJLElBQUwsQ0FBVSxXQUFWLEVBQXNCWCxLQUF0QjtBQUNBTyxRQUFJLENBQUNLLE1BQUw7QUFFQUMsY0FBVSxDQUFDLHlCQUFELEVBQTJCLElBQUUsS0FBN0IsQ0FBVjtBQUVBLFdBQU8sSUFBUDtBQUNILEdBalBZO0FBbVBiQyxzQkFBb0IsRUFBRSw4QkFBU2hHLENBQVQsRUFDdEI7QUFDSSxRQUFJQSxDQUFDLENBQUM1QixNQUFGLEdBQVMsRUFBYixFQUFrQjRCLENBQUMsR0FBQ0EsQ0FBQyxDQUFDb0MsTUFBRixDQUFTLENBQVQsRUFBVyxFQUFYLENBQUY7QUFDbEJwQyxLQUFDLEdBQUNULFFBQVEsQ0FBQ1MsQ0FBRCxFQUFHLEVBQUgsQ0FBVjtBQUNBQSxLQUFDLEdBQUNvRSxPQUFPLENBQUNwRSxDQUFELEVBQUksRUFBSixFQUFRLEdBQVIsRUFBYSxjQUFiLENBQVQ7QUFDQSxRQUFJaUcsUUFBUSxHQUFJMUcsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FBUixHQUNaN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FESSxHQUVaN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FGSSxHQUdaN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FISSxHQUlaN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FKSSxHQUtaN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsRUFBVCxFQUFZLENBQVosQ0FBRCxFQUFnQixFQUFoQixDQUxaO0FBT0EsUUFBSThELGNBQWMsR0FBR0QsUUFBUSxHQUFHLENBQWhDO0FBQ0EsUUFBSUUsT0FBTyxHQUFJNUcsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FBUixHQUNYN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FERyxHQUVYN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FGRyxHQUdYN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FIRyxHQUlYN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsQ0FBVCxFQUFXLENBQVgsQ0FBRCxFQUFlLEVBQWYsQ0FKRyxHQUtYN0MsUUFBUSxDQUFDUyxDQUFDLENBQUNvQyxNQUFGLENBQVMsRUFBVCxFQUFZLENBQVosQ0FBRCxFQUFnQixFQUFoQixDQUxaO0FBT0EsUUFBSWdFLFNBQVMsR0FBR0YsY0FBYyxHQUFHQyxPQUFqQztBQUNBLFFBQUlFLFFBQVEsR0FBSTFILElBQUksQ0FBQ21HLElBQUwsQ0FBVXNCLFNBQVMsR0FBQyxFQUFwQixDQUFELEdBQTBCLEVBQXpDO0FBQ0EsUUFBSUUsV0FBVyxHQUFHRCxRQUFRLEdBQUdELFNBQTdCO0FBRUEsV0FBT0UsV0FBUDtBQUNILEdBNVFZO0FBOFFiO0FBQ0FDLGlCQUFlLEVBQUUseUJBQVNDLE9BQVQsRUFDakI7QUFFSSxTQUFJLElBQUk5SCxDQUFDLEdBQUMsQ0FBVixFQUFZQSxDQUFDLEdBQUNnRSxDQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QitELElBQXpCLEVBQWQsRUFBOEMvSCxDQUFDLEVBQS9DLEVBQ0E7QUFDSSxVQUFJZ0ksRUFBRSxHQUFDLGtCQUFnQmhJLENBQXZCOztBQUNBLFVBQUlnRSxDQUFDLENBQUNnRSxFQUFELENBQUQsQ0FBTWIsSUFBTixDQUFXLFVBQVgsS0FBd0IsRUFBNUIsRUFDQTtBQUNJbkQsU0FBQyxDQUFDZ0UsRUFBRCxDQUFELENBQU1DLFVBQU4sQ0FBaUIsVUFBakI7QUFDQWpFLFNBQUMsQ0FBQ2dFLEVBQUQsQ0FBRCxDQUFNbEQsSUFBTjtBQUNILE9BSkQsTUFNQTtBQUNJZCxTQUFDLENBQUNnRSxFQUFELENBQUQsQ0FBTWIsSUFBTixDQUFXLFVBQVgsRUFBc0IsVUFBdEI7QUFDQW5ELFNBQUMsQ0FBQ2dFLEVBQUQsQ0FBRCxDQUFNRSxJQUFOO0FBRUg7QUFDSjtBQUNKLEdBalNZO0FBbVNiQyxRQUFNLEVBQUUsZ0JBQVVDLFFBQVYsRUFBb0JDLE1BQXBCLEVBQTRCQyxNQUE1QixFQUFvQztBQUN4QyxRQUFJdEksQ0FBQyxHQUFHLENBQUNvSSxRQUFRLEdBQUcsRUFBWixFQUFnQjVILE9BQWhCLENBQXdCNkgsTUFBeEIsRUFBaUNDLE1BQU0sSUFBSSxDQUEzQyxDQUFSO0FBQ0EsV0FBT3RJLENBQUMsS0FBSyxDQUFDLENBQVAsR0FBVyxLQUFYLEdBQW1CQSxDQUExQjtBQUNILEdBdFNZO0FBeVNiO0FBQ0F1SSxRQUFNLEVBQUUsZ0JBQVNDLEtBQVQsRUFBZUMsS0FBZixFQUNSO0FBQ0ksUUFBR0QsS0FBSyxJQUFFLElBQVYsRUFBZ0JBLEtBQUssR0FBQyxDQUFOO0FBQ2hCLFFBQUlBLEtBQUssSUFBRSxDQUFYLEVBQWU7QUFFZixRQUFJckYsQ0FBQyxHQUFDYSxDQUFDLENBQUMsa0JBQWdCd0UsS0FBakIsQ0FBRCxDQUF5QkUsSUFBekIsQ0FBOEJELEtBQTlCLENBQU47QUFDQSxRQUFJQSxLQUFLLElBQUUsVUFBUCxJQUFxQkEsS0FBSyxJQUFFLG9CQUFoQyxFQUF1RHRGLENBQUMsR0FBQ3ZCLFNBQVMsQ0FBQ3VCLENBQUQsQ0FBWDtBQUN2RCxXQUFPQSxDQUFQO0FBQ0gsR0FsVFk7QUFvVGJ3RixpQkFBZSxFQUFFLHlCQUFTdkQsR0FBVCxFQUFhd0QsT0FBYixFQUFxQkMsUUFBckIsRUFBOEJDLFlBQTlCLEVBQTJDQyxnQkFBM0MsRUFBNkQ7QUFDMUUsUUFBSUMsSUFBSSxHQUFHLEVBQVg7O0FBQ0EsUUFBRyxRQUFPNUQsR0FBUCxNQUFlLFFBQWxCLEVBQTJCO0FBQ3ZCd0QsYUFBTyxHQUFHeEQsR0FBRyxDQUFDLFNBQUQsQ0FBYjtBQUNBeUQsY0FBUSxHQUFHekQsR0FBRyxDQUFDLFVBQUQsQ0FBZDtBQUNBMEQsa0JBQVksR0FBRzFELEdBQUcsQ0FBQyxjQUFELENBQWxCO0FBQ0EyRCxzQkFBZ0IsR0FBRzNELEdBQUcsQ0FBQyxXQUFELENBQXRCO0FBQ0E0RCxVQUFJLEdBQUc1RCxHQUFHLENBQUMsTUFBRCxDQUFWO0FBQ0FBLFNBQUcsR0FBR0EsR0FBRyxDQUFDLEtBQUQsQ0FBVDtBQUNIOztBQUNELFFBQUcsT0FBT3lELFFBQVAsS0FBb0IsV0FBdkIsRUFBb0NBLFFBQVEsR0FBQyxJQUFUO0FBQ3BDLFFBQUcsT0FBT0MsWUFBUCxLQUF3QixXQUEzQixFQUF3Q0EsWUFBWSxHQUFDLEtBQWI7QUFHeEMsUUFBR0EsWUFBSCxFQUFpQnJFLE9BQU87QUFFeEJULEtBQUMsQ0FBQ21CLElBQUYsQ0FBTztBQUNIQyxTQUFHLEVBQUVBLEdBQUcsR0FBQyxPQUROO0FBRUg2RCxVQUFJLEVBQUUsTUFGSDtBQUdIQyxXQUFLLEVBQUVMLFFBSEo7QUFJSHhELGNBQVEsRUFBRSxNQUpQO0FBS0gyRCxVQUFJLEVBQUVBLElBTEg7QUFNSDFELGFBQU8sRUFBRSxpQkFBU0MsSUFBVCxFQUFjO0FBQ25CLFlBQUk0RCxhQUFhLEdBQUM1RCxJQUFJLENBQUNqRixJQUF2QjtBQUNBMEQsU0FBQyxDQUFDLE1BQUk0RSxPQUFMLENBQUQsQ0FBZXBELElBQWYsQ0FBb0IyRCxhQUFwQjtBQUNBLFlBQUdMLFlBQUgsRUFBaUJyRSxPQUFPLENBQUMsS0FBRCxDQUFQO0FBRWpCVCxTQUFDLENBQUMsTUFBTTRFLE9BQU4sR0FBZ0IsZ0JBQWpCLENBQUQsQ0FBb0NRLElBQXBDLENBQXlDLFlBQVU7QUFBRUMscUJBQVcsQ0FBQ0MsZUFBWixDQUE0QixJQUE1QjtBQUFvQyxTQUF6RjtBQUVBLFlBQUcsT0FBT1AsZ0JBQVAsS0FBNEIsVUFBL0IsRUFBMkNBLGdCQUFnQixDQUFDeEQsSUFBRCxDQUFoQjtBQUM5QztBQWRFLEtBQVA7QUFnQkgsR0FwVlk7QUFzVmJnRSxpQkFBZSxFQUFFLHlCQUFTQyxNQUFULEVBQ2pCO0FBQ0ksUUFBSUMsS0FBSyxHQUFDekYsQ0FBQyxDQUFDLFFBQUQsQ0FBWDtBQUNBLFFBQUd3RixNQUFNLElBQUUsRUFBWCxFQUFlQyxLQUFLLENBQUNDLE1BQU4sR0FBZixLQUNLO0FBQ0RELFdBQUssQ0FBQ0UsTUFBTixHQUFhLEtBQWI7QUFDQUYsV0FBSyxDQUFDRyxNQUFOLEdBQWEsUUFBYjtBQUNBSCxXQUFLLENBQUNELE1BQU4sR0FBYUEsTUFBYjtBQUNBQyxXQUFLLENBQUNDLE1BQU47QUFDSDtBQUNKLEdBaFdZO0FBa1diRyxrQkFBZ0IsRUFBRSw0QkFBVTtBQUN4QixRQUFJSixLQUFLLEdBQUN6RixDQUFDLENBQUMsUUFBRCxDQUFYO0FBQ0F5RixTQUFLLENBQUNmLElBQU4sQ0FBVyxRQUFYLEVBQW9CLEVBQXBCO0FBQ0FlLFNBQUssQ0FBQ3hCLFVBQU4sQ0FBaUIsUUFBakI7QUFDQXdCLFNBQUssQ0FBQ0MsTUFBTjtBQUNILEdBdldZO0FBeVdiSSxZQUFVLEVBQUUsb0JBQVNDLEtBQVQsRUFDWjtBQUNJL0YsS0FBQyxDQUFDLFFBQUQsQ0FBRCxDQUFZQyxHQUFaLENBQWdCOEYsS0FBaEI7QUFDQUYsb0JBQWdCO0FBQ25CLEdBN1dZO0FBK1diRyxjQUFZLEVBQUUsc0JBQVNoQyxFQUFULEVBQVlpQyxrQkFBWixFQUErQkMsb0JBQS9CLEVBQW9EQyxNQUFwRCxFQUEyREMsV0FBM0QsRUFBdUVDLGVBQXZFLEVBQXVGQyxrQkFBdkYsRUFBMEc7QUFDcEhDLGFBQVMsQ0FBQ3ZHLENBQUMsQ0FBQywwQkFBRCxDQUFELENBQThCQyxHQUE5QixLQUFvQyxRQUFyQyxFQUE4QyxZQUFVO0FBQzdEdUcsZ0JBQVUsQ0FBQ3hHLENBQUMsQ0FBQywwQkFBRCxDQUFELENBQThCQyxHQUE5QixLQUFvQyxRQUFyQyxFQUE4QyxZQUFVO0FBQzlEd0csdUJBQWUsQ0FBQ3pDLEVBQUQsRUFBSWlDLGtCQUFKLEVBQXVCQyxvQkFBdkIsRUFBNENDLE1BQTVDLEVBQW1EQyxXQUFuRCxFQUErREMsZUFBL0QsRUFBK0VDLGtCQUEvRSxDQUFmO0FBQ0gsT0FGUyxDQUFWO0FBR0gsS0FKUSxDQUFUO0FBS0gsR0FyWFk7QUF1WGJHLGlCQUFlO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLElBQUUsVUFBU3pDLEVBQVQsRUFBWWlDLGtCQUFaLEVBQStCQyxvQkFBL0IsRUFBb0RDLE1BQXBELEVBQTJEQyxXQUEzRCxFQUF1RUMsZUFBdkUsRUFBdUZDLGtCQUF2RixFQUEwRztBQUN2SCxRQUFHLE9BQU9KLG9CQUFQLEtBQWdDLFdBQW5DLEVBQWdEQSxvQkFBb0IsR0FBRyxFQUF2QjtBQUNoRCxRQUFHLE9BQU9DLE1BQVAsS0FBa0IsV0FBckIsRUFBa0NBLE1BQU0sR0FBRyxLQUFUO0FBQ2xDLFFBQUcsT0FBT0MsV0FBUCxLQUF1QixXQUExQixFQUF1Q0EsV0FBVyxHQUFHLENBQWQ7QUFDdkMsUUFBRyxPQUFPQyxlQUFQLEtBQTJCLFdBQTlCLEVBQTJDQSxlQUFlLEdBQUcsRUFBbEI7QUFDM0MsUUFBRyxPQUFPQyxrQkFBUCxLQUE4QixXQUFqQyxFQUE4Q0Esa0JBQWtCLEdBQUcsRUFBckI7QUFFOUMsUUFBSUksTUFBTSxHQUFDMUcsQ0FBQyxDQUFDLFNBQUQsQ0FBRCxDQUFhQyxHQUFiLEVBQVg7QUFDQSxRQUFJMEcsUUFBUSxHQUFDM0csQ0FBQyxDQUFDLFdBQUQsQ0FBRCxDQUFlQyxHQUFmLEVBQWIsQ0FSdUgsQ0FTdkg7O0FBQ0EsUUFBSW1CLEdBQUcsR0FBQywrQkFBNkI0QyxFQUE3QixHQUFnQyxVQUFoQyxHQUEyQzBDLE1BQTNDLEdBQWtELFlBQWxELEdBQStEQyxRQUF2RTtBQUNBLFFBQUdQLFdBQVcsR0FBQyxDQUFaLElBQWlCQyxlQUFwQixFQUFxQ2pGLEdBQUcsR0FBQyx3Q0FBc0NnRixXQUF0QyxHQUFrRCxtQkFBbEQsR0FBc0VDLGVBQXRFLEdBQXNGLGdCQUExRjtBQUNyQyxRQUFHSCxvQkFBSCxFQUF5QjlFLEdBQUcsSUFBRSxNQUFJOEUsb0JBQVQ7QUFDekIsUUFBSUQsa0JBQUosRUFBd0I3RSxHQUFHLElBQUUscUJBQUw7QUFDeEJYLFdBQU8sQ0FBQyxJQUFELENBQVA7QUFDQVQsS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFNBQUcsRUFBRUEsR0FERjtBQUVIQyxjQUFRLEVBQUUsS0FGUDtBQUdIQyxhQUFPLEVBQUUsaUJBQVNzRixHQUFULEVBQWE7QUFDbEJuRyxlQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0EsWUFBSW9HLGVBQWUsR0FBRzdHLENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVksaUJBQVosRUFBK0J4SyxJQUEvQixFQUF0QjtBQUNBeUssbUNBQTJCLENBQUNILEdBQUQsRUFBTSxLQUFOLEVBQWFDLGVBQWIsQ0FBM0I7QUFDQSxZQUFJRyxHQUFHLEdBQUdoSCxDQUFDLENBQUM0RyxHQUFELENBQUQsQ0FBT0UsSUFBUCxDQUFZLEtBQVosRUFBbUJ4SyxJQUFuQixFQUFWOztBQUNBLFlBQUcwSyxHQUFILEVBQ0E7QUFDSSxjQUFHYixNQUFILEVBQVc7QUFDUCxnQkFBR0MsV0FBVyxHQUFDLENBQWYsRUFDSTdILE1BQU0sQ0FBQzBJLFFBQVAsQ0FBZ0JDLElBQWhCLEdBQXFCLHNCQUFvQmIsZUFBcEIsR0FBb0MsZ0JBQXpELENBREosS0FFS1ksUUFBUSxDQUFDZCxNQUFUO0FBQ1I7O0FBQ0QsY0FBR0csa0JBQUgsRUFBdUJhLFdBQVcsQ0FBQ2Isa0JBQUQsRUFBb0IsT0FBcEIsQ0FBWDtBQUN2QnRHLFdBQUMsQ0FBQyxTQUFPZ0UsRUFBUixDQUFELENBQWFvRCxPQUFiO0FBQ0gsU0FURCxNQVdBO0FBQ0ksY0FBR1AsZUFBSCxFQUNBO0FBQ0lOLHFCQUFTLENBQUNNLGVBQUQsRUFBaUIsWUFBVTtBQUNoQ0osNkJBQWUsQ0FBQ3pDLEVBQUQsRUFBSSxDQUFKLEVBQU1rQyxvQkFBTixFQUEyQkMsTUFBM0IsRUFBa0NDLFdBQWxDLEVBQThDQyxlQUE5QyxFQUErREMsa0JBQS9ELENBQWY7QUFDSCxhQUZRLENBQVQ7QUFHSDtBQUNKO0FBQ0o7QUEzQkUsS0FBUDtBQWdDQSxXQUFPLElBQVA7QUFDSCxHQWhEYyxDQXZYRjtBQXlhYmUsaUJBQWUsRUFBRSx5QkFBU2xCLE1BQVQsRUFBZ0JtQixZQUFoQixFQUE2QmxHLEdBQTdCLEVBQWlDbUcsV0FBakMsRUFBNkNDLG9CQUE3QyxFQUNqQjtBQUNJLFFBQUdyQixNQUFNLElBQUUsRUFBWCxFQUFlQSxNQUFNLEdBQUMsS0FBUDtBQUNmLFFBQUdtQixZQUFZLElBQUUsRUFBakIsRUFBcUJBLFlBQVksR0FBQyxLQUFiO0FBRXJCLFFBQUlHLEtBQUssR0FBR3pILENBQUMsQ0FBQyxRQUFELENBQWI7QUFFQXlILFNBQUssQ0FBQ3RFLElBQU4sQ0FBVyxVQUFYLEVBQXNCLElBQXRCO0FBQ0EsUUFBR21FLFlBQUgsRUFBaUIzRyxRQUFRLENBQUMsSUFBRCxFQUFNLElBQU4sQ0FBUjtBQUNqQixRQUFHLE9BQU82RyxvQkFBUCxLQUE4QixVQUFqQyxFQUE2Q0Esb0JBQW9CO0FBQ2pFLFFBQUlFLGFBQWEsR0FBRzFILENBQUMsQ0FBQyxlQUFELENBQXJCO0FBQ0EwSCxpQkFBYSxDQUFDekgsR0FBZCxDQUFrQixDQUFsQjtBQUVBRCxLQUFDLENBQUNtQixJQUFGLENBQU87QUFDSEMsU0FBRyxFQUFFLFVBREY7QUFFSDZELFVBQUksRUFBRSxNQUZIO0FBR0g1RCxjQUFRLEVBQUUsS0FIUDtBQUlIMkQsVUFBSSxFQUFHaEYsQ0FBQyxDQUFDLDBCQUFELENBQUQsQ0FBOEIySCxTQUE5QixFQUpKO0FBS0hyRyxhQUFPLEVBQUUsaUJBQVU5RixHQUFWLEVBQWU7QUFDcEJ1TCxtQ0FBMkIsQ0FBQ3ZMLEdBQUQsQ0FBM0I7QUFDQWtNLHFCQUFhLENBQUN6SCxHQUFkLENBQWtCLEVBQWxCO0FBQ0EsWUFBSStHLEdBQUcsR0FBR2hILENBQUMsQ0FBQ3hFLEdBQUQsQ0FBRCxDQUFPc0wsSUFBUCxDQUFZLEtBQVosRUFBbUJ4SyxJQUFuQixFQUFWO0FBQ0EsWUFBSXNMLEtBQUssR0FBRzVILENBQUMsQ0FBQ3hFLEdBQUQsQ0FBRCxDQUFPc0wsSUFBUCxDQUFZLE9BQVosRUFBcUJ4SyxJQUFyQixFQUFaO0FBQ0EsWUFBSTBILEVBQUUsR0FBR2hFLENBQUMsQ0FBQ3hFLEdBQUQsQ0FBRCxDQUFPc0wsSUFBUCxDQUFZLElBQVosRUFBa0J4SyxJQUFsQixFQUFUOztBQUVBLFlBQUcwSyxHQUFILEVBQ0E7QUFDSWhILFdBQUMsQ0FBQyxLQUFELENBQUQsQ0FBU0MsR0FBVCxDQUFhK0QsRUFBYjtBQUNBeUQsZUFBSyxDQUFDckUsTUFBTjtBQUNBcEQsV0FBQyxDQUFDLGtCQUFELENBQUQsQ0FBc0JDLEdBQXRCLENBQTBCLENBQTFCO0FBRUEsY0FBR2tHLE1BQU0sSUFBSSxDQUFDeUIsS0FBZCxFQUFxQnJKLE1BQU0sQ0FBQzBJLFFBQVAsQ0FBZ0JkLE1BQWhCLEdBTHpCLENBTUk7O0FBQ0EsY0FBRy9FLEdBQUcsSUFBRSxJQUFMLElBQWFBLEdBQUcsSUFBRSxFQUFsQixJQUF3QixDQUFDd0csS0FBNUIsRUFBbUNySixNQUFNLENBQUMwSSxRQUFQLENBQWdCQyxJQUFoQixHQUFxQjlGLEdBQUcsR0FBQzRDLEVBQXpCO0FBQ25DLGNBQUcsT0FBT3VELFdBQVAsS0FBcUIsVUFBeEIsRUFBb0NBLFdBQVcsQ0FBQyxJQUFELEVBQU0vTCxHQUFOLENBQVg7QUFDdkMsU0FWRCxNQVlBO0FBQ0ksY0FBRyxPQUFPK0wsV0FBUCxLQUFxQixVQUF4QixFQUFvQ0EsV0FBVyxDQUFDLEtBQUQsRUFBTy9MLEdBQVAsQ0FBWDtBQUN2Qzs7QUFFRGlNLGFBQUssQ0FBQ3RFLElBQU4sQ0FBVyxVQUFYLEVBQXNCLEtBQXRCO0FBQ0EsWUFBR21FLFlBQUgsRUFBaUIzRyxRQUFRLENBQUMsS0FBRCxDQUFSO0FBQ3BCLE9BOUJFO0FBK0JIa0MsV0FBSyxFQUFFLGVBQVVnRixHQUFWLEVBQWVDLFdBQWYsRUFBNEJDLFdBQTVCLEVBQXlDO0FBQzVDL0gsU0FBQyxDQUFDLFdBQUQsQ0FBRCxDQUFld0IsSUFBZixDQUFvQixVQUFRcUcsR0FBRyxDQUFDRyxNQUFaLEdBQXFCLE1BQXJCLEdBQThCRCxXQUE5QixHQUE0QyxRQUFoRTtBQUNBTixhQUFLLENBQUN0RSxJQUFOLENBQVcsVUFBWCxFQUFzQixLQUF0QjtBQUNIO0FBbENFLEtBQVA7QUFvQ0gsR0ExZFk7QUE0ZGI4RSxrQkFBZ0IsRUFBRSwwQkFBU0MsZUFBVCxFQUNsQjtBQUNJLFFBQUlDLFVBQVUsR0FBQ25JLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUJDLEdBQWpCLEVBQWY7QUFDQSxRQUFJbUksUUFBUSxHQUFDRCxVQUFVLENBQUMxTCxLQUFYLENBQWlCLGFBQWpCLENBQWI7QUFDQSxRQUFJMkosV0FBVyxHQUFDcEcsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQkMsR0FBbEIsRUFBaEI7QUFDQSxRQUFJbUIsR0FBRyxHQUFDZ0gsUUFBUSxDQUFDLENBQUQsQ0FBUixHQUFZLGVBQVosR0FBNEJoQyxXQUFwQztBQUNBLFFBQUc4QixlQUFlLElBQUUsQ0FBcEIsRUFDSTlHLEdBQUcsSUFBRSxzQkFBTDtBQUNKN0MsVUFBTSxDQUFDQyxJQUFQLENBQVk0QyxHQUFaLEVBQWlCLFFBQWpCO0FBQ0gsR0FyZVk7QUF1ZWJpSCxtQkFBaUIsRUFBRSwyQkFBU0MsVUFBVCxFQUFvQnRFLEVBQXBCLEVBQXVCcUMsZUFBdkIsRUFBdUNLLE1BQXZDLEVBQThDNkIsU0FBOUMsRUFBd0RDLFdBQXhELEVBQW9FQyxRQUFwRSxFQUE2RUMsSUFBN0UsRUFBa0ZwQixZQUFsRixFQUErRkMsV0FBL0YsRUFBMkc7QUFDMUgsUUFBR21CLElBQUksSUFBRSxJQUFULEVBQWVBLElBQUksR0FBQyxPQUFMO0FBQ2YsUUFBR3BCLFlBQVksSUFBRSxJQUFqQixFQUF1QkEsWUFBWSxHQUFDLEtBQWI7O0FBQ3ZCLFFBQUdrQixXQUFXLElBQUUsTUFBaEIsRUFBdUI7QUFDbkIsVUFBR3hFLEVBQUUsSUFBRSxFQUFQLEVBQVdBLEVBQUUsR0FBQyxDQUFIO0FBQ1hyRCxjQUFRLENBQUMsSUFBRCxFQUFNMkcsWUFBTixDQUFSO0FBQ0EsVUFBSXFCLFFBQVEsR0FBQzNJLENBQUMsQ0FBQyxvQkFBRCxDQUFkO0FBQ0EySSxjQUFRLENBQUN6RSxJQUFUO0FBQ0EsVUFBSXVCLEtBQUssR0FBQ3pGLENBQUMsQ0FBQyxNQUFJMEksSUFBTCxDQUFYO0FBQ0ExSSxPQUFDLENBQUMsYUFBRCxDQUFELENBQWlCQyxHQUFqQixDQUFxQnFJLFVBQXJCO0FBQ0EsVUFBSTlDLE1BQU0sR0FBQyw4QkFBNEJ4QixFQUF2QztBQUNBLFVBQUd5RSxRQUFRLElBQUUsT0FBYixFQUFzQmpELE1BQU0sSUFBRSxRQUFSO0FBQ3RCeEYsT0FBQyxDQUFDNEksSUFBRixDQUFPcEQsTUFBUCxFQUFjQyxLQUFLLENBQUNrQyxTQUFOLEVBQWQsRUFBZ0MsVUFBU2YsR0FBVCxFQUFhO0FBQ3pDLFlBQUlJLEdBQUcsR0FBQ2hILENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVksS0FBWixFQUFtQnhLLElBQW5CLEVBQVI7QUFDQSxZQUFJdU0sT0FBTyxHQUFDN0ksQ0FBQyxDQUFDNEcsR0FBRCxDQUFELENBQU9FLElBQVAsQ0FBWSxTQUFaLEVBQXVCeEssSUFBdkIsRUFBWjtBQUNBLFlBQUcsT0FBT2lMLFdBQVAsS0FBcUIsVUFBeEIsRUFBb0NBLFdBQVc7O0FBQy9DLFlBQUdQLEdBQUcsSUFBRSxNQUFSLEVBQWU7QUFDWCxjQUFHeUIsUUFBUSxJQUFFLE9BQWIsRUFBc0JsSyxNQUFNLENBQUNDLElBQVAsQ0FBWXFLLE9BQVosRUFBb0IsUUFBcEIsRUFBdEIsS0FDS3RLLE1BQU0sQ0FBQzBJLFFBQVAsQ0FBZ0JDLElBQWhCLEdBQXFCMkIsT0FBckI7QUFDUixTQUhELE1BS0lDLEtBQUssQ0FBQyw4QkFBRCxDQUFMOztBQUVKSCxnQkFBUSxDQUFDN0gsSUFBVDtBQUNBSCxnQkFBUSxDQUFDLEtBQUQsQ0FBUjtBQUNILE9BYkQ7QUFjSCxLQXZCRCxNQXdCSTtBQUNBLFVBQUlTLEdBQUcsR0FBQywwQkFBd0JrSCxVQUFoQztBQUVBLFVBQUlTLE1BQU0sR0FBR1IsU0FBUyxDQUFDOUwsS0FBVixDQUFnQixHQUFoQixDQUFiO0FBRUF1RCxPQUFDLENBQUNvRixJQUFGLENBQU8yRCxNQUFQLEVBQWMsVUFBUy9NLENBQVQsRUFBWTtBQUN0Qm9GLFdBQUcsSUFBRSxNQUFJMkgsTUFBTSxDQUFDL00sQ0FBRCxDQUFmO0FBQ0gsT0FGRDtBQUlBLFVBQUdxSyxlQUFlLElBQUUsRUFBcEIsRUFBd0JqRixHQUFHLElBQUUsa0JBQWdCNEMsRUFBaEIsR0FBbUIsbUJBQW5CLEdBQXVDcUMsZUFBNUMsQ0FBeEIsS0FDS2pGLEdBQUcsSUFBRSxTQUFPNEMsRUFBUCxHQUFVLFVBQVYsR0FBcUIwQyxNQUExQjtBQUVMbkksWUFBTSxDQUFDQyxJQUFQLENBQVk0QyxHQUFaLEVBQWdCLFFBQWhCO0FBQ0g7QUFDSixHQWhoQlk7QUFraEJiNEgsa0JBQWdCLEVBQUUsMEJBQVNDLElBQVQsRUFBYzNCLFlBQWQsRUFBMkI7QUFDekMsUUFBR0EsWUFBSCxFQUFpQjNHLFFBQVEsQ0FBQyxJQUFELEVBQU0sSUFBTixDQUFSO0FBQ2pCc0ksUUFBSSxDQUFDdkMsTUFBTCxHQUFhLGlCQUFiO0FBQ0F1QyxRQUFJLENBQUN0QyxRQUFMLEdBQWdCLGVBQWhCO0FBQ0EzRyxLQUFDLENBQUNtQixJQUFGLENBQU87QUFDSEMsU0FBRyxFQUFFLGVBREY7QUFFSDZELFVBQUksRUFBRSxNQUZIO0FBR0g1RCxjQUFRLEVBQUUsTUFIUDtBQUlIMkQsVUFBSSxFQUFFaUUsSUFKSDtBQUtIM0gsYUFBTyxFQUFFLGlCQUFVQyxJQUFWLEVBQWdCO0FBQ3JCLFlBQUl5RixHQUFHLEdBQUd6RixJQUFJLENBQUN5RixHQUFmO0FBQ0EsWUFBSTZCLE9BQU8sR0FBR3RILElBQUksQ0FBQ3NILE9BQW5CO0FBQ0EsWUFBR3ZCLFlBQUgsRUFBaUIzRyxRQUFRLENBQUMsS0FBRCxDQUFSO0FBQ2pCLFlBQUdxRyxHQUFILEVBQ0l6SSxNQUFNLENBQUNDLElBQVAsQ0FBWSxTQUFPcUssT0FBbkIsRUFESixLQUdJQyxLQUFLLENBQUM5SSxDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQkMsR0FBdEIsRUFBRCxDQUFMO0FBQ1A7QUFiRSxLQUFQO0FBZUgsR0FyaUJZO0FBdWlCYmlKLFVBQVEsRUFBRSxrQkFBVUgsTUFBVixFQUFrQk4sUUFBbEIsRUFBNEJVLFFBQTVCLEVBQXFDO0FBQzNDbkosS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFNBQUcsRUFBRSx1QkFERjtBQUVINkQsVUFBSSxFQUFFLE1BRkg7QUFHSDVELGNBQVEsRUFBRSxLQUhQO0FBSUgyRCxVQUFJLEVBQUUrRCxNQUpIO0FBS0h6SCxhQUFPLEVBQUUsaUJBQVVzRixHQUFWLEVBQWM7QUFDbkIsWUFBRyxPQUFPdUMsUUFBUCxLQUFvQixVQUF2QixFQUFtQztBQUMvQkEsa0JBQVEsQ0FBQ3ZDLEdBQUQsQ0FBUjtBQUNBO0FBQ0g7O0FBRUQsWUFBSUksR0FBRyxHQUFHaEgsQ0FBQyxDQUFDNEcsR0FBRCxDQUFELENBQU9FLElBQVAsQ0FBWSxLQUFaLEVBQW1CeEssSUFBbkIsRUFBVjs7QUFDQSxZQUFHMEssR0FBRyxLQUFLLE1BQVgsRUFBb0I7QUFDaEI4QixlQUFLLENBQUM5SSxDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQkMsR0FBdEIsRUFBRCxDQUFMO0FBQ0E7QUFDSDs7QUFDRCxZQUFJNEksT0FBTyxHQUFHN0ksQ0FBQyxDQUFDNEcsR0FBRCxDQUFELENBQU9FLElBQVAsQ0FBWSxTQUFaLEVBQXVCeEssSUFBdkIsRUFBZDtBQUVBLFlBQUcsQ0FBQ21NLFFBQUosRUFBY2xLLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZcUssT0FBWixFQUFkLEtBQ0t0SyxNQUFNLENBQUMwSSxRQUFQLENBQWdCQyxJQUFoQixHQUFxQjJCLE9BQXJCO0FBQ1I7QUFwQkUsS0FBUDtBQXNCSCxHQTlqQlk7QUFna0JiTyxnQkFBYyxFQUFFLHdCQUFTQyxTQUFULEVBQW9CQyxPQUFwQixFQUE0QjtBQUN4QyxRQUFHLE9BQU9BLE9BQVAsS0FBbUIsV0FBdEIsRUFBbUNBLE9BQU8sR0FBRyxLQUFWO0FBRW5DdEosS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFNBQUcsRUFBRSxrRUFBa0VrSSxPQUFPLEdBQUcsR0FBSCxHQUFTLEdBQWxGLENBREY7QUFFSGpJLGNBQVEsRUFBRSxNQUZQO0FBR0hDLGFBQU8sRUFBQyxpQkFBU0MsSUFBVCxFQUFjO0FBQ2xCdkIsU0FBQyxDQUFDLE1BQUlxSixTQUFMLENBQUQsQ0FBaUJwSixHQUFqQixDQUFxQnNCLElBQUksQ0FBQ2dJLFFBQTFCO0FBQ0g7QUFMRSxLQUFQO0FBT0gsR0Exa0JZO0FBNGtCYkMsZ0JBQWMsRUFBRSwwQkFDaEI7QUFDSSxRQUFJbkQsZUFBZSxHQUFDckcsQ0FBQyxDQUFDLGtCQUFELENBQUQsQ0FBc0JDLEdBQXRCLEVBQXBCO0FBQ0EsUUFBSXlHLE1BQU0sR0FBQzFHLENBQUMsQ0FBQyxTQUFELENBQUQsQ0FBYUMsR0FBYixFQUFYO0FBQ0EsUUFBSTBHLFFBQVEsR0FBQzNHLENBQUMsQ0FBQyxXQUFELENBQUQsQ0FBZUMsR0FBZixFQUFiO0FBQ0EsUUFBSWtHLE1BQU0sR0FBQyxlQUFhUSxRQUF4QjtBQUNBLFFBQUcsT0FBT04sZUFBUCxLQUF5QixXQUE1QixFQUF5Q0YsTUFBTSxJQUFFLGFBQVdPLE1BQW5CLENBQXpDLEtBQ0s7QUFDRCxVQUFHMUcsQ0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0JDLEdBQXBCLE1BQTJCLEVBQTlCLEVBQWtDa0csTUFBTSxHQUFDLG9CQUFQO0FBQ2xDQSxZQUFNLElBQUUsc0JBQW9CRSxlQUE1QjtBQUNIO0FBQ0Q5SCxVQUFNLENBQUMwSSxRQUFQLEdBQWdCZCxNQUFoQjtBQUNILEdBeGxCWTtBQTBsQmJzRCxpQkFBZSxFQUFFLDJCQUNqQjtBQUNJLFFBQUlyRCxXQUFXLEdBQUNwRyxDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCMEosUUFBbEIsRUFBaEI7QUFDQW5ELGFBQVMsQ0FBQ3ZHLENBQUMsQ0FBQyxvQkFBRCxDQUFELENBQXdCQyxHQUF4QixFQUFELEVBQStCLFlBQVU7QUFDOUNELE9BQUMsQ0FBQzJKLEdBQUYsQ0FBTSxpREFBK0N2RCxXQUEvQyxHQUEyRCxtQkFBM0QsR0FBK0VwRyxDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQkMsR0FBdEIsRUFBckYsRUFBa0gsVUFBUzJHLEdBQVQsRUFBYztBQUM1SCxZQUFJSSxHQUFHLEdBQUNoSCxDQUFDLENBQUM0RyxHQUFELENBQUQsQ0FBT0UsSUFBUCxDQUFZLEtBQVosRUFBbUJ4SyxJQUFuQixFQUFSOztBQUNBLFlBQUcwSyxHQUFILEVBQ0E7QUFDSTNFLG1CQUFTLENBQUMsQ0FBRCxFQUFHLGVBQUgsRUFBbUJyQyxDQUFDLENBQUM0RyxHQUFELENBQUQsQ0FBT0UsSUFBUCxDQUFZLEtBQVosRUFBbUJ4SyxJQUFuQixFQUFuQixDQUFUO0FBQ0EwRCxXQUFDLENBQUMsV0FBRCxDQUFELENBQWVnRCxPQUFmO0FBQ0gsU0FKRCxNQU1JWCxTQUFTLENBQUMsQ0FBRCxFQUFHLCtCQUFILEVBQW1DckMsQ0FBQyxDQUFDNEcsR0FBRCxDQUFELENBQU9FLElBQVAsQ0FBWSxLQUFaLEVBQW1CeEssSUFBbkIsRUFBbkMsQ0FBVDtBQUNQLE9BVEQ7QUFVSCxLQVhRLENBQVQ7QUFZSCxHQXptQlk7QUEybUJic04sa0JBQWdCLEVBQUUsNEJBQ2xCO0FBQ0ksUUFBSTNKLEdBQUcsR0FBQyxFQUFSO0FBQVcsUUFBSTRKLElBQUo7QUFDWCxRQUFJQyxPQUFPLEdBQUM5SixDQUFDLENBQUMsUUFBRCxDQUFELENBQVkrSixFQUFaLENBQWUsVUFBZixDQUFaO0FBQ0EsUUFBSSxDQUFDRCxPQUFMLEVBQWU3SixHQUFHLEdBQUMsU0FBSjtBQUNmLFFBQUkrSixLQUFLLEdBQUNoSyxDQUFDLENBQUMsVUFBRCxDQUFELENBQWMwSixRQUFkLEVBQVY7QUFDQSxRQUFHTSxLQUFLLElBQUUsQ0FBVixFQUFhQSxLQUFLLEdBQUMsSUFBTjs7QUFFYixTQUFJLElBQUloTyxDQUFDLEdBQUMsQ0FBVixFQUFZQSxDQUFDLEdBQUNnTyxLQUFkLEVBQW9CaE8sQ0FBQyxFQUFyQixFQUNBO0FBQ0k2TixVQUFJLEdBQUM3SixDQUFDLENBQUMsVUFBUWhFLENBQVQsQ0FBTjtBQUNBLFVBQUdpRSxHQUFHLElBQUUsRUFBUixFQUFZNEosSUFBSSxDQUFDMUcsSUFBTCxDQUFVLFNBQVYsRUFBb0IsS0FBcEIsRUFBWixLQUNLMEcsSUFBSSxDQUFDMUcsSUFBTCxDQUFVLFNBQVYsRUFBb0JsRCxHQUFwQjtBQUNSO0FBQ0osR0F6bkJZO0FBMm5CYmdLLGdCQUFjLEVBQUUsd0JBQVNDLEtBQVQsRUFBZTtBQUMzQixRQUFJQyxnQkFBZ0IsR0FBQ25LLENBQUMsQ0FBQyxtQkFBRCxDQUFELENBQXVCQyxHQUF2QixFQUFyQjtBQUNBLFFBQUltSyxrQkFBa0IsR0FBQ3BLLENBQUMsQ0FBQyxxQkFBRCxDQUFELENBQXlCQyxHQUF6QixFQUF2QjtBQUNBLFFBQUlGLDJCQUEyQixHQUFDQyxDQUFDLENBQUMsOEJBQUQsQ0FBRCxDQUFrQ0MsR0FBbEMsRUFBaEM7QUFDQSxRQUFJQyw2QkFBNkIsR0FBQ0YsQ0FBQyxDQUFDLGdDQUFELENBQUQsQ0FBb0NDLEdBQXBDLEVBQWxDO0FBQ0EsUUFBSW9LLE1BQU0sR0FBQ3JLLENBQUMsQ0FBQyxNQUFJa0ssS0FBTCxDQUFaO0FBQXdCLFFBQUlJLGFBQWEsR0FBQ3RLLENBQUMsQ0FBQyxNQUFJa0ssS0FBSixHQUFVLFNBQVgsQ0FBbkI7QUFFeEIsUUFBSUssYUFBYSxHQUFDLEtBQWxCO0FBQ0EsUUFBSUMsaUJBQWlCLEdBQUNMLGdCQUF0QjtBQUNBLFFBQUlNLG1CQUFtQixHQUFDTCxrQkFBeEIsQ0FUMkIsQ0FVM0I7O0FBQ0EsUUFBSUMsTUFBTSxDQUFDM0YsSUFBUCxDQUFZLGVBQVosS0FBOEJnRyxTQUFsQyxFQUNJSCxhQUFhLEdBQUMsSUFBZDtBQUNKLFFBQUlGLE1BQU0sQ0FBQzNGLElBQVAsQ0FBWSxRQUFaLEtBQXVCZ0csU0FBM0IsRUFDSUYsaUJBQWlCLEdBQUNILE1BQU0sQ0FBQzNGLElBQVAsQ0FBWSxRQUFaLENBQWxCO0FBQ0osUUFBSTJGLE1BQU0sQ0FBQzNGLElBQVAsQ0FBWSxVQUFaLEtBQXlCZ0csU0FBN0IsRUFDSUQsbUJBQW1CLEdBQUNKLE1BQU0sQ0FBQzNGLElBQVAsQ0FBWSxVQUFaLENBQXBCO0FBRUosUUFBSXBILENBQUMsR0FBQytNLE1BQU0sQ0FBQ3BLLEdBQVAsRUFBTjtBQUVBM0MsS0FBQyxHQUFDQSxDQUFDLENBQUNHLE9BQUYsQ0FBVStNLGlCQUFWLEVBQTRCLEdBQTVCLENBQUYsQ0FwQjJCLENBcUIzQjtBQUNBO0FBQ0E7O0FBQ0EsUUFBSTVLLENBQUMsR0FBQ3hDLFFBQVEsQ0FBRUUsQ0FBRixDQUFkO0FBQ0FnTixpQkFBYSxDQUFDckssR0FBZCxDQUFtQkwsQ0FBbkIsRUF6QjJCLENBeUJKOztBQUN2QixRQUFJTyxJQUFJLEdBQUVQLENBQUMsR0FBQyxDQUFGLEdBQU0sSUFBTixHQUFhLEVBQXZCO0FBQ0EsUUFBSStLLEVBQUUsR0FBQ3pMLGFBQWEsQ0FBQ2pELElBQUksQ0FBQ21FLEdBQUwsQ0FBU1IsQ0FBVCxDQUFELEVBQWE2SyxtQkFBYixFQUFpQzFLLDJCQUFqQyxFQUE2REcsNkJBQTdELENBQXBCO0FBRUEsUUFBSU4sQ0FBQyxJQUFFLENBQUgsSUFBUTJLLGFBQVosRUFDSUYsTUFBTSxDQUFDcEssR0FBUCxDQUFXLEVBQVgsRUFESixLQUdJb0ssTUFBTSxDQUFDcEssR0FBUCxDQUFXRSxJQUFJLEdBQUVxSyxpQkFBTixHQUF3QixHQUF4QixHQUE0QkcsRUFBdkM7QUFFSkwsaUJBQWEsQ0FBQ00sTUFBZDtBQUNILEdBOXBCWTtBQWdxQmJDLGlCQUFlLEVBQUUseUJBQVNYLEtBQVQsRUFBZTtBQUM1QixRQUFJWSxZQUFZLEdBQUNaLEtBQUssR0FBQyxTQUF2QjtBQUNBLFFBQUlHLE1BQU0sR0FBQ3JLLENBQUMsQ0FBQyxNQUFJa0ssS0FBTCxDQUFaO0FBQ0EsUUFBSU8sbUJBQW1CLEdBQUNKLE1BQU0sQ0FBQzNGLElBQVAsQ0FBWSxVQUFaLENBQXhCO0FBRUEsUUFBSXBILENBQUMsR0FBQ0YsUUFBUSxDQUFFNEMsQ0FBQyxDQUFDLE1BQUk4SyxZQUFMLENBQUQsQ0FBb0I3SyxHQUFwQixFQUFGLENBQWQ7QUFDQSxRQUFJTCxDQUFDLEdBQUMsSUFBSW1MLE1BQUosQ0FBV3pOLENBQVgsQ0FBTjtBQUNBK00sVUFBTSxDQUFDcEssR0FBUCxDQUFZTCxDQUFDLENBQUN6QyxPQUFGLENBQVVzTixtQkFBVixDQUFaO0FBQ0FKLFVBQU0sQ0FBQ1csTUFBUDtBQUNBWCxVQUFNLENBQUNZLEdBQVAsQ0FBVyxTQUFYLEVBQXNCLFVBQVN4UCxDQUFULEVBQVk7QUFDOUJBLE9BQUMsQ0FBQ3lQLGNBQUY7QUFDSCxLQUZEO0FBR0gsR0E1cUJZO0FBOHFCYkMsWUFBVSxFQUFFLG9CQUFTQyxLQUFULEVBQWVDLEtBQWYsRUFBcUJDLE9BQXJCLEVBQTZCO0FBQ3JDLFFBQUdBLE9BQU8sSUFBRSxJQUFaLEVBQWtCQSxPQUFPLEdBQUMsSUFBUjtBQUVsQixRQUFJak4sQ0FBQyxHQUFDMkIsQ0FBQyxDQUFDLE1BQUlvTCxLQUFMLENBQUQsQ0FBYUcsU0FBYixHQUF5QkMsR0FBekIsRUFBTjtBQUNBLFFBQUluTSxDQUFDLEdBQUNoQixDQUFDLENBQUNvTixNQUFGLENBQVNKLEtBQVQsQ0FBTjtBQUNBaE0sS0FBQyxDQUFDaU0sT0FBRixDQUFXQSxPQUFYO0FBRUgsR0FyckJZO0FBdXJCYkksWUFBVSxFQUFFLG9CQUFTTixLQUFULEVBQWVDLEtBQWYsRUFBcUI7QUFDN0JGLGNBQVUsQ0FBQ0MsS0FBRCxFQUFPQyxLQUFQLEVBQWEsS0FBYixDQUFWO0FBQ0gsR0F6ckJZO0FBMnJCYk0sY0FBWSxFQUFFLHNCQUFTQyxpQkFBVCxFQUEyQkMsV0FBM0IsRUFBdUM7QUFDakQsUUFBSXpLLEdBQUcsR0FBQyxvRUFBa0V3SyxpQkFBbEUsR0FBb0YsZUFBcEYsR0FBb0dDLFdBQTVHO0FBQ0EsUUFBSUMsT0FBTyxHQUFDLEVBQVo7QUFDQTlMLEtBQUMsQ0FBQ21CLElBQUYsQ0FBTztBQUNIQyxTQUFHLEVBQUVBLEdBREY7QUFFSEMsY0FBUSxFQUFFLEtBRlA7QUFHSDZELFdBQUssRUFBRyxLQUhMO0FBSUg1RCxhQUFPLEVBQUUsaUJBQVNzRixHQUFULEVBQWE7QUFDbEIsWUFBSW1GLFlBQVksR0FBQy9MLENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVksY0FBWixFQUE0QnhLLElBQTVCLEVBQWpCO0FBQ0EsWUFBSU4sQ0FBSjs7QUFDQSxhQUFJQSxDQUFDLEdBQUMsQ0FBTixFQUFRQSxDQUFDLEdBQUMrUCxZQUFWLEVBQXVCL1AsQ0FBQyxFQUF4QixFQUEyQjtBQUN2QixjQUFJZ0ksRUFBRSxHQUFDaEUsQ0FBQyxDQUFDNEcsR0FBRCxDQUFELENBQU9FLElBQVAsQ0FBWSxPQUFLOUssQ0FBakIsRUFBb0JNLElBQXBCLEVBQVA7QUFDQXdQLGlCQUFPLENBQUM5SCxFQUFELENBQVAsR0FBWWhFLENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVksZ0JBQWM5SyxDQUExQixFQUE2Qk0sSUFBN0IsRUFBWjtBQUNIO0FBQ0o7QUFYRSxLQUFQO0FBYUEsV0FBT3dQLE9BQVA7QUFDSCxHQTVzQlk7QUE4c0JiRSxhQUFXLEVBQUUscUJBQVNDLE9BQVQsRUFBa0J6SCxLQUFsQixFQUF5QjtBQUNsQyxRQUFJMEgsUUFBUSxHQUFHM0gsTUFBTSxDQUFDQyxLQUFELEVBQVEsVUFBUixDQUFyQjtBQUNBLFdBQU81RyxTQUFTLENBQUNxTyxPQUFPLElBQUUsSUFBRUMsUUFBUSxHQUFDLEdBQWIsQ0FBUixDQUFoQjtBQUNILEdBanRCWTtBQW10QmJDLGdCQUFjLEVBQUUsd0JBQVNuSSxFQUFULEVBQVlvSSxRQUFaLEVBQXFCQyxPQUFyQixFQUE2QkMsY0FBN0IsRUFBNENDLFFBQTVDLEVBQXFEQyxZQUFyRCxFQUFrRUMsUUFBbEUsRUFBMkV0RCxRQUEzRSxFQUFvRjtBQUNoRyxRQUFHb0QsUUFBUSxJQUFJLElBQWYsRUFBcUJBLFFBQVEsR0FBRyxFQUFYO0FBQ3JCLFFBQUdGLE9BQU8sSUFBSSxJQUFkLEVBQW9CQSxPQUFPLEdBQUcsRUFBVjtBQUNwQixRQUFHSSxRQUFRLElBQUksSUFBZixFQUFxQkEsUUFBUSxHQUFHLEVBQVg7QUFFckIsUUFBSUMsZUFBZSxHQUFHMU0sQ0FBQyxDQUFDLE1BQUlnRSxFQUFMLENBQXZCO0FBQ0EsUUFBR3lJLFFBQUgsRUFBYUMsZUFBZSxHQUFHMU0sQ0FBQyxDQUFDLE1BQUl5TSxRQUFMLENBQW5CO0FBRWJKLFdBQU8sQ0FBQ00sVUFBUixHQUFxQkQsZUFBZSxDQUFDaEksSUFBaEIsQ0FBcUIsT0FBckIsQ0FBckI7QUFFQWdJLG1CQUFlLENBQUNFLFlBQWhCLENBQTZCO0FBQ3pCQyxZQUFNLEVBQUUsZ0JBQVVDLE9BQVYsRUFBbUJDLFFBQW5CLEVBQThCO0FBQ2xDQyxnQ0FBd0IsQ0FBQ1gsT0FBRCxFQUFVRCxRQUFWLEVBQW9CVSxPQUFwQixFQUE2QkMsUUFBN0IsRUFBdUNQLFlBQXZDLEVBQXFERixjQUFyRCxDQUF4QjtBQUNILE9BSHdCO0FBSXpCVyxlQUFTLEVBQUUsQ0FKYztBQUt6QkMsZUFBUyxFQUFFLElBTGM7QUFNekJsQyxZQUFNLEVBQUUsZ0JBQVVtQyxLQUFWLEVBQWlCQyxFQUFqQixFQUFzQjtBQUMxQixZQUFHWCxRQUFILEVBQWF6SSxFQUFFLEdBQUdtSixLQUFLLENBQUN2SCxNQUFOLENBQWE1QixFQUFsQjtBQUNiLFlBQUlxSixHQUFHLEdBQUNyTixDQUFDLENBQUMsTUFBSWdFLEVBQUosR0FBTyxTQUFSLENBQVQ7QUFDQXFKLFdBQUcsQ0FBQ3BOLEdBQUosQ0FBUW1OLEVBQUUsQ0FBQ0UsSUFBSCxDQUFRdEosRUFBaEI7QUFDQXFKLFdBQUcsQ0FBQ3pDLE1BQUo7O0FBQ0EsWUFBR3dCLFFBQVEsQ0FBQ21CLFVBQVQsQ0FBb0Isd0JBQXBCLENBQUgsRUFBaUQ7QUFFN0NDLG1DQUF5QixDQUFDSixFQUFFLENBQUNFLElBQUgsQ0FBUXRKLEVBQVQsRUFBYUEsRUFBYixDQUF6Qjs7QUFFQSxjQUFHb0osRUFBRSxDQUFDRSxJQUFILENBQVFHLGFBQVgsRUFBeUI7QUFDckJDLDBDQUE4QixDQUFDTixFQUFFLENBQUNFLElBQUgsQ0FBUXRKLEVBQVQsRUFBWUEsRUFBWixDQUE5QjtBQUNBO0FBQ0g7QUFDSjs7QUFDRCxZQUFHLE9BQU9tRixRQUFQLEtBQW9CLFVBQXZCLEVBQW1DQSxRQUFRLENBQUNpRSxFQUFFLENBQUNFLElBQUosQ0FBUjtBQUN0QyxPQXJCd0I7QUFzQnpCSyxjQUFRLEVBQUVwQixRQUFRLEdBQUcsTUFBSUEsUUFBUCxHQUFrQjtBQXRCWCxLQUE3QjtBQXdCSCxHQXJ2Qlk7QUF1dkJiaUIsMkJBQXlCLEVBQUUsbUNBQVNJLFVBQVQsRUFBcUJDLFFBQXJCLEVBQThCO0FBQ3JELFFBQUlDLGdCQUFnQixHQUFHOU4sQ0FBQyxDQUFDLGtCQUFELENBQXhCO0FBQ0EsUUFBRyxDQUFDOE4sZ0JBQWdCLENBQUM3TixHQUFqQixFQUFKLEVBQTRCO0FBRTVCLFFBQUdELENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUIwSixRQUFuQixPQUFrQyxDQUFyQyxFQUF3QztBQUN4QyxRQUFHdE0sUUFBUSxDQUFDMFEsZ0JBQWdCLENBQUM5SSxJQUFqQixDQUFzQixnQ0FBdEIsQ0FBRCxDQUFSLEtBQXNFLENBQXRFLElBQTJFNUgsUUFBUSxDQUFDMFEsZ0JBQWdCLENBQUM5SSxJQUFqQixDQUFzQixnQ0FBdEIsQ0FBRCxDQUFSLEtBQXNFLENBQXBKLEVBQXVKO0FBRXZKLFFBQUkrSSxXQUFXLEdBQUcvTixDQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QjBKLFFBQXhCLEVBQWxCO0FBQ0EsUUFBR3FFLFdBQVcsS0FBSyxDQUFuQixFQUFzQjtBQUV0QixRQUFJckgsTUFBTSxHQUFHMUcsQ0FBQyxDQUFDLGlCQUFELENBQUQsQ0FBcUJDLEdBQXJCLEVBQWI7QUFDQUQsS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFNBQUcsRUFBRSxlQURGO0FBRUg0RCxVQUFJLEVBQUU7QUFBRTBCLGNBQU0sRUFBRUEsTUFBVjtBQUFrQjFDLFVBQUUsRUFBRTRKLFVBQXRCO0FBQWtDRyxtQkFBVyxFQUFFQSxXQUEvQztBQUE0RHBILGdCQUFRLEVBQUUsNkJBQXRFO0FBQXFHcUgsd0JBQWdCLEVBQUVGLGdCQUFnQixDQUFDN04sR0FBakI7QUFBdkgsT0FGSDtBQUdIZ0YsVUFBSSxFQUFFLE1BSEg7QUFJSDVELGNBQVEsRUFBRSxNQUpQO0FBS0hDLGFBQU8sRUFBRSxpQkFBVUMsSUFBVixFQUFlO0FBQ3BCLFlBQUdBLElBQUksQ0FBQ3lGLEdBQVIsRUFBYTtBQUViaUgsMEJBQWtCLENBQUNILGdCQUFnQixDQUFDOUksSUFBakIsQ0FBc0Isb0NBQXRCLENBQUQsRUFBOEQsVUFBU2dDLEdBQVQsRUFBYTtBQUN6RixjQUFHQSxHQUFILEVBQVE7QUFFUmhILFdBQUMsQ0FBQyxNQUFNNk4sUUFBTixHQUFpQixTQUFsQixDQUFELENBQThCNU4sR0FBOUIsQ0FBa0MsQ0FBbEM7QUFDQUQsV0FBQyxDQUFDLE1BQU02TixRQUFQLENBQUQsQ0FBa0I1TixHQUFsQixDQUFzQixFQUF0QjtBQUNBRCxXQUFDLENBQUMsTUFBTTZOLFFBQVAsQ0FBRCxDQUFrQmpELE1BQWxCO0FBQ0gsU0FOaUIsQ0FBbEI7QUFPSDtBQWZFLEtBQVA7QUFpQkgsR0FueEJZO0FBcXhCYjhDLGdDQUE4QixFQUFFLHdDQUFVRSxVQUFWLEVBQXFCQyxRQUFyQixFQUErQjtBQUMzRCxRQUFJbkgsTUFBTSxHQUFHMUcsQ0FBQyxDQUFDLGlCQUFELENBQUQsQ0FBcUJDLEdBQXJCLEVBQWI7QUFDQTBFLG1CQUFlLENBQUM7QUFDWnZELFNBQUcsRUFBRSxlQURPO0FBRVo0RCxVQUFJLEVBQUU7QUFBQzBCLGNBQU0sRUFBRUEsTUFBVDtBQUFpQndILHVCQUFlLEVBQUVOLFVBQWxDO0FBQThDakgsZ0JBQVEsRUFBRTtBQUF4RCxPQUZNO0FBR1ovQixhQUFPLEVBQUUsK0JBSEc7QUFJWnVKLGVBQVMsRUFBRSxxQkFBWTtBQUNuQnROLGtCQUFVLENBQUMsK0JBQUQsRUFBa0MsVUFBVXJGLEdBQVYsRUFBZTtBQUN2RCxjQUFJNFMsT0FBTyxHQUFHcE8sQ0FBQyxDQUFDLE1BQU02TixRQUFOLEdBQWlCLFNBQWxCLENBQWY7O0FBQ0EsY0FBSSxDQUFDclMsR0FBTCxFQUFVO0FBQ047QUFDQTRTLG1CQUFPLENBQUNuTyxHQUFSLENBQVksQ0FBWjtBQUNBRCxhQUFDLENBQUMsTUFBTTZOLFFBQVAsQ0FBRCxDQUFrQjVOLEdBQWxCLENBQXNCLEVBQXRCO0FBQ0EsbUJBQU8sS0FBUDtBQUNIOztBQUNERCxXQUFDLENBQUNtQixJQUFGLENBQU87QUFDSEMsZUFBRyxFQUFFLFVBREY7QUFFSEMsb0JBQVEsRUFBRSxNQUZQO0FBR0g0RCxnQkFBSSxFQUFFLE1BSEg7QUFJSEQsZ0JBQUksRUFBRSw0REFBNEQwQixNQUE1RCxHQUFxRSxHQUFyRSxHQUEyRTFHLENBQUMsQ0FBQyxpREFBRCxDQUFELENBQXFEMkgsU0FBckQsRUFKOUU7QUFLSHJHLG1CQUFPLEVBQUUsaUJBQVVDLElBQVYsRUFBZ0I7QUFDckJ3Rix5Q0FBMkIsQ0FBQ3hGLElBQUQsRUFBTyxJQUFQLENBQTNCOztBQUNBLGtCQUFJQSxJQUFJLENBQUN5RixHQUFULEVBQWM7QUFDVm9ILHVCQUFPLENBQUNuTyxHQUFSLENBQVlzQixJQUFJLENBQUNxTSxVQUFqQjtBQUNBUSx1QkFBTyxDQUFDeEQsTUFBUjtBQUNILGVBSEQsTUFHTztBQUNId0QsdUJBQU8sQ0FBQ25PLEdBQVIsQ0FBWSxDQUFaO0FBQ0FELGlCQUFDLENBQUMsTUFBTTZOLFFBQVAsQ0FBRCxDQUFrQjVOLEdBQWxCLENBQXNCLEVBQXRCO0FBQ0g7QUFDSjtBQWRFLFdBQVA7QUFnQkgsU0F4QlMsQ0FBVjtBQXlCSDtBQTlCVyxLQUFELENBQWY7QUFnQ0gsR0F2ekJZO0FBeXpCYitNLDBCQUF3QixFQUFFLGtDQUFTWCxPQUFULEVBQWtCRCxRQUFsQixFQUE0QlUsT0FBNUIsRUFBcUNDLFFBQXJDLEVBQStDUCxZQUEvQyxFQUE2REYsY0FBN0QsRUFBNEU7QUFDbEcsUUFBSStCLElBQUo7QUFDQSxRQUFJN0IsWUFBWSxJQUFJLElBQXBCLEVBQTBCNkIsSUFBSSxHQUFHdkIsT0FBTyxDQUFDdUIsSUFBZixDQUExQixLQUNLQSxJQUFJLEdBQUd2QixPQUFQO0FBRUw5TSxLQUFDLENBQUNvRixJQUFGLENBQU9pSCxPQUFQLEVBQWdCLFVBQVVpQyxDQUFWLEVBQWFDLENBQWIsRUFBZ0I7QUFDNUIsVUFBSSxPQUFPQSxDQUFQLEtBQWEsUUFBYixJQUF5QkEsQ0FBQyxDQUFDaEIsVUFBRixDQUFhLE1BQWIsQ0FBN0IsRUFDSWxCLE9BQU8sQ0FBQ2lDLENBQUQsQ0FBUCxHQUFhRSxJQUFJLENBQUNELENBQUQsQ0FBakIsQ0FESixLQUdJbEMsT0FBTyxDQUFDaUMsQ0FBRCxDQUFQLEdBQWFDLENBQWI7QUFDUCxLQUxEO0FBTUFsQyxXQUFPLENBQUNvQyxPQUFSLEdBQWtCSixJQUFsQjtBQUVBck8sS0FBQyxDQUFDb0YsSUFBRixDQUFPa0gsY0FBUCxFQUF1QixVQUFTb0MsR0FBVCxFQUFjclMsS0FBZCxFQUFxQjtBQUN4QyxVQUFJQSxLQUFLLENBQUNrUixVQUFOLENBQWlCLE1BQWpCLENBQUosRUFBOEJsQixPQUFPLENBQUNxQyxHQUFELENBQVAsR0FBZXJTLEtBQUssR0FBRyxRQUF2QixDQUE5QixLQUNLZ1EsT0FBTyxDQUFDcUMsR0FBRCxDQUFQLEdBQWUxTyxDQUFDLENBQUMsTUFBTTNELEtBQVAsQ0FBRCxDQUFlNEQsR0FBZixFQUFmO0FBQ1IsS0FIRDtBQUtBRCxLQUFDLENBQUNtQixJQUFGLENBQU87QUFDSEMsU0FBRyxFQUFFLDBCQUF3QmdMLFFBQXhCLEdBQWlDLDJCQURuQztBQUVIL0ssY0FBUSxFQUFFLE1BRlA7QUFHSDRELFVBQUksRUFBRSxNQUhIO0FBSUhELFVBQUksRUFBRXFILE9BSkg7QUFLSC9LLGFBQU8sRUFBRSxpQkFBVTBELElBQVYsRUFBaUI7QUFDdEIsWUFBR3dILFlBQVksSUFBSSxJQUFuQixFQUF5QjtBQUNyQk8sa0JBQVEsQ0FBRS9NLENBQUMsQ0FBQzJPLEdBQUYsQ0FBTzNKLElBQUksQ0FBQzRKLE9BQVosRUFBcUIsVUFBVXRCLElBQVYsRUFBaUI7QUFDNUMsbUJBQU9BLElBQVA7QUFBWTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRXFCLFdBUlMsQ0FBRixDQUFSO0FBU0gsU0FWRCxNQVdJO0FBQ0FkLHNCQUFZLENBQUN4TSxDQUFDLENBQUMyTyxHQUFGLENBQU8zSixJQUFJLENBQUM0SixPQUFaLEVBQXFCLFVBQVV0QixJQUFWLEVBQWlCO0FBQUUsbUJBQU9BLElBQUksQ0FBQ3VCLEtBQVo7QUFBbUIsV0FBM0QsQ0FBRCxDQUFaO0FBQ0g7QUFFSjtBQXJCRSxLQUFQO0FBdUJILEdBbDJCWTtBQW8yQmJDLHVCQUFxQixFQUFFLCtCQUFTclQsQ0FBVCxFQUFXc1QsTUFBWCxFQUFrQjtBQUNyQyxRQUFHQSxNQUFNLElBQUUsSUFBWCxFQUFpQixPQUFPLEtBQVA7QUFFakIsUUFBSUMsUUFBUSxHQUFDQyxRQUFRLENBQUNDLFNBQVQsQ0FBbUJILE1BQW5CLENBQWI7QUFDQUMsWUFBUSxDQUFDRyxVQUFULENBQW9CblAsQ0FBQyxDQUFDdkUsQ0FBQyxDQUFDbUssTUFBSCxDQUFELENBQVkzRixHQUFaLEdBQWtCekMsSUFBbEIsRUFBcEI7QUFDQXdDLEtBQUMsQ0FBQ3ZFLENBQUMsQ0FBQ21LLE1BQUgsQ0FBRCxDQUFZM0YsR0FBWixDQUFnQixJQUFoQjtBQUVBLFdBQU8sSUFBUDtBQUNILEdBNTJCWTtBQTgyQmJzRyxXQUFTLEVBQUUsbUJBQVNqSyxJQUFULEVBQWM4UyxDQUFkLEVBQWdCO0FBQ3ZCcFAsS0FBQyxDQUFDLFlBQUQsQ0FBRCxDQUFnQndCLElBQWhCLENBQXFCbEYsSUFBckI7QUFDQXVFLGNBQVUsQ0FBQyxXQUFELEVBQWEsVUFBU3JGLEdBQVQsRUFBYTtBQUFDLFVBQUdBLEdBQUgsRUFBUTRULENBQUMsQ0FBQzVULEdBQUQsQ0FBRDtBQUFRLEtBQTNDLENBQVY7QUFDSCxHQWozQlk7QUFrM0JiZ0wsWUFBVSxFQUFFLG9CQUFTbEssSUFBVCxFQUFjOFMsQ0FBZCxFQUFnQjtBQUN4QnBQLEtBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUJ3QixJQUFqQixDQUFzQmxGLElBQXRCO0FBQ0F1RSxjQUFVLENBQUMsWUFBRCxFQUFjLFVBQVNyRixHQUFULEVBQWE7QUFBQyxVQUFHQSxHQUFILEVBQVE0VCxDQUFDLENBQUM1VCxHQUFELENBQUQ7QUFBUSxLQUE1QyxDQUFWO0FBQ0gsR0FyM0JZO0FBczNCYjZULFlBQVUsRUFBRSxvQkFBUy9TLElBQVQsRUFBYzhTLENBQWQsRUFBZ0I7QUFDeEJwUCxLQUFDLENBQUMsYUFBRCxDQUFELENBQWlCd0IsSUFBakIsQ0FBc0JsRixJQUF0QjtBQUNBdUUsY0FBVSxDQUFDLFlBQUQsRUFBYyxVQUFTckYsR0FBVCxFQUFhO0FBQUMsVUFBR0EsR0FBSCxFQUFRNFQsQ0FBQyxDQUFDNVQsR0FBRCxDQUFEO0FBQVEsS0FBNUMsQ0FBVjtBQUNILEdBejNCWTtBQTIzQmJ5UyxvQkFBa0IsRUFBRSw0QkFBUzNSLElBQVQsRUFBYzhTLENBQWQsRUFBZ0I7QUFDaENwUCxLQUFDLENBQUMsWUFBRCxDQUFELENBQWdCd0IsSUFBaEIsQ0FBcUJsRixJQUFyQjtBQUNBdUUsY0FBVSxDQUFDLFdBQUQsRUFBYSxVQUFTckYsR0FBVCxFQUFhO0FBQUU0VCxPQUFDLENBQUM1VCxHQUFELENBQUQ7QUFBUyxLQUFyQyxDQUFWO0FBQ0gsR0E5M0JZO0FBZzRCYjJMLGFBQVcsRUFBRSxxQkFBU21JLFFBQVQsRUFBa0JDLFdBQWxCLEVBQThCcEcsUUFBOUIsRUFBdUM7QUFDaEQsUUFBSXFHLE1BQU0sR0FBQ3hQLENBQUMsQ0FBQyxNQUFJc1AsUUFBTCxDQUFaO0FBQ0EsUUFBRyxPQUFPQyxXQUFQLEtBQXVCLFdBQTFCLEVBQXVDQSxXQUFXLEdBQUcsSUFBZDtBQUV2QyxRQUFJRSxVQUFVLEdBQUcsSUFBakI7QUFDQSxRQUFHLE9BQU90RyxRQUFQLEtBQW9CLFVBQXZCLEVBQW1Dc0csVUFBVSxHQUFHLHNCQUFZO0FBQ3hEcE0sZ0JBQVUsQ0FBQyxZQUFZO0FBQ25COEYsZ0JBQVE7QUFDWCxPQUZTLEVBRVIsR0FGUSxDQUFWO0FBR0gsS0FKa0M7QUFLbkNxRyxVQUFNLENBQUNFLFNBQVAsR0FBbUJ2TyxJQUFuQixDQUF3QmdGLE1BQXhCLENBQStCc0osVUFBL0IsRUFBMENGLFdBQTFDO0FBQ0F2UCxLQUFDLENBQUMsYUFBRCxDQUFELENBQWlCa0UsSUFBakI7QUFDSCxHQTU0Qlk7QUE4NEJiNkMsNkJBQTJCLEVBQUUscUNBQVN2TCxHQUFULEVBQWNtVSxPQUFkLEVBQXVCQyxjQUF2QixFQUFzQztBQUMvRCxRQUFHLE9BQU9ELE9BQVAsS0FBbUIsV0FBdEIsRUFBbUNBLE9BQU8sR0FBRyxLQUFWO0FBQ25DLFFBQUcsT0FBT0MsY0FBUCxLQUEwQixXQUE3QixFQUEwQ0EsY0FBYyxHQUFHLEtBQWpCO0FBQzFDLFFBQUk1SSxHQUFKLEVBQVNZLEtBQVQsRUFBZ0JpSSxNQUFoQixFQUF3QkMsR0FBeEI7O0FBQ0EsUUFBR0gsT0FBSCxFQUFXO0FBQ1AzSSxTQUFHLEdBQUd4TCxHQUFHLENBQUN3TCxHQUFWO0FBQ0FZLFdBQUssR0FBR3BNLEdBQUcsQ0FBQ29NLEtBQVo7QUFDQWlJLFlBQU0sR0FBR3JVLEdBQUcsQ0FBQ3FVLE1BQWI7QUFDQUMsU0FBRyxHQUFHdFUsR0FBRyxDQUFDc1UsR0FBVjtBQUNILEtBTEQsTUFNSTtBQUNBOUksU0FBRyxHQUFHaEgsQ0FBQyxDQUFDeEUsR0FBRCxDQUFELENBQU9zTCxJQUFQLENBQVksS0FBWixFQUFtQnhLLElBQW5CLEVBQU47QUFDQXNMLFdBQUssR0FBRzVILENBQUMsQ0FBQ3hFLEdBQUQsQ0FBRCxDQUFPc0wsSUFBUCxDQUFZLE9BQVosRUFBcUJ4SyxJQUFyQixFQUFSO0FBQ0F1VCxZQUFNLEdBQUc3UCxDQUFDLENBQUN4RSxHQUFELENBQUQsQ0FBT3NMLElBQVAsQ0FBWSxRQUFaLEVBQXNCeEssSUFBdEIsRUFBVDtBQUNBd1QsU0FBRyxHQUFHOVAsQ0FBQyxDQUFDeEUsR0FBRCxDQUFELENBQU9zTCxJQUFQLENBQVksS0FBWixFQUFtQnhLLElBQW5CLEVBQU47QUFDSDs7QUFDRCxRQUFHMEssR0FBSCxFQUFPO0FBQ0gsVUFBRyxDQUFDNEksY0FBSixFQUFvQnZOLFNBQVMsQ0FBQyxDQUFELEVBQUdyQyxDQUFDLENBQUMsc0JBQUQsQ0FBRCxDQUEwQkMsR0FBMUIsRUFBSCxFQUFtQzZQLEdBQW5DLENBQVQ7QUFDdkIsS0FGRCxNQUdJO0FBQ0EsVUFBRyxDQUFDRixjQUFKLEVBQW9Cdk4sU0FBUyxDQUFDLENBQUQsRUFBR3JDLENBQUMsQ0FBQyxvQkFBRCxDQUFELENBQXdCQyxHQUF4QixFQUFILEVBQWlDNlAsR0FBakMsQ0FBVDtBQUN2Qjs7QUFHRCxRQUFHbEksS0FBSCxFQUFVNUgsQ0FBQyxDQUFDLFdBQUQsQ0FBRCxDQUFld0IsSUFBZixDQUFvQnFPLE1BQXBCO0FBQ2IsR0F2NkJZO0FBeTZCYkUsMkJBQXlCLEVBQUUsbUNBQVNDLGlCQUFULEVBQTJCQyxVQUEzQixFQUFzQ0MsU0FBdEMsRUFBZ0RDLG9CQUFoRCxFQUFxRTtBQUM1RixRQUFJQyxlQUFlLEdBQUNwUSxDQUFDLENBQUMsTUFBSWdRLGlCQUFMLENBQXJCO0FBQ0EsUUFBSUssR0FBRyxHQUFDQyxxQ0FBcUMsQ0FBQ0YsZUFBZSxDQUFDblEsR0FBaEIsRUFBRCxFQUF1QmtRLG9CQUF2QixDQUE3QztBQUNBLFFBQUlFLEdBQUcsS0FBSyxJQUFaLEVBQWtCLE9BQU8sS0FBUDtBQUVsQnJRLEtBQUMsQ0FBQyxNQUFJaVEsVUFBTCxDQUFELENBQWtCaFEsR0FBbEIsQ0FBdUJzUSxRQUFRLENBQUNGLEdBQUcsQ0FBQyxDQUFELENBQUosQ0FBL0I7QUFDQXJRLEtBQUMsQ0FBQyxNQUFJa1EsU0FBTCxDQUFELENBQWlCalEsR0FBakIsQ0FBdUJzUSxRQUFRLENBQUNGLEdBQUcsQ0FBQyxDQUFELENBQUosQ0FBL0I7QUFFQSxXQUFPLElBQVA7QUFDSCxHQWw3Qlk7QUFvN0JiRyxxQkFBbUIsRUFBRSw2QkFBU0MsWUFBVCxFQUF1QkMsT0FBdkIsRUFBZ0NDLFVBQWhDLEVBQTRDQyxTQUE1QyxFQUFzRDtBQUN2RSxRQUFHLE9BQU9ILFlBQVAsS0FBd0IsV0FBM0IsRUFBd0NBLFlBQVksR0FBRyxXQUFmO0FBQ3hDLFFBQUcsT0FBT0MsT0FBUCxLQUFtQixXQUF0QixFQUFtQ0EsT0FBTyxHQUFHLE1BQVY7QUFDbkMsUUFBRyxPQUFPQyxVQUFQLEtBQXNCLFdBQXpCLEVBQXNDQSxVQUFVLEdBQUcsU0FBYjtBQUN0QyxRQUFHLE9BQU9DLFNBQVAsS0FBcUIsV0FBeEIsRUFBcUNBLFNBQVMsR0FBRyxRQUFaO0FBRXJDLFFBQUlDLFNBQVMsR0FBQzdRLENBQUMsQ0FBQyxNQUFJeVEsWUFBTCxDQUFELENBQW9CL0csUUFBcEIsRUFBZDtBQUNBLFFBQUlvSCxJQUFJLEdBQUM5USxDQUFDLENBQUMsTUFBSTBRLE9BQUwsQ0FBRCxDQUFlelEsR0FBZixFQUFUOztBQUVBLFFBQUc0USxTQUFTLEtBQUssQ0FBakIsRUFBbUI7QUFDZjdRLE9BQUMsQ0FBQyxNQUFJMlEsVUFBTCxDQUFELENBQWtCMVEsR0FBbEIsQ0FBc0JzUSxRQUFRLENBQUNPLElBQUksR0FBQyxRQUFOLENBQTlCO0FBQ0E5USxPQUFDLENBQUMsTUFBSTRRLFNBQUwsQ0FBRCxDQUFpQjNRLEdBQWpCLENBQXFCc1EsUUFBUSxDQUFDTyxJQUFJLEdBQUMsUUFBTixDQUE3QjtBQUNIOztBQUNELFFBQUdELFNBQVMsS0FBSyxDQUFqQixFQUFtQjtBQUNmN1EsT0FBQyxDQUFDLE1BQUkyUSxVQUFMLENBQUQsQ0FBa0IxUSxHQUFsQixDQUFzQnNRLFFBQVEsQ0FBQ08sSUFBSSxHQUFDLFFBQU4sQ0FBOUI7QUFDQTlRLE9BQUMsQ0FBQyxNQUFJNFEsU0FBTCxDQUFELENBQWlCM1EsR0FBakIsQ0FBcUJzUSxRQUFRLENBQUNPLElBQUksR0FBQyxRQUFOLENBQTdCO0FBQ0g7O0FBQ0QsUUFBR0QsU0FBUyxLQUFLLENBQWpCLEVBQW1CO0FBQ2Y3USxPQUFDLENBQUMsTUFBSTJRLFVBQUwsQ0FBRCxDQUFrQjFRLEdBQWxCLENBQXNCc1EsUUFBUSxDQUFDTyxJQUFJLEdBQUMsUUFBTixDQUE5QjtBQUNBOVEsT0FBQyxDQUFDLE1BQUk0USxTQUFMLENBQUQsQ0FBaUIzUSxHQUFqQixDQUFxQnNRLFFBQVEsQ0FBQ08sSUFBSSxHQUFDLFFBQU4sQ0FBN0I7QUFDSDs7QUFDRCxRQUFHRCxTQUFTLEtBQUssQ0FBakIsRUFBbUI7QUFDZjdRLE9BQUMsQ0FBQyxNQUFJMlEsVUFBTCxDQUFELENBQWtCMVEsR0FBbEIsQ0FBc0JzUSxRQUFRLENBQUNPLElBQUksR0FBQyxRQUFOLENBQTlCO0FBQ0E5USxPQUFDLENBQUMsTUFBSTRRLFNBQUwsQ0FBRCxDQUFpQjNRLEdBQWpCLENBQXFCc1EsUUFBUSxDQUFDTyxJQUFJLEdBQUMsUUFBTixDQUE3QjtBQUNIO0FBQ0osR0E3OEJZO0FBKzhCYkMsb0JBQWtCLEVBQUUsNEJBQVNDLFdBQVQsRUFBc0JOLE9BQXRCLEVBQStCQyxVQUEvQixFQUEyQ0MsU0FBM0MsRUFBcUQ7QUFDckUsUUFBRyxPQUFPSSxXQUFQLEtBQXVCLFdBQTFCLEVBQXVDQSxXQUFXLEdBQUcsVUFBZDtBQUN2QyxRQUFHLE9BQU9OLE9BQVAsS0FBbUIsV0FBdEIsRUFBbUNBLE9BQU8sR0FBRyxNQUFWO0FBQ25DLFFBQUcsT0FBT0MsVUFBUCxLQUFzQixXQUF6QixFQUFzQ0EsVUFBVSxHQUFHLFNBQWI7QUFDdEMsUUFBRyxPQUFPQyxTQUFQLEtBQXFCLFdBQXhCLEVBQXFDQSxTQUFTLEdBQUcsUUFBWjtBQUVyQyxRQUFJSyxRQUFRLEdBQUNqUixDQUFDLENBQUMsTUFBSWdSLFdBQUwsQ0FBRCxDQUFtQnRILFFBQW5CLEVBQWI7QUFDQSxRQUFJb0gsSUFBSSxHQUFDOVEsQ0FBQyxDQUFDLE1BQUkwUSxPQUFMLENBQUQsQ0FBZXpRLEdBQWYsRUFBVDtBQUVBLFFBQUlYLENBQUo7O0FBQ0EsUUFBRzJSLFFBQVEsS0FBSyxDQUFoQixFQUFrQjtBQUNkalIsT0FBQyxDQUFDLE1BQUkyUSxVQUFMLENBQUQsQ0FBa0IxUSxHQUFsQixDQUFzQnNRLFFBQVEsQ0FBQ08sSUFBSSxHQUFDLFFBQU4sQ0FBOUI7QUFDQXhSLE9BQUMsR0FBRyxJQUFJNFIsSUFBSixDQUFTSixJQUFULEVBQWMsQ0FBZCxFQUFnQixDQUFoQixDQUFKO0FBQ0gsS0FIRCxNQUlLLElBQUdHLFFBQVEsS0FBSyxDQUFoQixFQUFrQjtBQUNuQmpSLE9BQUMsQ0FBQyxNQUFJMlEsVUFBTCxDQUFELENBQWtCMVEsR0FBbEIsQ0FBc0JzUSxRQUFRLENBQUNPLElBQUksR0FBQyxRQUFOLENBQTlCO0FBQ0F4UixPQUFDLEdBQUcsSUFBSTRSLElBQUosQ0FBU0osSUFBVCxFQUFjLENBQWQsRUFBZ0IsQ0FBaEIsQ0FBSjtBQUNILEtBSEksTUFJQSxJQUFHRyxRQUFRLEtBQUssQ0FBaEIsRUFBa0I7QUFDbkJqUixPQUFDLENBQUMsTUFBSTJRLFVBQUwsQ0FBRCxDQUFrQjFRLEdBQWxCLENBQXNCc1EsUUFBUSxDQUFDTyxJQUFJLEdBQUMsUUFBTixDQUE5QjtBQUNBeFIsT0FBQyxHQUFHLElBQUk0UixJQUFKLENBQVNKLElBQVQsRUFBYyxDQUFkLEVBQWdCLENBQWhCLENBQUo7QUFDSCxLQUhJLE1BSUEsSUFBR0csUUFBUSxLQUFLLENBQWhCLEVBQWtCO0FBQ25CalIsT0FBQyxDQUFDLE1BQUkyUSxVQUFMLENBQUQsQ0FBa0IxUSxHQUFsQixDQUFzQnNRLFFBQVEsQ0FBQ08sSUFBSSxHQUFDLFFBQU4sQ0FBOUI7QUFDQXhSLE9BQUMsR0FBRyxJQUFJNFIsSUFBSixDQUFTSixJQUFULEVBQWMsQ0FBZCxFQUFnQixDQUFoQixDQUFKO0FBQ0gsS0FISSxNQUlBLElBQUdHLFFBQVEsS0FBSyxDQUFoQixFQUFrQjtBQUNuQmpSLE9BQUMsQ0FBQyxNQUFJMlEsVUFBTCxDQUFELENBQWtCMVEsR0FBbEIsQ0FBc0JzUSxRQUFRLENBQUNPLElBQUksR0FBQyxRQUFOLENBQTlCO0FBQ0F4UixPQUFDLEdBQUcsSUFBSTRSLElBQUosQ0FBU0osSUFBVCxFQUFjLEVBQWQsRUFBaUIsQ0FBakIsQ0FBSjtBQUNILEtBSEksTUFJQTtBQUNEOVEsT0FBQyxDQUFDLE1BQUkyUSxVQUFMLENBQUQsQ0FBa0IxUSxHQUFsQixDQUFzQnNRLFFBQVEsQ0FBQ08sSUFBSSxHQUFDLFFBQU4sQ0FBOUI7QUFDQXhSLE9BQUMsR0FBRyxJQUFJNFIsSUFBSixDQUFTSixJQUFULEVBQWMsRUFBZCxFQUFpQixDQUFqQixDQUFKO0FBQ0g7O0FBQ0Q5USxLQUFDLENBQUMsTUFBSTRRLFNBQUwsQ0FBRCxDQUFpQjNRLEdBQWpCLENBQXFCc1EsUUFBUSxDQUFDalIsQ0FBQyxDQUFDNlIsV0FBRixLQUFnQixHQUFoQixHQUFvQnpQLE9BQU8sQ0FBRXBDLENBQUMsQ0FBQzhSLFFBQUYsS0FBZSxDQUFqQixFQUFvQixDQUFwQixFQUFzQixDQUF0QixFQUF3QixjQUF4QixDQUEzQixHQUFtRSxHQUFuRSxHQUF5RTFQLE9BQU8sQ0FBQ3BDLENBQUMsQ0FBQytSLE9BQUYsRUFBRCxFQUFhLENBQWIsRUFBZSxDQUFmLEVBQWlCLGNBQWpCLENBQWpGLENBQTdCO0FBQ0gsR0FsL0JZO0FBby9CYkMsZ0JBQWMsRUFBRSx3QkFBU0MsT0FBVCxFQUFrQmIsT0FBbEIsRUFBMkJDLFVBQTNCLEVBQXVDQyxTQUF2QyxFQUFpRDtBQUM3RCxRQUFHLE9BQU9XLE9BQVAsS0FBbUIsV0FBdEIsRUFBbUNBLE9BQU8sR0FBRyxPQUFWO0FBQ25DLFFBQUcsT0FBT2IsT0FBUCxLQUFtQixXQUF0QixFQUFtQ0EsT0FBTyxHQUFHLE1BQVY7QUFDbkMsUUFBRyxPQUFPQyxVQUFQLEtBQXNCLFdBQXpCLEVBQXNDQSxVQUFVLEdBQUcsU0FBYjtBQUN0QyxRQUFHLE9BQU9DLFNBQVAsS0FBcUIsV0FBeEIsRUFBcUNBLFNBQVMsR0FBRyxRQUFaO0FBRXJDLFFBQUlZLEtBQUssR0FBQ3hSLENBQUMsQ0FBQyxNQUFNdVIsT0FBUCxDQUFELENBQWlCdFIsR0FBakIsRUFBVjtBQUNBLFFBQUk2USxJQUFJLEdBQUM5USxDQUFDLENBQUMsTUFBTTBRLE9BQVAsQ0FBRCxDQUFpQmhILFFBQWpCLEVBQVQ7QUFDQSxRQUFJcEssQ0FBQyxHQUFDLElBQUk0UixJQUFKLENBQVNKLElBQVQsRUFBY1UsS0FBZCxFQUFvQixDQUFwQixDQUFOO0FBQ0EsUUFBSUMsUUFBUSxHQUFDblMsQ0FBQyxDQUFDK1IsT0FBRixFQUFiO0FBQ0FyUixLQUFDLENBQUMsTUFBTTJRLFVBQVAsQ0FBRCxDQUFvQjFRLEdBQXBCLENBQXdCLFFBQU11UixLQUFOLEdBQVksR0FBWixHQUFnQlYsSUFBeEM7QUFDQTlRLEtBQUMsQ0FBQyxNQUFNNFEsU0FBUCxDQUFELENBQW1CM1EsR0FBbkIsQ0FBdUJ3UixRQUFRLEdBQUMsR0FBVCxHQUFhRCxLQUFiLEdBQW1CLEdBQW5CLEdBQXVCVixJQUE5QztBQUNILEdBaGdDWTtBQWtnQ2I7QUFDQVksb0JBQWtCLEVBQUUsNEJBQVNDLFNBQVQsRUFDcEI7QUFDSSxRQUFJdlEsR0FBRyxHQUFDLG1EQUFSO0FBQ0FwQixLQUFDLENBQUNtQixJQUFGLENBQU87QUFDSDhELFVBQUksRUFBRSxNQURIO0FBRUg3RCxTQUFHLEVBQUVBLEdBRkY7QUFHSDRELFVBQUksRUFBRWhGLENBQUMsQ0FBQyxNQUFJMlIsU0FBTCxDQUFELENBQWlCaEssU0FBakIsRUFISDtBQUdpQztBQUNwQ3JHLGFBQU8sRUFBRSxpQkFBU3NGLEdBQVQsRUFDVDtBQUNJa0MsYUFBSyxDQUFDLEtBQUQsQ0FBTCxDQURKLENBQ2tCO0FBQ2pCO0FBUEUsS0FBUDtBQVNILEdBL2dDWTtBQWloQ2I4SSxjQUFZLEVBQUUsc0JBQVNDLFNBQVQsRUFBbUI3TixFQUFuQixFQUFzQjhOLFNBQXRCLEVBQWdDO0FBQzFDOVIsS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0g4RCxVQUFJLEVBQUUsS0FESDtBQUVIN0QsU0FBRyxFQUFFLFVBRkY7QUFHSDRELFVBQUksRUFBRSxZQUFVaEYsQ0FBQyxDQUFDLFNBQUQsQ0FBRCxDQUFhQyxHQUFiLEVBQVYsR0FBNkIsNEJBQTdCLEdBQTBEK0QsRUFBMUQsR0FBNkQsYUFBN0QsR0FBMkU2TixTQUg5RTtBQUlIdlEsYUFBTyxFQUFFLGlCQUFTc0YsR0FBVCxFQUFjO0FBQ25Ca0wsaUJBQVMsQ0FBQ2xMLEdBQUQsQ0FBVDtBQUNIO0FBTkUsS0FBUDtBQVFILEdBMWhDWTtBQTRoQ2JtTCxhQUFXLEVBQUUscUJBQVNDLFNBQVQsRUFBbUJDLE9BQW5CLEVBQTJCO0FBRXBDLFFBQUdELFNBQVMsSUFBRSxJQUFkLEVBQW9CQSxTQUFTLEdBQUMsT0FBVjtBQUNwQixRQUFHQyxPQUFPLElBQUUsSUFBWixFQUFrQkEsT0FBTyxHQUFDLEVBQVI7QUFFbEJqUyxLQUFDLENBQUMsTUFBSWdTLFNBQUosR0FBYyxpQkFBZixDQUFELENBQW1DRSxHQUFuQyxDQUF1Q2xTLENBQUMsQ0FBQ2lTLE9BQUQsQ0FBeEMsRUFBbUQ5TyxJQUFuRCxDQUF3RCxVQUF4RCxFQUFtRSxJQUFuRSxFQUF5RWdQLEdBQXpFO0FBQ0FuUyxLQUFDLENBQUMsTUFBSWdTLFNBQUosR0FBYyxtQ0FBZixDQUFELENBQXFERSxHQUFyRCxDQUF5RGxTLENBQUMsQ0FBQ2lTLE9BQUQsQ0FBMUQsRUFBcUVFLEdBQXJFLEdBQTJFQyxLQUEzRSxDQUFpRixZQUFVO0FBQUMsYUFBTyxLQUFQO0FBQWEsS0FBekc7QUFDQXBTLEtBQUMsQ0FBQyxNQUFJZ1MsU0FBSixHQUFjLCtCQUFmLENBQUQsQ0FBaURFLEdBQWpELENBQXFEbFMsQ0FBQyxDQUFDaVMsT0FBRCxDQUF0RCxFQUFpRTlPLElBQWpFLENBQXNFLFVBQXRFLEVBQWtGLElBQWxGO0FBRUgsR0FyaUNZO0FBdWlDYmtQLFdBQVMsRUFBRSxtQkFBU0MsT0FBVCxFQUFpQkMsTUFBakIsRUFDWDtBQUNJdlMsS0FBQyxDQUFDLGlCQUFlc1MsT0FBZixHQUF1QixJQUF4QixDQUFELENBQStCbE4sSUFBL0IsQ0FBb0MsWUFBVTtBQUMxQyxVQUFHbU4sTUFBTSxJQUFFLE1BQVgsRUFDSXZTLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWMsSUFBUjtBQUNKLFVBQUd5UixNQUFNLElBQUUsTUFBWCxFQUNJdlMsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRa0UsSUFBUjtBQUVQLEtBTkQ7QUFPQWxFLEtBQUMsQ0FBQyxpQkFBZXNTLE9BQWYsR0FBdUIsSUFBeEIsQ0FBRCxDQUErQmxOLElBQS9CLENBQW9DLFlBQVU7QUFDMUMsVUFBR21OLE1BQU0sSUFBRSxNQUFYLEVBQ0l2UyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFjLElBQVI7QUFDSixVQUFHeVIsTUFBTSxJQUFFLE1BQVgsRUFDSXZTLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUWtFLElBQVI7QUFFUCxLQU5EO0FBT0gsR0F2akNZO0FBeWpDYnNPLHdCQUFzQixFQUFFLGdDQUFTQyxRQUFULEVBQWtCO0FBQ3RDLFFBQUlDLFdBQVcsR0FBRzFTLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0IwSixRQUFsQixFQUFsQjtBQUNBLFFBQUdnSixXQUFXLEtBQUssQ0FBbkIsRUFBc0JBLFdBQVcsR0FBR25VLE1BQU0sQ0FBQ29VLFVBQXJCO0FBQ3RCM1MsS0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFNBQUcsRUFBRSxvRUFBb0VxUixRQUFwRSxHQUErRSxlQUEvRSxHQUFpR0MsV0FEbkc7QUFFSHBSLGFBQU8sRUFBRSxtQkFBWTtBQUNqQjJGLGdCQUFRLENBQUNkLE1BQVQ7QUFDSDtBQUpFLEtBQVA7QUFPSCxHQW5rQ1k7QUFxa0NieU0sZ0JBQWMsRUFBRSx3QkFBU0MsU0FBVCxFQUFtQkMsVUFBbkIsRUFBOEJDLGdCQUE5QixFQUErQ0MsV0FBL0MsRUFBMkRDLHlCQUEzRCxFQUFxRkMsWUFBckYsRUFBa0dDLGFBQWxHLEVBQWdIcEssTUFBaEgsRUFDaEI7QUFDSSxRQUFHbUssWUFBWSxJQUFFLElBQWpCLEVBQXVCQSxZQUFZLEdBQUMsSUFBYjtBQUN2QixRQUFHRixXQUFXLElBQUUsSUFBaEIsRUFBc0JBLFdBQVcsR0FBQyxDQUFaO0FBQ3RCLFFBQUdELGdCQUFnQixJQUFFLElBQXJCLEVBQTJCQSxnQkFBZ0IsR0FBQyxFQUFqQjtBQUMzQixRQUFHQSxnQkFBZ0IsSUFBRSxJQUFyQixFQUEyQkEsZ0JBQWdCLEdBQUMsc0JBQWpCO0FBQzNCLFFBQUdFLHlCQUF5QixJQUFFLElBQTlCLEVBQW9DQSx5QkFBeUIsR0FBQyxLQUExQjtBQUNwQyxRQUFHRSxhQUFhLElBQUUsSUFBbEIsRUFBd0JBLGFBQWEsR0FBQyxVQUFkO0FBQ3hCLFFBQUlDLE1BQU0sR0FBQ3BULENBQUMsQ0FBQyxNQUFJNlMsU0FBSixHQUFjLFFBQWYsQ0FBWjtBQUNBLFFBQUlRLEtBQUssR0FBQ3JULENBQUMsQ0FBQyxNQUFJNlMsU0FBSixHQUFjLE9BQWYsQ0FBWDtBQUNBLFFBQUlqRixVQUFVLEdBQUN3RixNQUFNLENBQUMxTyxJQUFQLENBQVksWUFBWixDQUFmO0FBQ0EsUUFBSU0sSUFBSSxHQUFDb08sTUFBTSxDQUFDMU8sSUFBUCxDQUFZLE1BQVosQ0FBVDtBQUNBLFFBQUk0TyxNQUFNLEdBQUNGLE1BQU0sQ0FBQzFPLElBQVAsQ0FBWSxRQUFaLENBQVg7QUFDQSxRQUFHNE8sTUFBTSxJQUFFLEVBQVgsRUFBZUEsTUFBTSxHQUFHdFQsQ0FBQyxDQUFDLHNCQUFELENBQUQsQ0FBMEJDLEdBQTFCLEVBQVQ7QUFDZixRQUFHcVQsTUFBTSxJQUFFLEVBQVIsSUFBYyxPQUFPQSxNQUFQLEtBQW1CLFdBQXBDLEVBQWlEQSxNQUFNLEdBQUN0VCxDQUFDLENBQUMsWUFBRCxDQUFELENBQWdCQyxHQUFoQixFQUFQO0FBQ2pELFFBQUdxVCxNQUFNLElBQUUsRUFBUixJQUFjLE9BQU9BLE1BQVAsS0FBbUIsV0FBcEMsRUFBaURBLE1BQU0sR0FBQ0MsWUFBWSxFQUFuQixDQWRyRCxDQWdCSTtBQUNBOztBQUNBLFFBQUdULFVBQVUsSUFBRSxJQUFaLElBQW9CLENBQUNNLE1BQU0sQ0FBQ3JKLEVBQVAsQ0FBVSxVQUFWLENBQXhCLEVBQ0E7QUFDSXNKLFdBQUssQ0FBQ25QLElBQU47QUFDQW1QLFdBQUssQ0FBQ2xRLElBQU4sQ0FBVyxVQUFYLEVBQXNCLFVBQXRCO0FBQ0FpUSxZQUFNLENBQUNuUCxVQUFQLENBQWtCLFVBQWxCO0FBQ0FtUCxZQUFNLENBQUNoUSxNQUFQLEdBSkosQ0FLSTs7QUFDQSxVQUFHd0ssVUFBVSxHQUFDLENBQWQsRUFDQTtBQUNJd0YsY0FBTSxDQUFDSSxZQUFQLENBQW9CLEdBQXBCO0FBQ0FKLGNBQU0sQ0FBQ0ssR0FBUCxDQUFXLFlBQVgsRUFBd0IsdUNBQXhCO0FBQ0FMLGNBQU0sQ0FBQzFPLElBQVAsQ0FBWSxVQUFaLEVBQXVCLFVBQXZCO0FBRUEsWUFBSWdQLG9CQUFvQixHQUFDLFlBQXpCO0FBQ0EsWUFBSUMsUUFBUSxHQUFDLEVBQWI7QUFDQSxZQUFJQyxZQUFZLEdBQUMsRUFBakI7QUFDQSxZQUFJQyxjQUFjLEdBQUMsRUFBbkI7QUFDQTdULFNBQUMsQ0FBQ21CLElBQUYsQ0FBTztBQUNIQyxhQUFHLEVBQUcscUJBQW1CK1IsYUFBbkIsR0FBaUMsb0NBQWpDLEdBQXNFdkYsVUFBdEUsR0FBaUZtRixnQkFBakYsR0FBa0csUUFBbEcsR0FBMkd4QyxRQUFRLENBQUN2TCxJQUFELENBQW5ILEdBQTBILFVBQTFILEdBQXFJc08sTUFBckksR0FBNEksZUFBNUksR0FBNEpOLFdBRC9KO0FBRUgzUixrQkFBUSxFQUFFLEtBRlA7QUFHSDZELGVBQUssRUFBRWdPLFlBSEo7QUFJSGpPLGNBQUksRUFBRSxNQUpIO0FBS0hELGNBQUksRUFBRStELE1BTEg7QUFNSHpILGlCQUFPLEVBQUMsaUJBQVNzRixHQUFULEVBQWE7QUFDakIsZ0JBQUlrTixXQUFXLEdBQUM5VCxDQUFDLENBQUM0RyxHQUFELENBQUQsQ0FBT0UsSUFBUCxDQUFZLGFBQVosRUFBMkJ4SyxJQUEzQixFQUFoQjs7QUFDQSxpQkFBSSxJQUFJTixDQUFDLEdBQUMsQ0FBVixFQUFZQSxDQUFDLEdBQUM4WCxXQUFkLEVBQTBCOVgsQ0FBQyxFQUEzQixFQUE4QjtBQUMxQixrQkFBSStYLEtBQUssR0FBQy9ULENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVksVUFBUTlLLENBQXBCLEVBQXVCTSxJQUF2QixFQUFWO0FBQ0Esa0JBQUkwWCxZQUFZLEdBQUNoVSxDQUFDLENBQUM0RyxHQUFELENBQUQsQ0FBT0UsSUFBUCxDQUFZLGlCQUFlOUssQ0FBM0IsRUFBOEJNLElBQTlCLEVBQWpCO0FBQ0Esa0JBQUkyWCxnQkFBZ0IsR0FBQ2pVLENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVkscUJBQW1COUssQ0FBL0IsRUFBa0NNLElBQWxDLEVBQXJCO0FBQ0Esa0JBQUk0WCxNQUFNLEdBQUNsVSxDQUFDLENBQUM0RyxHQUFELENBQUQsQ0FBT0UsSUFBUCxDQUFZLFlBQVU5SyxDQUF0QixFQUF5Qk0sSUFBekIsRUFBWDtBQUNBLGtCQUFJNlgsQ0FBQyxHQUFDblUsQ0FBQyxDQUFDNEcsR0FBRCxDQUFELENBQU9FLElBQVAsQ0FBWSxhQUFXOUssQ0FBdkIsRUFBMEJNLElBQTFCLEVBQU47QUFDQXVYLDRCQUFjLENBQUNFLEtBQUQsQ0FBZCxHQUFzQjNXLFFBQVEsQ0FBQzRDLENBQUMsQ0FBQzRHLEdBQUQsQ0FBRCxDQUFPRSxJQUFQLENBQVksY0FBWTlLLENBQXhCLEVBQTJCTSxJQUEzQixFQUFELENBQTlCO0FBQ0Esa0JBQUk4WCxXQUFXLEdBQUNMLEtBQWhCO0FBQ0Esa0JBQUdHLE1BQU0sSUFBRSxFQUFYLEVBQWVFLFdBQVcsR0FBR0EsV0FBVyxHQUFDLEtBQVosR0FBa0JGLE1BQWhDO0FBQ2ZFLHlCQUFXLEdBQUcxUyxPQUFPLENBQUMwUyxXQUFELEVBQWFBLFdBQVcsQ0FBQzFZLE1BQVosR0FBcUIsQ0FBbEMsQ0FBckI7QUFDQTBZLHlCQUFXLElBQUUxUyxPQUFPLENBQUMsWUFBVXlTLENBQVgsRUFBYSxFQUFiLENBQXBCO0FBQ0Esa0JBQUlILFlBQVksSUFBRSxFQUFsQixFQUF1QkksV0FBVyxJQUFFLGNBQVlKLFlBQXpCOztBQUN2QixrQkFBR0QsS0FBSyxJQUFFLEVBQVYsRUFBYTtBQUFFQSxxQkFBSyxHQUFDLFlBQU47QUFBb0JLLDJCQUFXLEdBQUMxUyxPQUFPLENBQUMsVUFBRCxFQUFZLEVBQVosQ0FBUCxHQUF1QkEsT0FBTyxDQUFDLFlBQVV5UyxDQUFYLEVBQWEsRUFBYixDQUExQztBQUE2RDs7QUFDaEdmLG9CQUFNLENBQUNpQixTQUFQLENBQWlCTixLQUFqQixFQUF1QkssV0FBVyxDQUFDM1csT0FBWixDQUFvQixJQUFwQixFQUF5QixNQUF6QixDQUF2QixFQUEwRCxLQUExRDtBQUNBbVcsMEJBQVksQ0FBQ0csS0FBRCxDQUFaLEdBQW9CQyxZQUFwQjs7QUFFQSxrQkFBSUMsZ0JBQWdCLEdBQUNQLG9CQUFyQixFQUNBO0FBQ0lBLG9DQUFvQixHQUFDTyxnQkFBckI7QUFDQU4sd0JBQVEsR0FBQ0ksS0FBVDtBQUNIO0FBRUosYUF4QmdCLENBMEJqQjs7O0FBQ0FYLGtCQUFNLENBQUN0TSxJQUFQLENBQVksUUFBWixFQUFzQjFCLElBQXRCLENBQTRCLFlBQVc7QUFDbkMsa0JBQUlrUCxLQUFLLEdBQUd0VSxDQUFDLENBQUMsSUFBRCxDQUFiO0FBQ0Esa0JBQUkwTyxHQUFKOztBQUNBLG1CQUFJQSxHQUFKLElBQVdrRixZQUFYLEVBQ0E7QUFDSSxvQkFBR1UsS0FBSyxDQUFDNVAsSUFBTixDQUFXLE9BQVgsS0FBcUJnSyxHQUF4QixFQUNBO0FBQ0k0Rix1QkFBSyxDQUFDNVAsSUFBTixDQUFXLFVBQVgsRUFBc0JrUCxZQUFZLENBQUNsRixHQUFELENBQWxDO0FBQ0E7QUFDSDtBQUNKOztBQUVELG1CQUFJQSxHQUFKLElBQVdtRixjQUFYLEVBQ0E7QUFDSSxvQkFBR1MsS0FBSyxDQUFDNVAsSUFBTixDQUFXLE9BQVgsS0FBcUJnSyxHQUF4QixFQUE2QjtBQUN6QjRGLHVCQUFLLENBQUNuUixJQUFOLENBQVcsVUFBWCxFQUFzQjBRLGNBQWMsQ0FBQ25GLEdBQUQsQ0FBZCxJQUFxQixDQUFyQixHQUF1QixVQUF2QixHQUFrQyxFQUF4RDtBQUNBO0FBQ0g7QUFDSjtBQUNKLGFBbkJEO0FBb0JBMEUsa0JBQU0sQ0FBQ0ssR0FBUCxDQUFXLFlBQVgsRUFBd0Isb0JBQXhCO0FBQ0FMLGtCQUFNLENBQUNuUCxVQUFQLENBQWtCLFVBQWxCO0FBQ0FtUCxrQkFBTSxDQUFDbUIsYUFBUCxDQUFxQmxCLEtBQUssQ0FBQ3BULEdBQU4sRUFBckI7QUFFQSxnQkFBSWdULHlCQUFKLEVBQWdDRyxNQUFNLENBQUNtQixhQUFQLENBQXFCWixRQUFyQjtBQUVuQztBQTNERSxTQUFQO0FBOERIO0FBQ0osS0FoRkQsTUFpRkk7QUFDQSxVQUFJSSxLQUFLLEdBQUNYLE1BQU0sQ0FBQ25ULEdBQVAsRUFBVjtBQUNBbVQsWUFBTSxDQUFDbFAsSUFBUDtBQUNBbVAsV0FBSyxDQUFDcFQsR0FBTixDQUFVOFQsS0FBVjtBQUNBWCxZQUFNLENBQUNqUSxJQUFQLENBQVksVUFBWixFQUF1QixVQUF2QjtBQUNBa1EsV0FBSyxDQUFDcFAsVUFBTixDQUFpQixVQUFqQjtBQUNBb1AsV0FBSyxDQUFDalEsTUFBTjtBQUNIO0FBQ0osR0FqckNZO0FBbXJDYm9SLHVCQUFxQixFQUFFLCtCQUFTQyxNQUFULEVBQWlCdEcsVUFBakIsRUFBMkI7QUFDOUN4SixtQkFBZSxDQUFDO0FBQ1p2RCxTQUFHLEVBQUUsdURBQXVEcVQsTUFEaEQ7QUFFWjdQLGFBQU8sRUFBRSxzQkFGRztBQUdadUosZUFBUyxFQUFFLHFCQUFXO0FBQ2xCdE4sa0JBQVUsQ0FBQyxzQkFBRCxFQUF3QixVQUFTdU8sQ0FBVCxFQUFXO0FBQ3pDLGNBQUcsQ0FBQ0EsQ0FBSixFQUFPO0FBRVBwUCxXQUFDLENBQUNtQixJQUFGLENBQU87QUFDSEMsZUFBRyxFQUFFLFVBREY7QUFFSDZELGdCQUFJLEVBQUMsTUFGRjtBQUdINUQsb0JBQVEsRUFBRSxNQUhQO0FBSUgyRCxnQkFBSSxFQUFFLG9FQUFvRXlQLE1BQXBFLEdBQTZFLEdBQTdFLEdBQW1GelUsQ0FBQyxDQUFDLHlDQUFELENBQUQsQ0FBNkMySCxTQUE3QyxFQUp0RjtBQUtIckcsbUJBQU8sRUFBRSxpQkFBU0MsSUFBVCxFQUFjO0FBQ25Cd0YseUNBQTJCLENBQUN4RixJQUFELEVBQU8sSUFBUCxDQUEzQjtBQUNBLGtCQUFHLE9BQU80TSxVQUFQLEtBQXFCLFVBQXhCLEVBQW9DQSxVQUFTLENBQUNuSCxHQUFELENBQVQ7QUFDdkM7QUFSRSxXQUFQO0FBV0gsU0FkUyxDQUFWO0FBZUg7QUFuQlcsS0FBRCxDQUFmO0FBcUJILEdBenNDWTs7QUEyc0NiO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lzSix1Q0FBcUMsRUFBRSwrQ0FBU29FLGNBQVQsRUFBeUJ2RSxvQkFBekIsRUFDdkM7QUFDSSxRQUFHLENBQUN1RSxjQUFKLEVBQW9CLE9BQU8sSUFBUDtBQUVwQixRQUFJQyxPQUFPLEdBQUczVSxDQUFDLENBQUMsZUFBRCxDQUFELENBQW1CQyxHQUFuQixFQUFkO0FBQ0EsUUFBSTJVLE1BQU0sR0FBRzVVLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JDLEdBQWxCLEVBQWI7O0FBRUEsUUFBR3JDLFNBQVMsQ0FBQ3VTLG9CQUFELENBQVQsS0FBb0MsQ0FBdkMsRUFBeUM7QUFDckN3RSxhQUFPLEdBQUczVSxDQUFDLENBQUMsZUFBRCxDQUFELENBQW1CQyxHQUFuQixFQUFWO0FBQ0EyVSxZQUFNLEdBQUc1VSxDQUFDLENBQUMsY0FBRCxDQUFELENBQWtCQyxHQUFsQixFQUFUO0FBQ0g7O0FBRUQwVSxXQUFPLEdBQUNELGNBQWMsQ0FBQ2hWLE1BQWYsQ0FBc0IsQ0FBdEIsRUFBd0IsQ0FBeEIsSUFBMkJpVixPQUFPLENBQUNqVixNQUFSLENBQWUsQ0FBZixDQUFuQztBQUNBLFFBQUlnVixjQUFjLENBQUNoWixNQUFmLEdBQXNCLENBQTFCLEVBQ0lrWixNQUFNLEdBQUNGLGNBQWMsQ0FBQ2hWLE1BQWYsQ0FBc0IsQ0FBdEIsSUFBeUJrVixNQUFNLENBQUNsVixNQUFQLENBQWMsQ0FBZCxDQUFoQyxDQURKLEtBR0lrVixNQUFNLEdBQUNGLGNBQWMsQ0FBQ2hWLE1BQWYsQ0FBc0IsQ0FBdEIsSUFBeUJrVixNQUFNLENBQUNsVixNQUFQLENBQWMsQ0FBZCxDQUFoQztBQUVKLFdBQU8sQ0FBQ2lWLE9BQUQsRUFBU0MsTUFBVCxDQUFQO0FBQ0gsR0FydUNZO0FBdXVDYkMsU0FBTyxFQUFFLG1CQUFXO0FBQ2hCN1UsS0FBQyxDQUFDMkosR0FBRixDQUFNLHNCQUFOLEVBQTZCLFVBQVMvQyxHQUFULEVBQWEsQ0FDdEM7QUFDSCxLQUZEO0FBR0gsR0EzdUNZO0FBNnVDYmtPLGdCQUFjLEVBQUUsMEJBQVU7QUFDdEIsUUFBSUMsT0FBTyxHQUFHL1UsQ0FBQyxDQUFDLGlCQUFELENBQWY7QUFDQWEsY0FBVSxDQUFDLHVCQUFELEVBQTBCLFVBQVVyRixHQUFWLEVBQWU7QUFDL0MsVUFBRyxDQUFDQSxHQUFKLEVBQVMsT0FBTyxLQUFQO0FBRVQsVUFBSXdaLElBQUksR0FBR0QsT0FBTyxDQUFDOVUsR0FBUixFQUFYO0FBQ0FRLGFBQU87QUFDUFQsT0FBQyxDQUFDbUIsSUFBRixDQUFPO0FBQ0hDLFdBQUcsRUFBRSxtREFERjtBQUVINkQsWUFBSSxFQUFFLE1BRkg7QUFHSEQsWUFBSSxFQUFFO0FBQUMsa0JBQVFnUSxJQUFUO0FBQWMsd0JBQWNoVixDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQkMsR0FBdEI7QUFBNUIsU0FISDtBQUlIb0IsZ0JBQVEsRUFBRSxNQUpQO0FBS0hDLGVBQU8sRUFBRSxpQkFBU0MsSUFBVCxFQUFjO0FBQ25CLGNBQUdBLElBQUksQ0FBQ3lGLEdBQVIsRUFBYXpJLE1BQU0sQ0FBQzBJLFFBQVAsQ0FBZ0JkLE1BQWhCLEdBQWIsS0FDSztBQUNEMUYsbUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDQXFJLGlCQUFLLENBQUMscUJBQUQsQ0FBTDtBQUNIO0FBQ0o7QUFYRSxPQUFQO0FBY0EsYUFBTyxJQUFQO0FBQ0gsS0FwQlMsQ0FBVjtBQXFCSCxHQXB3Q1k7QUFzd0NibU0sbUJBQWlCLEVBQUUsNkJBQ25CO0FBQ0ksUUFBSUMsVUFBVSxHQUFDbFYsQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0JDLEdBQXhCLEVBQWY7QUFDQVUsWUFBUTtBQUNSWCxLQUFDLENBQUMySixHQUFGLENBQU8saUVBQStEdUwsVUFBdEUsRUFBa0YsWUFBVztBQUN6RjNXLFlBQU0sQ0FBQzBJLFFBQVAsR0FBZ0IsbUJBQWhCO0FBQ0gsS0FGRDtBQUdILEdBN3dDWTtBQSt3Q2JrTyxlQUFhLEVBQUUsdUJBQVM3WCxDQUFULEVBQVc7QUFDdEIsUUFBSThYLE1BQU0sR0FBRyxDQUFiOztBQUNBLFNBQUssSUFBSUMsT0FBTyxHQUFHL1gsQ0FBQyxDQUFDNUIsTUFBRixHQUFTLENBQTVCLEVBQStCMlosT0FBTyxJQUFHLENBQXpDLEVBQTRDQSxPQUFPLEVBQW5ELEVBQXNEO0FBQ2xERCxZQUFNLEdBQUdBLE1BQU0sR0FBR3ZZLFFBQVEsQ0FBQ1MsQ0FBQyxDQUFDZ1ksTUFBRixDQUFTRCxPQUFULENBQUQsQ0FBUixJQUErQixJQUFHLEtBQUdBLE9BQU8sR0FBRyxDQUFiLENBQWxDLENBQWxCO0FBQ0g7O0FBQ0QsV0FBTyxDQUFDLEtBQU1ELE1BQU0sR0FBRyxFQUFoQixJQUF1QixFQUE5QjtBQUNILEdBcnhDWTtBQXV4Q2JHLGVBQWEsRUFBRSx1QkFBU2xaLEtBQVQsRUFBZ0JtWixPQUFoQixFQUF5QkMsVUFBekIsRUFBb0M7QUFDL0NDLHVCQUFPLENBQUMsNERBQUQsQ0FBUDs7QUFDQSxRQUFJQyxLQUFLLEdBQUcsQ0FBQyxpQkFBaUJ0WixLQUFsQixFQUF5Qm9ELEtBQXpCLENBQStCLENBQUMsRUFBaEMsQ0FBWjtBQUNBa1csU0FBSyxJQUFJUixhQUFhLENBQUNRLEtBQUQsQ0FBdEI7QUFDQUMsYUFBUyxDQUFDLE1BQU1ILFVBQVAsRUFBbUJFLEtBQW5CLEVBQTBCO0FBQy9CRSxZQUFNLEVBQUUsT0FEdUI7QUFFL0JDLGNBQVEsRUFBRSxFQUZxQjtBQUcvQkMsZ0JBQVUsRUFBRSxDQUhtQjtBQUkvQnpYLFlBQU0sRUFBRSxHQUp1QjtBQUsvQkYsV0FBSyxFQUFFLENBTHdCO0FBTS9CNFgsVUFBSSxFQUFFO0FBTnlCLEtBQTFCLENBQVQsQ0FPR0MsTUFQSDtBQVNBalcsS0FBQyxDQUFDLE1BQU13VixPQUFQLENBQUQsQ0FBaUJ2VixHQUFqQixDQUFxQjBWLEtBQXJCO0FBQ0gsR0FyeUNZO0FBdXlDYk8sbUJBQWlCLEVBQUUsMkJBQVNDLFNBQVQsRUFBbUJDLFNBQW5CLEVBQTZCQyxVQUE3QixFQUF3QztBQUN2RCxRQUFJalYsR0FBRyxHQUFDLGdGQUE4RStVLFNBQXRGO0FBQ0FuVyxLQUFDLENBQUNtQixJQUFGLENBQU87QUFDSEMsU0FBRyxFQUFFQSxHQURGO0FBRUhDLGNBQVEsRUFBRSxNQUZQO0FBR0g2RCxXQUFLLEVBQUUsS0FISjtBQUlINUQsYUFBTyxFQUFFLGlCQUFTQyxJQUFULEVBQWM7QUFDbkIsWUFBSStVLEdBQUcsR0FBQy9VLElBQUksQ0FBQytVLEdBQWI7QUFDQSxZQUFJQyxLQUFJLEdBQUNoVixJQUFJLFFBQWI7QUFDQSxZQUFHK1UsR0FBRyxLQUFHLElBQU4sSUFBY0MsS0FBSSxLQUFHLElBQXhCLEVBQ0l6TixLQUFLLENBQUMsMkNBQUQsQ0FBTCxDQURKLEtBR0E7QUFDSTlJLFdBQUMsQ0FBQyxNQUFJb1csU0FBTCxDQUFELENBQWlCblcsR0FBakIsQ0FBcUJxVyxHQUFyQjtBQUNBdFcsV0FBQyxDQUFDLE1BQUlxVyxVQUFMLENBQUQsQ0FBa0JwVyxHQUFsQixDQUFzQnNXLEtBQXRCO0FBQ0g7QUFDSjtBQWRFLEtBQVA7QUFnQkgsR0F6ekNZO0FBMnpDYkMsdUJBQXFCLEVBQUUsK0JBQVVDLElBQVYsRUFBZTtBQUNsQyxRQUFHLENBQUNBLElBQUosRUFBVUEsSUFBSSxHQUFHO0FBQUN6VixZQUFNLEVBQUU7QUFBVCxLQUFQO0FBQ1YsUUFBRyxDQUFDeVYsSUFBSSxDQUFDelYsTUFBVCxFQUFpQnlWLElBQUksQ0FBQ3pWLE1BQUwsR0FBYyxpQkFBZDtBQUVqQixRQUFNMFYsT0FBTyxHQUFHMVcsQ0FBQyxDQUFDLE1BQU15VyxJQUFJLENBQUN6VixNQUFaLENBQWpCO0FBQ0EwVixXQUFPLENBQUNsVixJQUFSLENBQWEsb0VBQW9FeEIsQ0FBQyxDQUFDLGVBQUQsQ0FBRCxDQUFtQndCLElBQW5CLEVBQXBFLEdBQWdHLFFBQTdHO0FBQ0EsUUFBRyxDQUFDaVYsSUFBSSxDQUFDL1AsTUFBVCxFQUFpQitQLElBQUksQ0FBQy9QLE1BQUwsR0FBY2dRLE9BQU8sQ0FBQzFSLElBQVIsQ0FBYSxRQUFiLENBQWQ7QUFDakJ5UixRQUFJLENBQUM5UCxRQUFMLEdBQWdCLHVCQUFoQjtBQUNBLFFBQUc4UCxJQUFJLENBQUN6UixJQUFSLEVBQWN5UixJQUFJLENBQUN6UixJQUFMLEdBQVloRixDQUFDLENBQUMsTUFBTXlXLElBQUksQ0FBQ3pSLElBQVosQ0FBRCxDQUFtQi9FLEdBQW5CLEVBQVo7QUFDZCxRQUFHd1csSUFBSSxDQUFDbkQsTUFBUixFQUFnQm1ELElBQUksQ0FBQ25ELE1BQUwsR0FBY3RULENBQUMsQ0FBQyxNQUFNeVcsSUFBSSxDQUFDbkQsTUFBWixDQUFELENBQXFCclQsR0FBckIsRUFBZDtBQUNoQixRQUFHLENBQUN3VyxJQUFJLENBQUNFLFNBQVQsRUFBb0JGLElBQUksQ0FBQ0UsU0FBTCxHQUFpQixZQUFqQjtBQUNwQixRQUFNeE4sUUFBUSxHQUFHc04sSUFBSSxDQUFDdE4sUUFBdEI7QUFDQXNOLFFBQUksQ0FBQ3ROLFFBQUwsR0FBZ0IsSUFBaEI7QUFFQXhFLG1CQUFlLENBQUM7QUFDWnZELFNBQUcsRUFBRSxZQURPO0FBRVp3RCxhQUFPLEVBQUU2UixJQUFJLENBQUN6VixNQUZGO0FBR1pnRSxVQUFJLEVBQUV5UixJQUhNO0FBSVp0SSxlQUFTLEVBQUUscUJBQVc7QUFDbEIsWUFBRyxPQUFPaEYsUUFBUCxLQUFvQixVQUF2QixFQUFtQ0EsUUFBUTtBQUM5QztBQU5XLEtBQUQsQ0FBZjtBQVFILEdBajFDWTtBQW0xQ2J5TiwwQkFBd0IsRUFBRSxrQ0FBVTVWLE1BQVYsRUFBa0I2VixXQUFsQixFQUE4QjtBQUNwRCxRQUFNSCxPQUFPLEdBQUcxVyxDQUFDLENBQUMsTUFBTWdCLE1BQVAsQ0FBakI7QUFDQSxRQUFNMlYsU0FBUyxHQUFHRCxPQUFPLENBQUMxUixJQUFSLENBQWEsV0FBYixJQUE0QjBSLE9BQU8sQ0FBQzFSLElBQVIsQ0FBYSxXQUFiLENBQTVCLEdBQXdELFlBQTFFO0FBQ0EsUUFBTThSLGVBQWUsR0FBRzlXLENBQUMsQ0FBQyxxQkFBcUJnQixNQUF0QixDQUF6QjtBQUNBOFYsbUJBQWUsQ0FBQzNFLEdBQWhCO0FBQ0EyRSxtQkFBZSxDQUFDQyxFQUFoQixDQUFtQixPQUFuQixFQUE0QixVQUFVNUosS0FBVixFQUFnQjtBQUN4QyxVQUFNNkosY0FBYyxHQUFHaFgsQ0FBQyxDQUFDLElBQUQsQ0FBeEI7QUFDQSxVQUFNaVgsWUFBWSxHQUFHalgsQ0FBQyxDQUFDLE1BQU1nWCxjQUFjLENBQUN0UyxJQUFmLENBQW9CLElBQXBCLEVBQTBCakgsT0FBMUIsQ0FBa0MsUUFBbEMsRUFBNEMsRUFBNUMsQ0FBUCxDQUF0QjtBQUNBMFAsV0FBSyxDQUFDakMsY0FBTjtBQUNBckssZ0JBQVUsQ0FBQ0csTUFBRCxFQUFTLFlBQVksQ0FBRSxDQUF2QixFQUF5QixZQUFVO0FBQ3pDLFlBQU1rVyxhQUFhLEdBQUdsWCxDQUFDLENBQUMsZUFBRCxDQUF2QjtBQUNBa1gscUJBQWEsQ0FBQy9FLEdBQWQ7QUFDQStFLHFCQUFhLENBQUNILEVBQWQsQ0FBaUIsT0FBakIsRUFBMEIsWUFBWTtBQUNsQyxjQUFNMUwsS0FBSyxHQUFHckwsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRZ0YsSUFBUixDQUFhLE9BQWIsQ0FBZDtBQUNBLGNBQU1tUyxLQUFLLEdBQUduWCxDQUFDLENBQUMsTUFBTTJXLFNBQU4sR0FBa0IsMEJBQWxCLEdBQStDdEwsS0FBaEQsQ0FBZjtBQUVBMkwsd0JBQWMsQ0FBQy9XLEdBQWYsQ0FBbUJrWCxLQUFLLENBQUNuUyxJQUFOLENBQVcsc0JBQVgsQ0FBbkI7QUFDQWlTLHNCQUFZLENBQUNoWCxHQUFiLENBQWlCa1gsS0FBSyxDQUFDblMsSUFBTixDQUFXLGFBQVgsQ0FBakI7QUFDQWlTLHNCQUFZLENBQUNqUyxJQUFiLENBQWtCLGNBQWxCLEVBQWtDcUcsS0FBbEM7QUFDQXFMLGlCQUFPLENBQUMxUixJQUFSLENBQWEsUUFBYixFQUF1QixJQUF2QjtBQUdBaEYsV0FBQyxDQUFDLE1BQU1nQixNQUFQLENBQUQsQ0FBZ0JBLE1BQWhCLENBQXVCLE9BQXZCO0FBQ0FpVyxzQkFBWSxDQUFDck0sTUFBYjtBQUNILFNBWkQ7QUFhQTVLLFNBQUMsQ0FBQyxzQkFBc0IyVyxTQUF2QixDQUFELENBQW1DakgsU0FBbkMsR0FBK0MwSCxPQUEvQyxDQUF1REMsTUFBdkQ7QUFDSCxPQWpCUyxDQUFWO0FBa0JILEtBdEJEO0FBdUJBLFFBQUdSLFdBQVcsSUFBSSxPQUFPQSxXQUFQLEtBQXVCLFVBQXpDLEVBQ0lBLFdBQVc7QUFDbEIsR0FqM0NZO0FBbTNDYlMsbUNBQWlDLEVBQUUsMkNBQVViLElBQVYsRUFBZTtBQUM5QyxRQUFHLENBQUNBLElBQUosRUFBVUEsSUFBSSxHQUFHO0FBQ2J6VixZQUFNLEVBQUUsaUJBREs7QUFFYnVXLGlCQUFXLEVBQUUsQ0FGQTtBQUdiVixpQkFBVyxFQUFFO0FBSEEsS0FBUDtBQUtWLFFBQUcsQ0FBQ0osSUFBSSxDQUFDelYsTUFBVCxFQUFpQnlWLElBQUksQ0FBQ3pWLE1BQUwsR0FBYyxpQkFBZDs7QUFFakJ5VixRQUFJLENBQUN0TixRQUFMLEdBQWdCLFlBQU07QUFDbEJ5Tiw4QkFBd0IsQ0FBQ0gsSUFBSSxDQUFDelYsTUFBTixFQUFjeVYsSUFBSSxDQUFDSSxXQUFuQixDQUF4QjtBQUNILEtBRkQ7O0FBR0FMLHlCQUFxQixDQUFDQyxJQUFELENBQXJCO0FBRUgsR0FoNENZO0FBazRDYmUsOEJBbDRDYSx3Q0FrNENnQmYsSUFsNENoQixFQWs0Q3FCO0FBQzlCLFFBQUcsQ0FBQ0EsSUFBSSxDQUFDL1AsTUFBVCxFQUFpQitQLElBQUksQ0FBQy9QLE1BQUwsR0FBYSxzQkFBYjtBQUNqQitQLFFBQUksQ0FBQzlQLFFBQUwsR0FBZ0IsOEJBQWhCO0FBQ0EsUUFBSXdDLFFBQVEsR0FBRyxJQUFmO0FBQ0EsUUFBRyxPQUFPc04sSUFBSSxDQUFDdEksU0FBWixLQUEwQixVQUE3QixFQUF5Q2hGLFFBQVEsR0FBR3NOLElBQUksQ0FBQ3RJLFNBQWhCO0FBQ3pDc0ksUUFBSSxDQUFDdEksU0FBTCxHQUFpQnpELFNBQWpCO0FBRUEvRixtQkFBZSxDQUFDO0FBQ1p2RCxTQUFHLEVBQUUsWUFETztBQUVaNEQsVUFBSSxFQUFFeVIsSUFGTTtBQUdaN1IsYUFBTyxFQUFFNlIsSUFBSSxDQUFDZ0IsR0FIRjtBQUladEosZUFBUyxFQUFFLHFCQUFXO0FBQ2xCLFlBQUcsT0FBT2hGLFFBQVAsS0FBb0IsVUFBdkIsRUFBbUNBLFFBQVEsQ0FBQ3NOLElBQUQsQ0FBUjtBQUN0QztBQU5XLEtBQUQsQ0FBZjtBQVFIO0FBajVDWSxDQUFqQjs7QUFvNUNBaUIsTUFBTSxDQUFDQyxFQUFQLENBQVVDLE1BQVYsR0FBbUIsWUFBVTtBQUFDLFNBQU8sS0FBS2xjLE1BQUwsR0FBWSxDQUFuQjtBQUFzQixDQUFwRCxDLENBRUE7OztBQUNBc0UsQ0FBQyxDQUFDMlgsRUFBRixDQUFLak8sUUFBTCxHQUFnQixZQUNoQjtBQUNJLFNBQU90TSxRQUFRLENBQUU0QyxDQUFDLENBQUMsSUFBRCxDQUFELENBQVFDLEdBQVIsRUFBRixDQUFmO0FBQ0gsQ0FIRDs7QUFJQUQsQ0FBQyxDQUFDMlgsRUFBRixDQUFLRSxTQUFMLEdBQWlCLFlBQ2pCO0FBQ0ksU0FBT2phLFNBQVMsQ0FBRW9DLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FBUUMsR0FBUixFQUFGLENBQWhCO0FBQ0gsQ0FIRCxDLENBS0E7OztBQUNBRCxDQUFDLENBQUMyWCxFQUFGLENBQUtHLGlCQUFMLEdBQXlCLFlBQVU7QUFDL0IsTUFBRztBQUNDLFNBQUtDLFNBQUwsR0FBaUJ2SixJQUFJLENBQUMsZUFBZSxLQUFLOUosSUFBTCxDQUFVLElBQVYsQ0FBaEIsQ0FBckI7QUFDSCxHQUZELENBR0EsT0FBT2pKLENBQVAsRUFBVTtBQUNOLFNBQUtzYyxTQUFMLEdBQWlCL1gsQ0FBQyxDQUFDLE1BQU0sS0FBSzBFLElBQUwsQ0FBVSxJQUFWLENBQVAsQ0FBRCxDQUF5QmdMLFNBQXpCLEVBQWpCO0FBQ0g7O0FBRUQsT0FBS3NJLGFBQUwsR0FBcUIsVUFBVTFiLElBQVYsRUFBZ0IyYixHQUFoQixFQUFxQkMsR0FBckIsRUFBMEI7QUFDM0MsUUFBRyxDQUFDQSxHQUFKLEVBQVNBLEdBQUcsR0FBRyxDQUFOO0FBRVQsUUFBR0EsR0FBRyxLQUFLLENBQVgsRUFDSWxZLENBQUMsQ0FBRSxLQUFLK1gsU0FBTCxDQUFldE0sTUFBZixDQUF1QndNLEdBQXZCLEVBQTZCRSxNQUE3QixFQUFGLENBQUQsQ0FBMkMzVyxJQUEzQyxDQUFnRGxGLElBQWhELEVBREosS0FHSTBELENBQUMsQ0FBQyxXQUFXa1ksR0FBWCxHQUFpQixVQUFqQixHQUE4QkQsR0FBOUIsR0FBbUMsR0FBcEMsRUFBeUMsS0FBS0YsU0FBTCxDQUFlM00sS0FBZixHQUF1QitNLE1BQXZCLEVBQXpDLENBQUQsQ0FBMkUzVyxJQUEzRSxDQUFnRmxGLElBQWhGO0FBQ1AsR0FQRDs7QUFTQSxTQUFPLElBQVA7QUFDSCxDQWxCRCxDIiwiZmlsZSI6ImJvb3RzdHJhcF9lbnZ+ZGV0dGFnbGktZmV+ZG9jdW1lbnRpfmpxdWVyeS11aV9lbnYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZWQgYnkgUGhwU3Rvcm1cbiAqIFVzZXI6IGRhbmllbGVcbiAqIERhdGU6IDE1LzA1LzIwXG4gKiBUaW1lOiAxMy4wNVxuICovXG5sZXQgaW50ZXJ2YWxfYXZhbnphbWVudG87XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgaW5fYXJyYXk6IGZ1bmN0aW9uIChteUFycmF5LCBlbGVtZW50KVxuICAgIHtcbiAgICAgICAgdmFyIHJlcz1mYWxzZTtcbiAgICAgICAgZm9yKHZhciBlPTA7ZTxteUFycmF5Lmxlbmd0aDtlKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKG15QXJyYXlbZV0gPT0gZWxlbWVudClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXM9dHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICBpc19hcnJheTogZnVuY3Rpb24gKG1peGVkX3Zhcikge1xuICAgICAgICByZXR1cm4gbWl4ZWRfdmFyLmlzQXJyYXkoKSB8fCB0eXBlb2YgbWl4ZWRfdmFyID09PSBcIm9iamVjdFwiO1xuICAgIH0sXG5cbiAgICByb3VuZFRvOiBmdW5jdGlvbiAoZGVjaW1hbHBvc2l0aW9ucylcbiAgICB7XG4gICAgICAgIHZhciBpID0gdGhpcyAqIE1hdGgucG93KDEwLGRlY2ltYWxwb3NpdGlvbnMpO1xuICAgICAgICBpID0gTWF0aC5yb3VuZChpKTtcbiAgICAgICAgcmV0dXJuIGkgLyBNYXRoLnBvdygxMCxkZWNpbWFscG9zaXRpb25zKTtcbiAgICB9LFxuXG4gICAgY291bnREZWNpbWFsczogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgbGV0IHRleHQgPSB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgIC8vIHZlcmlmeSBpZiBudW1iZXIgMC4wMDAwMDUgaXMgcmVwcmVzZW50ZWQgYXMgXCI1ZS02XCJcbiAgICAgICAgaWYgKHRleHQuaW5kZXhPZignZS0nKSA+IC0xKSB7XG4gICAgICAgICAgICBsZXQgW2Jhc2UsIHRyYWlsXSA9IHRleHQuc3BsaXQoJ2UtJyk7XG4gICAgICAgICAgICBsZXQgZGVnID0gcGFyc2VJbnQodHJhaWwsIDEwKTtcbiAgICAgICAgICAgIHJldHVybiBkZWc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY291bnQgZGVjaW1hbHMgZm9yIG51bWJlciBpbiByZXByZXNlbnRhdGlvbiBsaWtlIFwiMC4xMjM0NTZcIlxuICAgICAgICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfSxcblxuICAgIHJvdW5kOiBmdW5jdGlvbiAobnVtLCBkZWMpe1xuICAgICAgICBpZighZGVjKVxuICAgICAgICAgICAgZGVjID0gMDtcbiAgICAgICAgdmFyIG51bV9zaWduID0gbnVtID49IDAgPyAxIDogLTE7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChNYXRoLnJvdW5kKChudW0gKiBNYXRoLnBvdygxMCwgZGVjKSkgKyAobnVtX3NpZ24gKiAwLjAwMDEpKSAvIE1hdGgucG93KDEwLCBkZWMpKS50b0ZpeGVkKGRlYykpO1xuICAgIH0sXG5cbiAgICBnZXRGbG9hdDogZnVuY3Rpb24oczAsIGRlYylcbiAgICB7XG4gICAgICAgIHZhciBzPW5ldyBTdHJpbmcoczApO1xuICAgICAgICB0cmltKHMpO1xuICAgICAgICBzPXMucmVwbGFjZShcIixcIixcIi5cIik7XG4gICAgICAgIHZhciBmPXBhcnNlRmxvYXQocyk7XG4gICAgICAgIGlmKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiIHx8IGlzTmFOKGYpKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgaWYoZGVjKSByZXR1cm4gcm91bmQoZiwgZGVjKTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9LFxuXG4gICAgZ2V0RmxvYXQyOiBmdW5jdGlvbihzKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKGdldEZsb2F0KHMpLDIpO1xuICAgIH0sXG5cbiAgICBvcGVuV2luZG93OiBmdW5jdGlvbihmaWxlLHcsaCxub21lZmluZXN0cmEpXG4gICAge1xuICAgICAgICBpZihub21lZmluZXN0cmE9PW51bGwpIG5vbWVmaW5lc3RyYT1cIl9ibGFua1wiO1xuICAgICAgICBsZXQgbD0oc2NyZWVuLndpZHRoLXcpLzI7XG4gICAgICAgIGxldCB0PShzY3JlZW4uaGVpZ2h0LWgpLzItMTAwO1xuICAgICAgICB3aW5kb3cub3BlbihmaWxlLG5vbWVmaW5lc3RyYSxcImZ1bGxzY3JlZW49eWVzLHRvb2xiYXI9bm8sbWVudWJhcj1ubyxzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzLHN0YXR1cz1ubyxsb2NhdGlvbj1ubyxkaXJlY3Rvcmllcz1ubyxjb3B5aGlzdG9yeT1ubyxoZWlnaHQ9XCIraCtcIix3aWR0aD1cIit3K1wiLGxlZnQ9XCIrbCtcIix0b3A9XCIrdCk7XG4gICAgfSxcblxuICAgIGNoZWNrS2V5OiBmdW5jdGlvbihlLGNoYXJzKVxuICAgIHtcbiAgICAgICAgdmFyIGtleW51bT1lLmtleUNvZGU7XG4gICAgICAgIGlmKGUud2hpY2gpXG4gICAgICAgICAgICBrZXludW09ZS53aGljaDtcblxuICAgICAgICB2YXIgaXNfa2V5ZnVuY3Rpb249ZmFsc2U7XG4gICAgICAgIGlmKGtleW51bSBpbiBbOCwgMzcsIDM5LCA5LCAzNiwgMzUsIDQ2XSlcbiAgICAgICAgICAgIGlzX2tleWZ1bmN0aW9uPXRydWU7XG5cbiAgICAgICAgdmFyIGtleWNoYXI9U3RyaW5nLmZyb21DaGFyQ29kZShrZXludW0pO1xuXG4gICAgICAgIGlmKCBrZXljaGFyID09PSAnLicgKSBpc19rZXlmdW5jdGlvbj1mYWxzZTtcbiAgICAgICAgdmFyIGNoZWNrPWZhbHNlO1xuICAgICAgICBmb3IodmFyIGk9MDtpPGNoYXJzLmxlbmd0aDtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGNoYXJzW2ldID09PSBrZXljaGFyKSB7XG4gICAgICAgICAgICAgICAgY2hlY2s9dHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiggaXNfa2V5ZnVuY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0sXG5cbiAgICBudW1iZXJfZm9ybWF0OiBmdW5jdGlvbihhLCBiLCBjLCBkKSB7XG4gICAgICAgIGEgPSBNYXRoLnJvdW5kKGEgKiBNYXRoLnBvdygxMCwgYikpIC8gTWF0aC5wb3coMTAsIGIpO1xuICAgICAgICBlID0gYSArICcnO1xuICAgICAgICBmID0gZS5zcGxpdCgnLicpO1xuICAgICAgICBpZighZlswXSkgZlswXSA9ICcwJztcbiAgICAgICAgaWYoIWZbMV0pIGZbMV0gPSAnJztcbiAgICAgICAgaWYoZlsxXS5sZW5ndGggPCBiKXtcbiAgICAgICAgICAgIGcgPSBmWzFdO1xuICAgICAgICAgICAgZm9yKGkgPSBmWzFdLmxlbmd0aCArIDE7IGkgPD0gYjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZyArPSAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmWzFdID0gZztcbiAgICAgICAgfVxuICAgICAgICBpZihkICE9ICcnICYmIGZbMF0ubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgaCA9IGZbMF07XG4gICAgICAgICAgICBmWzBdID0gJyc7XG4gICAgICAgICAgICBmb3IoaiA9IDM7IGogPCBoLmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgICAgICAgaSA9IGguc2xpY2UoaC5sZW5ndGggLSBqLCBoLmxlbmd0aCAtIGogKyAzKTtcbiAgICAgICAgICAgICAgICBmWzBdID0gZCArIGkgKyBmWzBdICsgJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqID0gaC5zdWJzdHIoMCwgKGgubGVuZ3RoICUgMyA9PSAwKSA/IDMgOiAoaC5sZW5ndGggJSAzKSk7XG4gICAgICAgICAgICBmWzBdID0gaiArIGZbMF07XG4gICAgICAgIH1cbiAgICAgICAgYyA9IChiIDw9IDApID8gJyc6IGM7XG4gICAgICAgIHJldHVybiBmWzBdICsgYyArIGZbMV07XG4gICAgfSxcblxuICAgIHRvRXVybzogZnVuY3Rpb24obixkZWNpbWFscyxzZV96ZXJvX3N0cmluZ2FfdnVvdGEpXG4gICAge1xuICAgICAgICBpZihzZV96ZXJvX3N0cmluZ2FfdnVvdGE9PW51bGwpIHNlX3plcm9fc3RyaW5nYV92dW90YT1mYWxzZTtcbiAgICAgICAgbj1nZXRGbG9hdDIobik7XG4gICAgICAgIHZhciBDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1I9JChcIiNDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1JcIikudmFsKCk7XG4gICAgICAgIHZhciBDVVJSRU5DWV9fVEhPVVNBTkRTX1NFUEFSQVRPUj0kKFwiI0NVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICBpZighZGVjaW1hbHMpIGRlY2ltYWxzPTI7XG4gICAgICAgIHZhciBzaWduPShuPDAgPyBcIi0gXCIgOiBcIlwiKTtcbiAgICAgICAgdmFyIHM9bnVtYmVyX2Zvcm1hdChNYXRoLmFicyhuKSxkZWNpbWFscyxDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1IsQ1VSUkVOQ1lfX1RIT1VTQU5EU19TRVBBUkFUT1IpO1xuXG4gICAgICAgIGlmKHNlX3plcm9fc3RyaW5nYV92dW90YSAmJiBwYXJzZUZsb2F0KHMpID09PSAwKSBzPVwiXCI7XG5cbiAgICAgICAgcmV0dXJuIHNpZ24gKyBzO1xuICAgIH0sXG5cbiAgICB0cmltOiBmdW5jdGlvbiAoc3RyLCBjaGFycykge1xuICAgICAgICByZXR1cm4gbHRyaW0ocnRyaW0oc3RyLCBjaGFycyksIGNoYXJzKTtcbiAgICB9LFxuXG4gICAgbHRyaW06IGZ1bmN0aW9uKHN0ciwgY2hhcnMpIHtcbiAgICAgICAgY2hhcnMgPSBjaGFycyB8fCBcIlxcXFxzXCI7XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFwiXltcIiArIGNoYXJzICsgXCJdK1wiLCBcImdcIiksIFwiXCIpO1xuICAgIH0sXG5cbiAgICBydHJpbTogZnVuY3Rpb24oc3RyLCBjaGFycykge1xuICAgICAgICBjaGFycyA9IGNoYXJzIHx8IFwiXFxcXHNcIjtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCJbXCIgKyBjaGFycyArIFwiXSskXCIsIFwiZ1wiKSwgXCJcIik7XG4gICAgfSxcblxuICAgIHdhaXRpbmc6IGZ1bmN0aW9uKHZpc2liaWxlKVxuICAgIHtcbiAgICAgICAgd2FpdGluZzIodmlzaWJpbGUpO1xuICAgIH0sXG5cbiAgICB3YWl0aW5nMjogZnVuY3Rpb24odmlzaWJpbGUsdmlld19wcm9ncmVzcylcbiAgICB7XG4gICAgICAgIGlmKHZpc2liaWxlPT1udWxsKSB2aXNpYmlsZT10cnVlO1xuICAgICAgICBpZih2aWV3X3Byb2dyZXNzPT1udWxsKSB2aWV3X3Byb2dyZXNzPWZhbHNlO1xuICAgICAgICBpZih2aXNpYmlsZSkge1xuICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpdl93YWl0aW5nMlwiKTtcbiAgICAgICAgICAgIGlmKHZpZXdfcHJvZ3Jlc3Mpe1xuICAgICAgICAgICAgICAgICQoXCIjc3Bhbl9wZXJjX2F2YW56YW1lbnRvXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fc3ltYm9sX3BlcmNcIikuc2hvdygpO1xuICAgICAgICAgICAgICAgIGludGVydmFsX2F2YW56YW1lbnRvPXNldEludGVydmFsKFwicnVuQWpheEF2YW56YW1lbnRvKClcIiwgMjAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICQoXCIjZGl2X3dhaXRpbmcyXCIpLmRpYWxvZyhcImNsb3NlXCIpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbF9hdmFuemFtZW50byk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcnVuQWpheEF2YW56YW1lbnRvOiBmdW5jdGlvbigpe1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT049MSZvYmplY3Q9SVdSb290JnRpcG92aWV3PWdldFByb2dyZXNzQmFyXCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihqc29uKXtcbiAgICAgICAgICAgICAgICAkKFwiI3NwYW5fcGVyY19hdmFuemFtZW50b1wiKS5odG1sKCBqc29uLnBlcmNfYXZhbnphbWVudG8gKyBcIiVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzdHJfcGFkOiBmdW5jdGlvbiAoaW5wdXQsIHBhZF9sZW5ndGgsIHBhZF9zdHJpbmcsIHBhZF90eXBlKSB7XG4gICAgICAgIHZhciBoYWxmID0gJycsIHBhZF90b19nbztcbiAgICAgICAgdmFyIHN0cl9wYWRfcmVwZWF0ZXIgPSBmdW5jdGlvbiAocywgbGVuKSB7XG4gICAgICAgICAgICB2YXIgY29sbGVjdCA9ICcnLCBpO1xuXG4gICAgICAgICAgICB3aGlsZSAoY29sbGVjdC5sZW5ndGggPCBsZW4pIHtjb2xsZWN0ICs9IHM7fVxuICAgICAgICAgICAgY29sbGVjdCA9IGNvbGxlY3Quc3Vic3RyKDAsbGVuKTtcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlucHV0ICs9ICcnOyAgICBwYWRfc3RyaW5nID0gKHBhZF9zdHJpbmcgIT0gbnVsbCA/IHBhZF9zdHJpbmcgOiBcIiBcIik7XG5cbiAgICAgICAgaWYgKHBhZF90eXBlICE9ICdTVFJfUEFEX0xFRlQnICYmIHBhZF90eXBlICE9ICdTVFJfUEFEX1JJR0hUJyAmJiBwYWRfdHlwZSAhPSAnU1RSX1BBRF9CT1RIJykgeyBwYWRfdHlwZSA9ICdTVFJfUEFEX1JJR0hUJzsgfVxuICAgICAgICBpZiAoKHBhZF90b19nbyA9IHBhZF9sZW5ndGggLSBpbnB1dC5sZW5ndGgpID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhZF90eXBlID09ICdTVFJfUEFEX0xFRlQnKSB7IGlucHV0ID0gc3RyX3BhZF9yZXBlYXRlcihwYWRfc3RyaW5nLCBwYWRfdG9fZ28pICsgaW5wdXQ7IH0gICAgICAgIGVsc2UgaWYgKHBhZF90eXBlID09ICdTVFJfUEFEX1JJR0hUJykgeyBpbnB1dCA9IGlucHV0ICsgc3RyX3BhZF9yZXBlYXRlcihwYWRfc3RyaW5nLCBwYWRfdG9fZ28pOyB9XG4gICAgICAgICAgICBlbHNlIGlmIChwYWRfdHlwZSA9PSAnU1RSX1BBRF9CT1RIJykge1xuICAgICAgICAgICAgICAgIGhhbGYgPSBzdHJfcGFkX3JlcGVhdGVyKHBhZF9zdHJpbmcsIE1hdGguY2VpbChwYWRfdG9fZ28vMikpO1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaGFsZiArIGlucHV0ICsgaGFsZjtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cigwLCBwYWRfbGVuZ3RoKTsgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfSxcblxuICAgIC8vdmlzdWFsaXp6YSB1biBtZXNzYWdnaW8gbmVsbCBmb290ZXJcbiAgICBmb290ZXJNc2c6IGZ1bmN0aW9uKHRpcG8sdGl0b2xvLHRlc3RvKVxuICAgIHtcbiAgICAgICAgaWYoJChcIiNub19mb290ZXJtc2dcIikudmFsKCkgID09PSAxIHx8ICQoXCIjSVdFbnZcIikudmFsKCkgPT09IFwiYm9vdHN0cmFwXCIpe1xuICAgICAgICAgICAgaWYodGlwbz09MCkgJC5ncm93bC5ub3RpY2Uoe3RpdGxlOiAkKFwiI3RyYW5zYWN0aW9uX3N1Y2Nlc3NcIikudmFsKCksbWVzc2FnZTogJyd9KTtcbiAgICAgICAgICAgIGlmKHRpcG89PTEpICQuZ3Jvd2wuZXJyb3Ioe2R1cmF0aW9uOiAzMDAwMCx0aXRsZTogJChcIiN0cmFuc2FjdGlvbl9lcnJvclwiKS52YWwoKSxtZXNzYWdlOiB0ZXN0b30pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL3RpcG89MCAoeWVzPXZlcmRlKSAxPShubz1yb3NzbykgMj0oYWxlcnQsIGdpYWxsbylcbiAgICAgICAgdmFyICRkaXY9JChcIiNkaXZNc2dcIik7XG4gICAgICAgICRkaXYuZmFkZU91dCgpO1xuICAgICAgICAkZGl2Lmh0bWwodGl0b2xvKTtcbiAgICAgICAgJGRpdi5yZW1vdmVDbGFzcyhcIm1zZ09LM1wiKS5yZW1vdmVDbGFzcyhcIm1zZ0VSUjNcIik7XG4gICAgICAgIGlmKHRpcG89PTApXG4gICAgICAgICAgICAkZGl2LmFkZENsYXNzKFwibXNnT0szXCIpO1xuICAgICAgICBpZih0aXBvPT0xKVxuICAgICAgICAgICAgJGRpdi5hZGRDbGFzcyhcIm1zZ0VSUjNcIik7XG5cbiAgICAgICAgLy90ZXN0bz10ZXN0by5yZXBsYWNlKC88YnI+L2dpLFwiXFxuXCIpO1xuICAgICAgICAkZGl2LnByb3AoXCJtZXNzYWdnaW9cIix0ZXN0byk7XG4gICAgICAgICRkaXYuZmFkZUluKCk7XG5cbiAgICAgICAgc2V0VGltZW91dChcIiQoJyNkaXZNc2cnKS5mYWRlT3V0KCk7XCIsMyo2MDAwMCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGdldF9lYW4xM19jaGVja2RpZ2l0OiBmdW5jdGlvbihzKVxuICAgIHtcbiAgICAgICAgaWYoIHMubGVuZ3RoPjEyICkgcz1zLnN1YnN0cigwLDEyKTtcbiAgICAgICAgcz1wYXJzZUludChzLDEwKTtcbiAgICAgICAgcz1zdHJfcGFkKHMsIDEyLCBcIjBcIiwgXCJTVFJfUEFEX0xFRlRcIik7XG4gICAgICAgIHZhciBldmVuX3N1bSA9IFx0cGFyc2VJbnQocy5zdWJzdHIoMSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMywxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoNSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoNywxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoOSwxKSwxMCkgK1xuICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMTEsMSksMTApO1xuXG4gICAgICAgIHZhciBldmVuX3N1bV90aHJlZSA9IGV2ZW5fc3VtICogMztcbiAgICAgICAgdmFyIG9kZF9zdW0gPSBcdHBhcnNlSW50KHMuc3Vic3RyKDAsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDIsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDQsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDYsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDgsMSksMTApICtcbiAgICAgICAgICAgIHBhcnNlSW50KHMuc3Vic3RyKDEwLDEpLDEwKTtcblxuICAgICAgICB2YXIgdG90YWxfc3VtID0gZXZlbl9zdW1fdGhyZWUgKyBvZGRfc3VtO1xuICAgICAgICB2YXIgbmV4dF90ZW4gPSAoTWF0aC5jZWlsKHRvdGFsX3N1bS8xMCkpKjEwO1xuICAgICAgICB2YXIgY2hlY2tfZGlnaXQgPSBuZXh0X3RlbiAtIHRvdGFsX3N1bTtcblxuICAgICAgICByZXR1cm4gY2hlY2tfZGlnaXQ7XG4gICAgfSxcblxuICAgIC8vdmlzdWFsaXp6YSBvIG5hc2NvbmRlIGxlIGFsdHJlIHZvY2kgbmVsbGEgY29tYm8gZGVsIHNpYW5cbiAgICBzaWFuX2NvbWJvX3N3YXA6IGZ1bmN0aW9uKGlkY29tYm8pXG4gICAge1xuXG4gICAgICAgIGZvcih2YXIgaT0wO2k8JChcIiNjYXVzYWxlc2lhbiBvcHRpb25cIikuc2l6ZSgpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGlkPVwiI3NpYW5fb3B0aW9uX1wiK2k7XG4gICAgICAgICAgICBpZiggJChpZCkucHJvcChcImRpc2FibGVkXCIpIT1cIlwiIClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkKGlkKS5yZW1vdmVBdHRyKFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgJChpZCkuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICQoaWQpLnByb3AoXCJkaXNhYmxlZFwiLFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgJChpZCkuaGlkZSgpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RycG9zOiBmdW5jdGlvbiAoaGF5c3RhY2ssIG5lZWRsZSwgb2Zmc2V0KSB7XG4gICAgICAgIHZhciBpID0gKGhheXN0YWNrICsgJycpLmluZGV4T2YobmVlZGxlLCAob2Zmc2V0IHx8IDApKTtcbiAgICAgICAgcmV0dXJuIGkgPT09IC0xID8gZmFsc2UgOiBpO1xuICAgIH0sXG5cblxuICAgIC8vc2V6aW9uZSBpdmFcbiAgICBpdmFHZXQ6IGZ1bmN0aW9uKGlkaXZhLGNhbXBvKVxuICAgIHtcbiAgICAgICAgaWYoaWRpdmE9PW51bGwpIGlkaXZhPTA7XG4gICAgICAgIGlmKCBpZGl2YT09MCApIHJldHVybjtcblxuICAgICAgICB2YXIgYT0kKFwiI2hpZGRlbl9pZGl2YVwiK2lkaXZhKS5hdHRyKGNhbXBvKTtcbiAgICAgICAgaWYoIGNhbXBvPT1cImFsaXF1b3RhXCIgfHwgY2FtcG89PVwicGVyY2luZGV0cmFpYmlsaXRhXCIgKSBhPWdldEZsb2F0MihhKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSxcblxuICAgIGdldEh0bWxGcm9tQWpheDogZnVuY3Rpb24odXJsLGRpdm5hbWUsaXNfYXN5bmMsc2hvd193YWl0aW5nLGNhbGxiYWNrRnVuY3Rpb24pIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgaWYodHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIil7XG4gICAgICAgICAgICBkaXZuYW1lID0gdXJsW1wiZGl2bmFtZVwiXTtcbiAgICAgICAgICAgIGlzX2FzeW5jID0gdXJsW1wiaXNfYXN5bmNcIl07XG4gICAgICAgICAgICBzaG93X3dhaXRpbmcgPSB1cmxbXCJzaG93X3dhaXRpbmdcIl07XG4gICAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uID0gdXJsW1wib25TdWNjZXNzXCJdO1xuICAgICAgICAgICAgZGF0YSA9IHVybFtcImRhdGFcIl07XG4gICAgICAgICAgICB1cmwgPSB1cmxbXCJ1cmxcIl07XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIGlzX2FzeW5jID09PSBcInVuZGVmaW5lZFwiKSBpc19hc3luYz10cnVlO1xuICAgICAgICBpZih0eXBlb2Ygc2hvd193YWl0aW5nID09PSBcInVuZGVmaW5lZFwiKSBzaG93X3dhaXRpbmc9ZmFsc2U7XG5cblxuICAgICAgICBpZihzaG93X3dhaXRpbmcpIHdhaXRpbmcoKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwrXCImSlNPTlwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBhc3luYzogaXNfYXN5bmMsXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0X3RvX3ByaW50PWpzb24udGV4dDtcbiAgICAgICAgICAgICAgICAkKFwiI1wiK2Rpdm5hbWUpLmh0bWwodGV4dF90b19wcmludCk7XG4gICAgICAgICAgICAgICAgaWYoc2hvd193YWl0aW5nKSB3YWl0aW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICQoXCIjXCIgKyBkaXZuYW1lICsgXCIgLklXRGF0YVRhYmxlc1wiKS5lYWNoKGZ1bmN0aW9uKCl7IElXRGF0YXRhYmxlLmJ1aWxkRGF0YXRhYmxlcyh0aGlzKTsgfSk7XG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgY2FsbGJhY2tGdW5jdGlvbiA9PT0gXCJmdW5jdGlvblwiKSBjYWxsYmFja0Z1bmN0aW9uKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgYnRuTG9hZF9vbmNsaWNrOiBmdW5jdGlvbihhY3Rpb24pXG4gICAge1xuICAgICAgICB2YXIgJGZvcm09JChcIiNmb3JtMVwiKTtcbiAgICAgICAgaWYoYWN0aW9uPT1cIlwiKSAkZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAkZm9ybS5tZXRob2Q9XCJnZXRcIjtcbiAgICAgICAgICAgICRmb3JtLnRhcmdldD1cIl9ibGFua1wiO1xuICAgICAgICAgICAgJGZvcm0uYWN0aW9uPWFjdGlvbjtcbiAgICAgICAgICAgICRmb3JtLnN1Ym1pdCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJ0bkxvYWQyX29uY2xpY2s6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciAkZm9ybT0kKFwiI2Zvcm0xXCIpO1xuICAgICAgICAkZm9ybS5hdHRyKFwiYWN0aW9uXCIsXCJcIik7XG4gICAgICAgICRmb3JtLnJlbW92ZUF0dHIoXCJ0YXJnZXRcIik7XG4gICAgICAgICRmb3JtLnN1Ym1pdCgpO1xuICAgIH0sXG5cbiAgICBQYWdlQ2hhbmdlOiBmdW5jdGlvbihwYWdlbilcbiAgICB7XG4gICAgICAgICQoXCIjbnBhZ2VcIikudmFsKHBhZ2VuKTtcbiAgICAgICAgYnRuTG9hZDJfb25jbGljaygpO1xuICAgIH0sXG5cbiAgICBkZWxldGVPYmplY3Q6IGZ1bmN0aW9uKGlkLGZvcnphX2VsaW1pbmF6aW9uZSxwYXJhbWV0cmlfYWdnaXVudGl2aSxyZWxvYWQsaWRkb2N1bWVudG8sY29kaWNlZG9jdW1lbnRvLHJlbG9hZF90YWJsZXNjcm9sbCl7XG4gICAgICAgIElXQ29uZmlybSgkKFwiI2NvbmZlcm1hX2NhbmNlbGxhemlvbmUxXCIpLnZhbCgpK1wiICgxLzIpXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIElXQ29uZmlybTIoJChcIiNjb25mZXJtYV9jYW5jZWxsYXppb25lMlwiKS52YWwoKStcIiAoMi8yKVwiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgYnRuRGVsMl9vbmNsaWNrKGlkLGZvcnphX2VsaW1pbmF6aW9uZSxwYXJhbWV0cmlfYWdnaXVudGl2aSxyZWxvYWQsaWRkb2N1bWVudG8sY29kaWNlZG9jdW1lbnRvLHJlbG9hZF90YWJsZXNjcm9sbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYnRuRGVsMl9vbmNsaWNrOiBmdW5jdGlvbihpZCxmb3J6YV9lbGltaW5hemlvbmUscGFyYW1ldHJpX2FnZ2l1bnRpdmkscmVsb2FkLGlkZG9jdW1lbnRvLGNvZGljZWRvY3VtZW50byxyZWxvYWRfdGFibGVzY3JvbGwpe1xuICAgICAgICBpZih0eXBlb2YgcGFyYW1ldHJpX2FnZ2l1bnRpdmkgPT09IFwidW5kZWZpbmVkXCIpIHBhcmFtZXRyaV9hZ2dpdW50aXZpID0gXCJcIjtcbiAgICAgICAgaWYodHlwZW9mIHJlbG9hZCA9PT0gXCJ1bmRlZmluZWRcIikgcmVsb2FkID0gZmFsc2U7XG4gICAgICAgIGlmKHR5cGVvZiBpZGRvY3VtZW50byA9PT0gXCJ1bmRlZmluZWRcIikgaWRkb2N1bWVudG8gPSAwO1xuICAgICAgICBpZih0eXBlb2YgY29kaWNlZG9jdW1lbnRvID09PSBcInVuZGVmaW5lZFwiKSBjb2RpY2Vkb2N1bWVudG8gPSBcIlwiO1xuICAgICAgICBpZih0eXBlb2YgcmVsb2FkX3RhYmxlc2Nyb2xsID09PSBcInVuZGVmaW5lZFwiKSByZWxvYWRfdGFibGVzY3JvbGwgPSBcIlwiO1xuXG4gICAgICAgIHZhciBvYmplY3Q9JChcIiNvYmplY3RcIikudmFsKCk7XG4gICAgICAgIHZhciB0aXBvdmlldz0kKFwiI3RpcG92aWV3XCIpLnZhbCgpO1xuICAgICAgICAvL1Byb2NlZG8gYWxsYSBjYW5jZWxsYXppb25lXG4gICAgICAgIHZhciB1cmw9XCJ2aWV3LnBocD9ERUxfRlJPTV9BSkFYJmlkPVwiK2lkK1wiJm9iamVjdD1cIitvYmplY3QrXCImdGlwb3ZpZXc9XCIrdGlwb3ZpZXc7XG4gICAgICAgIGlmKGlkZG9jdW1lbnRvPjAgJiYgY29kaWNlZG9jdW1lbnRvKSB1cmw9XCJ2aWV3LnBocD9ERUxfRlJPTV9BSkFYJmlkZG9jdW1lbnRvPVwiK2lkZG9jdW1lbnRvK1wiJmNvZGljZWRvY3VtZW50bz1cIitjb2RpY2Vkb2N1bWVudG8rXCImdGlwb3ZpZXc9dmlld1wiO1xuICAgICAgICBpZihwYXJhbWV0cmlfYWdnaXVudGl2aSkgdXJsKz1cIiZcIitwYXJhbWV0cmlfYWdnaXVudGl2aTtcbiAgICAgICAgaWYgKGZvcnphX2VsaW1pbmF6aW9uZSkgdXJsKz1cIiZGT1JaQV9FTElNSU5BWklPTkVcIjtcbiAgICAgICAgd2FpdGluZyh0cnVlKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwieG1sXCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHZhciBjaGllZGlfY29uZmVybWEgPSAkKHhtbCkuZmluZChcImNoaWVkaV9jb25mZXJtYVwiKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKHhtbCwgZmFsc2UsIGNoaWVkaV9jb25mZXJtYSk7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9ICQoeG1sKS5maW5kKFwicmV0XCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZihyZXQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihyZWxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlkZG9jdW1lbnRvPjApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWY9XCI/Y29kaWNlZG9jdW1lbnRvPVwiK2NvZGljZWRvY3VtZW50bytcIiZ0aXBvdmlldz12aWV3XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlbG9hZF90YWJsZXNjcm9sbCkgcmVsb2FkVGFibGUocmVsb2FkX3RhYmxlc2Nyb2xsLFwiZm9ybTFcIik7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjdHJfXCIraWQpLmhpZGVSb3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpZWRpX2NvbmZlcm1hKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJV0NvbmZpcm0oY2hpZWRpX2NvbmZlcm1hLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuRGVsMl9vbmNsaWNrKGlkLDEscGFyYW1ldHJpX2FnZ2l1bnRpdmkscmVsb2FkLGlkZG9jdW1lbnRvLGNvZGljZWRvY3VtZW50bywgcmVsb2FkX3RhYmxlc2Nyb2xsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIGJ0blNhdmVfb25jbGljazogZnVuY3Rpb24ocmVsb2FkLHNldF9wcm9ncmVzcyx1cmwsb25fY29tcGxldGUsYmVmb3JlU3VibWl0Q2FsbGJhY2spXG4gICAge1xuICAgICAgICBpZihyZWxvYWQ9PVwiXCIpIHJlbG9hZD1mYWxzZTtcbiAgICAgICAgaWYoc2V0X3Byb2dyZXNzPT1cIlwiKSBzZXRfcHJvZ3Jlc3M9ZmFsc2U7XG5cbiAgICAgICAgdmFyICRidG5zID0gJChcImJ1dHRvblwiKTtcblxuICAgICAgICAkYnRucy5wcm9wKFwiZGlzYWJsZWRcIix0cnVlKTtcbiAgICAgICAgaWYoc2V0X3Byb2dyZXNzKSB3YWl0aW5nMih0cnVlLHRydWUpO1xuICAgICAgICBpZih0eXBlb2YgYmVmb3JlU3VibWl0Q2FsbGJhY2s9PT1cImZ1bmN0aW9uXCIpIGJlZm9yZVN1Ym1pdENhbGxiYWNrKCk7XG4gICAgICAgIHZhciAkT1BfRlJPTV9BSkFYID0gJChcIiNPUF9GUk9NX0FKQVhcIik7XG4gICAgICAgICRPUF9GUk9NX0FKQVgudmFsKDEpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwieG1sXCIsXG4gICAgICAgICAgICBkYXRhOiAgJChcIiNmb3JtMSA6aW5wdXQsIDpjaGVja2JveFwiKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBhamF4U3VibWl0T25TdWNjZXNzRnVuY3Rpb24ocmVzKTtcbiAgICAgICAgICAgICAgICAkT1BfRlJPTV9BSkFYLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gJChyZXMpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBkZWJ1ZyA9ICQocmVzKS5maW5kKFwiZGVidWdcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBpZCA9ICQocmVzKS5maW5kKFwiaWRcIikudGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgaWYocmV0KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNpZFwiKS52YWwoaWQpO1xuICAgICAgICAgICAgICAgICAgICAkYnRucy5mYWRlSW4oKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnI25vX2JlZm9yZXVubG9hZCcpLnZhbCgxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZihyZWxvYWQgJiYgIWRlYnVnKSB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vZXZlbnR1YWxlIFVSTCBkaSBkZXN0aW5hemlvbmUuIEFjY29kbyBsJ2lkIGdlbmVyYXRvIG8gcmVjdXBlcmF0byBkaXJldHRhbWVudGUgcXVpbmRpIGwndXJsIGRldmUgZXNzZXJlIGZvcm1hdHRhdGEgYmVuZSBsYXRvIHBocFxuICAgICAgICAgICAgICAgICAgICBpZih1cmwhPW51bGwgJiYgdXJsIT1cIlwiICYmICFkZWJ1Zykgd2luZG93LmxvY2F0aW9uLmhyZWY9dXJsK2lkO1xuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Ygb25fY29tcGxldGU9PT1cImZ1bmN0aW9uXCIpIG9uX2NvbXBsZXRlKHRydWUscmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIG9uX2NvbXBsZXRlPT09XCJmdW5jdGlvblwiKSBvbl9jb21wbGV0ZShmYWxzZSxyZXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICRidG5zLnByb3AoXCJkaXNhYmxlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZihzZXRfcHJvZ3Jlc3MpIHdhaXRpbmcyKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7XG4gICAgICAgICAgICAgICAgJChcIiNib3hEZWJ1Z1wiKS5odG1sKFwiPHByZT5cIit4aHIuc3RhdHVzICsgXCI8YnI+XCIgKyB0aHJvd25FcnJvciArIFwiPC9wcmU+XCIpO1xuICAgICAgICAgICAgICAgICRidG5zLnByb3AoXCJkaXNhYmxlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGJ0blByaW50X29uY2xpY2s6IGZ1bmN0aW9uKGlzX3NlbnphX3ByZXp6aSlcbiAgICB7XG4gICAgICAgIHZhciBwYWdlX3ByaW50PSQoJyNwYWdlX3ByaW50JykudmFsKCk7XG4gICAgICAgIHZhciBzdHJpbmdoZT1wYWdlX3ByaW50LnNwbGl0KCdpZGRvY3VtZW50bycpO1xuICAgICAgICB2YXIgaWRkb2N1bWVudG89JChcIiNpZGRvY3VtZW50b1wiKS52YWwoKTtcbiAgICAgICAgdmFyIHVybD1zdHJpbmdoZVswXStcIiZpZGRvY3VtZW50bz1cIitpZGRvY3VtZW50bztcbiAgICAgICAgaWYoaXNfc2VuemFfcHJlenppPT0xKVxuICAgICAgICAgICAgdXJsKz1cIiZOT05fU1RBTVBBUkVfUFJFWlpJXCI7XG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgIH0sXG5cbiAgICBidG5QcmludDJfb25jbGljazogZnVuY3Rpb24odGlwb3N0YW1wYSxpZCxjb2RpY2Vkb2N1bWVudG8sb2JqZWN0LHBhcmFtZXRyaSxzZXRmaWxlbmFtZSxpc19leGNlbCxmb3JtLHNldF9wcm9ncmVzcyxvbl9jb21wbGV0ZSl7XG4gICAgICAgIGlmKGZvcm09PW51bGwpIGZvcm09XCJmb3JtMVwiO1xuICAgICAgICBpZihzZXRfcHJvZ3Jlc3M9PW51bGwpIHNldF9wcm9ncmVzcz1mYWxzZTtcbiAgICAgICAgaWYoc2V0ZmlsZW5hbWU9PVwidHJ1ZVwiKXtcbiAgICAgICAgICAgIGlmKGlkPT1cIlwiKSBpZD0wO1xuICAgICAgICAgICAgd2FpdGluZzIodHJ1ZSxzZXRfcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgdmFyICRhbGxhcm1pPSQoXCIjYXZ2aXNpX2Zvb3Rlcl91bDBcIik7XG4gICAgICAgICAgICAkYWxsYXJtaS5oaWRlKCk7XG4gICAgICAgICAgICB2YXIgJGZvcm09JChcIiNcIitmb3JtKTtcbiAgICAgICAgICAgICQoXCIjdGlwb3N0YW1wYVwiKS52YWwodGlwb3N0YW1wYSk7XG4gICAgICAgICAgICB2YXIgYWN0aW9uPVwicHJpbnQucGhwP3NldGZpbGVuYW1lJmlkPVwiK2lkO1xuICAgICAgICAgICAgaWYoaXNfZXhjZWwhPVwiZmFsc2VcIikgYWN0aW9uKz1cIiZFWENFTFwiO1xuICAgICAgICAgICAgJC5wb3N0KGFjdGlvbiwkZm9ybS5zZXJpYWxpemUoKSxmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHZhciByZXQ9JCh4bWwpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBvdXRmaWxlPSQoeG1sKS5maW5kKFwib3V0ZmlsZVwiKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIG9uX2NvbXBsZXRlPT09XCJmdW5jdGlvblwiKSBvbl9jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGlmKHJldD09XCJ0cnVlXCIpe1xuICAgICAgICAgICAgICAgICAgICBpZihpc19leGNlbD09XCJmYWxzZVwiKSB3aW5kb3cub3BlbihvdXRmaWxlLCdfYmxhbmsnKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZj1vdXRmaWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiRXJyb3JlLiBJbXBvc3NpYmlsZSBzdGFtcGFyZVwiKTtcblxuICAgICAgICAgICAgICAgICRhbGxhcm1pLnNob3coKTtcbiAgICAgICAgICAgICAgICB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgdmFyIHVybD1cInByaW50LnBocD90aXBvc3RhbXBhPVwiK3RpcG9zdGFtcGE7XG5cbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBwYXJhbWV0cmkuc3BsaXQoXCIsXCIpO1xuXG4gICAgICAgICAgICAkLmVhY2gocGFyYW1zLGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICB1cmwrPVwiJlwiK3BhcmFtc1tpXTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZihjb2RpY2Vkb2N1bWVudG8hPVwiXCIpIHVybCs9XCImaWRkb2N1bWVudG89XCIraWQrXCImY29kaWNlZG9jdW1lbnRvPVwiK2NvZGljZWRvY3VtZW50bztcbiAgICAgICAgICAgIGVsc2UgdXJsKz1cIiZpZD1cIitpZCtcIiZvYmplY3Q9XCIrb2JqZWN0O1xuXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsXCJfYmxhbmtcIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYnRuUHJpbnRNdWx0aXBsZTogZnVuY3Rpb24oZGF0aSxzZXRfcHJvZ3Jlc3Mpe1xuICAgICAgICBpZihzZXRfcHJvZ3Jlc3MpIHdhaXRpbmcyKHRydWUsdHJ1ZSk7XG4gICAgICAgIGRhdGkub2JqZWN0PSBcIklXUHJpbnRNdWx0aXBsZVwiO1xuICAgICAgICBkYXRpLnRpcG92aWV3ID0gXCJwcmludE11bHRpcGxlXCI7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTlwiLFxuICAgICAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICBkYXRhOiBkYXRpLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgcmV0ID0ganNvbi5yZXQ7XG4gICAgICAgICAgICAgICAgdmFyIG91dGZpbGUgPSBqc29uLm91dGZpbGU7XG4gICAgICAgICAgICAgICAgaWYoc2V0X3Byb2dyZXNzKSB3YWl0aW5nMihmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYocmV0KVxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihcInRtcC9cIitvdXRmaWxlKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoXCIjYWxlcnRfbm9fc3RhbXBhXCIpLnZhbCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYnRuUHJpbnQ6IGZ1bmN0aW9uIChwYXJhbXMsIGlzX2V4Y2VsLCBjYWxsYmFjayl7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwicHJpbnQucGhwP3NldGZpbGVuYW1lXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcInhtbFwiLFxuICAgICAgICAgICAgZGF0YTogcGFyYW1zLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHhtbCl7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soeG1sKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXQgPSAkKHhtbCkuZmluZChcInJldFwiKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYocmV0ICE9PSBcInRydWVcIiApIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJChcIiNhbGVydF9ub19zdGFtcGFcIikudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBvdXRmaWxlID0gJCh4bWwpLmZpbmQoXCJvdXRmaWxlXCIpLnRleHQoKTtcblxuICAgICAgICAgICAgICAgIGlmKCFpc19leGNlbCkgd2luZG93Lm9wZW4ob3V0ZmlsZSk7XG4gICAgICAgICAgICAgICAgZWxzZSB3aW5kb3cubG9jYXRpb24uaHJlZj1vdXRmaWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXROZXdQYXNzd29yZDogZnVuY3Rpb24oaW5wdXRuYW1lLCByZXN0YXBpKXtcbiAgICAgICAgaWYodHlwZW9mIHJlc3RhcGkgPT09IFwidW5kZWZpbmVkXCIpIHJlc3RhcGkgPSBmYWxzZTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1nZXROZXdQYXNzd29yZCZyZXN0YXBpPVwiICsgKHJlc3RhcGkgPyBcIjFcIiA6IFwiMFwiKSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgJChcIiNcIitpbnB1dG5hbWUpLnZhbChqc29uLnBhc3N3b3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGJ0bk5ld19vbmNsaWNrOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgY29kaWNlZG9jdW1lbnRvPSQoXCIjY29kaWNlZG9jdW1lbnRvXCIpLnZhbCgpO1xuICAgICAgICB2YXIgb2JqZWN0PSQoXCIjb2JqZWN0XCIpLnZhbCgpO1xuICAgICAgICB2YXIgdGlwb3ZpZXc9JChcIiN0aXBvdmlld1wiKS52YWwoKTtcbiAgICAgICAgdmFyIHJlbG9hZD1cIj90aXBvdmlldz1cIit0aXBvdmlldztcbiAgICAgICAgaWYodHlwZW9mIGNvZGljZWRvY3VtZW50bz09PVwidW5kZWZpbmVkXCIpIHJlbG9hZCs9XCImb2JqZWN0PVwiK29iamVjdDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZigkKFwiI3BhZ2VfY29udHJvbHNcIikudmFsKCkhPVwiXCIpIHJlbG9hZD1cIj90aXBvdmlldz1jb250cm9sc1wiO1xuICAgICAgICAgICAgcmVsb2FkKz1cIiZjb2RpY2Vkb2N1bWVudG89XCIrY29kaWNlZG9jdW1lbnRvO1xuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbj1yZWxvYWQ7XG4gICAgfSxcblxuICAgIGJ0bk1haWxfb25jbGljazogZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgdmFyIGlkZG9jdW1lbnRvPSQoXCIjaWRkb2N1bWVudG9cIikudmFsRmxvYXQoKTtcbiAgICAgICAgSVdDb25maXJtKCQoXCIjY29uZmVybWFfcHJvc2VndWlcIikudmFsKCksZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQuZ2V0KFwiYWpheC5waHA/dGlwb3ZpZXc9aW52aWFlbWFpbGRvYyZpZGRvY3VtZW50bz1cIitpZGRvY3VtZW50bytcIiZjb2RpY2Vkb2N1bWVudG89XCIrJChcIiNjb2RpY2Vkb2N1bWVudG9cIikudmFsKCksIGZ1bmN0aW9uKHhtbCkge1xuICAgICAgICAgICAgICAgIHZhciByZXQ9JCh4bWwpLmZpbmQoXCJyZXRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmKHJldClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlck1zZygwLFwiRW1haWwgaW52aWF0YVwiLCQoeG1sKS5maW5kKFwibXNnXCIpLnRleHQoKSk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjYnRuRW1haWxcIikuZmFkZU91dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGZvb3Rlck1zZygxLFwiRXJyb3JlIG5lbGwnaW52aW8gZGVsbGEgZW1haWxcIiwkKHhtbCkuZmluZChcIm1zZ1wiKS50ZXh0KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBjaGVja0FsbF9vbmNsaWNrOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgdmFsPVwiXCI7dmFyICRjaGs7XG4gICAgICAgIHZhciBjaGVja2VkPSQoXCIjY2hrXzBcIikuaXMoJzpjaGVja2VkJyk7XG4gICAgICAgIGlmKCAhY2hlY2tlZCApIHZhbD1cImNoZWNrZWRcIjtcbiAgICAgICAgdmFyIG5yb3dzPSQoXCIjaV9jb3VudFwiKS52YWxGbG9hdCgpO1xuICAgICAgICBpZihucm93cz09MCkgbnJvd3M9MTAwMDtcblxuICAgICAgICBmb3IodmFyIGk9MDtpPG5yb3dzO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgJGNoaz0kKFwiI2Noa19cIitpKTtcbiAgICAgICAgICAgIGlmKHZhbD09XCJcIikgJGNoay5wcm9wKFwiY2hlY2tlZFwiLGZhbHNlKTtcbiAgICAgICAgICAgIGVsc2UgJGNoay5wcm9wKFwiY2hlY2tlZFwiLHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgQ3VycmVuY3lPbkJsdXI6IGZ1bmN0aW9uKG9iaklEKXtcbiAgICAgICAgdmFyIENVUlJFTkNZX19TWU1CT0w9JChcIiNDVVJSRU5DWV9fU1lNQk9MXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX0RFQ0lNQUxTPSQoXCIjQ1VSUkVOQ1lfX0RFQ0lNQUxTXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SPSQoXCIjQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SXCIpLnZhbCgpO1xuICAgICAgICB2YXIgQ1VSUkVOQ1lfX1RIT1VTQU5EU19TRVBBUkFUT1I9JChcIiNDVVJSRU5DWV9fVEhPVVNBTkRTX1NFUEFSQVRPUlwiKS52YWwoKTtcbiAgICAgICAgdmFyICRvYmpJRD0kKFwiI1wiK29iaklEKTt2YXIgJG9iaklEX2hpZGRlbj0kKFwiI1wiK29iaklEK1wiX2hpZGRlblwiKTtcblxuICAgICAgICB2YXIgaWZfemVyb19lbXB0eT1mYWxzZTtcbiAgICAgICAgdmFyIG1DVVJSRU5DWV9fU1lNQk9MPUNVUlJFTkNZX19TWU1CT0w7XG4gICAgICAgIHZhciBtQ1VSUkVOQ1lfX0RFQ0lNQUxTPUNVUlJFTkNZX19ERUNJTUFMUztcbiAgICAgICAgLy9vdmVybG9hZCBldmVudHVhbGkgZGVsIHNpbWJvbG8gZSBkZWwgbnVtZXJvIGRpIGRlY2ltYWxpXG4gICAgICAgIGlmKCAkb2JqSUQuYXR0cihcImlmX3plcm9fZW1wdHlcIikhPXVuZGVmaW5lZCApXG4gICAgICAgICAgICBpZl96ZXJvX2VtcHR5PXRydWU7XG4gICAgICAgIGlmKCAkb2JqSUQuYXR0cihcInN5bWJvbFwiKSE9dW5kZWZpbmVkIClcbiAgICAgICAgICAgIG1DVVJSRU5DWV9fU1lNQk9MPSRvYmpJRC5hdHRyKFwic3ltYm9sXCIpO1xuICAgICAgICBpZiggJG9iaklELmF0dHIoXCJkZWNpbWFsc1wiKSE9dW5kZWZpbmVkIClcbiAgICAgICAgICAgIG1DVVJSRU5DWV9fREVDSU1BTFM9JG9iaklELmF0dHIoXCJkZWNpbWFsc1wiKTtcblxuICAgICAgICB2YXIgcz0kb2JqSUQudmFsKCk7XG5cbiAgICAgICAgcz1zLnJlcGxhY2UobUNVUlJFTkNZX19TWU1CT0wsJy4nKTtcbiAgICAgICAgLy9xdWFuZG8gY29tcGlsbyBpbCBjYW1wbyBRVUFMU0lBU0kgU0lBIExBIExJTkdVQSBDT01QSUxPIFVTQU5ETyBJTCAuIENPTUUgU0VQQVJBVE9SRSBERUNJTUFMRVxuICAgICAgICAvL3M9cy5yZXBsYWNlKENVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SLCcnKTtcbiAgICAgICAgLy9zPXMucmVwbGFjZShDVVJSRU5DWV9fREVDSU1BTF9TRVBBUkFUT1IsJy4nKTtcbiAgICAgICAgdmFyIG49Z2V0RmxvYXQoIHMgKTtcbiAgICAgICAgJG9iaklEX2hpZGRlbi52YWwoIG4gKTsvL2FsZXJ0KCRvYmpJRF9oaWRkZW4udmFsKCkpO1xuICAgICAgICB2YXIgc2lnbj0objwwID8gXCItIFwiIDogXCJcIik7XG4gICAgICAgIHZhciBuMj1udW1iZXJfZm9ybWF0KE1hdGguYWJzKG4pLG1DVVJSRU5DWV9fREVDSU1BTFMsQ1VSUkVOQ1lfX0RFQ0lNQUxfU0VQQVJBVE9SLENVUlJFTkNZX19USE9VU0FORFNfU0VQQVJBVE9SKTtcblxuICAgICAgICBpZiggbj09MCAmJiBpZl96ZXJvX2VtcHR5IClcbiAgICAgICAgICAgICRvYmpJRC52YWwoXCJcIik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgICRvYmpJRC52YWwoc2lnbisgbUNVUlJFTkNZX19TWU1CT0wrXCIgXCIrbjIgKTtcblxuICAgICAgICAkb2JqSURfaGlkZGVuLmNoYW5nZSgpO1xuICAgIH0sXG5cbiAgICBDdXJyZW5jeU9uRm9jdXM6IGZ1bmN0aW9uKG9iaklEKXtcbiAgICAgICAgdmFyIG9iaklEX2hpZGRlbj1vYmpJRCtcIl9oaWRkZW5cIjtcbiAgICAgICAgdmFyICRvYmpJRD0kKFwiI1wiK29iaklEKTtcbiAgICAgICAgdmFyIG1DVVJSRU5DWV9fREVDSU1BTFM9JG9iaklELmF0dHIoXCJkZWNpbWFsc1wiKTtcblxuICAgICAgICB2YXIgcz1nZXRGbG9hdCggJChcIiNcIitvYmpJRF9oaWRkZW4pLnZhbCgpICk7XG4gICAgICAgIHZhciBuPW5ldyBOdW1iZXIocyk7XG4gICAgICAgICRvYmpJRC52YWwoIG4udG9GaXhlZChtQ1VSUkVOQ1lfX0RFQ0lNQUxTKSApO1xuICAgICAgICAkb2JqSUQuc2VsZWN0KCk7XG4gICAgICAgICRvYmpJRC5vbmUoJ21vdXNldXAnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBzaG93Q29sdW1uOiBmdW5jdGlvbih0YWJsZSxpbmRleCx2aXNpYmxlKXtcbiAgICAgICAgaWYodmlzaWJsZT09bnVsbCkgdmlzaWJsZT10cnVlO1xuXG4gICAgICAgIHZhciB0PSQoXCIjXCIrdGFibGUpLmRhdGFUYWJsZSgpLmFwaSgpO1xuICAgICAgICB2YXIgYz10LmNvbHVtbihpbmRleCk7XG4gICAgICAgIGMudmlzaWJsZSggdmlzaWJsZSApO1xuXG4gICAgfSxcblxuICAgIGhpZGVDb2x1bW46IGZ1bmN0aW9uKHRhYmxlLGluZGV4KXtcbiAgICAgICAgc2hvd0NvbHVtbih0YWJsZSxpbmRleCxmYWxzZSk7XG4gICAgfSxcblxuICAgIGdldENvZGljaUlWQTogZnVuY3Rpb24oYXR0aXZpdGFwYXNzaXZpdGEsZGF0YV9saW1pdGUpe1xuICAgICAgICB2YXIgdXJsPVwiYWpheC5waHA/b2JqZWN0PUNvZGljZUlWQSZ0aXBvdmlldz1nZXRDb2RpY2kmYXR0aXZpdGFwYXNzaXZpdGE9XCIrYXR0aXZpdGFwYXNzaXZpdGErXCImZGF0YV9saW1pdGU9XCIrZGF0YV9saW1pdGU7XG4gICAgICAgIHZhciBvcHRpb25zPVtdO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJ4bWxcIixcbiAgICAgICAgICAgIGFzeW5jIDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpe1xuICAgICAgICAgICAgICAgIHZhciBjb2RpY2lfY291bnQ9JCh4bWwpLmZpbmQoXCJjb2RpY2lfY291bnRcIikudGV4dCgpO1xuICAgICAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgICAgIGZvcihpPTA7aTxjb2RpY2lfY291bnQ7aSsrKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkPSQoeG1sKS5maW5kKFwiaWRcIitpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbaWRdPSQoeG1sKS5maW5kKFwiZGVzY3JpemlvbmVcIitpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcblxuICAgIHNjb3Jwb3JhSXZhOiBmdW5jdGlvbihpbXBvcnRvLCBpZGl2YSkge1xuICAgICAgICB2YXIgYWxpcXVvdGEgPSBpdmFHZXQoaWRpdmEsIFwiYWxpcXVvdGFcIik7XG4gICAgICAgIHJldHVybiBnZXRGbG9hdDIoaW1wb3J0by8oMSthbGlxdW90YS8xMDApKTtcbiAgICB9LFxuXG4gICAgSVdBdXRvY29tcGxldGU6IGZ1bmN0aW9uKGlkLElXT2JqZWN0LGZpbHRlcnMsZGluYW1pY19zZWFyY2gsaWRkaWFsb2csZXhjZWxQcm9jZXNzLGNzc0NsYXNzLGNhbGxiYWNrKXtcbiAgICAgICAgaWYoaWRkaWFsb2cgPT0gbnVsbCkgaWRkaWFsb2cgPSBcIlwiO1xuICAgICAgICBpZihmaWx0ZXJzID09IG51bGwpIGZpbHRlcnMgPSB7fTtcbiAgICAgICAgaWYoY3NzQ2xhc3MgPT0gbnVsbCkgY3NzQ2xhc3MgPSBcIlwiO1xuXG4gICAgICAgIHZhciAkaWRBdXRvY29tcGxldGUgPSAkKFwiI1wiK2lkKTtcbiAgICAgICAgaWYoY3NzQ2xhc3MpICRpZEF1dG9jb21wbGV0ZSA9ICQoXCIuXCIrY3NzQ2xhc3MpO1xuXG4gICAgICAgIGZpbHRlcnMuY3NzQ2xhc3NlcyA9ICRpZEF1dG9jb21wbGV0ZS5hdHRyKFwiY2xhc3NcIik7XG5cbiAgICAgICAgJGlkQXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZSh7XG4gICAgICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKCByZXF1ZXN0LCByZXNwb25zZSApIHtcbiAgICAgICAgICAgICAgICBhamF4U291cmNlSVdBdXRvY29tcGxldGUoZmlsdGVycywgSVdPYmplY3QsIHJlcXVlc3QsIHJlc3BvbnNlLCBleGNlbFByb2Nlc3MsIGRpbmFtaWNfc2VhcmNoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDIsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG4gICAgICAgICAgICAgICAgaWYoY3NzQ2xhc3MpIGlkID0gZXZlbnQudGFyZ2V0LmlkO1xuICAgICAgICAgICAgICAgIHZhciAkaWQ9JChcIiNcIitpZCtcIl9oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgJGlkLnZhbCh1aS5pdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAkaWQuY2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgaWYoSVdPYmplY3Quc3RhcnRzV2l0aChcIklXQXV0b2NvbXBsZXRlQXJ0aWNvbG9cIikpe1xuXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQXJ0aWNvbG9EZWxGb3JuaXRvcmUodWkuaXRlbS5pZCwgaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKHVpLml0ZW0uZGFfY29uZmVybWFyZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93RGlhbG9nQXJ0aWNvbG9EYUNvbmZlcm1hcmUodWkuaXRlbS5pZCxpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKHVpLml0ZW0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwcGVuZFRvOiBpZGRpYWxvZyA/IFwiI1wiK2lkZGlhbG9nIDogXCJcIlxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgY2hlY2tBcnRpY29sb0RlbEZvcm5pdG9yZTogZnVuY3Rpb24oaWRhcnRpY29sbywgaWRfZmllbGQpe1xuICAgICAgICB2YXIgJGNvZGljZWRvY3VtZW50byA9ICQoXCIjY29kaWNlZG9jdW1lbnRvXCIpO1xuICAgICAgICBpZighJGNvZGljZWRvY3VtZW50by52YWwoKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmKCQoXCIjaXNfcGFzc2l2aXRhXCIpLnZhbEZsb2F0KCkgPT09IDApIHJldHVybjtcbiAgICAgICAgaWYoZ2V0RmxvYXQoJGNvZGljZWRvY3VtZW50by5kYXRhKFwidGlwb19yZWN1cGVyb19wcmV6emlfcGFzc2l2aXRhXCIpKSAhPT0gMiAmJiBnZXRGbG9hdCgkY29kaWNlZG9jdW1lbnRvLmRhdGEoXCJ0aXBvX3JlY3VwZXJvX3ByZXp6aV9wYXNzaXZpdGFcIikpICE9PSA0KSByZXR1cm47XG5cbiAgICAgICAgdmFyIGlkZm9ybml0b3JlID0gJChcIiNhbmFncmFmaWNhX2hpZGRlblwiKS52YWxGbG9hdCgpO1xuICAgICAgICBpZihpZGZvcm5pdG9yZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBvYmplY3QgPSAkKFwiI2NsYXNzX2FydGljb2xvXCIpLnZhbCgpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT05cIixcbiAgICAgICAgICAgIGRhdGE6IHsgb2JqZWN0OiBvYmplY3QsIGlkOiBpZGFydGljb2xvLCBpZGZvcm5pdG9yZTogaWRmb3JuaXRvcmUsIHRpcG92aWV3OiBcImNoZWNrSWZBcnRpY29sb0RlbEZvcm5pdG9yZVwiLCBjb2RpY2VfZG9jdW1lbnRvOiAkY29kaWNlZG9jdW1lbnRvLnZhbCgpIH0sXG4gICAgICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKXtcbiAgICAgICAgICAgICAgICBpZihqc29uLnJldCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgSVdDb25maXJtVHJ1ZUZhbHNlKCRjb2RpY2Vkb2N1bWVudG8uZGF0YShcImFydGljb2xvX25vbl9wcmVzZW50ZV9pbl9mb3JuaXRvcmVcIiksIGZ1bmN0aW9uKHJldCl7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJldCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBpZF9maWVsZCArIFwiX2hpZGRlblwiKS52YWwoMCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBpZF9maWVsZCkudmFsKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgaWRfZmllbGQpLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2dBcnRpY29sb0RhQ29uZmVybWFyZTogZnVuY3Rpb24gKGlkYXJ0aWNvbG8saWRfZmllbGQpIHtcbiAgICAgICAgbGV0IG9iamVjdCA9ICQoXCIjY2xhc3NfYXJ0aWNvbG9cIikudmFsKCk7XG4gICAgICAgIGdldEh0bWxGcm9tQWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTlwiLFxuICAgICAgICAgICAgZGF0YToge29iamVjdDogb2JqZWN0LCBpZF9kYWNvbmZlcm1hcmU6IGlkYXJ0aWNvbG8sIHRpcG92aWV3OiBcImdldERpYWxvZ0FydGljb2xvRGFDb25mZXJtYXJlXCJ9LFxuICAgICAgICAgICAgZGl2bmFtZTogXCJkaWFsb2dfYXJ0aWNvbGlfZGFfY29uZmVybWFyZVwiLFxuICAgICAgICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nU2hvdyhcImRpYWxvZ19hcnRpY29saV9kYV9jb25mZXJtYXJlXCIsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0ICRoaWRkZW4gPSAkKFwiI1wiICsgaWRfZmllbGQgKyBcIl9oaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NlIG5vbiBjb25mZXJtbyBlbGltaW5vIGFydGljb2xvXG4gICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLnZhbCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBpZF9maWVsZCkudmFsKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogXCJKU09OPTEmT1BfRlJPTV9BSkFYPTEmdGlwb3ZpZXc9Y29uZmVybWFBcnRpY29sbyZvYmplY3Q9XCIgKyBvYmplY3QgKyBcIiZcIiArICQoXCIjZGlhbG9nX2FydGljb2xpX2RhX2NvbmZlcm1hcmUgOmlucHV0LDpjaGVja2JveFwiKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKGpzb24sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLnJldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLnZhbChqc29uLmlkYXJ0aWNvbG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGlkZGVuLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoaWRkZW4udmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgaWRfZmllbGQpLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWpheFNvdXJjZUlXQXV0b2NvbXBsZXRlOiBmdW5jdGlvbihmaWx0ZXJzLCBJV09iamVjdCwgcmVxdWVzdCwgcmVzcG9uc2UsIGV4Y2VsUHJvY2VzcywgZGluYW1pY19zZWFyY2gpe1xuICAgICAgICB2YXIgdGVybTtcbiAgICAgICAgaWYgKGV4Y2VsUHJvY2VzcyA9PSBudWxsKSB0ZXJtID0gcmVxdWVzdC50ZXJtO1xuICAgICAgICBlbHNlIHRlcm0gPSByZXF1ZXN0O1xuXG4gICAgICAgICQuZWFjaChmaWx0ZXJzLCBmdW5jdGlvbiAoaywgdikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuc3RhcnRzV2l0aChcIiQoJyNcIikpXG4gICAgICAgICAgICAgICAgZmlsdGVyc1trXSA9IGV2YWwodik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZmlsdGVyc1trXSA9IHY7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJzLmxldHRlcnMgPSB0ZXJtO1xuXG4gICAgICAgICQuZWFjaChkaW5hbWljX3NlYXJjaCwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIkKCcjXCIpKSBmaWx0ZXJzW2tleV0gPSB2YWx1ZSArICcudmFsKCknO1xuICAgICAgICAgICAgZWxzZSBmaWx0ZXJzW2tleV0gPSAkKFwiI1wiICsgdmFsdWUpLnZhbCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiAnYWpheC5waHA/SlNPTiZvYmplY3Q9JytJV09iamVjdCtcIiZ0aXBvdmlldz1nZXRBdXRvY29tcGxldGVcIixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICAgIGRhdGE6IGZpbHRlcnMsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSApIHtcbiAgICAgICAgICAgICAgICBpZihleGNlbFByb2Nlc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSggJC5tYXAoIGRhdGEub2JqZWN0cywgZnVuY3Rpb24oIGl0ZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsvKntcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLCAvL3Zpc3VhbGl6emEgbGEgZm9ybWF0dGF6aW9uZSBkaSBvZ25pIHJpc3VsdGF0bywgZXMuIFtjb2RpY2VdIGRlc2NyaXppb25lIFtjb2RmaXNjYWxlXSBbcGl2YV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSwgLy9kb3BvIGxhIHNlbGV6aW9uZSBkZWwgcmlzdWx0YXRvIGNvbXBpbGEgaWwgY2FtcG8sIGFkIGVzLiBzb2xvIGRlc2NyaXppb25lIG9wcHVyZSBbY29kaWNlXSBkZXNjcml6aW9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLCAvL2wnaWQgZGEgc2FsdmFyZSBuZWwgY2FtcG8gaGlkZGVuIGNoZSByaWNvbm9zY2UgaWwgdmFsb3JlIG5lbCBkYXRhYmFzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yYXc6IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VsUHJvY2VzcygkLm1hcCggZGF0YS5vYmplY3RzLCBmdW5jdGlvbiggaXRlbSApIHsgcmV0dXJuIGl0ZW0ubGFiZWwgfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc2V0S2V5d29yZHNPbkNLRWRpdG9yOiBmdW5jdGlvbihlLGVkaXRvcil7XG4gICAgICAgIGlmKGVkaXRvcj09bnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHZhciBja2VkaXRvcj1DS0VESVRPUi5pbnN0YW5jZXNbZWRpdG9yXTtcbiAgICAgICAgY2tlZGl0b3IuaW5zZXJ0VGV4dCgkKGUudGFyZ2V0KS52YWwoKS50cmltKCkpO1xuICAgICAgICAkKGUudGFyZ2V0KS52YWwoJy0xJyk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIElXQ29uZmlybTogZnVuY3Rpb24odGV4dCxyKXtcbiAgICAgICAgJChcIiNJV0NvbmZpcm1cIikuaHRtbCh0ZXh0KTtcbiAgICAgICAgZGlhbG9nU2hvdyhcIklXQ29uZmlybVwiLGZ1bmN0aW9uKHJlcyl7aWYocmVzKSByKHJlcyk7fSk7XG4gICAgfSxcbiAgICBJV0NvbmZpcm0yOiBmdW5jdGlvbih0ZXh0LHIpe1xuICAgICAgICAkKFwiI0lXQ29uZmlybTJcIikuaHRtbCh0ZXh0KTtcbiAgICAgICAgZGlhbG9nU2hvdyhcIklXQ29uZmlybTJcIixmdW5jdGlvbihyZXMpe2lmKHJlcykgcihyZXMpO30pO1xuICAgIH0sXG4gICAgSVdDb25maXJtMzogZnVuY3Rpb24odGV4dCxyKXtcbiAgICAgICAgJChcIiNJV0NvbmZpcm0zXCIpLmh0bWwodGV4dCk7XG4gICAgICAgIGRpYWxvZ1Nob3coXCJJV0NvbmZpcm0zXCIsZnVuY3Rpb24ocmVzKXtpZihyZXMpIHIocmVzKTt9KTtcbiAgICB9LFxuXG4gICAgSVdDb25maXJtVHJ1ZUZhbHNlOiBmdW5jdGlvbih0ZXh0LHIpe1xuICAgICAgICAkKFwiI0lXQ29uZmlybVwiKS5odG1sKHRleHQpO1xuICAgICAgICBkaWFsb2dTaG93KFwiSVdDb25maXJtXCIsZnVuY3Rpb24ocmVzKXsgcihyZXMpOyB9KTtcbiAgICB9LFxuXG4gICAgcmVsb2FkVGFibGU6IGZ1bmN0aW9uKHRhYmxlX2lkLHJlc2V0cGFnaW5nLGNhbGxiYWNrKXtcbiAgICAgICAgdmFyICR0YWJsZT0kKCcjJyt0YWJsZV9pZCk7XG4gICAgICAgIGlmKHR5cGVvZiByZXNldHBhZ2luZyA9PT0gXCJ1bmRlZmluZWRcIikgcmVzZXRwYWdpbmcgPSB0cnVlO1xuXG4gICAgICAgIHZhciBteUNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIG15Q2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSwzMDApO1xuICAgICAgICB9O1xuICAgICAgICAkdGFibGUuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQobXlDYWxsYmFjayxyZXNldHBhZ2luZyk7XG4gICAgICAgICQoXCIudWktdG9vbHRpcFwiKS5oaWRlKCk7XG4gICAgfSxcblxuICAgIGFqYXhTdWJtaXRPblN1Y2Nlc3NGdW5jdGlvbjogZnVuY3Rpb24ocmVzLCBpc19qc29uLCBoaWRlX29rbWVzc2FnZSl7XG4gICAgICAgIGlmKHR5cGVvZiBpc19qc29uID09PSBcInVuZGVmaW5lZFwiKSBpc19qc29uID0gZmFsc2U7XG4gICAgICAgIGlmKHR5cGVvZiBoaWRlX29rbWVzc2FnZSA9PT0gXCJ1bmRlZmluZWRcIikgaGlkZV9va21lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgdmFyIHJldCwgZGVidWcsIHNkZWJ1ZywgbXNnO1xuICAgICAgICBpZihpc19qc29uKXtcbiAgICAgICAgICAgIHJldCA9IHJlcy5yZXQ7XG4gICAgICAgICAgICBkZWJ1ZyA9IHJlcy5kZWJ1ZztcbiAgICAgICAgICAgIHNkZWJ1ZyA9IHJlcy5zZGVidWc7XG4gICAgICAgICAgICBtc2cgPSByZXMubXNnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICByZXQgPSAkKHJlcykuZmluZChcInJldFwiKS50ZXh0KCk7XG4gICAgICAgICAgICBkZWJ1ZyA9ICQocmVzKS5maW5kKFwiZGVidWdcIikudGV4dCgpO1xuICAgICAgICAgICAgc2RlYnVnID0gJChyZXMpLmZpbmQoXCJzZGVidWdcIikudGV4dCgpO1xuICAgICAgICAgICAgbXNnID0gJChyZXMpLmZpbmQoXCJtc2dcIikudGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJldCl7XG4gICAgICAgICAgICBpZighaGlkZV9va21lc3NhZ2UpIGZvb3Rlck1zZygwLCQoXCIjdHJhbnNhY3Rpb25fc3VjY2Vzc1wiKS52YWwoKSxtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBpZighaGlkZV9va21lc3NhZ2UpIGZvb3Rlck1zZygxLCQoXCIjdHJhbnNhY3Rpb25fZXJyb3JcIikudmFsKCksbXNnKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYoZGVidWcpICQoXCIjYm94RGVidWdcIikuaHRtbChzZGVidWcpO1xuICAgIH0sXG5cbiAgICBzZXREYXRlRnJvbVBlcmlvZG9GaXNjYWxlOiBmdW5jdGlvbihpZF9wZXJpb2RvZmlzY2FsZSxpZF9kYXRhX2RhLGlkX2RhdGFfYSxpc19wZXJpb2RvZ2VzdGlvbmFsZSl7XG4gICAgICAgIHZhciAkcGVyaW9kb2Zpc2NhbGU9JChcIiNcIitpZF9wZXJpb2RvZmlzY2FsZSk7XG4gICAgICAgIHZhciBhcnI9RGF0ZV9fZ2V0SW50ZXJ2YWxsb0Zyb21QZXJpb2RvRmlzY2FsZSgkcGVyaW9kb2Zpc2NhbGUudmFsKCksaXNfcGVyaW9kb2dlc3Rpb25hbGUpO1xuICAgICAgICBpZiggYXJyID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgJChcIiNcIitpZF9kYXRhX2RhKS52YWwoIERhdGVfX2l0KGFyclswXSkgKTtcbiAgICAgICAgJChcIiNcIitpZF9kYXRhX2EpLnZhbCggIERhdGVfX2l0KGFyclsxXSkgKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgY2hhbmdlRGF0ZVRyaW1lc3RyZTogZnVuY3Rpb24odHJpbWVzdHJlX2lkLCBhbm5vX2lkLCBkYXRhX2RhX2lkLCBkYXRhX2FfaWQpe1xuICAgICAgICBpZih0eXBlb2YgdHJpbWVzdHJlX2lkID09PSBcInVuZGVmaW5lZFwiKSB0cmltZXN0cmVfaWQgPSBcInRyaW1lc3RyZVwiO1xuICAgICAgICBpZih0eXBlb2YgYW5ub19pZCA9PT0gXCJ1bmRlZmluZWRcIikgYW5ub19pZCA9IFwiYW5ub1wiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9kYV9pZCA9PT0gXCJ1bmRlZmluZWRcIikgZGF0YV9kYV9pZCA9IFwiZGF0YV9kYVwiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9hX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2FfaWQgPSBcImRhdGFfYVwiO1xuXG4gICAgICAgIHZhciB0cmltZXN0cmU9JCgnIycrdHJpbWVzdHJlX2lkKS52YWxGbG9hdCgpO1xuICAgICAgICB2YXIgYW5ubz0kKCcjJythbm5vX2lkKS52YWwoKTtcblxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDEpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMS8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMy8zMScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDIpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNC8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNi8zMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDMpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wNy8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wOS8zMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0cmltZXN0cmUgPT09IDQpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMC8wMScpKTtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMi8zMScpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VEYXRlQmltZXN0cmU6IGZ1bmN0aW9uKGJpbWVzdHJlX2lkLCBhbm5vX2lkLCBkYXRhX2RhX2lkLCBkYXRhX2FfaWQpe1xuICAgICAgICBpZih0eXBlb2YgYmltZXN0cmVfaWQgPT09IFwidW5kZWZpbmVkXCIpIGJpbWVzdHJlX2lkID0gXCJiaW1lc3RyZVwiO1xuICAgICAgICBpZih0eXBlb2YgYW5ub19pZCA9PT0gXCJ1bmRlZmluZWRcIikgYW5ub19pZCA9IFwiYW5ub1wiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9kYV9pZCA9PT0gXCJ1bmRlZmluZWRcIikgZGF0YV9kYV9pZCA9IFwiZGF0YV9kYVwiO1xuICAgICAgICBpZih0eXBlb2YgZGF0YV9hX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2FfaWQgPSBcImRhdGFfYVwiO1xuXG4gICAgICAgIHZhciBiaW1lc3RyZT0kKCcjJytiaW1lc3RyZV9pZCkudmFsRmxvYXQoKTtcbiAgICAgICAgdmFyIGFubm89JCgnIycrYW5ub19pZCkudmFsKCk7XG5cbiAgICAgICAgdmFyIGQ7XG4gICAgICAgIGlmKGJpbWVzdHJlID09PSAxKXtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfZGFfaWQpLnZhbChEYXRlX19pdChhbm5vKycvMDEvMDEnKSk7XG4gICAgICAgICAgICBkID0gbmV3IERhdGUoYW5ubywyLDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoYmltZXN0cmUgPT09IDIpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wMy8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDQsMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihiaW1lc3RyZSA9PT0gMyl7XG4gICAgICAgICAgICAkKCcjJytkYXRhX2RhX2lkKS52YWwoRGF0ZV9faXQoYW5ubysnLzA1LzAxJykpO1xuICAgICAgICAgICAgZCA9IG5ldyBEYXRlKGFubm8sNiwwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGJpbWVzdHJlID09PSA0KXtcbiAgICAgICAgICAgICQoJyMnK2RhdGFfZGFfaWQpLnZhbChEYXRlX19pdChhbm5vKycvMDcvMDEnKSk7XG4gICAgICAgICAgICBkID0gbmV3IERhdGUoYW5ubyw4LDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoYmltZXN0cmUgPT09IDUpe1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8wOS8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDEwLDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgJCgnIycrZGF0YV9kYV9pZCkudmFsKERhdGVfX2l0KGFubm8rJy8xMC8wMScpKTtcbiAgICAgICAgICAgIGQgPSBuZXcgRGF0ZShhbm5vLDEyLDApO1xuICAgICAgICB9XG4gICAgICAgICQoJyMnK2RhdGFfYV9pZCkudmFsKERhdGVfX2l0KGQuZ2V0RnVsbFllYXIoKStcIi9cIitzdHJfcGFkKChkLmdldE1vbnRoKCkgKyAxKSwyLDAsXCJTVFJfUEFEX0xFRlRcIikrXCIvXCIgKyBzdHJfcGFkKGQuZ2V0RGF0ZSgpLDIsMCxcIlNUUl9QQURfTEVGVFwiKSkpO1xuICAgIH0sXG5cbiAgICBjaGFuZ2VEYXRlTWVzZTogZnVuY3Rpb24obWVzZV9pZCwgYW5ub19pZCwgZGF0YV9kYV9pZCwgZGF0YV9hX2lkKXtcbiAgICAgICAgaWYodHlwZW9mIG1lc2VfaWQgPT09IFwidW5kZWZpbmVkXCIpIG1lc2VfaWQgPSBcIm5tZXNlXCI7XG4gICAgICAgIGlmKHR5cGVvZiBhbm5vX2lkID09PSBcInVuZGVmaW5lZFwiKSBhbm5vX2lkID0gXCJhbm5vXCI7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhX2RhX2lkID09PSBcInVuZGVmaW5lZFwiKSBkYXRhX2RhX2lkID0gXCJkYXRhX2RhXCI7XG4gICAgICAgIGlmKHR5cGVvZiBkYXRhX2FfaWQgPT09IFwidW5kZWZpbmVkXCIpIGRhdGFfYV9pZCA9IFwiZGF0YV9hXCI7XG5cbiAgICAgICAgdmFyIG5tZXNlPSQoJyMnICsgbWVzZV9pZCkudmFsKCk7XG4gICAgICAgIHZhciBhbm5vPSQoJyMnICsgYW5ub19pZCkudmFsRmxvYXQoKTtcbiAgICAgICAgdmFyIGQ9bmV3IERhdGUoYW5ubyxubWVzZSwwKTtcbiAgICAgICAgdmFyIGxhc3RfZGF5PWQuZ2V0RGF0ZSgpO1xuICAgICAgICAkKCcjJyArIGRhdGFfZGFfaWQpLnZhbCgnMDEvJytubWVzZSsnLycrYW5ubyk7XG4gICAgICAgICQoJyMnICsgZGF0YV9hX2lkKS52YWwobGFzdF9kYXkrJy8nK25tZXNlKycvJythbm5vKTtcbiAgICB9LFxuXG4gICAgLy9kYSBtb2RpZmljYXJlIHF1YW5kbyBzaXN0ZW1vIHJlZ2lzdHJvXG4gICAgc2F2ZUZpcm1hRG9jdW1lbnRvOiBmdW5jdGlvbihmb3JtX25hbWUpXG4gICAge1xuICAgICAgICB2YXIgdXJsPVwiYWpheC5waHA/b2JqZWN0PUFuYWdyYWZpY2FPbG1hJnRpcG92aWV3PXNhdmVGaXJtYVwiO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGRhdGE6ICQoXCIjXCIrZm9ybV9uYW1lKS5zZXJpYWxpemUoKSwgLy8gc2VyaWFsaXplcyB0aGUgZm9ybSdzIGVsZW1lbnRzLlxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oeG1sKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFsZXJ0KFwiZG9jXCIpOyAvLyBzaG93IHJlc3BvbnNlIGZyb20gdGhlIHBocCBzY3JpcHQuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBnZXRJbmZvVGFibGU6IGZ1bmN0aW9uKGNsYXNzbmFtZSxpZCxvbnN1Y2Nlc3Mpe1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgICAgICAgIHVybDogXCJhamF4LnBocFwiLFxuICAgICAgICAgICAgZGF0YTogXCJvYmplY3Q9XCIrJChcIiNvYmplY3RcIikudmFsKCkrXCImdGlwb3ZpZXc9Z2V0SW5mb1RhYmxlJmlkPVwiK2lkK1wiJmNsYXNzbmFtZT1cIitjbGFzc25hbWUsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbih4bWwpIHtcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MoeG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIHNldFJlYWRvbmx5OiBmdW5jdGlvbihlbGVtZW50aWQsZXhjbHVkZSl7XG5cbiAgICAgICAgaWYoZWxlbWVudGlkPT1udWxsKSBlbGVtZW50aWQ9XCJmb3JtMVwiO1xuICAgICAgICBpZihleGNsdWRlPT1udWxsKSBleGNsdWRlPVwiXCI7XG5cbiAgICAgICAgJChcIiNcIitlbGVtZW50aWQrXCIgaW5wdXQsdGV4dGFyZWFcIikubm90KCQoZXhjbHVkZSkpLnByb3AoJ3JlYWRvbmx5Jyx0cnVlKS5vZmYoKTtcbiAgICAgICAgJChcIiNcIitlbGVtZW50aWQrXCIgW3R5cGU9J2NoZWNrYm94J10sW3R5cGU9J3JhZGlvJ11cIikubm90KCQoZXhjbHVkZSkpLm9mZigpLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSk7XG4gICAgICAgICQoXCIjXCIrZWxlbWVudGlkK1wiIHNlbGVjdCBvcHRpb246bm90KDpzZWxlY3RlZClcIikubm90KCQoZXhjbHVkZSkpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cbiAgICB9LFxuXG4gICAgc2V0Q29sdW1uOiBmdW5jdGlvbihjb2xuYW1lLGF6aW9uZSlcbiAgICB7XG4gICAgICAgICQoXCJ0ZFtjb2xuYW1lPSdcIitjb2xuYW1lK1wiJ11cIikuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYoYXppb25lPT0nc2hvdycpXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5zaG93KCk7XG4gICAgICAgICAgICBpZihhemlvbmU9PSdoaWRlJylcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgJChcInRoW2NvbG5hbWU9J1wiK2NvbG5hbWUrXCInXVwiKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZihhemlvbmU9PSdzaG93JylcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnNob3coKTtcbiAgICAgICAgICAgIGlmKGF6aW9uZT09J2hpZGUnKVxuICAgICAgICAgICAgICAgICQodGhpcykuaGlkZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmb3J6YVNjcmVlbndpZHRoVXRlbnRlOiBmdW5jdGlvbihpZHV0ZW50ZSl7XG4gICAgICAgIGxldCBzY3JlZW53aWR0aCA9ICQoXCIjc2NyZWVud2lkdGhcIikudmFsRmxvYXQoKTtcbiAgICAgICAgaWYoc2NyZWVud2lkdGggPT09IDApIHNjcmVlbndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/SlNPTiZvYmplY3Q9SVdVc2VyJnRpcG92aWV3PWZvcnphU2NyZWVud2lkdGhVdGVudGUmaWQ9XCIgKyBpZHV0ZW50ZSArIFwiJnNjcmVlbndpZHRoPVwiICsgc2NyZWVud2lkdGgsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICB9LFxuXG4gICAgbG9hZENvbWJvTG90dGk6IGZ1bmN0aW9uKG5vbWVjYW1wbyxzaG93X2NvbWJvLGdpYWNlbnplbmVnYXRpdmUsaWRtYWdhenppbm8scHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbyxpc19hc2luY3Jvbm8sY2xhc3NBcnRpY29sbyxwYXJhbXMpXG4gICAge1xuICAgICAgICBpZihpc19hc2luY3Jvbm89PW51bGwpIGlzX2FzaW5jcm9ubz10cnVlO1xuICAgICAgICBpZihpZG1hZ2F6emlubz09bnVsbCkgaWRtYWdhenppbm89MDtcbiAgICAgICAgaWYoZ2lhY2VuemVuZWdhdGl2ZT09bnVsbCkgZ2lhY2VuemVuZWdhdGl2ZT1cIlwiO1xuICAgICAgICBpZihnaWFjZW56ZW5lZ2F0aXZlPT10cnVlKSBnaWFjZW56ZW5lZ2F0aXZlPVwiJmNvbkdpYWNlbnplTmVnYXRpdmVcIjtcbiAgICAgICAgaWYocHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbz09bnVsbCkgcHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbz1mYWxzZTtcbiAgICAgICAgaWYoY2xhc3NBcnRpY29sbz09bnVsbCkgY2xhc3NBcnRpY29sbz1cIkFydGljb2xvXCI7XG4gICAgICAgIHZhciAkY29tYm89JChcIiNcIitub21lY2FtcG8rXCJfY29tYm9cIik7XG4gICAgICAgIHZhciAkdGV4dD0kKFwiI1wiK25vbWVjYW1wbytcIl90ZXh0XCIpO1xuICAgICAgICB2YXIgaWRhcnRpY29sbz0kY29tYm8uYXR0cihcImlkYXJ0aWNvbG9cIik7XG4gICAgICAgIHZhciBkYXRhPSRjb21iby5hdHRyKFwiZGF0YVwiKTtcbiAgICAgICAgdmFyIG9yYXJpbz0kY29tYm8uYXR0cihcIm9yYXJpb1wiKTtcbiAgICAgICAgaWYob3JhcmlvPT1cIlwiKSBvcmFyaW8gPSAkKFwiI29yYXJpb19tb3ZtYWdhenppbmlcIikudmFsKCk7XG4gICAgICAgIGlmKG9yYXJpbz09XCJcIiB8fCB0eXBlb2Yob3JhcmlvKSA9PT0gXCJ1bmRlZmluZWRcIikgb3JhcmlvPSQoXCIjb3JhYXJyaXZvXCIpLnZhbCgpO1xuICAgICAgICBpZihvcmFyaW89PVwiXCIgfHwgdHlwZW9mKG9yYXJpbykgPT09IFwidW5kZWZpbmVkXCIpIG9yYXJpbz1EYXRlX19PcmFOb3coKTtcblxuICAgICAgICAvL1NlIGNsaWNjbyBkYWwgYm90dG9uZSwgZSBzdG8gdmlzdWFsaXp6YW5kbyBsYSBjb21ibywgbW9zdHJvIGlsIGNhbXBvIHRleHQgY29sIHZhbG9yZSBzZWxlemlvbmF0byBuZWxsYSBjb21ib1xuICAgICAgICAvL1NlIGludmVjZSBwYXNzbyBkYWxsJ29uY2hhbmdlIGFydGljb2xvIG8gY2xpY2NvIHN1bCBib3R0b25lIG1lbnRyZSB2aXN1YWxpenpvIGlsIGNhbXBvIHRleHRcbiAgICAgICAgaWYoc2hvd19jb21ibz09dHJ1ZSB8fCAhJGNvbWJvLmlzKFwiOnZpc2libGVcIikpXG4gICAgICAgIHtcbiAgICAgICAgICAgICR0ZXh0LmhpZGUoKTtcbiAgICAgICAgICAgICR0ZXh0LnByb3AoXCJkaXNhYmxlZFwiLFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAkY29tYm8ucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgJGNvbWJvLmZhZGVJbigpO1xuICAgICAgICAgICAgLy9SZWN1cGVybyBkYSBEQiBsZSBpbmZvcm1hemlvbmkgc3VpIGxvdHRpXG4gICAgICAgICAgICBpZihpZGFydGljb2xvPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJGNvbWJvLnJlbW92ZU9wdGlvbigvLi8pO1xuICAgICAgICAgICAgICAgICRjb21iby5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJ1cmwoJy9pbWFnZXMvbG9hZGluZzEuZ2lmJykgbm8tcmVwZWF0XCIpO1xuICAgICAgICAgICAgICAgICRjb21iby5hdHRyKFwiZGlzYWJsZWRcIixcImRpc2FibGVkXCIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1pbl9kYXRhX3ByaW1vY2FyaWNvPVwiOTk5OS85OS85OVwiO1xuICAgICAgICAgICAgICAgIHZhciBteV9sb3R0bz1cIlwiO1xuICAgICAgICAgICAgICAgIHZhciBkYXRlc2NhZGVuemE9W107XG4gICAgICAgICAgICAgICAgdmFyIGxvdHRpX2Rpc2FibGVkPVtdO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHVybDogIFwiYWpheC5waHA/b2JqZWN0PVwiK2NsYXNzQXJ0aWNvbG8rXCImdGlwb3ZpZXc9Z2V0TG90dGlEYXRvQXJ0aWNvbG8maWQ9XCIraWRhcnRpY29sbytnaWFjZW56ZW5lZ2F0aXZlK1wiJmRhdGE9XCIrRGF0ZV9faXQoZGF0YSkrXCImb3JhcmlvPVwiK29yYXJpbytcIiZpZG1hZ2F6emlubz1cIitpZG1hZ2F6emlubyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwieG1sXCIsXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiBpc19hc2luY3Jvbm8sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24oeG1sKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3R0aV9jb3VudD0kKHhtbCkuZmluZCgnbG90dGlfY291bnQnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDtpPGxvdHRpX2NvdW50O2krKyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvdHRvPSQoeG1sKS5maW5kKCdsb3R0bycraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhc2NhZGVuemE9JCh4bWwpLmZpbmQoJ2RhdGFzY2FkZW56YScraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhX3ByaW1vY2FyaWNvPSQoeG1sKS5maW5kKCdkYXRhX3ByaW1vY2FyaWNvJytpKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvdHRvMj0kKHhtbCkuZmluZCgnbG90dG8yXycraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxPSQoeG1sKS5maW5kKCdnaWFjZW56YScraSkudGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdHRpX2Rpc2FibGVkW2xvdHRvXT1nZXRGbG9hdCgkKHhtbCkuZmluZCgnRElTQUJMRURfJytpKS50ZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcml6aW9uZT1sb3R0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihsb3R0bzIhPVwiXCIpIGRlc2NyaXppb25lID0gZGVzY3JpemlvbmUrXCIgLSBcIitsb3R0bzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpemlvbmUgPSBzdHJfcGFkKGRlc2NyaXppb25lLGRlc2NyaXppb25lLmxlbmd0aCArIDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXppb25lKz1zdHJfcGFkKFwic3RvY2s6IFwiK3EsMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkYXRhc2NhZGVuemEhPVwiXCIgKSBkZXNjcml6aW9uZSs9XCIgICBzY2FkOiBcIitkYXRhc2NhZGVuemE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobG90dG89PScnKXsgbG90dG89XCJfbm9fbG90dG9fXCI7IGRlc2NyaXppb25lPXN0cl9wYWQoXCJOTy1MT1RUT1wiLDE2KStzdHJfcGFkKFwic3RvY2s6IFwiK3EsMTYpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvLmFkZE9wdGlvbihsb3R0byxkZXNjcml6aW9uZS5yZXBsYWNlKC8gL2csXCJcXHUwMEEwXCIpLGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlc2NhZGVuemFbbG90dG9dPWRhdGFzY2FkZW56YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBkYXRhX3ByaW1vY2FyaWNvPG1pbl9kYXRhX3ByaW1vY2FyaWNvIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9kYXRhX3ByaW1vY2FyaWNvPWRhdGFfcHJpbW9jYXJpY287XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15X2xvdHRvPWxvdHRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0ltcG9zdG8gbCdhdHRyaWJ1dG8gZGVsbGUgc2NhZGVuemUgc3VsbGUgb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAkY29tYm8uZmluZChcIm9wdGlvblwiKS5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGtleSBpbiBkYXRlc2NhZGVuemEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdGhpcy5hdHRyKFwidmFsdWVcIik9PWtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuYXR0cihcInNjYWRlbnphXCIsZGF0ZXNjYWRlbnphW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioa2V5IGluIGxvdHRpX2Rpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRoaXMuYXR0cihcInZhbHVlXCIpPT1rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnByb3AoXCJkaXNhYmxlZFwiLGxvdHRpX2Rpc2FibGVkW2tleV09PTE/XCJkaXNhYmxlZFwiOlwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb21iby5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJ1cmwoJyMnKSBuby1yZXBlYXRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29tYm8ucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvLnNlbGVjdE9wdGlvbnMoJHRleHQudmFsKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggcHJvcG9uaV9sb3R0b19waXVfdmVjY2hpbyApICRjb21iby5zZWxlY3RPcHRpb25zKG15X2xvdHRvKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICB2YXIgbG90dG89JGNvbWJvLnZhbCgpO1xuICAgICAgICAgICAgJGNvbWJvLmhpZGUoKTtcbiAgICAgICAgICAgICR0ZXh0LnZhbChsb3R0byk7XG4gICAgICAgICAgICAkY29tYm8ucHJvcChcImRpc2FibGVkXCIsXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICR0ZXh0LnJlbW92ZUF0dHIoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICR0ZXh0LmZhZGVJbigpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHZpZXdEaWFsb2dOZXdQYXNzd29yZDogZnVuY3Rpb24oaWR1c2VyLCBvblN1Y2Nlc3Mpe1xuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP29iamVjdD1JV3VzZXImdGlwb3ZpZXc9Y2hhbmdlUGFzc3dvcmQmaWQ9XCIgKyBpZHVzZXIsXG4gICAgICAgICAgICBkaXZuYW1lOiBcImRpYWxvZ0NoYW5nZVBhc3N3b3JkXCIsXG4gICAgICAgICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgICAgIGRpYWxvZ1Nob3coXCJkaWFsb2dDaGFuZ2VQYXNzd29yZFwiLGZ1bmN0aW9uKHIpe1xuICAgICAgICAgICAgICAgICAgICBpZighcikgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwidmlldy5waHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6XCJwb3N0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBcIk9QX0ZST01fQUpBWD0xJkpTT049MSZ0aXBvdmlldz1jaGFuZ2VQYXNzd29yZCZvYmplY3Q9SVdVc2VyJmlkPVwiICsgaWR1c2VyICsgXCImXCIgKyAkKFwiI2RpYWxvZ0NoYW5nZVBhc3N3b3JkIDppbnB1dCwgOmNoZWNrYm94XCIpLnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheFN1Ym1pdE9uU3VjY2Vzc0Z1bmN0aW9uKGpzb24sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBvblN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikgb25TdWNjZXNzKHJldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHBlcmlvZG9maXNjYWxlXG4gICAgICogQHBhcmFtIGlzX3BlcmlvZG9nZXN0aW9uYWxlXG4gICAgICogQHJldHVybnMge251bGx8c3RyaW5nW119XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgRGF0ZV9fZ2V0SW50ZXJ2YWxsb0Zyb21QZXJpb2RvRmlzY2FsZTogZnVuY3Rpb24ocGVyaW9kb2Zpc2NhbGUsIGlzX3BlcmlvZG9nZXN0aW9uYWxlKVxuICAgIHtcbiAgICAgICAgaWYoIXBlcmlvZG9maXNjYWxlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICB2YXIgZGF0YV9kYSA9ICQoXCIjZGF0YV9kYV9maXNjXCIpLnZhbCgpO1xuICAgICAgICB2YXIgZGF0YV9hID0gJChcIiNkYXRhX2FfZmlzY1wiKS52YWwoKTtcblxuICAgICAgICBpZihnZXRGbG9hdDIoaXNfcGVyaW9kb2dlc3Rpb25hbGUpID09PSAxKXtcbiAgICAgICAgICAgIGRhdGFfZGEgPSAkKFwiI2RhdGFfZGFfZ2VzdFwiKS52YWwoKTtcbiAgICAgICAgICAgIGRhdGFfYSA9ICQoXCIjZGF0YV9hX2dlc3RcIikudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhX2RhPXBlcmlvZG9maXNjYWxlLnN1YnN0cigwLDQpK2RhdGFfZGEuc3Vic3RyKDQpO1xuICAgICAgICBpZiggcGVyaW9kb2Zpc2NhbGUubGVuZ3RoPjUgKVxuICAgICAgICAgICAgZGF0YV9hPXBlcmlvZG9maXNjYWxlLnN1YnN0cig1KStkYXRhX2Euc3Vic3RyKDQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkYXRhX2E9cGVyaW9kb2Zpc2NhbGUuc3Vic3RyKDApK2RhdGFfYS5zdWJzdHIoNCk7XG5cbiAgICAgICAgcmV0dXJuIFtkYXRhX2RhLGRhdGFfYV07XG4gICAgfSxcblxuICAgIG5vb3BMb2c6IGZ1bmN0aW9uKCkge1xuICAgICAgICAkLmdldChcImluY2x1ZGUvbm9vcC1sb2cucGhwXCIsZnVuY3Rpb24oeG1sKXtcbiAgICAgICAgICAgIC8vbm9vcFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc3dpdGNoX2FzX3VzZXI6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciAkc3dpdGNoID0gJChcIiNzd2l0Y2hfYXNfdXNlclwiKTtcbiAgICAgICAgZGlhbG9nU2hvdyhcImNvbmZpcm1fZGlhbG9nX3N3aXRjaFwiLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZighcmVzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIHZhciB1c2VyID0gJHN3aXRjaC52YWwoKTtcbiAgICAgICAgICAgIHdhaXRpbmcoKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwP0pTT04mb2JqZWN0PUlXVXNlciZ0aXBvdmlldz1zd2l0Y2hBc1VzZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiAncG9zdCcsXG4gICAgICAgICAgICAgICAgZGF0YToge1widXNlclwiOiB1c2VyLFwic3dpdGNoX3B3ZFwiOiAkKFwiI3N3aXRjaF9wYXNzd29yZFwiKS52YWwoKX0sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pe1xuICAgICAgICAgICAgICAgICAgICBpZihqc29uLnJldCkgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJVdGVudGUgaW5lc2lzdGVudGUhXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgc3dpdGNoX3RvX2F6aWVuZGE6IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBjb2RhemllbmRhPSQoXCIjc3dpdGNoX3RvX2F6aWVuZGFcIikudmFsKCk7XG4gICAgICAgIHdhaXRpbmcyKCk7XG4gICAgICAgICQuZ2V0KCBcImFqYXgucGhwP29iamVjdD1JV1VzZXImdGlwb3ZpZXc9c3dpdGNoQXppZW5kYSZjb2RpY2VjbGllbnRlPVwiK2NvZGF6aWVuZGEgLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uPSdob21lLnBocD9pZG1lbnU9MCc7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBlYW5DaGVja0RpZ2l0OiBmdW5jdGlvbihzKXtcbiAgICAgICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgICAgIGZvciAodmFyIGNvdW50ZXIgPSBzLmxlbmd0aC0xOyBjb3VudGVyID49MDsgY291bnRlci0tKXtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHBhcnNlSW50KHMuY2hhckF0KGNvdW50ZXIpKSAqICgxKygyKihjb3VudGVyICUgMikpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDEwIC0gKHJlc3VsdCAlIDEwKSkgJSAxMDtcbiAgICB9LFxuXG4gICAgZ2VuZXJhQmFyY29kZTogZnVuY3Rpb24odmFsdWUsIGVsZW1faWQsIHByZXZpZXdfaWQpe1xuICAgICAgICByZXF1aXJlKFwianNiYXJjb2RlXCIpO1xuICAgICAgICB2YXIgYmNvZGUgPSAoXCIwMDAwMDAwMDAwMDBcIiArIHZhbHVlKS5zbGljZSgtMTIpO1xuICAgICAgICBiY29kZSArPSBlYW5DaGVja0RpZ2l0KGJjb2RlKTtcbiAgICAgICAgSnNCYXJjb2RlKFwiI1wiICsgcHJldmlld19pZCwgYmNvZGUsIHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJFQU4xM1wiLFxuICAgICAgICAgICAgZm9udFNpemU6IDE4LFxuICAgICAgICAgICAgdGV4dE1hcmdpbjogMCxcbiAgICAgICAgICAgIGhlaWdodDogMTIwLFxuICAgICAgICAgICAgd2lkdGg6IDQsXG4gICAgICAgICAgICBmbGF0OiB0cnVlXG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgICQoXCIjXCIgKyBlbGVtX2lkKS52YWwoYmNvZGUpO1xuICAgIH0sXG5cbiAgICBjYWxjb2xhQ29vcmRpbmF0ZTogZnVuY3Rpb24oaW5kaXJpenpvLGZpZWxkX2xhdCxmaWVsZF9sb25nKXtcbiAgICAgICAgdmFyIHVybD1cImFqYXgucGhwP0pTT04mb2JqZWN0PUdvb2dsZU1hcHNPYmplY3QmdGlwb3ZpZXc9Y2FsY29sYUNvb3JkaW5hdGUmaW5kaXJpenpvPVwiK2luZGlyaXp6bztcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbil7XG4gICAgICAgICAgICAgICAgdmFyIGxhdD1qc29uLmxhdDtcbiAgICAgICAgICAgICAgICB2YXIgbG9uZz1qc29uLmxvbmc7XG4gICAgICAgICAgICAgICAgaWYobGF0PT09bnVsbCB8fCBsb25nPT09bnVsbClcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJJbnNlcmlyZSBsJ2luZGlyaXp6byBuZWwgZm9ybWF0byBjb3JyZXR0b1wiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiK2ZpZWxkX2xhdCkudmFsKGxhdCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjXCIrZmllbGRfbG9uZykudmFsKGxvbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGdldEh0bWxEaWFsb2dDaXN0ZXJuZTogZnVuY3Rpb24gKG9wdHMpe1xuICAgICAgICBpZighb3B0cykgb3B0cyA9IHtkaWFsb2c6IFwiZGlhbG9nX2Npc3Rlcm5lXCJ9O1xuICAgICAgICBpZighb3B0cy5kaWFsb2cpIG9wdHMuZGlhbG9nID0gXCJkaWFsb2dfY2lzdGVybmVcIjtcblxuICAgICAgICBjb25zdCAkZGlhbG9nID0gJChcIiNcIiArIG9wdHMuZGlhbG9nKTtcbiAgICAgICAgJGRpYWxvZy5odG1sKFwiPGRpdiBzdHlsZT0nd2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGNlbnRlcjttYXJnaW4tdG9wOiAxNzBweCc+XCIgKyAkKFwiI2Rpdl93YWl0aW5nMlwiKS5odG1sKCkgKyBcIjwvZGl2PlwiKTtcbiAgICAgICAgaWYoIW9wdHMub2JqZWN0KSBvcHRzLm9iamVjdCA9ICRkaWFsb2cuZGF0YShcIm9iamVjdFwiKTtcbiAgICAgICAgb3B0cy50aXBvdmlldyA9IFwiZ2V0SHRtbERpYWxvZ0Npc3Rlcm5lXCI7XG4gICAgICAgIGlmKG9wdHMuZGF0YSkgb3B0cy5kYXRhID0gJChcIiNcIiArIG9wdHMuZGF0YSkudmFsKCk7XG4gICAgICAgIGlmKG9wdHMub3JhcmlvKSBvcHRzLm9yYXJpbyA9ICQoXCIjXCIgKyBvcHRzLm9yYXJpbykudmFsKCk7XG4gICAgICAgIGlmKCFvcHRzLm5hbWVfdGV4dCkgb3B0cy5uYW1lX3RleHQgPSBcImlkY2lzdGVybmFcIjtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBvcHRzLmNhbGxiYWNrO1xuICAgICAgICBvcHRzLmNhbGxiYWNrID0gbnVsbDtcblxuICAgICAgICBnZXRIdG1sRnJvbUFqYXgoe1xuICAgICAgICAgICAgdXJsOiBcImFqYXgucGhwPzFcIixcbiAgICAgICAgICAgIGRpdm5hbWU6IG9wdHMuZGlhbG9nLFxuICAgICAgICAgICAgZGF0YTogb3B0cyxcbiAgICAgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2dTZWxlY3RDaXN0ZXJuZTogZnVuY3Rpb24gKGRpYWxvZywgYWZ0ZXJMb2FkZWQpe1xuICAgICAgICBjb25zdCAkZGlhbG9nID0gJChcIiNcIiArIGRpYWxvZyk7XG4gICAgICAgIGNvbnN0IG5hbWVfdGV4dCA9ICRkaWFsb2cuZGF0YShcIm5hbWVfdGV4dFwiKSA/ICRkaWFsb2cuZGF0YShcIm5hbWVfdGV4dFwiKSA6IFwiaWRjaXN0ZXJuYVwiO1xuICAgICAgICBjb25zdCAkc2VsZWN0Q2lzdGVybmEgPSAkKFwiLnNlbGVjdENpc3Rlcm5hX1wiICsgZGlhbG9nKTtcbiAgICAgICAgJHNlbGVjdENpc3Rlcm5hLm9mZigpO1xuICAgICAgICAkc2VsZWN0Q2lzdGVybmEub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICAgICAgY29uc3QgJGNpc3Rlcm5hX3RleHQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgJGNpc3Rlcm5hX2lkID0gJChcIiNcIiArICRjaXN0ZXJuYV90ZXh0LmF0dHIoXCJpZFwiKS5yZXBsYWNlKFwiX3RleHRfXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBkaWFsb2dTaG93KGRpYWxvZywgZnVuY3Rpb24gKCkge30sIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgY29uc3QgJGNpc3Rlcm5lRWxlbSA9ICQoXCIuY2lzdGVybmFFbGVtXCIpO1xuICAgICAgICAgICAgICAgICRjaXN0ZXJuZUVsZW0ub2ZmKCk7XG4gICAgICAgICAgICAgICAgJGNpc3Rlcm5lRWxlbS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkKHRoaXMpLmRhdGEoXCJpbmRleFwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGhyZWYgPSAkKFwiI1wiICsgbmFtZV90ZXh0ICsgXCJfZGlhbG9nX2Npc3Rlcm5hX2NvZGljZV9cIiArIGluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfdGV4dC52YWwoJGhyZWYuZGF0YShcImRlc2NyaXppb25lX2Npc3Rlcm5hXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5hX2lkLnZhbCgkaHJlZi5kYXRhKFwiY2lzdGVybmFfaWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAkY2lzdGVybmFfaWQuZGF0YShcImRpYWxvZy1pbmRleFwiLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICRkaWFsb2cuZGF0YSgnbG9hZGVkJywgdHJ1ZSk7XG5cblxuICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgZGlhbG9nKS5kaWFsb2coXCJjbG9zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgJGNpc3Rlcm5hX2lkLmNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICQoXCIjZWxlbmNvX2Npc3Rlcm5lX1wiICsgbmFtZV90ZXh0KS5EYXRhVGFibGUoKS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIGlmKGFmdGVyTG9hZGVkICYmIHR5cGVvZiBhZnRlckxvYWRlZCA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgYWZ0ZXJMb2FkZWQoKTtcbiAgICB9LFxuXG4gICAgZ2V0RGlhbG9nU3RhbmRhcmRDaXN0ZXJuZUZyYW50b2lvOiBmdW5jdGlvbiAob3B0cyl7XG4gICAgICAgIGlmKCFvcHRzKSBvcHRzID0ge1xuICAgICAgICAgICAgZGlhbG9nOiBcImRpYWxvZ19jaXN0ZXJuZVwiLFxuICAgICAgICAgICAgaWR0aXBvc2Z1c286IDEsXG4gICAgICAgICAgICBhZnRlckxvYWRlZDogbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmKCFvcHRzLmRpYWxvZykgb3B0cy5kaWFsb2cgPSBcImRpYWxvZ19jaXN0ZXJuZVwiO1xuXG4gICAgICAgIG9wdHMuY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBzaG93RGlhbG9nU2VsZWN0Q2lzdGVybmUob3B0cy5kaWFsb2csIG9wdHMuYWZ0ZXJMb2FkZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldEh0bWxEaWFsb2dDaXN0ZXJuZShvcHRzKTtcblxuICAgIH0sXG5cbiAgICBnZXREaXZEZXR0YWdsaW9EaWNoaWFyYXppb25lKG9wdHMpe1xuICAgICAgICBpZighb3B0cy5vYmplY3QpIG9wdHMub2JqZWN0PSBcIkRpY2hpYXJhemlvbmlJbnRlbnRvXCI7XG4gICAgICAgIG9wdHMudGlwb3ZpZXcgPSBcImdldERpdkRldHRhZ2xpb0RpY2hpYXJhemlvbmVcIjtcbiAgICAgICAgbGV0IGNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgaWYodHlwZW9mIG9wdHMub25TdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrID0gb3B0cy5vblN1Y2Nlc3M7XG4gICAgICAgIG9wdHMub25TdWNjZXNzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGdldEh0bWxGcm9tQWpheCh7XG4gICAgICAgICAgICB1cmw6IFwiYWpheC5waHA/MVwiLFxuICAgICAgICAgICAgZGF0YTogb3B0cyxcbiAgICAgICAgICAgIGRpdm5hbWU6IG9wdHMuZGl2LFxuICAgICAgICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikgY2FsbGJhY2sob3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5qUXVlcnkuZm4uZXhpc3RzID0gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg+MDt9O1xuXG4vL3Nvc3RpdHVpc2NlIGlsIC52YWwoKSBuZWwganF1ZXJ5LCBlIGxlZ2dlIGRpcmV0dGFtZW50ZSBpbCB2YWxvcmUgbnVtZXJpY29cbiQuZm4udmFsRmxvYXQgPSBmdW5jdGlvbigpXG57XG4gICAgcmV0dXJuIGdldEZsb2F0KCAkKHRoaXMpLnZhbCgpICk7XG59O1xuJC5mbi52YWxGbG9hdDIgPSBmdW5jdGlvbigpXG57XG4gICAgcmV0dXJuIGdldEZsb2F0MiggJCh0aGlzKS52YWwoKSApO1xufTtcblxuLy9Gb290ZXIgRGF0YXRhYmxlc1xuJC5mbi5JV0Zvb3RlckRhdGF0YWJsZSA9IGZ1bmN0aW9uKCl7XG4gICAgdHJ5e1xuICAgICAgICB0aGlzLmRhdGF0YWJsZSA9IGV2YWwoXCJkYXRhdGFibGVfXCIgKyB0aGlzLmF0dHIoXCJpZFwiKSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuZGF0YXRhYmxlID0gJChcIiNcIiArIHRoaXMuYXR0cihcImlkXCIpKS5EYXRhVGFibGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEZvb3RlclRleHQgPSBmdW5jdGlvbiAodGV4dCwgY29sLCByb3cpIHtcbiAgICAgICAgaWYoIXJvdykgcm93ID0gMDtcblxuICAgICAgICBpZihyb3cgPT09IDApXG4gICAgICAgICAgICAkKCB0aGlzLmRhdGF0YWJsZS5jb2x1bW4oIGNvbCApLmZvb3RlcigpICkuaHRtbCh0ZXh0KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgJChcInRyOmVxKFwiICsgcm93ICsgXCIpIHRoOmVxKFwiICsgY29sICtcIilcIiwgdGhpcy5kYXRhdGFibGUudGFibGUoKS5mb290ZXIoKSkuaHRtbCh0ZXh0KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG59OyJdLCJzb3VyY2VSb290IjoiIn0=