MediaWiki:Gadget-ShortURL.js:修订间差异

MediaWiki系统消息页面
(Git commit ef0a04a: refactor: 更新小工具逻辑)
(Git commit 315405d: feat: sync upstream with Qiuwen)
第25行: 第25行:


// dist/ShortURL/ShortURL.js
// dist/ShortURL/ShortURL.js
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
function asyncGeneratorStep(n, t, e, r, o, a, c) {
try {
try {
var info = gen[key](arg);
var i = n[a](c), u = i.value;
} catch (n2) {
var value = info.value;
return void e(n2);
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
i.done ? t(u) : Promise.resolve(u).then(r, o);
}
}
function _asyncToGenerator(fn) {
function _asyncToGenerator(n) {
return function() {
return function() {
var self = this, args = arguments;
var t = this, e = arguments;
return new Promise(function(resolve, reject) {
return new Promise(function(r, o) {
var gen = fn.apply(self, args);
var a = n.apply(t, e);
function _next(value) {
function _next(n2) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
asyncGeneratorStep(a, r, o, _next, _throw, "next", n2);
}
}
function _throw(err) {
function _throw(n2) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n2);
}
}
_next(void 0);
_next(void 0);
第54行: 第48行:
};
};
}
}
function _createForOfIteratorHelper(r, e) {
//! src/ShortURL/modules/core.ts
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (!t) {
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
t && (r = t);
var n = 0, F = function() {
};
return { s: F, n: function() {
return n >= r.length ? { done: true } : { done: false, value: r[n++] };
}, e: function(r2) {
throw r2;
}, f: F };
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var o, a = true, u = false;
return { s: function() {
t = t.call(r);
}, n: function() {
var r2 = t.next();
return a = r2.done, r2;
}, e: function(r2) {
u = true, o = r2;
}, f: function() {
try {
a || null == t.return || t.return();
} finally {
if (u) throw o;
}
} };
}
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return _arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
}
}
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
let key = _step.value;
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: () => from[key],
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target,
mod
));
//! src/ShortURL/modules/util/checkRevisionPage.ts
var checkRevisionPage = ($content) => {
return ($content.find("#contentSub #mw-revision-nav").length || $content.find("main#content>.pre-content #mw-revision-nav").length) > 0;
};
//! src/ShortURL/modules/util/getDomains.ts
var getDomains = () => {
const {
wgWikiID
} = mw.config.get();
let domains2 = [];
switch (wgWikiID) {
case "zhqiuwenbaike":
domains2 = ["youshou.wiki", "ysymh.cc"];
break;
}
return domains2;
};
//! src/ShortURL/modules/addLink.tsx
var import_ext_gadget2 = require("ext.gadget.Clipboard");
var import_ext_gadget2 = require("ext.gadget.Clipboard");
var import_ext_gadget3 = __toESM(require("ext.gadget.React"), 1);
var import_ext_gadget4 = require("ext.gadget.Util");
//! src/ShortURL/modules/i18n.ts
//! src/ShortURL/modules/i18n.ts
var import_ext_gadget = require("ext.gadget.i18n");
var import_ext_gadget = require("ext.gadget.i18n");
var getI18nMessages = () => {
var getI18nMessages = () => {
return {
return {
"Network error": (0, import_ext_gadget.localize)({
en: "Network error",
ja: "ネットワークエラー",
"zh-hans": "网络异常",
"zh-hant": "網路異常"
}),
"Short URL": (0, import_ext_gadget.localize)({
"Short URL": (0, import_ext_gadget.localize)({
en: "Short URL",
en: "Short URL",
第81行: 第179行:
return i18nMessages[key] || key;
return i18nMessages[key] || key;
};
};
//! src/ShortURL/modules/core.ts
//! src/ShortURL/modules/addLink.tsx
var import_ext_gadget3 = require("ext.gadget.Util");
var import_ext_gadget5 = require("ext.gadget.Tippy");
var {
var import_ext_gadget4 = require("ext.gadget.Tippy");
skin
} = mw.config.get();
var domains = getDomains();
var clipboardInstance;
var clipboardInstance;
var headerLinkEventListener = {
var doIns = (link) => {
remove: () => {
}
};
var portletLinkEventListener = {
remove: () => {
}
};
var addLink = (link) => {
var _clipboardInstance;
var _clipboardInstance;
const portletId = document.querySelector("#p-cactions") ? "p-cactions" : "p-tb";
let portletLink = document.querySelector("#t-shortlink");
if (!portletLink) {
let element = document.querySelector("#t-shortlink");
const portletId = document.querySelector("#p-cactions") ? "p-cactions" : "p-tb";
if (!element) {
element = mw.util.addPortletLink(portletId, "#", getMessage("Short URL"), "t-shortlink", getMessage("Show short URL"));
portletLink = mw.util.addPortletLink(portletId, "#", getMessage("Short URL"), "t-shortlink", getMessage("Show short URL"));
}
}
if (element) {
if (portletLink) {
var _element$firstElement;
var _portletLink$firstEle;
const portletLinkClickListener = (event) => {
((_element$firstElement = element.firstElementChild) !== null && _element$firstElement !== void 0 ? _element$firstElement : element).onclick = (event) => {
event.preventDefault();
event.preventDefault();
const $element = $("<div>");
const $element = $("<div>");
var _iterator2 = _createForOfIteratorHelper(domains), _step2;
for (var _i = 0, _arr = ["youshou.wiki", "ysymh.cc"]; _i < _arr.length; _i++) {
try {
const domain = _arr[_i];
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
$element.append(
const domain = _step2.value;
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
new mw.widgets.CopyTextLayout({
$element.append(
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-explicit-any
align: "top",
copyText: "https://".concat(domain).concat(link)
new mw.widgets.CopyTextLayout({
}).$element
align: "top",
copyText: "https://".concat(domain).concat(link)
);
}).$element
);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
void OO.ui.alert($element, {
void OO.ui.alert($element, {
title: getMessage("Short URL copied to clipboard"),
size: "medium",
size: "medium"
title: getMessage("Short URL copied to clipboard")
});
});
};
};
portletLinkEventListener.remove();
const isCitizen = mw.config.get("skin") === "citizen";
portletLinkEventListener = (0, import_ext_gadget4.addEventListenerWithRemover)({
if (isCitizen) {
target: (_portletLink$firstEle = portletLink.firstElementChild) !== null && _portletLink$firstEle !== void 0 ? _portletLink$firstEle : portletLink,
$(element).find("a").prepend('<span class="citizen-ui-icon mw-ui-icon-wikimedia-shortlink"></span>');
type: "click",
listener: portletLinkClickListener
});
const isCitizen = skin === "citizen";
if (isCitizen && !$(portletLink).find(".mw-ui-icon-wikimedia-shortlink").length) {
$(portletLink).find("a").prepend(/* @__PURE__ */ import_ext_gadget3.default.createElement("span", {
class: "citizen-ui-icon mw-ui-icon-wikimedia-shortlink"
}));
}
}
}
}
let headerElement = document.querySelector("#mw-indicator-shortURL a");
let headerLink = document.querySelector("#mw-indicator-shortURL a");
if (!headerElement) {
if (!headerLink) {
headerLink = /* @__PURE__ */ import_ext_gadget3.default.createElement("a", {
const $headerElement = $("<div>").addClass("mw-indicator").attr("id", "mw-indicator-shortURL").append($("<a>").attr({
href: "#",
"aria-label": getMessage("Short URL"),
"aria-label": getMessage("Short URL")
href: "#"
}, /* @__PURE__ */ import_ext_gadget3.default.createElement("span", {
}).append($("<span>").addClass("gadget-short-link__icon").text(getMessage("Short URL"))));
className: "gadget-short-link__icon"
$headerElement.prependTo(".mw-indicators");
}, getMessage("Short URL")));
headerElement = $headerElement.find("a").get(0);
(0, import_ext_gadget4.tippy)(headerElement, {
(0, import_ext_gadget5.tippy)(headerLink, {
arrow: true,
arrow: true,
content: getMessage("Short URL"),
content: getMessage("Short URL"),
placement: "bottom"
placement: "bottom"
});
});
const $headerElement = $(/* @__PURE__ */ import_ext_gadget3.default.createElement("div", {
className: "mw-indicator",
id: "mw-indicator-shortURL"
}, headerLink));
$headerElement.prependTo(".mw-indicators");
}
}
const shorturl = "https://ysymh.cc".concat(link);
const fullLink = "https://".concat(domains[0]).concat(link);
const $notifyElement = $("<span>").text(getMessage("Short URL copied to clipboard")).append($("<br>"), $("<a>").attr("href", "#").text(shorturl).on("click", (event) => {
const $notifyElement = $(/* @__PURE__ */ import_ext_gadget3.default.createElement("span", null, getMessage("Short URL copied to clipboard"), /* @__PURE__ */ import_ext_gadget3.default.createElement("br", null), /* @__PURE__ */ import_ext_gadget3.default.createElement("a", {
href: "#",
event.preventDefault();
onClick: (event) => {
event.stopPropagation();
event.preventDefault();
}));
event.stopPropagation();
headerElement.onclick = (event) => {
}
}, fullLink)));
const headerLinkClickListener = (event) => {
event.preventDefault();
event.preventDefault();
void mw.notify($notifyElement, {
void mw.notify($notifyElement, {
第143行: 第275行:
});
});
};
};
headerLinkEventListener.remove();
headerLinkEventListener = (0, import_ext_gadget4.addEventListenerWithRemover)({
target: headerLink,
type: "click",
listener: headerLinkClickListener
});
(_clipboardInstance = clipboardInstance) === null || _clipboardInstance === void 0 || _clipboardInstance.destroy();
(_clipboardInstance = clipboardInstance) === null || _clipboardInstance === void 0 || _clipboardInstance.destroy();
clipboardInstance = new import_ext_gadget2.Clipboard(headerElement, {
clipboardInstance = new import_ext_gadget2.Clipboard(headerLink, {
text: () => {
text: () => fullLink
return shorturl;
}
});
});
};
};
//! src/ShortURL/modules/buildLink.ts
var init = /* @__PURE__ */ function() {
var buildLink = (oldId, diffId) => {
var _ref = _asyncToGenerator(function* ({
diffId,
let link = "/d";
oldId,
if (oldId) {
link += "/".concat(oldId);
articleId,
}
revisionId
link += "/".concat(diffId);
}) {
addLink(link);
const $body = $("body");
};
if (diffId) {
//! src/ShortURL/options.json
const buildLink = (_oldId, link = "/d") => {
var version = "2.0";
if (_oldId) {
//! src/ShortURL/modules/api.ts
link += "/".concat(_oldId);
var import_ext_gadget6 = require("ext.gadget.Util");
}
link += "/".concat(diffId);
var api = (0, import_ext_gadget6.initMwApi)("ShortURL/".concat(version));
//! src/ShortURL/modules/util/queryApi.ts
doIns(link);
var import_ext_gadget7 = require("ext.gadget.Toastify");
};
var parameters = {
buildLink(oldId);
action: "compare",
if (oldId) {
format: "json",
const api = (0, import_ext_gadget3.initMwApi)("ShortURL/1.1");
formatversion: "2",
try {
prop: "ids",
const params = {
torelative: "prev"
action: "compare",
};
format: "json",
var queryApi = /* @__PURE__ */ function() {
formatversion: "2",
var _ref = _asyncToGenerator(function* (diffId) {
prop: "ids",
try {
fromrev: diffId,
return yield api.get({
torelative: "prev"
};
...parameters,
const {
fromrev: diffId
compare
});
} = yield api.get(params);
} catch (error) {
console.error("[ShortURL] Ajax error:", error);
if (diffId === mw.config.get("wgDiffNewId") && (compare === null || compare === void 0 ? void 0 : compare.fromrevid) === mw.config.get("wgDiffOldId")) {
(0, import_ext_gadget7.toastify)({
buildLink();
}
text: getMessage("Network error"),
} catch {
close: true,
}
duration: -1
}
}, "error");
return {};
} else if (revisionId && ($body.find("#contentSub").find("#mw-revision-nav").length || $body.find("main#content>.pre-content #mw-revision-nav").length) > 0) {
doIns("/p/".concat(revisionId));
} else if (articleId) {
doIns("/c/".concat(articleId));
}
}
});
});
return function init2(_x) {
return function queryApi2(_x) {
return _ref.apply(this, arguments);
return _ref.apply(this, arguments);
};
};
}();
}();
//! src/ShortURL/ShortURL.ts
//! src/ShortURL/modules/compareWithRemoteDiffId.ts
var compareWithRemoteDiffId = /* @__PURE__ */ function() {
if (mw.config.get("wgNamespaceNumber") >= 0 || !document.querySelectorAll(".noarticletext").length || mw.config.get("wgAction") === "view") {
var _ref2 = _asyncToGenerator(function* (diffId) {
mw.hook("wikipage.content").add(($content) => {
var _response$compare;
if (mw.config.get("wgShortURLInstalled")) {
const response = yield queryApi(diffId);
return;
if (diffId === mw.config.get("wgDiffNewId") && ((_response$compare = response["compare"]) === null || _response$compare === void 0 ? void 0 : _response$compare.fromrevid) === mw.config.get("wgDiffOldId")) {
buildLink(0, diffId);
}
}
});
if ($content.attr("id") !== "mw-content-text") {
return function compareWithRemoteDiffId2(_x2) {
return;
return _ref2.apply(this, arguments);
};
}();
//! src/ShortURL/modules/processId.ts
var processId = (isRevisionPage, {
articleId,
diffId,
oldId,
revisionId
}) => {
if (diffId) {
buildLink(oldId, diffId);
if (oldId) {
void compareWithRemoteDiffId(diffId);
}
}
} else if (revisionId && isRevisionPage) {
void init({
addLink("/p/".concat(revisionId));
diffId: mw.config.get("wgDiffNewId"),
} else if (articleId) {
oldId: mw.config.get("wgDiffOldId"),
addLink("/c/".concat(articleId));
articleId: mw.config.get("wgArticleId"),
}
revisionId: mw.config.get("wgRevisionId")
};
//! src/ShortURL/ShortURL.ts
(function shortURL() {
const {
wgAction,
wgArticleId,
wgNamespaceNumber
} = mw.config.get();
const domains2 = getDomains();
if (!domains2.length || wgNamespaceNumber < 0) {
return;
}
if (wgAction === "view" && wgArticleId) {
mw.hook("wikipage.content").add(($content) => {
if ($content.attr("id") !== "mw-content-text") {
return;
}
const isRevisionPage = checkRevisionPage($content);
processId(isRevisionPage, {
articleId: mw.config.get("wgArticleId"),
diffId: mw.config.get("wgDiffNewId"),
oldId: mw.config.get("wgDiffOldId"),
revisionId: mw.config.get("wgRevisionId")
});
});
});
}
mw.config.set("wgShortURLInstalled", true);
});
})();
}


})();
})();
第220行: 第392行:
/* </nowiki> */
/* </nowiki> */


//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1Nob3J0VVJML21vZHVsZXMvdXRpbC9jaGVja1JldmlzaW9uUGFnZS50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy91dGlsL2dldERvbWFpbnMudHMiLCAic3JjL1Nob3J0VVJML21vZHVsZXMvYWRkTGluay50c3giLCAic3JjL1Nob3J0VVJML21vZHVsZXMvaTE4bi50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9idWlsZExpbmsudHMiLCAic3JjL1Nob3J0VVJML29wdGlvbnMuanNvbiIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9hcGkudHMiLCAic3JjL1Nob3J0VVJML21vZHVsZXMvdXRpbC9xdWVyeUFwaS50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9jb21wYXJlV2l0aFJlbW90ZURpZmZJZC50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9wcm9jZXNzSWQudHMiLCAic3JjL1Nob3J0VVJML1Nob3J0VVJMLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBjaGVja1JldmlzaW9uUGFnZSA9ICgkY29udGVudDogSlF1ZXJ5KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiAoXG5cdFx0KCRjb250ZW50LmZpbmQoJyNjb250ZW50U3ViICNtdy1yZXZpc2lvbi1uYXYnKS5sZW5ndGggfHxcblx0XHRcdCRjb250ZW50LmZpbmQoJ21haW4jY29udGVudD4ucHJlLWNvbnRlbnQgI213LXJldmlzaW9uLW5hdicpLmxlbmd0aCkgPiAwXG5cdCk7XG59O1xuXG5leHBvcnQge2NoZWNrUmV2aXNpb25QYWdlfTtcbiIsICJjb25zdCBnZXREb21haW5zID0gKCk6IHN0cmluZ1tdID0+IHtcblx0Y29uc3Qge3dnV2lraUlEfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0bGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XG5cblx0c3dpdGNoICh3Z1dpa2lJRCkge1xuXHRcdGNhc2UgJ3pocWl1d2VuYmFpa2UnOlxuXHRcdFx0ZG9tYWlucyA9IFsneW91c2hvdS53aWtpJywgJ3lzeW1oLmNjJ107XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBkb21haW5zO1xufTtcblxuZXhwb3J0IHtnZXREb21haW5zfTtcbiIsICJpbXBvcnQge0NsaXBib2FyZH0gZnJvbSAnZXh0LmdhZGdldC5DbGlwYm9hcmQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHthZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXJ9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge2dldERvbWFpbnN9IGZyb20gJy4vdXRpbC9nZXREb21haW5zJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB7dGlwcHl9IGZyb20gJ2V4dC5nYWRnZXQuVGlwcHknO1xuXG5jb25zdCB7c2tpbn0gPSBtdy5jb25maWcuZ2V0KCk7XG5jb25zdCBkb21haW5zID0gZ2V0RG9tYWlucygpO1xuXG5sZXQgY2xpcGJvYXJkSW5zdGFuY2U6IENsaXBib2FyZEpTIHwgdW5kZWZpbmVkO1xubGV0IGhlYWRlckxpbmtFdmVudExpc3RlbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBhZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXI+ID0ge1xuXHRyZW1vdmU6ICgpOiB2b2lkID0+IHt9LFxufTtcbmxldCBwb3J0bGV0TGlua0V2ZW50TGlzdGVuZXI6IFJldHVyblR5cGU8dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3Zlcj4gPSB7XG5cdHJlbW92ZTogKCk6IHZvaWQgPT4ge30sXG59O1xuXG5jb25zdCBhZGRMaW5rID0gKGxpbms6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRsZXQgcG9ydGxldExpbms6IEhUTUxMSUVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Qtc2hvcnRsaW5rJyk7XG5cdGlmICghcG9ydGxldExpbmspIHtcblx0XHRjb25zdCBwb3J0bGV0SWQ6ICdwLWNhY3Rpb25zJyB8ICdwLXRiJyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwLWNhY3Rpb25zJykgPyAncC1jYWN0aW9ucycgOiAncC10Yic7XG5cdFx0cG9ydGxldExpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0cG9ydGxldElkLFxuXHRcdFx0JyMnLFxuXHRcdFx0Z2V0TWVzc2FnZSgnU2hvcnQgVVJMJyksXG5cdFx0XHQndC1zaG9ydGxpbmsnLFxuXHRcdFx0Z2V0TWVzc2FnZSgnU2hvdyBzaG9ydCBVUkwnKVxuXHRcdCk7XG5cdH1cblxuXHRpZiAocG9ydGxldExpbmspIHtcblx0XHRjb25zdCBwb3J0bGV0TGlua0NsaWNrTGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdGNvbnN0ICRlbGVtZW50OiBKUXVlcnkgPSAkKCc8ZGl2PicpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGRvbWFpbiBvZiBkb21haW5zKSB7XG5cdFx0XHRcdCRlbGVtZW50LmFwcGVuZChcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRcdFx0bmV3IChtdyBhcyBhbnkpLndpZGdldHMuQ29weVRleHRMYXlvdXQoe1xuXHRcdFx0XHRcdFx0YWxpZ246ICd0b3AnLFxuXHRcdFx0XHRcdFx0Y29weVRleHQ6IGBodHRwczovLyR7ZG9tYWlufSR7bGlua31gLFxuXHRcdFx0XHRcdH0pLiRlbGVtZW50IGFzIEpRdWVyeVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIE9PLnVpLmFsZXJ0KCRlbGVtZW50LCB7XG5cdFx0XHRcdHNpemU6ICdtZWRpdW0nLFxuXHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgnU2hvcnQgVVJMIGNvcGllZCB0byBjbGlwYm9hcmQnKSxcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRwb3J0bGV0TGlua0V2ZW50TGlzdGVuZXIucmVtb3ZlKCk7XG5cdFx0cG9ydGxldExpbmtFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lcldpdGhSZW1vdmVyKHtcblx0XHRcdHRhcmdldDogKHBvcnRsZXRMaW5rLmZpcnN0RWxlbWVudENoaWxkID8/IHBvcnRsZXRMaW5rKSBhcyBIVE1MRWxlbWVudCxcblx0XHRcdHR5cGU6ICdjbGljaycsXG5cdFx0XHRsaXN0ZW5lcjogcG9ydGxldExpbmtDbGlja0xpc3RlbmVyLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgaXNDaXRpemVuOiBib29sZWFuID0gc2tpbiA9PT0gJ2NpdGl6ZW4nO1xuXHRcdGlmIChpc0NpdGl6ZW4gJiYgISQocG9ydGxldExpbmspLmZpbmQoJy5tdy11aS1pY29uLXdpa2ltZWRpYS1zaG9ydGxpbmsnKS5sZW5ndGgpIHtcblx0XHRcdCQocG9ydGxldExpbmspXG5cdFx0XHRcdC5maW5kKCdhJylcblx0XHRcdFx0LnByZXBlbmQoPHNwYW4gY2xhc3M9XCJjaXRpemVuLXVpLWljb24gbXctdWktaWNvbi13aWtpbWVkaWEtc2hvcnRsaW5rXCIgLz4pO1xuXHRcdH1cblx0fVxuXG5cdGxldCBoZWFkZXJMaW5rOiBIVE1MQW5jaG9yRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctaW5kaWNhdG9yLXNob3J0VVJMIGEnKTtcblx0aWYgKCFoZWFkZXJMaW5rKSB7XG5cdFx0aGVhZGVyTGluayA9IChcblx0XHRcdDxhIGFyaWEtbGFiZWw9e2dldE1lc3NhZ2UoJ1Nob3J0IFVSTCcpfSBocmVmPVwiI1wiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJnYWRnZXQtc2hvcnQtbGlua19faWNvblwiPntnZXRNZXNzYWdlKCdTaG9ydCBVUkwnKX08L3NwYW4+XG5cdFx0XHQ8L2E+XG5cdFx0KSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcblxuXHRcdHRpcHB5KGhlYWRlckxpbmssIHtcblx0XHRcdGFycm93OiB0cnVlLFxuXHRcdFx0Y29udGVudDogZ2V0TWVzc2FnZSgnU2hvcnQgVVJMJyksXG5cdFx0XHRwbGFjZW1lbnQ6ICdib3R0b20nLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgJGhlYWRlckVsZW1lbnQgPSAkKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdy1pbmRpY2F0b3JcIiBpZD1cIm13LWluZGljYXRvci1zaG9ydFVSTFwiPlxuXHRcdFx0XHR7aGVhZGVyTGlua31cblx0XHRcdDwvZGl2PlxuXHRcdCkgYXMgSlF1ZXJ5O1xuXG5cdFx0JGhlYWRlckVsZW1lbnQucHJlcGVuZFRvKCcubXctaW5kaWNhdG9ycycpO1xuXHR9XG5cblx0Y29uc3QgZnVsbExpbms6IHN0cmluZyA9IGBodHRwczovLyR7ZG9tYWluc1swXX0ke2xpbmt9YDtcblxuXHRjb25zdCAkbm90aWZ5RWxlbWVudCA9ICQoXG5cdFx0PHNwYW4+XG5cdFx0XHR7Z2V0TWVzc2FnZSgnU2hvcnQgVVJMIGNvcGllZCB0byBjbGlwYm9hcmQnKX1cblx0XHRcdDxiciAvPlxuXHRcdFx0PGFcblx0XHRcdFx0aHJlZj1cIiNcIlxuXHRcdFx0XHRvbkNsaWNrPXsoZXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7ZnVsbExpbmt9XG5cdFx0XHQ8L2E+XG5cdFx0PC9zcGFuPlxuXHQpIGFzIEpRdWVyeTtcblxuXHRjb25zdCBoZWFkZXJMaW5rQ2xpY2tMaXN0ZW5lciA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR2b2lkIG13Lm5vdGlmeSgkbm90aWZ5RWxlbWVudCwge1xuXHRcdFx0dGFnOiAnc2hvcnRVUkwnLFxuXHRcdFx0dHlwZTogJ2luZm8nLFxuXHRcdH0pO1xuXHR9O1xuXG5cdGhlYWRlckxpbmtFdmVudExpc3RlbmVyLnJlbW92ZSgpO1xuXHRoZWFkZXJMaW5rRXZlbnRMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3Zlcih7XG5cdFx0dGFyZ2V0OiBoZWFkZXJMaW5rLFxuXHRcdHR5cGU6ICdjbGljaycsXG5cdFx0bGlzdGVuZXI6IGhlYWRlckxpbmtDbGlja0xpc3RlbmVyLFxuXHR9KTtcblxuXHRjbGlwYm9hcmRJbnN0YW5jZT8uZGVzdHJveSgpO1xuXHRjbGlwYm9hcmRJbnN0YW5jZSA9IG5ldyBDbGlwYm9hcmQoaGVhZGVyTGluaywge1xuXHRcdHRleHQ6ICgpOiBzdHJpbmcgPT4gZnVsbExpbmssXG5cdH0pO1xufTtcblxuZXhwb3J0IHthZGRMaW5rfTtcbiIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0J05ldHdvcmsgZXJyb3InOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ05ldHdvcmsgZXJyb3InLFxuXHRcdFx0amE6ICfjg43jg4Pjg4jjg6/jg7zjgq/jgqjjg6njg7wnLFxuXHRcdFx0J3poLWhhbnMnOiAn572R57uc5byC5bi4Jyxcblx0XHRcdCd6aC1oYW50JzogJ+e2sui3r+eVsOW4uCcsXG5cdFx0fSksXG5cdFx0J1Nob3J0IFVSTCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnU2hvcnQgVVJMJyxcblx0XHRcdCd6aC1oYW5zJzogJ+efremTvuaOpScsXG5cdFx0XHQnemgtaGFudCc6ICfnn63ntrLlnYAnLFxuXHRcdH0pLFxuXHRcdCdTaG9ydCBVUkwgY29waWVkIHRvIGNsaXBib2FyZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHNob3J0IFVSTCBoYXMgYmVlbiBjb3BpZWQgdG8gY2xpcGJvYXJkOicsXG5cdFx0XHQnemgtaGFucyc6ICflt7LlpI3liLbmnKzpobXnn63pk77mjqXvvJonLFxuXHRcdFx0J3poLWhhbnQnOiAn5bey5b6p6KO95pys6aCB55+t57ay5Z2A77yaJyxcblx0XHR9KSxcblx0XHQnU2hvdyBzaG9ydCBVUkwnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Nob3cgc2hvcnQgVVJMJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aYvuekuuivpemhteefremTvuaOpScsXG5cdFx0XHQnemgtaGFudCc6ICfpoa/npLroqbLpoIHnn63ntrLlnYAnLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQge2FkZExpbmt9IGZyb20gJy4vYWRkTGluayc7XG5cbmNvbnN0IGJ1aWxkTGluayA9IChvbGRJZDogbnVtYmVyIHwgbnVsbCwgZGlmZklkOiBudW1iZXIpOiB2b2lkID0+IHtcblx0bGV0IGxpbms6IHN0cmluZyA9ICcvZCc7XG5cdGlmIChvbGRJZCkge1xuXHRcdGxpbmsgKz0gYC8ke29sZElkfWA7XG5cdH1cblx0bGluayArPSBgLyR7ZGlmZklkfWA7XG5cblx0YWRkTGluayhsaW5rKTtcbn07XG5cbmV4cG9ydCB7YnVpbGRMaW5rfTtcbiIsICJ7XG5cdFwidmVyc2lvblwiOiBcIjIuMFwiXG59XG4iLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKGBTaG9ydFVSTC8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImltcG9ydCB7YXBpfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7dG9hc3RpZnl9IGZyb20gJ2V4dC5nYWRnZXQuVG9hc3RpZnknO1xuXG50eXBlIENvbXBhcmVSZXNwb25zZSA9IHtcblx0Y29tcGFyZT86IHtcblx0XHRmcm9tcmV2aWQ6IG51bWJlcjtcblx0fTtcbn07XG5cbmNvbnN0IHBhcmFtZXRlcnM6IEFwaUNvbXBhcmVQYWdlc1BhcmFtcyA9IHtcblx0YWN0aW9uOiAnY29tcGFyZScsXG5cdGZvcm1hdDogJ2pzb24nLFxuXHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdHByb3A6ICdpZHMnLFxuXHR0b3JlbGF0aXZlOiAncHJldicsXG59O1xuXG5jb25zdCBxdWVyeUFwaSA9IGFzeW5jIChkaWZmSWQ6IG51bWJlcik6IFByb21pc2U8Q29tcGFyZVJlc3BvbnNlPiA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGF3YWl0IGFwaS5nZXQoe1xuXHRcdFx0Li4ucGFyYW1ldGVycyxcblx0XHRcdGZyb21yZXY6IGRpZmZJZCxcblx0XHR9IGFzIHR5cGVvZiBwYXJhbWV0ZXJzKTtcblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdbU2hvcnRVUkxdIEFqYXggZXJyb3I6JywgZXJyb3IpO1xuXHRcdHRvYXN0aWZ5KFxuXHRcdFx0e1xuXHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdOZXR3b3JrIGVycm9yJyksXG5cdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHR9LFxuXHRcdFx0J2Vycm9yJ1xuXHRcdCk7XG5cblx0XHRyZXR1cm4ge307XG5cdH1cbn07XG5cbmV4cG9ydCB7cXVlcnlBcGl9O1xuIiwgImltcG9ydCB7YnVpbGRMaW5rfSBmcm9tICcuL2J1aWxkTGluayc7XG5pbXBvcnQge3F1ZXJ5QXBpfSBmcm9tICcuL3V0aWwvcXVlcnlBcGknO1xuXG5jb25zdCBjb21wYXJlV2l0aFJlbW90ZURpZmZJZCA9IGFzeW5jIChkaWZmSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCByZXNwb25zZTogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBxdWVyeUFwaT4+ID0gYXdhaXQgcXVlcnlBcGkoZGlmZklkKTtcblx0aWYgKGRpZmZJZCA9PT0gbXcuY29uZmlnLmdldCgnd2dEaWZmTmV3SWQnKSAmJiByZXNwb25zZVsnY29tcGFyZSddPy5mcm9tcmV2aWQgPT09IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykpIHtcblx0XHRidWlsZExpbmsoMCwgZGlmZklkKTtcblx0fVxufTtcblxuZXhwb3J0IHtjb21wYXJlV2l0aFJlbW90ZURpZmZJZH07XG4iLCAiaW1wb3J0IHthZGRMaW5rfSBmcm9tICcuL2FkZExpbmsnO1xuaW1wb3J0IHtidWlsZExpbmt9IGZyb20gJy4vYnVpbGRMaW5rJztcbmltcG9ydCB7Y29tcGFyZVdpdGhSZW1vdGVEaWZmSWR9IGZyb20gJy4vY29tcGFyZVdpdGhSZW1vdGVEaWZmSWQnO1xuXG5jb25zdCBwcm9jZXNzSWQgPSAoXG5cdGlzUmV2aXNpb25QYWdlOiBib29sZWFuLFxuXHR7XG5cdFx0YXJ0aWNsZUlkLFxuXHRcdGRpZmZJZCxcblx0XHRvbGRJZCxcblx0XHRyZXZpc2lvbklkLFxuXHR9OiB7XG5cdFx0YXJ0aWNsZUlkOiBudW1iZXI7XG5cdFx0ZGlmZklkOiBudW1iZXIgfCBudWxsO1xuXHRcdG9sZElkOiBudW1iZXIgfCBudWxsO1xuXHRcdHJldmlzaW9uSWQ6IG51bWJlciB8IG51bGw7XG5cdH1cbik6IHZvaWQgPT4ge1xuXHRpZiAoZGlmZklkKSB7XG5cdFx0YnVpbGRMaW5rKG9sZElkLCBkaWZmSWQpO1xuXHRcdGlmIChvbGRJZCkge1xuXHRcdFx0dm9pZCBjb21wYXJlV2l0aFJlbW90ZURpZmZJZChkaWZmSWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChyZXZpc2lvbklkICYmIGlzUmV2aXNpb25QYWdlKSB7XG5cdFx0YWRkTGluayhgL3AvJHtyZXZpc2lvbklkfWApO1xuXHR9IGVsc2UgaWYgKGFydGljbGVJZCkge1xuXHRcdGFkZExpbmsoYC9jLyR7YXJ0aWNsZUlkfWApO1xuXHR9XG59O1xuXG5leHBvcnQge3Byb2Nlc3NJZH07XG4iLCAiaW1wb3J0IHtjaGVja1JldmlzaW9uUGFnZX0gZnJvbSAnLi9tb2R1bGVzL3V0aWwvY2hlY2tSZXZpc2lvblBhZ2UnO1xuaW1wb3J0IHtnZXREb21haW5zfSBmcm9tICcuL21vZHVsZXMvdXRpbC9nZXREb21haW5zJztcbmltcG9ydCB7cHJvY2Vzc0lkfSBmcm9tICcuL21vZHVsZXMvcHJvY2Vzc0lkJztcblxuKGZ1bmN0aW9uIHNob3J0VVJMKCkge1xuXHRjb25zdCB7d2dBY3Rpb24sIHdnQXJ0aWNsZUlkLCB3Z05hbWVzcGFjZU51bWJlcn0gPSBtdy5jb25maWcuZ2V0KCk7XG5cblx0Y29uc3QgZG9tYWlucyA9IGdldERvbWFpbnMoKTtcblxuXHRpZiAoIWRvbWFpbnMubGVuZ3RoIHx8IHdnTmFtZXNwYWNlTnVtYmVyIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh3Z0FjdGlvbiA9PT0gJ3ZpZXcnICYmIHdnQXJ0aWNsZUlkKSB7XG5cdFx0bXcuaG9vaygnd2lraXBhZ2UuY29udGVudCcpLmFkZCgoJGNvbnRlbnQpOiB2b2lkID0+IHtcblx0XHRcdGlmICgkY29udGVudC5hdHRyKCdpZCcpICE9PSAnbXctY29udGVudC10ZXh0Jykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGlzUmV2aXNpb25QYWdlOiBib29sZWFuID0gY2hlY2tSZXZpc2lvblBhZ2UoJGNvbnRlbnQpO1xuXG5cdFx0XHRwcm9jZXNzSWQoaXNSZXZpc2lvblBhZ2UsIHtcblx0XHRcdFx0YXJ0aWNsZUlkOiBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpLFxuXHRcdFx0XHRkaWZmSWQ6IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk5ld0lkJyksXG5cdFx0XHRcdG9sZElkOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpLFxuXHRcdFx0XHRyZXZpc2lvbklkOiBtdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59KSgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBTUEsb0JBQXFCQyxjQUE4QjtBQUN4RCxVQUNFQSxTQUFTQyxLQUFLLDhCQUE4QixFQUFFQyxVQUM5Q0YsU0FBU0MsS0FBSyw0Q0FBNEMsRUFBRUMsVUFBVTtBQUV6RTs7QUNMQSxJQUFNQyxhQUFhQSxNQUFnQjtBQUNsQyxRQUFNO0lBQUNDO0VBQVEsSUFBSUMsR0FBR0MsT0FBT0MsSUFBSTtBQUNqQyxNQUFJQyxXQUFvQixDQUFBO0FBRXhCLFVBQVFKLFVBQUE7SUFDUCxLQUFLO0FBQ0pJLGlCQUFVLENBQUMsZ0JBQWdCLFVBQVU7QUFDckM7RUFDRjtBQUVBLFNBQU9BO0FBQ1I7O0FDWEEsSUFBQUMscUJBQXdCQyxRQUFBLHNCQUFBO0FBQ3hCLElBQUFDLHFCQUFrQkMsUUFBQUYsUUFBQSxrQkFBQSxHQUFBLENBQUE7QUFDbEIsSUFBQUcscUJBQTBDSCxRQUFBLGlCQUFBOztBQ0YxQyxJQUFBSSxvQkFBdUJKLFFBQUEsaUJBQUE7QUFFdkIsSUFBTUssa0JBQWtCQSxNQUFNO0FBQzdCLFNBQU87SUFDTixrQkFBQSxHQUFpQkQsa0JBQUFFLFVBQVM7TUFDekJDLElBQUk7TUFDSkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNELGNBQUEsR0FBYUosa0JBQUFFLFVBQVM7TUFDckJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRCxrQ0FBQSxH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QzRILFlBQVk5SCxHQUFHQyxPQUFPQyxJQUFJLGNBQWM7TUFDekMsQ0FBQztJQUNGLENBQUM7RUFDRjtBQUNELEdBQUc7IiwKICAibmFtZXMiOiBbImNoZWNrUmV2aXNpb25QYWdlIiwgIiRjb250ZW50IiwgImZpbmQiLCAibGVuZ3RoIiwgImdldERvbWFpbnMiLCAid2dXaWtpSUQiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJkb21haW5zMiIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAicmVxdWlyZSIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAiX190b0VTTSIsICJpbXBvcnRfZXh0X2dhZGdldDQiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgImxvY2FsaXplIiwgImVuIiwgImphIiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJpbXBvcnRfZXh0X2dhZGdldDUiLCAic2tpbiIsICJkb21haW5zIiwgImNsaXBib2FyZEluc3RhbmNlIiwgImhlYWRlckxpbmtFdmVudExpc3RlbmVyIiwgInJlbW92ZSIsICJwb3J0bGV0TGlua0V2ZW50TGlzdGVuZXIiLCAiYWRkTGluayIsICJsaW5rIiwgIl9jbGlwYm9hcmRJbnN0YW5jZSIsICJwb3J0bGV0TGluayIsICJkb2N1bWVudCIsICJxdWVyeVNlbGVjdG9yIiwgInBvcnRsZXRJZCIsICJ1dGlsIiwgImFkZFBvcnRsZXRMaW5rIiwgIl9wb3J0bGV0TGluayRmaXJzdEVsZSIsICJwb3J0bGV0TGlua0NsaWNrTGlzdGVuZXIiLCAiZXZlbnQiLCAicHJldmVudERlZmF1bHQiLCAiJGVsZW1lbnQiLCAiJCIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJkb21haW4iLCAidmFsdWUiLCAiYXBwZW5kIiwgIndpZGdldHMiLCAiQ29weVRleHRMYXlvdXQiLCAiYWxpZ24iLCAiY29weVRleHQiLCAiY29uY2F0IiwgImVyciIsICJlIiwgImYiLCAiT08iLCAidWkiLCAiYWxlcnQiLCAic2l6ZSIsICJ0aXRsZSIsICJhZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXIiLCAidGFyZ2V0IiwgImZpcnN0RWxlbWVudENoaWxkIiwgInR5cGUiLCAibGlzdGVuZXIiLCAiaXNDaXRpemVuIiwgInByZXBlbmQiLCAiZGVmYXVsdCIsICJjcmVhdGVFbGVtZW50IiwgImNsYXNzIiwgImhlYWRlckxpbmsiLCAiaHJlZiIsICJjbGFzc05hbWUiLCAidGlwcHkiLCAiYXJyb3ciLCAiY29udGVudCIsICJwbGFjZW1lbnQiLCAiJGhlYWRlckVsZW1lbnQiLCAiaWQiLCAicHJlcGVuZFRvIiwgImZ1bGxMaW5rIiwgIiRub3RpZnlFbGVtZW50IiwgIm9uQ2xpY2siLCAic3RvcFByb3BhZ2F0aW9uIiwgImhlYWRlckxpbmtDbGlja0xpc3RlbmVyIiwgIm5vdGlmeSIsICJ0YWciLCAiZGVzdHJveSIsICJDbGlwYm9hcmQiLCAidGV4dCIsICJidWlsZExpbmsiLCAib2xkSWQiLCAiZGlmZklkIiwgInZlcnNpb24iLCAiaW1wb3J0X2V4dF9nYWRnZXQ2IiwgImFwaSIsICJpbml0TXdBcGkiLCAiaW1wb3J0X2V4dF9nYWRnZXQ3IiwgInBhcmFtZXRlcnMiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgInByb3AiLCAidG9yZWxhdGl2ZSIsICJxdWVyeUFwaSIsICJfcmVmIiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgImZyb21yZXYiLCAiZXJyb3IiLCAiY29uc29sZSIsICJ0b2FzdGlmeSIsICJjbG9zZSIsICJkdXJhdGlvbiIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiY29tcGFyZVdpdGhSZW1vdGVEaWZmSWQiLCAiX3JlZjIiLCAiX3Jlc3BvbnNlJGNvbXBhcmUiLCAicmVzcG9uc2UiLCAiZnJvbXJldmlkIiwgIl94MiIsICJwcm9jZXNzSWQiLCAiaXNSZXZpc2lvblBhZ2UiLCAiYXJ0aWNsZUlkIiwgInJldmlzaW9uSWQiLCAic2hvcnRVUkwiLCAid2dBY3Rpb24iLCAid2dBcnRpY2xlSWQiLCAid2dOYW1lc3BhY2VOdW1iZXIiLCAiaG9vayIsICJhZGQiLCAiYXR0ciJdCn0K
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1Nob3J0VVJML21vZHVsZXMvY29yZS50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9pMThuLnRzIiwgInNyYy9TaG9ydFVSTC9TaG9ydFVSTC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogZXNsaW50LWRpc2FibGUgdW5pY29ybi9wcmVmZXItYWRkLWV2ZW50LWxpc3RlbmVyICovXG5pbXBvcnQge0NsaXBib2FyZH0gZnJvbSAnZXh0LmdhZGdldC5DbGlwYm9hcmQnO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuL2kxOG4nO1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge3RpcHB5fSBmcm9tICdleHQuZ2FkZ2V0LlRpcHB5JztcblxubGV0IGNsaXBib2FyZEluc3RhbmNlOiBDbGlwYm9hcmRKUyB8IHVuZGVmaW5lZDtcblxuY29uc3QgZG9JbnMgPSAobGluazogc3RyaW5nKTogdm9pZCA9PiB7XG5cdGNvbnN0IHBvcnRsZXRJZDogJ3AtY2FjdGlvbnMnIHwgJ3AtdGInID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3AtY2FjdGlvbnMnKSA/ICdwLWNhY3Rpb25zJyA6ICdwLXRiJztcblxuXHRsZXQgZWxlbWVudDogSFRNTExJRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdC1zaG9ydGxpbmsnKTtcblxuXHRpZiAoIWVsZW1lbnQpIHtcblx0XHRlbGVtZW50ID0gbXcudXRpbC5hZGRQb3J0bGV0TGluayhcblx0XHRcdHBvcnRsZXRJZCxcblx0XHRcdCcjJyxcblx0XHRcdGdldE1lc3NhZ2UoJ1Nob3J0IFVSTCcpLFxuXHRcdFx0J3Qtc2hvcnRsaW5rJyxcblx0XHRcdGdldE1lc3NhZ2UoJ1Nob3cgc2hvcnQgVVJMJylcblx0XHQpO1xuXHR9XG5cblx0aWYgKGVsZW1lbnQpIHtcblx0XHQoKGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQgPz8gZWxlbWVudCkgYXMgSFRNTEVsZW1lbnQpLm9uY2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRjb25zdCAkZWxlbWVudDogSlF1ZXJ5ID0gJCgnPGRpdj4nKTtcblx0XHRcdGZvciAoY29uc3QgZG9tYWluIG9mIFsneW91c2hvdS53aWtpJywgJ3lzeW1oLmNjJ10pIHtcblx0XHRcdFx0JGVsZW1lbnQuYXBwZW5kKFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcblx0XHRcdFx0XHRuZXcgbXcud2lkZ2V0cy5Db3B5VGV4dExheW91dCh7XG5cdFx0XHRcdFx0XHRhbGlnbjogJ3RvcCcsXG5cdFx0XHRcdFx0XHRjb3B5VGV4dDogYGh0dHBzOi8vJHtkb21haW59JHtsaW5rfWAsXG5cdFx0XHRcdFx0fSkuJGVsZW1lbnQgYXMgSlF1ZXJ5XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR2b2lkIE9PLnVpLmFsZXJ0KCRlbGVtZW50LCB7dGl0bGU6IGdldE1lc3NhZ2UoJ1Nob3J0IFVSTCBjb3BpZWQgdG8gY2xpcGJvYXJkJyksIHNpemU6ICdtZWRpdW0nfSk7XG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzQ2l0aXplbjogYm9vbGVhbiA9IG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ2NpdGl6ZW4nO1xuXHRcdGlmIChpc0NpdGl6ZW4pIHtcblx0XHRcdCQoZWxlbWVudCkuZmluZCgnYScpLnByZXBlbmQoJzxzcGFuIGNsYXNzPVwiY2l0aXplbi11aS1pY29uIG13LXVpLWljb24td2lraW1lZGlhLXNob3J0bGlua1wiPjwvc3Bhbj4nKTtcblx0XHR9XG5cdH1cblxuXHRsZXQgaGVhZGVyRWxlbWVudDogSFRNTEFuY2hvckVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI213LWluZGljYXRvci1zaG9ydFVSTCBhJyk7XG5cblx0aWYgKCFoZWFkZXJFbGVtZW50KSB7XG5cdFx0Y29uc3QgJGhlYWRlckVsZW1lbnQ6IEpRdWVyeSA9ICQoJzxkaXY+Jylcblx0XHRcdC5hZGRDbGFzcygnbXctaW5kaWNhdG9yJylcblx0XHRcdC5hdHRyKCdpZCcsICdtdy1pbmRpY2F0b3Itc2hvcnRVUkwnKVxuXHRcdFx0LmFwcGVuZChcblx0XHRcdFx0JCgnPGE+Jylcblx0XHRcdFx0XHQuYXR0cih7XG5cdFx0XHRcdFx0XHRocmVmOiAnIycsXG5cdFx0XHRcdFx0XHQnYXJpYS1sYWJlbCc6IGdldE1lc3NhZ2UoJ1Nob3J0IFVSTCcpLFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmFwcGVuZCgkKCc8c3Bhbj4nKS5hZGRDbGFzcygnZ2FkZ2V0LXNob3J0LWxpbmtfX2ljb24nKS50ZXh0KGdldE1lc3NhZ2UoJ1Nob3J0IFVSTCcpKSlcblx0XHRcdCk7XG5cdFx0JGhlYWRlckVsZW1lbnQucHJlcGVuZFRvKCcubXctaW5kaWNhdG9ycycpO1xuXHRcdGhlYWRlckVsZW1lbnQgPSAkaGVhZGVyRWxlbWVudC5maW5kKCdhJykuZ2V0KDApIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuXHRcdHRpcHB5KGhlYWRlckVsZW1lbnQsIHtcblx0XHRcdGFycm93OiB0cnVlLFxuXHRcdFx0Y29udGVudDogZ2V0TWVzc2FnZSgnU2hvcnQgVVJMJyksXG5cdFx0XHRwbGFjZW1lbnQ6ICdib3R0b20nLFxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgc2hvcnR1cmw6IHN0cmluZyA9IGBodHRwczovL3lzeW1oLmNjJHtsaW5rfWA7XG5cdGNvbnN0ICRub3RpZnlFbGVtZW50ID0gJCgnPHNwYW4+Jylcblx0XHQudGV4dChnZXRNZXNzYWdlKCdTaG9ydCBVUkwgY29waWVkIHRvIGNsaXBib2FyZCcpKVxuXHRcdC5hcHBlbmQoXG5cdFx0XHQkKCc8YnI+JyksXG5cdFx0XHQkKCc8YT4nKVxuXHRcdFx0XHQuYXR0cignaHJlZicsICcjJylcblx0XHRcdFx0LnRleHQoc2hvcnR1cmwpXG5cdFx0XHRcdC5vbignY2xpY2snLCAoZXZlbnQ6IEpRdWVyeS5DbGlja0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRoZWFkZXJFbGVtZW50Lm9uY2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHZvaWQgbXcubm90aWZ5KCRub3RpZnlFbGVtZW50LCB7dGFnOiAnc2hvcnRVUkwnLCB0eXBlOiAnaW5mbyd9KTtcblx0fTtcblx0Y2xpcGJvYXJkSW5zdGFuY2U/LmRlc3Ryb3koKTtcblx0Y2xpcGJvYXJkSW5zdGFuY2UgPSBuZXcgQ2xpcGJvYXJkKGhlYWRlckVsZW1lbnQsIHtcblx0XHR0ZXh0OiAoKTogc3RyaW5nID0+IHtcblx0XHRcdHJldHVybiBzaG9ydHVybDtcblx0XHR9LFxuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbml0ID0gYXN5bmMgKHtcblx0ZGlmZklkLFxuXHRvbGRJZCxcblx0YXJ0aWNsZUlkLFxuXHRyZXZpc2lvbklkLFxufToge1xuXHRkaWZmSWQ6IG51bWJlciB8IG51bGw7XG5cdG9sZElkOiBudW1iZXIgfCBudWxsO1xuXHRhcnRpY2xlSWQ6IG51bWJlcjtcblx0cmV2aXNpb25JZDogbnVtYmVyO1xufSk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCAkYm9keTogSlF1ZXJ5PEhUTUxCb2R5RWxlbWVudD4gPSAkKCdib2R5Jyk7XG5cdGlmIChkaWZmSWQpIHtcblx0XHRjb25zdCBidWlsZExpbmsgPSAoX29sZElkPzogbnVtYmVyIHwgbnVsbCwgbGluayA9ICcvZCcpOiB2b2lkID0+IHtcblx0XHRcdGlmIChfb2xkSWQpIHtcblx0XHRcdFx0bGluayArPSBgLyR7X29sZElkfWA7XG5cdFx0XHR9XG5cdFx0XHRsaW5rICs9IGAvJHtkaWZmSWR9YDtcblx0XHRcdGRvSW5zKGxpbmspO1xuXHRcdH07XG5cblx0XHRidWlsZExpbmsob2xkSWQpO1xuXG5cdFx0aWYgKG9sZElkKSB7XG5cdFx0XHRjb25zdCBhcGk6IG13LkFwaSA9IGluaXRNd0FwaSgnU2hvcnRVUkwvMS4xJyk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBwYXJhbXM6IEFwaUNvbXBhcmVQYWdlc1BhcmFtcyA9IHtcblx0XHRcdFx0XHRhY3Rpb246ICdjb21wYXJlJyxcblx0XHRcdFx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRcdFx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0XHRcdFx0cHJvcDogJ2lkcycsXG5cdFx0XHRcdFx0ZnJvbXJldjogZGlmZklkLFxuXHRcdFx0XHRcdHRvcmVsYXRpdmU6ICdwcmV2Jyxcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3Qge2NvbXBhcmV9ID0gYXdhaXQgYXBpLmdldChwYXJhbXMpO1xuXHRcdFx0XHRpZiAoZGlmZklkID09PSBtdy5jb25maWcuZ2V0KCd3Z0RpZmZOZXdJZCcpICYmIGNvbXBhcmU/LmZyb21yZXZpZCA9PT0gbXcuY29uZmlnLmdldCgnd2dEaWZmT2xkSWQnKSkge1xuXHRcdFx0XHRcdGJ1aWxkTGluaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdHJldmlzaW9uSWQgJiZcblx0XHQoJGJvZHkuZmluZCgnI2NvbnRlbnRTdWInKS5maW5kKCcjbXctcmV2aXNpb24tbmF2JykubGVuZ3RoIHx8XG5cdFx0XHQkYm9keS5maW5kKCdtYWluI2NvbnRlbnQ+LnByZS1jb250ZW50ICNtdy1yZXZpc2lvbi1uYXYnKS5sZW5ndGgpID4gMFxuXHQpIHtcblx0XHRkb0lucyhgL3AvJHtyZXZpc2lvbklkfWApO1xuXHR9IGVsc2UgaWYgKGFydGljbGVJZCkge1xuXHRcdGRvSW5zKGAvYy8ke2FydGljbGVJZH1gKTtcblx0fVxufTtcbiIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0J1Nob3J0IFVSTCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnU2hvcnQgVVJMJyxcblx0XHRcdCd6aC1oYW5zJzogJ+efremTvuaOpScsXG5cdFx0XHQnemgtaGFudCc6ICfnn63ntrLlnYAnLFxuXHRcdH0pLFxuXHRcdCdTaG9ydCBVUkwgY29waWVkIHRvIGNsaXBib2FyZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHNob3J0IFVSTCBoYXMgYmVlbiBjb3BpZWQgdG8gY2xpcGJvYXJkOicsXG5cdFx0XHQnemgtaGFucyc6ICflt7LlpI3liLbmnKzpobXnn63pk77mjqXvvJonLFxuXHRcdFx0J3poLWhhbnQnOiAn5bey5b6p6KO95pys6aCB55+t57ay5Z2A77yaJyxcblx0XHR9KSxcblx0XHQnU2hvdyBzaG9ydCBVUkwnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Nob3cgc2hvcnQgVVJMJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aYvuekuuivpemhteefremTvuaOpScsXG5cdFx0XHQnemgtaGFudCc6ICfpoa/npLroqbLpoIHnn63ntrLlnYAnLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQge2luaXR9IGZyb20gJy4vbW9kdWxlcy9jb3JlJztcblxuaWYgKFxuXHRtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpID49IDAgfHxcblx0IWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ub2FydGljbGV0ZXh0JykubGVuZ3RoIHx8XG5cdG13LmNvbmZpZy5nZXQoJ3dnQWN0aW9uJykgPT09ICd2aWV3J1xuKSB7XG5cdC8vIExvYWQgbWFpbiBmdW5jdGlvblxuXHRtdy5ob29rKCd3aWtpcGFnZS5jb250ZW50JykuYWRkKCgkY29udGVudCk6IHZvaWQgPT4ge1xuXHRcdC8vIEd1YXJkIGFnYWluc3QgZG91YmxlIGluY2x1c2lvbnNcblx0XHRpZiAobXcuY29uZmlnLmdldCgnd2dTaG9ydFVSTEluc3RhbGxlZCcpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCRjb250ZW50LmF0dHIoJ2lkJykgIT09ICdtdy1jb250ZW50LXRleHQnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dm9pZCBpbml0KHtcblx0XHRcdGRpZmZJZDogbXcuY29uZmlnLmdldCgnd2dEaWZmTmV3SWQnKSxcblx0XHRcdG9sZElkOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpLFxuXHRcdFx0YXJ0aWNsZUlkOiBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpLFxuXHRcdFx0cmV2aXNpb25JZDogbXcuY29uZmlnLmdldCgnd2dSZXZpc2lvbklkJyksXG5cdFx0fSk7XG5cblx0XHQvLyBTZXQgZ3VhcmRcblx0XHRtdy5jb25maWcuc2V0KCd3Z1Nob3J0VVJMSW5zdGFsbGVkJywgdHJ1ZSk7XG5cdH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxxQkFBd0JDLFFBQUEsc0JBQUE7O0FDRHhCLElBQUFDLG9CQUF1QkQsUUFBQSxpQkFBQTtBQUV2QixJQUFNRSxrQkFBa0JBLE1BQU07QUFDN0IsU0FBTztJQUNOLGNBQUEsR0FBYUQsa0JBQUFFLFVBQVM7TUFDckJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRCxrQ0FB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cG9ydF9leHRfZ2FkZ2V0MiIsICJyZXF1aXJlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImdldEkxOG5NZXNzYWdlcyIsICJsb2NhbGl6ZSIsICJlbiIsICJpMThuTWVzc2FnZXMiLCAiZ2V0TWVzc2FnZSIsICJrZXkiLCAiaW1wb3J0X2V4dF9nYWRnZXQzIiwgImltcG9ydF9leHRfZ2FkZ2V0NCIsICJjbGlwYm9hcmRJbnN0YW5jZSIsICJkb0lucyIsICJsaW5rIiwgIl9jbGlwYm9hcmRJbnN0YW5jZSIsICJwb3J0bGV0SWQiLCAiZG9jdW1lbnQiLCAicXVlcnlTZWxlY3RvciIsICJlbGVtZW50IiwgIm13IiwgInV0aWwiLCAiYWRkUG9ydGxldExpbmsiLCAiX2VsZW1lbnQkZmlyc3RFbGVtZW50IiwgImZpcnN0RWxlbWVudENoaWxkIiwgIm9uY2xpY2siLCAiZXZlbnQiLCAicHJldmVudERlZmF1bHQiLCAiJGVsZW1lbnQiLCAiJCIsICJfaSIsICJfYXJyIiwgImxlbmd0aCIsICJkb21haW4iLCAiYXBwZW5kIiwgIndpZGdldHMiLCAiQ29weVRleHRMYXlvdXQiLCAiYWxpZ24iLCAiY29weVRleHQiLCAiY29uY2F0IiwgIk9PIiwgInVpIiwgImFsZXJ0IiwgInRpdGxlIiwgInNpemUiLCAiaXNDaXRpemVuIiwgImNvbmZpZyIsICJnZXQiLCAiZmluZCIsICJwcmVwZW5kIiwgImhlYWRlckVsZW1lbnQiLCAiJGhlYWRlckVsZW1lbnQiLCAiYWRkQ2xhc3MiLCAiYXR0ciIsICJocmVmIiwgInRleHQiLCAicHJlcGVuZFRvIiwgInRpcHB5IiwgImFycm93IiwgImNvbnRlbnQiLCAicGxhY2VtZW50IiwgInNob3J0dXJsIiwgIiRub3RpZnlFbGVtZW50IiwgIm9uIiwgInN0b3BQcm9wYWdhdGlvbiIsICJub3RpZnkiLCAidGFnIiwgInR5cGUiLCAiZGVzdHJveSIsICJDbGlwYm9hcmQiLCAiaW5pdCIsICJfcmVmIiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgImRpZmZJZCIsICJvbGRJZCIsICJhcnRpY2xlSWQiLCAicmV2aXNpb25JZCIsICIkYm9keSIsICJidWlsZExpbmsiLCAiX29sZElkIiwgImFwaSIsICJpbml0TXdBcGkiLCAicGFyYW1zIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJwcm9wIiwgImZyb21yZXYiLCAidG9yZWxhdGl2ZSIsICJjb21wYXJlIiwgImZyb21yZXZpZCIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAicXVlcnlTZWxlY3RvckFsbCIsICJob29rIiwgImFkZCIsICIkY29udGVudCIsICJzZXQiXQp9Cg==

2024年5月31日 (五) 16:00的版本

/**
 * SPDX-License-Identifier: GPL-3.0-or-later
 * _addText: '{{Gadget Header|license=GPL-3.0-or-later}}'
 *
 * @source {@link https://github.com/TopRealm/YsArchives-Gadgets/tree/master/src/ShortURL}
 * @author 安忆 <i@anyi.in>; WaitSpring <me@waitspring.com>
 * @license GPL-3.0-or-later {@link https://youshou.wiki/wiki/H:GPLV3}
 */
/**
 * +------------------------------------------------------------+
 * |            === WARNING: GLOBAL GADGET FILE ===             |
 * +------------------------------------------------------------+
 * |       All changes should be made in the repository,        |
 * |                otherwise they will be lost.                |
 * +------------------------------------------------------------+
 * |        Changes to this page may affect many users.         |
 * | Please discuss changes by opening an issue before editing. |
 * +------------------------------------------------------------+
 */
/* <nowiki> */

(() => {

"use strict";

// dist/ShortURL/ShortURL.js
function asyncGeneratorStep(n, t, e, r, o, a, c) {
  try {
    var i = n[a](c), u = i.value;
  } catch (n2) {
    return void e(n2);
  }
  i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
  return function() {
    var t = this, e = arguments;
    return new Promise(function(r, o) {
      var a = n.apply(t, e);
      function _next(n2) {
        asyncGeneratorStep(a, r, o, _next, _throw, "next", n2);
      }
      function _throw(n2) {
        asyncGeneratorStep(a, r, o, _next, _throw, "throw", n2);
      }
      _next(void 0);
    });
  };
}
function _createForOfIteratorHelper(r, e) {
  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (!t) {
    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
      t && (r = t);
      var n = 0, F = function() {
      };
      return { s: F, n: function() {
        return n >= r.length ? { done: true } : { done: false, value: r[n++] };
      }, e: function(r2) {
        throw r2;
      }, f: F };
    }
    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  var o, a = true, u = false;
  return { s: function() {
    t = t.call(r);
  }, n: function() {
    var r2 = t.next();
    return a = r2.done, r2;
  }, e: function(r2) {
    u = true, o = r2;
  }, f: function() {
    try {
      a || null == t.return || t.return();
    } finally {
      if (u) throw o;
    }
  } };
}
function _unsupportedIterableToArray(r, a) {
  if (r) {
    if ("string" == typeof r) return _arrayLikeToArray(r, a);
    var t = {}.toString.call(r).slice(8, -1);
    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
  }
}
function _arrayLikeToArray(r, a) {
  (null == a || a > r.length) && (a = r.length);
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
  return n;
}
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    var _iterator = _createForOfIteratorHelper(__getOwnPropNames(from)), _step;
    try {
      for (_iterator.s(); !(_step = _iterator.n()).done; ) {
        let key = _step.value;
        if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
          get: () => from[key],
          enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
        });
      }
    } catch (err) {
      _iterator.e(err);
    } finally {
      _iterator.f();
    }
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
    value: mod,
    enumerable: true
  }) : target,
  mod
));
//! src/ShortURL/modules/util/checkRevisionPage.ts
var checkRevisionPage = ($content) => {
  return ($content.find("#contentSub #mw-revision-nav").length || $content.find("main#content>.pre-content #mw-revision-nav").length) > 0;
};
//! src/ShortURL/modules/util/getDomains.ts
var getDomains = () => {
  const {
    wgWikiID
  } = mw.config.get();
  let domains2 = [];
  switch (wgWikiID) {
    case "zhqiuwenbaike":
      domains2 = ["youshou.wiki", "ysymh.cc"];
      break;
  }
  return domains2;
};
//! src/ShortURL/modules/addLink.tsx
var import_ext_gadget2 = require("ext.gadget.Clipboard");
var import_ext_gadget3 = __toESM(require("ext.gadget.React"), 1);
var import_ext_gadget4 = require("ext.gadget.Util");
//! src/ShortURL/modules/i18n.ts
var import_ext_gadget = require("ext.gadget.i18n");
var getI18nMessages = () => {
  return {
    "Network error": (0, import_ext_gadget.localize)({
      en: "Network error",
      ja: "ネットワークエラー",
      "zh-hans": "网络异常",
      "zh-hant": "網路異常"
    }),
    "Short URL": (0, import_ext_gadget.localize)({
      en: "Short URL",
      "zh-hans": "短链接",
      "zh-hant": "短網址"
    }),
    "Short URL copied to clipboard": (0, import_ext_gadget.localize)({
      en: "The short URL has been copied to clipboard:",
      "zh-hans": "已复制本页短链接:",
      "zh-hant": "已復製本頁短網址:"
    }),
    "Show short URL": (0, import_ext_gadget.localize)({
      en: "Show short URL",
      "zh-hans": "显示该页短链接",
      "zh-hant": "顯示該頁短網址"
    })
  };
};
var i18nMessages = getI18nMessages();
var getMessage = (key) => {
  return i18nMessages[key] || key;
};
//! src/ShortURL/modules/addLink.tsx
var import_ext_gadget5 = require("ext.gadget.Tippy");
var {
  skin
} = mw.config.get();
var domains = getDomains();
var clipboardInstance;
var headerLinkEventListener = {
  remove: () => {
  }
};
var portletLinkEventListener = {
  remove: () => {
  }
};
var addLink = (link) => {
  var _clipboardInstance;
  let portletLink = document.querySelector("#t-shortlink");
  if (!portletLink) {
    const portletId = document.querySelector("#p-cactions") ? "p-cactions" : "p-tb";
    portletLink = mw.util.addPortletLink(portletId, "#", getMessage("Short URL"), "t-shortlink", getMessage("Show short URL"));
  }
  if (portletLink) {
    var _portletLink$firstEle;
    const portletLinkClickListener = (event) => {
      event.preventDefault();
      const $element = $("<div>");
      var _iterator2 = _createForOfIteratorHelper(domains), _step2;
      try {
        for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
          const domain = _step2.value;
          $element.append(
            // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-explicit-any
            new mw.widgets.CopyTextLayout({
              align: "top",
              copyText: "https://".concat(domain).concat(link)
            }).$element
          );
        }
      } catch (err) {
        _iterator2.e(err);
      } finally {
        _iterator2.f();
      }
      void OO.ui.alert($element, {
        size: "medium",
        title: getMessage("Short URL copied to clipboard")
      });
    };
    portletLinkEventListener.remove();
    portletLinkEventListener = (0, import_ext_gadget4.addEventListenerWithRemover)({
      target: (_portletLink$firstEle = portletLink.firstElementChild) !== null && _portletLink$firstEle !== void 0 ? _portletLink$firstEle : portletLink,
      type: "click",
      listener: portletLinkClickListener
    });
    const isCitizen = skin === "citizen";
    if (isCitizen && !$(portletLink).find(".mw-ui-icon-wikimedia-shortlink").length) {
      $(portletLink).find("a").prepend(/* @__PURE__ */ import_ext_gadget3.default.createElement("span", {
        class: "citizen-ui-icon mw-ui-icon-wikimedia-shortlink"
      }));
    }
  }
  let headerLink = document.querySelector("#mw-indicator-shortURL a");
  if (!headerLink) {
    headerLink = /* @__PURE__ */ import_ext_gadget3.default.createElement("a", {
      "aria-label": getMessage("Short URL"),
      href: "#"
    }, /* @__PURE__ */ import_ext_gadget3.default.createElement("span", {
      className: "gadget-short-link__icon"
    }, getMessage("Short URL")));
    (0, import_ext_gadget5.tippy)(headerLink, {
      arrow: true,
      content: getMessage("Short URL"),
      placement: "bottom"
    });
    const $headerElement = $(/* @__PURE__ */ import_ext_gadget3.default.createElement("div", {
      className: "mw-indicator",
      id: "mw-indicator-shortURL"
    }, headerLink));
    $headerElement.prependTo(".mw-indicators");
  }
  const fullLink = "https://".concat(domains[0]).concat(link);
  const $notifyElement = $(/* @__PURE__ */ import_ext_gadget3.default.createElement("span", null, getMessage("Short URL copied to clipboard"), /* @__PURE__ */ import_ext_gadget3.default.createElement("br", null), /* @__PURE__ */ import_ext_gadget3.default.createElement("a", {
    href: "#",
    onClick: (event) => {
      event.preventDefault();
      event.stopPropagation();
    }
  }, fullLink)));
  const headerLinkClickListener = (event) => {
    event.preventDefault();
    void mw.notify($notifyElement, {
      tag: "shortURL",
      type: "info"
    });
  };
  headerLinkEventListener.remove();
  headerLinkEventListener = (0, import_ext_gadget4.addEventListenerWithRemover)({
    target: headerLink,
    type: "click",
    listener: headerLinkClickListener
  });
  (_clipboardInstance = clipboardInstance) === null || _clipboardInstance === void 0 || _clipboardInstance.destroy();
  clipboardInstance = new import_ext_gadget2.Clipboard(headerLink, {
    text: () => fullLink
  });
};
//! src/ShortURL/modules/buildLink.ts
var buildLink = (oldId, diffId) => {
  let link = "/d";
  if (oldId) {
    link += "/".concat(oldId);
  }
  link += "/".concat(diffId);
  addLink(link);
};
//! src/ShortURL/options.json
var version = "2.0";
//! src/ShortURL/modules/api.ts
var import_ext_gadget6 = require("ext.gadget.Util");
var api = (0, import_ext_gadget6.initMwApi)("ShortURL/".concat(version));
//! src/ShortURL/modules/util/queryApi.ts
var import_ext_gadget7 = require("ext.gadget.Toastify");
var parameters = {
  action: "compare",
  format: "json",
  formatversion: "2",
  prop: "ids",
  torelative: "prev"
};
var queryApi = /* @__PURE__ */ function() {
  var _ref = _asyncToGenerator(function* (diffId) {
    try {
      return yield api.get({
        ...parameters,
        fromrev: diffId
      });
    } catch (error) {
      console.error("[ShortURL] Ajax error:", error);
      (0, import_ext_gadget7.toastify)({
        text: getMessage("Network error"),
        close: true,
        duration: -1
      }, "error");
      return {};
    }
  });
  return function queryApi2(_x) {
    return _ref.apply(this, arguments);
  };
}();
//! src/ShortURL/modules/compareWithRemoteDiffId.ts
var compareWithRemoteDiffId = /* @__PURE__ */ function() {
  var _ref2 = _asyncToGenerator(function* (diffId) {
    var _response$compare;
    const response = yield queryApi(diffId);
    if (diffId === mw.config.get("wgDiffNewId") && ((_response$compare = response["compare"]) === null || _response$compare === void 0 ? void 0 : _response$compare.fromrevid) === mw.config.get("wgDiffOldId")) {
      buildLink(0, diffId);
    }
  });
  return function compareWithRemoteDiffId2(_x2) {
    return _ref2.apply(this, arguments);
  };
}();
//! src/ShortURL/modules/processId.ts
var processId = (isRevisionPage, {
  articleId,
  diffId,
  oldId,
  revisionId
}) => {
  if (diffId) {
    buildLink(oldId, diffId);
    if (oldId) {
      void compareWithRemoteDiffId(diffId);
    }
  } else if (revisionId && isRevisionPage) {
    addLink("/p/".concat(revisionId));
  } else if (articleId) {
    addLink("/c/".concat(articleId));
  }
};
//! src/ShortURL/ShortURL.ts
(function shortURL() {
  const {
    wgAction,
    wgArticleId,
    wgNamespaceNumber
  } = mw.config.get();
  const domains2 = getDomains();
  if (!domains2.length || wgNamespaceNumber < 0) {
    return;
  }
  if (wgAction === "view" && wgArticleId) {
    mw.hook("wikipage.content").add(($content) => {
      if ($content.attr("id") !== "mw-content-text") {
        return;
      }
      const isRevisionPage = checkRevisionPage($content);
      processId(isRevisionPage, {
        articleId: mw.config.get("wgArticleId"),
        diffId: mw.config.get("wgDiffNewId"),
        oldId: mw.config.get("wgDiffOldId"),
        revisionId: mw.config.get("wgRevisionId")
      });
    });
  }
})();

})();

