obsidian-dev-utils
Version:
This is the collection of useful functions that you can use for your Obsidian plugin development
147 lines (144 loc) • 17.1 kB
JavaScript
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
(function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var preprocessPlugin_exports = {};
__export(preprocessPlugin_exports, {
preprocessPlugin: () => preprocessPlugin
});
module.exports = __toCommonJS(preprocessPlugin_exports);
var import_ObjectUtils = require('../../ObjectUtils.cjs');
var import_String = require('../../String.cjs');
var import_NodeModules = require('../NodeModules.cjs');
function preprocessPlugin(isEsm) {
const replacements = isEsm ? {} : {
[(0, import_String.replaceAll)("import(dot)meta(dot)url", "(dot)", ".")]: () => {
if (typeof __filename === "string") {
const localRequire = require;
const url = localRequire("node:url");
return url.pathToFileURL(__filename).href;
}
if (typeof window !== "undefined") {
return window.location.href;
}
return "";
}
};
return {
name: "preprocess",
setup(build) {
build.initialOptions.define ??= {};
for (const key of Object.keys(replacements)) {
build.initialOptions.define[key] = `__${(0, import_String.makeValidVariableName)(key)}`;
}
build.initialOptions.banner ??= {};
build.initialOptions.banner["js"] ??= "";
build.initialOptions.banner["js"] += `
(${String(isEsm ? initEsm : initCjs)})();
`;
build.onLoad({ filter: /\.(?:js|ts|cjs|mjs|cts|mts)$/ }, async (args) => {
let contents = await (0, import_NodeModules.readFile)(args.path, "utf-8");
for (const [key, value] of Object.entries(replacements)) {
const variable = `__${(0, import_String.makeValidVariableName)(key)}`;
if (!contents.includes(key)) {
continue;
}
const valueStr = typeof value === "function" ? `(${String(value)})()` : (0, import_ObjectUtils.toJson)(value, { functionHandlingMode: import_ObjectUtils.FunctionHandlingMode.Full });
if (contents.includes(`var ${variable}`)) {
continue;
}
contents = `var ${variable} = globalThis['${key}'] ?? ${valueStr};
${contents}`;
}
contents = (0, import_String.replaceAll)(contents, /`\r?\n\/\/# sourceMappingURL/g, "`\n//#${''} sourceMappingURL");
return {
contents,
loader: "ts"
};
});
}
};
}
function initCjs() {
const globalThisRecord = globalThis;
globalThisRecord["__name"] ??= name;
const originalRequire = require;
if (originalRequire && !originalRequire.__isPatched) {
require = Object.assign(
(id) => requirePatched(id),
originalRequire,
{
__isPatched: true
}
);
}
const newFuncs = {
__extractDefault: () => extractDefault,
process: () => {
const browserProcess = {
browser: true,
cwd: () => "/",
env: {},
platform: "android"
};
return browserProcess;
}
};
for (const key of Object.keys(newFuncs)) {
globalThisRecord[key] ??= newFuncs[key]?.();
}
function name(obj) {
return obj;
}
function extractDefault(module2) {
return module2 && module2.__esModule && "default" in module2 ? module2.default : module2;
}
function requirePatched(id) {
const module2 = originalRequire?.(id);
if (module2) {
return extractDefault(module2);
}
if (id === "process" || id === "node:process") {
console.error(`Module not found: ${id}. Fake process object is returned instead.`);
return globalThis.process;
}
console.error(`Module not found: ${id}. Empty object is returned instead.`);
return {};
}
}
function initEsm() {
if (globalThis.process) {
return;
}
const browserProcess = {
browser: true,
cwd: () => "/",
env: {},
platform: "android"
};
globalThis.process = browserProcess;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
preprocessPlugin
});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL1NjcmlwdFV0aWxzL2VzYnVpbGQvcHJlcHJvY2Vzc1BsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY3VzdG9tIGVzYnVpbGQgcGx1Z2luIHRoYXQgcHJlcHJvY2Vzc2VzIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZmlsZXMuXG4gKiBUaGUgcHJlcHJvY2Vzc2luZyBpbmNsdWRlcyByZXBsYWNpbmcgYGltcG9ydChkb3QpbWV0YShkb3QpdXJsYCB3aXRoIGEgTm9kZS5qcy1jb21wYXRpYmxlIGFsdGVybmF0aXZlLFxuICogZW5zdXJpbmcgY29tcGF0aWJpbGl0eSB3aXRoIE9ic2lkaWFuJ3MgcGx1Z2luIHN5c3RlbSwgYW5kIGFkZGluZyBhIGJhc2ljIGBwcm9jZXNzYCBvYmplY3QgZm9yIGVudmlyb25tZW50c1xuICogd2hlcmUgYHByb2Nlc3NgIGlzIG5vdCBhdmFpbGFibGUgKGxpa2UgbW9iaWxlIG9yIHdlYiBlbnZpcm9ubWVudHMpLlxuICpcbiAqIEByZW1hcmtzXG4gKiBXZSBjYW5ub3QgdXNlIGAuYCBpbnN0ZWFkIG9mIGAoZG90KWAgaW4gdGhlIGFib3ZlIGRlc2NyaXB0aW9uIGJlY2F1c2UgdGhlIGZpbGUgaXRzZWxmIGlzIHByZXByb2Nlc3NlZCB3aXRoIHRoZSBzYW1lIHJ1bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljT2JqZWN0IH0gZnJvbSAnLi4vLi4vT2JqZWN0VXRpbHMudHMnO1xuXG5pbXBvcnQge1xuICBGdW5jdGlvbkhhbmRsaW5nTW9kZSxcbiAgdG9Kc29uXG59IGZyb20gJy4uLy4uL09iamVjdFV0aWxzLnRzJztcbmltcG9ydCB7XG4gIG1ha2VWYWxpZFZhcmlhYmxlTmFtZSxcbiAgcmVwbGFjZUFsbFxufSBmcm9tICcuLi8uLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICcuLi9Ob2RlTW9kdWxlcy50cyc7XG5cbmludGVyZmFjZSBCcm93c2VyUHJvY2VzcyBleHRlbmRzIFBhcnRpYWw8Tm9kZUpTLlByb2Nlc3M+IHtcbiAgYnJvd3NlcjogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEVzbU1vZHVsZSB7XG4gIF9fZXNNb2R1bGU6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHVua25vd247XG59XG5cbmludGVyZmFjZSBSZXF1aXJlUGF0Y2hlZCBleHRlbmRzIE5vZGVKUy5SZXF1aXJlIHtcbiAgX19pc1BhdGNoZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlc2J1aWxkIHBsdWdpbiB0aGF0IHByZXByb2Nlc3NlcyBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICpcbiAqIFRoaXMgcGx1Z2luIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gKiAtIFJlcGxhY2VzIGluc3RhbmNlcyBvZiBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIHdpdGggYSBOb2RlLmpzLWNvbXBhdGlibGUgYF9fZmlsZW5hbWVgIGFsdGVybmF0aXZlLlxuICogLSBNb2RpZmllcyB0aGUgYHNvdXJjZU1hcHBpbmdVUkxgIGNvbW1lbnQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBPYnNpZGlhbidzIHBsdWdpbiBzeXN0ZW0uXG4gKiAtIEFkZHMgYSBiYXNpYyBgcHJvY2Vzc2Agb2JqZWN0IHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgYHByb2Nlc3NgIGlzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSBpc0VzbSAtIFdoZXRoZXIgdGhlIGJ1aWxkIGlzIGZvciBhbiBFU00gZm9ybWF0LlxuICogQHJldHVybnMgQW4gZXNidWlsZCBgUGx1Z2luYCBvYmplY3QgdGhhdCBoYW5kbGVzIHRoZSBwcmVwcm9jZXNzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcHJvY2Vzc1BsdWdpbihpc0VzbT86IGJvb2xlYW4pOiBQbHVnaW4ge1xuICBjb25zdCByZXBsYWNlbWVudHMgPSBpc0VzbVxuICAgID8ge31cbiAgICA6IHtcbiAgICAgIFtyZXBsYWNlQWxsKCdpbXBvcnQoZG90KW1ldGEoZG90KXVybCcsICcoZG90KScsICcuJyldOiAoKTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IGxvY2FsUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpIGFzIHR5cGVvZiBpbXBvcnQoJ25vZGU6dXJsJyk7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjayB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGVudmlyb25tZW50IGlzIHVua25vd25cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncHJlcHJvY2VzcycsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmRlZmluZSA/Pz0ge307XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSBgX18ke21ha2VWYWxpZFZhcmlhYmxlTmFtZShrZXkpfWA7XG4gICAgICB9XG5cbiAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmJhbm5lciA/Pz0ge307XG4gICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5iYW5uZXJbJ2pzJ10gPz89ICcnO1xuICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYmFubmVyWydqcyddICs9IGBcXG4oJHtTdHJpbmcoaXNFc20gPyBpbml0RXNtIDogaW5pdENqcyl9KSgpO1xcbmA7XG5cbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjogL1xcLig/OmpzfHRzfGNqc3xtanN8Y3RzfG10cykkLyB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBsZXQgY29udGVudHMgPSBhd2FpdCByZWFkRmlsZShhcmdzLnBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGBfXyR7bWFrZVZhbGlkVmFyaWFibGVOYW1lKGtleSl9YDtcbiAgICAgICAgICBpZiAoIWNvbnRlbnRzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGAoJHtTdHJpbmcodmFsdWUpfSkoKWAgOiB0b0pzb24odmFsdWUsIHsgZnVuY3Rpb25IYW5kbGluZ01vZGU6IEZ1bmN0aW9uSGFuZGxpbmdNb2RlLkZ1bGwgfSk7XG4gICAgICAgICAgaWYgKGNvbnRlbnRzLmluY2x1ZGVzKGB2YXIgJHt2YXJpYWJsZX1gKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRlbnRzID0gYHZhciAke3ZhcmlhYmxlfSA9IGdsb2JhbFRoaXNbJyR7a2V5fSddID8/ICR7dmFsdWVTdHJ9O1xcbiR7Y29udGVudHN9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhBQ0s6IFRoZSAkeycnfSBwYXJ0IGlzIHVzZWQgdG8gZW5zdXJlIE9ic2lkaWFuIGxvYWRzIHRoZSBwbHVnaW4gcHJvcGVybHksXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgc3RvcHMgbG9hZGluZyBhZnRlciB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlTWFwcGluZ1VSTCBjb21tZW50LlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nXG4gICAgICAgIGNvbnRlbnRzID0gcmVwbGFjZUFsbChjb250ZW50cywgL2BcXHI/XFxuXFwvXFwvIyBzb3VyY2VNYXBwaW5nVVJML2csICdgXFxuLy8jJHtcXCdcXCd9IHNvdXJjZU1hcHBpbmdVUkwnKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzLFxuICAgICAgICAgIGxvYWRlcjogJ3RzJ1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0Q2pzKCk6IHZvaWQge1xuICBjb25zdCBnbG9iYWxUaGlzUmVjb3JkID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIEdlbmVyaWNPYmplY3Q7XG4gIGdsb2JhbFRoaXNSZWNvcmRbJ19fbmFtZSddID8/PSBuYW1lO1xuICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSByZXF1aXJlIGFzIChOb2RlSlMuUmVxdWlyZSAmIFBhcnRpYWw8UmVxdWlyZVBhdGNoZWQ+IHwgdW5kZWZpbmVkKTtcbiAgaWYgKG9yaWdpbmFsUmVxdWlyZSAmJiAhb3JpZ2luYWxSZXF1aXJlLl9faXNQYXRjaGVkKSB7XG4gICAgcmVxdWlyZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAoaWQ6IHN0cmluZykgPT4gcmVxdWlyZVBhdGNoZWQoaWQpLFxuICAgICAgb3JpZ2luYWxSZXF1aXJlLFxuICAgICAge1xuICAgICAgICBfX2lzUGF0Y2hlZDogdHJ1ZVxuICAgICAgfVxuICAgICkgYXMgUmVxdWlyZVBhdGNoZWQ7XG4gIH1cblxuICBjb25zdCBuZXdGdW5jczogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj4gPSB7XG4gICAgX19leHRyYWN0RGVmYXVsdDogKCkgPT4gZXh0cmFjdERlZmF1bHQsXG4gICAgcHJvY2VzczogKCkgPT4ge1xuICAgICAgY29uc3QgYnJvd3NlclByb2Nlc3M6IEJyb3dzZXJQcm9jZXNzID0ge1xuICAgICAgICBicm93c2VyOiB0cnVlLFxuICAgICAgICBjd2Q6ICgpID0+ICcvJyxcbiAgICAgICAgZW52OiB7fSxcbiAgICAgICAgcGxhdGZvcm06ICdhbmRyb2lkJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiBicm93c2VyUHJvY2VzcztcbiAgICB9XG4gIH07XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobmV3RnVuY3MpKSB7XG4gICAgZ2xvYmFsVGhpc1JlY29yZFtrZXldID8/PSBuZXdGdW5jc1trZXldPy4oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hbWUob2JqOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dHJhY3REZWZhdWx0KG1vZHVsZTogUGFydGlhbDxFc21Nb2R1bGU+IHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgcmV0dXJuIG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSAmJiAnZGVmYXVsdCcgaW4gbW9kdWxlID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG4gIH1cblxuICBmdW5jdGlvbiByZXF1aXJlUGF0Y2hlZChpZDogc3RyaW5nKTogdW5rbm93biB7XG4gICAgY29uc3QgbW9kdWxlID0gb3JpZ2luYWxSZXF1aXJlPy4oaWQpIGFzIChQYXJ0aWFsPEVzbU1vZHVsZT4gfCB1bmRlZmluZWQpO1xuICAgIGlmIChtb2R1bGUpIHtcbiAgICAgIHJldHVybiBleHRyYWN0RGVmYXVsdChtb2R1bGUpO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gJ3Byb2Nlc3MnIHx8IGlkID09PSAnbm9kZTpwcm9jZXNzJykge1xuICAgICAgY29uc29sZS5lcnJvcihgTW9kdWxlIG5vdCBmb3VuZDogJHtpZH0uIEZha2UgcHJvY2VzcyBvYmplY3QgaXMgcmV0dXJuZWQgaW5zdGVhZC5gKTtcbiAgICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihgTW9kdWxlIG5vdCBmb3VuZDogJHtpZH0uIEVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBpbnN0ZWFkLmApO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RXNtKCk6IHZvaWQge1xuICBpZiAoKGdsb2JhbFRoaXMucHJvY2VzcyBhcyBOb2RlSlMuUHJvY2VzcyB8IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBicm93c2VyUHJvY2VzczogQnJvd3NlclByb2Nlc3MgPSB7XG4gICAgYnJvd3NlcjogdHJ1ZSxcbiAgICBjd2Q6ICgpID0+ICcvJyxcbiAgICBlbnY6IHt9LFxuICAgIHBsYXRmb3JtOiAnYW5kcm9pZCdcbiAgfTtcbiAgZ2xvYmFsVGhpcy5wcm9jZXNzID0gYnJvd3NlclByb2Nlc3MgYXMgTm9kZUpTLlByb2Nlc3M7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSx5QkFHTztBQUNQLG9CQUdPO0FBQ1AseUJBQXlCO0FBMEJsQixTQUFTLGlCQUFpQixPQUF5QjtBQUN4RCxRQUFNLGVBQWUsUUFDakIsQ0FBQyxJQUNEO0FBQUEsSUFDQSxLQUFDLDBCQUFXLDJCQUEyQixTQUFTLEdBQUcsQ0FBQyxHQUFHLE1BQWM7QUFDbkUsVUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxjQUFNLGVBQWU7QUFDckIsY0FBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxlQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxNQUN2QztBQUVBLFVBQUksT0FBTyxXQUFXLGFBQWE7QUFDakMsZUFBTyxPQUFPLFNBQVM7QUFBQSxNQUN6QjtBQUdBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVGLFNBQU87QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLE1BQU0sT0FBYTtBQUNqQixZQUFNLGVBQWUsV0FBVyxDQUFDO0FBRWpDLGlCQUFXLE9BQU8sT0FBTyxLQUFLLFlBQVksR0FBRztBQUMzQyxjQUFNLGVBQWUsT0FBTyxHQUFHLElBQUksU0FBSyxxQ0FBc0IsR0FBRyxDQUFDO0FBQUEsTUFDcEU7QUFFQSxZQUFNLGVBQWUsV0FBVyxDQUFDO0FBQ2pDLFlBQU0sZUFBZSxPQUFPLElBQUksTUFBTTtBQUN0QyxZQUFNLGVBQWUsT0FBTyxJQUFJLEtBQUs7QUFBQSxHQUFNLE9BQU8sUUFBUSxVQUFVLE9BQU8sQ0FBQztBQUFBO0FBRTVFLFlBQU0sT0FBTyxFQUFFLFFBQVEsK0JBQStCLEdBQUcsT0FBTyxTQUFTO0FBQ3ZFLFlBQUksV0FBVyxVQUFNLDZCQUFTLEtBQUssTUFBTSxPQUFPO0FBRWhELG1CQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFlBQVksR0FBRztBQUN2RCxnQkFBTSxXQUFXLFNBQUsscUNBQXNCLEdBQUcsQ0FBQztBQUNoRCxjQUFJLENBQUMsU0FBUyxTQUFTLEdBQUcsR0FBRztBQUMzQjtBQUFBLFVBQ0Y7QUFDQSxnQkFBTSxXQUFXLE9BQU8sVUFBVSxhQUFhLElBQUksT0FBTyxLQUFLLENBQUMsWUFBUSwyQkFBTyxPQUFPLEVBQUUsc0JBQXNCLHdDQUFxQixLQUFLLENBQUM7QUFDekksY0FBSSxTQUFTLFNBQVMsT0FBTyxRQUFRLEVBQUUsR0FBRztBQUN4QztBQUFBLFVBQ0Y7QUFDQSxxQkFBVyxPQUFPLFFBQVEsa0JBQWtCLEdBQUcsU0FBUyxRQUFRO0FBQUEsRUFBTSxRQUFRO0FBQUEsUUFDaEY7QUFLQSx1QkFBVywwQkFBVyxVQUFVLGlDQUFpQyw4QkFBZ0M7QUFFakcsZUFBTztBQUFBLFVBQ0w7QUFBQSxVQUNBLFFBQVE7QUFBQSxRQUNWO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsVUFBZ0I7QUFDdkIsUUFBTSxtQkFBbUI7QUFDekIsbUJBQWlCLFFBQVEsTUFBTTtBQUMvQixRQUFNLGtCQUFrQjtBQUN4QixNQUFJLG1CQUFtQixDQUFDLGdCQUFnQixhQUFhO0FBQ25ELGNBQVUsT0FBTztBQUFBLE1BQ2YsQ0FBQyxPQUFlLGVBQWUsRUFBRTtBQUFBLE1BQ2pDO0FBQUEsTUFDQTtBQUFBLFFBQ0UsYUFBYTtBQUFBLE1BQ2Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sV0FBMEM7QUFBQSxJQUM5QyxrQkFBa0IsTUFBTTtBQUFBLElBQ3hCLFNBQVMsTUFBTTtBQUNiLFlBQU0saUJBQWlDO0FBQUEsUUFDckMsU0FBUztBQUFBLFFBQ1QsS0FBSyxNQUFNO0FBQUEsUUFDWCxLQUFLLENBQUM7QUFBQSxRQUNOLFVBQVU7QUFBQSxNQUNaO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsYUFBVyxPQUFPLE9BQU8sS0FBSyxRQUFRLEdBQUc7QUFDdkMscUJBQWlCLEdBQUcsTUFBTSxTQUFTLEdBQUcsSUFBSTtBQUFBLEVBQzVDO0FBRUEsV0FBUyxLQUFLLEtBQXVCO0FBQ25DLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxlQUFlQSxTQUFpRDtBQUN2RSxXQUFPQSxXQUFVQSxRQUFPLGNBQWMsYUFBYUEsVUFBU0EsUUFBTyxVQUFVQTtBQUFBLEVBQy9FO0FBRUEsV0FBUyxlQUFlLElBQXFCO0FBQzNDLFVBQU1BLFVBQVMsa0JBQWtCLEVBQUU7QUFDbkMsUUFBSUEsU0FBUTtBQUNWLGFBQU8sZUFBZUEsT0FBTTtBQUFBLElBQzlCO0FBRUEsUUFBSSxPQUFPLGFBQWEsT0FBTyxnQkFBZ0I7QUFDN0MsY0FBUSxNQUFNLHFCQUFxQixFQUFFLDRDQUE0QztBQUNqRixhQUFPLFdBQVc7QUFBQSxJQUNwQjtBQUVBLFlBQVEsTUFBTSxxQkFBcUIsRUFBRSxxQ0FBcUM7QUFDMUUsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNGO0FBRUEsU0FBUyxVQUFnQjtBQUN2QixNQUFLLFdBQVcsU0FBd0M7QUFDdEQ7QUFBQSxFQUNGO0FBRUEsUUFBTSxpQkFBaUM7QUFBQSxJQUNyQyxTQUFTO0FBQUEsSUFDVCxLQUFLLE1BQU07QUFBQSxJQUNYLEtBQUssQ0FBQztBQUFBLElBQ04sVUFBVTtBQUFBLEVBQ1o7QUFDQSxhQUFXLFVBQVU7QUFDdkI7IiwKICAibmFtZXMiOiBbIm1vZHVsZSJdCn0K