请注意:更新本页面后,您可能需要清除浏览器缓存才能看到所作变更的影响。
Google Chrome、Microsoft Edge、Mozilla Firefox、Safari:按住⇧ Shift,同时单击“刷新”。
Google Chrome、Microsoft Edge、Mozilla Firefox、Safari:按住⇧ Shift,同时单击“刷新”。
对本页面内容的变更,应通知技术团队,以免在代码部署时被误覆盖。
本小工具代码采用下列版权许可:
本文件采用知识共享署名-相同方式共享 4.0 国际(CC BY-SA 4.0)许可协议授权。
- 您可以自由地:
- 共享 – 在任何介质以任何形式复制、发行本作品
- 演绎 – 演绎、转换或以本作品为基础进行创作
- 惟须遵守下列条件:
- 署名 – 您必须给出适当的署名,提供指向本许可协议的链接,同时标明是否(对原始作品)作了演绎。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
- 相同方式共享 – 如果您再混合、转换或者基于本作品进行创作,您必须基于与原先许可协议相同或相兼容的许可协议分发您贡献的作品。
/**
* SPDX-License-Identifier: CC-BY-SA-4.0
* _addText: '{{Gadget Header|license=CC-BY-SA-4.0}}'
*
* @base {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/QuickImport}
* @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/QuickImportAllMedia}
* @license CC-BY-SA-4.0 {@link https://www.qiuwenbaike.cn/wiki/H:CC-BY-SA-4.0}
*/
/**
* +------------------------------------------------------------+
* | === 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/QuickImportAllMedia/QuickImportAllMedia.js
function _createForOfIteratorHelper(o, allowArrayLike) {
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
if (!it) {
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it)
o = it;
var i = 0;
var F = function() {
};
return { s: F, n: function() {
if (i >= o.length)
return { done: true };
return { done: false, value: o[i++] };
}, e: function(e) {
throw e;
}, f: F };
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var normalCompletion = true, didErr = false, err;
return { s: function() {
it = it.call(o);
}, n: function() {
var step = it.next();
normalCompletion = step.done;
return step;
}, e: function(e) {
didErr = true;
err = e;
}, f: function() {
try {
if (!normalCompletion && it.return != null)
it.return();
} finally {
if (didErr)
throw err;
}
} };
}
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 asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function() {
var self = this, args = arguments;
return new Promise(function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(void 0);
});
};
}
//! src/QuickImportAllMedia/QuickImportAllMedia.ts
var import_ext_gadget4 = require("ext.gadget.QuickImport");
//! src/QuickImportAllMedia/modules/api.ts
var import_ext_gadget = require("ext.gadget.QuickImport");
//! src/QuickImportAllMedia/modules/core.ts
var import_ext_gadget2 = require("ext.gadget.Toastify");
var import_ext_gadget3 = require("ext.gadget.Util");
var toastifyInstance = {
hideToast: () => {
}
};
var queryImages = /* @__PURE__ */ function() {
var _ref = _asyncToGenerator(function* (titles) {
const params = {
titles,
action: "query",
format: "json",
formatversion: "2",
prop: "images",
imlimit: 5e3
};
const response = yield import_ext_gadget.api.post(params);
return response;
});
return function queryImages2(_x) {
return _ref.apply(this, arguments);
};
}();
var parse = /* @__PURE__ */ function() {
var _ref2 = _asyncToGenerator(function* (page) {
const params = {
page,
action: "parse",
format: "json",
formatversion: "2",
prop: "text"
};
const response = yield import_ext_gadget.api.post(params);
return response;
});
return function parse2(_x2) {
return _ref2.apply(this, arguments);
};
}();
var getAllImages = /* @__PURE__ */ function() {
var _ref3 = _asyncToGenerator(function* () {
toastifyInstance.hideToast();
(0, import_ext_gadget2.toastify)({
text: "正在获取迁移目标",
duration: -1
}, "info");
const fileNames = [];
const {
wgArticlePath,
wgNamespaceNumber,
wgPageName,
wgScript
} = mw.config.get();
if (!(wgNamespaceNumber < 0)) {
try {
const queryImageResponse = yield queryImages(wgPageName);
if (queryImageResponse["query"] && queryImageResponse["query"].pages[0] && queryImageResponse["query"].pages[0].images) {
var _iterator = _createForOfIteratorHelper(queryImageResponse["query"].pages[0].images), _step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
const imageInfo = _step.value;
if (!imageInfo || !imageInfo.title) {
continue;
}
fileNames[fileNames.length] = imageInfo.title;
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
} catch {
}
}
let fileLinkElements = [];
if (!(wgNamespaceNumber < 0)) {
try {
const parseResponse = yield parse(wgPageName);
if (parseResponse["parse"] && parseResponse["parse"].text) {
const pageContent = document.createElement("span");
pageContent.innerHTML = parseResponse["parse"].text;
fileLinkElements = [...pageContent.querySelectorAll("a[href^='/wiki/File:']"), ...pageContent.querySelectorAll("a[href*='title=File:']")];
}
} catch {
}
}
fileLinkElements = [...fileLinkElements, ...document.querySelectorAll("a[href^='/wiki/File:']"), ...document.querySelectorAll("a[href*='title=File:']")];
const articleRegex = new RegExp("".concat(wgArticlePath.replace("$1", ""), "(File:[^#]+)"));
const scriptRegex = new RegExp("".concat(wgScript, "\\?title=(File:[^#&]+)"));
var _iterator2 = _createForOfIteratorHelper((0, import_ext_gadget3.uniqueArray)(fileLinkElements)), _step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
const element = _step2.value;
const {
href,
classList
} = element;
if (!href || href.includes("redlink=1")) {
continue;
}
if (classList.contains("new")) {
continue;
}
let fileName;
if (articleRegex.test(href)) {
const match = articleRegex.exec(href);
fileName = match[1];
fileName = fileName.replace(/File:(File:|Image:)?/i, "File:");
fileName = decodeURIComponent(fileName);
fileNames[fileNames.length] = fileName;
}
if (scriptRegex.test(href)) {
const match = scriptRegex.exec(href);
fileName = match[1];
fileName = fileName.replace(/File:(File:|Image:)?/i, "File:");
fileName = decodeURIComponent(fileName);
fileNames[fileNames.length] = fileName;
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
toastifyInstance.hideToast();
toastifyInstance = (0, import_ext_gadget2.toastify)({
text: "获取迁移目标完成",
duration: -1
}, "success");
return (0, import_ext_gadget3.uniqueArray)(fileNames);
});
return function getAllImages2() {
return _ref3.apply(this, arguments);
};
}();
//! src/QuickImportAllMedia/QuickImportAllMedia.ts
(function quickImportAllMedia() {
const {
wgCanonicalSpecialPageName,
wgCurRevisionId
} = mw.config.get();
if (!(wgCurRevisionId || ["Prefixindex", "BrokenRedirects", "Wantedfiles"].includes(wgCanonicalSpecialPageName || ""))) {
return;
}
const portletId = document.querySelector("#p-cactions") ? "p-cactions" : "p-tb";
const element = mw.util.addPortletLink(portletId, "#", "导入此页面所有文件", "t-import");
if (!element) {
return;
}
element.addEventListener("click", () => {
void _asyncToGenerator(function* () {
const fileNames = yield getAllImages();
if (!fileNames.length) {
return;
}
yield (0, import_ext_gadget4.detectIfFileRedirect)(fileNames, true);
})().then(() => {
(0, import_ext_gadget4.refreshPage)();
});
});
})();
})();
/* </nowiki> */
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL1F1aWNrSW1wb3J0QWxsTWVkaWEvUXVpY2tJbXBvcnRBbGxNZWRpYS50cyIsICJzcmMvUXVpY2tJbXBvcnRBbGxNZWRpYS9tb2R1bGVzL2FwaS50cyIsICJzcmMvUXVpY2tJbXBvcnRBbGxNZWRpYS9tb2R1bGVzL2NvcmUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7ZGV0ZWN0SWZGaWxlUmVkaXJlY3QsIHJlZnJlc2hQYWdlfSBmcm9tICdleHQuZ2FkZ2V0LlF1aWNrSW1wb3J0JztcbmltcG9ydCB7Z2V0QWxsSW1hZ2VzfSBmcm9tICcuL21vZHVsZXMvY29yZSc7XG5cbihmdW5jdGlvbiBxdWlja0ltcG9ydEFsbE1lZGlhKCk6IHZvaWQge1xuXHRjb25zdCB7d2dDYW5vbmljYWxTcGVjaWFsUGFnZU5hbWUsIHdnQ3VyUmV2aXNpb25JZH0gPSBtdy5jb25maWcuZ2V0KCk7XG5cdGlmIChcblx0XHQhKFxuXHRcdFx0d2dDdXJSZXZpc2lvbklkIHx8XG5cdFx0XHRbJ1ByZWZpeGluZGV4JywgJ0Jyb2tlblJlZGlyZWN0cycsICdXYW50ZWRmaWxlcyddLmluY2x1ZGVzKHdnQ2Fub25pY2FsU3BlY2lhbFBhZ2VOYW1lIHx8ICcnKVxuXHRcdClcblx0KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgcG9ydGxldElkOiAncC1jYWN0aW9ucycgfCAncC10YicgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcC1jYWN0aW9ucycpID8gJ3AtY2FjdGlvbnMnIDogJ3AtdGInO1xuXHRjb25zdCBlbGVtZW50OiBIVE1MTElFbGVtZW50IHwgbnVsbCA9IG13LnV0aWwuYWRkUG9ydGxldExpbmsocG9ydGxldElkLCAnIycsICflr7zlhaXmraTpobXpnaLmiYDmnInmlofku7YnLCAndC1pbXBvcnQnKTtcblx0aWYgKCFlbGVtZW50KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpOiB2b2lkID0+IHtcblx0XHR2b2lkIChhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCBnZXRBbGxJbWFnZXMoKTtcblx0XHRcdGlmICghZmlsZU5hbWVzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBkZXRlY3RJZkZpbGVSZWRpcmVjdChmaWxlTmFtZXMsIHRydWUpO1xuXHRcdH0pKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZWZyZXNoUGFnZSgpO1xuXHRcdH0pO1xuXHR9KTtcbn0pKCk7XG4iLCAiZXhwb3J0IHthcGl9IGZyb20gJ2V4dC5nYWRnZXQuUXVpY2tJbXBvcnQnO1xuIiwgImltcG9ydCB7YXBpfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge3RvYXN0aWZ5fSBmcm9tICdleHQuZ2FkZ2V0LlRvYXN0aWZ5JztcbmltcG9ydCB7dW5pcXVlQXJyYXl9IGZyb20gJ2V4dC5nYWRnZXQuVXRpbCc7XG5cbmxldCB0b2FzdGlmeUluc3RhbmNlOiBUb2FzdGlmeUluc3RhbmNlID0ge1xuXHRoaWRlVG9hc3Q6ICgpID0+IHt9LFxufTtcblxuY29uc3QgcXVlcnlJbWFnZXMgPSBhc3luYyAodGl0bGVzOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuXHRjb25zdCBwYXJhbXM6IEFwaVF1ZXJ5SW1hZ2VzUGFyYW1zID0ge1xuXHRcdHRpdGxlcyxcblx0XHRhY3Rpb246ICdxdWVyeScsXG5cdFx0Zm9ybWF0OiAnanNvbicsXG5cdFx0Zm9ybWF0dmVyc2lvbjogJzInLFxuXHRcdHByb3A6ICdpbWFnZXMnLFxuXHRcdGltbGltaXQ6IDUwMDAsXG5cdH07XG5cdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnBvc3QocGFyYW1zKTtcblxuXHRyZXR1cm4gcmVzcG9uc2U7XG59O1xuXG5jb25zdCBwYXJzZSA9IGFzeW5jIChwYWdlOiBzdHJpbmcpID0+IHtcblx0Y29uc3QgcGFyYW1zOiBBcGlQYXJzZVBhcmFtcyA9IHtcblx0XHRwYWdlLFxuXHRcdGFjdGlvbjogJ3BhcnNlJyxcblx0XHRmb3JtYXQ6ICdqc29uJyxcblx0XHRmb3JtYXR2ZXJzaW9uOiAnMicsXG5cdFx0cHJvcDogJ3RleHQnLFxuXHR9O1xuXHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wb3N0KHBhcmFtcyk7XG5cblx0cmV0dXJuIHJlc3BvbnNlO1xufTtcblxuY29uc3QgZ2V0QWxsSW1hZ2VzID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcblx0dG9hc3RpZnlJbnN0YW5jZS5oaWRlVG9hc3QoKTtcblx0dG9hc3RpZnkoXG5cdFx0e1xuXHRcdFx0dGV4dDogJ+ato+WcqOiOt+WPlui/geenu+ebruaghycsXG5cdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0fSxcblx0XHQnaW5mbydcblx0KTtcblxuXHRjb25zdCBmaWxlTmFtZXM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHt3Z0FydGljbGVQYXRoLCB3Z05hbWVzcGFjZU51bWJlciwgd2dQYWdlTmFtZSwgd2dTY3JpcHR9ID0gbXcuY29uZmlnLmdldCgpO1xuXG5cdC8vIEFuYWx5emUgc3RlcCAxOiBRdWVyeVxuXHRpZiAoISh3Z05hbWVzcGFjZU51bWJlciA8IDApKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHF1ZXJ5SW1hZ2VSZXNwb25zZSA9IGF3YWl0IHF1ZXJ5SW1hZ2VzKHdnUGFnZU5hbWUpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRxdWVyeUltYWdlUmVzcG9uc2VbJ3F1ZXJ5J10gJiZcblx0XHRcdFx0cXVlcnlJbWFnZVJlc3BvbnNlWydxdWVyeSddLnBhZ2VzWzBdICYmXG5cdFx0XHRcdHF1ZXJ5SW1hZ2VSZXNwb25zZVsncXVlcnknXS5wYWdlc1swXS5pbWFnZXNcblx0XHRcdCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGltYWdlSW5mbyBvZiBxdWVyeUltYWdlUmVzcG9uc2VbJ3F1ZXJ5J10ucGFnZXNbMF0uaW1hZ2VzIGFzIHtuczogbnVtYmVyOyB0aXRsZTogc3RyaW5nfVtdKSB7XG5cdFx0XHRcdFx0aWYgKCFpbWFnZUluZm8gfHwgIWltYWdlSW5mby50aXRsZSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZpbGVOYW1lc1tmaWxlTmFtZXMubGVuZ3RoXSA9IGltYWdlSW5mby50aXRsZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge31cblx0fVxuXG5cdC8vIEFuYWx5emUgc3RlcCAyOiBGaW5kIGZyb20gcGFnZXNcblx0bGV0IGZpbGVMaW5rRWxlbWVudHM6IEhUTUxBbmNob3JFbGVtZW50W10gPSBbXTtcblxuXHRpZiAoISh3Z05hbWVzcGFjZU51bWJlciA8IDApKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcnNlUmVzcG9uc2UgPSBhd2FpdCBwYXJzZSh3Z1BhZ2VOYW1lKTtcblx0XHRcdGlmIChwYXJzZVJlc3BvbnNlWydwYXJzZSddICYmIHBhcnNlUmVzcG9uc2VbJ3BhcnNlJ10udGV4dCkge1xuXHRcdFx0XHRjb25zdCBwYWdlQ29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0cGFnZUNvbnRlbnQuaW5uZXJIVE1MID0gcGFyc2VSZXNwb25zZVsncGFyc2UnXS50ZXh0IGFzIHN0cmluZztcblxuXHRcdFx0XHRmaWxlTGlua0VsZW1lbnRzID0gW1xuXHRcdFx0XHRcdC4uLnBhZ2VDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEFuY2hvckVsZW1lbnQ+KFwiYVtocmVmXj0nL3dpa2kvRmlsZTonXVwiKSxcblx0XHRcdFx0XHQuLi5wYWdlQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxBbmNob3JFbGVtZW50PihcImFbaHJlZio9J3RpdGxlPUZpbGU6J11cIiksXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7fVxuXHR9XG5cblx0ZmlsZUxpbmtFbGVtZW50cyA9IFtcblx0XHQuLi5maWxlTGlua0VsZW1lbnRzLFxuXHRcdC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEFuY2hvckVsZW1lbnQ+KFwiYVtocmVmXj0nL3dpa2kvRmlsZTonXVwiKSxcblx0XHQuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxBbmNob3JFbGVtZW50PihcImFbaHJlZio9J3RpdGxlPUZpbGU6J11cIiksXG5cdF07XG5cblx0Y29uc3QgYXJ0aWNsZVJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKGAke3dnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCAnJyl9KEZpbGU6W14jXSspYCk7XG5cdGNvbnN0IHNjcmlwdFJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKGAke3dnU2NyaXB0fVxcXFw/dGl0bGU9KEZpbGU6W14jJl0rKWApO1xuXG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiB1bmlxdWVBcnJheShmaWxlTGlua0VsZW1lbnRzKSkge1xuXHRcdC8vIFJlcGxhY2UgYG5ldyBTZXQoKWAgdG8gYXZvaWQgcG9seWZpbGxpbmcgY29yZS1qc1xuXHRcdGNvbnN0IHtocmVmLCBjbGFzc0xpc3R9ID0gZWxlbWVudDtcblxuXHRcdGlmICghaHJlZiB8fCBocmVmLmluY2x1ZGVzKCdyZWRsaW5rPTEnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGNsYXNzTGlzdC5jb250YWlucygnbmV3JykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGxldCBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChhcnRpY2xlUmVnZXgudGVzdChocmVmKSkge1xuXHRcdFx0Y29uc3QgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSA9IGFydGljbGVSZWdleC5leGVjKGhyZWYpIGFzIFJlZ0V4cEV4ZWNBcnJheTtcblx0XHRcdGZpbGVOYW1lID0gbWF0Y2hbMV0gYXMgc3RyaW5nO1xuXHRcdFx0ZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9GaWxlOihGaWxlOnxJbWFnZTopPy9pLCAnRmlsZTonKTtcblx0XHRcdGZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKTtcblx0XHRcdGZpbGVOYW1lc1tmaWxlTmFtZXMubGVuZ3RoXSA9IGZpbGVOYW1lO1xuXHRcdH1cblxuXHRcdGlmIChzY3JpcHRSZWdleC50ZXN0KGhyZWYpKSB7XG5cdFx0XHRjb25zdCBtYXRjaDogUmVnRXhwRXhlY0FycmF5ID0gc2NyaXB0UmVnZXguZXhlYyhocmVmKSBhcyBSZWdFeHBFeGVjQXJyYXk7XG5cdFx0XHRmaWxlTmFtZSA9IG1hdGNoWzFdIGFzIHN0cmluZztcblx0XHRcdGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvRmlsZTooRmlsZTp8SW1hZ2U6KT8vaSwgJ0ZpbGU6Jyk7XG5cdFx0XHRmaWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSk7XG5cdFx0XHRmaWxlTmFtZXNbZmlsZU5hbWVzLmxlbmd0aF0gPSBmaWxlTmFtZTtcblx0XHR9XG5cdH1cblxuXHR0b2FzdGlmeUluc3RhbmNlLmhpZGVUb2FzdCgpO1xuXHR0b2FzdGlmeUluc3RhbmNlID0gdG9hc3RpZnkoXG5cdFx0e1xuXHRcdFx0dGV4dDogJ+iOt+WPlui/geenu+ebruagh+WujOaIkCcsXG5cdFx0XHRkdXJhdGlvbjogLTEsXG5cdFx0fSxcblx0XHQnc3VjY2Vzcydcblx0KTtcblxuXHRyZXR1cm4gdW5pcXVlQXJyYXkoZmlsZU5hbWVzKTsgLy8gUmVwbGFjZSBgWy4uLm5ldyBTZXQoKV1gIHRvIGF2b2lkIHBvbHlmaWxsaW5nIGNvcmUtanNcbn07XG5cbmV4cG9ydCB7Z2V0QWxsSW1hZ2VzfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxxQkFBZ0RDLFFBQUEsd0JB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IiwKICAibmFtZXMiOiBbImltcG9ydF9leHRfZ2FkZ2V0NCIsICJyZXF1aXJlIiwgImltcG9ydF9leHRfZ2FkZ2V0IiwgImltcG9ydF9leHRfZ2FkZ2V0MiIsICJpbXBvcnRfZXh0X2dhZGdldDMiLCAidG9hc3RpZnlJbnN0YW5jZSIsICJoaWRlVG9hc3QiLCAicXVlcnlJbWFnZXMiLCAiX3JlZiIsICJfYXN5bmNUb0dlbmVyYXRvciIsICJ0aXRsZXMiLCAicGFyYW1zIiwgImFjdGlvbiIsICJmb3JtYXQiLCAiZm9ybWF0dmVyc2lvbiIsICJwcm9wIiwgImltbGltaXQiLCAicmVzcG9uc2UiLCAiYXBpIiwgInBvc3QiLCAiX3giLCAiYXBwbHkiLCAiYXJndW1lbnRzIiwgInBhcnNlIiwgIl9yZWYyIiwgInBhZ2UiLCAiX3gyIiwgImdldEFsbEltYWdlcyIsICJfcmVmMyIsICJ0b2FzdGlmeSIsICJ0ZXh0IiwgImR1cmF0aW9uIiwgImZpbGVOYW1lcyIsICJ3Z0FydGljbGVQYXRoIiwgIndnTmFtZXNwYWNlTnVtYmVyIiwgIndnUGFnZU5hbWUiLCAid2dTY3JpcHQiLCAibXciLCAiY29uZmlnIiwgImdldCIsICJxdWVyeUltYWdlUmVzcG9uc2UiLCAicGFnZXMiLCAiaW1hZ2VzIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfc3RlcCIsICJzIiwgIm4iLCAiZG9uZSIsICJpbWFnZUluZm8iLCAidmFsdWUiLCAidGl0bGUiLCAibGVuZ3RoIiwgImVyciIsICJlIiwgImYiLCAiZmlsZUxpbmtFbGVtZW50cyIsICJwYXJzZVJlc3BvbnNlIiwgInBhZ2VDb250ZW50IiwgImRvY3VtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAiaW5uZXJIVE1MIiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAiYXJ0aWNsZVJlZ2V4IiwgIlJlZ0V4cCIsICJjb25jYXQiLCAicmVwbGFjZSIsICJzY3JpcHRSZWdleCIsICJfaXRlcmF0b3IyIiwgInVuaXF1ZUFycmF5IiwgIl9zdGVwMiIsICJlbGVtZW50IiwgImhyZWYiLCAiY2xhc3NMaXN0IiwgImluY2x1ZGVzIiwgImNvbnRhaW5zIiwgImZpbGVOYW1lIiwgInRlc3QiLCAibWF0Y2giLCAiZXhlYyIsICJkZWNvZGVVUklDb21wb25lbnQiLCAicXVpY2tJbXBvcnRBbGxNZWRpYSIsICJ3Z0Nhbm9uaWNhbFNwZWNpYWxQYWdlTmFtZSIsICJ3Z0N1clJldmlzaW9uSWQiLCAicG9ydGxldElkIiwgInF1ZXJ5U2VsZWN0b3IiLCAidXRpbCIsICJhZGRQb3J0bGV0TGluayIsICJhZGRFdmVudExpc3RlbmVyIiwgImRldGVjdElmRmlsZVJlZGlyZWN0IiwgInRoZW4iLCAicmVmcmVzaFBhZ2UiXQp9Cg==