/* </nowiki> */

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1Nob3J0VVJML21vZHVsZXMvdXRpbC9jaGVja1JldmlzaW9uUGFnZS50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy91dGlsL2dldERvbWFpbnMudHMiLCAic3JjL1Nob3J0VVJML21vZHVsZXMvYWRkTGluay50c3giLCAic3JjL1Nob3J0VVJML21vZHVsZXMvaTE4bi50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9idWlsZExpbmsudHMiLCAic3JjL1Nob3J0VVJML29wdGlvbnMuanNvbiIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9hcGkudHMiLCAic3JjL1Nob3J0VVJML21vZHVsZXMvdXRpbC9xdWVyeUFwaS50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9jb21wYXJlV2l0aFJlbW90ZURpZmZJZC50cyIsICJzcmMvU2hvcnRVUkwvbW9kdWxlcy9wcm9jZXNzSWQudHMiLCAic3JjL1Nob3J0VVJML1Nob3J0VVJMLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBjaGVja1JldmlzaW9uUGFnZSA9ICgkY29udGVudDogSlF1ZXJ5KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiAoXG5cdFx0KCRjb250ZW50LmZpbmQoJyNjb250ZW50U3ViICNtdy1yZXZpc2lvbi1uYXYnKS5sZW5ndGggfHxcblx0XHRcdCRjb250ZW50LmZpbmQoJ21haW4jY29udGVudD4ucHJlLWNvbnRlbnQgI213LXJldmlzaW9uLW5hdicpLmxlbmd0aCkgPiAwXG5cdCk7XG59O1xuXG5leHBvcnQge2NoZWNrUmV2aXNpb25QYWdlfTtcbiIsICJjb25zdCBnZXREb21haW5zID0gKCk6IHN0cmluZ1tdID0+IHtcblx0Y29uc3Qge3dnV2lraUlEfSA9IG13LmNvbmZpZy5nZXQoKTtcblx0bGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XG5cblx0c3dpdGNoICh3Z1dpa2lJRCkge1xuXHRcdGNhc2UgJ3pocWl1d2VuYmFpa2UnOlxuXHRcdFx0ZG9tYWlucyA9IFsneW91c2hvdS53aWtpJywgJ3lzeW1oLmNjJ107XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBkb21haW5zO1xufTtcblxuZXhwb3J0IHtnZXREb21haW5zfTtcbiIsICJpbXBvcnQge0NsaXBib2FyZH0gZnJvbSAnZXh0LmdhZGdldC5DbGlwYm9hcmQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ2V4dC5nYWRnZXQuUmVhY3QnO1xuaW1wb3J0IHthZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXJ9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5pbXBvcnQge2dldERvbWFpbnN9IGZyb20gJy4vdXRpbC9nZXREb21haW5zJztcbmltcG9ydCB7Z2V0TWVzc2FnZX0gZnJvbSAnLi9pMThuJztcbmltcG9ydCB7dGlwcHl9IGZyb20gJ2V4dC5nYWRnZXQuVGlwcHknO1xuXG5jb25zdCB7c2tpbn0gPSBtdy5jb25maWcuZ2V0KCk7XG5jb25zdCBkb21haW5zID0gZ2V0RG9tYWlucygpO1xuXG5sZXQgY2xpcGJvYXJkSW5zdGFuY2U6IENsaXBib2FyZEpTIHwgdW5kZWZpbmVkO1xubGV0IGhlYWRlckxpbmtFdmVudExpc3RlbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBhZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXI+ID0ge1xuXHRyZW1vdmU6ICgpOiB2b2lkID0+IHt9LFxufTtcbmxldCBwb3J0bGV0TGlua0V2ZW50TGlzdGVuZXI6IFJldHVyblR5cGU8dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3Zlcj4gPSB7XG5cdHJlbW92ZTogKCk6IHZvaWQgPT4ge30sXG59O1xuXG5jb25zdCBhZGRMaW5rID0gKGxpbms6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRsZXQgcG9ydGxldExpbms6IEhUTUxMSUVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Qtc2hvcnRsaW5rJyk7XG5cdGlmICghcG9ydGxldExpbmspIHtcblx0XHRjb25zdCBwb3J0bGV0SWQ6ICdwLWNhY3Rpb25zJyB8ICdwLXRiJyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwLWNhY3Rpb25zJykgPyAncC1jYWN0aW9ucycgOiAncC10Yic7XG5cdFx0cG9ydGxldExpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuXHRcdFx0cG9ydGxldElkLFxuXHRcdFx0JyMnLFxuXHRcdFx0Z2V0TWVzc2FnZSgnU2hvcnQgVVJMJyksXG5cdFx0XHQndC1zaG9ydGxpbmsnLFxuXHRcdFx0Z2V0TWVzc2FnZSgnU2hvdyBzaG9ydCBVUkwnKVxuXHRcdCk7XG5cdH1cblxuXHRpZiAocG9ydGxldExpbmspIHtcblx0XHRjb25zdCBwb3J0bGV0TGlua0NsaWNrTGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdGNvbnN0ICRlbGVtZW50OiBKUXVlcnkgPSAkKCc8ZGl2PicpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGRvbWFpbiBvZiBkb21haW5zKSB7XG5cdFx0XHRcdCRlbGVtZW50LmFwcGVuZChcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRcdFx0bmV3IChtdyBhcyBhbnkpLndpZGdldHMuQ29weVRleHRMYXlvdXQoe1xuXHRcdFx0XHRcdFx0YWxpZ246ICd0b3AnLFxuXHRcdFx0XHRcdFx0Y29weVRleHQ6IGBodHRwczovLyR7ZG9tYWlufSR7bGlua31gLFxuXHRcdFx0XHRcdH0pLiRlbGVtZW50IGFzIEpRdWVyeVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIE9PLnVpLmFsZXJ0KCRlbGVtZW50LCB7XG5cdFx0XHRcdHNpemU6ICdtZWRpdW0nLFxuXHRcdFx0XHR0aXRsZTogZ2V0TWVzc2FnZSgnU2hvcnQgVVJMIGNvcGllZCB0byBjbGlwYm9hcmQnKSxcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRwb3J0bGV0TGlua0V2ZW50TGlzdGVuZXIucmVtb3ZlKCk7XG5cdFx0cG9ydGxldExpbmtFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lcldpdGhSZW1vdmVyKHtcblx0XHRcdHRhcmdldDogKHBvcnRsZXRMaW5rLmZpcnN0RWxlbWVudENoaWxkID8/IHBvcnRsZXRMaW5rKSBhcyBIVE1MRWxlbWVudCxcblx0XHRcdHR5cGU6ICdjbGljaycsXG5cdFx0XHRsaXN0ZW5lcjogcG9ydGxldExpbmtDbGlja0xpc3RlbmVyLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgaXNDaXRpemVuOiBib29sZWFuID0gc2tpbiA9PT0gJ2NpdGl6ZW4nO1xuXHRcdGlmIChpc0NpdGl6ZW4gJiYgISQocG9ydGxldExpbmspLmZpbmQoJy5tdy11aS1pY29uLXdpa2ltZWRpYS1zaG9ydGxpbmsnKS5sZW5ndGgpIHtcblx0XHRcdCQocG9ydGxldExpbmspXG5cdFx0XHRcdC5maW5kKCdhJylcblx0XHRcdFx0LnByZXBlbmQoPHNwYW4gY2xhc3M9XCJjaXRpemVuLXVpLWljb24gbXctdWktaWNvbi13aWtpbWVkaWEtc2hvcnRsaW5rXCIgLz4pO1xuXHRcdH1cblx0fVxuXG5cdGxldCBoZWFkZXJMaW5rOiBIVE1MQW5jaG9yRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbXctaW5kaWNhdG9yLXNob3J0VVJMIGEnKTtcblx0aWYgKCFoZWFkZXJMaW5rKSB7XG5cdFx0aGVhZGVyTGluayA9IChcblx0XHRcdDxhIGFyaWEtbGFiZWw9e2dldE1lc3NhZ2UoJ1Nob3J0IFVSTCcpfSBocmVmPVwiI1wiPlxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJnYWRnZXQtc2hvcnQtbGlua19faWNvblwiPntnZXRNZXNzYWdlKCdTaG9ydCBVUkwnKX08L3NwYW4+XG5cdFx0XHQ8L2E+XG5cdFx0KSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcblxuXHRcdHRpcHB5KGhlYWRlckxpbmssIHtcblx0XHRcdGFycm93OiB0cnVlLFxuXHRcdFx0Y29udGVudDogZ2V0TWVzc2FnZSgnU2hvcnQgVVJMJyksXG5cdFx0XHRwbGFjZW1lbnQ6ICdib3R0b20nLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgJGhlYWRlckVsZW1lbnQgPSAkKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdy1pbmRpY2F0b3JcIiBpZD1cIm13LWluZGljYXRvci1zaG9ydFVSTFwiPlxuXHRcdFx0XHR7aGVhZGVyTGlua31cblx0XHRcdDwvZGl2PlxuXHRcdCkgYXMgSlF1ZXJ5O1xuXG5cdFx0JGhlYWRlckVsZW1lbnQucHJlcGVuZFRvKCcubXctaW5kaWNhdG9ycycpO1xuXHR9XG5cblx0Y29uc3QgZnVsbExpbms6IHN0cmluZyA9IGBodHRwczovLyR7ZG9tYWluc1swXX0ke2xpbmt9YDtcblxuXHRjb25zdCAkbm90aWZ5RWxlbWVudCA9ICQoXG5cdFx0PHNwYW4+XG5cdFx0XHR7Z2V0TWVzc2FnZSgnU2hvcnQgVVJMIGNvcGllZCB0byBjbGlwYm9hcmQnKX1cblx0XHRcdDxiciAvPlxuXHRcdFx0PGFcblx0XHRcdFx0aHJlZj1cIiNcIlxuXHRcdFx0XHRvbkNsaWNrPXsoZXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7ZnVsbExpbmt9XG5cdFx0XHQ8L2E+XG5cdFx0PC9zcGFuPlxuXHQpIGFzIEpRdWVyeTtcblxuXHRjb25zdCBoZWFkZXJMaW5rQ2xpY2tMaXN0ZW5lciA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR2b2lkIG13Lm5vdGlmeSgkbm90aWZ5RWxlbWVudCwge1xuXHRcdFx0dGFnOiAnc2hvcnRVUkwnLFxuXHRcdFx0dHlwZTogJ2luZm8nLFxuXHRcdH0pO1xuXHR9O1xuXG5cdGhlYWRlckxpbmtFdmVudExpc3RlbmVyLnJlbW92ZSgpO1xuXHRoZWFkZXJMaW5rRXZlbnRMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXJXaXRoUmVtb3Zlcih7XG5cdFx0dGFyZ2V0OiBoZWFkZXJMaW5rLFxuXHRcdHR5cGU6ICdjbGljaycsXG5cdFx0bGlzdGVuZXI6IGhlYWRlckxpbmtDbGlja0xpc3RlbmVyLFxuXHR9KTtcblxuXHRjbGlwYm9hcmRJbnN0YW5jZT8uZGVzdHJveSgpO1xuXHRjbGlwYm9hcmRJbnN0YW5jZSA9IG5ldyBDbGlwYm9hcmQoaGVhZGVyTGluaywge1xuXHRcdHRleHQ6ICgpOiBzdHJpbmcgPT4gZnVsbExpbmssXG5cdH0pO1xufTtcblxuZXhwb3J0IHthZGRMaW5rfTtcbiIsICJpbXBvcnQge2xvY2FsaXplfSBmcm9tICdleHQuZ2FkZ2V0LmkxOG4nO1xuXG5jb25zdCBnZXRJMThuTWVzc2FnZXMgPSAoKSA9PiB7XG5cdHJldHVybiB7XG5cdFx0J05ldHdvcmsgZXJyb3InOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ05ldHdvcmsgZXJyb3InLFxuXHRcdFx0amE6ICfjg43jg4Pjg4jjg6/jg7zjgq/jgqjjg6njg7wnLFxuXHRcdFx0J3poLWhhbnMnOiAn572R57uc5byC5bi4Jyxcblx0XHRcdCd6aC1oYW50JzogJ+e2sui3r+eVsOW4uCcsXG5cdFx0fSksXG5cdFx0J1Nob3J0IFVSTCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnU2hvcnQgVVJMJyxcblx0XHRcdCd6aC1oYW5zJzogJ+efremTvuaOpScsXG5cdFx0XHQnemgtaGFudCc6ICfnn63ntrLlnYAnLFxuXHRcdH0pLFxuXHRcdCdTaG9ydCBVUkwgY29waWVkIHRvIGNsaXBib2FyZCc6IGxvY2FsaXplKHtcblx0XHRcdGVuOiAnVGhlIHNob3J0IFVSTCBoYXMgYmVlbiBjb3BpZWQgdG8gY2xpcGJvYXJkOicsXG5cdFx0XHQnemgtaGFucyc6ICflt7LlpI3liLbmnKzpobXnn63pk77mjqXvvJonLFxuXHRcdFx0J3poLWhhbnQnOiAn5bey5b6p6KO95pys6aCB55+t57ay5Z2A77yaJyxcblx0XHR9KSxcblx0XHQnU2hvdyBzaG9ydCBVUkwnOiBsb2NhbGl6ZSh7XG5cdFx0XHRlbjogJ1Nob3cgc2hvcnQgVVJMJyxcblx0XHRcdCd6aC1oYW5zJzogJ+aYvuekuuivpemhteefremTvuaOpScsXG5cdFx0XHQnemgtaGFudCc6ICfpoa/npLroqbLpoIHnn63ntrLlnYAnLFxuXHRcdH0pLFxuXHR9O1xufTtcblxuY29uc3QgaTE4bk1lc3NhZ2VzID0gZ2V0STE4bk1lc3NhZ2VzKCk7XG5cbmNvbnN0IGdldE1lc3NhZ2U6IEdldE1lc3NhZ2VzPHR5cGVvZiBpMThuTWVzc2FnZXM+ID0gKGtleSkgPT4ge1xuXHRyZXR1cm4gaTE4bk1lc3NhZ2VzW2tleV0gfHwga2V5O1xufTtcblxuZXhwb3J0IHtnZXRNZXNzYWdlfTtcbiIsICJpbXBvcnQge2FkZExpbmt9IGZyb20gJy4vYWRkTGluayc7XG5cbmNvbnN0IGJ1aWxkTGluayA9IChvbGRJZDogbnVtYmVyIHwgbnVsbCwgZGlmZklkOiBudW1iZXIpOiB2b2lkID0+IHtcblx0bGV0IGxpbms6IHN0cmluZyA9ICcvZCc7XG5cdGlmIChvbGRJZCkge1xuXHRcdGxpbmsgKz0gYC8ke29sZElkfWA7XG5cdH1cblx0bGluayArPSBgLyR7ZGlmZklkfWA7XG5cblx0YWRkTGluayhsaW5rKTtcbn07XG5cbmV4cG9ydCB7YnVpbGRMaW5rfTtcbiIsICJ7XG5cdFwidmVyc2lvblwiOiBcIjIuMFwiXG59XG4iLCAiaW1wb3J0ICogYXMgT1BUSU9OUyBmcm9tICcuLi9vcHRpb25zLmpzb24nO1xuaW1wb3J0IHtpbml0TXdBcGl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmNvbnN0IGFwaTogbXcuQXBpID0gaW5pdE13QXBpKGBTaG9ydFVSTC8ke09QVElPTlMudmVyc2lvbn1gKTtcblxuZXhwb3J0IHthcGl9O1xuIiwgImltcG9ydCB7YXBpfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtnZXRNZXNzYWdlfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7dG9hc3RpZnl9IGZyb20gJ2V4dC5nYWRnZXQuVG9hc3RpZnknO1xuXG50eXBlIENvbXBhcmVSZXNwb25zZSA9IHtcblx0Y29tcGFyZT86IHtcblx0XHRmcm9tcmV2aWQ6IG51bWJlcjtcblx0fTtcbn07XG5cbmNvbnN0IHBhcmFtZXRlcnM6IEFwaUNvbXBhcmVQYWdlc1BhcmFtcyA9IHtcblx0YWN0aW9uOiAnY29tcGFyZScsXG5cdGZvcm1hdDogJ2pzb24nLFxuXHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdHByb3A6ICdpZHMnLFxuXHR0b3JlbGF0aXZlOiAncHJldicsXG59O1xuXG5jb25zdCBxdWVyeUFwaSA9IGFzeW5jIChkaWZmSWQ6IG51bWJlcik6IFByb21pc2U8Q29tcGFyZVJlc3BvbnNlPiA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGF3YWl0IGFwaS5nZXQoe1xuXHRcdFx0Li4ucGFyYW1ldGVycyxcblx0XHRcdGZyb21yZXY6IGRpZmZJZCxcblx0XHR9IGFzIHR5cGVvZiBwYXJhbWV0ZXJzKTtcblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRjb25zb2xlLmVycm9yKCdbU2hvcnRVUkxdIEFqYXggZXJyb3I6JywgZXJyb3IpO1xuXHRcdHRvYXN0aWZ5KFxuXHRcdFx0e1xuXHRcdFx0XHR0ZXh0OiBnZXRNZXNzYWdlKCdOZXR3b3JrIGVycm9yJyksXG5cdFx0XHRcdGNsb3NlOiB0cnVlLFxuXHRcdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0XHR9LFxuXHRcdFx0J2Vycm9yJ1xuXHRcdCk7XG5cblx0XHRyZXR1cm4ge307XG5cdH1cbn07XG5cbmV4cG9ydCB7cXVlcnlBcGl9O1xuIiwgImltcG9ydCB7YnVpbGRMaW5rfSBmcm9tICcuL2J1aWxkTGluayc7XG5pbXBvcnQge3F1ZXJ5QXBpfSBmcm9tICcuL3V0aWwvcXVlcnlBcGknO1xuXG5jb25zdCBjb21wYXJlV2l0aFJlbW90ZURpZmZJZCA9IGFzeW5jIChkaWZmSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRjb25zdCByZXNwb25zZTogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBxdWVyeUFwaT4+ID0gYXdhaXQgcXVlcnlBcGkoZGlmZklkKTtcblx0aWYgKGRpZmZJZCA9PT0gbXcuY29uZmlnLmdldCgnd2dEaWZmTmV3SWQnKSAmJiByZXNwb25zZVsnY29tcGFyZSddPy5mcm9tcmV2aWQgPT09IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk9sZElkJykpIHtcblx0XHRidWlsZExpbmsoMCwgZGlmZklkKTtcblx0fVxufTtcblxuZXhwb3J0IHtjb21wYXJlV2l0aFJlbW90ZURpZmZJZH07XG4iLCAiaW1wb3J0IHthZGRMaW5rfSBmcm9tICcuL2FkZExpbmsnO1xuaW1wb3J0IHtidWlsZExpbmt9IGZyb20gJy4vYnVpbGRMaW5rJztcbmltcG9ydCB7Y29tcGFyZVdpdGhSZW1vdGVEaWZmSWR9IGZyb20gJy4vY29tcGFyZVdpdGhSZW1vdGVEaWZmSWQnO1xuXG5jb25zdCBwcm9jZXNzSWQgPSAoXG5cdGlzUmV2aXNpb25QYWdlOiBib29sZWFuLFxuXHR7XG5cdFx0YXJ0aWNsZUlkLFxuXHRcdGRpZmZJZCxcblx0XHRvbGRJZCxcblx0XHRyZXZpc2lvbklkLFxuXHR9OiB7XG5cdFx0YXJ0aWNsZUlkOiBudW1iZXI7XG5cdFx0ZGlmZklkOiBudW1iZXIgfCBudWxsO1xuXHRcdG9sZElkOiBudW1iZXIgfCBudWxsO1xuXHRcdHJldmlzaW9uSWQ6IG51bWJlciB8IG51bGw7XG5cdH1cbik6IHZvaWQgPT4ge1xuXHRpZiAoZGlmZklkKSB7XG5cdFx0YnVpbGRMaW5rKG9sZElkLCBkaWZmSWQpO1xuXHRcdGlmIChvbGRJZCkge1xuXHRcdFx0dm9pZCBjb21wYXJlV2l0aFJlbW90ZURpZmZJZChkaWZmSWQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChyZXZpc2lvbklkICYmIGlzUmV2aXNpb25QYWdlKSB7XG5cdFx0YWRkTGluayhgL3AvJHtyZXZpc2lvbklkfWApO1xuXHR9IGVsc2UgaWYgKGFydGljbGVJZCkge1xuXHRcdGFkZExpbmsoYC9jLyR7YXJ0aWNsZUlkfWApO1xuXHR9XG59O1xuXG5leHBvcnQge3Byb2Nlc3NJZH07XG4iLCAiaW1wb3J0IHtjaGVja1JldmlzaW9uUGFnZX0gZnJvbSAnLi9tb2R1bGVzL3V0aWwvY2hlY2tSZXZpc2lvblBhZ2UnO1xuaW1wb3J0IHtnZXREb21haW5zfSBmcm9tICcuL21vZHVsZXMvdXRpbC9nZXREb21haW5zJztcbmltcG9ydCB7cHJvY2Vzc0lkfSBmcm9tICcuL21vZHVsZXMvcHJvY2Vzc0lkJztcblxuKGZ1bmN0aW9uIHNob3J0VVJMKCkge1xuXHRjb25zdCB7d2dBY3Rpb24sIHdnQXJ0aWNsZUlkLCB3Z05hbWVzcGFjZU51bWJlcn0gPSBtdy5jb25maWcuZ2V0KCk7XG5cblx0Y29uc3QgZG9tYWlucyA9IGdldERvbWFpbnMoKTtcblxuXHRpZiAoIWRvbWFpbnMubGVuZ3RoIHx8IHdnTmFtZXNwYWNlTnVtYmVyIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh3Z0FjdGlvbiA9PT0gJ3ZpZXcnICYmIHdnQXJ0aWNsZUlkKSB7XG5cdFx0bXcuaG9vaygnd2lraXBhZ2UuY29udGVudCcpLmFkZCgoJGNvbnRlbnQpOiB2b2lkID0+IHtcblx0XHRcdGlmICgkY29udGVudC5hdHRyKCdpZCcpICE9PSAnbXctY29udGVudC10ZXh0Jykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGlzUmV2aXNpb25QYWdlOiBib29sZWFuID0gY2hlY2tSZXZpc2lvblBhZ2UoJGNvbnRlbnQpO1xuXG5cdFx0XHRwcm9jZXNzSWQoaXNSZXZpc2lvblBhZ2UsIHtcblx0XHRcdFx0YXJ0aWNsZUlkOiBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVJZCcpLFxuXHRcdFx0XHRkaWZmSWQ6IG13LmNvbmZpZy5nZXQoJ3dnRGlmZk5ld0lkJyksXG5cdFx0XHRcdG9sZElkOiBtdy5jb25maWcuZ2V0KCd3Z0RpZmZPbGRJZCcpLFxuXHRcdFx0XHRyZXZpc2lvbklkOiBtdy5jb25maWcuZ2V0KCd3Z1JldmlzaW9uSWQnKSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59KSgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBTUEsb0JBQXFCQyxjQUE4QjtBQUN4RCxVQUNFQSxTQUFTQyxLQUFLLDhCQUE4QixFQUFFQyxVQUM5Q0YsU0FBU0MsS0FBSyw0Q0FBNEMsRUFBRUMsVUFBVTtBQUV6RTs7QUNMQSxJQUFNQyxhQUFhQSxNQUFnQjtBQUNsQyxRQUFNO0lBQUNDO0VBQVEsSUFBSUMsR0FBR0MsT0FBT0MsSUFBSTtBQUNqQyxNQUFJQyxXQUFvQixDQUFBO0FBRXhCLFVBQVFKLFVBQUE7SUFDUCxLQUFLO0FBQ0pJLGlCQUFVLENBQUMsZ0JBQWdCLFVBQVU7QUFDckM7RUFDRjtBQUVBLFNBQU9BO0FBQ1I7O0FDWEEsSUFBQUMscUJBQXdCQyxRQUFBLHNCQUFBO0FBQ3hCLElBQUFDLHFCQUFrQkMsUUFBQUYsUUFBQSxrQkFBQSxHQUFBLENBQUE7QUFDbEIsSUFBQUcscUJBQTBDSCxRQUFBLGlCQUFBOztBQ0YxQyxJQUFBSSxvQkFBdUJKLFFBQUEsaUJBQUE7QUFFdkIsSUFBTUssa0JBQWtCQSxNQUFNO0FBQzdCLFNBQU87SUFDTixrQkFBQSxHQUFpQkQsa0JBQUFFLFVBQVM7TUFDekJDLElBQUk7TUFDSkMsSUFBSTtNQUNKLFdBQVc7TUFDWCxXQUFXO0lBQ1osQ0FBQztJQUNELGNBQUEsR0FBYUosa0JBQUFFLFVBQVM7TUFDckJDLElBQUk7TUFDSixXQUFXO01BQ1gsV0FBVztJQUNaLENBQUM7SUFDRCxrQ0FBQSxH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QzRILFlBQVk5SCxHQUFHQyxPQUFPQyxJQUFJLGNBQWM7TUFDekMsQ0FBQztJQUNGLENBQUM7RUFDRjtBQUNELEdBQUc7IiwKICAibmFtZXMiOiBbImNoZWNrUmV2aXNpb25QYWdlIiwgIiRjb250ZW50IiwgImZpbmQiLCAibGVuZ3RoIiwgImdldERvbWFpbnMiLCAid2dXaWtpSUQiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJkb21haW5zMiIsICJpbXBvcnRfZXh0X2dhZGdldDIiLCAicmVxdWlyZSIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAiX190b0VTTSIsICJpbXBvcnRfZXh0X2dhZGdldDQiLCAiaW1wb3J0X2V4dF9nYWRnZXQiLCAiZ2V0STE4bk1lc3NhZ2VzIiwgImxvY2FsaXplIiwgImVuIiwgImphIiwgImkxOG5NZXNzYWdlcyIsICJnZXRNZXNzYWdlIiwgImtleSIsICJpbXBvcnRfZXh0X2dhZGdldDUiLCAic2tpbiIsICJkb21haW5zIiwgImNsaXBib2FyZEluc3RhbmNlIiwgImhlYWRlckxpbmtFdmVudExpc3RlbmVyIiwgInJlbW92ZSIsICJwb3J0bGV0TGlua0V2ZW50TGlzdGVuZXIiLCAiYWRkTGluayIsICJsaW5rIiwgIl9jbGlwYm9hcmRJbnN0YW5jZSIsICJwb3J0bGV0TGluayIsICJkb2N1bWVudCIsICJxdWVyeVNlbGVjdG9yIiwgInBvcnRsZXRJZCIsICJ1dGlsIiwgImFkZFBvcnRsZXRMaW5rIiwgIl9wb3J0bGV0TGluayRmaXJzdEVsZSIsICJwb3J0bGV0TGlua0NsaWNrTGlzdGVuZXIiLCAiZXZlbnQiLCAicHJldmVudERlZmF1bHQiLCAiJGVsZW1lbnQiLCAiJCIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJkb21haW4iLCAidmFsdWUiLCAiYXBwZW5kIiwgIndpZGdldHMiLCAiQ29weVRleHRMYXlvdXQiLCAiYWxpZ24iLCAiY29weVRleHQiLCAiY29uY2F0IiwgImVyciIsICJlIiwgImYiLCAiT08iLCAidWkiLCAiYWxlcnQiLCAic2l6ZSIsICJ0aXRsZSIsICJhZGRFdmVudExpc3RlbmVyV2l0aFJlbW92ZXIiLCAidGFyZ2V0IiwgImZpcnN0RWxlbWVudENoaWxkIiwgInR5cGUiLCAibGlzdGVuZXIiLCAiaXNDaXRpemVuIiwgInByZXBlbmQiLCAiZGVmYXVsdCIsICJjcmVhdGVFbGVtZW50IiwgImNsYXNzIiwgImhlYWRlckxpbmsiLCAiaHJlZiIsICJjbGFzc05hbWUiLCAidGlwcHkiLCAiYXJyb3ciLCAiY29udGVudCIsICJwbGFjZW1lbnQiLCAiJGhlYWRlckVsZW1lbnQiLCAiaWQiLCAicHJlcGVuZFRvIiwgImZ1bGxMaW5rIiwgIiRub3RpZnlFbGVtZW50IiwgIm9uQ2xpY2siLCAic3RvcFByb3BhZ2F0aW9uIiwgImhlYWRlckxpbmtDbGlja0xpc3RlbmVyIiwgIm5vdGlmeSIsICJ0YWciLCAiZGVzdHJveSIsICJDbGlwYm9hcmQiLCAidGV4dCIsICJidWlsZExpbmsiLCAib2xkSWQiLCAiZGlmZklkIiwgInZlcnNpb24iLCAiaW1wb3J0X2V4dF9nYWRnZXQ2IiwgImFwaSIsICJpbml0TXdBcGkiLCAiaW1wb3J0X2V4dF9nYWRnZXQ3IiwgInBhcmFtZXRlcnMiLCAiYWN0aW9uIiwgImZvcm1hdCIsICJmb3JtYXR2ZXJzaW9uIiwgInByb3AiLCAidG9yZWxhdGl2ZSIsICJxdWVyeUFwaSIsICJfcmVmIiwgIl9hc3luY1RvR2VuZXJhdG9yIiwgImZyb21yZXYiLCAiZXJyb3IiLCAiY29uc29sZSIsICJ0b2FzdGlmeSIsICJjbG9zZSIsICJkdXJhdGlvbiIsICJfeCIsICJhcHBseSIsICJhcmd1bWVudHMiLCAiY29tcGFyZVdpdGhSZW1vdGVEaWZmSWQiLCAiX3JlZjIiLCAiX3Jlc3BvbnNlJGNvbXBhcmUiLCAicmVzcG9uc2UiLCAiZnJvbXJldmlkIiwgIl94MiIsICJwcm9jZXNzSWQiLCAiaXNSZXZpc2lvblBhZ2UiLCAiYXJ0aWNsZUlkIiwgInJldmlzaW9uSWQiLCAic2hvcnRVUkwiLCAid2dBY3Rpb24iLCAid2dBcnRpY2xlSWQiLCAid2dOYW1lc3BhY2VOdW1iZXIiLCAiaG9vayIsICJhZGQiLCAiYXR0ciJdCn0K