obsidian-typings
Version:
Extended type definitions for the Obsidian API (https://obsidian.md)
377 lines (356 loc) • 35.4 kB
JavaScript
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
*/
;
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);
// src/obsidian/implementations/index.ts
var index_exports = {};
__export(index_exports, {
CustomArrayDictImpl: () => CustomArrayDictImpl,
FileExtension: () => FileExtension,
InternalPluginName: () => InternalPluginName,
ViewType: () => ViewType,
createTFileInstance: () => createTFileInstance,
createTFolderInstance: () => createTFolderInstance,
getAppConstructor: () => getAppConstructor,
getInternalPluginConstructor: () => getInternalPluginConstructor,
getInternalPluginsConstructor: () => getInternalPluginsConstructor,
getTFileConstructor: () => getTFileConstructor,
getTFolderConstructor: () => getTFolderConstructor,
getViewConstructorByViewType: () => getViewConstructorByViewType,
isEmbedCache: () => isEmbedCache,
isFrontmatterLinkCache: () => isFrontmatterLinkCache,
isLinkCache: () => isLinkCache,
isReferenceCache: () => isReferenceCache,
parentFolderPath: () => parentFolderPath
});
module.exports = __toCommonJS(index_exports);
// src/obsidian/implementations/Classes/CustomArrayDictImpl.ts
var CustomArrayDictImpl = class {
data = /* @__PURE__ */ new Map();
add(key, value) {
let values = this.get(key);
if (!values) {
values = [];
this.data.set(key, values);
}
if (!values.includes(value)) {
values.push(value);
}
}
remove(key, value) {
const values = this.get(key);
if (!values) {
return;
}
values.remove(value);
if (values.length === 0) {
this.clear(key);
}
}
get(key) {
return this.data.get(key) || null;
}
keys() {
return Array.from(this.data.keys());
}
clear(key) {
this.data.delete(key);
}
clearAll() {
this.data.clear();
}
contains(key, value) {
return !!this.get(key)?.contains(value);
}
count() {
let ans = 0;
for (const key of this.keys()) {
ans += this.get(key)?.length ?? 0;
}
return ans;
}
};
// src/obsidian/implementations/Constants/FileExtension.ts
var FileExtension = {
_3gp: "3gp",
avif: "avif",
bmp: "bmp",
canvas: "canvas",
flac: "flac",
gif: "gif",
jpeg: "jpeg",
jpg: "jpg",
m4a: "m4a",
md: "md",
mkv: "mkv",
mov: "mov",
mp3: "mp3",
mp4: "mp4",
oga: "oga",
ogg: "ogg",
ogv: "ogv",
opus: "opus",
pdf: "pdf",
png: "png",
svg: "svg",
wav: "wav",
webm: "webm",
webp: "webp"
};
// src/obsidian/implementations/Constants/InternalPluginName.ts
var InternalPluginName = {
/**
* Plugin name in UI: Audio recorder.
*/
AudioRecorder: "audio-recorder",
/**
* Plugin name in UI: Backlinks.
*/
Backlink: "backlink",
/**
* Plugin name in UI: Bases.
*/
Bases: "bases",
/**
* Plugin name in UI: Bookmarks.
*/
Bookmarks: "bookmarks",
/**
* Plugin name in UI: Canvas.
*/
Canvas: "canvas",
/**
* Plugin name in UI: Command palette.
*/
CommandPalette: "command-palette",
/**
* Plugin name in UI: Daily notes.
*/
DailyNotes: "daily-notes",
/**
* Plugin name in UI: (hidden).
*/
EditorStatus: "editor-status",
/**
* Plugin name in UI: Files.
*/
FileExplorer: "file-explorer",
/**
* Plugin name in UI: File recovery.
*/
FileRecovery: "file-recovery",
/**
* Plugin name in UI: Footnotes.
*/
Footnotes: "footnotes",
/**
* Plugin name in UI: Search.
*/
GlobalSearch: "global-search",
/**
* Plugin name in UI: Graph view.
*/
Graph: "graph",
/**
* Plugin name in UI: Format converter.
*/
MarkdownImporter: "markdown-importer",
/**
* Plugin name in UI: Note composer.
*/
NoteComposer: "note-composer",
/**
* Plugin name in UI: Outgoing links.
*/
OutgoingLink: "outgoing-link",
/**
* Plugin name in UI: Outline.
*/
Outline: "outline",
/**
* Plugin name in UI: Page preview.
*/
PagePreview: "page-preview",
/**
* Plugin name in UI: Properties view.
*/
Properties: "properties",
/**
* Plugin name in UI: Publish.
*/
Publish: "publish",
/**
* Plugin name in UI: Random note.
*/
RandomNote: "random-note",
/**
* Plugin name in UI: Slash commands.
*/
SlashCommand: "slash-command",
/**
* Plugin name in UI: Slides.
*/
Slides: "slides",
/**
* Plugin name in UI: Quick Switcher.
*/
Switcher: "switcher",
/**
* Plugin name in UI: Sync.
*/
Sync: "sync",
/**
* Plugin name in UI: Tags view.
*/
TagPane: "tag-pane",
/**
* Plugin name in UI: Templates.
*/
Templates: "templates",
/**
* Plugin name in UI: Web viewer.
*/
Webviewer: "webviewer",
/**
* Plugin name in UI: Word count.
*/
WordCount: "word-count",
/**
* Plugin name in UI: Workspaces.
*/
Workspaces: "workspaces",
/**
* Plugin name in UI: Unique note creator.
*/
ZkPrefixer: "zk-prefixer"
};
// src/obsidian/implementations/Constants/ViewType.ts
var ViewType = {
AllProperties: "all-properties",
Audio: "audio",
Backlink: InternalPluginName.Backlink,
Bookmarks: InternalPluginName.Bookmarks,
Canvas: InternalPluginName.Canvas,
Empty: "empty",
FileExplorer: InternalPluginName.FileExplorer,
FileProperties: "file-properties",
Graph: InternalPluginName.Graph,
Image: "image",
LocalGraph: "localgraph",
Markdown: "markdown",
OutgoingLink: InternalPluginName.OutgoingLink,
Outline: InternalPluginName.Outline,
Pdf: "pdf",
ReleaseNotes: "release-notes",
Search: "search",
Sync: "sync",
Table: "table",
Tag: "tag",
Video: "video",
Webviewer: "webviewer",
WebviewerHistory: "webviewer-history"
};
// src/obsidian/implementations/Constructors/getAppConstructor.ts
var import_obsidian = require("obsidian");
function getAppConstructor() {
return import_obsidian.App;
}
// src/obsidian/implementations/Constructors/getInternalPluginConstructor.ts
function getInternalPluginConstructor(app) {
const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
if (!anyPlugin) {
throw new Error("No internal plugin found");
}
return anyPlugin.constructor;
}
// src/obsidian/implementations/Constructors/getInternalPluginsConstructor.ts
function getInternalPluginsConstructor(app) {
return app.internalPlugins.constructor;
}
// src/obsidian/implementations/Constructors/getTFileConstructor.ts
var import_obsidian2 = require("obsidian");
function getTFileConstructor() {
return import_obsidian2.TFile;
}
// src/obsidian/implementations/Constructors/getTFolderConstructor.ts
var import_obsidian3 = require("obsidian");
function getTFolderConstructor() {
return import_obsidian3.TFolder;
}
// src/obsidian/implementations/Constructors/getViewConstructorByViewType.ts
function getViewConstructorByViewType(app, viewType) {
const leaf = app.workspace.createLeafInTabGroup();
try {
const viewCreator = app.viewRegistry.getViewCreatorByType(viewType);
if (!viewCreator) {
throw new Error("View creator not found");
}
const view = viewCreator(leaf);
return view.constructor;
} finally {
leaf.detach();
}
}
// src/obsidian/implementations/Functions/createTFileInstance.ts
var import_obsidian5 = require("obsidian");
// src/obsidian/implementations/Utils/PathUtils.ts
function parentFolderPath(path) {
return path.replace(/\/?[^\/]*$/, "") || "/";
}
// src/obsidian/implementations/Functions/createTFolderInstance.ts
var import_obsidian4 = require("obsidian");
function createTFolderInstance(app, path) {
let folder = app.vault.getFolderByPath(path);
if (folder) {
return folder;
}
folder = new (getTFolderConstructor())(app.vault, path);
folder.parent = createTFolderInstance(app, parentFolderPath(path));
folder.deleted = true;
return folder;
}
// src/obsidian/implementations/Functions/createTFileInstance.ts
function createTFileInstance(app, path) {
let file = app.vault.getFileByPath(path);
if (file) {
return file;
}
file = new (getTFileConstructor())(app.vault, path);
file.parent = createTFolderInstance(app, parentFolderPath(path));
file.deleted = true;
return file;
}
// src/obsidian/implementations/TypeGuards/isReferenceCache.ts
function isReferenceCache(reference) {
return !!reference.position;
}
// src/obsidian/implementations/TypeGuards/isEmbedCache.ts
function isEmbedCache(reference) {
return isReferenceCache(reference) && reference.original[0] === "!";
}
// src/obsidian/implementations/TypeGuards/isFrontmatterLinkCache.ts
function isFrontmatterLinkCache(reference) {
return !!reference.key;
}
// src/obsidian/implementations/TypeGuards/isLinkCache.ts
function isLinkCache(reference) {
return isReferenceCache(reference) && reference.original[0] !== "!";
}
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1V0aWxzL1BhdGhVdGlscy50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9UeXBlR3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9UeXBlR3VhcmRzL2lzRW1iZWRDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNMaW5rQ2FjaGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL0Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlR3VhcmRzL2lzRW1iZWRDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNMaW5rQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlR3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9VdGlscy9QYXRoVXRpbHMudHMnO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuLi8uLi9pbmRleC5kLnRzJztcbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbUFycmF5RGljdCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db2xsZWN0aW9ucy9DdXN0b21BcnJheURpY3QuZC50cyc7XG5cbi8qKlxuICogQHRvZG8gRG9jdW1lbnRhdGlvbiBpbmNvbXBsZXRlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21BcnJheURpY3RJbXBsPFQ+IGltcGxlbWVudHMgQ3VzdG9tQXJyYXlEaWN0PFQ+IHtcbiAgICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgVFtdPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBhZGQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLmdldChrZXkpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGtleSwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMucmVtb3ZlKHZhbHVlKTtcblxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcihrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IFRbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldChrZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGEua2V5cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRhLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnRhaW5zKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldChrZXkpPy5jb250YWlucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBhbnMgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmtleXMoKSkge1xuICAgICAgICAgICAgYW5zICs9IHRoaXMuZ2V0KGtleSk/Lmxlbmd0aCA/PyAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG59XG4iLCAiLyoqXG4gKiBAdG9kbyBEb2N1bWVudGF0aW9uIGluY29tcGxldGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gICAgXzNncDogJzNncCcsXG4gICAgYXZpZjogJ2F2aWYnLFxuICAgIGJtcDogJ2JtcCcsXG4gICAgY2FudmFzOiAnY2FudmFzJyxcbiAgICBmbGFjOiAnZmxhYycsXG4gICAgZ2lmOiAnZ2lmJyxcbiAgICBqcGVnOiAnanBlZycsXG4gICAganBnOiAnanBnJyxcbiAgICBtNGE6ICdtNGEnLFxuICAgIG1kOiAnbWQnLFxuICAgIG1rdjogJ21rdicsXG4gICAgbW92OiAnbW92JyxcbiAgICBtcDM6ICdtcDMnLFxuICAgIG1wNDogJ21wNCcsXG4gICAgb2dhOiAnb2dhJyxcbiAgICBvZ2c6ICdvZ2cnLFxuICAgIG9ndjogJ29ndicsXG4gICAgb3B1czogJ29wdXMnLFxuICAgIHBkZjogJ3BkZicsXG4gICAgcG5nOiAncG5nJyxcbiAgICBzdmc6ICdzdmcnLFxuICAgIHdhdjogJ3dhdicsXG4gICAgd2VibTogJ3dlYm0nLFxuICAgIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICIvKipcbiAqIEB0b2RvIERvY3VtZW50YXRpb24gaW5jb21wbGV0ZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgSW50ZXJuYWxQbHVnaW5OYW1lID0ge1xuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBBdWRpbyByZWNvcmRlci5cbiAgICAgKi9cbiAgICBBdWRpb1JlY29yZGVyOiAnYXVkaW8tcmVjb3JkZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3MuXG4gICAgICovXG4gICAgQmFja2xpbms6ICdiYWNrbGluaycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEJhc2VzLlxuICAgICAqL1xuICAgIEJhc2VzOiAnYmFzZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCb29rbWFya3MuXG4gICAgICovXG4gICAgQm9va21hcmtzOiAnYm9va21hcmtzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzLlxuICAgICAqL1xuICAgIENhbnZhczogJ2NhbnZhcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IENvbW1hbmQgcGFsZXR0ZS5cbiAgICAgKi9cbiAgICBDb21tYW5kUGFsZXR0ZTogJ2NvbW1hbmQtcGFsZXR0ZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IERhaWx5IG5vdGVzLlxuICAgICAqL1xuICAgIERhaWx5Tm90ZXM6ICdkYWlseS1ub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pLlxuICAgICAqL1xuICAgIEVkaXRvclN0YXR1czogJ2VkaXRvci1zdGF0dXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlcy5cbiAgICAgKi9cbiAgICBGaWxlRXhwbG9yZXI6ICdmaWxlLWV4cGxvcmVyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRmlsZSByZWNvdmVyeS5cbiAgICAgKi9cbiAgICBGaWxlUmVjb3Zlcnk6ICdmaWxlLXJlY292ZXJ5JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9vdG5vdGVzLlxuICAgICAqL1xuICAgIEZvb3Rub3RlczogJ2Zvb3Rub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNlYXJjaC5cbiAgICAgKi9cbiAgICBHbG9iYWxTZWFyY2g6ICdnbG9iYWwtc2VhcmNoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogR3JhcGggdmlldy5cbiAgICAgKi9cbiAgICBHcmFwaDogJ2dyYXBoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlci5cbiAgICAgKi9cbiAgICBNYXJrZG93bkltcG9ydGVyOiAnbWFya2Rvd24taW1wb3J0ZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBOb3RlIGNvbXBvc2VyLlxuICAgICAqL1xuICAgIE5vdGVDb21wb3NlcjogJ25vdGUtY29tcG9zZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBPdXRnb2luZyBsaW5rcy5cbiAgICAgKi9cbiAgICBPdXRnb2luZ0xpbms6ICdvdXRnb2luZy1saW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZS5cbiAgICAgKi9cbiAgICBPdXRsaW5lOiAnb3V0bGluZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFBhZ2UgcHJldmlldy5cbiAgICAgKi9cbiAgICBQYWdlUHJldmlldzogJ3BhZ2UtcHJldmlldycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFByb3BlcnRpZXMgdmlldy5cbiAgICAgKi9cbiAgICBQcm9wZXJ0aWVzOiAncHJvcGVydGllcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2guXG4gICAgICovXG4gICAgUHVibGlzaDogJ3B1Ymxpc2gnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBSYW5kb20gbm90ZS5cbiAgICAgKi9cbiAgICBSYW5kb21Ob3RlOiAncmFuZG9tLW5vdGUnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTbGFzaCBjb21tYW5kcy5cbiAgICAgKi9cbiAgICBTbGFzaENvbW1hbmQ6ICdzbGFzaC1jb21tYW5kJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzLlxuICAgICAqL1xuICAgIFNsaWRlczogJ3NsaWRlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFF1aWNrIFN3aXRjaGVyLlxuICAgICAqL1xuICAgIFN3aXRjaGVyOiAnc3dpdGNoZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTeW5jLlxuICAgICAqL1xuICAgIFN5bmM6ICdzeW5jJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3LlxuICAgICAqL1xuICAgIFRhZ1BhbmU6ICd0YWctcGFuZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFRlbXBsYXRlcy5cbiAgICAgKi9cbiAgICBUZW1wbGF0ZXM6ICd0ZW1wbGF0ZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXZWIgdmlld2VyLlxuICAgICAqL1xuICAgIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmQgY291bnQuXG4gICAgICovXG4gICAgV29yZENvdW50OiAnd29yZC1jb3VudCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmtzcGFjZXMuXG4gICAgICovXG4gICAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBVbmlxdWUgbm90ZSBjcmVhdG9yLlxuICAgICAqL1xuICAgIFprUHJlZml4ZXI6ICd6ay1wcmVmaXhlcidcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi9JbnRlcm5hbFBsdWdpbk5hbWUudHMnO1xuXG4vKipcbiAqIEB0b2RvIERvY3VtZW50YXRpb24gaW5jb21wbGV0ZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gICAgQWxsUHJvcGVydGllczogJ2FsbC1wcm9wZXJ0aWVzJyxcbiAgICBBdWRpbzogJ2F1ZGlvJyxcbiAgICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICAgIEJvb2ttYXJrczogSW50ZXJuYWxQbHVnaW5OYW1lLkJvb2ttYXJrcyxcbiAgICBDYW52YXM6IEludGVybmFsUGx1Z2luTmFtZS5DYW52YXMsXG4gICAgRW1wdHk6ICdlbXB0eScsXG4gICAgRmlsZUV4cGxvcmVyOiBJbnRlcm5hbFBsdWdpbk5hbWUuRmlsZUV4cGxvcmVyLFxuICAgIEZpbGVQcm9wZXJ0aWVzOiAnZmlsZS1wcm9wZXJ0aWVzJyxcbiAgICBHcmFwaDogSW50ZXJuYWxQbHVnaW5OYW1lLkdyYXBoLFxuICAgIEltYWdlOiAnaW1hZ2UnLFxuICAgIExvY2FsR3JhcGg6ICdsb2NhbGdyYXBoJyxcbiAgICBNYXJrZG93bjogJ21hcmtkb3duJyxcbiAgICBPdXRnb2luZ0xpbms6IEludGVybmFsUGx1Z2luTmFtZS5PdXRnb2luZ0xpbmssXG4gICAgT3V0bGluZTogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGxpbmUsXG4gICAgUGRmOiAncGRmJyxcbiAgICBSZWxlYXNlTm90ZXM6ICdyZWxlYXNlLW5vdGVzJyxcbiAgICBTZWFyY2g6ICdzZWFyY2gnLFxuICAgIFN5bmM6ICdzeW5jJyxcbiAgICBUYWJsZTogJ3RhYmxlJyxcbiAgICBUYWc6ICd0YWcnLFxuICAgIFZpZGVvOiAndmlkZW8nLFxuICAgIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gICAgV2Vidmlld2VySGlzdG9yeTogJ3dlYnZpZXdlci1oaXN0b3J5J1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEFwcENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9BcHBDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBBcHAgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEFwcCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwQ29uc3RydWN0b3IoKTogQXBwQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBBcHAgYXMgQXBwQ29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0ludGVybmFsUGx1Z2luQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+KGFwcDogQXBwKTogSW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3RvcjxJbnN0YW5jZT4ge1xuICAgIGNvbnN0IGFueVBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zKVswXTtcbiAgICBpZiAoIWFueVBsdWdpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGludGVybmFsIHBsdWdpbiBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYW55UGx1Z2luLmNvbnN0cnVjdG9yIGFzIEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW5zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIEludGVybmFsUGx1Z2lucyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IoYXBwOiBBcHApOiBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGFwcC5pbnRlcm5hbFBsdWdpbnMuY29uc3RydWN0b3IgYXMgSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHtcbiAgICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1RGaWxlQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVEZpbGUgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFRGaWxlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRURmlsZUNvbnN0cnVjdG9yKCk6IFRGaWxlQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBURmlsZSBhcyBURmlsZUNvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB7XG4gICAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRGb2xkZXJDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVEZvbGRlckNvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFRGb2xkZXIgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFRGb2xkZXIgY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGb2xkZXJDb25zdHJ1Y3RvcigpOiBURm9sZGVyQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBURm9sZGVyIGFzIFRGb2xkZXJDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL1ZpZXdUeXBlVHlwZS5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVWaWV3Q29uc3RydWN0b3JNYXBwaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL1ZpZXdUeXBlVmlld0NvbnN0cnVjdG9yTWFwcGluZy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHZpZXcgY29uc3RydWN0b3IgYnkgdmlldyB0eXBlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHBhcmFtIHZpZXdUeXBlIC0gVGhlIHZpZXcgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSB2aWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlPFRWaWV3VHlwZSBleHRlbmRzIFZpZXdUeXBlVHlwZT4oXG4gICAgYXBwOiBBcHAsXG4gICAgdmlld1R5cGU6IFRWaWV3VHlwZVxuKTogVmlld1R5cGVWaWV3Q29uc3RydWN0b3JNYXBwaW5nW1RWaWV3VHlwZV0ge1xuICAgIGNvbnN0IGxlYWYgPSBhcHAud29ya3NwYWNlLmNyZWF0ZUxlYWZJblRhYkdyb3VwKCk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgdmlld0NyZWF0b3IgPSBhcHAudmlld1JlZ2lzdHJ5LmdldFZpZXdDcmVhdG9yQnlUeXBlKHZpZXdUeXBlKTtcbiAgICAgICAgaWYgKCF2aWV3Q3JlYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3IGNyZWF0b3Igbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmlldyA9IHZpZXdDcmVhdG9yKGxlYWYpO1xuICAgICAgICByZXR1cm4gdmlldy5jb25zdHJ1Y3RvciBhcyBWaWV3VHlwZVZpZXdDb25zdHJ1Y3Rvck1hcHBpbmdbVFZpZXdUeXBlXTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBsZWFmLmRldGFjaCgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQge1xuICAgIHR5cGUgQXBwLFxuICAgIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi4vVXRpbHMvUGF0aFV0aWxzLnRzJztcbmltcG9ydCB7IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSB9IGZyb20gJy4vY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgaW5zdGFuY2Ugb2YgVEZpbGUgZXZlbiB0aGUgdW5kZXJseWluZyBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmaWxlIG9uIHRoZSBmaWxlIHN5c3RlbS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZpbGVJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZpbGUge1xuICAgIGxldCBmaWxlID0gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfVxuXG4gICAgZmlsZSA9IG5ldyAoZ2V0VEZpbGVDb25zdHJ1Y3RvcigpKShhcHAudmF1bHQsIHBhdGgpO1xuICAgIGZpbGUucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gICAgZmlsZS5kZWxldGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZmlsZTtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50Rm9sZGVyUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLz9bXlxcL10qJC8sICcnKSB8fCAnLyc7XG59XG4iLCAiaW1wb3J0IHtcbiAgICB0eXBlIEFwcCxcbiAgICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGdldFRGb2xkZXJDb25zdHJ1Y3RvciB9IGZyb20gJy4uL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgcGFyZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4uL1V0aWxzL1BhdGhVdGlscy50cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlIG9mIFRGb2xkZXIgZXZlbiB0aGUgdW5kZXJseWluZyBmb2xkZXIgZG9lcyBub3QgZXhpc3QuXG4gKiBUaGlzIGRvZXNuJ3QgY3JlYXRlIHRoZSBtaXNzaW5nIGZvbGRlciBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogVEZvbGRlciB7XG4gICAgbGV0IGZvbGRlciA9IGFwcC52YXVsdC5nZXRGb2xkZXJCeVBhdGgocGF0aCk7XG4gICAgaWYgKGZvbGRlcikge1xuICAgICAgICByZXR1cm4gZm9sZGVyO1xuICAgIH1cblxuICAgIGZvbGRlciA9IG5ldyAoZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gICAgZm9sZGVyLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICAgIGZvbGRlci5kZWxldGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZm9sZGVyO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBSZWZlcmVuY2UsXG4gICAgUmVmZXJlbmNlQ2FjaGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSByZWZlcmVuY2UgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSByZWZlcmVuY2UgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUmVmZXJlbmNlQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBFbWJlZENhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtYmVkQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRW1iZWRDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gPT09ICchJztcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUsXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckxpbmtDYWNoZT4pLmtleTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgTGlua0NhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gIT09ICchJztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDUU8sSUFBTSxzQkFBTixNQUEyRDtBQUFBLEVBQ3ZELE9BQXlCLG9CQUFJLElBQUk7QUFBQSxFQUVqQyxJQUFJLEtBQWEsT0FBZ0I7QUFDcEMsUUFB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QUFNLGNBQWMsSUFBSTtBQUN2QyxNQUFJLE1BQU07QUFDTixXQUFPO0FBQUEsRUFDWDtBQUVBLFNBQU8sS0FBSyxvQkFBb0IsR0FBRyxJQUFJLE9BQU8sSUFBSTtBQUNsRCxPQUFLLFNBQVMsc0JBQXNCLEtBQUssaUJBQWlCLElBQUksQ0FBQztBQUMvRCxPQUFLLFVBQVU7QUFDZixTQUFPO0FBQ1g7OztBR1hPLFNBQVMsaUJBQWlCLFdBQW1EO0FBQ2hGLFNBQU8sQ0FBQyxDQUFFLFVBQXNDO0FBQ3BEOzs7QUNETyxTQUFTLGFBQWEsV0FBK0M7QUFDeEUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDcEU7OztBQ0hPLFNBQVMsdUJBQXVCLFdBQXlEO0FBQzVGLFNBQU8sQ0FBQyxDQUFFLFVBQTRDO0FBQzFEOzs7QUNETyxTQUFTLFlBQVksV0FBOEM7QUFDdEUsU0FBTyxpQkFBaUIsU0FBUyxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQU07QUFDcEU7IiwKICAibmFtZXMiOiBbImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiJdCn0K