obsidian-dev-utils 89.0.0 → 90.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/integration-test-plugin/main.js +29 -15
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +9 -12
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +8 -5
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +14 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +8 -0
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +9 -6
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +5 -3
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +8 -5
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +9 -12
- package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +8 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +14 -1
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +5 -3
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +9 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -26526,10 +26526,23 @@ var CommandHandler = class {
|
|
|
26526
26526
|
* Called after the command has been registered with Obsidian.
|
|
26527
26527
|
* Subclasses use the provided context to register menu event handlers.
|
|
26528
26528
|
*
|
|
26529
|
+
* Throws when the same instance is registered twice. A handler stores per-registration state — the
|
|
26530
|
+
* plugin name here, the active-file provider and the submenu override in `AbstractFileCommandHandler`,
|
|
26531
|
+
* plus whatever a subclass records — and the menu closures registered here read that state lazily, at
|
|
26532
|
+
* menu-render time. So a second registration silently rewrites what the first registration's closures
|
|
26533
|
+
* will see. `CommandHandlerComponent` registers a handler set once per menu surface, which is why
|
|
26534
|
+
* `CommandHandlerFactory` must build FRESH instances on every call; this guard turns a factory that
|
|
26535
|
+
* hands out shared instances into a loud failure instead of a wrong context menu.
|
|
26536
|
+
*
|
|
26529
26537
|
* @param context - The registration context providing runtime capabilities.
|
|
26530
26538
|
*/
|
|
26531
26539
|
async onRegistered(context) {
|
|
26532
26540
|
await noopAsync();
|
|
26541
|
+
if (this._pluginName !== void 0) {
|
|
26542
|
+
throw new Error(
|
|
26543
|
+
`Command handler '${this.id}' is already registered. A command handler instance cannot be registered twice - the command handler factory must build fresh instances on every call.`
|
|
26544
|
+
);
|
|
26545
|
+
}
|
|
26533
26546
|
this._pluginName = context.pluginName;
|
|
26534
26547
|
}
|
|
26535
26548
|
};
|
|
@@ -27257,13 +27270,13 @@ var CommandHandlerComponent = class extends ComponentEx {
|
|
|
27257
27270
|
* @param commandHandlerFactory - Builds a fresh set of command handlers, once per menu surface.
|
|
27258
27271
|
* @returns A {@link DisposableEx} that unregisters the handlers (commands + menu events) registered by this call.
|
|
27259
27272
|
*/
|
|
27260
|
-
registerCommandHandlers(commandHandlerFactory) {
|
|
27273
|
+
async registerCommandHandlers(commandHandlerFactory) {
|
|
27261
27274
|
const disposables = [];
|
|
27262
27275
|
for (const commandHandler of commandHandlerFactory()) {
|
|
27263
27276
|
const command = commandHandler.buildCommand();
|
|
27264
27277
|
const commandId = command.id;
|
|
27265
27278
|
this.commandRegistrar.addCommand(command);
|
|
27266
|
-
const menuEventScope = this.registerMenuEventHandlers(commandHandler, this.menuEventRegistrar);
|
|
27279
|
+
const menuEventScope = await this.registerMenuEventHandlers({ commandHandler, menuEventRegistrar: this.menuEventRegistrar });
|
|
27267
27280
|
const disposable = new CallbackDisposable({
|
|
27268
27281
|
callback: () => {
|
|
27269
27282
|
this.commandRegistrar.removeCommand(commandId);
|
|
@@ -27274,7 +27287,7 @@ var CommandHandlerComponent = class extends ComponentEx {
|
|
|
27274
27287
|
}
|
|
27275
27288
|
for (const additionalMenuEventRegistrar of this.additionalMenuEventRegistrars) {
|
|
27276
27289
|
for (const commandHandler of commandHandlerFactory()) {
|
|
27277
|
-
disposables.push(this.registerDisposable(this.registerMenuEventHandlers(commandHandler, additionalMenuEventRegistrar, false)));
|
|
27290
|
+
disposables.push(this.registerDisposable(await this.registerMenuEventHandlers({ commandHandler, menuEventRegistrar: additionalMenuEventRegistrar, shouldAddCommandToSubmenu: false })));
|
|
27278
27291
|
}
|
|
27279
27292
|
}
|
|
27280
27293
|
return new CombineDisposable({ disposables });
|
|
@@ -27283,20 +27296,18 @@ var CommandHandlerComponent = class extends ComponentEx {
|
|
|
27283
27296
|
* Hands a command handler its registration context, scoped so that disposing the returned scope
|
|
27284
27297
|
* unregisters exactly the menu events that handler registered.
|
|
27285
27298
|
*
|
|
27286
|
-
* @param
|
|
27287
|
-
* @param menuEventRegistrar - The menu surface the handler registers its menu events with.
|
|
27288
|
-
* @param shouldAddCommandToSubmenu - Overrides the handler's own value, or `undefined` to leave it alone.
|
|
27299
|
+
* @param params - The parameters for this registration.
|
|
27289
27300
|
* @returns The handler's menu-event scope.
|
|
27290
27301
|
*/
|
|
27291
|
-
registerMenuEventHandlers(
|
|
27292
|
-
const menuEventScope = new CommandMenuEventScope(menuEventRegistrar);
|
|
27302
|
+
async registerMenuEventHandlers(params) {
|
|
27303
|
+
const menuEventScope = new CommandMenuEventScope(params.menuEventRegistrar);
|
|
27293
27304
|
const context = {
|
|
27294
27305
|
activeFileProvider: this.activeFileProvider,
|
|
27295
27306
|
menuEventRegistrar: menuEventScope,
|
|
27296
27307
|
pluginName: this.pluginName,
|
|
27297
|
-
shouldAddCommandToSubmenu
|
|
27308
|
+
shouldAddCommandToSubmenu: params.shouldAddCommandToSubmenu
|
|
27298
27309
|
};
|
|
27299
|
-
|
|
27310
|
+
await params.commandHandler.onRegistered(context);
|
|
27300
27311
|
return menuEventScope;
|
|
27301
27312
|
}
|
|
27302
27313
|
};
|
|
@@ -37405,8 +37416,9 @@ var PluginBase = class extends mixinAsyncEvents()(import_obsidian152.Plugin) {
|
|
|
37405
37416
|
/**
|
|
37406
37417
|
* Adds a child component.
|
|
37407
37418
|
*
|
|
37408
|
-
* The child is added to an internal wrapper component
|
|
37409
|
-
*
|
|
37419
|
+
* The child is added to an internal wrapper component, which {@link onload} attaches and loads
|
|
37420
|
+
* before wiring anything up. So a child added during {@link onloadImpl} is loaded immediately,
|
|
37421
|
+
* children-first, and is usable by the time this method returns.
|
|
37410
37422
|
*
|
|
37411
37423
|
* @typeParam TComponent - The type of component to add.
|
|
37412
37424
|
* @param component - The component instance to add.
|
|
@@ -37428,12 +37440,15 @@ var PluginBase = class extends mixinAsyncEvents()(import_obsidian152.Plugin) {
|
|
|
37428
37440
|
* Called when the plugin is loaded.
|
|
37429
37441
|
*
|
|
37430
37442
|
* Orchestrates loading: registers the universal components, lets the subclass wire its own
|
|
37431
|
-
* components via {@link onloadImpl}, then
|
|
37443
|
+
* components via {@link onloadImpl}, then awaits the async tail of every load.
|
|
37444
|
+
* Each component loads as it is added, children-first.
|
|
37432
37445
|
*
|
|
37433
37446
|
* Do NOT override this method. Override {@link onloadImpl} instead.
|
|
37434
37447
|
*/
|
|
37435
37448
|
async onload() {
|
|
37436
37449
|
try {
|
|
37450
|
+
super.addChild(this.wrapperComponent);
|
|
37451
|
+
this.wrapperComponent.load();
|
|
37437
37452
|
await initI18N(this.createTranslationsMap());
|
|
37438
37453
|
this.pluginContextComponent = this.addChild(
|
|
37439
37454
|
new PluginContextComponent({
|
|
@@ -37467,14 +37482,13 @@ var PluginBase = class extends mixinAsyncEvents()(import_obsidian152.Plugin) {
|
|
|
37467
37482
|
pluginName: this.manifest.name
|
|
37468
37483
|
})
|
|
37469
37484
|
);
|
|
37470
|
-
this.commandHandlerComponent.registerCommandHandlers(() => [
|
|
37485
|
+
await this.commandHandlerComponent.registerCommandHandlers(() => [
|
|
37471
37486
|
new UnlockActiveNoteCommandHandler({
|
|
37472
37487
|
app: this.app,
|
|
37473
37488
|
resourceLockComponent: this.resourceLockComponent
|
|
37474
37489
|
})
|
|
37475
37490
|
]);
|
|
37476
37491
|
await this.onloadImpl();
|
|
37477
|
-
super.addChild(this.wrapperComponent);
|
|
37478
37492
|
await this.wrapperComponent.loadWithPromises();
|
|
37479
37493
|
} catch (error) {
|
|
37480
37494
|
printError(new Error(`Error loading plugin ${this.manifest.name} (${this.manifest.id})`, { cause: error }));
|
|
@@ -125,7 +125,7 @@ __export(generated_during_build_exports, {
|
|
|
125
125
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
126
126
|
});
|
|
127
127
|
module.exports = __toCommonJS(generated_during_build_exports);
|
|
128
|
-
const LIBRARY_VERSION = "
|
|
128
|
+
const LIBRARY_VERSION = "90.0.1";
|
|
129
129
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-dev-utils.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-dev-utils.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-dev-utils.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-dev-utils.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACCJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
130
130
|
// Annotate the CommonJS export names for ESM import in node:
|
|
131
131
|
0 && (module.exports = {
|
|
@@ -124,7 +124,6 @@ __export(command_handler_component_exports, {
|
|
|
124
124
|
CommandHandlerComponent: () => CommandHandlerComponent
|
|
125
125
|
});
|
|
126
126
|
module.exports = __toCommonJS(command_handler_component_exports);
|
|
127
|
-
var import_async = require('../../async.cjs');
|
|
128
127
|
var import_disposable = require('../../disposable.cjs');
|
|
129
128
|
var import_component_ex = require('../components/component-ex.cjs');
|
|
130
129
|
class CommandMenuEventScope extends import_disposable.DisposableBase {
|
|
@@ -207,13 +206,13 @@ class CommandHandlerComponent extends import_component_ex.ComponentEx {
|
|
|
207
206
|
* @param commandHandlerFactory - Builds a fresh set of command handlers, once per menu surface.
|
|
208
207
|
* @returns A {@link DisposableEx} that unregisters the handlers (commands + menu events) registered by this call.
|
|
209
208
|
*/
|
|
210
|
-
registerCommandHandlers(commandHandlerFactory) {
|
|
209
|
+
async registerCommandHandlers(commandHandlerFactory) {
|
|
211
210
|
const disposables = [];
|
|
212
211
|
for (const commandHandler of commandHandlerFactory()) {
|
|
213
212
|
const command = commandHandler.buildCommand();
|
|
214
213
|
const commandId = command.id;
|
|
215
214
|
this.commandRegistrar.addCommand(command);
|
|
216
|
-
const menuEventScope = this.registerMenuEventHandlers(commandHandler, this.menuEventRegistrar);
|
|
215
|
+
const menuEventScope = await this.registerMenuEventHandlers({ commandHandler, menuEventRegistrar: this.menuEventRegistrar });
|
|
217
216
|
const disposable = new import_disposable.CallbackDisposable({
|
|
218
217
|
callback: () => {
|
|
219
218
|
this.commandRegistrar.removeCommand(commandId);
|
|
@@ -224,7 +223,7 @@ class CommandHandlerComponent extends import_component_ex.ComponentEx {
|
|
|
224
223
|
}
|
|
225
224
|
for (const additionalMenuEventRegistrar of this.additionalMenuEventRegistrars) {
|
|
226
225
|
for (const commandHandler of commandHandlerFactory()) {
|
|
227
|
-
disposables.push(this.registerDisposable(this.registerMenuEventHandlers(commandHandler, additionalMenuEventRegistrar, false)));
|
|
226
|
+
disposables.push(this.registerDisposable(await this.registerMenuEventHandlers({ commandHandler, menuEventRegistrar: additionalMenuEventRegistrar, shouldAddCommandToSubmenu: false })));
|
|
228
227
|
}
|
|
229
228
|
}
|
|
230
229
|
return new import_disposable.CombineDisposable({ disposables });
|
|
@@ -233,20 +232,18 @@ class CommandHandlerComponent extends import_component_ex.ComponentEx {
|
|
|
233
232
|
* Hands a command handler its registration context, scoped so that disposing the returned scope
|
|
234
233
|
* unregisters exactly the menu events that handler registered.
|
|
235
234
|
*
|
|
236
|
-
* @param
|
|
237
|
-
* @param menuEventRegistrar - The menu surface the handler registers its menu events with.
|
|
238
|
-
* @param shouldAddCommandToSubmenu - Overrides the handler's own value, or `undefined` to leave it alone.
|
|
235
|
+
* @param params - The parameters for this registration.
|
|
239
236
|
* @returns The handler's menu-event scope.
|
|
240
237
|
*/
|
|
241
|
-
registerMenuEventHandlers(
|
|
242
|
-
const menuEventScope = new CommandMenuEventScope(menuEventRegistrar);
|
|
238
|
+
async registerMenuEventHandlers(params) {
|
|
239
|
+
const menuEventScope = new CommandMenuEventScope(params.menuEventRegistrar);
|
|
243
240
|
const context = {
|
|
244
241
|
activeFileProvider: this.activeFileProvider,
|
|
245
242
|
menuEventRegistrar: menuEventScope,
|
|
246
243
|
pluginName: this.pluginName,
|
|
247
|
-
shouldAddCommandToSubmenu
|
|
244
|
+
shouldAddCommandToSubmenu: params.shouldAddCommandToSubmenu
|
|
248
245
|
};
|
|
249
|
-
|
|
246
|
+
await params.commandHandler.onRegistered(context);
|
|
250
247
|
return menuEventScope;
|
|
251
248
|
}
|
|
252
249
|
}
|
|
@@ -254,4 +251,4 @@ class CommandHandlerComponent extends import_component_ex.ComponentEx {
|
|
|
254
251
|
0 && (module.exports = {
|
|
255
252
|
CommandHandlerComponent
|
|
256
253
|
});
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gaXRzIGxpZmVjeWNsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4uLy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1lbnVFdmVudFJlZ2lzdHJhclxufSBmcm9tICcuLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRIYW5kbGVyLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgQ29tYmluZURpc3Bvc2FibGUsXG4gIERpc3Bvc2FibGVCYXNlXG59IGZyb20gJy4uLy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQnVpbGRzIGEgZnJlc2ggc2V0IG9mIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIEEgZmFjdG9yeSByYXRoZXIgdGhhbiBhIHJlYWR5LW1hZGUgYXJyYXkgYmVjYXVzZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnR9IHJlZ2lzdGVycyB0aGUgc2FtZVxuICogaGFuZGxlcnMgYWdhaW5zdCBzZXZlcmFsIG1lbnUgc3VyZmFjZXMsIGFuZCBhIGhhbmRsZXIgY2FycmllcyBwZXItcmVnaXN0cmF0aW9uIHN0YXRlIChpdHNcbiAqIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBpdHMgcGx1Z2luIG5hbWUsIGFuZCB3aGF0ZXZlciBhIHN1YmNsYXNzIHJlY29yZHMgaW5cbiAqIHtAbGluayBDb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWR9KSBcdTIwMTQgc28gZXZlcnkgc3VyZmFjZSBuZWVkcyBpdHMgb3duIGluc3RhbmNlcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBoYW5kbGVycyB0byByZWdpc3Rlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZEhhbmRsZXJGYWN0b3J5ID0gKCkgPT4gQ29tbWFuZEhhbmRsZXJbXTtcblxuaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICByZWFkb25seSBhY3RpdmVGaWxlUHJvdmlkZXI6IEFjdGl2ZUZpbGVQcm92aWRlcjtcbiAgcmVhZG9ubHkgYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnM/OiByZWFkb25seSBNZW51RXZlbnRSZWdpc3RyYXJbXSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgY29tbWFuZFJlZ2lzdHJhcjogQ29tbWFuZFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBlci1jb21tYW5kIHtAbGluayBNZW51RXZlbnRSZWdpc3RyYXJ9IHRoYXQgZGVsZWdhdGVzIHRvIGEgc2hhcmVkIHJlZ2lzdHJhciB3aGlsZSBjb2xsZWN0aW5nIHRoZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeH0gZWFjaCByZWdpc3RyYXRpb24gcmV0dXJucywgc28gZGlzcG9zaW5nIHRoaXMgc2NvcGUgdW5yZWdpc3RlcnMgZXhhY3RseSB0aGF0IGNvbW1hbmQnc1xuICogbWVudSBldmVudHMuIEJlY2F1c2Uge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH0gcnVucyBmaXJlLWFuZC1mb3JnZXQgKGl0IG1heSByZWdpc3RlciBtZW51IGV2ZW50c1xuICogYWZ0ZXIgdGhpcyBzY29wZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkKSwgYSByZWdpc3RyYXRpb24gdGhhdCBhcnJpdmVzIHBvc3QtZGlzcG9zZSBpcyBkaXNwb3NlZCBpbW1lZGlhdGVseVxuICogaW5zdGVhZCBvZiBsZWFraW5nLlxuICovXG5jbGFzcyBDb21tYW5kTWVudUV2ZW50U2NvcGUgZXh0ZW5kcyBEaXNwb3NhYmxlQmFzZSBpbXBsZW1lbnRzIE1lbnVFdmVudFJlZ2lzdHJhciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVFeFtdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5uZXI6IE1lbnVFdmVudFJlZ2lzdHJhcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJFZGl0b3JNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEVkaXRvck1lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3QodGhpcy5pbm5lci5yZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcjogRmlsZU1lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3QodGhpcy5pbm5lci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlc01lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3QodGhpcy5pbm5lci5yZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBkaXNwb3NhYmxlIG9mIHRoaXMuZGlzcG9zYWJsZXMpIHtcbiAgICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3QoZGlzcG9zYWJsZTogRGlzcG9zYWJsZUV4KTogRGlzcG9zYWJsZUV4IHtcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICBkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKGRpc3Bvc2FibGUpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHtAbGluayBDb21tYW5kSGFuZGxlcn1zIHdpdGggT2JzaWRpYW4gYW5kIG1hbmFnZXMgdGhlaXIgbGlmZWN5Y2xlLlxuICpcbiAqIENhbGwge0BsaW5rIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfSB0byByZWdpc3RlciBhIGJhdGNoIG9mIGhhbmRsZXJzIG9uIGRlbWFuZCAoYXMgbWFueSB0aW1lcyBhc1xuICogbmVlZGVkIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgYWxpdmUpOyBkaXNwb3NlIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0byB1bnJlZ2lzdGVyIGV4YWN0bHlcbiAqIHRob3NlIGhhbmRsZXJzIFx1MjAxNCBpbmNsdWRpbmcgYW55IG1lbnUgZXZlbnRzIHRoZXkgcmVnaXN0ZXJlZCBcdTIwMTQgb3IgbGV0IHRoZSBjb21wb25lbnQgdW5sb2FkIHRvIHJlbW92ZSBldmVyeVxuICogY29tbWFuZCBzdGlsbCByZWdpc3RlcmVkIHRocm91Z2ggaXQuXG4gKlxuICogVGhlIHNhbWUgaGFuZGxlcnMgYXJlIGZlZCB0byBldmVyeSBtZW51IHN1cmZhY2UgdGhlIGNvbXBvbmVudCBrbm93cyBhYm91dDogT2JzaWRpYW4ncyBvd24gd29ya3NwYWNlXG4gKiBldmVudHMsIHBsdXMgZWFjaCBhZGRpdGlvbmFsIHtAbGluayBNZW51RXZlbnRSZWdpc3RyYXJ9IGJyaWRnaW5nIGFub3RoZXIgcGx1Z2luJ3MgbWVudXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhY2Nlc3NpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmVGaWxlUHJvdmlkZXI6IEFjdGl2ZUZpbGVQcm92aWRlcjtcblxuICAvKipcbiAgICogUmVnaXN0cmFycyBmb3IgbWVudSBzdXJmYWNlcyB0aGF0IGJ1aWxkIHRoZWlyIG93biBwbHVnaW4tdGl0bGVkIHBhcmVudCBlbnRyeSwgYW5kIHRoZXJlZm9yZSB0YWtlXG4gICAqIHRoZSBoYW5kbGVycyB3aXRoIHRoZWlyIHNlY3Rpb24gc3VibWVudSBmb3JjZWQgb2ZmLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiByZWFkb25seSBNZW51RXZlbnRSZWdpc3RyYXJbXTtcblxuICAvKipcbiAgICogUmVnaXN0cmFyIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgY29tbWFuZHMgd2l0aCBPYnNpZGlhbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjb21tYW5kUmVnaXN0cmFyOiBDb21tYW5kUmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXIgZm9yIG1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIgPSBwYXJhbXMuYWN0aXZlRmlsZVByb3ZpZGVyO1xuICAgIHRoaXMubWVudUV2ZW50UmVnaXN0cmFyID0gcGFyYW1zLm1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgICB0aGlzLmFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzID0gcGFyYW1zLmFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzID8/IFtdO1xuICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhciA9IHBhcmFtcy5jb21tYW5kUmVnaXN0cmFyO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY29tbWFuZCBoYW5kbGVycyBhbmQgcmVnaXN0ZXJzIHRoZW0gd2l0aCBPYnNpZGlhbiwgZ2l2aW5nIGVhY2ggaXRzIG93biBydW50aW1lXG4gICAqIHJlZ2lzdHJhdGlvbiBjb250ZXh0LiBFYWNoIGhhbmRsZXIncyBjb21tYW5kIGlzIGFkZGVkIGltbWVkaWF0ZWx5OyB0aGUgcmV0dXJuZWRcbiAgICoge0BsaW5rIERpc3Bvc2FibGVFeH0gcmVtb3ZlcyB0aGUgY29tbWFuZHMgcmVnaXN0ZXJlZCBieSB0aGlzIGNhbGwgXHUyMDE0IGFuZCBhbnkgbWVudSBldmVudHMgdGhvc2VcbiAgICogaGFuZGxlcnMgcmVnaXN0ZXJlZCB2aWEgdGhlaXIgY29udGV4dCdzIHtAbGluayBNZW51RXZlbnRSZWdpc3RyYXJ9IFx1MjAxNCB3aGVuIGRpc3Bvc2VkLiBBbnkgY29tbWFuZFxuICAgKiBzdGlsbCByZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCB1bmxvYWRzIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogVGhlIGZhY3RvcnkgaXMgaW52b2tlZCBvbmNlIG1vcmUgZm9yIGV2ZXJ5IGFkZGl0aW9uYWwgbWVudSBzdXJmYWNlLCBzbyBhIHBsdWdpbiBkZWNsYXJlcyBpdHNcbiAgICogaGFuZGxlcnMgT05DRSBhbmQgYWxsIHN1cmZhY2VzIGFyZSBmZWQuIFRob3NlIGV4dHJhIHBhc3NlcyBhZGQgbm8gY29tbWFuZHMgXHUyMDE0IHRoZSBwYWxldHRlIGFscmVhZHlcbiAgICogaGFzIGV2ZXJ5IGNvbW1hbmQgZnJvbSB0aGUgZmlyc3QgcGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRIYW5kbGVyRmFjdG9yeSAtIEJ1aWxkcyBhIGZyZXNoIHNldCBvZiBjb21tYW5kIGhhbmRsZXJzLCBvbmNlIHBlciBtZW51IHN1cmZhY2UuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlcnMgKGNvbW1hbmRzICsgbWVudSBldmVudHMpIHJlZ2lzdGVyZWQgYnkgdGhpcyBjYWxsLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyRmFjdG9yeTogQ29tbWFuZEhhbmRsZXJGYWN0b3J5KTogRGlzcG9zYWJsZUV4IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb21tYW5kSGFuZGxlciBvZiBjb21tYW5kSGFuZGxlckZhY3RvcnkoKSkge1xuICAgICAgY29uc3QgY29tbWFuZCA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkQ29tbWFuZCgpO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgaWQgYmVmb3JlIHJlZ2lzdGVyaW5nLiBgUGx1Z2luLmFkZENvbW1hbmRgIG11dGF0ZXMgYGNvbW1hbmQuaWRgIChwcmVmaXhpbmcgaXQgd2l0aFxuICAgICAgLy8gYHRoaXMubWFuaWZlc3QuaWRgKSwgd2hpbGUgYFBsdWdpbi5yZW1vdmVDb21tYW5kYCByZS1wcmVmaXhlcyBcdTIwMTQgc28gcmVtb3ZhbCBuZWVkcyB0aGUgb3JpZ2luYWwgaWQuXG4gICAgICAvLyBSZWFkaW5nIGBjb21tYW5kLmlkYCBhZnRlciBgYWRkQ29tbWFuZGAgd291bGQgZG91YmxlLXByZWZpeCBpdCwgc28gdGhlIGNvbW1hbmQgaXMgbmV2ZXIgcmVtb3ZlZC5cbiAgICAgIGNvbnN0IGNvbW1hbmRJZCA9IGNvbW1hbmQuaWQ7XG4gICAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIuYWRkQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgLy8gRWFjaCBjb21tYW5kIGdldHMgaXRzIG93biByZWdpc3RyYXRpb24gY29udGV4dCB3aXRoIGEgcGVyLWNvbW1hbmQgbWVudS1ldmVudCBzY29wZSwgc28gZGlzcG9zaW5nIG9uZVxuICAgICAgLy8gQ29tbWFuZCB0ZWFycyBkb3duIGl0cyBvd24gbWVudSBldmVudHMgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG90aGVycy5cbiAgICAgIGNvbnN0IG1lbnVFdmVudFNjb3BlID0gdGhpcy5yZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyLCB0aGlzLm1lbnVFdmVudFJlZ2lzdHJhcik7XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIucmVtb3ZlQ29tbWFuZChjb21tYW5kSWQpO1xuICAgICAgICAgIG1lbnVFdmVudFNjb3BlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBUaWUgcmVtb3ZhbCB0byB0aGUgY29tcG9uZW50J3MgdW5sb2FkLCBzbyBhIGNvbW1hbmQgbmV2ZXIgb3V0bGl2ZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgIGRpc3Bvc2FibGVzLnB1c2godGhpcy5yZWdpc3RlckRpc3Bvc2FibGUoZGlzcG9zYWJsZSkpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IGFkZGl0aW9uYWwgc3VyZmFjZSBnZXRzIGl0cyBPV04gaGFuZGxlciBpbnN0YW5jZXMgXHUyMDE0IGEgaGFuZGxlciBjYXJyaWVzIHBlci1yZWdpc3RyYXRpb25cbiAgICAvLyBTdGF0ZSwgc28gb25lIGluc3RhbmNlIGNhbm5vdCBzZXJ2ZSB0d28gc3VyZmFjZXMgXHUyMDE0IGFuZCB0YWtlcyB0aGVtIHdpdGggdGhlIHNlY3Rpb24gc3VibWVudVxuICAgIC8vIEZvcmNlZCBvZmYsIGJlY2F1c2Ugc3VjaCBhIHN1cmZhY2Ugd3JhcHMgZXZlcnl0aGluZyBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IG9mIGl0cyBvd24uXG4gICAgZm9yIChjb25zdCBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyIG9mIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWFuZEhhbmRsZXIgb2YgY29tbWFuZEhhbmRsZXJGYWN0b3J5KCkpIHtcbiAgICAgICAgZGlzcG9zYWJsZXMucHVzaCh0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZSh0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoY29tbWFuZEhhbmRsZXIsIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXIsIGZhbHNlKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29tYmluZURpc3Bvc2FibGUoeyBkaXNwb3NhYmxlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kcyBhIGNvbW1hbmQgaGFuZGxlciBpdHMgcmVnaXN0cmF0aW9uIGNvbnRleHQsIHNjb3BlZCBzbyB0aGF0IGRpc3Bvc2luZyB0aGUgcmV0dXJuZWQgc2NvcGVcbiAgICogdW5yZWdpc3RlcnMgZXhhY3RseSB0aGUgbWVudSBldmVudHMgdGhhdCBoYW5kbGVyIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSGFuZGxlciAtIFRoZSBjb21tYW5kIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEBwYXJhbSBtZW51RXZlbnRSZWdpc3RyYXIgLSBUaGUgbWVudSBzdXJmYWNlIHRoZSBoYW5kbGVyIHJlZ2lzdGVycyBpdHMgbWVudSBldmVudHMgd2l0aC5cbiAgICogQHBhcmFtIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgLSBPdmVycmlkZXMgdGhlIGhhbmRsZXIncyBvd24gdmFsdWUsIG9yIGB1bmRlZmluZWRgIHRvIGxlYXZlIGl0IGFsb25lLlxuICAgKiBAcmV0dXJucyBUaGUgaGFuZGxlcidzIG1lbnUtZXZlbnQgc2NvcGUuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoXG4gICAgY29tbWFuZEhhbmRsZXI6IENvbW1hbmRIYW5kbGVyLFxuICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogTWVudUV2ZW50UmVnaXN0cmFyLFxuICAgIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuXG4gICk6IENvbW1hbmRNZW51RXZlbnRTY29wZSB7XG4gICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBuZXcgQ29tbWFuZE1lbnVFdmVudFNjb3BlKG1lbnVFdmVudFJlZ2lzdHJhcik7XG4gICAgY29uc3QgY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0ID0ge1xuICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlcixcbiAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogbWVudUV2ZW50U2NvcGUsXG4gICAgICBwbHVnaW5OYW1lOiB0aGlzLnBsdWdpbk5hbWUsXG4gICAgICBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51XG4gICAgfTtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBjb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWQoY29udGV4dCkpO1xuICAgIHJldHVybiBtZW51RXZlbnRTY29wZTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQkEsbUJBQWtDO0FBQ2xDLHdCQUlPO0FBQ1AsMEJBQTRCO0FBNkI1QixNQUFNLDhCQUE4QixpQ0FBNkM7QUFBQSxFQUd4RSxZQUE2QixPQUEyQjtBQUM3RCxVQUFNO0FBRDRCO0FBQUEsRUFFcEM7QUFBQSxFQUZvQztBQUFBLEVBRm5CLGNBQThCLENBQUM7QUFBQSxFQU16QywrQkFBK0IsU0FBK0M7QUFDbkYsV0FBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLCtCQUErQixPQUFPLENBQUM7QUFBQSxFQUN4RTtBQUFBLEVBRU8sNkJB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
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gaXRzIGxpZmVjeWNsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4uLy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1lbnVFdmVudFJlZ2lzdHJhclxufSBmcm9tICcuLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRIYW5kbGVyLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQge1xuICBDYWxsYmFja0Rpc3Bvc2FibGUsXG4gIENvbWJpbmVEaXNwb3NhYmxlLFxuICBEaXNwb3NhYmxlQmFzZVxufSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGZyZXNoIHNldCBvZiB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cy5cbiAqXG4gKiBBIGZhY3RvcnkgcmF0aGVyIHRoYW4gYSByZWFkeS1tYWRlIGFycmF5IGJlY2F1c2Uge0BsaW5rIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50fSByZWdpc3RlcnMgdGhlIHNhbWVcbiAqIGhhbmRsZXJzIGFnYWluc3Qgc2V2ZXJhbCBtZW51IHN1cmZhY2VzLCBhbmQgYSBoYW5kbGVyIGNhcnJpZXMgcGVyLXJlZ2lzdHJhdGlvbiBzdGF0ZSAoaXRzXG4gKiBhY3RpdmUtZmlsZSBwcm92aWRlciwgaXRzIHBsdWdpbiBuYW1lLCBhbmQgd2hhdGV2ZXIgYSBzdWJjbGFzcyByZWNvcmRzIGluXG4gKiB7QGxpbmsgQ29tbWFuZEhhbmRsZXIub25SZWdpc3RlcmVkfSkgXHUyMDE0IHNvIGV2ZXJ5IHN1cmZhY2UgbmVlZHMgaXRzIG93biBpbnN0YW5jZXMuXG4gKlxuICogUmV0dXJuaW5nIHNoYXJlZCBpbnN0YW5jZXMgKGAoKSA9PiBbaGFuZGxlcjFTaW5nbGV0b24sIGhhbmRsZXIyU2luZ2xldG9uXWApIHJlaW50cm9kdWNlcyBleGFjdGx5IHRoZVxuICogYnVnIHRoZSBmYWN0b3J5IGV4aXN0cyB0byBhdm9pZCwgc28gaXQgaXMgbm90IG1lcmVseSBkaXNjb3VyYWdlZDoge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH1cbiAqIHRocm93cyBvbiB0aGUgc2Vjb25kIHJlZ2lzdHJhdGlvbiBvZiBhbiBpbnN0YW5jZS4ge0BsaW5rIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50LnJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfVxuICogYXdhaXRzIGl0LCBzbyB0aGF0IHRocm93IHJlamVjdHMgdGhlIGNhbGxlcidzIHByb21pc2UgaW5zdGVhZCBvZiBkZWdyYWRpbmcgaW50byBhIHdyb25nIGNvbnRleHQgbWVudS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBoYW5kbGVycyB0byByZWdpc3Rlci4gQSBORVcgaW5zdGFuY2Ugb2YgZWFjaCBvbiBldmVyeSBjYWxsLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kSGFuZGxlckZhY3RvcnkgPSAoKSA9PiBDb21tYW5kSGFuZGxlcltdO1xuXG5pbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIHJlYWRvbmx5IGFjdGl2ZUZpbGVQcm92aWRlcjogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICByZWFkb25seSBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFycz86IHJlYWRvbmx5IE1lbnVFdmVudFJlZ2lzdHJhcltdIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBjb21tYW5kUmVnaXN0cmFyOiBDb21tYW5kUmVnaXN0cmFyO1xuICByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb21wb25lbnRSZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29tbWFuZEhhbmRsZXI6IENvbW1hbmRIYW5kbGVyO1xuICByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBwZXItY29tbWFuZCB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSB0aGF0IGRlbGVnYXRlcyB0byBhIHNoYXJlZCByZWdpc3RyYXIgd2hpbGUgY29sbGVjdGluZyB0aGVcbiAqIHtAbGluayBEaXNwb3NhYmxlRXh9IGVhY2ggcmVnaXN0cmF0aW9uIHJldHVybnMsIHNvIGRpc3Bvc2luZyB0aGlzIHNjb3BlIHVucmVnaXN0ZXJzIGV4YWN0bHkgdGhhdCBjb21tYW5kJ3NcbiAqIG1lbnUgZXZlbnRzLiBBIGhhbmRsZXIgbWF5IGtlZXAgdGhlIHNjb3BlIHBhc3Qge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH0gYW5kIHJlZ2lzdGVyIG1lbnUgZXZlbnRzXG4gKiBsYXRlciBcdTIwMTQgYSBicmlkZ2UgYmluZGluZyBhdCBsYXlvdXQtcmVhZHksIHNheSBcdTIwMTQgc28gYSByZWdpc3RyYXRpb24gdGhhdCBhcnJpdmVzIGFmdGVyIHRoaXMgc2NvcGUgd2FzIGRpc3Bvc2VkXG4gKiBpcyBkaXNwb3NlZCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGxlYWtpbmcuXG4gKi9cbmNsYXNzIENvbW1hbmRNZW51RXZlbnRTY29wZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgTWVudUV2ZW50UmVnaXN0cmFyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUV4W10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbm5lcjogTWVudUV2ZW50UmVnaXN0cmFyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcjogRWRpdG9yTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGaWxlTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZpbGVzTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRpc3Bvc2FibGUgb2YgdGhpcy5kaXNwb3NhYmxlcykge1xuICAgICAgZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuZGlzcG9zYWJsZXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlRXgpOiBEaXNwb3NhYmxlRXgge1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goZGlzcG9zYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMge0BsaW5rIENvbW1hbmRIYW5kbGVyfXMgd2l0aCBPYnNpZGlhbiBhbmQgbWFuYWdlcyB0aGVpciBsaWZlY3ljbGUuXG4gKlxuICogQ2FsbCB7QGxpbmsgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnN9IHRvIHJlZ2lzdGVyIGEgYmF0Y2ggb2YgaGFuZGxlcnMgb24gZGVtYW5kIChhcyBtYW55IHRpbWVzIGFzXG4gKiBuZWVkZWQgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBhbGl2ZSk7IGRpc3Bvc2UgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlRXh9IHRvIHVucmVnaXN0ZXIgZXhhY3RseVxuICogdGhvc2UgaGFuZGxlcnMgXHUyMDE0IGluY2x1ZGluZyBhbnkgbWVudSBldmVudHMgdGhleSByZWdpc3RlcmVkIFx1MjAxNCBvciBsZXQgdGhlIGNvbXBvbmVudCB1bmxvYWQgdG8gcmVtb3ZlIGV2ZXJ5XG4gKiBjb21tYW5kIHN0aWxsIHJlZ2lzdGVyZWQgdGhyb3VnaCBpdC5cbiAqXG4gKiBUaGUgc2FtZSBoYW5kbGVycyBhcmUgZmVkIHRvIGV2ZXJ5IG1lbnUgc3VyZmFjZSB0aGUgY29tcG9uZW50IGtub3dzIGFib3V0OiBPYnNpZGlhbidzIG93biB3b3Jrc3BhY2VcbiAqIGV2ZW50cywgcGx1cyBlYWNoIGFkZGl0aW9uYWwge0BsaW5rIE1lbnVFdmVudFJlZ2lzdHJhcn0gYnJpZGdpbmcgYW5vdGhlciBwbHVnaW4ncyBtZW51cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogUHJvdmlkZXIgZm9yIGFjY2Vzc2luZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBmaWxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGl2ZUZpbGVQcm92aWRlcjogQWN0aXZlRmlsZVByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXJzIGZvciBtZW51IHN1cmZhY2VzIHRoYXQgYnVpbGQgdGhlaXIgb3duIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5LCBhbmQgdGhlcmVmb3JlIHRha2VcbiAgICogdGhlIGhhbmRsZXJzIHdpdGggdGhlaXIgc2VjdGlvbiBzdWJtZW51IGZvcmNlZCBvZmYuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnM6IHJlYWRvbmx5IE1lbnVFdmVudFJlZ2lzdHJhcltdO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXIgdXNlZCB0byBhZGQgYW5kIHJlbW92ZSBjb21tYW5kcyB3aXRoIE9ic2lkaWFuLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbW1hbmRSZWdpc3RyYXI6IENvbW1hbmRSZWdpc3RyYXI7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhciBmb3IgbWVudSBldmVudCBoYW5kbGVycy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IG93bnMgdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDb21tYW5kSGFuZGxlckNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlciA9IHBhcmFtcy5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5tZW51RXZlbnRSZWdpc3RyYXIgPSBwYXJhbXMubWVudUV2ZW50UmVnaXN0cmFyO1xuICAgIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPSBwYXJhbXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPz8gW107XG4gICAgdGhpcy5jb21tYW5kUmVnaXN0cmFyID0gcGFyYW1zLmNvbW1hbmRSZWdpc3RyYXI7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gcGFyYW1zLnBsdWdpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBjb21tYW5kIGhhbmRsZXJzIGFuZCByZWdpc3RlcnMgdGhlbSB3aXRoIE9ic2lkaWFuLCBnaXZpbmcgZWFjaCBpdHMgb3duIHJ1bnRpbWVcbiAgICogcmVnaXN0cmF0aW9uIGNvbnRleHQuIEVhY2ggaGFuZGxlcidzIGNvbW1hbmQgaXMgYWRkZWQgaW1tZWRpYXRlbHk7IHRoZSByZXR1cm5lZFxuICAgKiB7QGxpbmsgRGlzcG9zYWJsZUV4fSByZW1vdmVzIHRoZSBjb21tYW5kcyByZWdpc3RlcmVkIGJ5IHRoaXMgY2FsbCBcdTIwMTQgYW5kIGFueSBtZW51IGV2ZW50cyB0aG9zZVxuICAgKiBoYW5kbGVycyByZWdpc3RlcmVkIHZpYSB0aGVpciBjb250ZXh0J3Mge0BsaW5rIE1lbnVFdmVudFJlZ2lzdHJhcn0gXHUyMDE0IHdoZW4gZGlzcG9zZWQuIEFueSBjb21tYW5kXG4gICAqIHN0aWxsIHJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMgaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBUaGUgZmFjdG9yeSBpcyBpbnZva2VkIG9uY2UgbW9yZSBmb3IgZXZlcnkgYWRkaXRpb25hbCBtZW51IHN1cmZhY2UsIHNvIGEgcGx1Z2luIGRlY2xhcmVzIGl0c1xuICAgKiBoYW5kbGVycyBPTkNFIGFuZCBhbGwgc3VyZmFjZXMgYXJlIGZlZC4gVGhvc2UgZXh0cmEgcGFzc2VzIGFkZCBubyBjb21tYW5kcyBcdTIwMTQgdGhlIHBhbGV0dGUgYWxyZWFkeVxuICAgKiBoYXMgZXZlcnkgY29tbWFuZCBmcm9tIHRoZSBmaXJzdCBwYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZEhhbmRsZXJGYWN0b3J5IC0gQnVpbGRzIGEgZnJlc2ggc2V0IG9mIGNvbW1hbmQgaGFuZGxlcnMsIG9uY2UgcGVyIG1lbnUgc3VyZmFjZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVycyAoY29tbWFuZHMgKyBtZW51IGV2ZW50cykgcmVnaXN0ZXJlZCBieSB0aGlzIGNhbGwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnMoY29tbWFuZEhhbmRsZXJGYWN0b3J5OiBDb21tYW5kSGFuZGxlckZhY3RvcnkpOiBQcm9taXNlPERpc3Bvc2FibGVFeD4ge1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRIYW5kbGVyIG9mIGNvbW1hbmRIYW5kbGVyRmFjdG9yeSgpKSB7XG4gICAgICBjb25zdCBjb21tYW5kID0gY29tbWFuZEhhbmRsZXIuYnVpbGRDb21tYW5kKCk7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBpZCBiZWZvcmUgcmVnaXN0ZXJpbmcuIGBQbHVnaW4uYWRkQ29tbWFuZGAgbXV0YXRlcyBgY29tbWFuZC5pZGAgKHByZWZpeGluZyBpdCB3aXRoXG4gICAgICAvLyBgdGhpcy5tYW5pZmVzdC5pZGApLCB3aGlsZSBgUGx1Z2luLnJlbW92ZUNvbW1hbmRgIHJlLXByZWZpeGVzIFx1MjAxNCBzbyByZW1vdmFsIG5lZWRzIHRoZSBvcmlnaW5hbCBpZC5cbiAgICAgIC8vIFJlYWRpbmcgYGNvbW1hbmQuaWRgIGFmdGVyIGBhZGRDb21tYW5kYCB3b3VsZCBkb3VibGUtcHJlZml4IGl0LCBzbyB0aGUgY29tbWFuZCBpcyBuZXZlciByZW1vdmVkLlxuICAgICAgY29uc3QgY29tbWFuZElkID0gY29tbWFuZC5pZDtcbiAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5hZGRDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAvLyBFYWNoIGNvbW1hbmQgZ2V0cyBpdHMgb3duIHJlZ2lzdHJhdGlvbiBjb250ZXh0IHdpdGggYSBwZXItY29tbWFuZCBtZW51LWV2ZW50IHNjb3BlLCBzbyBkaXNwb3Npbmcgb25lXG4gICAgICAvLyBDb21tYW5kIHRlYXJzIGRvd24gaXRzIG93biBtZW51IGV2ZW50cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXJzLlxuICAgICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoeyBjb21tYW5kSGFuZGxlciwgbWVudUV2ZW50UmVnaXN0cmFyOiB0aGlzLm1lbnVFdmVudFJlZ2lzdHJhciB9KTtcblxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgICAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5yZW1vdmVDb21tYW5kKGNvbW1hbmRJZCk7XG4gICAgICAgICAgbWVudUV2ZW50U2NvcGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIFRpZSByZW1vdmFsIHRvIHRoZSBjb21wb25lbnQncyB1bmxvYWQsIHNvIGEgY29tbWFuZCBuZXZlciBvdXRsaXZlcyB0aGUgY29tcG9uZW50LlxuICAgICAgZGlzcG9zYWJsZXMucHVzaCh0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShkaXNwb3NhYmxlKSk7XG4gICAgfVxuXG4gICAgLy8gRXZlcnkgYWRkaXRpb25hbCBzdXJmYWNlIGdldHMgaXRzIE9XTiBoYW5kbGVyIGluc3RhbmNlcyBcdTIwMTQgYSBoYW5kbGVyIGNhcnJpZXMgcGVyLXJlZ2lzdHJhdGlvblxuICAgIC8vIFN0YXRlLCBzbyBvbmUgaW5zdGFuY2UgY2Fubm90IHNlcnZlIHR3byBzdXJmYWNlcyBcdTIwMTQgYW5kIHRha2VzIHRoZW0gd2l0aCB0aGUgc2VjdGlvbiBzdWJtZW51XG4gICAgLy8gRm9yY2VkIG9mZiwgYmVjYXVzZSBzdWNoIGEgc3VyZmFjZSB3cmFwcyBldmVyeXRoaW5nIGluIGEgcGx1Z2luLXRpdGxlZCBwYXJlbnQgZW50cnkgb2YgaXRzIG93bi5cbiAgICBmb3IgKGNvbnN0IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXIgb2YgdGhpcy5hZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFycykge1xuICAgICAgZm9yIChjb25zdCBjb21tYW5kSGFuZGxlciBvZiBjb21tYW5kSGFuZGxlckZhY3RvcnkoKSkge1xuICAgICAgICBkaXNwb3NhYmxlcy5wdXNoKHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKGF3YWl0IHRoaXMucmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVycyh7IGNvbW1hbmRIYW5kbGVyLCBtZW51RXZlbnRSZWdpc3RyYXI6IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXIsIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU6IGZhbHNlIH0pKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb21iaW5lRGlzcG9zYWJsZSh7IGRpc3Bvc2FibGVzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRzIGEgY29tbWFuZCBoYW5kbGVyIGl0cyByZWdpc3RyYXRpb24gY29udGV4dCwgc2NvcGVkIHNvIHRoYXQgZGlzcG9zaW5nIHRoZSByZXR1cm5lZCBzY29wZVxuICAgKiB1bnJlZ2lzdGVycyBleGFjdGx5IHRoZSBtZW51IGV2ZW50cyB0aGF0IGhhbmRsZXIgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIHJlZ2lzdHJhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGhhbmRsZXIncyBtZW51LWV2ZW50IHNjb3BlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRSZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzUGFyYW1zKTogUHJvbWlzZTxDb21tYW5kTWVudUV2ZW50U2NvcGU+IHtcbiAgICBjb25zdCBtZW51RXZlbnRTY29wZSA9IG5ldyBDb21tYW5kTWVudUV2ZW50U2NvcGUocGFyYW1zLm1lbnVFdmVudFJlZ2lzdHJhcik7XG4gICAgY29uc3QgY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0ID0ge1xuICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlcixcbiAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogbWVudUV2ZW50U2NvcGUsXG4gICAgICBwbHVnaW5OYW1lOiB0aGlzLnBsdWdpbk5hbWUsXG4gICAgICBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51OiBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudVxuICAgIH07XG4gICAgYXdhaXQgcGFyYW1zLmNvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZChjb250ZXh0KTtcbiAgICByZXR1cm4gbWVudUV2ZW50U2NvcGU7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLHdCQUlPO0FBQ1AsMEJBQTRCO0FBd0M1QixNQUFNLDhCQUE4QixpQ0FBNkM7QUFBQSxFQUd4RSxZQUE2QixPQUEyQjtBQUM3RCxVQUFNO0FBRDRCO0FBQUEsRUFFcEM7QUFBQSxFQUZvQztBQUFBLEVBRm5CLGNBQThCLENBQUM7QUFBQSxFQU16QywrQkFBK0IsU0FBK0M7QUFDbkYsV0FBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLCtCQUErQixPQUFPLENBQUM7QUFBQSxFQUN4RTtBQUFBLEVBRU8sNkJBQTZCLFNBQTZDO0FBQy9FLFdBQU8sS0FBSyxRQUFRLEtBQUssTUFBTSw2QkFBNkIsT0FBTyxDQUFDO0FBQUEsRUFDdEU7QUFBQSxFQUVPLDhCQUE4QixTQUE4QztBQUNqRixXQUFPLEtBQUssUUFBUSxLQUFLLE1BQU0sOEJBQThCLE9BQU8sQ0FBQztBQUFBLEVBQ3ZFO0FBQUEsRUFFbUIsaUJBQXVCO0FBQ3hDLGVBQVcsY0FBYyxLQUFLLGFBQWE7QUFDekMsaUJBQVcsUUFBUTtBQUFBLElBQ3JCO0FBQ0EsU0FBSyxZQUFZLFNBQVM7QUFBQSxFQUM1QjtBQUFBLEVBRVEsUUFBUSxZQUF3QztBQUN0RCxRQUFJLEtBQUssWUFBWTtBQUNuQixpQkFBVyxRQUFRO0FBQUEsSUFDckIsT0FBTztBQUNMLFdBQUssWUFBWSxLQUFLLFVBQVU7QUFBQSxJQUNsQztBQUVBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFhTyxNQUFNLGdDQUFnQyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSXBDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1osWUFBWSxRQUFrRDtBQUNuRSxVQUFNO0FBQ04sU0FBSyxxQkFBcUIsT0FBTztBQUNqQyxTQUFLLHFCQUFxQixPQUFPO0FBQ2pDLFNBQUssZ0NBQWdDLE9BQU8saUNBQWlDLENBQUM7QUFDOUUsU0FBSyxtQkFBbUIsT0FBTztBQUMvQixTQUFLLGFBQWEsT0FBTztBQUFBLEVBQzNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZ0JBLE1BQWEsd0JBQXdCLHVCQUFxRTtBQUN4RyxVQUFNLGNBQTRCLENBQUM7QUFDbkMsZUFBVyxrQkFBa0Isc0JBQXNCLEdBQUc7QUFDcEQsWUFBTSxVQUFVLGVBQWUsYUFBYTtBQUk1QyxZQUFNLFlBQVksUUFBUTtBQUMxQixXQUFLLGlCQUFpQixXQUFXLE9BQU87QUFJeEMsWUFBTSxpQkFBaUIsTUFBTSxLQUFLLDBCQUEwQixFQUFFLGdCQUFnQixvQkFBb0IsS0FBSyxtQkFBbUIsQ0FBQztBQUUzSCxZQUFNLGFBQWEsSUFBSSxxQ0FBbUI7QUFBQSxRQUN4QyxVQUFVLE1BQVk7QUFDcEIsZUFBSyxpQkFBaUIsY0FBYyxTQUFTO0FBQzdDLHlCQUFlLFFBQVE7QUFBQSxRQUN6QjtBQUFBLE1BQ0YsQ0FBQztBQUVELGtCQUFZLEtBQUssS0FBSyxtQkFBbUIsVUFBVSxDQUFDO0FBQUEsSUFDdEQ7QUFLQSxlQUFXLGdDQUFnQyxLQUFLLCtCQUErQjtBQUM3RSxpQkFBVyxrQkFBa0Isc0JBQXNCLEdBQUc7QUFDcEQsb0JBQVksS0FBSyxLQUFLLG1CQUFtQixNQUFNLEtBQUssMEJBQTBCLEVBQUUsZ0JBQWdCLG9CQUFvQiw4QkFBOEIsMkJBQTJCLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUN4TDtBQUFBLElBQ0Y7QUFFQSxXQUFPLElBQUksb0NBQWtCLEVBQUUsWUFBWSxDQUFDO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsTUFBYywwQkFBMEIsUUFBZ0c7QUFDdEksVUFBTSxpQkFBaUIsSUFBSSxzQkFBc0IsT0FBTyxrQkFBa0I7QUFDMUUsVUFBTSxVQUE2QztBQUFBLE1BQ2pELG9CQUFvQixLQUFLO0FBQUEsTUFDekIsb0JBQW9CO0FBQUEsTUFDcEIsWUFBWSxLQUFLO0FBQUEsTUFDakIsMkJBQTJCLE9BQU87QUFBQSxJQUNwQztBQUNBLFVBQU0sT0FBTyxlQUFlLGFBQWEsT0FBTztBQUNoRCxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -18,7 +18,12 @@ import { ComponentEx } from '../components/component-ex.cjs';
|
|
|
18
18
|
* active-file provider, its plugin name, and whatever a subclass records in
|
|
19
19
|
* {@link CommandHandler.onRegistered}) — so every surface needs its own instances.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
21
|
+
* Returning shared instances (`() => [handler1Singleton, handler2Singleton]`) reintroduces exactly the
|
|
22
|
+
* bug the factory exists to avoid, so it is not merely discouraged: {@link CommandHandler.onRegistered}
|
|
23
|
+
* throws on the second registration of an instance. {@link CommandHandlerComponent.registerCommandHandlers}
|
|
24
|
+
* awaits it, so that throw rejects the caller's promise instead of degrading into a wrong context menu.
|
|
25
|
+
*
|
|
26
|
+
* @returns The command handlers to register. A NEW instance of each on every call.
|
|
22
27
|
*/
|
|
23
28
|
export type CommandHandlerFactory = () => CommandHandler[];
|
|
24
29
|
interface CommandHandlerComponentConstructorParams {
|
|
@@ -81,14 +86,12 @@ export declare class CommandHandlerComponent extends ComponentEx {
|
|
|
81
86
|
* @param commandHandlerFactory - Builds a fresh set of command handlers, once per menu surface.
|
|
82
87
|
* @returns A {@link DisposableEx} that unregisters the handlers (commands + menu events) registered by this call.
|
|
83
88
|
*/
|
|
84
|
-
registerCommandHandlers(commandHandlerFactory: CommandHandlerFactory): DisposableEx
|
|
89
|
+
registerCommandHandlers(commandHandlerFactory: CommandHandlerFactory): Promise<DisposableEx>;
|
|
85
90
|
/**
|
|
86
91
|
* Hands a command handler its registration context, scoped so that disposing the returned scope
|
|
87
92
|
* unregisters exactly the menu events that handler registered.
|
|
88
93
|
*
|
|
89
|
-
* @param
|
|
90
|
-
* @param menuEventRegistrar - The menu surface the handler registers its menu events with.
|
|
91
|
-
* @param shouldAddCommandToSubmenu - Overrides the handler's own value, or `undefined` to leave it alone.
|
|
94
|
+
* @param params - The parameters for this registration.
|
|
92
95
|
* @returns The handler's menu-event scope.
|
|
93
96
|
*/
|
|
94
97
|
private registerMenuEventHandlers;
|
|
@@ -162,10 +162,23 @@ class CommandHandler {
|
|
|
162
162
|
* Called after the command has been registered with Obsidian.
|
|
163
163
|
* Subclasses use the provided context to register menu event handlers.
|
|
164
164
|
*
|
|
165
|
+
* Throws when the same instance is registered twice. A handler stores per-registration state — the
|
|
166
|
+
* plugin name here, the active-file provider and the submenu override in `AbstractFileCommandHandler`,
|
|
167
|
+
* plus whatever a subclass records — and the menu closures registered here read that state lazily, at
|
|
168
|
+
* menu-render time. So a second registration silently rewrites what the first registration's closures
|
|
169
|
+
* will see. `CommandHandlerComponent` registers a handler set once per menu surface, which is why
|
|
170
|
+
* `CommandHandlerFactory` must build FRESH instances on every call; this guard turns a factory that
|
|
171
|
+
* hands out shared instances into a loud failure instead of a wrong context menu.
|
|
172
|
+
*
|
|
165
173
|
* @param context - The registration context providing runtime capabilities.
|
|
166
174
|
*/
|
|
167
175
|
async onRegistered(context) {
|
|
168
176
|
await (0, import_function.noopAsync)();
|
|
177
|
+
if (this._pluginName !== void 0) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
`Command handler '${this.id}' is already registered. A command handler instance cannot be registered twice - the command handler factory must build fresh instances on every call.`
|
|
180
|
+
);
|
|
181
|
+
}
|
|
169
182
|
this._pluginName = context.pluginName;
|
|
170
183
|
}
|
|
171
184
|
}
|
|
@@ -173,4 +186,4 @@ class CommandHandler {
|
|
|
173
186
|
0 && (module.exports = {
|
|
174
187
|
CommandHandler
|
|
175
188
|
});
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQmFzZSBjbGFzcyBhbmQgaW50ZXJmYWNlcyBmb3IgY29tbWFuZCBoYW5kbGVycy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIEljb25OYW1lXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IE1lbnVFdmVudFJlZ2lzdHJhciB9IGZyb20gJy4uL21lbnUtZXZlbnQtcmVnaXN0cmFyLnRzJztcblxuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYSBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaWNvbiBmb3IgdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBpY29uOiBJY29uTmFtZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250ZXh0IHByb3ZpZGVkIHRvIGNvbW1hbmQgaGFuZGxlcnMgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogUHJvdmlkZXIgZm9yIGFjY2Vzc2luZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlRmlsZVByb3ZpZGVyOiBBY3RpdmVGaWxlUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhciBmb3IgbWVudSBldmVudCBoYW5kbGVycy5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnVFdmVudFJlZ2lzdHJhcjogTWVudUV2ZW50UmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGlzIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgaGFuZGxlcidzIG93biBgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudWAsIG9yIGB1bmRlZmluZWRgIHRvIGxlYXZlIGl0IGFsb25lLlxuICAgKlxuICAgKiBBIG1lbnUgc3VyZmFjZSB0aGF0IGFscmVhZHkgd3JhcHMgZXZlcnkgY29udHJpYnV0ZWQgaXRlbSBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IFx1MjAxNCBzdWNoIGFzXG4gICAqIGBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudGAgXHUyMDE0IHNldHMgdGhpcyB0byBgZmFsc2VgLCBiZWNhdXNlIGEgaGFuZGxlciBkZWNsYXJpbmdcbiAgICogYSBzZWN0aW9uIHN1Ym1lbnUgb2YgaXRzIG93biB3b3VsZCBtYWtlIGBNZW51LnNvcnQoKWAgbmVzdCBhIHNlY29uZCBwbHVnaW4tdGl0bGVkIGVudHJ5IGluc2lkZSB0aGVcbiAgICogZmlyc3QuIE9ubHkgYEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyYCByZWFkcyBpdDogdGhlIHN1cmZhY2VzIHRoYXQgbmVlZCBpdCBicmlkZ2UgZmlsZSBhbmRcbiAgICogZm9sZGVyIG1lbnVzLCBuZXZlciB0aGUgZWRpdG9yIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjb21tYW5kIGhhbmRsZXJzLlxuICpcbiAqIFVubGlrZSB0aGUgT2JzaWRpYW4ge0BsaW5rIENvbW1hbmR9IGludGVyZmFjZSwgaGFuZGxlcnMgYXJlIG5ldmVyIG11dGF0ZWQgYnkgT2JzaWRpYW4uXG4gKiBUaGUge0BsaW5rIGJ1aWxkQ29tbWFuZH0gbWV0aG9kIHByb2R1Y2VzIGEgcGxhaW4ge0BsaW5rIENvbW1hbmR9IG9iamVjdCBmb3IgcmVnaXN0cmF0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogVGhlIGljb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb246IEljb25OYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGNvbW1hbmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBsdWdpbiBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIF9wbHVnaW5OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNvbW1hbmQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuaWNvbiA9IHBhcmFtcy5pY29uO1xuICAgIHRoaXMuaWQgPSBwYXJhbXMuaWQ7XG4gICAgdGhpcy5uYW1lID0gcGFyYW1zLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcGxhaW4gT2JzaWRpYW4ge0BsaW5rIENvbW1hbmR9IG9iamVjdCBmb3IgcmVnaXN0cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LiBPYnNpZGlhbiBtYXkgbXV0YXRlIHRoaXMgb2JqZWN0IGFmdGVyIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZENvbW1hbmQoKTogQ29tbWFuZDtcblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIHRoZSBjb21tYW5kIGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCBPYnNpZGlhbi5cbiAgICogU3ViY2xhc3NlcyB1c2UgdGhlIHByb3ZpZGVkIGNvbnRleHQgdG8gcmVnaXN0ZXIgbWVudSBldmVudCBoYW5kbGVycy5cbiAgICpcbiAgICogVGhyb3dzIHdoZW4gdGhlIHNhbWUgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB0d2ljZS4gQSBoYW5kbGVyIHN0b3JlcyBwZXItcmVnaXN0cmF0aW9uIHN0YXRlIFx1MjAxNCB0aGVcbiAgICogcGx1Z2luIG5hbWUgaGVyZSwgdGhlIGFjdGl2ZS1maWxlIHByb3ZpZGVyIGFuZCB0aGUgc3VibWVudSBvdmVycmlkZSBpbiBgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJgLFxuICAgKiBwbHVzIHdoYXRldmVyIGEgc3ViY2xhc3MgcmVjb3JkcyBcdTIwMTQgYW5kIHRoZSBtZW51IGNsb3N1cmVzIHJlZ2lzdGVyZWQgaGVyZSByZWFkIHRoYXQgc3RhdGUgbGF6aWx5LCBhdFxuICAgKiBtZW51LXJlbmRlciB0aW1lLiBTbyBhIHNlY29uZCByZWdpc3RyYXRpb24gc2lsZW50bHkgcmV3cml0ZXMgd2hhdCB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uJ3MgY2xvc3VyZXNcbiAgICogd2lsbCBzZWUuIGBDb21tYW5kSGFuZGxlckNvbXBvbmVudGAgcmVnaXN0ZXJzIGEgaGFuZGxlciBzZXQgb25jZSBwZXIgbWVudSBzdXJmYWNlLCB3aGljaCBpcyB3aHlcbiAgICogYENvbW1hbmRIYW5kbGVyRmFjdG9yeWAgbXVzdCBidWlsZCBGUkVTSCBpbnN0YW5jZXMgb24gZXZlcnkgY2FsbDsgdGhpcyBndWFyZCB0dXJucyBhIGZhY3RvcnkgdGhhdFxuICAgKiBoYW5kcyBvdXQgc2hhcmVkIGluc3RhbmNlcyBpbnRvIGEgbG91ZCBmYWlsdXJlIGluc3RlYWQgb2YgYSB3cm9uZyBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0IHByb3ZpZGluZyBydW50aW1lIGNhcGFiaWxpdGllcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBvblJlZ2lzdGVyZWQoY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gICAgaWYgKHRoaXMuX3BsdWdpbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ29tbWFuZCBoYW5kbGVyICcke3RoaXMuaWR9JyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIEEgY29tbWFuZCBoYW5kbGVyIGluc3RhbmNlIGNhbm5vdCBiZSByZWdpc3RlcmVkIHR3aWNlIC0gdGhlIGNvbW1hbmQgaGFuZGxlciBmYWN0b3J5IG11c3QgYnVpbGQgZnJlc2ggaW5zdGFuY2VzIG9uIGV2ZXJ5IGNhbGwuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gY29udGV4dC5wbHVnaW5OYW1lO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLHNCQUEwQjtBQUMxQix5QkFBa0M7QUEyRDNCLE1BQWUsZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSWhCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPbkIsSUFBYyxhQUFxQjtBQUNqQyxlQUFPLHNDQUFrQixLQUFLLFdBQVc7QUFBQSxFQUMzQztBQUFBLEVBRVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPRCxZQUFZLFFBQXlDO0FBQzFELFNBQUssT0FBTyxPQUFPO0FBQ25CLFNBQUssS0FBSyxPQUFPO0FBQ2pCLFNBQUssT0FBTyxPQUFPO0FBQUEsRUFDckI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUF1QkEsTUFBYSxhQUFhLFNBQTJEO0FBQ25GLGNBQU0sMkJBQVU7QUFDaEIsUUFBSSxLQUFLLGdCQUFnQixRQUFXO0FBQ2xDLFlBQU0sSUFBSTtBQUFBLFFBQ1Isb0JBQW9CLEtBQUssRUFBRTtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUVBLFNBQUssY0FBYyxRQUFRO0FBQUEsRUFDN0I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -93,6 +93,14 @@ export declare abstract class CommandHandler {
|
|
|
93
93
|
* Called after the command has been registered with Obsidian.
|
|
94
94
|
* Subclasses use the provided context to register menu event handlers.
|
|
95
95
|
*
|
|
96
|
+
* Throws when the same instance is registered twice. A handler stores per-registration state — the
|
|
97
|
+
* plugin name here, the active-file provider and the submenu override in `AbstractFileCommandHandler`,
|
|
98
|
+
* plus whatever a subclass records — and the menu closures registered here read that state lazily, at
|
|
99
|
+
* menu-render time. So a second registration silently rewrites what the first registration's closures
|
|
100
|
+
* will see. `CommandHandlerComponent` registers a handler set once per menu surface, which is why
|
|
101
|
+
* `CommandHandlerFactory` must build FRESH instances on every call; this guard turns a factory that
|
|
102
|
+
* hands out shared instances into a loud failure instead of a wrong context menu.
|
|
103
|
+
*
|
|
96
104
|
* @param context - The registration context providing runtime capabilities.
|
|
97
105
|
*/
|
|
98
106
|
onRegistered(context: CommandHandlerRegistrationContext): Promise<void>;
|
|
@@ -274,8 +274,9 @@ class PluginBase extends (0, import_async_events.mixinAsyncEvents)()(import_obsi
|
|
|
274
274
|
/**
|
|
275
275
|
* Adds a child component.
|
|
276
276
|
*
|
|
277
|
-
* The child is added to an internal wrapper component
|
|
278
|
-
*
|
|
277
|
+
* The child is added to an internal wrapper component, which {@link onload} attaches and loads
|
|
278
|
+
* before wiring anything up. So a child added during {@link onloadImpl} is loaded immediately,
|
|
279
|
+
* children-first, and is usable by the time this method returns.
|
|
279
280
|
*
|
|
280
281
|
* @typeParam TComponent - The type of component to add.
|
|
281
282
|
* @param component - The component instance to add.
|
|
@@ -297,12 +298,15 @@ class PluginBase extends (0, import_async_events.mixinAsyncEvents)()(import_obsi
|
|
|
297
298
|
* Called when the plugin is loaded.
|
|
298
299
|
*
|
|
299
300
|
* Orchestrates loading: registers the universal components, lets the subclass wire its own
|
|
300
|
-
* components via {@link onloadImpl}, then
|
|
301
|
+
* components via {@link onloadImpl}, then awaits the async tail of every load.
|
|
302
|
+
* Each component loads as it is added, children-first.
|
|
301
303
|
*
|
|
302
304
|
* Do NOT override this method. Override {@link onloadImpl} instead.
|
|
303
305
|
*/
|
|
304
306
|
async onload() {
|
|
305
307
|
try {
|
|
308
|
+
super.addChild(this.wrapperComponent);
|
|
309
|
+
this.wrapperComponent.load();
|
|
306
310
|
await (0, import_i18n.initI18N)(this.createTranslationsMap());
|
|
307
311
|
this.pluginContextComponent = this.addChild(
|
|
308
312
|
new import_plugin_context_component.PluginContextComponent({
|
|
@@ -336,14 +340,13 @@ class PluginBase extends (0, import_async_events.mixinAsyncEvents)()(import_obsi
|
|
|
336
340
|
pluginName: this.manifest.name
|
|
337
341
|
})
|
|
338
342
|
);
|
|
339
|
-
this.commandHandlerComponent.registerCommandHandlers(() => [
|
|
343
|
+
await this.commandHandlerComponent.registerCommandHandlers(() => [
|
|
340
344
|
new import_unlock_active_note_command_handler.UnlockActiveNoteCommandHandler({
|
|
341
345
|
app: this.app,
|
|
342
346
|
resourceLockComponent: this.resourceLockComponent
|
|
343
347
|
})
|
|
344
348
|
]);
|
|
345
349
|
await this.onloadImpl();
|
|
346
|
-
super.addChild(this.wrapperComponent);
|
|
347
350
|
await this.wrapperComponent.loadWithPromises();
|
|
348
351
|
} catch (error) {
|
|
349
352
|
(0, import_error.printError)(new Error(`Error loading plugin ${this.manifest.name} (${this.manifest.id})`, { cause: error }));
|
|
@@ -416,4 +419,4 @@ async function showErrorAndDisablePlugin(plugin, message) {
|
|
|
416
419
|
reloadPlugin,
|
|
417
420
|
showErrorAndDisablePlugin
|
|
418
421
|
});
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luRXZlbnRNYXAsXG4gIFBsdWdpbkV2ZW50U291cmNlXG59IGZyb20gJy4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICcuLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGluaXRJMThOIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2xvY2FsZXMvdHJhbnNsYXRpb25zLW1hcC50cyc7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgYWJvcnRTaWduYWxDb21wb25lbnQodmFsdWU6IEFib3J0U2lnbmFsQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHZhbHVlOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2FzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29tbWFuZEhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBjb21tYW5kSGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29uc29sZURlYnVnQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29uc29sZURlYnVnQ29tcG9uZW50KHZhbHVlOiBDb25zb2xlRGVidWdDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb25zb2xlRGVidWdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luQ29udGV4dENvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCh2YWx1ZTogUGx1Z2luQ29udGV4dENvbXBvbmVudCkge1xuICAgIHRoaXMuX3BsdWdpbkNvbnRleHRDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KCk6IFBsdWdpbk5vdGljZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX3BsdWdpbk5vdGljZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCh2YWx1ZTogUGx1Z2luTm90aWNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fcGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWRpdG9yIGxvY2sgY29tcG9uZW50LCB1c2VkIHRvIGxvY2sgbm90ZXMgcmVhZC1vbmx5IGR1cmluZyBsb25nIG9wZXJhdGlvbnMuIE93bmVkIGJ5XG4gICAqIHRoZSBwbHVnaW4sIHNvIGl0cyBsb2NrcyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAgICpcbiAgICogQHJldHVybnMgRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCByZXNvdXJjZUxvY2tDb21wb25lbnQoKTogUmVzb3VyY2VMb2NrQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcmVzb3VyY2VMb2NrQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KHZhbHVlOiBSZXNvdXJjZUxvY2tDb21wb25lbnQpIHtcbiAgICB0aGlzLl9yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ/OiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudDtcblxuICBwcml2YXRlIF9jb21tYW5kSGFuZGxlckNvbXBvbmVudD86IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2NvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Db250ZXh0Q29tcG9uZW50PzogUGx1Z2luQ29udGV4dENvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfcmVzb3VyY2VMb2NrQ29tcG9uZW50PzogUmVzb3VyY2VMb2NrQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gYW4gaW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQgc28gdGhhdCwgZHVyaW5nIHtAbGluayBvbmxvYWRJbXBsfSxcbiAgICogY2hpbGRyZW4gYXJlIHF1ZXVlZCBhbmQgdGhlbiBsb2FkZWQgc2VxdWVudGlhbGx5IChjaGlsZHJlbi1maXJzdCkgd2hlbiB0aGUgcGx1Z2luIGxvYWRzLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckNvbXBvbmVudC5hZGRDaGlsZChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygnZXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLlxuICAgKlxuICAgKiBPcmNoZXN0cmF0ZXMgbG9hZGluZzogcmVnaXN0ZXJzIHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cywgbGV0cyB0aGUgc3ViY2xhc3Mgd2lyZSBpdHMgb3duXG4gICAqIGNvbXBvbmVudHMgdmlhIHtAbGluayBvbmxvYWRJbXBsfSwgdGhlbiBsb2FkcyBhbGwgb2YgdGhlbSBzZXF1ZW50aWFsbHkgKGNoaWxkcmVuLWZpcnN0KS5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiBPdmVycmlkZSB7QGxpbmsgb25sb2FkSW1wbH0gaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGluaXRJMThOKHRoaXMuY3JlYXRlVHJhbnNsYXRpb25zTWFwKCkpO1xuICAgICAgdGhpcy5wbHVnaW5Db250ZXh0Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luSWQ6IHRoaXMubWFuaWZlc3QuaWRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50KSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWJvcnRTaWduYWxDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBSZXNvdXJjZUxvY2tDb21wb25lbnQodGhpcy5hcHAsIHRoaXMubWFuaWZlc3QuaWQpKTtcbiAgICAgIC8vIE5vdGVib29rIE5hdmlnYXRvciBkcmF3cyBpdHMgb3duIGZpbGUgdHJlZSBhbmQgbmV2ZXIgcmFpc2VzIE9ic2lkaWFuJ3MgYGZpbGUtbWVudWAgL1xuICAgICAgLy8gYGZpbGVzLW1lbnVgIGV2ZW50cywgc28gZXZlcnkgcGx1Z2luJ3MgY29udGV4dC1tZW51IGl0ZW1zIHdvdWxkIHZhbmlzaCBmb3IgYW55b25lIGJyb3dzaW5nXG4gICAgICAvLyBUaHJvdWdoIGl0LiBXaXJlZCBoZXJlIHJhdGhlciB0aGFuIHBlci1wbHVnaW46IHRoZSBicmlkZ2Ugc3RheXMgZG9ybWFudCB3aGVuIE5vdGVib29rXG4gICAgICAvLyBOYXZpZ2F0b3IgaXMgbm90IGluc3RhbGxlZCwgYW5kIGEgcGx1Z2luIHdpdGggbm8gZmlsZS9mb2xkZXIgaGFuZGxlcnMgY29udHJpYnV0ZXMgbm90aGluZy5cbiAgICAgIGNvbnN0IG5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgICAgICBzdWJtZW51SWNvbjogdGhpcy5nZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgIG5ldyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCh7XG4gICAgICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiBuZXcgQXBwQWN0aXZlRmlsZVByb3ZpZGVyKHRoaXMuYXBwKSxcbiAgICAgICAgICBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyczogW25vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50XSxcbiAgICAgICAgICBjb21tYW5kUmVnaXN0cmFyOiBuZXcgUGx1Z2luQ29tbWFuZFJlZ2lzdHJhcih0aGlzKSxcbiAgICAgICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IHRoaXMuYWRkQ2hpbGQobmV3IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCh0aGlzLmFwcCkpLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIC8vIEFsd2F5cyBhdmFpbGFibGU7IHRoZSBjb21tYW5kJ3Mgb3duIGBjYW5FeGVjdXRlYCBoaWRlcyBpdCB1bmxlc3MgdGhlIGFjdGl2ZSBub3RlIGlzIGxvY2tlZC5cbiAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnMoKCkgPT4gW1xuICAgICAgICBuZXcgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuXG4gICAgICBhd2FpdCB0aGlzLm9ubG9hZEltcGwoKTtcblxuICAgICAgLy8gQWRkIHRoZSB3cmFwcGVyIHRvIHRoZSBuYXRpdmUgcGx1Z2luIG9ubHkgbm93LCBhZnRlciBhbGwgY2hpbGRyZW4gYXJlIHF1ZXVlZC5cbiAgICAgIC8vIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoaXMgbG9hZHMgdGhlIHdyYXBwZXIncyBjaGlsZHJlbiBzZXF1ZW50aWFsbHkgKGNoaWxkcmVuLWZpcnN0KS5cbiAgICAgIC8vIEl0IGFsc28gcmVnaXN0ZXJzIHRoZSB3cmFwcGVyIGZvciBhdXRvbWF0aWMgdGVhcmRvd24gb24gcGx1Z2luIHVubG9hZC5cbiAgICAgIHN1cGVyLmFkZENoaWxkKHRoaXMud3JhcHBlckNvbXBvbmVudCk7XG4gICAgICBhd2FpdCB0aGlzLndyYXBwZXJDb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcmludEVycm9yKG5ldyBFcnJvcihgRXJyb3IgbG9hZGluZyBwbHVnaW4gJHt0aGlzLm1hbmlmZXN0Lm5hbWV9ICgke3RoaXMubWFuaWZlc3QuaWR9KWAsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy53cmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHRyYW5zbGF0aW9ucyBtYXAgdXNlZCB0byBpbml0aWFsaXplIGkxOG4gZHVyaW5nIHtAbGluayBvbmxvYWR9LlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBzdXBwbHkgcGx1Z2luLXNwZWNpZmljIHRyYW5zbGF0aW9ucy4gVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgYnVpbHQtaW5cbiAgICogYG9ic2lkaWFuLWRldi11dGlsc2AgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIE5vdGVib29rIE5hdmlnYXRvcidzIGNvbnRleHQgbWVudXMuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGJyYW5kIHRoYXQgZW50cnk7IHRoZSBkZWZhdWx0IGxlYXZlcyBpdCB3aXRob3V0IGFuIGljb24uIFRoZSBlbnRyeSBpc1xuICAgKiB0aXRsZWQgd2l0aCB0aGUgcGx1Z2luIG5hbWUgYW5kIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgXHUyMDE0IHNlZVxuICAgKiB7QGxpbmsgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYCcnYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBkdXJpbmcge0BsaW5rIG9ubG9hZH0gdG8gd2lyZSBwbHVnaW4tc3BlY2lmaWMgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYWRkIGNoaWxkIGNvbXBvbmVudHMgdmlhIHtAbGluayBhZGRDaGlsZH0uIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBhcmVcbiAgICogYXZhaWxhYmxlIGhlcmUuIENoaWxkcmVuIGFyZSBsb2FkZWQgc2VxdWVudGlhbGx5IGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCAoY2hpbGRyZW4tZmlyc3QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN1YmNsYXNzIGxvYWQgbG9naWMgaXMgY29tcGxldGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25sb2FkSW1wbCgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGJ5IGRpc2FibGluZyBhbmQgdGhlbiByZS1lbmFibGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZWxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbihwbHVnaW46IFBsdWdpbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luLmFwcC5wbHVnaW5zO1xuICBjb25zdCBwbHVnaW5JZCA9IHBsdWdpbi5tYW5pZmVzdC5pZDtcbiAgYXdhaXQgcGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbklkKTtcbiAgYXdhaXQgcGx1Z2lucy5lbmFibGVQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UgYXMgYSBub3RpY2UsIGxvZ3MgaXQgdG8gdGhlIGNvbnNvbGUsIGFuZCBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBkaXNhYmxlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IGFuZCBsb2cuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dFcnJvckFuZERpc2FibGVQbHVnaW4ocGx1Z2luOiBQbHVnaW4sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBuZXcgUGx1Z2luTm90aWNlQ29tcG9uZW50KHtcbiAgICBhcHA6IHBsdWdpbi5hcHAsXG4gICAgcGx1Z2luTmFtZTogcGx1Z2luLm1hbmlmZXN0Lm5hbWVcbiAgfSk7XG4gIHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKG1lc3NhZ2UpO1xuICBwcmludEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gIGF3YWl0IHBsdWdpbi5hcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbi5tYW5pZmVzdC5pZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxzQkFBdUI7QUFRdkIsMEJBQWlDO0FBQ2pDLG1CQUEyQjtBQUMzQixzQkFBMEI7QUFDMUIseUJBQWtDO0FBQ2xDLGtDQUFzQztBQUN0Qyx1Q0FBd0M7QUFDeEMsZ0RBQStDO0FBQy9DLCtCQUF1QztBQUN2QyxvQ0FBcUM7QUFDckMsMkNBQTJDO0FBQzNDLDBCQUE0QjtBQUM1QixxQ0FBc0M7QUFDdEMsNENBQTRDO0FBQzVDLCtEQUE2RDtBQUM3RCxzQ0FBdUM7QUFDdkMscUNBQXNDO0FBQ3RDLGtCQUF5QjtBQUN6Qiw4QkFBdUM7QUFDdkMsMkJBQXNDO0FBUS9CLE1BQWUsdUJBQW1CLHNDQUFpQyxFQUFFLHNCQUFNLEVBQStCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTS9HLElBQWMsdUJBQTZDO0FBQ3pELGVBQU8sc0NBQWtCLEtBQUsscUJBQXFCO0FBQUEsRUFDckQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHFCQUFxQixPQUE2QjtBQUM5RCxTQUFLLHdCQUF3QjtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyw2QkFBeUQ7QUFDckUsZUFBTyxzQ0FBa0IsS0FBSywyQkFBMkI7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
|
|
422
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luRXZlbnRNYXAsXG4gIFBsdWdpbkV2ZW50U291cmNlXG59IGZyb20gJy4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICcuLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGluaXRJMThOIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2xvY2FsZXMvdHJhbnNsYXRpb25zLW1hcC50cyc7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgYWJvcnRTaWduYWxDb21wb25lbnQodmFsdWU6IEFib3J0U2lnbmFsQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHZhbHVlOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2FzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29tbWFuZEhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBjb21tYW5kSGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29uc29sZURlYnVnQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29uc29sZURlYnVnQ29tcG9uZW50KHZhbHVlOiBDb25zb2xlRGVidWdDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb25zb2xlRGVidWdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luQ29udGV4dENvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCh2YWx1ZTogUGx1Z2luQ29udGV4dENvbXBvbmVudCkge1xuICAgIHRoaXMuX3BsdWdpbkNvbnRleHRDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KCk6IFBsdWdpbk5vdGljZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX3BsdWdpbk5vdGljZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCh2YWx1ZTogUGx1Z2luTm90aWNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fcGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWRpdG9yIGxvY2sgY29tcG9uZW50LCB1c2VkIHRvIGxvY2sgbm90ZXMgcmVhZC1vbmx5IGR1cmluZyBsb25nIG9wZXJhdGlvbnMuIE93bmVkIGJ5XG4gICAqIHRoZSBwbHVnaW4sIHNvIGl0cyBsb2NrcyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAgICpcbiAgICogQHJldHVybnMgRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCByZXNvdXJjZUxvY2tDb21wb25lbnQoKTogUmVzb3VyY2VMb2NrQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcmVzb3VyY2VMb2NrQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KHZhbHVlOiBSZXNvdXJjZUxvY2tDb21wb25lbnQpIHtcbiAgICB0aGlzLl9yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ/OiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudDtcblxuICBwcml2YXRlIF9jb21tYW5kSGFuZGxlckNvbXBvbmVudD86IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2NvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Db250ZXh0Q29tcG9uZW50PzogUGx1Z2luQ29udGV4dENvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfcmVzb3VyY2VMb2NrQ29tcG9uZW50PzogUmVzb3VyY2VMb2NrQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gYW4gaW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQsIHdoaWNoIHtAbGluayBvbmxvYWR9IGF0dGFjaGVzIGFuZCBsb2Fkc1xuICAgKiBiZWZvcmUgd2lyaW5nIGFueXRoaW5nIHVwLiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXMgbG9hZGVkIGltbWVkaWF0ZWx5LFxuICAgKiBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckNvbXBvbmVudC5hZGRDaGlsZChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygnZXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLlxuICAgKlxuICAgKiBPcmNoZXN0cmF0ZXMgbG9hZGluZzogcmVnaXN0ZXJzIHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cywgbGV0cyB0aGUgc3ViY2xhc3Mgd2lyZSBpdHMgb3duXG4gICAqIGNvbXBvbmVudHMgdmlhIHtAbGluayBvbmxvYWRJbXBsfSwgdGhlbiBhd2FpdHMgdGhlIGFzeW5jIHRhaWwgb2YgZXZlcnkgbG9hZC5cbiAgICogRWFjaCBjb21wb25lbnQgbG9hZHMgYXMgaXQgaXMgYWRkZWQsIGNoaWxkcmVuLWZpcnN0LlxuICAgKlxuICAgKiBEbyBOT1Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QuIE92ZXJyaWRlIHtAbGluayBvbmxvYWRJbXBsfSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIHdyYXBwZXIgaXMgYXR0YWNoZWQgYW5kIGxvYWRlZCBiZWZvcmUgYW55dGhpbmcgaXMgd2lyZWQgdXAsIHNvIGV2ZXJ5IGBhZGRDaGlsZGAgYmVsb3dcbiAgICAgIC8vIExvYWRzIGl0cyBjaGlsZCBzdHJhaWdodCBhd2F5IHJhdGhlciB0aGFuIHF1ZXVpbmcgaXQuXG4gICAgICAvLyBUaGF0IGlzIHdoYXQgbGV0cyBhIGNvbW1hbmQgaGFuZGxlciByZWdpc3RlciBpdHMgbWVudSBldmVudHMgZnJvbSBgb25SZWdpc3RlcmVkYCwgd2hpY2hcbiAgICAgIC8vIGByZWdpc3RlckNvbW1hbmRIYW5kbGVyc2AgYXdhaXRzIGFuZCB3aGljaCBhIHJlZ2lzdHJhciByZWZ1c2VzIHdoaWxlIHVubG9hZGVkLlxuICAgICAgLy8gQXR0YWNoaW5nIGl0IHVwIGZyb250IGFsc28gcmVnaXN0ZXJzIHRoZSB3cmFwcGVyIGZvciB0ZWFyZG93biBiZWZvcmUgYW55dGhpbmcgY2FuIHRocm93LlxuICAgICAgLy8gVGhlIGxvYWQgaXMgZXhwbGljaXQgcmF0aGVyIHRoYW4gbGVmdCB0byBgYWRkQ2hpbGRgLCB3aGljaCBsb2FkcyB0aGUgY2hpbGQgb25seSB3aGVuIHRoZVxuICAgICAgLy8gUGx1Z2luIGl0c2VsZiBpcyBsb2FkZWQgXHUyMDE0IHRydWUgd2hlbiBPYnNpZGlhbiBjYWxscyBgbG9hZCgpYCwgYnV0IG5vdCB3aGVuIGEgY2FsbGVyIGludm9rZXNcbiAgICAgIC8vIGBvbmxvYWQoKWAgZGlyZWN0bHkuXG4gICAgICBzdXBlci5hZGRDaGlsZCh0aGlzLndyYXBwZXJDb21wb25lbnQpO1xuICAgICAgdGhpcy53cmFwcGVyQ29tcG9uZW50LmxvYWQoKTtcblxuICAgICAgYXdhaXQgaW5pdEkxOE4odGhpcy5jcmVhdGVUcmFuc2xhdGlvbnNNYXAoKSk7XG4gICAgICB0aGlzLnBsdWdpbkNvbnRleHRDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgUGx1Z2luQ29udGV4dENvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogdGhpcy5tYW5pZmVzdC5pZFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbk5vdGljZUNvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5OYW1lOiB0aGlzLm1hbmlmZXN0Lm5hbWVcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQodGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQpKTtcbiAgICAgIHRoaXMuYWJvcnRTaWduYWxDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBBYm9ydFNpZ25hbENvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IENvbnNvbGVEZWJ1Z0NvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IFJlc291cmNlTG9ja0NvbXBvbmVudCh0aGlzLmFwcCwgdGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgLy8gTm90ZWJvb2sgTmF2aWdhdG9yIGRyYXdzIGl0cyBvd24gZmlsZSB0cmVlIGFuZCBuZXZlciByYWlzZXMgT2JzaWRpYW4ncyBgZmlsZS1tZW51YCAvXG4gICAgICAvLyBgZmlsZXMtbWVudWAgZXZlbnRzLCBzbyBldmVyeSBwbHVnaW4ncyBjb250ZXh0LW1lbnUgaXRlbXMgd291bGQgdmFuaXNoIGZvciBhbnlvbmUgYnJvd3NpbmdcbiAgICAgIC8vIFRocm91Z2ggaXQuIFdpcmVkIGhlcmUgcmF0aGVyIHRoYW4gcGVyLXBsdWdpbjogdGhlIGJyaWRnZSBzdGF5cyBkb3JtYW50IHdoZW4gTm90ZWJvb2tcbiAgICAgIC8vIE5hdmlnYXRvciBpcyBub3QgaW5zdGFsbGVkLCBhbmQgYSBwbHVnaW4gd2l0aCBubyBmaWxlL2ZvbGRlciBoYW5kbGVycyBjb250cmlidXRlcyBub3RoaW5nLlxuICAgICAgY29uc3Qgbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICAgIHN1Ym1lbnVJY29uOiB0aGlzLmdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KHtcbiAgICAgICAgICBhY3RpdmVGaWxlUHJvdmlkZXI6IG5ldyBBcHBBY3RpdmVGaWxlUHJvdmlkZXIodGhpcy5hcHApLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiBbbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnRdLFxuICAgICAgICAgIGNvbW1hbmRSZWdpc3RyYXI6IG5ldyBQbHVnaW5Db21tYW5kUmVnaXN0cmFyKHRoaXMpLFxuICAgICAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogdGhpcy5hZGRDaGlsZChuZXcgTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHRoaXMuYXBwKSksXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgLy8gQWx3YXlzIGF2YWlsYWJsZTsgdGhlIGNvbW1hbmQncyBvd24gYGNhbkV4ZWN1dGVgIGhpZGVzIGl0IHVubGVzcyB0aGUgYWN0aXZlIG5vdGUgaXMgbG9ja2VkLlxuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVycygoKSA9PiBbXG4gICAgICAgIG5ldyBVbmxvY2tBY3RpdmVOb3RlQ29tbWFuZEhhbmRsZXIoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgXSk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25sb2FkSW1wbCgpO1xuXG4gICAgICAvLyBFdmVyeSBjaGlsZCBoYXMgYWxyZWFkeSBsb2FkZWQgYXMgaXQgd2FzIGFkZGVkOyB0aGlzIGF3YWl0cyB0aGVpciBhY2N1bXVsYXRlZCBhc3luYyB0YWlscyBhbmRcbiAgICAgIC8vIFJlcG9ydHMgYW55IGZhaWx1cmUgYXMgYSBzaW5nbGUgYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIGF3YWl0IHRoaXMud3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBFcnJvciBsb2FkaW5nIHBsdWdpbiAke3RoaXMubWFuaWZlc3QubmFtZX0gKCR7dGhpcy5tYW5pZmVzdC5pZH0pYCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLndyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgdHJhbnNsYXRpb25zIG1hcCB1c2VkIHRvIGluaXRpYWxpemUgaTE4biBkdXJpbmcge0BsaW5rIG9ubG9hZH0uXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHN1cHBseSBwbHVnaW4tc3BlY2lmaWMgdHJhbnNsYXRpb25zLiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBidWlsdC1pblxuICAgKiBgb2JzaWRpYW4tZGV2LXV0aWxzYCB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2xhdGlvbnMgbWFwLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVRyYW5zbGF0aW9uc01hcCgpOiBUcmFuc2xhdGlvbnNNYXAge1xuICAgIHJldHVybiBkZWZhdWx0VHJhbnNsYXRpb25zTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBpY29uIHNob3duIG9uIHRoZSBwbHVnaW4ncyBwYXJlbnQgZW50cnkgaW4gTm90ZWJvb2sgTmF2aWdhdG9yJ3MgY29udGV4dCBtZW51cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYnJhbmQgdGhhdCBlbnRyeTsgdGhlIGRlZmF1bHQgbGVhdmVzIGl0IHdpdGhvdXQgYW4gaWNvbi4gVGhlIGVudHJ5IGlzXG4gICAqIHRpdGxlZCB3aXRoIHRoZSBwbHVnaW4gbmFtZSBhbmQgaXMgYWRkZWQgYXV0b21hdGljYWxseSBcdTIwMTQgc2VlXG4gICAqIHtAbGluayBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgJydgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGR1cmluZyB7QGxpbmsgb25sb2FkfSB0byB3aXJlIHBsdWdpbi1zcGVjaWZpYyBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBhZGQgY2hpbGQgY29tcG9uZW50cyB2aWEge0BsaW5rIGFkZENoaWxkfS4gVGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFyZVxuICAgKiBhdmFpbGFibGUgaGVyZS4gQ2hpbGRyZW4gYXJlIGxvYWRlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIChjaGlsZHJlbi1maXJzdCkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3ViY2xhc3MgbG9hZCBsb2dpYyBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvbmxvYWRJbXBsKCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmMoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIHNwZWNpZmllZCBwbHVnaW4gYnkgZGlzYWJsaW5nIGFuZCB0aGVuIHJlLWVuYWJsaW5nIGl0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlbG9hZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkUGx1Z2luKHBsdWdpbjogUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBhd2FpdCBwbHVnaW5zLmVuYWJsZVBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IFBsdWdpbiwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbk5vdGljZUNvbXBvbmVudCA9IG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgIGFwcDogcGx1Z2luLmFwcCxcbiAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubWFuaWZlc3QubmFtZVxuICB9KTtcbiAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UobWVzc2FnZSk7XG4gIHByaW50RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgYXdhaXQgcGx1Z2luLmFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2lu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
|
|
@@ -125,8 +125,9 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
|
|
|
125
125
|
/**
|
|
126
126
|
* Adds a child component.
|
|
127
127
|
*
|
|
128
|
-
* The child is added to an internal wrapper component
|
|
129
|
-
*
|
|
128
|
+
* The child is added to an internal wrapper component, which {@link onload} attaches and loads
|
|
129
|
+
* before wiring anything up. So a child added during {@link onloadImpl} is loaded immediately,
|
|
130
|
+
* children-first, and is usable by the time this method returns.
|
|
130
131
|
*
|
|
131
132
|
* @typeParam TComponent - The type of component to add.
|
|
132
133
|
* @param component - The component instance to add.
|
|
@@ -143,7 +144,8 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
|
|
|
143
144
|
* Called when the plugin is loaded.
|
|
144
145
|
*
|
|
145
146
|
* Orchestrates loading: registers the universal components, lets the subclass wire its own
|
|
146
|
-
* components via {@link onloadImpl}, then
|
|
147
|
+
* components via {@link onloadImpl}, then awaits the async tail of every load.
|
|
148
|
+
* Each component loads as it is added, children-first.
|
|
147
149
|
*
|
|
148
150
|
* Do NOT override this method. Override {@link onloadImpl} instead.
|
|
149
151
|
*/
|
|
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
const LIBRARY_VERSION = "
|
|
24
|
+
const LIBRARY_VERSION = "90.0.1";
|
|
25
25
|
const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-dev-utils.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-dev-utils.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-dev-utils.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-dev-utils.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACCJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
|
|
26
26
|
export {
|
|
27
27
|
LIBRARY_STYLES,
|
|
@@ -18,7 +18,12 @@ import { ComponentEx } from '../components/component-ex.mjs';
|
|
|
18
18
|
* active-file provider, its plugin name, and whatever a subclass records in
|
|
19
19
|
* {@link CommandHandler.onRegistered}) — so every surface needs its own instances.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
21
|
+
* Returning shared instances (`() => [handler1Singleton, handler2Singleton]`) reintroduces exactly the
|
|
22
|
+
* bug the factory exists to avoid, so it is not merely discouraged: {@link CommandHandler.onRegistered}
|
|
23
|
+
* throws on the second registration of an instance. {@link CommandHandlerComponent.registerCommandHandlers}
|
|
24
|
+
* awaits it, so that throw rejects the caller's promise instead of degrading into a wrong context menu.
|
|
25
|
+
*
|
|
26
|
+
* @returns The command handlers to register. A NEW instance of each on every call.
|
|
22
27
|
*/
|
|
23
28
|
export type CommandHandlerFactory = () => CommandHandler[];
|
|
24
29
|
interface CommandHandlerComponentConstructorParams {
|
|
@@ -81,14 +86,12 @@ export declare class CommandHandlerComponent extends ComponentEx {
|
|
|
81
86
|
* @param commandHandlerFactory - Builds a fresh set of command handlers, once per menu surface.
|
|
82
87
|
* @returns A {@link DisposableEx} that unregisters the handlers (commands + menu events) registered by this call.
|
|
83
88
|
*/
|
|
84
|
-
registerCommandHandlers(commandHandlerFactory: CommandHandlerFactory): DisposableEx
|
|
89
|
+
registerCommandHandlers(commandHandlerFactory: CommandHandlerFactory): Promise<DisposableEx>;
|
|
85
90
|
/**
|
|
86
91
|
* Hands a command handler its registration context, scoped so that disposing the returned scope
|
|
87
92
|
* unregisters exactly the menu events that handler registered.
|
|
88
93
|
*
|
|
89
|
-
* @param
|
|
90
|
-
* @param menuEventRegistrar - The menu surface the handler registers its menu events with.
|
|
91
|
-
* @param shouldAddCommandToSubmenu - Overrides the handler's own value, or `undefined` to leave it alone.
|
|
94
|
+
* @param params - The parameters for this registration.
|
|
92
95
|
* @returns The handler's menu-event scope.
|
|
93
96
|
*/
|
|
94
97
|
private registerMenuEventHandlers;
|
|
@@ -21,7 +21,6 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
21
21
|
globalThis.process = browserProcess;
|
|
22
22
|
})();
|
|
23
23
|
|
|
24
|
-
import { invokeAsyncSafely } from "../../async.mjs";
|
|
25
24
|
import {
|
|
26
25
|
CallbackDisposable,
|
|
27
26
|
CombineDisposable,
|
|
@@ -108,13 +107,13 @@ class CommandHandlerComponent extends ComponentEx {
|
|
|
108
107
|
* @param commandHandlerFactory - Builds a fresh set of command handlers, once per menu surface.
|
|
109
108
|
* @returns A {@link DisposableEx} that unregisters the handlers (commands + menu events) registered by this call.
|
|
110
109
|
*/
|
|
111
|
-
registerCommandHandlers(commandHandlerFactory) {
|
|
110
|
+
async registerCommandHandlers(commandHandlerFactory) {
|
|
112
111
|
const disposables = [];
|
|
113
112
|
for (const commandHandler of commandHandlerFactory()) {
|
|
114
113
|
const command = commandHandler.buildCommand();
|
|
115
114
|
const commandId = command.id;
|
|
116
115
|
this.commandRegistrar.addCommand(command);
|
|
117
|
-
const menuEventScope = this.registerMenuEventHandlers(commandHandler, this.menuEventRegistrar);
|
|
116
|
+
const menuEventScope = await this.registerMenuEventHandlers({ commandHandler, menuEventRegistrar: this.menuEventRegistrar });
|
|
118
117
|
const disposable = new CallbackDisposable({
|
|
119
118
|
callback: () => {
|
|
120
119
|
this.commandRegistrar.removeCommand(commandId);
|
|
@@ -125,7 +124,7 @@ class CommandHandlerComponent extends ComponentEx {
|
|
|
125
124
|
}
|
|
126
125
|
for (const additionalMenuEventRegistrar of this.additionalMenuEventRegistrars) {
|
|
127
126
|
for (const commandHandler of commandHandlerFactory()) {
|
|
128
|
-
disposables.push(this.registerDisposable(this.registerMenuEventHandlers(commandHandler, additionalMenuEventRegistrar, false)));
|
|
127
|
+
disposables.push(this.registerDisposable(await this.registerMenuEventHandlers({ commandHandler, menuEventRegistrar: additionalMenuEventRegistrar, shouldAddCommandToSubmenu: false })));
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
130
|
return new CombineDisposable({ disposables });
|
|
@@ -134,24 +133,22 @@ class CommandHandlerComponent extends ComponentEx {
|
|
|
134
133
|
* Hands a command handler its registration context, scoped so that disposing the returned scope
|
|
135
134
|
* unregisters exactly the menu events that handler registered.
|
|
136
135
|
*
|
|
137
|
-
* @param
|
|
138
|
-
* @param menuEventRegistrar - The menu surface the handler registers its menu events with.
|
|
139
|
-
* @param shouldAddCommandToSubmenu - Overrides the handler's own value, or `undefined` to leave it alone.
|
|
136
|
+
* @param params - The parameters for this registration.
|
|
140
137
|
* @returns The handler's menu-event scope.
|
|
141
138
|
*/
|
|
142
|
-
registerMenuEventHandlers(
|
|
143
|
-
const menuEventScope = new CommandMenuEventScope(menuEventRegistrar);
|
|
139
|
+
async registerMenuEventHandlers(params) {
|
|
140
|
+
const menuEventScope = new CommandMenuEventScope(params.menuEventRegistrar);
|
|
144
141
|
const context = {
|
|
145
142
|
activeFileProvider: this.activeFileProvider,
|
|
146
143
|
menuEventRegistrar: menuEventScope,
|
|
147
144
|
pluginName: this.pluginName,
|
|
148
|
-
shouldAddCommandToSubmenu
|
|
145
|
+
shouldAddCommandToSubmenu: params.shouldAddCommandToSubmenu
|
|
149
146
|
};
|
|
150
|
-
|
|
147
|
+
await params.commandHandler.onRegistered(context);
|
|
151
148
|
return menuEventScope;
|
|
152
149
|
}
|
|
153
150
|
}
|
|
154
151
|
export {
|
|
155
152
|
CommandHandlerComponent
|
|
156
153
|
};
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gaXRzIGxpZmVjeWNsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4uLy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1lbnVFdmVudFJlZ2lzdHJhclxufSBmcm9tICcuLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRIYW5kbGVyLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgQ29tYmluZURpc3Bvc2FibGUsXG4gIERpc3Bvc2FibGVCYXNlXG59IGZyb20gJy4uLy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQnVpbGRzIGEgZnJlc2ggc2V0IG9mIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIEEgZmFjdG9yeSByYXRoZXIgdGhhbiBhIHJlYWR5LW1hZGUgYXJyYXkgYmVjYXVzZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnR9IHJlZ2lzdGVycyB0aGUgc2FtZVxuICogaGFuZGxlcnMgYWdhaW5zdCBzZXZlcmFsIG1lbnUgc3VyZmFjZXMsIGFuZCBhIGhhbmRsZXIgY2FycmllcyBwZXItcmVnaXN0cmF0aW9uIHN0YXRlIChpdHNcbiAqIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBpdHMgcGx1Z2luIG5hbWUsIGFuZCB3aGF0ZXZlciBhIHN1YmNsYXNzIHJlY29yZHMgaW5cbiAqIHtAbGluayBDb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWR9KSBcdTIwMTQgc28gZXZlcnkgc3VyZmFjZSBuZWVkcyBpdHMgb3duIGluc3RhbmNlcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBoYW5kbGVycyB0byByZWdpc3Rlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWFuZEhhbmRsZXJGYWN0b3J5ID0gKCkgPT4gQ29tbWFuZEhhbmRsZXJbXTtcblxuaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICByZWFkb25seSBhY3RpdmVGaWxlUHJvdmlkZXI6IEFjdGl2ZUZpbGVQcm92aWRlcjtcbiAgcmVhZG9ubHkgYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnM/OiByZWFkb25seSBNZW51RXZlbnRSZWdpc3RyYXJbXSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgY29tbWFuZFJlZ2lzdHJhcjogQ29tbWFuZFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBlci1jb21tYW5kIHtAbGluayBNZW51RXZlbnRSZWdpc3RyYXJ9IHRoYXQgZGVsZWdhdGVzIHRvIGEgc2hhcmVkIHJlZ2lzdHJhciB3aGlsZSBjb2xsZWN0aW5nIHRoZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeH0gZWFjaCByZWdpc3RyYXRpb24gcmV0dXJucywgc28gZGlzcG9zaW5nIHRoaXMgc2NvcGUgdW5yZWdpc3RlcnMgZXhhY3RseSB0aGF0IGNvbW1hbmQnc1xuICogbWVudSBldmVudHMuIEJlY2F1c2Uge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH0gcnVucyBmaXJlLWFuZC1mb3JnZXQgKGl0IG1heSByZWdpc3RlciBtZW51IGV2ZW50c1xuICogYWZ0ZXIgdGhpcyBzY29wZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkKSwgYSByZWdpc3RyYXRpb24gdGhhdCBhcnJpdmVzIHBvc3QtZGlzcG9zZSBpcyBkaXNwb3NlZCBpbW1lZGlhdGVseVxuICogaW5zdGVhZCBvZiBsZWFraW5nLlxuICovXG5jbGFzcyBDb21tYW5kTWVudUV2ZW50U2NvcGUgZXh0ZW5kcyBEaXNwb3NhYmxlQmFzZSBpbXBsZW1lbnRzIE1lbnVFdmVudFJlZ2lzdHJhciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVFeFtdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5uZXI6IE1lbnVFdmVudFJlZ2lzdHJhcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJFZGl0b3JNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEVkaXRvck1lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3QodGhpcy5pbm5lci5yZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcjogRmlsZU1lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3QodGhpcy5pbm5lci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlc01lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3QodGhpcy5pbm5lci5yZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBkaXNwb3NhYmxlIG9mIHRoaXMuZGlzcG9zYWJsZXMpIHtcbiAgICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3QoZGlzcG9zYWJsZTogRGlzcG9zYWJsZUV4KTogRGlzcG9zYWJsZUV4IHtcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICBkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKGRpc3Bvc2FibGUpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHtAbGluayBDb21tYW5kSGFuZGxlcn1zIHdpdGggT2JzaWRpYW4gYW5kIG1hbmFnZXMgdGhlaXIgbGlmZWN5Y2xlLlxuICpcbiAqIENhbGwge0BsaW5rIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfSB0byByZWdpc3RlciBhIGJhdGNoIG9mIGhhbmRsZXJzIG9uIGRlbWFuZCAoYXMgbWFueSB0aW1lcyBhc1xuICogbmVlZGVkIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgYWxpdmUpOyBkaXNwb3NlIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0byB1bnJlZ2lzdGVyIGV4YWN0bHlcbiAqIHRob3NlIGhhbmRsZXJzIFx1MjAxNCBpbmNsdWRpbmcgYW55IG1lbnUgZXZlbnRzIHRoZXkgcmVnaXN0ZXJlZCBcdTIwMTQgb3IgbGV0IHRoZSBjb21wb25lbnQgdW5sb2FkIHRvIHJlbW92ZSBldmVyeVxuICogY29tbWFuZCBzdGlsbCByZWdpc3RlcmVkIHRocm91Z2ggaXQuXG4gKlxuICogVGhlIHNhbWUgaGFuZGxlcnMgYXJlIGZlZCB0byBldmVyeSBtZW51IHN1cmZhY2UgdGhlIGNvbXBvbmVudCBrbm93cyBhYm91dDogT2JzaWRpYW4ncyBvd24gd29ya3NwYWNlXG4gKiBldmVudHMsIHBsdXMgZWFjaCBhZGRpdGlvbmFsIHtAbGluayBNZW51RXZlbnRSZWdpc3RyYXJ9IGJyaWRnaW5nIGFub3RoZXIgcGx1Z2luJ3MgbWVudXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhY2Nlc3NpbmcgdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhY3RpdmVGaWxlUHJvdmlkZXI6IEFjdGl2ZUZpbGVQcm92aWRlcjtcblxuICAvKipcbiAgICogUmVnaXN0cmFycyBmb3IgbWVudSBzdXJmYWNlcyB0aGF0IGJ1aWxkIHRoZWlyIG93biBwbHVnaW4tdGl0bGVkIHBhcmVudCBlbnRyeSwgYW5kIHRoZXJlZm9yZSB0YWtlXG4gICAqIHRoZSBoYW5kbGVycyB3aXRoIHRoZWlyIHNlY3Rpb24gc3VibWVudSBmb3JjZWQgb2ZmLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiByZWFkb25seSBNZW51RXZlbnRSZWdpc3RyYXJbXTtcblxuICAvKipcbiAgICogUmVnaXN0cmFyIHVzZWQgdG8gYWRkIGFuZCByZW1vdmUgY29tbWFuZHMgd2l0aCBPYnNpZGlhbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjb21tYW5kUmVnaXN0cmFyOiBDb21tYW5kUmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXIgZm9yIG1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZSBjb21tYW5kcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIgPSBwYXJhbXMuYWN0aXZlRmlsZVByb3ZpZGVyO1xuICAgIHRoaXMubWVudUV2ZW50UmVnaXN0cmFyID0gcGFyYW1zLm1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgICB0aGlzLmFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzID0gcGFyYW1zLmFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzID8/IFtdO1xuICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhciA9IHBhcmFtcy5jb21tYW5kUmVnaXN0cmFyO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY29tbWFuZCBoYW5kbGVycyBhbmQgcmVnaXN0ZXJzIHRoZW0gd2l0aCBPYnNpZGlhbiwgZ2l2aW5nIGVhY2ggaXRzIG93biBydW50aW1lXG4gICAqIHJlZ2lzdHJhdGlvbiBjb250ZXh0LiBFYWNoIGhhbmRsZXIncyBjb21tYW5kIGlzIGFkZGVkIGltbWVkaWF0ZWx5OyB0aGUgcmV0dXJuZWRcbiAgICoge0BsaW5rIERpc3Bvc2FibGVFeH0gcmVtb3ZlcyB0aGUgY29tbWFuZHMgcmVnaXN0ZXJlZCBieSB0aGlzIGNhbGwgXHUyMDE0IGFuZCBhbnkgbWVudSBldmVudHMgdGhvc2VcbiAgICogaGFuZGxlcnMgcmVnaXN0ZXJlZCB2aWEgdGhlaXIgY29udGV4dCdzIHtAbGluayBNZW51RXZlbnRSZWdpc3RyYXJ9IFx1MjAxNCB3aGVuIGRpc3Bvc2VkLiBBbnkgY29tbWFuZFxuICAgKiBzdGlsbCByZWdpc3RlcmVkIHdoZW4gdGhlIGNvbXBvbmVudCB1bmxvYWRzIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogVGhlIGZhY3RvcnkgaXMgaW52b2tlZCBvbmNlIG1vcmUgZm9yIGV2ZXJ5IGFkZGl0aW9uYWwgbWVudSBzdXJmYWNlLCBzbyBhIHBsdWdpbiBkZWNsYXJlcyBpdHNcbiAgICogaGFuZGxlcnMgT05DRSBhbmQgYWxsIHN1cmZhY2VzIGFyZSBmZWQuIFRob3NlIGV4dHJhIHBhc3NlcyBhZGQgbm8gY29tbWFuZHMgXHUyMDE0IHRoZSBwYWxldHRlIGFscmVhZHlcbiAgICogaGFzIGV2ZXJ5IGNvbW1hbmQgZnJvbSB0aGUgZmlyc3QgcGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRIYW5kbGVyRmFjdG9yeSAtIEJ1aWxkcyBhIGZyZXNoIHNldCBvZiBjb21tYW5kIGhhbmRsZXJzLCBvbmNlIHBlciBtZW51IHN1cmZhY2UuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlcnMgKGNvbW1hbmRzICsgbWVudSBldmVudHMpIHJlZ2lzdGVyZWQgYnkgdGhpcyBjYWxsLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyRmFjdG9yeTogQ29tbWFuZEhhbmRsZXJGYWN0b3J5KTogRGlzcG9zYWJsZUV4IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb21tYW5kSGFuZGxlciBvZiBjb21tYW5kSGFuZGxlckZhY3RvcnkoKSkge1xuICAgICAgY29uc3QgY29tbWFuZCA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkQ29tbWFuZCgpO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgaWQgYmVmb3JlIHJlZ2lzdGVyaW5nLiBgUGx1Z2luLmFkZENvbW1hbmRgIG11dGF0ZXMgYGNvbW1hbmQuaWRgIChwcmVmaXhpbmcgaXQgd2l0aFxuICAgICAgLy8gYHRoaXMubWFuaWZlc3QuaWRgKSwgd2hpbGUgYFBsdWdpbi5yZW1vdmVDb21tYW5kYCByZS1wcmVmaXhlcyBcdTIwMTQgc28gcmVtb3ZhbCBuZWVkcyB0aGUgb3JpZ2luYWwgaWQuXG4gICAgICAvLyBSZWFkaW5nIGBjb21tYW5kLmlkYCBhZnRlciBgYWRkQ29tbWFuZGAgd291bGQgZG91YmxlLXByZWZpeCBpdCwgc28gdGhlIGNvbW1hbmQgaXMgbmV2ZXIgcmVtb3ZlZC5cbiAgICAgIGNvbnN0IGNvbW1hbmRJZCA9IGNvbW1hbmQuaWQ7XG4gICAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIuYWRkQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgLy8gRWFjaCBjb21tYW5kIGdldHMgaXRzIG93biByZWdpc3RyYXRpb24gY29udGV4dCB3aXRoIGEgcGVyLWNvbW1hbmQgbWVudS1ldmVudCBzY29wZSwgc28gZGlzcG9zaW5nIG9uZVxuICAgICAgLy8gQ29tbWFuZCB0ZWFycyBkb3duIGl0cyBvd24gbWVudSBldmVudHMgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG90aGVycy5cbiAgICAgIGNvbnN0IG1lbnVFdmVudFNjb3BlID0gdGhpcy5yZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyLCB0aGlzLm1lbnVFdmVudFJlZ2lzdHJhcik7XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2FibGUgPSBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICAgICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRSZWdpc3RyYXIucmVtb3ZlQ29tbWFuZChjb21tYW5kSWQpO1xuICAgICAgICAgIG1lbnVFdmVudFNjb3BlLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBUaWUgcmVtb3ZhbCB0byB0aGUgY29tcG9uZW50J3MgdW5sb2FkLCBzbyBhIGNvbW1hbmQgbmV2ZXIgb3V0bGl2ZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgIGRpc3Bvc2FibGVzLnB1c2godGhpcy5yZWdpc3RlckRpc3Bvc2FibGUoZGlzcG9zYWJsZSkpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IGFkZGl0aW9uYWwgc3VyZmFjZSBnZXRzIGl0cyBPV04gaGFuZGxlciBpbnN0YW5jZXMgXHUyMDE0IGEgaGFuZGxlciBjYXJyaWVzIHBlci1yZWdpc3RyYXRpb25cbiAgICAvLyBTdGF0ZSwgc28gb25lIGluc3RhbmNlIGNhbm5vdCBzZXJ2ZSB0d28gc3VyZmFjZXMgXHUyMDE0IGFuZCB0YWtlcyB0aGVtIHdpdGggdGhlIHNlY3Rpb24gc3VibWVudVxuICAgIC8vIEZvcmNlZCBvZmYsIGJlY2F1c2Ugc3VjaCBhIHN1cmZhY2Ugd3JhcHMgZXZlcnl0aGluZyBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IG9mIGl0cyBvd24uXG4gICAgZm9yIChjb25zdCBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyIG9mIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWFuZEhhbmRsZXIgb2YgY29tbWFuZEhhbmRsZXJGYWN0b3J5KCkpIHtcbiAgICAgICAgZGlzcG9zYWJsZXMucHVzaCh0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZSh0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoY29tbWFuZEhhbmRsZXIsIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXIsIGZhbHNlKSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29tYmluZURpc3Bvc2FibGUoeyBkaXNwb3NhYmxlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kcyBhIGNvbW1hbmQgaGFuZGxlciBpdHMgcmVnaXN0cmF0aW9uIGNvbnRleHQsIHNjb3BlZCBzbyB0aGF0IGRpc3Bvc2luZyB0aGUgcmV0dXJuZWQgc2NvcGVcbiAgICogdW5yZWdpc3RlcnMgZXhhY3RseSB0aGUgbWVudSBldmVudHMgdGhhdCBoYW5kbGVyIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSGFuZGxlciAtIFRoZSBjb21tYW5kIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEBwYXJhbSBtZW51RXZlbnRSZWdpc3RyYXIgLSBUaGUgbWVudSBzdXJmYWNlIHRoZSBoYW5kbGVyIHJlZ2lzdGVycyBpdHMgbWVudSBldmVudHMgd2l0aC5cbiAgICogQHBhcmFtIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgLSBPdmVycmlkZXMgdGhlIGhhbmRsZXIncyBvd24gdmFsdWUsIG9yIGB1bmRlZmluZWRgIHRvIGxlYXZlIGl0IGFsb25lLlxuICAgKiBAcmV0dXJucyBUaGUgaGFuZGxlcidzIG1lbnUtZXZlbnQgc2NvcGUuXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoXG4gICAgY29tbWFuZEhhbmRsZXI6IENvbW1hbmRIYW5kbGVyLFxuICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogTWVudUV2ZW50UmVnaXN0cmFyLFxuICAgIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuXG4gICk6IENvbW1hbmRNZW51RXZlbnRTY29wZSB7XG4gICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBuZXcgQ29tbWFuZE1lbnVFdmVudFNjb3BlKG1lbnVFdmVudFJlZ2lzdHJhcik7XG4gICAgY29uc3QgY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0ID0ge1xuICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlcixcbiAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogbWVudUV2ZW50U2NvcGUsXG4gICAgICBwbHVnaW5OYW1lOiB0aGlzLnBsdWdpbk5hbWUsXG4gICAgICBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51XG4gICAgfTtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBjb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWQoY29udGV4dCkpO1xuICAgIHJldHVybiBtZW51RXZlbnRTY29wZTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkEsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQkFBbUI7QUE2QjVCLE1BQU0sOEJBQThCLGVBQTZDO0FBQUEsRUFHeEUsWUFBNkIsT0FBMkI7QUFDN0QsVUFBTTtBQUQ0QjtBQUFBLEVBRXBDO0FBQUEsRUFGb0M7QUFBQSxFQUZuQixjQUE4QixDQUFDO0FBQUEsRUFNekMsK0JBQStCLFNBQStDO0FBQ25GLFdBQU8sS0FBSyxRQUFRLEtBQUssTUFBTSwrQkFBK0IsT0FBTyxDQUFDO0FBQUEsRUFDeEU7QUFBQSxFQUVPLDZCQUE2QixTQUE2QztBQUMvRSxXQUFPLEtBQUssUUFBUSxLQUFLLE1BQU0sNkJBQTZCLE9BQU8sQ0FBQztBQUFBLEVBQ3RFO0FBQUEsRUFFTyw4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
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gaXRzIGxpZmVjeWNsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4uLy4uL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1lbnVFdmVudFJlZ2lzdHJhclxufSBmcm9tICcuLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRIYW5kbGVyLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQge1xuICBDYWxsYmFja0Rpc3Bvc2FibGUsXG4gIENvbWJpbmVEaXNwb3NhYmxlLFxuICBEaXNwb3NhYmxlQmFzZVxufSBmcm9tICcuLi8uLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21wb25lbnQtZXgudHMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIGZyZXNoIHNldCBvZiB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cy5cbiAqXG4gKiBBIGZhY3RvcnkgcmF0aGVyIHRoYW4gYSByZWFkeS1tYWRlIGFycmF5IGJlY2F1c2Uge0BsaW5rIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50fSByZWdpc3RlcnMgdGhlIHNhbWVcbiAqIGhhbmRsZXJzIGFnYWluc3Qgc2V2ZXJhbCBtZW51IHN1cmZhY2VzLCBhbmQgYSBoYW5kbGVyIGNhcnJpZXMgcGVyLXJlZ2lzdHJhdGlvbiBzdGF0ZSAoaXRzXG4gKiBhY3RpdmUtZmlsZSBwcm92aWRlciwgaXRzIHBsdWdpbiBuYW1lLCBhbmQgd2hhdGV2ZXIgYSBzdWJjbGFzcyByZWNvcmRzIGluXG4gKiB7QGxpbmsgQ29tbWFuZEhhbmRsZXIub25SZWdpc3RlcmVkfSkgXHUyMDE0IHNvIGV2ZXJ5IHN1cmZhY2UgbmVlZHMgaXRzIG93biBpbnN0YW5jZXMuXG4gKlxuICogUmV0dXJuaW5nIHNoYXJlZCBpbnN0YW5jZXMgKGAoKSA9PiBbaGFuZGxlcjFTaW5nbGV0b24sIGhhbmRsZXIyU2luZ2xldG9uXWApIHJlaW50cm9kdWNlcyBleGFjdGx5IHRoZVxuICogYnVnIHRoZSBmYWN0b3J5IGV4aXN0cyB0byBhdm9pZCwgc28gaXQgaXMgbm90IG1lcmVseSBkaXNjb3VyYWdlZDoge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH1cbiAqIHRocm93cyBvbiB0aGUgc2Vjb25kIHJlZ2lzdHJhdGlvbiBvZiBhbiBpbnN0YW5jZS4ge0BsaW5rIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50LnJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfVxuICogYXdhaXRzIGl0LCBzbyB0aGF0IHRocm93IHJlamVjdHMgdGhlIGNhbGxlcidzIHByb21pc2UgaW5zdGVhZCBvZiBkZWdyYWRpbmcgaW50byBhIHdyb25nIGNvbnRleHQgbWVudS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBoYW5kbGVycyB0byByZWdpc3Rlci4gQSBORVcgaW5zdGFuY2Ugb2YgZWFjaCBvbiBldmVyeSBjYWxsLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kSGFuZGxlckZhY3RvcnkgPSAoKSA9PiBDb21tYW5kSGFuZGxlcltdO1xuXG5pbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIHJlYWRvbmx5IGFjdGl2ZUZpbGVQcm92aWRlcjogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICByZWFkb25seSBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFycz86IHJlYWRvbmx5IE1lbnVFdmVudFJlZ2lzdHJhcltdIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBjb21tYW5kUmVnaXN0cmFyOiBDb21tYW5kUmVnaXN0cmFyO1xuICByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb21wb25lbnRSZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29tbWFuZEhhbmRsZXI6IENvbW1hbmRIYW5kbGVyO1xuICByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBwZXItY29tbWFuZCB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSB0aGF0IGRlbGVnYXRlcyB0byBhIHNoYXJlZCByZWdpc3RyYXIgd2hpbGUgY29sbGVjdGluZyB0aGVcbiAqIHtAbGluayBEaXNwb3NhYmxlRXh9IGVhY2ggcmVnaXN0cmF0aW9uIHJldHVybnMsIHNvIGRpc3Bvc2luZyB0aGlzIHNjb3BlIHVucmVnaXN0ZXJzIGV4YWN0bHkgdGhhdCBjb21tYW5kJ3NcbiAqIG1lbnUgZXZlbnRzLiBBIGhhbmRsZXIgbWF5IGtlZXAgdGhlIHNjb3BlIHBhc3Qge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH0gYW5kIHJlZ2lzdGVyIG1lbnUgZXZlbnRzXG4gKiBsYXRlciBcdTIwMTQgYSBicmlkZ2UgYmluZGluZyBhdCBsYXlvdXQtcmVhZHksIHNheSBcdTIwMTQgc28gYSByZWdpc3RyYXRpb24gdGhhdCBhcnJpdmVzIGFmdGVyIHRoaXMgc2NvcGUgd2FzIGRpc3Bvc2VkXG4gKiBpcyBkaXNwb3NlZCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGxlYWtpbmcuXG4gKi9cbmNsYXNzIENvbW1hbmRNZW51RXZlbnRTY29wZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgTWVudUV2ZW50UmVnaXN0cmFyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUV4W10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbm5lcjogTWVudUV2ZW50UmVnaXN0cmFyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcjogRWRpdG9yTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGaWxlTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZpbGVzTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGRpc3Bvc2FibGUgb2YgdGhpcy5kaXNwb3NhYmxlcykge1xuICAgICAgZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuZGlzcG9zYWJsZXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlRXgpOiBEaXNwb3NhYmxlRXgge1xuICAgIGlmICh0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3Bvc2FibGVzLnB1c2goZGlzcG9zYWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMge0BsaW5rIENvbW1hbmRIYW5kbGVyfXMgd2l0aCBPYnNpZGlhbiBhbmQgbWFuYWdlcyB0aGVpciBsaWZlY3ljbGUuXG4gKlxuICogQ2FsbCB7QGxpbmsgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnN9IHRvIHJlZ2lzdGVyIGEgYmF0Y2ggb2YgaGFuZGxlcnMgb24gZGVtYW5kIChhcyBtYW55IHRpbWVzIGFzXG4gKiBuZWVkZWQgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBhbGl2ZSk7IGRpc3Bvc2UgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlRXh9IHRvIHVucmVnaXN0ZXIgZXhhY3RseVxuICogdGhvc2UgaGFuZGxlcnMgXHUyMDE0IGluY2x1ZGluZyBhbnkgbWVudSBldmVudHMgdGhleSByZWdpc3RlcmVkIFx1MjAxNCBvciBsZXQgdGhlIGNvbXBvbmVudCB1bmxvYWQgdG8gcmVtb3ZlIGV2ZXJ5XG4gKiBjb21tYW5kIHN0aWxsIHJlZ2lzdGVyZWQgdGhyb3VnaCBpdC5cbiAqXG4gKiBUaGUgc2FtZSBoYW5kbGVycyBhcmUgZmVkIHRvIGV2ZXJ5IG1lbnUgc3VyZmFjZSB0aGUgY29tcG9uZW50IGtub3dzIGFib3V0OiBPYnNpZGlhbidzIG93biB3b3Jrc3BhY2VcbiAqIGV2ZW50cywgcGx1cyBlYWNoIGFkZGl0aW9uYWwge0BsaW5rIE1lbnVFdmVudFJlZ2lzdHJhcn0gYnJpZGdpbmcgYW5vdGhlciBwbHVnaW4ncyBtZW51cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogUHJvdmlkZXIgZm9yIGFjY2Vzc2luZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBmaWxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGl2ZUZpbGVQcm92aWRlcjogQWN0aXZlRmlsZVByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXJzIGZvciBtZW51IHN1cmZhY2VzIHRoYXQgYnVpbGQgdGhlaXIgb3duIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5LCBhbmQgdGhlcmVmb3JlIHRha2VcbiAgICogdGhlIGhhbmRsZXJzIHdpdGggdGhlaXIgc2VjdGlvbiBzdWJtZW51IGZvcmNlZCBvZmYuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnM6IHJlYWRvbmx5IE1lbnVFdmVudFJlZ2lzdHJhcltdO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RyYXIgdXNlZCB0byBhZGQgYW5kIHJlbW92ZSBjb21tYW5kcyB3aXRoIE9ic2lkaWFuLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbW1hbmRSZWdpc3RyYXI6IENvbW1hbmRSZWdpc3RyYXI7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhciBmb3IgbWVudSBldmVudCBoYW5kbGVycy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBtZW51RXZlbnRSZWdpc3RyYXI6IE1lbnVFdmVudFJlZ2lzdHJhcjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IG93bnMgdGhlIGNvbW1hbmRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDb21tYW5kSGFuZGxlckNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlciA9IHBhcmFtcy5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5tZW51RXZlbnRSZWdpc3RyYXIgPSBwYXJhbXMubWVudUV2ZW50UmVnaXN0cmFyO1xuICAgIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPSBwYXJhbXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPz8gW107XG4gICAgdGhpcy5jb21tYW5kUmVnaXN0cmFyID0gcGFyYW1zLmNvbW1hbmRSZWdpc3RyYXI7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gcGFyYW1zLnBsdWdpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBjb21tYW5kIGhhbmRsZXJzIGFuZCByZWdpc3RlcnMgdGhlbSB3aXRoIE9ic2lkaWFuLCBnaXZpbmcgZWFjaCBpdHMgb3duIHJ1bnRpbWVcbiAgICogcmVnaXN0cmF0aW9uIGNvbnRleHQuIEVhY2ggaGFuZGxlcidzIGNvbW1hbmQgaXMgYWRkZWQgaW1tZWRpYXRlbHk7IHRoZSByZXR1cm5lZFxuICAgKiB7QGxpbmsgRGlzcG9zYWJsZUV4fSByZW1vdmVzIHRoZSBjb21tYW5kcyByZWdpc3RlcmVkIGJ5IHRoaXMgY2FsbCBcdTIwMTQgYW5kIGFueSBtZW51IGV2ZW50cyB0aG9zZVxuICAgKiBoYW5kbGVycyByZWdpc3RlcmVkIHZpYSB0aGVpciBjb250ZXh0J3Mge0BsaW5rIE1lbnVFdmVudFJlZ2lzdHJhcn0gXHUyMDE0IHdoZW4gZGlzcG9zZWQuIEFueSBjb21tYW5kXG4gICAqIHN0aWxsIHJlZ2lzdGVyZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMgaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBUaGUgZmFjdG9yeSBpcyBpbnZva2VkIG9uY2UgbW9yZSBmb3IgZXZlcnkgYWRkaXRpb25hbCBtZW51IHN1cmZhY2UsIHNvIGEgcGx1Z2luIGRlY2xhcmVzIGl0c1xuICAgKiBoYW5kbGVycyBPTkNFIGFuZCBhbGwgc3VyZmFjZXMgYXJlIGZlZC4gVGhvc2UgZXh0cmEgcGFzc2VzIGFkZCBubyBjb21tYW5kcyBcdTIwMTQgdGhlIHBhbGV0dGUgYWxyZWFkeVxuICAgKiBoYXMgZXZlcnkgY29tbWFuZCBmcm9tIHRoZSBmaXJzdCBwYXNzLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZEhhbmRsZXJGYWN0b3J5IC0gQnVpbGRzIGEgZnJlc2ggc2V0IG9mIGNvbW1hbmQgaGFuZGxlcnMsIG9uY2UgcGVyIG1lbnUgc3VyZmFjZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVycyAoY29tbWFuZHMgKyBtZW51IGV2ZW50cykgcmVnaXN0ZXJlZCBieSB0aGlzIGNhbGwuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnMoY29tbWFuZEhhbmRsZXJGYWN0b3J5OiBDb21tYW5kSGFuZGxlckZhY3RvcnkpOiBQcm9taXNlPERpc3Bvc2FibGVFeD4ge1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRIYW5kbGVyIG9mIGNvbW1hbmRIYW5kbGVyRmFjdG9yeSgpKSB7XG4gICAgICBjb25zdCBjb21tYW5kID0gY29tbWFuZEhhbmRsZXIuYnVpbGRDb21tYW5kKCk7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBpZCBiZWZvcmUgcmVnaXN0ZXJpbmcuIGBQbHVnaW4uYWRkQ29tbWFuZGAgbXV0YXRlcyBgY29tbWFuZC5pZGAgKHByZWZpeGluZyBpdCB3aXRoXG4gICAgICAvLyBgdGhpcy5tYW5pZmVzdC5pZGApLCB3aGlsZSBgUGx1Z2luLnJlbW92ZUNvbW1hbmRgIHJlLXByZWZpeGVzIFx1MjAxNCBzbyByZW1vdmFsIG5lZWRzIHRoZSBvcmlnaW5hbCBpZC5cbiAgICAgIC8vIFJlYWRpbmcgYGNvbW1hbmQuaWRgIGFmdGVyIGBhZGRDb21tYW5kYCB3b3VsZCBkb3VibGUtcHJlZml4IGl0LCBzbyB0aGUgY29tbWFuZCBpcyBuZXZlciByZW1vdmVkLlxuICAgICAgY29uc3QgY29tbWFuZElkID0gY29tbWFuZC5pZDtcbiAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5hZGRDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAvLyBFYWNoIGNvbW1hbmQgZ2V0cyBpdHMgb3duIHJlZ2lzdHJhdGlvbiBjb250ZXh0IHdpdGggYSBwZXItY29tbWFuZCBtZW51LWV2ZW50IHNjb3BlLCBzbyBkaXNwb3Npbmcgb25lXG4gICAgICAvLyBDb21tYW5kIHRlYXJzIGRvd24gaXRzIG93biBtZW51IGV2ZW50cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXJzLlxuICAgICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoeyBjb21tYW5kSGFuZGxlciwgbWVudUV2ZW50UmVnaXN0cmFyOiB0aGlzLm1lbnVFdmVudFJlZ2lzdHJhciB9KTtcblxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgICAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5yZW1vdmVDb21tYW5kKGNvbW1hbmRJZCk7XG4gICAgICAgICAgbWVudUV2ZW50U2NvcGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIFRpZSByZW1vdmFsIHRvIHRoZSBjb21wb25lbnQncyB1bmxvYWQsIHNvIGEgY29tbWFuZCBuZXZlciBvdXRsaXZlcyB0aGUgY29tcG9uZW50LlxuICAgICAgZGlzcG9zYWJsZXMucHVzaCh0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShkaXNwb3NhYmxlKSk7XG4gICAgfVxuXG4gICAgLy8gRXZlcnkgYWRkaXRpb25hbCBzdXJmYWNlIGdldHMgaXRzIE9XTiBoYW5kbGVyIGluc3RhbmNlcyBcdTIwMTQgYSBoYW5kbGVyIGNhcnJpZXMgcGVyLXJlZ2lzdHJhdGlvblxuICAgIC8vIFN0YXRlLCBzbyBvbmUgaW5zdGFuY2UgY2Fubm90IHNlcnZlIHR3byBzdXJmYWNlcyBcdTIwMTQgYW5kIHRha2VzIHRoZW0gd2l0aCB0aGUgc2VjdGlvbiBzdWJtZW51XG4gICAgLy8gRm9yY2VkIG9mZiwgYmVjYXVzZSBzdWNoIGEgc3VyZmFjZSB3cmFwcyBldmVyeXRoaW5nIGluIGEgcGx1Z2luLXRpdGxlZCBwYXJlbnQgZW50cnkgb2YgaXRzIG93bi5cbiAgICBmb3IgKGNvbnN0IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXIgb2YgdGhpcy5hZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFycykge1xuICAgICAgZm9yIChjb25zdCBjb21tYW5kSGFuZGxlciBvZiBjb21tYW5kSGFuZGxlckZhY3RvcnkoKSkge1xuICAgICAgICBkaXNwb3NhYmxlcy5wdXNoKHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKGF3YWl0IHRoaXMucmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVycyh7IGNvbW1hbmRIYW5kbGVyLCBtZW51RXZlbnRSZWdpc3RyYXI6IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXIsIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU6IGZhbHNlIH0pKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb21iaW5lRGlzcG9zYWJsZSh7IGRpc3Bvc2FibGVzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRzIGEgY29tbWFuZCBoYW5kbGVyIGl0cyByZWdpc3RyYXRpb24gY29udGV4dCwgc2NvcGVkIHNvIHRoYXQgZGlzcG9zaW5nIHRoZSByZXR1cm5lZCBzY29wZVxuICAgKiB1bnJlZ2lzdGVycyBleGFjdGx5IHRoZSBtZW51IGV2ZW50cyB0aGF0IGhhbmRsZXIgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGlzIHJlZ2lzdHJhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGhhbmRsZXIncyBtZW51LWV2ZW50IHNjb3BlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRSZWdpc3Rlck1lbnVFdmVudEhhbmRsZXJzUGFyYW1zKTogUHJvbWlzZTxDb21tYW5kTWVudUV2ZW50U2NvcGU+IHtcbiAgICBjb25zdCBtZW51RXZlbnRTY29wZSA9IG5ldyBDb21tYW5kTWVudUV2ZW50U2NvcGUocGFyYW1zLm1lbnVFdmVudFJlZ2lzdHJhcik7XG4gICAgY29uc3QgY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0ID0ge1xuICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlcixcbiAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogbWVudUV2ZW50U2NvcGUsXG4gICAgICBwbHVnaW5OYW1lOiB0aGlzLnBsdWdpbk5hbWUsXG4gICAgICBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51OiBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudVxuICAgIH07XG4gICAgYXdhaXQgcGFyYW1zLmNvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZChjb250ZXh0KTtcbiAgICByZXR1cm4gbWVudUV2ZW50U2NvcGU7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBd0M1QixNQUFNLDhCQUE4QixlQUE2QztBQUFBLEVBR3hFLFlBQTZCLE9BQTJCO0FBQzdELFVBQU07QUFENEI7QUFBQSxFQUVwQztBQUFBLEVBRm9DO0FBQUEsRUFGbkIsY0FBOEIsQ0FBQztBQUFBLEVBTXpDLCtCQUErQixTQUErQztBQUNuRixXQUFPLEtBQUssUUFBUSxLQUFLLE1BQU0sK0JBQStCLE9BQU8sQ0FBQztBQUFBLEVBQ3hFO0FBQUEsRUFFTyw2QkFBNkIsU0FBNkM7QUFDL0UsV0FBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLDZCQUE2QixPQUFPLENBQUM7QUFBQSxFQUN0RTtBQUFBLEVBRU8sOEJBQThCLFNBQThDO0FBQ2pGLFdBQU8sS0FBSyxRQUFRLEtBQUssTUFBTSw4QkFBOEIsT0FBTyxDQUFDO0FBQUEsRUFDdkU7QUFBQSxFQUVtQixpQkFBdUI7QUFDeEMsZUFBVyxjQUFjLEtBQUssYUFBYTtBQUN6QyxpQkFBVyxRQUFRO0FBQUEsSUFDckI7QUFDQSxTQUFLLFlBQVksU0FBUztBQUFBLEVBQzVCO0FBQUEsRUFFUSxRQUFRLFlBQXdDO0FBQ3RELFFBQUksS0FBSyxZQUFZO0FBQ25CLGlCQUFXLFFBQVE7QUFBQSxJQUNyQixPQUFPO0FBQ0wsV0FBSyxZQUFZLEtBQUssVUFBVTtBQUFBLElBQ2xDO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQWFPLE1BQU0sZ0NBQWdDLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBa0Q7QUFDbkUsVUFBTTtBQUNOLFNBQUsscUJBQXFCLE9BQU87QUFDakMsU0FBSyxxQkFBcUIsT0FBTztBQUNqQyxTQUFLLGdDQUFnQyxPQUFPLGlDQUFpQyxDQUFDO0FBQzlFLFNBQUssbUJBQW1CLE9BQU87QUFDL0IsU0FBSyxhQUFhLE9BQU87QUFBQSxFQUMzQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWdCQSxNQUFhLHdCQUF3Qix1QkFBcUU7QUFDeEcsVUFBTSxjQUE0QixDQUFDO0FBQ25DLGVBQVcsa0JBQWtCLHNCQUFzQixHQUFHO0FBQ3BELFlBQU0sVUFBVSxlQUFlLGFBQWE7QUFJNUMsWUFBTSxZQUFZLFFBQVE7QUFDMUIsV0FBSyxpQkFBaUIsV0FBVyxPQUFPO0FBSXhDLFlBQU0saUJBQWlCLE1BQU0sS0FBSywwQkFBMEIsRUFBRSxnQkFBZ0Isb0JBQW9CLEtBQUssbUJBQW1CLENBQUM7QUFFM0gsWUFBTSxhQUFhLElBQUksbUJBQW1CO0FBQUEsUUFDeEMsVUFBVSxNQUFZO0FBQ3BCLGVBQUssaUJBQWlCLGNBQWMsU0FBUztBQUM3Qyx5QkFBZSxRQUFRO0FBQUEsUUFDekI7QUFBQSxNQUNGLENBQUM7QUFFRCxrQkFBWSxLQUFLLEtBQUssbUJBQW1CLFVBQVUsQ0FBQztBQUFBLElBQ3REO0FBS0EsZUFBVyxnQ0FBZ0MsS0FBSywrQkFBK0I7QUFDN0UsaUJBQVcsa0JBQWtCLHNCQUFzQixHQUFHO0FBQ3BELG9CQUFZLEtBQUssS0FBSyxtQkFBbUIsTUFBTSxLQUFLLDBCQUEwQixFQUFFLGdCQUFnQixvQkFBb0IsOEJBQThCLDJCQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDeEw7QUFBQSxJQUNGO0FBRUEsV0FBTyxJQUFJLGtCQUFrQixFQUFFLFlBQVksQ0FBQztBQUFBLEVBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE1BQWMsMEJBQTBCLFFBQWdHO0FBQ3RJLFVBQU0saUJBQWlCLElBQUksc0JBQXNCLE9BQU8sa0JBQWtCO0FBQzFFLFVBQU0sVUFBNkM7QUFBQSxNQUNqRCxvQkFBb0IsS0FBSztBQUFBLE1BQ3pCLG9CQUFvQjtBQUFBLE1BQ3BCLFlBQVksS0FBSztBQUFBLE1BQ2pCLDJCQUEyQixPQUFPO0FBQUEsSUFDcEM7QUFDQSxVQUFNLE9BQU8sZUFBZSxhQUFhLE9BQU87QUFDaEQsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -93,6 +93,14 @@ export declare abstract class CommandHandler {
|
|
|
93
93
|
* Called after the command has been registered with Obsidian.
|
|
94
94
|
* Subclasses use the provided context to register menu event handlers.
|
|
95
95
|
*
|
|
96
|
+
* Throws when the same instance is registered twice. A handler stores per-registration state — the
|
|
97
|
+
* plugin name here, the active-file provider and the submenu override in `AbstractFileCommandHandler`,
|
|
98
|
+
* plus whatever a subclass records — and the menu closures registered here read that state lazily, at
|
|
99
|
+
* menu-render time. So a second registration silently rewrites what the first registration's closures
|
|
100
|
+
* will see. `CommandHandlerComponent` registers a handler set once per menu surface, which is why
|
|
101
|
+
* `CommandHandlerFactory` must build FRESH instances on every call; this guard turns a factory that
|
|
102
|
+
* hands out shared instances into a loud failure instead of a wrong context menu.
|
|
103
|
+
*
|
|
96
104
|
* @param context - The registration context providing runtime capabilities.
|
|
97
105
|
*/
|
|
98
106
|
onRegistered(context: CommandHandlerRegistrationContext): Promise<void>;
|
|
@@ -59,14 +59,27 @@ class CommandHandler {
|
|
|
59
59
|
* Called after the command has been registered with Obsidian.
|
|
60
60
|
* Subclasses use the provided context to register menu event handlers.
|
|
61
61
|
*
|
|
62
|
+
* Throws when the same instance is registered twice. A handler stores per-registration state — the
|
|
63
|
+
* plugin name here, the active-file provider and the submenu override in `AbstractFileCommandHandler`,
|
|
64
|
+
* plus whatever a subclass records — and the menu closures registered here read that state lazily, at
|
|
65
|
+
* menu-render time. So a second registration silently rewrites what the first registration's closures
|
|
66
|
+
* will see. `CommandHandlerComponent` registers a handler set once per menu surface, which is why
|
|
67
|
+
* `CommandHandlerFactory` must build FRESH instances on every call; this guard turns a factory that
|
|
68
|
+
* hands out shared instances into a loud failure instead of a wrong context menu.
|
|
69
|
+
*
|
|
62
70
|
* @param context - The registration context providing runtime capabilities.
|
|
63
71
|
*/
|
|
64
72
|
async onRegistered(context) {
|
|
65
73
|
await noopAsync();
|
|
74
|
+
if (this._pluginName !== void 0) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`Command handler '${this.id}' is already registered. A command handler instance cannot be registered twice - the command handler factory must build fresh instances on every call.`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
66
79
|
this._pluginName = context.pluginName;
|
|
67
80
|
}
|
|
68
81
|
}
|
|
69
82
|
export {
|
|
70
83
|
CommandHandler
|
|
71
84
|
};
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQmFzZSBjbGFzcyBhbmQgaW50ZXJmYWNlcyBmb3IgY29tbWFuZCBoYW5kbGVycy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmQsXG4gIEljb25OYW1lXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IE1lbnVFdmVudFJlZ2lzdHJhciB9IGZyb20gJy4uL21lbnUtZXZlbnQtcmVnaXN0cmFyLnRzJztcblxuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYSBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaWNvbiBmb3IgdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBpY29uOiBJY29uTmFtZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250ZXh0IHByb3ZpZGVkIHRvIGNvbW1hbmQgaGFuZGxlcnMgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogUHJvdmlkZXIgZm9yIGFjY2Vzc2luZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlRmlsZVByb3ZpZGVyOiBBY3RpdmVGaWxlUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhciBmb3IgbWVudSBldmVudCBoYW5kbGVycy5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnVFdmVudFJlZ2lzdHJhcjogTWVudUV2ZW50UmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGlzIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgaGFuZGxlcidzIG93biBgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudWAsIG9yIGB1bmRlZmluZWRgIHRvIGxlYXZlIGl0IGFsb25lLlxuICAgKlxuICAgKiBBIG1lbnUgc3VyZmFjZSB0aGF0IGFscmVhZHkgd3JhcHMgZXZlcnkgY29udHJpYnV0ZWQgaXRlbSBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IFx1MjAxNCBzdWNoIGFzXG4gICAqIGBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudGAgXHUyMDE0IHNldHMgdGhpcyB0byBgZmFsc2VgLCBiZWNhdXNlIGEgaGFuZGxlciBkZWNsYXJpbmdcbiAgICogYSBzZWN0aW9uIHN1Ym1lbnUgb2YgaXRzIG93biB3b3VsZCBtYWtlIGBNZW51LnNvcnQoKWAgbmVzdCBhIHNlY29uZCBwbHVnaW4tdGl0bGVkIGVudHJ5IGluc2lkZSB0aGVcbiAgICogZmlyc3QuIE9ubHkgYEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyYCByZWFkcyBpdDogdGhlIHN1cmZhY2VzIHRoYXQgbmVlZCBpdCBicmlkZ2UgZmlsZSBhbmRcbiAgICogZm9sZGVyIG1lbnVzLCBuZXZlciB0aGUgZWRpdG9yIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjb21tYW5kIGhhbmRsZXJzLlxuICpcbiAqIFVubGlrZSB0aGUgT2JzaWRpYW4ge0BsaW5rIENvbW1hbmR9IGludGVyZmFjZSwgaGFuZGxlcnMgYXJlIG5ldmVyIG11dGF0ZWQgYnkgT2JzaWRpYW4uXG4gKiBUaGUge0BsaW5rIGJ1aWxkQ29tbWFuZH0gbWV0aG9kIHByb2R1Y2VzIGEgcGxhaW4ge0BsaW5rIENvbW1hbmR9IG9iamVjdCBmb3IgcmVnaXN0cmF0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogVGhlIGljb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb246IEljb25OYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIGNvbW1hbmQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBsdWdpbiBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIF9wbHVnaW5OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNvbW1hbmQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuaWNvbiA9IHBhcmFtcy5pY29uO1xuICAgIHRoaXMuaWQgPSBwYXJhbXMuaWQ7XG4gICAgdGhpcy5uYW1lID0gcGFyYW1zLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcGxhaW4gT2JzaWRpYW4ge0BsaW5rIENvbW1hbmR9IG9iamVjdCBmb3IgcmVnaXN0cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LiBPYnNpZGlhbiBtYXkgbXV0YXRlIHRoaXMgb2JqZWN0IGFmdGVyIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZENvbW1hbmQoKTogQ29tbWFuZDtcblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIHRoZSBjb21tYW5kIGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aCBPYnNpZGlhbi5cbiAgICogU3ViY2xhc3NlcyB1c2UgdGhlIHByb3ZpZGVkIGNvbnRleHQgdG8gcmVnaXN0ZXIgbWVudSBldmVudCBoYW5kbGVycy5cbiAgICpcbiAgICogVGhyb3dzIHdoZW4gdGhlIHNhbWUgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB0d2ljZS4gQSBoYW5kbGVyIHN0b3JlcyBwZXItcmVnaXN0cmF0aW9uIHN0YXRlIFx1MjAxNCB0aGVcbiAgICogcGx1Z2luIG5hbWUgaGVyZSwgdGhlIGFjdGl2ZS1maWxlIHByb3ZpZGVyIGFuZCB0aGUgc3VibWVudSBvdmVycmlkZSBpbiBgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJgLFxuICAgKiBwbHVzIHdoYXRldmVyIGEgc3ViY2xhc3MgcmVjb3JkcyBcdTIwMTQgYW5kIHRoZSBtZW51IGNsb3N1cmVzIHJlZ2lzdGVyZWQgaGVyZSByZWFkIHRoYXQgc3RhdGUgbGF6aWx5LCBhdFxuICAgKiBtZW51LXJlbmRlciB0aW1lLiBTbyBhIHNlY29uZCByZWdpc3RyYXRpb24gc2lsZW50bHkgcmV3cml0ZXMgd2hhdCB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uJ3MgY2xvc3VyZXNcbiAgICogd2lsbCBzZWUuIGBDb21tYW5kSGFuZGxlckNvbXBvbmVudGAgcmVnaXN0ZXJzIGEgaGFuZGxlciBzZXQgb25jZSBwZXIgbWVudSBzdXJmYWNlLCB3aGljaCBpcyB3aHlcbiAgICogYENvbW1hbmRIYW5kbGVyRmFjdG9yeWAgbXVzdCBidWlsZCBGUkVTSCBpbnN0YW5jZXMgb24gZXZlcnkgY2FsbDsgdGhpcyBndWFyZCB0dXJucyBhIGZhY3RvcnkgdGhhdFxuICAgKiBoYW5kcyBvdXQgc2hhcmVkIGluc3RhbmNlcyBpbnRvIGEgbG91ZCBmYWlsdXJlIGluc3RlYWQgb2YgYSB3cm9uZyBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0IHByb3ZpZGluZyBydW50aW1lIGNhcGFiaWxpdGllcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBvblJlZ2lzdGVyZWQoY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbm9vcEFzeW5jKCk7XG4gICAgaWYgKHRoaXMuX3BsdWdpbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ29tbWFuZCBoYW5kbGVyICcke3RoaXMuaWR9JyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIEEgY29tbWFuZCBoYW5kbGVyIGluc3RhbmNlIGNhbm5vdCBiZSByZWdpc3RlcmVkIHR3aWNlIC0gdGhlIGNvbW1hbmQgaGFuZGxlciBmYWN0b3J5IG11c3QgYnVpbGQgZnJlc2ggaW5zdGFuY2VzIG9uIGV2ZXJ5IGNhbGwuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gY29udGV4dC5wbHVnaW5OYW1lO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMseUJBQXlCO0FBMkQzQixNQUFlLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUloQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT25CLElBQWMsYUFBcUI7QUFDakMsV0FBTyxrQkFBa0IsS0FBSyxXQUFXO0FBQUEsRUFDM0M7QUFBQSxFQUVRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0QsWUFBWSxRQUF5QztBQUMxRCxTQUFLLE9BQU8sT0FBTztBQUNuQixTQUFLLEtBQUssT0FBTztBQUNqQixTQUFLLE9BQU8sT0FBTztBQUFBLEVBQ3JCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBdUJBLE1BQWEsYUFBYSxTQUEyRDtBQUNuRixVQUFNLFVBQVU7QUFDaEIsUUFBSSxLQUFLLGdCQUFnQixRQUFXO0FBQ2xDLFlBQU0sSUFBSTtBQUFBLFFBQ1Isb0JBQW9CLEtBQUssRUFBRTtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUVBLFNBQUssY0FBYyxRQUFRO0FBQUEsRUFDN0I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -125,8 +125,9 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
|
|
|
125
125
|
/**
|
|
126
126
|
* Adds a child component.
|
|
127
127
|
*
|
|
128
|
-
* The child is added to an internal wrapper component
|
|
129
|
-
*
|
|
128
|
+
* The child is added to an internal wrapper component, which {@link onload} attaches and loads
|
|
129
|
+
* before wiring anything up. So a child added during {@link onloadImpl} is loaded immediately,
|
|
130
|
+
* children-first, and is usable by the time this method returns.
|
|
130
131
|
*
|
|
131
132
|
* @typeParam TComponent - The type of component to add.
|
|
132
133
|
* @param component - The component instance to add.
|
|
@@ -143,7 +144,8 @@ export declare abstract class PluginBase extends PluginBase_base implements Plug
|
|
|
143
144
|
* Called when the plugin is loaded.
|
|
144
145
|
*
|
|
145
146
|
* Orchestrates loading: registers the universal components, lets the subclass wire its own
|
|
146
|
-
* components via {@link onloadImpl}, then
|
|
147
|
+
* components via {@link onloadImpl}, then awaits the async tail of every load.
|
|
148
|
+
* Each component loads as it is added, children-first.
|
|
147
149
|
*
|
|
148
150
|
* Do NOT override this method. Override {@link onloadImpl} instead.
|
|
149
151
|
*/
|
|
@@ -169,8 +169,9 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
|
|
|
169
169
|
/**
|
|
170
170
|
* Adds a child component.
|
|
171
171
|
*
|
|
172
|
-
* The child is added to an internal wrapper component
|
|
173
|
-
*
|
|
172
|
+
* The child is added to an internal wrapper component, which {@link onload} attaches and loads
|
|
173
|
+
* before wiring anything up. So a child added during {@link onloadImpl} is loaded immediately,
|
|
174
|
+
* children-first, and is usable by the time this method returns.
|
|
174
175
|
*
|
|
175
176
|
* @typeParam TComponent - The type of component to add.
|
|
176
177
|
* @param component - The component instance to add.
|
|
@@ -192,12 +193,15 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
|
|
|
192
193
|
* Called when the plugin is loaded.
|
|
193
194
|
*
|
|
194
195
|
* Orchestrates loading: registers the universal components, lets the subclass wire its own
|
|
195
|
-
* components via {@link onloadImpl}, then
|
|
196
|
+
* components via {@link onloadImpl}, then awaits the async tail of every load.
|
|
197
|
+
* Each component loads as it is added, children-first.
|
|
196
198
|
*
|
|
197
199
|
* Do NOT override this method. Override {@link onloadImpl} instead.
|
|
198
200
|
*/
|
|
199
201
|
async onload() {
|
|
200
202
|
try {
|
|
203
|
+
super.addChild(this.wrapperComponent);
|
|
204
|
+
this.wrapperComponent.load();
|
|
201
205
|
await initI18N(this.createTranslationsMap());
|
|
202
206
|
this.pluginContextComponent = this.addChild(
|
|
203
207
|
new PluginContextComponent({
|
|
@@ -231,14 +235,13 @@ class PluginBase extends mixinAsyncEvents()(Plugin) {
|
|
|
231
235
|
pluginName: this.manifest.name
|
|
232
236
|
})
|
|
233
237
|
);
|
|
234
|
-
this.commandHandlerComponent.registerCommandHandlers(() => [
|
|
238
|
+
await this.commandHandlerComponent.registerCommandHandlers(() => [
|
|
235
239
|
new UnlockActiveNoteCommandHandler({
|
|
236
240
|
app: this.app,
|
|
237
241
|
resourceLockComponent: this.resourceLockComponent
|
|
238
242
|
})
|
|
239
243
|
]);
|
|
240
244
|
await this.onloadImpl();
|
|
241
|
-
super.addChild(this.wrapperComponent);
|
|
242
245
|
await this.wrapperComponent.loadWithPromises();
|
|
243
246
|
} catch (error) {
|
|
244
247
|
printError(new Error(`Error loading plugin ${this.manifest.name} (${this.manifest.id})`, { cause: error }));
|
|
@@ -310,4 +313,4 @@ export {
|
|
|
310
313
|
reloadPlugin,
|
|
311
314
|
showErrorAndDisablePlugin
|
|
312
315
|
};
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luRXZlbnRNYXAsXG4gIFBsdWdpbkV2ZW50U291cmNlXG59IGZyb20gJy4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICcuLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGluaXRJMThOIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2xvY2FsZXMvdHJhbnNsYXRpb25zLW1hcC50cyc7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgYWJvcnRTaWduYWxDb21wb25lbnQodmFsdWU6IEFib3J0U2lnbmFsQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHZhbHVlOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2FzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29tbWFuZEhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBjb21tYW5kSGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29uc29sZURlYnVnQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29uc29sZURlYnVnQ29tcG9uZW50KHZhbHVlOiBDb25zb2xlRGVidWdDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb25zb2xlRGVidWdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luQ29udGV4dENvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCh2YWx1ZTogUGx1Z2luQ29udGV4dENvbXBvbmVudCkge1xuICAgIHRoaXMuX3BsdWdpbkNvbnRleHRDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KCk6IFBsdWdpbk5vdGljZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX3BsdWdpbk5vdGljZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCh2YWx1ZTogUGx1Z2luTm90aWNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fcGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWRpdG9yIGxvY2sgY29tcG9uZW50LCB1c2VkIHRvIGxvY2sgbm90ZXMgcmVhZC1vbmx5IGR1cmluZyBsb25nIG9wZXJhdGlvbnMuIE93bmVkIGJ5XG4gICAqIHRoZSBwbHVnaW4sIHNvIGl0cyBsb2NrcyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAgICpcbiAgICogQHJldHVybnMgRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCByZXNvdXJjZUxvY2tDb21wb25lbnQoKTogUmVzb3VyY2VMb2NrQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcmVzb3VyY2VMb2NrQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KHZhbHVlOiBSZXNvdXJjZUxvY2tDb21wb25lbnQpIHtcbiAgICB0aGlzLl9yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ/OiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudDtcblxuICBwcml2YXRlIF9jb21tYW5kSGFuZGxlckNvbXBvbmVudD86IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2NvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Db250ZXh0Q29tcG9uZW50PzogUGx1Z2luQ29udGV4dENvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfcmVzb3VyY2VMb2NrQ29tcG9uZW50PzogUmVzb3VyY2VMb2NrQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gYW4gaW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQgc28gdGhhdCwgZHVyaW5nIHtAbGluayBvbmxvYWRJbXBsfSxcbiAgICogY2hpbGRyZW4gYXJlIHF1ZXVlZCBhbmQgdGhlbiBsb2FkZWQgc2VxdWVudGlhbGx5IChjaGlsZHJlbi1maXJzdCkgd2hlbiB0aGUgcGx1Z2luIGxvYWRzLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckNvbXBvbmVudC5hZGRDaGlsZChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygnZXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLlxuICAgKlxuICAgKiBPcmNoZXN0cmF0ZXMgbG9hZGluZzogcmVnaXN0ZXJzIHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cywgbGV0cyB0aGUgc3ViY2xhc3Mgd2lyZSBpdHMgb3duXG4gICAqIGNvbXBvbmVudHMgdmlhIHtAbGluayBvbmxvYWRJbXBsfSwgdGhlbiBsb2FkcyBhbGwgb2YgdGhlbSBzZXF1ZW50aWFsbHkgKGNoaWxkcmVuLWZpcnN0KS5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiBPdmVycmlkZSB7QGxpbmsgb25sb2FkSW1wbH0gaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGluaXRJMThOKHRoaXMuY3JlYXRlVHJhbnNsYXRpb25zTWFwKCkpO1xuICAgICAgdGhpcy5wbHVnaW5Db250ZXh0Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luSWQ6IHRoaXMubWFuaWZlc3QuaWRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50KSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWJvcnRTaWduYWxDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBSZXNvdXJjZUxvY2tDb21wb25lbnQodGhpcy5hcHAsIHRoaXMubWFuaWZlc3QuaWQpKTtcbiAgICAgIC8vIE5vdGVib29rIE5hdmlnYXRvciBkcmF3cyBpdHMgb3duIGZpbGUgdHJlZSBhbmQgbmV2ZXIgcmFpc2VzIE9ic2lkaWFuJ3MgYGZpbGUtbWVudWAgL1xuICAgICAgLy8gYGZpbGVzLW1lbnVgIGV2ZW50cywgc28gZXZlcnkgcGx1Z2luJ3MgY29udGV4dC1tZW51IGl0ZW1zIHdvdWxkIHZhbmlzaCBmb3IgYW55b25lIGJyb3dzaW5nXG4gICAgICAvLyBUaHJvdWdoIGl0LiBXaXJlZCBoZXJlIHJhdGhlciB0aGFuIHBlci1wbHVnaW46IHRoZSBicmlkZ2Ugc3RheXMgZG9ybWFudCB3aGVuIE5vdGVib29rXG4gICAgICAvLyBOYXZpZ2F0b3IgaXMgbm90IGluc3RhbGxlZCwgYW5kIGEgcGx1Z2luIHdpdGggbm8gZmlsZS9mb2xkZXIgaGFuZGxlcnMgY29udHJpYnV0ZXMgbm90aGluZy5cbiAgICAgIGNvbnN0IG5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgICAgICBzdWJtZW51SWNvbjogdGhpcy5nZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQoXG4gICAgICAgIG5ldyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCh7XG4gICAgICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiBuZXcgQXBwQWN0aXZlRmlsZVByb3ZpZGVyKHRoaXMuYXBwKSxcbiAgICAgICAgICBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyczogW25vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50XSxcbiAgICAgICAgICBjb21tYW5kUmVnaXN0cmFyOiBuZXcgUGx1Z2luQ29tbWFuZFJlZ2lzdHJhcih0aGlzKSxcbiAgICAgICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IHRoaXMuYWRkQ2hpbGQobmV3IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCh0aGlzLmFwcCkpLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIC8vIEFsd2F5cyBhdmFpbGFibGU7IHRoZSBjb21tYW5kJ3Mgb3duIGBjYW5FeGVjdXRlYCBoaWRlcyBpdCB1bmxlc3MgdGhlIGFjdGl2ZSBub3RlIGlzIGxvY2tlZC5cbiAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnMoKCkgPT4gW1xuICAgICAgICBuZXcgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgIF0pO1xuXG4gICAgICBhd2FpdCB0aGlzLm9ubG9hZEltcGwoKTtcblxuICAgICAgLy8gQWRkIHRoZSB3cmFwcGVyIHRvIHRoZSBuYXRpdmUgcGx1Z2luIG9ubHkgbm93LCBhZnRlciBhbGwgY2hpbGRyZW4gYXJlIHF1ZXVlZC5cbiAgICAgIC8vIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoaXMgbG9hZHMgdGhlIHdyYXBwZXIncyBjaGlsZHJlbiBzZXF1ZW50aWFsbHkgKGNoaWxkcmVuLWZpcnN0KS5cbiAgICAgIC8vIEl0IGFsc28gcmVnaXN0ZXJzIHRoZSB3cmFwcGVyIGZvciBhdXRvbWF0aWMgdGVhcmRvd24gb24gcGx1Z2luIHVubG9hZC5cbiAgICAgIHN1cGVyLmFkZENoaWxkKHRoaXMud3JhcHBlckNvbXBvbmVudCk7XG4gICAgICBhd2FpdCB0aGlzLndyYXBwZXJDb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcmludEVycm9yKG5ldyBFcnJvcihgRXJyb3IgbG9hZGluZyBwbHVnaW4gJHt0aGlzLm1hbmlmZXN0Lm5hbWV9ICgke3RoaXMubWFuaWZlc3QuaWR9KWAsIHsgY2F1c2U6IGVycm9yIH0pKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy53cmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHRyYW5zbGF0aW9ucyBtYXAgdXNlZCB0byBpbml0aWFsaXplIGkxOG4gZHVyaW5nIHtAbGluayBvbmxvYWR9LlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBzdXBwbHkgcGx1Z2luLXNwZWNpZmljIHRyYW5zbGF0aW9ucy4gVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgYnVpbHQtaW5cbiAgICogYG9ic2lkaWFuLWRldi11dGlsc2AgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIE5vdGVib29rIE5hdmlnYXRvcidzIGNvbnRleHQgbWVudXMuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGJyYW5kIHRoYXQgZW50cnk7IHRoZSBkZWZhdWx0IGxlYXZlcyBpdCB3aXRob3V0IGFuIGljb24uIFRoZSBlbnRyeSBpc1xuICAgKiB0aXRsZWQgd2l0aCB0aGUgcGx1Z2luIG5hbWUgYW5kIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgXHUyMDE0IHNlZVxuICAgKiB7QGxpbmsgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYCcnYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBkdXJpbmcge0BsaW5rIG9ubG9hZH0gdG8gd2lyZSBwbHVnaW4tc3BlY2lmaWMgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYWRkIGNoaWxkIGNvbXBvbmVudHMgdmlhIHtAbGluayBhZGRDaGlsZH0uIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBhcmVcbiAgICogYXZhaWxhYmxlIGhlcmUuIENoaWxkcmVuIGFyZSBsb2FkZWQgc2VxdWVudGlhbGx5IGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCAoY2hpbGRyZW4tZmlyc3QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN1YmNsYXNzIGxvYWQgbG9naWMgaXMgY29tcGxldGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25sb2FkSW1wbCgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGJ5IGRpc2FibGluZyBhbmQgdGhlbiByZS1lbmFibGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZWxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbihwbHVnaW46IFBsdWdpbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luLmFwcC5wbHVnaW5zO1xuICBjb25zdCBwbHVnaW5JZCA9IHBsdWdpbi5tYW5pZmVzdC5pZDtcbiAgYXdhaXQgcGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbklkKTtcbiAgYXdhaXQgcGx1Z2lucy5lbmFibGVQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UgYXMgYSBub3RpY2UsIGxvZ3MgaXQgdG8gdGhlIGNvbnNvbGUsIGFuZCBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBkaXNhYmxlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IGFuZCBsb2cuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dFcnJvckFuZERpc2FibGVQbHVnaW4ocGx1Z2luOiBQbHVnaW4sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBuZXcgUGx1Z2luTm90aWNlQ29tcG9uZW50KHtcbiAgICBhcHA6IHBsdWdpbi5hcHAsXG4gICAgcGx1Z2luTmFtZTogcGx1Z2luLm1hbmlmZXN0Lm5hbWVcbiAgfSk7XG4gIHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKG1lc3NhZ2UpO1xuICBwcmludEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gIGF3YWl0IHBsdWdpbi5hcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbi5tYW5pZmVzdC5pZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsY0FBYztBQVF2QixTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLGlCQUFpQjtBQUMxQixTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLCtCQUErQjtBQUN4QyxTQUFTLHNDQUFzQztBQUMvQyxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGtDQUFrQztBQUMzQyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLG9EQUFvRDtBQUM3RCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDZCQUE2QjtBQVEvQixNQUFlLG1CQUFtQixpQkFBaUMsRUFBRSxNQUFNLEVBQStCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTS9HLElBQWMsdUJBQTZDO0FBQ3pELFdBQU8sa0JBQWtCLEtBQUsscUJBQXFCO0FBQUEsRUFDckQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHFCQUFxQixPQUE2QjtBQUM5RCxTQUFLLHdCQUF3QjtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyw2QkFBeUQ7QUFDckUsV0FBTyxrQkFBa0IsS0FBSywyQkFBMkI7QUFBQSxFQUMzRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsMkJBQTJCLE9BQW1DO0FBQzFFLFNBQUssOEJBQThCO0FBQUEsRUFDckM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxJQUFjLDBCQUFtRDtBQUMvRCxXQUFPLGtCQUFrQixLQUFLLHdCQUF3QjtBQUFBLEVBQ3hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyx3QkFBd0IsT0FBZ0M7QUFDcEUsU0FBSywyQkFBMkI7QUFBQSxFQUNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsd0JBQStDO0FBQzNELFdBQU8sa0JBQWtCLEtBQUssc0JBQXNCO0FBQUEsRUFDdEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHNCQUFzQixPQUE4QjtBQUNoRSxTQUFLLHlCQUF5QjtBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyx5QkFBaUQ7QUFDN0QsV0FBTyxrQkFBa0IsS0FBSyx1QkFBdUI7QUFBQSxFQUN2RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsdUJBQXVCLE9BQStCO0FBQ2xFLFNBQUssMEJBQTBCO0FBQUEsRUFDakM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHdCQUErQztBQUMzRCxXQUFPLGtCQUFrQixLQUFLLHNCQUFzQjtBQUFBLEVBQ3REO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxzQkFBc0IsT0FBOEI7QUFDaEUsU0FBSyx5QkFBeUI7QUFBQSxFQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsSUFBYyx3QkFBK0M7QUFDM0QsV0FBTyxrQkFBa0IsS0FBSyxzQkFBc0I7QUFBQSxFQUN0RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsc0JBQXNCLE9BQThCO0FBQ2hFLFNBQUsseUJBQXlCO0FBQUEsRUFDaEM7QUFBQSxFQUVRO0FBQUEsRUFFQTtBQUFBLEVBRUE7QUFBQSxFQUVBO0FBQUEsRUFFQTtBQUFBLEVBRUE7QUFBQSxFQUVBO0FBQUEsRUFFUyxtQkFBbUIsSUFBSSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVlwQyxTQUF1QyxXQUFtQztBQUN4RixXQUFPLEtBQUssaUJBQWlCLFNBQVMsU0FBUztBQUFBLEVBQ2pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsTUFBc0IsMkJBQTBDO0FBQzlELFVBQU0sTUFBTSwyQkFBMkI7QUFDdkMsVUFBTSxLQUFLLGFBQWEsd0JBQXdCO0FBQUEsRUFDbEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxNQUFzQixTQUF3QjtBQUM1QyxRQUFJO0FBQ0YsWUFBTSxTQUFTLEtBQUssc0JBQXNCLENBQUM7QUFDM0MsV0FBSyx5QkFBeUIsS0FBSztBQUFBLFFBQ2pDLElBQUksdUJBQXVCO0FBQUEsVUFDekIsS0FBSyxLQUFLO0FBQUEsVUFDVixVQUFVLEtBQUssU0FBUztBQUFBLFFBQzFCLENBQUM7QUFBQSxNQUNIO0FBQ0EsV0FBSyx3QkFBd0IsS0FBSztBQUFBLFFBQ2hDLElBQUksc0JBQXNCO0FBQUEsVUFDeEIsS0FBSyxLQUFLO0FBQUEsVUFDVixZQUFZLEtBQUssU0FBUztBQUFBLFFBQzVCLENBQUM7QUFBQSxNQUNIO0FBQ0EsV0FBSyw2QkFBNkIsS0FBSyxTQUFTLElBQUksMkJBQTJCLEtBQUsscUJBQXFCLENBQUM7QUFDMUcsV0FBSyx1QkFBdUIsS0FBSyxTQUFTLElBQUkscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7QUFDcEYsV0FBSyx3QkFBd0IsS0FBSyxTQUFTLElBQUksc0JBQXNCLEtBQUssU0FBUyxFQUFFLENBQUM7QUFDdEYsV0FBSyx3QkFBd0IsS0FBSyxTQUFTLElBQUksc0JBQXNCLEtBQUssS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO0FBS2hHLFlBQU0sK0NBQStDLEtBQUs7QUFBQSxRQUN4RCxJQUFJLDZDQUE2QztBQUFBLFVBQy9DLEtBQUssS0FBSztBQUFBLFVBQ1YsWUFBWSxLQUFLLFNBQVM7QUFBQSxVQUMxQixhQUFhLEtBQUssb0NBQW9DO0FBQUEsUUFDeEQsQ0FBQztBQUFBLE1BQ0g7QUFDQSxXQUFLLDBCQUEwQixLQUFLO0FBQUEsUUFDbEMsSUFBSSx3QkFBd0I7QUFBQSxVQUMxQixvQkFBb0IsSUFBSSxzQkFBc0IsS0FBSyxHQUFHO0FBQUEsVUFDdEQsK0JBQStCLENBQUMsNENBQTRDO0FBQUEsVUFDNUUsa0JBQWtCLElBQUksdUJBQXVCLElBQUk7QUFBQSxVQUNqRCxvQkFBb0IsS0FBSyxTQUFTLElBQUksNEJBQTRCLEtBQUssR0FBRyxDQUFDO0FBQUEsVUFDM0UsWUFBWSxLQUFLLFNBQVM7QUFBQSxRQUM1QixDQUFDO0FBQUEsTUFDSDtBQUVBLFdBQUssd0JBQXdCLHdCQUF3QixNQUFNO0FBQUEsUUFDekQsSUFBSSwrQkFBK0I7QUFBQSxVQUNqQyxLQUFLLEtBQUs7QUFBQSxVQUNWLHVCQUF1QixLQUFLO0FBQUEsUUFDOUIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELFlBQU0sS0FBSyxXQUFXO0FBS3RCLFlBQU0sU0FBUyxLQUFLLGdCQUFnQjtBQUNwQyxZQUFNLEtBQUssaUJBQWlCLGlCQUFpQjtBQUFBLElBQy9DLFNBQVMsT0FBTztBQUNkLGlCQUFXLElBQUksTUFBTSx3QkFBd0IsS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUMxRyxZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU2dCLFlBQTBDLFdBQW1DO0FBQzNGLFdBQU8sS0FBSyxpQkFBaUIsWUFBWSxTQUFTO0FBQUEsRUFDcEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVVSx3QkFBeUM7QUFDakQsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdVLHNDQUFnRDtBQUN4RCxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVVLGFBQStCO0FBQ3ZDLFdBQU8sVUFBVTtBQUFBLEVBQ25CO0FBQ0Y7QUFRQSxlQUFzQixhQUFhLFFBQStCO0FBQ2hFLFFBQU0sVUFBVSxPQUFPLElBQUk7QUFDM0IsUUFBTSxXQUFXLE9BQU8sU0FBUztBQUNqQyxRQUFNLFFBQVEsY0FBYyxRQUFRO0FBQ3BDLFFBQU0sUUFBUSxhQUFhLFFBQVE7QUFDckM7QUFTQSxlQUFzQiwwQkFBMEIsUUFBZ0IsU0FBZ0M7QUFDOUYsUUFBTSx3QkFBd0IsSUFBSSxzQkFBc0I7QUFBQSxJQUN0RCxLQUFLLE9BQU87QUFBQSxJQUNaLFlBQVksT0FBTyxTQUFTO0FBQUEsRUFDOUIsQ0FBQztBQUNELHdCQUFzQixXQUFXLE9BQU87QUFDeEMsYUFBVyxJQUFJLE1BQU0sT0FBTyxDQUFDO0FBQzdCLFFBQU0sT0FBTyxJQUFJLFFBQVEsY0FBYyxPQUFPLFNBQVMsRUFBRTtBQUMzRDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zTWFwIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luRXZlbnRNYXAsXG4gIFBsdWdpbkV2ZW50U291cmNlXG59IGZyb20gJy4vcGx1Z2luLWV2ZW50LXNvdXJjZS50cyc7XG5cbmltcG9ydCB7IG1peGluQXN5bmNFdmVudHMgfSBmcm9tICcuLi8uLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IGluaXRJMThOIH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2xvY2FsZXMvdHJhbnNsYXRpb25zLW1hcC50cyc7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQWJvcnQgc2lnbmFsIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgYWJvcnRTaWduYWxDb21wb25lbnQodmFsdWU6IEFib3J0U2lnbmFsQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fYWJvcnRTaWduYWxDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHZhbHVlOiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2FzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29tbWFuZEhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBjb21tYW5kSGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fY29uc29sZURlYnVnQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBDb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29uc29sZURlYnVnQ29tcG9uZW50KHZhbHVlOiBDb25zb2xlRGVidWdDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb25zb2xlRGVidWdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcGx1Z2luQ29udGV4dENvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCh2YWx1ZTogUGx1Z2luQ29udGV4dENvbXBvbmVudCkge1xuICAgIHRoaXMuX3BsdWdpbkNvbnRleHRDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KCk6IFBsdWdpbk5vdGljZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX3BsdWdpbk5vdGljZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCh2YWx1ZTogUGx1Z2luTm90aWNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fcGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWRpdG9yIGxvY2sgY29tcG9uZW50LCB1c2VkIHRvIGxvY2sgbm90ZXMgcmVhZC1vbmx5IGR1cmluZyBsb25nIG9wZXJhdGlvbnMuIE93bmVkIGJ5XG4gICAqIHRoZSBwbHVnaW4sIHNvIGl0cyBsb2NrcyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwbHVnaW4gdW5sb2Fkcy5cbiAgICpcbiAgICogQHJldHVybnMgRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCByZXNvdXJjZUxvY2tDb21wb25lbnQoKTogUmVzb3VyY2VMb2NrQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fcmVzb3VyY2VMb2NrQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBlZGl0b3IgbG9jayBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KHZhbHVlOiBSZXNvdXJjZUxvY2tDb21wb25lbnQpIHtcbiAgICB0aGlzLl9yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2Fib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ/OiBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudDtcblxuICBwcml2YXRlIF9jb21tYW5kSGFuZGxlckNvbXBvbmVudD86IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2NvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Db250ZXh0Q29tcG9uZW50PzogUGx1Z2luQ29udGV4dENvbXBvbmVudDtcblxuICBwcml2YXRlIF9wbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfcmVzb3VyY2VMb2NrQ29tcG9uZW50PzogUmVzb3VyY2VMb2NrQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gYW4gaW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQsIHdoaWNoIHtAbGluayBvbmxvYWR9IGF0dGFjaGVzIGFuZCBsb2Fkc1xuICAgKiBiZWZvcmUgd2lyaW5nIGFueXRoaW5nIHVwLiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXMgbG9hZGVkIGltbWVkaWF0ZWx5LFxuICAgKiBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFRDb21wb25lbnQgLSBUaGUgdHlwZSBvZiBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBhZGRlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMud3JhcHBlckNvbXBvbmVudC5hZGRDaGlsZChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBleHRlcm5hbCBzZXR0aW5ncyBjaGFuZ2UuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIGlmIG5lZWRlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZSgpYCBmaXJzdC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlPy4oKTtcbiAgICBhd2FpdCB0aGlzLnRyaWdnZXJBc3luYygnZXh0ZXJuYWxTZXR0aW5nc0NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgbG9hZGVkLlxuICAgKlxuICAgKiBPcmNoZXN0cmF0ZXMgbG9hZGluZzogcmVnaXN0ZXJzIHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cywgbGV0cyB0aGUgc3ViY2xhc3Mgd2lyZSBpdHMgb3duXG4gICAqIGNvbXBvbmVudHMgdmlhIHtAbGluayBvbmxvYWRJbXBsfSwgdGhlbiBhd2FpdHMgdGhlIGFzeW5jIHRhaWwgb2YgZXZlcnkgbG9hZC5cbiAgICogRWFjaCBjb21wb25lbnQgbG9hZHMgYXMgaXQgaXMgYWRkZWQsIGNoaWxkcmVuLWZpcnN0LlxuICAgKlxuICAgKiBEbyBOT1Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QuIE92ZXJyaWRlIHtAbGluayBvbmxvYWRJbXBsfSBpbnN0ZWFkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIHdyYXBwZXIgaXMgYXR0YWNoZWQgYW5kIGxvYWRlZCBiZWZvcmUgYW55dGhpbmcgaXMgd2lyZWQgdXAsIHNvIGV2ZXJ5IGBhZGRDaGlsZGAgYmVsb3dcbiAgICAgIC8vIExvYWRzIGl0cyBjaGlsZCBzdHJhaWdodCBhd2F5IHJhdGhlciB0aGFuIHF1ZXVpbmcgaXQuXG4gICAgICAvLyBUaGF0IGlzIHdoYXQgbGV0cyBhIGNvbW1hbmQgaGFuZGxlciByZWdpc3RlciBpdHMgbWVudSBldmVudHMgZnJvbSBgb25SZWdpc3RlcmVkYCwgd2hpY2hcbiAgICAgIC8vIGByZWdpc3RlckNvbW1hbmRIYW5kbGVyc2AgYXdhaXRzIGFuZCB3aGljaCBhIHJlZ2lzdHJhciByZWZ1c2VzIHdoaWxlIHVubG9hZGVkLlxuICAgICAgLy8gQXR0YWNoaW5nIGl0IHVwIGZyb250IGFsc28gcmVnaXN0ZXJzIHRoZSB3cmFwcGVyIGZvciB0ZWFyZG93biBiZWZvcmUgYW55dGhpbmcgY2FuIHRocm93LlxuICAgICAgLy8gVGhlIGxvYWQgaXMgZXhwbGljaXQgcmF0aGVyIHRoYW4gbGVmdCB0byBgYWRkQ2hpbGRgLCB3aGljaCBsb2FkcyB0aGUgY2hpbGQgb25seSB3aGVuIHRoZVxuICAgICAgLy8gUGx1Z2luIGl0c2VsZiBpcyBsb2FkZWQgXHUyMDE0IHRydWUgd2hlbiBPYnNpZGlhbiBjYWxscyBgbG9hZCgpYCwgYnV0IG5vdCB3aGVuIGEgY2FsbGVyIGludm9rZXNcbiAgICAgIC8vIGBvbmxvYWQoKWAgZGlyZWN0bHkuXG4gICAgICBzdXBlci5hZGRDaGlsZCh0aGlzLndyYXBwZXJDb21wb25lbnQpO1xuICAgICAgdGhpcy53cmFwcGVyQ29tcG9uZW50LmxvYWQoKTtcblxuICAgICAgYXdhaXQgaW5pdEkxOE4odGhpcy5jcmVhdGVUcmFuc2xhdGlvbnNNYXAoKSk7XG4gICAgICB0aGlzLnBsdWdpbkNvbnRleHRDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgUGx1Z2luQ29udGV4dENvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogdGhpcy5tYW5pZmVzdC5pZFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbk5vdGljZUNvbXBvbmVudCh7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5OYW1lOiB0aGlzLm1hbmlmZXN0Lm5hbWVcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQodGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQpKTtcbiAgICAgIHRoaXMuYWJvcnRTaWduYWxDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKG5ldyBBYm9ydFNpZ25hbENvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IENvbnNvbGVEZWJ1Z0NvbXBvbmVudCh0aGlzLm1hbmlmZXN0LmlkKSk7XG4gICAgICB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudCA9IHRoaXMuYWRkQ2hpbGQobmV3IFJlc291cmNlTG9ja0NvbXBvbmVudCh0aGlzLmFwcCwgdGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgLy8gTm90ZWJvb2sgTmF2aWdhdG9yIGRyYXdzIGl0cyBvd24gZmlsZSB0cmVlIGFuZCBuZXZlciByYWlzZXMgT2JzaWRpYW4ncyBgZmlsZS1tZW51YCAvXG4gICAgICAvLyBgZmlsZXMtbWVudWAgZXZlbnRzLCBzbyBldmVyeSBwbHVnaW4ncyBjb250ZXh0LW1lbnUgaXRlbXMgd291bGQgdmFuaXNoIGZvciBhbnlvbmUgYnJvd3NpbmdcbiAgICAgIC8vIFRocm91Z2ggaXQuIFdpcmVkIGhlcmUgcmF0aGVyIHRoYW4gcGVyLXBsdWdpbjogdGhlIGJyaWRnZSBzdGF5cyBkb3JtYW50IHdoZW4gTm90ZWJvb2tcbiAgICAgIC8vIE5hdmlnYXRvciBpcyBub3QgaW5zdGFsbGVkLCBhbmQgYSBwbHVnaW4gd2l0aCBubyBmaWxlL2ZvbGRlciBoYW5kbGVycyBjb250cmlidXRlcyBub3RoaW5nLlxuICAgICAgY29uc3Qgbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQgPSB0aGlzLmFkZENoaWxkKFxuICAgICAgICBuZXcgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lLFxuICAgICAgICAgIHN1Ym1lbnVJY29uOiB0aGlzLmdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChcbiAgICAgICAgbmV3IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KHtcbiAgICAgICAgICBhY3RpdmVGaWxlUHJvdmlkZXI6IG5ldyBBcHBBY3RpdmVGaWxlUHJvdmlkZXIodGhpcy5hcHApLFxuICAgICAgICAgIGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzOiBbbm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnRdLFxuICAgICAgICAgIGNvbW1hbmRSZWdpc3RyYXI6IG5ldyBQbHVnaW5Db21tYW5kUmVnaXN0cmFyKHRoaXMpLFxuICAgICAgICAgIG1lbnVFdmVudFJlZ2lzdHJhcjogdGhpcy5hZGRDaGlsZChuZXcgTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHRoaXMuYXBwKSksXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgLy8gQWx3YXlzIGF2YWlsYWJsZTsgdGhlIGNvbW1hbmQncyBvd24gYGNhbkV4ZWN1dGVgIGhpZGVzIGl0IHVubGVzcyB0aGUgYWN0aXZlIG5vdGUgaXMgbG9ja2VkLlxuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVycygoKSA9PiBbXG4gICAgICAgIG5ldyBVbmxvY2tBY3RpdmVOb3RlQ29tbWFuZEhhbmRsZXIoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiB0aGlzLnJlc291cmNlTG9ja0NvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgXSk7XG5cbiAgICAgIGF3YWl0IHRoaXMub25sb2FkSW1wbCgpO1xuXG4gICAgICAvLyBFdmVyeSBjaGlsZCBoYXMgYWxyZWFkeSBsb2FkZWQgYXMgaXQgd2FzIGFkZGVkOyB0aGlzIGF3YWl0cyB0aGVpciBhY2N1bXVsYXRlZCBhc3luYyB0YWlscyBhbmRcbiAgICAgIC8vIFJlcG9ydHMgYW55IGZhaWx1cmUgYXMgYSBzaW5nbGUgYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIGF3YWl0IHRoaXMud3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBFcnJvciBsb2FkaW5nIHBsdWdpbiAke3RoaXMubWFuaWZlc3QubmFtZX0gKCR7dGhpcy5tYW5pZmVzdC5pZH0pYCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLndyYXBwZXJDb21wb25lbnQucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgdHJhbnNsYXRpb25zIG1hcCB1c2VkIHRvIGluaXRpYWxpemUgaTE4biBkdXJpbmcge0BsaW5rIG9ubG9hZH0uXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIHN1cHBseSBwbHVnaW4tc3BlY2lmaWMgdHJhbnNsYXRpb25zLiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBidWlsdC1pblxuICAgKiBgb2JzaWRpYW4tZGV2LXV0aWxzYCB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2xhdGlvbnMgbWFwLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVRyYW5zbGF0aW9uc01hcCgpOiBUcmFuc2xhdGlvbnNNYXAge1xuICAgIHJldHVybiBkZWZhdWx0VHJhbnNsYXRpb25zTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBpY29uIHNob3duIG9uIHRoZSBwbHVnaW4ncyBwYXJlbnQgZW50cnkgaW4gTm90ZWJvb2sgTmF2aWdhdG9yJ3MgY29udGV4dCBtZW51cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYnJhbmQgdGhhdCBlbnRyeTsgdGhlIGRlZmF1bHQgbGVhdmVzIGl0IHdpdGhvdXQgYW4gaWNvbi4gVGhlIGVudHJ5IGlzXG4gICAqIHRpdGxlZCB3aXRoIHRoZSBwbHVnaW4gbmFtZSBhbmQgaXMgYWRkZWQgYXV0b21hdGljYWxseSBcdTIwMTQgc2VlXG4gICAqIHtAbGluayBOb3RlYm9va05hdmlnYXRvck1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgJydgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5vdGVib29rTmF2aWdhdG9yTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGR1cmluZyB7QGxpbmsgb25sb2FkfSB0byB3aXJlIHBsdWdpbi1zcGVjaWZpYyBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBhZGQgY2hpbGQgY29tcG9uZW50cyB2aWEge0BsaW5rIGFkZENoaWxkfS4gVGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFyZVxuICAgKiBhdmFpbGFibGUgaGVyZS4gQ2hpbGRyZW4gYXJlIGxvYWRlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGFkZGVkIChjaGlsZHJlbi1maXJzdCkuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc3ViY2xhc3MgbG9hZCBsb2dpYyBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvbmxvYWRJbXBsKCk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmMoKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIHNwZWNpZmllZCBwbHVnaW4gYnkgZGlzYWJsaW5nIGFuZCB0aGVuIHJlLWVuYWJsaW5nIGl0LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlbG9hZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIHJlbG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsb2FkUGx1Z2luKHBsdWdpbjogUGx1Z2luKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbnMgPSBwbHVnaW4uYXBwLnBsdWdpbnM7XG4gIGNvbnN0IHBsdWdpbklkID0gcGx1Z2luLm1hbmlmZXN0LmlkO1xuICBhd2FpdCBwbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2luSWQpO1xuICBhd2FpdCBwbHVnaW5zLmVuYWJsZVBsdWdpbihwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhcyBhIG5vdGljZSwgbG9ncyBpdCB0byB0aGUgY29uc29sZSwgYW5kIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGRpc2FibGUuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgYW5kIGxvZy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hvd0Vycm9yQW5kRGlzYWJsZVBsdWdpbihwbHVnaW46IFBsdWdpbiwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsdWdpbk5vdGljZUNvbXBvbmVudCA9IG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgIGFwcDogcGx1Z2luLmFwcCxcbiAgICBwbHVnaW5OYW1lOiBwbHVnaW4ubWFuaWZlc3QubmFtZVxuICB9KTtcbiAgcGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UobWVzc2FnZSk7XG4gIHByaW50RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgYXdhaXQgcGx1Z2luLmFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW4ocGx1Z2lu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
|