obsidian-integration-testing 12.0.0 → 12.1.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/dist/lib/cjs/adb-device-list.cjs +54 -0
- package/dist/lib/cjs/adb-device-list.d.cts +72 -0
- package/dist/lib/cjs/adb.cjs +61 -0
- package/dist/lib/cjs/adb.d.cts +61 -0
- package/dist/lib/cjs/android-sdk.cjs +52 -0
- package/dist/lib/cjs/android-sdk.d.cts +29 -0
- package/dist/lib/cjs/app-startup-progress.cjs +87 -0
- package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
- package/dist/lib/cjs/appium-server-marker.cjs +29 -32
- package/dist/lib/cjs/appium-server-marker.d.cts +22 -0
- package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
- package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
- package/dist/lib/cjs/community-plugin-registry.cjs +1 -1
- package/dist/lib/cjs/community-plugin-registry.d.cts +1 -1
- package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
- package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
- package/dist/lib/cjs/config-directory.cjs +46 -0
- package/dist/lib/cjs/config-directory.d.cts +45 -0
- package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
- package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
- package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
- package/dist/lib/cjs/demo-vault-bootstrap.d.cts +3 -2
- package/dist/lib/cjs/demo-vault-populate.cjs +3 -2
- package/dist/lib/cjs/device-readiness.cjs +38 -3
- package/dist/lib/cjs/device-readiness.d.cts +83 -9
- package/dist/lib/cjs/device-screenshot.cjs +42 -0
- package/dist/lib/cjs/device-screenshot.d.cts +36 -0
- package/dist/lib/cjs/device-setting-restore.cjs +45 -0
- package/dist/lib/cjs/device-setting-restore.d.cts +60 -0
- package/dist/lib/cjs/device-settings-command.cjs +49 -0
- package/dist/lib/cjs/device-settings-command.d.cts +76 -0
- package/dist/lib/cjs/device-settings.cjs +88 -0
- package/dist/lib/cjs/device-settings.d.cts +94 -0
- package/dist/lib/cjs/emulator-arguments.cjs +6 -2
- package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
- package/dist/lib/cjs/emulator-backend.cjs +71 -0
- package/dist/lib/cjs/emulator-backend.d.cts +76 -0
- package/dist/lib/cjs/emulator-device-id.cjs +32 -0
- package/dist/lib/cjs/emulator-device-id.d.cts +49 -0
- package/dist/lib/cjs/emulator-liveness.cjs +72 -0
- package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
- package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
- package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
- package/dist/lib/cjs/global-setup-core.cjs +30 -30
- package/dist/lib/cjs/global-setup-core.d.cts +27 -2
- package/dist/lib/cjs/headless-vault-config.cjs +51 -0
- package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
- package/dist/lib/cjs/index.cjs +67 -3
- package/dist/lib/cjs/index.d.cts +24 -1
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +14 -2
- package/dist/lib/cjs/mobile-input.d.cts +5 -9
- package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
- package/dist/lib/cjs/obsidian-instance.cjs +52 -3
- package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
- package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
- package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
- package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
- package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
- package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
- package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
- package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
- package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
- package/dist/lib/cjs/parent-liveness.cjs +42 -5
- package/dist/lib/cjs/parent-liveness.d.cts +37 -5
- package/dist/lib/cjs/port-owner.cjs +61 -0
- package/dist/lib/cjs/port-owner.d.cts +47 -0
- package/dist/lib/cjs/process-capture.cjs +62 -0
- package/dist/lib/cjs/process-capture.d.cts +83 -0
- package/dist/lib/cjs/process-exit-message.cjs +14 -8
- package/dist/lib/cjs/process-exit-message.d.cts +37 -3
- package/dist/lib/cjs/process-liveness.cjs +51 -0
- package/dist/lib/cjs/process-liveness.d.cts +18 -0
- package/dist/lib/cjs/resolve-emulator-device-id.cjs +54 -0
- package/dist/lib/cjs/resolve-emulator-device-id.d.cts +28 -0
- package/dist/lib/cjs/run-version-matrix.cjs +1 -1
- package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
- package/dist/lib/cjs/soft-keyboard-geometry.cjs +75 -0
- package/dist/lib/cjs/soft-keyboard-geometry.d.cts +156 -0
- package/dist/lib/cjs/soft-keyboard.cjs +118 -0
- package/dist/lib/cjs/soft-keyboard.d.cts +82 -0
- package/dist/lib/cjs/teardown-verdict.cjs +53 -0
- package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
- package/dist/lib/cjs/temporary-vault.cjs +43 -8
- package/dist/lib/cjs/temporary-vault.d.cts +47 -5
- package/dist/lib/cjs/transport-appium.cjs +102 -17
- package/dist/lib/cjs/transport-appium.d.cts +53 -3
- package/dist/lib/cjs/transport-desktop-cdp.cjs +195 -6
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +99 -0
- package/dist/lib/cjs/transport-factory.cjs +951 -133
- package/dist/lib/cjs/transport-options.cjs +11 -3
- package/dist/lib/cjs/transport-options.d.cts +131 -12
- package/dist/lib/cjs/transport.cjs +1 -1
- package/dist/lib/cjs/transport.d.cts +7 -1
- package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
- package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
- package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
- package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
- package/dist/lib/cjs/version-matrix.cjs +1 -1
- package/dist/lib/cjs/version-matrix.d.cts +2 -2
- package/dist/lib/cjs/webview-cdp.cjs +6 -7
- package/dist/lib/cjs/webview-cdp.d.cts +5 -1
- package/dist/lib/esm/adb-device-list.d.mts +72 -0
- package/dist/lib/esm/adb-device-list.mjs +28 -0
- package/dist/lib/esm/adb.d.mts +61 -0
- package/dist/lib/esm/adb.mjs +35 -0
- package/dist/lib/esm/android-sdk.d.mts +29 -0
- package/dist/lib/esm/android-sdk.mjs +18 -0
- package/dist/lib/esm/app-startup-progress.d.mts +128 -0
- package/dist/lib/esm/app-startup-progress.mjs +59 -0
- package/dist/lib/esm/appium-server-marker.d.mts +22 -0
- package/dist/lib/esm/appium-server-marker.mjs +28 -22
- package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
- package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
- package/dist/lib/esm/community-plugin-registry.d.mts +1 -1
- package/dist/lib/esm/community-plugin-registry.mjs +1 -1
- package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
- package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
- package/dist/lib/esm/config-directory.d.mts +45 -0
- package/dist/lib/esm/config-directory.mjs +21 -0
- package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
- package/dist/lib/esm/connect-to-cdp.mjs +13 -7
- package/dist/lib/esm/demo-vault-bootstrap.d.mts +3 -2
- package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
- package/dist/lib/esm/demo-vault-populate.mjs +3 -2
- package/dist/lib/esm/device-readiness.d.mts +83 -9
- package/dist/lib/esm/device-readiness.mjs +34 -2
- package/dist/lib/esm/device-screenshot.d.mts +36 -0
- package/dist/lib/esm/device-screenshot.mjs +18 -0
- package/dist/lib/esm/device-setting-restore.d.mts +60 -0
- package/dist/lib/esm/device-setting-restore.mjs +20 -0
- package/dist/lib/esm/device-settings-command.d.mts +76 -0
- package/dist/lib/esm/device-settings-command.mjs +23 -0
- package/dist/lib/esm/device-settings.d.mts +94 -0
- package/dist/lib/esm/device-settings.mjs +67 -0
- package/dist/lib/esm/emulator-arguments.d.mts +26 -0
- package/dist/lib/esm/emulator-arguments.mjs +6 -2
- package/dist/lib/esm/emulator-backend.d.mts +76 -0
- package/dist/lib/esm/emulator-backend.mjs +45 -0
- package/dist/lib/esm/emulator-device-id.d.mts +49 -0
- package/dist/lib/esm/emulator-device-id.mjs +8 -0
- package/dist/lib/esm/emulator-liveness.d.mts +158 -0
- package/dist/lib/esm/emulator-liveness.mjs +47 -0
- package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
- package/dist/lib/esm/emulator-snapshot.mjs +32 -0
- package/dist/lib/esm/global-setup-core.d.mts +27 -2
- package/dist/lib/esm/global-setup-core.mjs +34 -35
- package/dist/lib/esm/headless-vault-config.d.mts +67 -0
- package/dist/lib/esm/headless-vault-config.mjs +31 -0
- package/dist/lib/esm/index.d.mts +24 -1
- package/dist/lib/esm/index.mjs +68 -2
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.d.mts +5 -9
- package/dist/lib/esm/mobile-input.mjs +14 -2
- package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
- package/dist/lib/esm/obsidian-instance.d.mts +12 -0
- package/dist/lib/esm/obsidian-instance.mjs +55 -3
- package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
- package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
- package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
- package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
- package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
- package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
- package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
- package/dist/lib/esm/owned-vault-seed.mjs +9 -5
- package/dist/lib/esm/parent-liveness.d.mts +37 -5
- package/dist/lib/esm/parent-liveness.mjs +42 -5
- package/dist/lib/esm/port-owner.d.mts +47 -0
- package/dist/lib/esm/port-owner.mjs +36 -0
- package/dist/lib/esm/process-capture.d.mts +83 -0
- package/dist/lib/esm/process-capture.mjs +38 -0
- package/dist/lib/esm/process-exit-message.d.mts +37 -3
- package/dist/lib/esm/process-exit-message.mjs +13 -8
- package/dist/lib/esm/process-liveness.d.mts +18 -0
- package/dist/lib/esm/process-liveness.mjs +17 -0
- package/dist/lib/esm/resolve-emulator-device-id.d.mts +28 -0
- package/dist/lib/esm/resolve-emulator-device-id.mjs +33 -0
- package/dist/lib/esm/run-version-matrix.d.mts +1 -1
- package/dist/lib/esm/run-version-matrix.mjs +1 -1
- package/dist/lib/esm/soft-keyboard-geometry.d.mts +156 -0
- package/dist/lib/esm/soft-keyboard-geometry.mjs +47 -0
- package/dist/lib/esm/soft-keyboard.d.mts +82 -0
- package/dist/lib/esm/soft-keyboard.mjs +91 -0
- package/dist/lib/esm/teardown-verdict.d.mts +69 -0
- package/dist/lib/esm/teardown-verdict.mjs +28 -0
- package/dist/lib/esm/temporary-vault.d.mts +47 -5
- package/dist/lib/esm/temporary-vault.mjs +43 -8
- package/dist/lib/esm/transport-appium.d.mts +53 -3
- package/dist/lib/esm/transport-appium.mjs +108 -17
- package/dist/lib/esm/transport-desktop-cdp.d.mts +99 -0
- package/dist/lib/esm/transport-desktop-cdp.mjs +202 -7
- package/dist/lib/esm/transport-factory.mjs +995 -138
- package/dist/lib/esm/transport-options.d.mts +131 -12
- package/dist/lib/esm/transport-options.mjs +9 -2
- package/dist/lib/esm/transport.d.mts +7 -1
- package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
- package/dist/lib/esm/vault-plugin-install.mjs +20 -0
- package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
- package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
- package/dist/lib/esm/version-matrix.d.mts +2 -2
- package/dist/lib/esm/version-matrix.mjs +1 -1
- package/dist/lib/esm/webview-cdp.d.mts +5 -1
- package/dist/lib/esm/webview-cdp.mjs +6 -7
- package/package.json +26 -24
- package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
- package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
- package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
- package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
- package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
- package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
- package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
- package/dist/lib/esm/obsidian-namespace.mjs +0 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* The distinct error thrown when an owned Obsidian instance booted a vault
|
|
5
|
+
* against a **different config folder** than the one requested through
|
|
6
|
+
* `configDirectory` — Obsidian rejected the override, or never saw it, and silently
|
|
7
|
+
* fell back to `.obsidian`.
|
|
8
|
+
*
|
|
9
|
+
* The fallback is silent by construction (`setConfigDir` swaps an invalid value
|
|
10
|
+
* for the default without a word) and the resulting vault looks perfectly
|
|
11
|
+
* healthy: it opens, its layout is ready, and it reports success. What it does
|
|
12
|
+
* not have is the settings, enabled plugins, and workspace of the folder that
|
|
13
|
+
* was asked for — so a suite that verifies behaviour against a real vault's
|
|
14
|
+
* plugin set would silently verify nothing. Hence a hard failure rather than a
|
|
15
|
+
* warning, and, unlike `SilentAsarFallbackError`, no knob to downgrade it: there
|
|
16
|
+
* is no version of this outcome worth continuing against.
|
|
17
|
+
*
|
|
18
|
+
* Exported so callers of `connectToCdp` / the transport can `instanceof`-match
|
|
19
|
+
* this specific failure.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Parameters for the {@link ConfigDirectoryFallbackError} constructor.
|
|
23
|
+
*/
|
|
24
|
+
export interface ConfigDirectoryFallbackErrorConstructorParams {
|
|
25
|
+
/**
|
|
26
|
+
The config folder the vault is actually using, as read back from `app.vault.configDir`.
|
|
27
|
+
*/
|
|
28
|
+
readonly actualConfigDirectory: string;
|
|
29
|
+
/**
|
|
30
|
+
The config folder that was requested through `configDirectory`.
|
|
31
|
+
*/
|
|
32
|
+
readonly requestedConfigDirectory: string;
|
|
33
|
+
/**
|
|
34
|
+
Absolute path to the vault that was opened.
|
|
35
|
+
*/
|
|
36
|
+
readonly vaultPath: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Thrown when a booted owned instance reports a different `app.vault.configDir`
|
|
40
|
+
* than the requested
|
|
41
|
+
* {@link ConfigDirectoryFallbackErrorConstructorParams.requestedConfigDirectory}.
|
|
42
|
+
* Carries both folder names and the vault path so callers can `instanceof`-match
|
|
43
|
+
* and report which vault was opened wrongly.
|
|
44
|
+
*/
|
|
45
|
+
export declare class ConfigDirectoryFallbackError extends Error {
|
|
46
|
+
/**
|
|
47
|
+
The config folder the vault is actually using.
|
|
48
|
+
*/
|
|
49
|
+
readonly actualConfigDirectory: string;
|
|
50
|
+
/**
|
|
51
|
+
The config folder that was requested.
|
|
52
|
+
*/
|
|
53
|
+
readonly requestedConfigDirectory: string;
|
|
54
|
+
/**
|
|
55
|
+
Absolute path to the vault that was opened.
|
|
56
|
+
*/
|
|
57
|
+
readonly vaultPath: string;
|
|
58
|
+
/**
|
|
59
|
+
* Creates the error from the requested and actual config folders.
|
|
60
|
+
*
|
|
61
|
+
* @param params - The requested folder, the folder actually in use, and the vault path.
|
|
62
|
+
*/
|
|
63
|
+
constructor(params: ConfigDirectoryFallbackErrorConstructorParams);
|
|
64
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var config_directory_exports = {};
|
|
20
|
+
__export(config_directory_exports, {
|
|
21
|
+
DEFAULT_CONFIG_DIRECTORY: () => DEFAULT_CONFIG_DIRECTORY,
|
|
22
|
+
assertValidConfigDirectory: () => assertValidConfigDirectory
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(config_directory_exports);
|
|
25
|
+
const DEFAULT_CONFIG_DIRECTORY = ".obsidian";
|
|
26
|
+
function assertValidConfigDirectory(configDirectory) {
|
|
27
|
+
if (!configDirectory.startsWith(".")) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
`Invalid configDirectory ${JSON.stringify(configDirectory)}: an Obsidian config folder name must start with a dot, e.g. '${DEFAULT_CONFIG_DIRECTORY}'.`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
if (configDirectory === ".") {
|
|
33
|
+
throw new Error(`Invalid configDirectory ${JSON.stringify(configDirectory)}: a bare dot is not a config folder name.`);
|
|
34
|
+
}
|
|
35
|
+
if (configDirectory.includes("/") || configDirectory.includes("\\")) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
`Invalid configDirectory ${JSON.stringify(configDirectory)}: the config folder sits directly inside the vault, so its name cannot contain a path separator.`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
42
|
+
0 && (module.exports = {
|
|
43
|
+
DEFAULT_CONFIG_DIRECTORY,
|
|
44
|
+
assertValidConfigDirectory
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbmZpZy1kaXJlY3RvcnkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBWYWxpZGF0ZXMgYSB2YXVsdCdzICoqY29uZmlnIGZvbGRlcioqIG5hbWUgXHUyMDE0IHRoZSBwZXItdmF1bHQgb3ZlcnJpZGUgT2JzaWRpYW5cbiAqIGV4cG9zZXMgYXMgKlNldHRpbmdzIFx1MjE5MiBBYm91dCBcdTIxOTIgT3ZlcnJpZGUgY29uZmlnIGZvbGRlciogYW5kIHN0b3JlcyBhcyB0aGVcbiAqIGA8dmF1bHRJZD4tY29uZmlnYCBgbG9jYWxTdG9yYWdlYCBlbnRyeSAoc2VlIGB0cmFuc3BvcnQtZGVza3RvcC1jZHBgJ3NcbiAqIGBvcGVuVmF1bHRGcm9tU3RhcnRlclNjcmVlbmApLlxuICpcbiAqIE9ic2lkaWFuIHZhbGlkYXRlcyB0aGUgc2FtZSB2YWx1ZSBiZWZvcmUgYXBwbHlpbmcgaXQsIGFuZCAqKnNpbGVudGx5IGZhbGxzXG4gKiBiYWNrKiogdG8ge0BsaW5rIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWX0gd2hlbiB0aGUgdmFsdWUgaXMgcmVqZWN0ZWRcbiAqIChPYnNpZGlhbiAxLjEzLjcsIGBhcHAuanNgKTpcbiAqXG4gKiBgYGBqc1xuICogdC52YWxpZGF0ZUNvbmZpZ0RpciA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBcIi5cIiAhPT0gZSAmJiBlLnN0YXJ0c1dpdGgoXCIuXCIpICYmICFIRC50ZXN0KGUpIH07XG4gKiB0LnByb3RvdHlwZS5zZXRDb25maWdEaXIgPSBmdW5jdGlvbiAoZSkgeyB0LnZhbGlkYXRlQ29uZmlnRGlyKGUpIHx8IChlID0gVUQpLCB0aGlzLmNvbmZpZ0RpciA9IGUgfTtcbiAqIGBgYFxuICpcbiAqIFRoZSB0d28gc3RydWN0dXJhbCBjbGF1c2VzIGFyZSByZXByb2R1Y2VkIGhlcmUgc28gYSBiYWQgdmFsdWUgZmFpbHMgbG91ZGx5IGF0XG4gKiB0aGUgY2FsbCBzaXRlLCBuYW1pbmcgdGhlIG9wdGlvbiwgaW5zdGVhZCBvZiBib290aW5nIGEgdmF1bHQgYWdhaW5zdCB0aGUgd3JvbmdcbiAqIGZvbGRlci4gVGhlIHRoaXJkIFx1MjAxNCBgSERgLCBhIGNoYXJhY3RlciBibGFja2xpc3QgbWluaWZpZWQgcGFzdCByZWNvdmVyeSBcdTIwMTQgaXNcbiAqIGRlbGliZXJhdGVseSAqKm5vdCoqIGd1ZXNzZWQgYXQ6IGEgc3RyaWN0ZXIgbG9jYWwgY29weSB3b3VsZCByZWplY3QgZm9sZGVyXG4gKiBuYW1lcyBPYnNpZGlhbiBhY2NlcHRzLiBBbnl0aGluZyB0aGlzIHZhbGlkYXRvciBsZXRzIHRocm91Z2ggdGhhdCBPYnNpZGlhblxuICogdGhlbiByZWplY3RzIGlzIGNhdWdodCBwb3N0LWJvb3QgYnkgdGhlIGBhcHAudmF1bHQuY29uZmlnRGlyYCByZWFkYmFjaywgd2hpY2hcbiAqIHRocm93cyBgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvcmAuIFRoYXQgcmVhZGJhY2sgaXMgdGhlIHJlYWwgZ3VhcmFudGVlO1xuICogdGhpcyBpcyB0aGUgZWFybHksIGJldHRlci13b3JkZWQgaGFsZiBvZiBpdC5cbiAqL1xuXG4vKipcbiAqIFRoZSBjb25maWcgZm9sZGVyIE9ic2lkaWFuIHVzZXMgd2hlbiBhIHZhdWx0IGhhcyBubyBvdmVycmlkZSBcdTIwMTQgYW5kIHRoZSBvbmUgaXRcbiAqIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gd2hlbiBhbiBvdmVycmlkZSBmYWlscyBpdHMgb3duIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTkZJR19ESVJFQ1RPUlkgPSAnLm9ic2lkaWFuJztcblxuLyoqXG4gKiBUaHJvd3MgdW5sZXNzIGBjb25maWdEaXJlY3RvcnlgIGlzIGEgc3RydWN0dXJhbGx5IHZhbGlkIE9ic2lkaWFuIGNvbmZpZyBmb2xkZXJcbiAqIG5hbWUuXG4gKlxuICogTWlycm9ycyB0aGUgdHdvIHJlY292ZXJhYmxlIGNsYXVzZXMgb2YgT2JzaWRpYW4ncyBvd24gYHZhbGlkYXRlQ29uZmlnRGlyYDogdGhlXG4gKiBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGRvdCBhbmQgbXVzdCBub3QgYmUgdGhlIGJhcmUgZG90LiBBIHBhdGggc2VwYXJhdG9yIGlzXG4gKiByZWplY3RlZCBvbiB0b3Agb2YgdGhvc2UsIGJlY2F1c2UgdGhlIG92ZXJyaWRlIG5hbWVzIGEgc2luZ2xlIGZvbGRlciBkaXJlY3RseVxuICogaW5zaWRlIHRoZSB2YXVsdCwgbmV2ZXIgYSBuZXN0ZWQgcGF0aC5cbiAqXG4gKiBAcGFyYW0gY29uZmlnRGlyZWN0b3J5IC0gVGhlIGNhbmRpZGF0ZSBjb25maWcgZm9sZGVyIG5hbWUsIGUuZy4gYCcub2JzaWRpYW4tZGVza3RvcCdgLlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gdGhlIG5hbWUgd291bGQgYmUgcmVqZWN0ZWQgYnkgT2JzaWRpYW4gYW5kIHNpbGVudGx5XG4gKiAgIHJlcGxhY2VkIHdpdGgge0BsaW5rIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZENvbmZpZ0RpcmVjdG9yeShjb25maWdEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoIWNvbmZpZ0RpcmVjdG9yeS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb25maWdEaXJlY3RvcnkgJHtKU09OLnN0cmluZ2lmeShjb25maWdEaXJlY3RvcnkpfTogYW4gT2JzaWRpYW4gY29uZmlnIGZvbGRlciBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGRvdCwgZS5nLiAnJHtERUZBVUxUX0NPTkZJR19ESVJFQ1RPUll9Jy5gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChjb25maWdEaXJlY3RvcnkgPT09ICcuJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb25maWdEaXJlY3RvcnkgJHtKU09OLnN0cmluZ2lmeShjb25maWdEaXJlY3RvcnkpfTogYSBiYXJlIGRvdCBpcyBub3QgYSBjb25maWcgZm9sZGVyIG5hbWUuYCk7XG4gIH1cblxuICBpZiAoY29uZmlnRGlyZWN0b3J5LmluY2x1ZGVzKCcvJykgfHwgY29uZmlnRGlyZWN0b3J5LmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb25maWdEaXJlY3RvcnkgJHtKU09OLnN0cmluZ2lmeShjb25maWdEaXJlY3RvcnkpfTogdGhlIGNvbmZpZyBmb2xkZXIgc2l0cyBkaXJlY3RseSBpbnNpZGUgdGhlIHZhdWx0LCBzbyBpdHMgbmFtZSBjYW5ub3QgY29udGFpbiBhIHBhdGggc2VwYXJhdG9yLmBcbiAgICApO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUErQk8sTUFBTSwyQkFBMkI7QUFlakMsU0FBUywyQkFBMkIsaUJBQStCO0FBQ3hFLE1BQUksQ0FBQyxnQkFBZ0IsV0FBVyxHQUFHLEdBQUc7QUFDcEMsVUFBTSxJQUFJO0FBQUEsTUFDUiwyQkFBMkIsS0FBSyxVQUFVLGVBQWUsQ0FBQyxpRUFBaUUsd0JBQXdCO0FBQUEsSUFDcko7QUFBQSxFQUNGO0FBRUEsTUFBSSxvQkFBb0IsS0FBSztBQUMzQixVQUFNLElBQUksTUFBTSwyQkFBMkIsS0FBSyxVQUFVLGVBQWUsQ0FBQywyQ0FBMkM7QUFBQSxFQUN2SDtBQUVBLE1BQUksZ0JBQWdCLFNBQVMsR0FBRyxLQUFLLGdCQUFnQixTQUFTLElBQUksR0FBRztBQUNuRSxVQUFNLElBQUk7QUFBQSxNQUNSLDJCQUEyQixLQUFLLFVBQVUsZUFBZSxDQUFDO0FBQUEsSUFDNUQ7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Validates a vault's **config folder** name — the per-vault override Obsidian
|
|
5
|
+
* exposes as *Settings → About → Override config folder* and stores as the
|
|
6
|
+
* `<vaultId>-config` `localStorage` entry (see `transport-desktop-cdp`'s
|
|
7
|
+
* `openVaultFromStarterScreen`).
|
|
8
|
+
*
|
|
9
|
+
* Obsidian validates the same value before applying it, and **silently falls
|
|
10
|
+
* back** to {@link DEFAULT_CONFIG_DIRECTORY} when the value is rejected
|
|
11
|
+
* (Obsidian 1.13.7, `app.js`):
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* t.validateConfigDir = function (e) { return "." !== e && e.startsWith(".") && !HD.test(e) };
|
|
15
|
+
* t.prototype.setConfigDir = function (e) { t.validateConfigDir(e) || (e = UD), this.configDir = e };
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* The two structural clauses are reproduced here so a bad value fails loudly at
|
|
19
|
+
* the call site, naming the option, instead of booting a vault against the wrong
|
|
20
|
+
* folder. The third — `HD`, a character blacklist minified past recovery — is
|
|
21
|
+
* deliberately **not** guessed at: a stricter local copy would reject folder
|
|
22
|
+
* names Obsidian accepts. Anything this validator lets through that Obsidian
|
|
23
|
+
* then rejects is caught post-boot by the `app.vault.configDir` readback, which
|
|
24
|
+
* throws `ConfigDirectoryFallbackError`. That readback is the real guarantee;
|
|
25
|
+
* this is the early, better-worded half of it.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* The config folder Obsidian uses when a vault has no override — and the one it
|
|
29
|
+
* silently falls back to when an override fails its own validation.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_CONFIG_DIRECTORY = ".obsidian";
|
|
32
|
+
/**
|
|
33
|
+
* Throws unless `configDirectory` is a structurally valid Obsidian config folder
|
|
34
|
+
* name.
|
|
35
|
+
*
|
|
36
|
+
* Mirrors the two recoverable clauses of Obsidian's own `validateConfigDir`: the
|
|
37
|
+
* name must start with a dot and must not be the bare dot. A path separator is
|
|
38
|
+
* rejected on top of those, because the override names a single folder directly
|
|
39
|
+
* inside the vault, never a nested path.
|
|
40
|
+
*
|
|
41
|
+
* @param configDirectory - The candidate config folder name, e.g. `'.obsidian-desktop'`.
|
|
42
|
+
* @throws {Error} When the name would be rejected by Obsidian and silently
|
|
43
|
+
* replaced with {@link DEFAULT_CONFIG_DIRECTORY}.
|
|
44
|
+
*/
|
|
45
|
+
export declare function assertValidConfigDirectory(configDirectory: string): void;
|
|
@@ -22,19 +22,28 @@ __export(connect_to_cdp_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(connect_to_cdp_exports);
|
|
24
24
|
var import_eval_in_obsidian = require("./eval-in-obsidian.cjs");
|
|
25
|
+
var import_headless_vault_config = require("./headless-vault-config.cjs");
|
|
25
26
|
var import_leftover_cleanup = require("./leftover-cleanup.cjs");
|
|
26
27
|
var import_log = require("./log.cjs");
|
|
27
28
|
var import_normalize_optional_properties = require("./normalize-optional-properties.cjs");
|
|
28
29
|
var import_temporary_vault = require("./temporary-vault.cjs");
|
|
29
30
|
var import_transport_desktop_cdp = require("./transport-desktop-cdp.cjs");
|
|
30
31
|
var import_transport_factory = require("./transport-factory.cjs");
|
|
32
|
+
var import_transport_options = require("./transport-options.cjs");
|
|
31
33
|
const DEFAULT_CDP_HOST = "localhost";
|
|
32
34
|
async function connectToCdp(options) {
|
|
33
35
|
const transportOptions = buildCdpTransportOptions(options);
|
|
34
36
|
await sweepLeftovers(transportOptions);
|
|
35
37
|
const transport = await (0, import_transport_factory.createTransportFromOptions)(transportOptions);
|
|
36
|
-
const vault = new import_temporary_vault.TemporaryVault(options?.vault);
|
|
37
38
|
const shouldRemoveVaultOnDispose = options?.shouldRemoveVaultOnDispose ?? options?.vault === void 0;
|
|
39
|
+
const vault = new import_temporary_vault.TemporaryVault(options?.vault, { shouldRemoveDirectoryOnDispose: shouldRemoveVaultOnDispose });
|
|
40
|
+
if (options?.vault === void 0) {
|
|
41
|
+
await (0, import_headless_vault_config.ensureHeadlessVaultConfig)({
|
|
42
|
+
configDirectory: (0, import_transport_options.resolveOwnedConfigDirectory)(transportOptions),
|
|
43
|
+
label: transportOptions.type,
|
|
44
|
+
vaultPath: vault.path
|
|
45
|
+
});
|
|
46
|
+
}
|
|
38
47
|
await vault.register(transport);
|
|
39
48
|
const { host, port } = resolveEndpoint(transport, options);
|
|
40
49
|
const cdpUrl = `http://${host}:${String(port)}`;
|
|
@@ -54,11 +63,7 @@ async function connectToCdp(options) {
|
|
|
54
63
|
},
|
|
55
64
|
async dispose() {
|
|
56
65
|
try {
|
|
57
|
-
|
|
58
|
-
await vault.dispose(transport);
|
|
59
|
-
} else {
|
|
60
|
-
await transport.unregisterVault(vault.path);
|
|
61
|
-
}
|
|
66
|
+
await vault.dispose(transport);
|
|
62
67
|
} finally {
|
|
63
68
|
await transport.dispose?.();
|
|
64
69
|
}
|
|
@@ -80,6 +85,7 @@ async function connectToCdp(options) {
|
|
|
80
85
|
function buildCdpTransportOptions(options) {
|
|
81
86
|
return (0, import_normalize_optional_properties.normalizeOptionalProperties)({
|
|
82
87
|
commandTimeoutInMilliseconds: options?.commandTimeoutInMilliseconds,
|
|
88
|
+
configDirectory: options?.configDirectory,
|
|
83
89
|
deadBootGraceInMilliseconds: options?.deadBootGraceInMilliseconds,
|
|
84
90
|
host: options?.host,
|
|
85
91
|
isObsidianAppVisible: options?.isObsidianAppVisible ?? true,
|
|
@@ -126,4 +132,4 @@ async function sweepLeftovers(transportOptions) {
|
|
|
126
132
|
0 && (module.exports = {
|
|
127
133
|
connectToCdp
|
|
128
134
|
});
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLmNqcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdFxufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZUxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHMsXG4gIHN3ZWVwSG9zdExlZnRvdmVycyxcbiAgd2lsbFN3ZWVwTGVmdG92ZXJzXG59IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vbm9ybWFsaXplLW9wdGlvbmFsLXByb3BlcnRpZXMuY2pzJztcbmltcG9ydCB7IFRlbXBvcmFyeVZhdWx0IH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmltcG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IERFRkFVTFRfQ0RQX0hPU1QgPSAnbG9jYWxob3N0JztcblxuLyoqXG4gKiBBIGxpdmUgY29ubmVjdGlvbiB0byBhIENEUC1lbmFibGVkIE9ic2lkaWFuIGluc3RhbmNlIHdpdGggdGhlIHJ1bnRpbWUgaGVscGVyXG4gKiBuYW1lc3BhY2UgYm9vdHN0cmFwcGVkLlxuICpcbiAqIEltcGxlbWVudHMgYEFzeW5jRGlzcG9zYWJsZWAsIHNvIGBhd2FpdCB1c2luZyBjb25uID0gYXdhaXQgY29ubmVjdFRvQ2RwKFx1MjAyNilgXG4gKiBkaXNwb3NlcyBpdCAoa2lsbGluZyBhbiBvd25lZCBpbnN0YW5jZSBhbmQgXHUyMDE0IGZvciBhIHRocm93LWF3YXkgdGVtcCB2YXVsdCBcdTIwMTRcbiAqIHJlbW92aW5nIGl0cyBkaXJlY3RvcnkpIGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RwQ29ubmVjdGlvbiBleHRlbmRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgc2lsZW50LWFzYXItZmFsbGJhY2sgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHJlYWQgbGl2ZSBhZnRlciBib290OlxuICAgKiB3aGV0aGVyIHRoZSBhcHAgdmVyc2lvbiBpdCBpcyBhY3R1YWxseSBydW5uaW5nIG1hdGNoZXMgdGhlIHN3YXBwZWQtaW4gcGluLCBvclxuICAgKiB0aGUgaW5zdGFsbGVyIHNpbGVudGx5IHJldmVydGVkIHRvIGl0cyBvd24gYnVuZGxlZCBhc2FyLiBgdW5kZWZpbmVkYCBpbiBhdHRhY2hcbiAgICogbW9kZSwgd2hlbiBubyBhc2FyIHdhcyBzd2FwcGVkLCBvciB3aGVuIHRoZSBydW5uaW5nIHZlcnNpb24gd2FzIHVucmVhZGFibGUuIEFcbiAgICogYCdmYWxsYmFjaydgIHZlcmRpY3QgcmVhY2hlcyBoZXJlIG9ubHkgd2hlbiB0aGUgdGhyb3cgaXMgZGlzYWJsZWRcbiAgICogKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2t9IGBmYWxzZWApO1xuICAgKiBvdGhlcndpc2UgaXQgdGhyb3dzIGBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvcmAgYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBhc2FyRmFsbGJhY2s/OiBBc2FyRmFsbGJhY2sgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENhcHR1cmVzIGEgUE5HIHNjcmVlbnNob3Qgb2YgdGhpcyBjb25uZWN0aW9uJ3MgT2JzaWRpYW4gd2luZG93LCB3aXRoIHRoZVxuICAgKiB2YXVsdCBwYXRoIHByZS1ib3VuZC5cbiAgICpcbiAgICogUGFzcyBgd2lkdGhJblBpeGVsc2AgKyBgaGVpZ2h0SW5QaXhlbHNgIHRvIHBpbiB0aGUgdmlld3BvcnQgZm9yIHRoZSBkdXJhdGlvblxuICAgKiBvZiB0aGUgY2FwdHVyZSwgc28gdGhlIGVtaXR0ZWQgUE5HIGlzIGV4YWN0bHkgdGhhdCBzaXplIHdoYXRldmVyIHNpemUgdGhlXG4gICAqIHdpbmRvdyBoYXBwZW5zIHRvIGJlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGV4YWN0IHNpemUgdG8gY2FwdHVyZSBhdC4gT21pdCB0byBjYXB0dXJlIHRoZSB3aW5kb3cgYXQgaXRzIG5hdHVyYWwgc2l6ZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmF3IFBORyBieXRlcy5cbiAgICovXG4gIGNhcHR1cmVTY3JlZW5zaG90KHBhcmFtcz86IEV4Y2VwdDxDYXB0dXJlU2NyZWVuc2hvdFBhcmFtcywgJ2N3ZCc+KTogUHJvbWlzZTxVaW50OEFycmF5PjtcblxuICAvKipcbiAgICogVGhlIGJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovL2xvY2FsaG9zdDo1MTg4OGAuXG4gICAqL1xuICByZWFkb25seSBjZHBVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGFuIG93bmVkIGluc3RhbmNlLCB3aGVuXG4gICAqIGl0IGNvdWxkIGJlIGRldGVybWluZWQuIGB1bmRlZmluZWRgIGluIGF0dGFjaCBtb2RlLCBvciB3aGVuIHRoZSB2ZXJkaWN0IGlzXG4gICAqIHVua25vd24gKHVuZGV0ZWN0YWJsZSBzaGVsbCB2ZXJzaW9uLCBvciB0aGUgYXBwIHZlcnNpb24gaXMgYWJzZW50IGZyb20gdGhlXG4gICAqIHRhYmxlKS4gQW4gYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSBwcm9hY3RpdmUgdGhyb3dcbiAgICogaXMgZGlzYWJsZWQgKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXJ9XG4gICAqIGBmYWxzZWApOyBvdGhlcndpc2UgaXQgdGhyb3dzIGBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JgIGJlZm9yZSB0aGVcbiAgICogY29ubmVjdGlvbiBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGF0aWJpbGl0eT86IEluc3RhbGxlckNvbXBhdGliaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBjb25uZWN0aW9uOiBraWxscyBhbiBvd25lZCBpbnN0YW5jZSBhbmQgcmVtb3ZlcyBpdHMgaXNvbGF0ZWRcbiAgICogdXNlci1kYXRhIGRpci4gVGhlIHZhdWx0IGRpcmVjdG9yeSBpcyByZW1vdmVkIG9ubHkgd2hlbiBpdCBpcyBhIHRocm93LWF3YXlcbiAgICogdGVtcCB2YXVsdCAoc2VlIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlfSk7IGFcbiAgICogcmVhbCB2YXVsdCBwYXNzZWQgdmlhIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnZhdWx0fSBpcyBuZXZlciBkZWxldGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZGlzcG9zYWwgY29tcGxldGVzLlxuICAgKi9cbiAgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBFbGVjdHJvbiBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGFuIG93bmVkIGluc3RhbmNlLCByZWFkIGxpdmVcbiAgICogYWZ0ZXIgYm9vdDogd2hldGhlciB0aGUgRWxlY3Ryb24gdmVyc2lvbiBpdCBpcyBhY3R1YWxseSBydW5uaW5nIGlzIG5ldyBlbm91Z2hcbiAgICogZm9yIHRoZSBydW5uaW5nIGFwcCB2ZXJzaW9uLiBgdW5kZWZpbmVkYCBpbiBhdHRhY2ggbW9kZSwgb3Igd2hlbiB0aGUgdmVyZGljdFxuICAgKiBpcyB1bmtub3duICh0aGUgbGl2ZSB2ZXJzaW9uIHdhcyB1bnJlYWRhYmxlLCBvciB0aGUgYXBwIHZlcnNpb24gY2FycmllcyBub1xuICAgKiByZWNvbW1lbmRlZCBFbGVjdHJvbiB2ZXJzaW9uKS4gQW4gb2xkIEVsZWN0cm9uIG5ldmVyIGJsb2NrcyBcdTIwMTQgaXQgb25seSB3YXJucyBcdTIwMTRcbiAgICogc28gdW5saWtlIHtAbGluayBjb21wYXRpYmlsaXR5fSB0aGVyZSBpcyBubyB0aHJvd2luZyB0aWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlY3Ryb25Db21wYXRpYmlsaXR5PzogRWxlY3Ryb25Db21wYXRpYmlsaXR5IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBzZWxmLWNvbnRhaW5lZCBmdW5jdGlvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIHRoZSByaWNoIGhlbHBlclxuICAgKiBwYXRoLCByZWNlaXZpbmcgYHsgYXBwLCBsaWIsIG9ic2lkaWFuTW9kdWxlLCBjb250ZXh0IH1gIHBsdXMgYW55IGBpbnB1dGBcbiAgICogKHNoYXJlZCBoZWxwZXJzIGxpa2UgYHR5cGVJbnRvRWRpdG9yYCAvIGB3YWl0VW50aWxgIGxpdmUgb24gYGxpYmApLiBNaXJyb3JzXG4gICAqIHRoZSB0b3AtbGV2ZWwgYGV2YWxJbk9ic2lkaWFuYCwgd2l0aCB0aGUgdHJhbnNwb3J0IGFuZCB2YXVsdCBwYXRoIHByZS1ib3VuZFxuICAgKiB0byB0aGlzIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXZhbHVhdGlvbiBwYXJhbWV0ZXJzIChgY2FsbGJhY2tgLCBvcHRpb25hbCBgaW5wdXRgL2Bjb250ZXh0SWRgKS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjYWxsYmFja2AuXG4gICAqL1xuICBldmFsSW5PYnNpZGlhbjxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICk6IFByb21pc2U8UmVzdWx0PjtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgcmF3IEphdmFTY3JpcHQgZXhwcmVzc2lvbiBpbnNpZGUgT2JzaWRpYW4gYW5kIHJldHVybnMgdGhlXG4gICAqIG5vcm1hbGl6ZWQgc3RyaW5nIHJlc3VsdCAoZS5nLiBgJzUnYCwgYSBKU09OIHN0cmluZywgb3IgYCcobm8gb3V0cHV0KSdgKS5cbiAgICpcbiAgICogQHBhcmFtIGV4cHJlc3Npb24gLSBBIHNlbGYtY29udGFpbmVkIEphdmFTY3JpcHQgZXhwcmVzc2lvbi5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmF3IHJlc3VsdCBzdHJpbmcuXG4gICAqL1xuICBpbnZva2UoZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIHBvcnQgdGhlIGluc3RhbmNlIGlzIHJlYWNoYWJsZSBvbiAodGhlIGZyZWUgcG9ydCBjaG9zZW4gZm9yIGFuXG4gICAqIG93bmVkIGluc3RhbmNlLCBvciB0aGUgYXR0YWNoZWQge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMucG9ydH0pLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlbmVkIHZhdWx0LiBFeHBvc2VzIGBwYXRoYCBhbmQgYHBvcHVsYXRlKC4uLilgIGZvciBzZWVkaW5nIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ6IFRlbXBvcmFyeVZhdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBjb25uZWN0VG9DZHB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RUb0NkcE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMzAwMDBgXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHcmFjZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGZvciBmYXN0LWZhaWxpbmcgYSBkZWFkIGJvb3Qgb2YgdGhlIG93bmVkXG4gICAqIGluc3RhbmNlIFx1MjAxNCB0aGUgcmVuZGVyZXIgbG9hZGVkIGJ1dCB0aGUgYXBwIG5ldmVyIGJvb3RzdHJhcHBlZCAoZW1wdHlcbiAgICogYDxib2R5PmAsIG5vIGB3aW5kb3cuYXBwYCksIHRoZSB0ZXJtaW5hbCBzdGF0ZSB3aGVuIHRoZSBhc2FyIGNhbm5vdCBydW4gb25cbiAgICogdGhlIGxhdW5jaGVkIEVsZWN0cm9uIHNoZWxsLiBPbmNlIGl0IGhhcyBoZWxkIHRoaXMgbG9uZyBhXG4gICAqIGBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yYCBpcyB0aHJvd24gaW5zdGVhZCBvZiB3YWl0aW5nIG91dCB0aGUgZnVsbFxuICAgKiByZWFkaW5lc3MgdGltZW91dC4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkuIFNldCBgMGAgdG9cbiAgICogZGlzYWJsZSBmYXN0LWZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0RQIGhvc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnbG9jYWxob3N0J2BcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIE9ic2lkaWFuIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uIERlZmF1bHRzIHRvIGB0cnVlYDsgc2V0XG4gICAqIGBmYWxzZWAgdG8gbGF1bmNoIGl0IG9mZi1zY3JlZW4uXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgRWxlY3Ryb24gc2hlbGwgKGluc3RhbGxlciBidWlsZCkgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHNoZWxsIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkluc3RhbGxlclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIE9ic2lkaWFuIGFwcCB2ZXJzaW9uIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy4gQWNjZXB0c1xuICAgKiBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLiBJZ25vcmVkIHdoZW5cbiAgICoge0BsaW5rIHBvcnR9IChhdHRhY2ggbW9kZSkgaXMgc2V0LiBXaGVuIG9taXR0ZWQsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0by4gV2hlbiBvbWl0dGVkLCBhblxuICAgKiBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5IGNob3NlbiBmcmVlIHBvcnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGxhdW5jaCB0aGUgb3duZWQgaW5zdGFuY2Ugd2l0aCBDaHJvbWl1bSdzIHNhbmRib3ggZGlzYWJsZWRcbiAgICogKGAtLW5vLXNhbmRib3hgKS5cbiAgICpcbiAgICogTmVlZGVkIHRvIGJvb3Qgb24gTGludXggd2l0aG91dCBhIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZFxuICAgKiBgY2hyb21lLXNhbmRib3hgIGhlbHBlciAoZS5nLiBhbiBpbnN0YWxsZXItZXh0cmFjdGVkIHBvcnRhYmxlIHNoZWxsLCBvciBDSVxuICAgKiBydW5uaW5nIGFzIGEgbm9uLXJvb3QgdXNlcik7IGhhcm1sZXNzIG9uIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoXG4gICAqIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGREaXNhYmxlU2FuZGJveD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVtb3ZlIHRoZSB2YXVsdCBkaXJlY3Rvcnkgb24ge0BsaW5rIENkcENvbm5lY3Rpb24uZGlzcG9zZX0uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgZGVmYXVsdHMgdG8gYHRydWVgIGZvciBhbiBpbXBsaWNpdCB0aHJvdy1hd2F5IHRlbXAgdmF1bHRcbiAgICogKHtAbGluayB2YXVsdH0gbm90IGdpdmVuKSBhbmQgYGZhbHNlYCB3aGVuIGEge0BsaW5rIHZhdWx0fSBwYXRoIGlzIGdpdmVuLCBzb1xuICAgKiBhIHJlYWwgdmF1bHQgaXMgbmV2ZXIgZGVsZXRlZC4gU2V0IGV4cGxpY2l0bHkgdG8gb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW4gKip1bnJ1bm5hYmxlKiogaW5zdGFsbGVyXHUyMTk0YXBwIHZlcnNpb24gcGFpciBmYWlscyBmYXN0IGJlZm9yZSBsYXVuY2guXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIGFuIGluc3RhbGxlciBiZWxvdyB0aGUgYXBwJ3MgcnVuIGZsb29yIHRocm93c1xuICAgKiBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBmcm9tIHZlcnNpb24gcmVzb2x1dGlvbiBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogZG93bmxvYWRlZCBvciBsYXVuY2hlZC4gU2V0IGBmYWxzZWAgdG8gbGV0IHRoZSBwaW4gcHJvY2VlZCB0byBsYXVuY2ggXHUyMDE0IHdoZXJlXG4gICAqIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsIHN0aWxsIGNhdGNoZXMgdGhlIGJsYWNrLXNjcmVlbiBib290LCBhbmQgdGhlXG4gICAqIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgaXMgc3VyZmFjZWQgb24ge0BsaW5rIENkcENvbm5lY3Rpb24uY29tcGF0aWJpbGl0eX1cbiAgICogcmF0aGVyIHRoYW4gdGhyb3duLiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBvc3QtYm9vdCAqKnNpbGVudCBhc2FyIGZhbGxiYWNrKiogZmFpbHMgZmFzdC5cbiAgICpcbiAgICogV2hlbiBhbiBhc2FyIGlzIHN3YXBwZWQgb250byBhbiBpbnN0YWxsZXIgc2hlbGwgdG9vIG9sZCBmb3IgaXQsIHRoZSBpbnN0YW5jZVxuICAgKiBtYXkgc2lsZW50bHkgcmV2ZXJ0IHRvIHRoZSBpbnN0YWxsZXIncyBvd24gYnVuZGxlZCBhc2FyIGFuZCBydW4gdGhlICoqd3JvbmdcbiAgICogKG9sZGVyKSoqIHZlcnNpb24gYmVoaW5kIGEgaGVhbHRoeSBVSS4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgdGhlIHJ1bm5pbmdcbiAgICogYXBwIHZlcnNpb24gaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgcGluIHBvc3QtYm9vdCBhbmQgYSBtaXNtYXRjaCB0aHJvd3NcbiAgICogYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYC4gU2V0IGBmYWxzZWAgdG8gbGV0IHRoZSBib290IHByb2NlZWQgXHUyMDE0IHRoZSBtaXNtYXRjaFxuICAgKiBpcyB0aGVuIHN1cmZhY2VkIG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmFzYXJGYWxsYmFja30gcmF0aGVyIHRoYW4gdGhyb3duLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KSBhbmQgd2hlbiBubyBhc2FyIGlzIHN3YXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgKipuYWcgd2FybmluZ3MqKiBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICogQ292ZXJzIGJvdGggdGhlIG9mZmxpbmUgaW5zdGFsbGVyXHUyMTk0YXBwIHdhcm5pbmcgYW5kIHRoZSBwb3N0LWJvb3RcbiAgICogcnVudGltZS1FbGVjdHJvbiB3YXJuaW5nLiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGVhY2ggZmlyZXMgdmlhIHRoZSBoYXJuZXNzXG4gICAqIGxvZzsgc2V0IGBmYWxzZWAgdG8gc2lsZW5jZSBib3RoIFx1MjAxNCB0aGUgdmVyZGljdHMgYXJlIHN0aWxsIHN1cmZhY2VkIG9uXG4gICAqIHtAbGluayBDZHBDb25uZWN0aW9uLmNvbXBhdGliaWxpdHl9IC8ge0BsaW5rIENkcENvbm5lY3Rpb24uZWxlY3Ryb25Db21wYXRpYmlsaXR5fSxcbiAgICogb25seSB0aGUgbG9nIGlzIHN1cHByZXNzZWQuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHZhdWx0IHRvIG9wZW4uIFdoZW4gb21pdHRlZCwgYW4gZW1wdHkgdGVtcG9yYXJ5XG4gICAqIHZhdWx0IGlzIGNyZWF0ZWQgKGFuZCByZW1vdmVkIG9uIGRpc3Bvc2UgdW5sZXNzXG4gICAqIHtAbGluayBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZX0gc2F5cyBvdGhlcndpc2UpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSByZXNvbHZlZCBDRFAgaG9zdC9wb3J0IHBhaXIuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgKG9yIGF0dGFjaGVzIHRvKSBhIENEUC1lbmFibGVkIE9ic2lkaWFuIGluc3RhbmNlLCBvcGVucyBhIHZhdWx0LCBhbmRcbiAqIGJvb3RzdHJhcHMgdGhlIHJ1bnRpbWUgaGVscGVyIG5hbWVzcGFjZSwgcmV0dXJuaW5nIGEgZGlzcG9zYWJsZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29ubmVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbGl2ZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9DZHAob3B0aW9ucz86IENvbm5lY3RUb0NkcE9wdGlvbnMpOiBQcm9taXNlPENkcENvbm5lY3Rpb24+IHtcbiAgY29uc3QgdHJhbnNwb3J0T3B0aW9ucyA9IGJ1aWxkQ2RwVHJhbnNwb3J0T3B0aW9ucyhvcHRpb25zKTtcbiAgYXdhaXQgc3dlZXBMZWZ0b3ZlcnModHJhbnNwb3J0T3B0aW9ucyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCB2YXVsdCA9IG5ldyBUZW1wb3JhcnlWYXVsdChvcHRpb25zPy52YXVsdCk7XG4gIGNvbnN0IHNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlID0gb3B0aW9ucz8uc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgPz8gKG9wdGlvbnM/LnZhdWx0ID09PSB1bmRlZmluZWQpO1xuXG4gIC8vIFJlZ2lzdGVyaW5nIHRoZSB2YXVsdCBpcyB3aGF0IGxhdW5jaGVzIHRoZSBvd25lZCBpbnN0YW5jZSAocHJvdmlzaW9ucyB0aGVcbiAgLy8gQXNhciwgb3BlbnMgdGhlIHZhdWx0LCBhbmQgYm9vdHN0cmFwcyB0aGUgaGVscGVyIG5hbWVzcGFjZSksIG9yIG9wZW5zIHRoZVxuICAvLyBWYXVsdCBpbiB0aGUgYXR0YWNoZWQgaW5zdGFuY2UuXG4gIGF3YWl0IHZhdWx0LnJlZ2lzdGVyKHRyYW5zcG9ydCk7XG5cbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSByZXNvbHZlRW5kcG9pbnQodHJhbnNwb3J0LCBvcHRpb25zKTtcbiAgY29uc3QgY2RwVXJsID0gYGh0dHA6Ly8ke2hvc3R9OiR7U3RyaW5nKHBvcnQpfWA7XG4gIGNvbnN0IGFzYXJGYWxsYmFjayA9IHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQgPyB0cmFuc3BvcnQuZ2V0QXNhckZhbGxiYWNrKCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNvbXBhdGliaWxpdHkgPSB0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0ID8gdHJhbnNwb3J0LmdldENvbXBhdGliaWxpdHkoKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZWxlY3Ryb25Db21wYXRpYmlsaXR5ID0gdHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCA/IHRyYW5zcG9ydC5nZXRFbGVjdHJvbkNvbXBhdGliaWxpdHkoKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBjb25uZWN0aW9uOiBDZHBDb25uZWN0aW9uID0ge1xuICAgIGNkcFVybCxcbiAgICAuLi4oYXNhckZhbGxiYWNrICYmIHsgYXNhckZhbGxiYWNrIH0pLFxuICAgIC4uLihjb21wYXRpYmlsaXR5ICYmIHsgY29tcGF0aWJpbGl0eSB9KSxcbiAgICAuLi4oZWxlY3Ryb25Db21wYXRpYmlsaXR5ICYmIHsgZWxlY3Ryb25Db21wYXRpYmlsaXR5IH0pLFxuXG4gICAgYXN5bmMgY2FwdHVyZVNjcmVlbnNob3QocGFyYW1zPzogRXhjZXB0PENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLCAnY3dkJz4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICAgIC8vIEV2ZXJ5IHRyYW5zcG9ydCBgY29ubmVjdFRvQ2RwYCBidWlsZHMgaXMgYSBEZXNrdG9wQ2RwVHJhbnNwb3J0LCB3aGljaFxuICAgICAgLy8gSW1wbGVtZW50cyB0aGUgb3B0aW9uYWwgbWV0aG9kIFx1MjAxNCBidXQgdGhlIGludGVyZmFjZSBzdGlsbCB0eXBlcyBpdFxuICAgICAgLy8gT3B0aW9uYWwsIHNvIHRoZSBhYnNlbmNlIGlzIHJlcG9ydGVkIHJhdGhlciB0aGFuIHNpbGVudGx5IHRocm93biBhdC5cbiAgICAgIGlmICghdHJhbnNwb3J0LmNhcHR1cmVTY3JlZW5zaG90KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29ubmVjdFRvQ2RwOiB0aGlzIHRyYW5zcG9ydCBjYW5ub3QgY2FwdHVyZSBzY3JlZW5zaG90cy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydC5jYXB0dXJlU2NyZWVuc2hvdCh7IC4uLnBhcmFtcywgY3dkOiB2YXVsdC5wYXRoIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlKSB7XG4gICAgICAgICAgYXdhaXQgdmF1bHQuZGlzcG9zZSh0cmFuc3BvcnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRyYW5zcG9ydC51bnJlZ2lzdGVyVmF1bHQodmF1bHQucGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZXZhbEluT2JzaWRpYW48SW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICAgKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICAgIHJldHVybiBldmFsSW5PYnNpZGlhbjxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPih7IC4uLnBhcmFtcywgdHJhbnNwb3J0LCB2YXVsdFBhdGg6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgcG9ydCxcblxuICAgIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuICAgIH0sXG5cbiAgICB2YXVsdFxuICB9O1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9uc30gZm9yIGEgY29ubmVjdGlvbiwgdGhyZWFkaW5nIG9ubHlcbiAqIHRoZSBwcm92aWRlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9uc30gdGhyb3VnaCAob3duZWQtdmlzaWJsZSBkZWZhdWx0cyB0b1xuICogYHRydWVgLCB1bmxpa2UgdGhlIGhpZGRlbi1ieS1kZWZhdWx0IHRlc3QgdHJhbnNwb3J0cykuIFVuc2V0IGtub2JzIHBhc3MgdGhyb3VnaFxuICogYXMgYHVuZGVmaW5lZGAgYW5kIGFyZSByZWFkIHdpdGggYD8/IGRlZmF1bHRgIC8gYCE9PSB1bmRlZmluZWRgIGd1YXJkc1xuICogZG93bnN0cmVhbSwgc28gYW4gZXhwbGljaXQgYHVuZGVmaW5lZGAgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhYnNlbnQga2V5LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSB0cmFuc3BvcnQgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGNvbm5lY3Rpb24ncyB0cmFuc3BvcnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDZHBUcmFuc3BvcnRPcHRpb25zKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnM+KHtcbiAgICBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zPy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kczogb3B0aW9ucz8uZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzLFxuICAgIGhvc3Q6IG9wdGlvbnM/Lmhvc3QsXG4gICAgaXNPYnNpZGlhbkFwcFZpc2libGU6IG9wdGlvbnM/LmlzT2JzaWRpYW5BcHBWaXNpYmxlID8/IHRydWUsXG4gICAgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhbkluc3RhbGxlclZlcnNpb24sXG4gICAgb2JzaWRpYW5WZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhblZlcnNpb24sXG4gICAgcG9ydDogb3B0aW9ucz8ucG9ydCxcbiAgICBzaG91bGREaXNhYmxlU2FuZGJveDogb3B0aW9ucz8uc2hvdWxkRGlzYWJsZVNhbmRib3gsXG4gICAgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcjogb3B0aW9ucz8uc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcixcbiAgICBzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrOiBvcHRpb25zPy5zaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrLFxuICAgIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM6IG9wdGlvbnM/LnNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMsXG4gICAgdHlwZTogJ29ic2lkaWFuLWNkcCdcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENEUCBob3N0L3BvcnQgZm9yIHRoZSBjb25uZWN0aW9uOiBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzXG4gKiBsYXVuY2hlZCBlbmRwb2ludCB3aGVuIHByZXNlbnQsIG90aGVyd2lzZSBmcm9tIHRoZSBhdHRhY2ggb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCBjcmVhdGVkIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgaG9zdCBhbmQgcG9ydC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBvcnQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQ6IHVua25vd24sIG9wdGlvbnM6IENvbm5lY3RUb0NkcE9wdGlvbnMgfCB1bmRlZmluZWQpOiBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRyYW5zcG9ydC5nZXRPd25lZEluc3RhbmNlRW5kcG9pbnQoKTtcbiAgICBpZiAoZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiB7IGhvc3Q6IGVuZHBvaW50Lmhvc3QsIHBvcnQ6IGVuZHBvaW50LnBvcnQgfTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgaG9zdDogb3B0aW9ucy5ob3N0ID8/IERFRkFVTFRfQ0RQX0hPU1QsIHBvcnQ6IG9wdGlvbnMucG9ydCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIENEUCBwb3J0LicpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGhvc3Qtc2lkZSB0ZW1wIGRpcmVjdG9yaWVzIGVhcmxpZXIgcnVucyBsZWFrZWQsIGJlZm9yZSB0aGlzXG4gKiBjb25uZWN0aW9uIGFkZHMgaXRzIG93bi5cbiAqXG4gKiBgY29ubmVjdFRvQ2RwYCBtaW50cyB0aGUgc2FtZSBgdGVtcC12YXVsdC0qYCAvIG93bmVkIGB1c2VyZGF0YS0qYCBkaXJlY3Rvcmllc1xuICogdGhlIHRlc3QgZ2xvYmFsIHNldHVwIGRvZXMsIGFuZCBhbiBhZC1ob2MgZGVidWdnaW5nIHNlc3Npb24gaXMgZXhhY3RseSB0aGVcbiAqIGtpbmQgdGhhdCBnZXRzIGtpbGxlZCB3aXRoIGEgbGVmdG92ZXIgYmVoaW5kIFx1MjAxNCBzbyBpdCBzd2VlcHMgdG9vLiBBZ2UtZ2F0ZWQgYW5kXG4gKiBiZXN0LWVmZm9ydDsgc2VlIHRoZSBjb3JlJ3MgYHN3ZWVwTGVmdG92ZXJzYC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0T3B0aW9ucyAtIFRoZSByZXNvbHZlZCB0cmFuc3BvcnQgb3B0aW9ucyAoc291cmNlIG9mIHRoZSBzd2VlcCBrbm9icykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnM6IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXdpbGxTd2VlcExlZnRvdmVycyh0cmFuc3BvcnRPcHRpb25zKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3dlZXBIb3N0TGVmdG92ZXJzKHtcbiAgICAgIG1heEFnZUluTWlsbGlzZWNvbmRzOiByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyh0cmFuc3BvcnRPcHRpb25zKVxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQucmVtb3ZlZENvdW50ID4gMCB8fCByZXN1bHQuZmFpbGVkQ291bnQgPiAwKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbY29ubmVjdC10by1jZHBdIFN3ZXB0ICR7U3RyaW5nKHJlc3VsdC5yZW1vdmVkQ291bnQpfSBsZWZ0b3ZlciB0ZW1wIGRpcmVjdG9yKGllcykgZnJvbSBlYXJsaWVyIHJ1bnMgYFxuICAgICAgICAgICsgYCgke1N0cmluZyhyZXN1bHQuZmFpbGVkQ291bnQpfSBzdGlsbCBpbiB1c2UpLmBcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2Nvbm5lY3QtdG8tY2RwXSBMZWZ0b3ZlciBzd2VlcCBlcnJvciAobm9uLWZhdGFsKTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJBLDhCQUErQjtBQUMvQiw4QkFJTztBQUNQLGlCQUFvQjtBQUNwQiwyQ0FBNEM7QUFDNUMsNkJBQStCO0FBQy9CLG1DQUFvQztBQUNwQywrQkFB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
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLmNqcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdFxufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuaW1wb3J0IHsgZW5zdXJlSGVhZGxlc3NWYXVsdENvbmZpZyB9IGZyb20gJy4vaGVhZGxlc3MtdmF1bHQtY29uZmlnLmNqcyc7XG5pbXBvcnQge1xuICByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyxcbiAgc3dlZXBIb3N0TGVmdG92ZXJzLFxuICB3aWxsU3dlZXBMZWZ0b3ZlcnNcbn0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi9ub3JtYWxpemUtb3B0aW9uYWwtcHJvcGVydGllcy5janMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmltcG9ydCB7IHJlc29sdmVPd25lZENvbmZpZ0RpcmVjdG9yeSB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICdsb2NhbGhvc3QnO1xuXG4vKipcbiAqIEEgbGl2ZSBjb25uZWN0aW9uIHRvIGEgQ0RQLWVuYWJsZWQgT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXJcbiAqIG5hbWVzcGFjZSBib290c3RyYXBwZWQuXG4gKlxuICogSW1wbGVtZW50cyBgQXN5bmNEaXNwb3NhYmxlYCwgc28gYGF3YWl0IHVzaW5nIGNvbm4gPSBhd2FpdCBjb25uZWN0VG9DZHAoXHUyMDI2KWBcbiAqIGRpc3Bvc2VzIGl0IChraWxsaW5nIGFuIG93bmVkIGluc3RhbmNlIGFuZCBcdTIwMTQgZm9yIGEgdGhyb3ctYXdheSB0ZW1wIHZhdWx0IFx1MjAxNFxuICogcmVtb3ZpbmcgaXRzIGRpcmVjdG9yeSkgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBDb25uZWN0aW9uIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBzaWxlbnQtYXNhci1mYWxsYmFjayB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlIGFmdGVyIGJvb3Q6XG4gICAqIHdoZXRoZXIgdGhlIGFwcCB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgbWF0Y2hlcyB0aGUgc3dhcHBlZC1pbiBwaW4sIG9yXG4gICAqIHRoZSBpbnN0YWxsZXIgc2lsZW50bHkgcmV2ZXJ0ZWQgdG8gaXRzIG93biBidW5kbGVkIGFzYXIuIGB1bmRlZmluZWRgIGluIGF0dGFjaFxuICAgKiBtb2RlLCB3aGVuIG5vIGFzYXIgd2FzIHN3YXBwZWQsIG9yIHdoZW4gdGhlIHJ1bm5pbmcgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZS4gQVxuICAgKiBgJ2ZhbGxiYWNrJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSB0aHJvdyBpcyBkaXNhYmxlZFxuICAgKiAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFja30gYGZhbHNlYCk7XG4gICAqIG90aGVyd2lzZSBpdCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzYXJGYWxsYmFjaz86IEFzYXJGYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ2FwdHVyZXMgYSBQTkcgc2NyZWVuc2hvdCBvZiB0aGlzIGNvbm5lY3Rpb24ncyBPYnNpZGlhbiB3aW5kb3csIHdpdGggdGhlXG4gICAqIHZhdWx0IHBhdGggcHJlLWJvdW5kLlxuICAgKlxuICAgKiBQYXNzIGB3aWR0aEluUGl4ZWxzYCArIGBoZWlnaHRJblBpeGVsc2AgdG8gcGluIHRoZSB2aWV3cG9ydCBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBjYXB0dXJlLCBzbyB0aGUgZW1pdHRlZCBQTkcgaXMgZXhhY3RseSB0aGF0IHNpemUgd2hhdGV2ZXIgc2l6ZSB0aGVcbiAgICogd2luZG93IGhhcHBlbnMgdG8gYmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXhhY3Qgc2l6ZSB0byBjYXB0dXJlIGF0LiBPbWl0IHRvIGNhcHR1cmUgdGhlIHdpbmRvdyBhdCBpdHMgbmF0dXJhbCBzaXplLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgUE5HIGJ5dGVzLlxuICAgKi9cbiAgY2FwdHVyZVNjcmVlbnNob3QocGFyYW1zPzogRXhjZXB0PENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLCAnY3dkJz4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vbG9jYWxob3N0OjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb2x2ZWQgaW5zdGFsbGVyXHUyMTk0YXBwIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHdoZW5cbiAgICogaXQgY291bGQgYmUgZGV0ZXJtaW5lZC4gYHVuZGVmaW5lZGAgaW4gYXR0YWNoIG1vZGUsIG9yIHdoZW4gdGhlIHZlcmRpY3QgaXNcbiAgICogdW5rbm93biAodW5kZXRlY3RhYmxlIHNoZWxsIHZlcnNpb24sIG9yIHRoZSBhcHAgdmVyc2lvbiBpcyBhYnNlbnQgZnJvbSB0aGVcbiAgICogdGFibGUpLiBBbiBgJ3VucnVubmFibGUnYCB2ZXJkaWN0IHJlYWNoZXMgaGVyZSBvbmx5IHdoZW4gdGhlIHByb2FjdGl2ZSB0aHJvd1xuICAgKiBpcyBkaXNhYmxlZCAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcn1cbiAgICogYGZhbHNlYCk7IG90aGVyd2lzZSBpdCB0aHJvd3MgYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgYmVmb3JlIHRoZVxuICAgKiBjb25uZWN0aW9uIGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXRpYmlsaXR5PzogSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIGNvbm5lY3Rpb246IGtpbGxzIGFuIG93bmVkIGluc3RhbmNlIGFuZCByZW1vdmVzIGl0cyBpc29sYXRlZFxuICAgKiB1c2VyLWRhdGEgZGlyLiBUaGUgdmF1bHQgZGlyZWN0b3J5IGlzIHJlbW92ZWQgb25seSB3aGVuIGl0IGlzIGEgdGhyb3ctYXdheVxuICAgKiB0ZW1wIHZhdWx0IChzZWUge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9KTsgYVxuICAgKiByZWFsIHZhdWx0IHBhc3NlZCB2aWEge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMudmF1bHR9IGlzIG5ldmVyIGRlbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBkaXNwb3NhbCBjb21wbGV0ZXMuXG4gICAqL1xuICBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHJlYWQgbGl2ZVxuICAgKiBhZnRlciBib290OiB3aGV0aGVyIHRoZSBFbGVjdHJvbiB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgaXMgbmV3IGVub3VnaFxuICAgKiBmb3IgdGhlIHJ1bm5pbmcgYXBwIHZlcnNpb24uIGB1bmRlZmluZWRgIGluIGF0dGFjaCBtb2RlLCBvciB3aGVuIHRoZSB2ZXJkaWN0XG4gICAqIGlzIHVua25vd24gKHRoZSBsaXZlIHZlcnNpb24gd2FzIHVucmVhZGFibGUsIG9yIHRoZSBhcHAgdmVyc2lvbiBjYXJyaWVzIG5vXG4gICAqIHJlY29tbWVuZGVkIEVsZWN0cm9uIHZlcnNpb24pLiBBbiBvbGQgRWxlY3Ryb24gbmV2ZXIgYmxvY2tzIFx1MjAxNCBpdCBvbmx5IHdhcm5zIFx1MjAxNFxuICAgKiBzbyB1bmxpa2Uge0BsaW5rIGNvbXBhdGliaWxpdHl9IHRoZXJlIGlzIG5vIHRocm93aW5nIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBlbGVjdHJvbkNvbXBhdGliaWxpdHk/OiBFbGVjdHJvbkNvbXBhdGliaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIHNlbGYtY29udGFpbmVkIGZ1bmN0aW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgdGhlIHJpY2ggaGVscGVyXG4gICAqIHBhdGgsIHJlY2VpdmluZyBgeyBhcHAsIGxpYiwgb2JzaWRpYW5Nb2R1bGUsIGNvbnRleHQgfWAgcGx1cyBhbnkgYGlucHV0YFxuICAgKiAoc2hhcmVkIGhlbHBlcnMgbGlrZSBgdHlwZUludG9FZGl0b3JgIC8gYHdhaXRVbnRpbGAgbGl2ZSBvbiBgbGliYCkuIE1pcnJvcnNcbiAgICogdGhlIHRvcC1sZXZlbCBgZXZhbEluT2JzaWRpYW5gLCB3aXRoIHRoZSB0cmFuc3BvcnQgYW5kIHZhdWx0IHBhdGggcHJlLWJvdW5kXG4gICAqIHRvIHRoaXMgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBldmFsdWF0aW9uIHBhcmFtZXRlcnMgKGBjYWxsYmFja2AsIG9wdGlvbmFsIGBpbnB1dGAvYGNvbnRleHRJZGApLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNhbGxiYWNrYC5cbiAgICovXG4gIGV2YWxJbk9ic2lkaWFuPElucHV0IGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBwYXJhbXM6IEV4Y2VwdDxFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgKTogUHJvbWlzZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByYXcgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogbm9ybWFsaXplZCBzdHJpbmcgcmVzdWx0IChlLmcuIGAnNSdgLCBhIEpTT04gc3RyaW5nLCBvciBgJyhubyBvdXRwdXQpJ2ApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgcmVzdWx0IHN0cmluZy5cbiAgICovXG4gIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDRFAgcG9ydCB0aGUgaW5zdGFuY2UgaXMgcmVhY2hhYmxlIG9uICh0aGUgZnJlZSBwb3J0IGNob3NlbiBmb3IgYW5cbiAgICogb3duZWQgaW5zdGFuY2UsIG9yIHRoZSBhdHRhY2hlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9ucy5wb3J0fSkuXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVuZWQgdmF1bHQuIEV4cG9zZXMgYHBhdGhgIGFuZCBgcG9wdWxhdGUoLi4uKWAgZm9yIHNlZWRpbmcgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSB2YXVsdDogVGVtcG9yYXJ5VmF1bHQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGNvbm5lY3RUb0NkcH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFRvQ2RwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAzMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCdzICoqY29uZmlnIGZvbGRlcioqIFx1MjAxNCBPYnNpZGlhbidzIHBlci12YXVsdCAqT3ZlcnJpZGUgY29uZmlnXG4gICAqIGZvbGRlciogc2V0dGluZywgZS5nLiBgJy5vYnNpZGlhbi1kZXNrdG9wJ2AuIFNldCBpdCB0byBvcGVuIGEgdmF1bHQgdGhhdFxuICAgKiBrZWVwcyBpdHMgc2V0dGluZ3Mgc29tZXdoZXJlIG90aGVyIHRoYW4gYC5vYnNpZGlhbmA7IHdpdGhvdXQgaXQgc3VjaCBhIHZhdWx0XG4gICAqIG9wZW5zIGFnYWluc3QgYC5vYnNpZGlhbmAsIHdoaWNoIGZvciBhIHZhdWx0IHRoYXQgaGFzIGEgc3RhbGUgb25lIGJlc2lkZSB0aGVcbiAgICogcmVhbCBmb2xkZXIgbWVhbnMgb3BlbmluZyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGUgd3Jvbmcgc2V0dGluZ3MuXG4gICAqXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGRvdCwgbXVzdCBub3QgYmUgdGhlIGJhcmUgZG90LCBhbmQgbXVzdCBub3QgY29udGFpbiBhIHBhdGhcbiAgICogc2VwYXJhdG9yIFx1MjAxNCBhbnl0aGluZyBlbHNlIHRocm93cyBiZWZvcmUgT2JzaWRpYW4gbGF1bmNoZXMsIHNpbmNlIE9ic2lkaWFuXG4gICAqIHdvdWxkIHNpbGVudGx5IHN1YnN0aXR1dGUgYC5vYnNpZGlhbmAuIEFmdGVyIHRoZSB2YXVsdCBvcGVucywgaXRzIGFjdHVhbFxuICAgKiBgYXBwLnZhdWx0LmNvbmZpZ0RpcmAgaXMgcmVhZCBiYWNrIGFuZCBhIG1pc21hdGNoIHRocm93c1xuICAgKiBgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvcmAuXG4gICAqXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnBvcnR9IHNldCksIHdoZXJlIHRoZVxuICAgKiB2YXVsdCBpcyBvcGVuZWQgYnkgdGhlIHVzZXIncyBvd24gT2JzaWRpYW4gdW5kZXIgaXRzIG93biBjb25maWcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgIChPYnNpZGlhbidzIG93biBkZWZhdWx0LCBgLm9ic2lkaWFuYClcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogR3JhY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcyBmb3IgZmFzdC1mYWlsaW5nIGEgZGVhZCBib290IG9mIHRoZSBvd25lZFxuICAgKiBpbnN0YW5jZSBcdTIwMTQgdGhlIHJlbmRlcmVyIGxvYWRlZCBidXQgdGhlIGFwcCBuZXZlciBib290c3RyYXBwZWQgKGVtcHR5XG4gICAqIGA8Ym9keT5gLCBubyBgd2luZG93LmFwcGApLCB0aGUgdGVybWluYWwgc3RhdGUgd2hlbiB0aGUgYXNhciBjYW5ub3QgcnVuIG9uXG4gICAqIHRoZSBsYXVuY2hlZCBFbGVjdHJvbiBzaGVsbC4gT25jZSBpdCBoYXMgaGVsZCB0aGlzIGxvbmcgYVxuICAgKiBgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmAgaXMgdGhyb3duIGluc3RlYWQgb2Ygd2FpdGluZyBvdXQgdGhlIGZ1bGxcbiAgICogcmVhZGluZXNzIHRpbWVvdXQuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLiBTZXQgYDBgIHRvXG4gICAqIGRpc2FibGUgZmFzdC1mYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBPYnNpZGlhbiB3aW5kb3cgaXMgc2hvd24gb24gc2NyZWVuLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldFxuICAgKiBgZmFsc2VgIHRvIGxhdW5jaCBpdCBvZmYtc2NyZWVuLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIEVsZWN0cm9uIHNoZWxsIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLiBBY2NlcHRzXG4gICAqIGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuIElnbm9yZWQgd2hlblxuICAgKiB7QGxpbmsgcG9ydH0gKGF0dGFjaCBtb2RlKSBpcyBzZXQuIFdoZW4gb21pdHRlZCwgdGhlIGluc3RhbGxlZCBzaGVsbCBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaW5zIHRoZSBPYnNpZGlhbiBhcHAgdmVyc2lvbiAoYXNhcikgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RQIHBvcnQgb2YgYW4gYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuIHRvICoqYXR0YWNoKiogdG8uIFdoZW4gb21pdHRlZCwgYW5cbiAgICogaXNvbGF0ZWQgaW5zdGFuY2UgaXMgbGF1bmNoZWQgb24gYW4gYXV0b21hdGljYWxseSBjaG9zZW4gZnJlZSBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBsYXVuY2ggdGhlIG93bmVkIGluc3RhbmNlIHdpdGggQ2hyb21pdW0ncyBzYW5kYm94IGRpc2FibGVkXG4gICAqIChgLS1uby1zYW5kYm94YCkuXG4gICAqXG4gICAqIE5lZWRlZCB0byBib290IG9uIExpbnV4IHdpdGhvdXQgYSBjb3JyZWN0bHktY29uZmlndXJlZCBzZXR1aWRcbiAgICogYGNocm9tZS1zYW5kYm94YCBoZWxwZXIgKGUuZy4gYW4gaW5zdGFsbGVyLWV4dHJhY3RlZCBwb3J0YWJsZSBzaGVsbCwgb3IgQ0lcbiAgICogcnVubmluZyBhcyBhIG5vbi1yb290IHVzZXIpOyBoYXJtbGVzcyBvbiBXaW5kb3dzL21hY09TLiBJZ25vcmVkIGluIGF0dGFjaFxuICAgKiBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbW92ZSB0aGUgdmF1bHQgZGlyZWN0b3J5IG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmRpc3Bvc2V9LlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGRlZmF1bHRzIHRvIGB0cnVlYCBmb3IgYW4gaW1wbGljaXQgdGhyb3ctYXdheSB0ZW1wIHZhdWx0XG4gICAqICh7QGxpbmsgdmF1bHR9IG5vdCBnaXZlbikgYW5kIGBmYWxzZWAgd2hlbiBhIHtAbGluayB2YXVsdH0gcGF0aCBpcyBnaXZlbiwgc29cbiAgICogYSByZWFsIHZhdWx0IGlzIG5ldmVyIGRlbGV0ZWQuIFNldCBleHBsaWNpdGx5IHRvIG92ZXJyaWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuICoqdW5ydW5uYWJsZSoqIGluc3RhbGxlclx1MjE5NGFwcCB2ZXJzaW9uIHBhaXIgZmFpbHMgZmFzdCBiZWZvcmUgbGF1bmNoLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhbiBpbnN0YWxsZXIgYmVsb3cgdGhlIGFwcCdzIHJ1biBmbG9vciB0aHJvd3NcbiAgICogYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgZnJvbSB2ZXJzaW9uIHJlc29sdXRpb24gYmVmb3JlIGFueXRoaW5nIGlzXG4gICAqIGRvd25sb2FkZWQgb3IgbGF1bmNoZWQuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgcGluIHByb2NlZWQgdG8gbGF1bmNoIFx1MjAxNCB3aGVyZVxuICAgKiB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbCBzdGlsbCBjYXRjaGVzIHRoZSBibGFjay1zY3JlZW4gYm9vdCwgYW5kIHRoZVxuICAgKiBgJ3VucnVubmFibGUnYCB2ZXJkaWN0IGlzIHN1cmZhY2VkIG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmNvbXBhdGliaWxpdHl9XG4gICAqIHJhdGhlciB0aGFuIHRocm93bi4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBwb3N0LWJvb3QgKipzaWxlbnQgYXNhciBmYWxsYmFjayoqIGZhaWxzIGZhc3QuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBpcyBzd2FwcGVkIG9udG8gYW4gaW5zdGFsbGVyIHNoZWxsIHRvbyBvbGQgZm9yIGl0LCB0aGUgaW5zdGFuY2VcbiAgICogbWF5IHNpbGVudGx5IHJldmVydCB0byB0aGUgaW5zdGFsbGVyJ3Mgb3duIGJ1bmRsZWQgYXNhciBhbmQgcnVuIHRoZSAqKndyb25nXG4gICAqIChvbGRlcikqKiB2ZXJzaW9uIGJlaGluZCBhIGhlYWx0aHkgVUkuIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSBydW5uaW5nXG4gICAqIGFwcCB2ZXJzaW9uIGlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIHBpbiBwb3N0LWJvb3QgYW5kIGEgbWlzbWF0Y2ggdGhyb3dzXG4gICAqIGBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvcmAuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgYm9vdCBwcm9jZWVkIFx1MjAxNCB0aGUgbWlzbWF0Y2hcbiAgICogaXMgdGhlbiBzdXJmYWNlZCBvbiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5hc2FyRmFsbGJhY2t9IHJhdGhlciB0aGFuIHRocm93bi5cbiAgICogSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkgYW5kIHdoZW4gbm8gYXNhciBpcyBzd2FwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZC1pbnN0YW5jZSBjb21wYXRpYmlsaXR5ICoqbmFnIHdhcm5pbmdzKiogYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIENvdmVycyBib3RoIHRoZSBvZmZsaW5lIGluc3RhbGxlclx1MjE5NGFwcCB3YXJuaW5nIGFuZCB0aGUgcG9zdC1ib290XG4gICAqIHJ1bnRpbWUtRWxlY3Ryb24gd2FybmluZy4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBlYWNoIGZpcmVzIHZpYSB0aGUgaGFybmVzc1xuICAgKiBsb2c7IHNldCBgZmFsc2VgIHRvIHNpbGVuY2UgYm90aCBcdTIwMTQgdGhlIHZlcmRpY3RzIGFyZSBzdGlsbCBzdXJmYWNlZCBvblxuICAgKiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5jb21wYXRpYmlsaXR5fSAvIHtAbGluayBDZHBDb25uZWN0aW9uLmVsZWN0cm9uQ29tcGF0aWJpbGl0eX0sXG4gICAqIG9ubHkgdGhlIGxvZyBpcyBzdXBwcmVzc2VkLiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byBhbiBleGlzdGluZyB2YXVsdCB0byBvcGVuLiBXaGVuIG9taXR0ZWQsIGFuIGVtcHR5IHRlbXBvcmFyeVxuICAgKiB2YXVsdCBpcyBjcmVhdGVkIChhbmQgcmVtb3ZlZCBvbiBkaXNwb3NlIHVubGVzc1xuICAgKiB7QGxpbmsgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9IHNheXMgb3RoZXJ3aXNlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzb2x2ZWQgQ0RQIGhvc3QvcG9ydCBwYWlyLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRFbmRwb2ludCB7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIExhdW5jaGVzIChvciBhdHRhY2hlcyB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZSwgb3BlbnMgYSB2YXVsdCwgYW5kXG4gKiBib290c3RyYXBzIHRoZSBydW50aW1lIGhlbHBlciBuYW1lc3BhY2UsIHJldHVybmluZyBhIGRpc3Bvc2FibGUgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxpdmUge0BsaW5rIENkcENvbm5lY3Rpb259LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvQ2RwKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogUHJvbWlzZTxDZHBDb25uZWN0aW9uPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBidWlsZENkcFRyYW5zcG9ydE9wdGlvbnMob3B0aW9ucyk7XG4gIGF3YWl0IHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyh0cmFuc3BvcnRPcHRpb25zKTtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgPSBvcHRpb25zPy5zaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA/PyAob3B0aW9ucz8udmF1bHQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHZhdWx0ID0gbmV3IFRlbXBvcmFyeVZhdWx0KG9wdGlvbnM/LnZhdWx0LCB7IHNob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZTogc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgfSk7XG5cbiAgLy8gVGhlIGhlYWRsZXNzIGRlZmF1bHRzIGdvIG9ubHkgaW50byBhIHZhdWx0IHRoZSBoYXJuZXNzIG1hZGUgXHUyMDE0IHRoZSBzYW1lXG4gIC8vIGBvcHRpb25zLnZhdWx0ID09PSB1bmRlZmluZWRgIGRpc2NyaW1pbmF0b3IgdGhlIGRpc3Bvc2FsIGFib3ZlIHR1cm5zIG9uLiBBXG4gIC8vIENhbGxlci1zdXBwbGllZCB2YXVsdCBpcyBhIHJlYWwgb25lIHRoZSB1c2VyIGtlZXBzLCBhbmQgYSBkZWJ1Z2dpbmcgc2Vzc2lvblxuICAvLyBIYXMgbm8gYnVzaW5lc3MgcmV3cml0aW5nIGl0cyBzZXR0aW5ncy5cbiAgaWYgKG9wdGlvbnM/LnZhdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBhd2FpdCBlbnN1cmVIZWFkbGVzc1ZhdWx0Q29uZmlnKHtcbiAgICAgIGNvbmZpZ0RpcmVjdG9yeTogcmVzb2x2ZU93bmVkQ29uZmlnRGlyZWN0b3J5KHRyYW5zcG9ydE9wdGlvbnMpLFxuICAgICAgbGFiZWw6IHRyYW5zcG9ydE9wdGlvbnMudHlwZSxcbiAgICAgIHZhdWx0UGF0aDogdmF1bHQucGF0aFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVnaXN0ZXJpbmcgdGhlIHZhdWx0IGlzIHdoYXQgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIChwcm92aXNpb25zIHRoZVxuICAvLyBBc2FyLCBvcGVucyB0aGUgdmF1bHQsIGFuZCBib290c3RyYXBzIHRoZSBoZWxwZXIgbmFtZXNwYWNlKSwgb3Igb3BlbnMgdGhlXG4gIC8vIFZhdWx0IGluIHRoZSBhdHRhY2hlZCBpbnN0YW5jZS5cbiAgYXdhaXQgdmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcblxuICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQsIG9wdGlvbnMpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtTdHJpbmcocG9ydCl9YDtcbiAgY29uc3QgYXNhckZhbGxiYWNrID0gdHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCA/IHRyYW5zcG9ydC5nZXRBc2FyRmFsbGJhY2soKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29tcGF0aWJpbGl0eSA9IHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQgPyB0cmFuc3BvcnQuZ2V0Q29tcGF0aWJpbGl0eSgpIDogdW5kZWZpbmVkO1xuICBjb25zdCBlbGVjdHJvbkNvbXBhdGliaWxpdHkgPSB0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0ID8gdHJhbnNwb3J0LmdldEVsZWN0cm9uQ29tcGF0aWJpbGl0eSgpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb246IENkcENvbm5lY3Rpb24gPSB7XG4gICAgY2RwVXJsLFxuICAgIC4uLihhc2FyRmFsbGJhY2sgJiYgeyBhc2FyRmFsbGJhY2sgfSksXG4gICAgLi4uKGNvbXBhdGliaWxpdHkgJiYgeyBjb21wYXRpYmlsaXR5IH0pLFxuICAgIC4uLihlbGVjdHJvbkNvbXBhdGliaWxpdHkgJiYgeyBlbGVjdHJvbkNvbXBhdGliaWxpdHkgfSksXG5cbiAgICBhc3luYyBjYXB0dXJlU2NyZWVuc2hvdChwYXJhbXM/OiBFeGNlcHQ8Q2FwdHVyZVNjcmVlbnNob3RQYXJhbXMsICdjd2QnPik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgICAgLy8gRXZlcnkgdHJhbnNwb3J0IGBjb25uZWN0VG9DZHBgIGJ1aWxkcyBpcyBhIERlc2t0b3BDZHBUcmFuc3BvcnQsIHdoaWNoXG4gICAgICAvLyBJbXBsZW1lbnRzIHRoZSBvcHRpb25hbCBtZXRob2QgXHUyMDE0IGJ1dCB0aGUgaW50ZXJmYWNlIHN0aWxsIHR5cGVzIGl0XG4gICAgICAvLyBPcHRpb25hbCwgc28gdGhlIGFic2VuY2UgaXMgcmVwb3J0ZWQgcmF0aGVyIHRoYW4gc2lsZW50bHkgdGhyb3duIGF0LlxuICAgICAgaWYgKCF0cmFuc3BvcnQuY2FwdHVyZVNjcmVlbnNob3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IHRoaXMgdHJhbnNwb3J0IGNhbm5vdCBjYXB0dXJlIHNjcmVlbnNob3RzLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNwb3J0LmNhcHR1cmVTY3JlZW5zaG90KHsgLi4ucGFyYW1zLCBjd2Q6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgdmF1bHQgY2FycmllcyBgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2VgIGl0c2VsZiAoaGFuZGVkIHRvIGl0cyBjb25zdHJ1Y3RvciBhYm92ZSksIHNvXG4gICAgICAgIC8vIFRoaXMgaXMgb25lIGNhbGwgcmF0aGVyIHRoYW4gYSBicmFuY2g6IGl0IGFsd2F5cyB1bnJlZ2lzdGVycywgYW5kIHJlbW92ZXMgdGhlIGRpcmVjdG9yeSBvbmx5XG4gICAgICAgIC8vIFdoZW4gdGhhdCBmbGFnIHNheXMgdG8uXG4gICAgICAgIGF3YWl0IHZhdWx0LmRpc3Bvc2UodHJhbnNwb3J0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZXZhbEluT2JzaWRpYW48SW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICAgKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICAgIHJldHVybiBldmFsSW5PYnNpZGlhbjxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPih7IC4uLnBhcmFtcywgdHJhbnNwb3J0LCB2YXVsdFBhdGg6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgcG9ydCxcblxuICAgIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuICAgIH0sXG5cbiAgICB2YXVsdFxuICB9O1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9uc30gZm9yIGEgY29ubmVjdGlvbiwgdGhyZWFkaW5nIG9ubHlcbiAqIHRoZSBwcm92aWRlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9uc30gdGhyb3VnaCAob3duZWQtdmlzaWJsZSBkZWZhdWx0cyB0b1xuICogYHRydWVgLCB1bmxpa2UgdGhlIGhpZGRlbi1ieS1kZWZhdWx0IHRlc3QgdHJhbnNwb3J0cykuIFVuc2V0IGtub2JzIHBhc3MgdGhyb3VnaFxuICogYXMgYHVuZGVmaW5lZGAgYW5kIGFyZSByZWFkIHdpdGggYD8/IGRlZmF1bHRgIC8gYCE9PSB1bmRlZmluZWRgIGd1YXJkc1xuICogZG93bnN0cmVhbSwgc28gYW4gZXhwbGljaXQgYHVuZGVmaW5lZGAgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhYnNlbnQga2V5LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSB0cmFuc3BvcnQgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGNvbm5lY3Rpb24ncyB0cmFuc3BvcnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDZHBUcmFuc3BvcnRPcHRpb25zKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnM+KHtcbiAgICBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zPy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgIGNvbmZpZ0RpcmVjdG9yeTogb3B0aW9ucz8uY29uZmlnRGlyZWN0b3J5LFxuICAgIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kczogb3B0aW9ucz8uZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzLFxuICAgIGhvc3Q6IG9wdGlvbnM/Lmhvc3QsXG4gICAgaXNPYnNpZGlhbkFwcFZpc2libGU6IG9wdGlvbnM/LmlzT2JzaWRpYW5BcHBWaXNpYmxlID8/IHRydWUsXG4gICAgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhbkluc3RhbGxlclZlcnNpb24sXG4gICAgb2JzaWRpYW5WZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhblZlcnNpb24sXG4gICAgcG9ydDogb3B0aW9ucz8ucG9ydCxcbiAgICBzaG91bGREaXNhYmxlU2FuZGJveDogb3B0aW9ucz8uc2hvdWxkRGlzYWJsZVNhbmRib3gsXG4gICAgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcjogb3B0aW9ucz8uc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcixcbiAgICBzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrOiBvcHRpb25zPy5zaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrLFxuICAgIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM6IG9wdGlvbnM/LnNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMsXG4gICAgdHlwZTogJ29ic2lkaWFuLWNkcCdcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENEUCBob3N0L3BvcnQgZm9yIHRoZSBjb25uZWN0aW9uOiBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzXG4gKiBsYXVuY2hlZCBlbmRwb2ludCB3aGVuIHByZXNlbnQsIG90aGVyd2lzZSBmcm9tIHRoZSBhdHRhY2ggb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCBjcmVhdGVkIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgaG9zdCBhbmQgcG9ydC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBvcnQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQ6IHVua25vd24sIG9wdGlvbnM6IENvbm5lY3RUb0NkcE9wdGlvbnMgfCB1bmRlZmluZWQpOiBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRyYW5zcG9ydC5nZXRPd25lZEluc3RhbmNlRW5kcG9pbnQoKTtcbiAgICBpZiAoZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiB7IGhvc3Q6IGVuZHBvaW50Lmhvc3QsIHBvcnQ6IGVuZHBvaW50LnBvcnQgfTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgaG9zdDogb3B0aW9ucy5ob3N0ID8/IERFRkFVTFRfQ0RQX0hPU1QsIHBvcnQ6IG9wdGlvbnMucG9ydCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIENEUCBwb3J0LicpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGhvc3Qtc2lkZSB0ZW1wIGRpcmVjdG9yaWVzIGVhcmxpZXIgcnVucyBsZWFrZWQsIGJlZm9yZSB0aGlzXG4gKiBjb25uZWN0aW9uIGFkZHMgaXRzIG93bi5cbiAqXG4gKiBgY29ubmVjdFRvQ2RwYCBtaW50cyB0aGUgc2FtZSBgdGVtcC12YXVsdC0qYCAvIG93bmVkIGB1c2VyZGF0YS0qYCBkaXJlY3Rvcmllc1xuICogdGhlIHRlc3QgZ2xvYmFsIHNldHVwIGRvZXMsIGFuZCBhbiBhZC1ob2MgZGVidWdnaW5nIHNlc3Npb24gaXMgZXhhY3RseSB0aGVcbiAqIGtpbmQgdGhhdCBnZXRzIGtpbGxlZCB3aXRoIGEgbGVmdG92ZXIgYmVoaW5kIFx1MjAxNCBzbyBpdCBzd2VlcHMgdG9vLiBBZ2UtZ2F0ZWQgYW5kXG4gKiBiZXN0LWVmZm9ydDsgc2VlIHRoZSBjb3JlJ3MgYHN3ZWVwTGVmdG92ZXJzYC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0T3B0aW9ucyAtIFRoZSByZXNvbHZlZCB0cmFuc3BvcnQgb3B0aW9ucyAoc291cmNlIG9mIHRoZSBzd2VlcCBrbm9icykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnM6IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXdpbGxTd2VlcExlZnRvdmVycyh0cmFuc3BvcnRPcHRpb25zKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3dlZXBIb3N0TGVmdG92ZXJzKHtcbiAgICAgIG1heEFnZUluTWlsbGlzZWNvbmRzOiByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyh0cmFuc3BvcnRPcHRpb25zKVxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQucmVtb3ZlZENvdW50ID4gMCB8fCByZXN1bHQuZmFpbGVkQ291bnQgPiAwKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbY29ubmVjdC10by1jZHBdIFN3ZXB0ICR7U3RyaW5nKHJlc3VsdC5yZW1vdmVkQ291bnQpfSBsZWZ0b3ZlciB0ZW1wIGRpcmVjdG9yKGllcykgZnJvbSBlYXJsaWVyIHJ1bnMgYFxuICAgICAgICAgICsgYCgke1N0cmluZyhyZXN1bHQuZmFpbGVkQ291bnQpfSBzdGlsbCBpbiB1c2UpLmBcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2Nvbm5lY3QtdG8tY2RwXSBMZWZ0b3ZlciBzd2VlcCBlcnJvciAobm9uLWZhdGFsKTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAi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
|
|
@@ -120,6 +120,25 @@ export interface ConnectToCdpOptions {
|
|
|
120
120
|
* @default `30000`
|
|
121
121
|
*/
|
|
122
122
|
readonly commandTimeoutInMilliseconds?: number;
|
|
123
|
+
/**
|
|
124
|
+
* The vault's **config folder** — Obsidian's per-vault *Override config
|
|
125
|
+
* folder* setting, e.g. `'.obsidian-desktop'`. Set it to open a vault that
|
|
126
|
+
* keeps its settings somewhere other than `.obsidian`; without it such a vault
|
|
127
|
+
* opens against `.obsidian`, which for a vault that has a stale one beside the
|
|
128
|
+
* real folder means opening successfully against the wrong settings.
|
|
129
|
+
*
|
|
130
|
+
* Must start with a dot, must not be the bare dot, and must not contain a path
|
|
131
|
+
* separator — anything else throws before Obsidian launches, since Obsidian
|
|
132
|
+
* would silently substitute `.obsidian`. After the vault opens, its actual
|
|
133
|
+
* `app.vault.configDir` is read back and a mismatch throws
|
|
134
|
+
* `ConfigDirectoryFallbackError`.
|
|
135
|
+
*
|
|
136
|
+
* Ignored in attach mode ({@link ConnectToCdpOptions.port} set), where the
|
|
137
|
+
* vault is opened by the user's own Obsidian under its own config.
|
|
138
|
+
*
|
|
139
|
+
* @default `undefined` (Obsidian's own default, `.obsidian`)
|
|
140
|
+
*/
|
|
141
|
+
readonly configDirectory?: string;
|
|
123
142
|
/**
|
|
124
143
|
* Grace window in milliseconds for fast-failing a dead boot of the owned
|
|
125
144
|
* instance — the renderer loaded but the app never bootstrapped (empty
|
|
@@ -145,4 +145,4 @@ async function resolvePluginRepo(plugin) {
|
|
|
145
145
|
bootstrapDemoVaultPlugins,
|
|
146
146
|
buildDemoVaultPopulateAsync
|
|
147
147
|
});
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtYm9vdHN0cmFwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW5zdGFsbHMgYSBkZW1vIHZhdWx0J3MgKippbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyoqIGhlYWRsZXNzbHksIGJ5IGRvd25sb2FkaW5nXG4gKiB0aGVpciBwdWJsaXNoZWQgR2l0SHViIHJlbGVhc2UgYXNzZXRzIHN0cmFpZ2h0IGludG9cbiAqIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYC5cbiAqXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgZWFjaCBpbmplY3RlZCBwbHVnaW4ncyBgbWFpbi5qc2AgL1xuICogYG1hbmlmZXN0Lmpzb25gIHRvIGFscmVhZHkgYmUgb24gZGlzaywgYW5kIHRocm93cyB3aGVuIHRoZXkgYXJlIG5vdC4gVW50aWwgdGhpc1xuICogbW9kdWxlIGV4aXN0ZWQgdGhlIG9ubHkgZG9jdW1lbnRlZCByZW1lZHkgd2FzIGEgKipHVUkgc3RlcCoqIFx1MjAxNCBvcGVuIGBkZW1vLXZhdWx0L2BcbiAqIGluIE9ic2lkaWFuIG9uY2UgYW5kIGxldCBgZGVtby12YXVsdC1oZWxwZXJgIGluc3RhbGwgdGhlIHBsdWdpbiBhdCBydW50aW1lLlxuICogYC5vYnNpZGlhbi9wbHVnaW5zLypgIGlzIGdpdGlnbm9yZWQgaW4gZXZlcnkgZmxlZXQgcGx1Z2luIHJlcG8sIHNvIHRoYXQgc3RhdGVcbiAqIGV4aXN0cyBvbiBleGFjdGx5IHRoZSBvbmUgbWFjaGluZSB0aGF0IGRpZCBpdCBhbmQgaXMgaW52aXNpYmxlIHRvIGEgZnJlc2ggY2xvbmUsXG4gKiBhIG5ldyBtYWNoaW5lLCBvciBDSS4gU2luY2UgYSBwbHVnaW4gcmVwbydzIHJlbGVhc2UgcHJlZmxpZ2h0IHJ1bnMgaXRzXG4gKiBpbnRlZ3JhdGlvbiB0ZXN0cywgdGhhdCBtYWRlICpjdXR0aW5nIGEgcmVsZWFzZSBmcm9tIGEgY2xlYW4gY2xvbmUqIGltcG9zc2libGVcbiAqIHdpdGhvdXQgYSBodW1hbiBvcGVuaW5nIGEgR1VJLlxuICpcbiAqIERvd25sb2FkaW5nIHRoZSByZWxlYXNlIGFzc2V0cyBpcyB0aGUgZXhhY3QgaGVhZGxlc3MgZXF1aXZhbGVudDogdGhlIHJlc3VsdGluZ1xuICogZm9sZGVyIGlzIHdoYXQgT2JzaWRpYW4gaXRzZWxmIHdvdWxkIGhhdmUgaW5zdGFsbGVkLCBzbyB0aGUgc2hpcHBlZFxuICogYCotZGVtby12YXVsdC08dmVyc2lvbj4uemlwYCBzdGF5cyB0aGUgZmxlZXQtc3RhbmRhcmQgYXJ0aWZhY3QuXG4gKlxuICogVHdvIGVudHJ5IHBvaW50cywgcGx1cyB0aGUgYGJvb3RzdHJhcC1kZW1vLXZhdWx0YCBDTEkgc3ViY29tbWFuZDpcbiAqXG4gKiAtIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfSBcdTIwMTQgaW5zdGFsbCB0aGUgbWlzc2luZyBvbmVzLCBleHBsaWNpdGx5LlxuICogLSB7QGxpbmsgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jfSBcdTIwMTQgZG8gdGhhdCBhbmQgdGhlbiBidWlsZCB0aGUgcG9wdWxhdGUgbWFwLFxuICogICBzbyBhIGdsb2JhbCBzZXR1cCBzZWxmLWhlYWxzIHdpdGggbm8gbWFudWFsIHN0ZXAgYXQgYWxsLlxuICpcbiAqIFRoZSBzeW5jIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYCBkZWxpYmVyYXRlbHkga2VlcHMgdGhyb3dpbmc6IGBmZXRjaGAgaGFzIG5vXG4gKiBzeW5jaHJvbm91cyBmb3JtLCBzbyBhdXRvLWhlYWxpbmcgY2FuIG9ubHkgbGl2ZSBvbiBhbiBhc3luYyBzaWJsaW5nLiBJdHMgbWVzc2FnZVxuICogbm93IG5hbWVzIGJvdGggcmVtZWRpZXMgYWJvdmUgaW5zdGVhZCBvZiB0aGUgR1VJIHN0ZXAuXG4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnkgfSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkuY2pzJztcbmltcG9ydCB0eXBlIHtcbiAgQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyxcbiAgSW5qZWN0UGx1Z2luUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuaW1wb3J0IHR5cGUgeyBQb3B1bGF0ZUZpbGVzUGFyYW1zIH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcblxuaW1wb3J0IHtcbiAgYnVpbGRQbHVnaW5Bc3NldFVybCxcbiAgQ09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMLFxuICBpc1ZhbGlkUmVwb1JlZmVyZW5jZSxcbiAgT1BUSU9OQUxfUExVR0lOX0FTU0VUX05BTUVTLFxuICBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMsXG4gIHNlbGVjdFBsdWdpblJlcG9cbn0gZnJvbSAnLi9jb21tdW5pdHktcGx1Z2luLXJlZ2lzdHJ5LmNqcyc7XG5pbXBvcnQge1xuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlLFxuICByZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnksXG4gIHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIGBVc2VyLUFnZW50YCBmb3IgdGhlIGFzc2V0IGRvd25sb2FkcywgbWF0Y2hpbmcgYG9ic2lkaWFuLWluc3RhbGxlci50c2AgXHUyMDE0XG4gKiBhIHBsYWluIE5vZGUgZmV0Y2ggaXMgcmVqZWN0ZWQgYnkgc29tZSBDRE4gZWRnZXMuXG4gKi9cbmNvbnN0IERPV05MT0FEX1VTRVJfQUdFTlQgPSAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyNC4wLjAuMCBTYWZhcmkvNTM3LjM2JztcblxuY29uc3QgSFRUUF9OT1RfRk9VTkQgPSA0MDQ7XG5cbi8qKlxuICogVGhlIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnksIGZldGNoZWQgYXQgbW9zdCBvbmNlIHBlciBwcm9jZXNzLiBFdmVyeSBpbmplY3RlZFxuICogcGx1Z2luIG9mIGV2ZXJ5IGRlbW8tdmF1bHQgcHJvamVjdCBpbiBhIHJ1biByZXNvbHZlcyBhZ2FpbnN0IHRoZSBzYW1lIHRhYmxlLCBhbmRcbiAqIGl0IGlzIGEgbXVsdGktbWVnYWJ5dGUgZG9jdW1lbnQuXG4gKi9cbmxldCByZWdpc3RyeVByb21pc2U6IFByb21pc2U8cmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdPiB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbHVnaW4gcmVwbydzIGBkZW1vLXZhdWx0L2AgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVtb1ZhdWx0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5qZWN0ZWQgcGx1Z2lucyB0byBpbnN0YWxsIFx1MjAxNCB0aGUgc2FtZSBsaXN0IHBhc3NlZCB0byBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAuIFBsdWdpbnMgd2hvc2VcbiAgICogYmluYXJpZXMgYXJlIGFscmVhZHkgcHJlc2VudCBhcmUgc2tpcHBlZCAodW5sZXNzIHtAbGluayBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zLnNob3VsZEZvcmNlfSksXG4gICAqIGFzIGFyZSBwbHVnaW5zIGNhcnJ5aW5nIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5qZWN0UGx1Z2luczogcmVhZG9ubHkgSW5qZWN0UGx1Z2luUGFyYW1zW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmUtZG93bmxvYWQgcGx1Z2lucyB0aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxlZCwgcmVwbGFjaW5nIHRoZW0gd2l0aCB0aGUgY3VycmVudCByZWxlYXNlLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgIFx1MjAxNCB0aGUgbm9ybWFsIHBhdGggaW5zdGFsbHMgb25seSB3aGF0IGlzIG1pc3NpbmcsIHNvIGEgd2FybSBjaGVja291dCBkb2VzIG5vXG4gICAqIG5ldHdvcmsgSS9PIGF0IGFsbC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZvcmNlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgb3V0Y29tZSBvZiBhIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfSBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdCB7XG4gIC8qKlxuICBUaGUgcGx1Z2lucyB0aGF0IHdlcmUgZG93bmxvYWRlZCBhbmQgd3JpdHRlbiwgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBpbnN0YWxsZWQuXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsZWQ6IHJlYWRvbmx5IEluc3RhbGxlZFBsdWdpbkluZm9bXTtcblxuICAvKipcbiAgVGhlIGlkcyBvZiBwbHVnaW5zIGxlZnQgdW50b3VjaGVkIFx1MjAxNCBhbHJlYWR5IGluc3RhbGxlZCwgb3Igb3B0ZWQgb3V0IHZpYSBhbiBleHBsaWNpdCBgc291cmNlRGlyZWN0b3J5YC5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBwZWRQbHVnaW5JZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBwbHVnaW4gaW5zdGFsbGVkIGJ5IHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YWxsZWRQbHVnaW5JbmZvIHtcbiAgLyoqXG4gIFRoZSBhc3NldCBmaWxlIG5hbWVzIGFjdHVhbGx5IHdyaXR0ZW4sIGUuZy4gYFsnbWFpbi5qcycsICdtYW5pZmVzdC5qc29uJywgJ3N0eWxlcy5jc3MnXWAuXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHBsdWdpbidzIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIEdpdEh1YiByZXBvc2l0b3J5IHRoZSBhc3NldHMgY2FtZSBmcm9tLCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSByZWxlYXNlIHRhZyBkb3dubG9hZGVkIGZyb20sIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSB3YXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBldmVyeSBpbmplY3RlZCBjb21tdW5pdHkgcGx1Z2luIHdob3NlIGJ1aWx0IGZpbGVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQsIGJ5XG4gKiBkb3dubG9hZGluZyBpdHMgcHVibGlzaGVkIHJlbGVhc2UgYXNzZXRzIGludG8gYGRlbW8tdmF1bHQvLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gLlxuICpcbiAqIEVhY2ggcGx1Z2luJ3MgcmVwb3NpdG9yeSBjb21lcyBmcm9tIGl0cyB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnJlcG99IHdoZW4gZ2l2ZW4sIG90aGVyd2lzZSBmcm9tXG4gKiBPYnNpZGlhbidzIG93biBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5IFx1MjAxNCB0aGUgc2FtZSBgaWRgIFx1MjE5MiBgcmVwb2AgdGFibGUgdGhlIGluLWFwcCBjb21tdW5pdHkgYnJvd3NlclxuICogaW5zdGFsbHMgZnJvbSwgc28gbm8gcGx1Z2luLXNwZWNpZmljIG1hcHBpbmcgaXMgaGFyZGNvZGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXN9LlxuICogQHJldHVybnMgV2hhdCB3YXMgaW5zdGFsbGVkIGFuZCB3aGF0IHdhcyBza2lwcGVkLlxuICogQHRocm93cyBFcnJvciBpZiBhIHBsdWdpbidzIHJlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkLCBvciBhIHJlcXVpcmVkIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyhwYXJhbXM6IEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMpOiBQcm9taXNlPEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQ+IHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zLCBzaG91bGRGb3JjZSA9IGZhbHNlIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgYm9vdHN0cmFwcGFibGUgPSBpbmplY3RQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiBwbHVnaW4uc291cmNlRGlyZWN0b3J5ID09PSB1bmRlZmluZWQpO1xuICBjb25zdCB0YXJnZXRzID0gc2hvdWxkRm9yY2UgPyBib290c3RyYXBwYWJsZSA6IHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zKHsgZGVtb1ZhdWx0UGF0aCwgaW5qZWN0UGx1Z2lucyB9KTtcbiAgY29uc3QgdGFyZ2V0UGx1Z2luSWRzID0gbmV3IFNldCh0YXJnZXRzLm1hcCgocGx1Z2luKSA9PiBwbHVnaW4ucGx1Z2luSWQpKTtcblxuICBjb25zdCBpbnN0YWxsZWQ6IEluc3RhbGxlZFBsdWdpbkluZm9bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0YXJnZXRzKSB7XG4gICAgLy8gU2VxdWVudGlhbCBvbiBwdXJwb3NlOiB0aGUgaW5zdGFsbHMgc2hhcmUgb25lIG1lbW9pc2VkIHJlZ2lzdHJ5IGZldGNoLlxuICAgIC8vIFBhcmFsbGVsaXNtIHdvdWxkIGJ1eSBub3RoaW5nIGJ1dCBpbnRlcmxlYXZlZCBsb2dzIGZvciB0aGUgaGFuZGZ1bCBvZiBwbHVnaW5zIGEgZGVtbyB2YXVsdCBpbmplY3RzLlxuICAgIGluc3RhbGxlZC5wdXNoKGF3YWl0IGluc3RhbGxQbHVnaW4oZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxlZCxcbiAgICBza2lwcGVkUGx1Z2luSWRzOiBpbmplY3RQbHVnaW5zLm1hcCgocGx1Z2luKSA9PiBwbHVnaW4ucGx1Z2luSWQpLmZpbHRlcigocGx1Z2luSWQpID0+ICF0YXJnZXRQbHVnaW5JZHMuaGFzKHBsdWdpbklkKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2VsZi1oZWFsaW5nIGNvdW50ZXJwYXJ0IG9mIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYDogaW5zdGFsbHMgYW55IGluamVjdGVkIGNvbW11bml0eSBwbHVnaW4gd2hvc2VcbiAqIGJpbmFyaWVzIGFyZSBtaXNzaW5nIChzZWUge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9KSwgdGhlbiBidWlsZHMgdGhlIHBvcHVsYXRlIG1hcCBleGFjdGx5IGFzIHRoZVxuICogc3luY2hyb25vdXMgYnVpbGRlciBkb2VzLlxuICpcbiAqIFVzZSB0aGlzIGZyb20gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIHRodW5rIFx1MjAxNCBib3RoIHRoZSBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgYWNjZXB0IGEgdGh1bmtcbiAqIHJldHVybmluZyBhIHByb21pc2UgXHUyMDE0IHNvIGEgZnJlc2ggY2xvbmUsIGEgbmV3IG1hY2hpbmUsIG9yIENJIG5lZWRzIG5vIG1hbnVhbCBpbnN0YWxsIHN0ZXAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzYW1lIGBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zYCB0aGUgc3luY2hyb25vdXMgYnVpbGRlciB0YWtlcy5cbiAqIEByZXR1cm5zIFRoZSBwb3B1bGF0ZSBtYXAsIHJlYWR5IHRvIGhhbmQgdG8gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIG9yIGBUZW1wb3JhcnlWYXVsdC5wb3B1bGF0ZWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmMocGFyYW1zOiBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zKTogUHJvbWlzZTxQb3B1bGF0ZUZpbGVzUGFyYW1zPiB7XG4gIGlmIChwYXJhbXMuaW5qZWN0UGx1Z2lucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXdhaXQgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyh7IGRlbW9WYXVsdFBhdGg6IHBhcmFtcy5kZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zOiBwYXJhbXMuaW5qZWN0UGx1Z2lucyB9KTtcbiAgfVxuXG4gIHJldHVybiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtcyk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBOZXR3b3JrIGRvd25sb2FkIGdsdWUsIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGZvciBhIEdpdEh1YiBkb3dubG9hZCwgc2VuZGluZyBhIGBHSVRIVUJfVE9LRU5gIC8gYEdIX1RPS0VOYCBiZWFyZXIgd2hlbiBvbmVcbiAqIGlzIGluIHRoZSBlbnZpcm9ubWVudCBcdTIwMTQgd2l0aG91dCBpdCB0aGUgYW5vbnltb3VzIHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMuXG4gKlxuICogQHJldHVybnMgVGhlIGhlYWRlcnMgdG8gc2VuZC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRHaXRIdWJIZWFkZXJzKCk6IEhlYWRlcnMge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSk7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9UT0tFTiddID8/IHByb2Nlc3MuZW52WydHSF9UT0tFTiddO1xuICBpZiAodG9rZW4pIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgfVxuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgb25lIHJlbGVhc2UgYXNzZXQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBhc3NldCdzIGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBpc1JlcXVpcmVkIC0gV2hldGhlciBhIG1pc3NpbmcgYXNzZXQgKEhUVFAgNDA0KSBpcyBhbiBlcnJvciByYXRoZXIgdGhhbiBhbiBhYnNlbnQgb3B0aW9uYWwgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBhc3NldCdzIGJ5dGVzLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFuIG9wdGlvbmFsIGFzc2V0IGlzIG5vdCBwdWJsaXNoZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBkb3dubG9hZCBmYWlscyBhbmQgdGhlIGFzc2V0IGlzIHJlcXVpcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFzc2V0KHVybDogc3RyaW5nLCBpc1JlcXVpcmVkOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogYnVpbGRHaXRIdWJIZWFkZXJzKCkgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBpZiAoIWlzUmVxdWlyZWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBIVFRQX05PVF9GT1VORCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgJHt1cmx9OiBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnksIG1lbW9pc2VkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgVGhlIHJlZ2lzdHJ5IHJvd3MuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZWdpc3RyeSBjYW5ub3QgYmUgZmV0Y2hlZCBvciBwYXJzZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnkoKTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHtcbiAgcmVnaXN0cnlQcm9taXNlID8/PSAoYXN5bmMgKCk6IFByb21pc2U8cmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdPiA9PiB7XG4gICAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEZldGNoaW5nIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSBmcm9tICR7Q09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMfS4uLmApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goQ09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMLCB7IGhlYWRlcnM6IGJ1aWxkR2l0SHViSGVhZGVycygpIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgKCR7Q09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMfSk6IGBcbiAgICAgICAgICArIGBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0uIGBcbiAgICAgICAgICArICdQYXNzIGFuIGV4cGxpY2l0IGByZXBvYCBvbiB0aGUgaW5qZWN0ZWQgcGx1Z2luIHRvIHNraXAgdGhlIHJlZ2lzdHJ5IGxvb2t1cC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHJlYWRvbmx5IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXTtcbiAgfSkoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZWdpc3RyeVByb21pc2U7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLy8gRG8gbm90IG1lbW9pc2UgYSBmYWlsdXJlOiBhIHRyYW5zaWVudCBuZXR3b3JrIGVycm9yIG11c3Qgbm90IHBvaXNvbiBldmVyeSBsYXRlciBsb29rdXAuXG4gICAgcmVnaXN0cnlQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIG9uZSBwbHVnaW4ncyByZWxlYXNlIGFzc2V0cyBhbmQgd3JpdGVzIHRoZW0gaW50byB0aGUgZGVtbyB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBpbnN0YWxsLlxuICogQHJldHVybnMgV2hhdCB3YXMgaW5zdGFsbGVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQgb3IgYSByZXF1aXJlZCBhc3NldCBjYW5ub3QgYmUgZG93bmxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBsdWdpbihkZW1vVmF1bHRQYXRoOiBzdHJpbmcsIHBsdWdpbjogSW5qZWN0UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxJbnN0YWxsZWRQbHVnaW5JbmZvPiB7XG4gIGNvbnN0IHsgcGx1Z2luSWQsIHZlcnNpb24gfSA9IHBsdWdpbjtcbiAgY29uc3QgcmVwbyA9IGF3YWl0IHJlc29sdmVQbHVnaW5SZXBvKHBsdWdpbik7XG4gIGNvbnN0IHRhcmdldERpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcblxuICBsb2coYFtkZW1vLXZhdWx0LWJvb3RzdHJhcF0gSW5zdGFsbGluZyBcIiR7cGx1Z2luSWR9XCIgZnJvbSAke3JlcG99QCR7dmVyc2lvbiA/PyAnbGF0ZXN0J30gaW50byAke3RhcmdldERpcmVjdG9yeX0uLi5gKTtcblxuICBjb25zdCBkb3dubG9hZHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uUkVRVUlSRURfUExVR0lOX0FTU0VUX05BTUVTLm1hcChhc3luYyAoYXNzZXROYW1lKSA9PiAoe1xuICAgICAgYXNzZXROYW1lLFxuICAgICAgY29udGVudDogYXdhaXQgZG93bmxvYWRBc3NldChidWlsZFBsdWdpbkFzc2V0VXJsKHsgYXNzZXROYW1lLCByZXBvLCB2ZXJzaW9uIH0pLCB0cnVlKVxuICAgIH0pKSxcbiAgICAuLi5PUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMubWFwKGFzeW5jIChhc3NldE5hbWUpID0+ICh7XG4gICAgICBhc3NldE5hbWUsXG4gICAgICBjb250ZW50OiBhd2FpdCBkb3dubG9hZEFzc2V0KGJ1aWxkUGx1Z2luQXNzZXRVcmwoeyBhc3NldE5hbWUsIHJlcG8sIHZlcnNpb24gfSksIGZhbHNlKVxuICAgIH0pKVxuICBdKTtcblxuICBta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBhc3NldE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHsgYXNzZXROYW1lLCBjb250ZW50IH0gb2YgZG93bmxvYWRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHdyaXRlRmlsZVN5bmMoam9pbih0YXJnZXREaXJlY3RvcnksIGFzc2V0TmFtZSksIGNvbnRlbnQpO1xuICAgIGFzc2V0TmFtZXMucHVzaChhc3NldE5hbWUpO1xuICB9XG5cbiAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEluc3RhbGxlZCBcIiR7cGx1Z2luSWR9XCI6ICR7YXNzZXROYW1lcy5qb2luKCcsICcpfS5gKTtcblxuICByZXR1cm4geyBhc3NldE5hbWVzLCBwbHVnaW5JZCwgcmVwbywgdmVyc2lvbiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBHaXRIdWIgcmVwb3NpdG9yeSBwdWJsaXNoaW5nIGEgcGx1Z2luIFx1MjAxNCB0aGUgZXhwbGljaXQgb3ZlcnJpZGUgd2hlbiBnaXZlbiwgb3RoZXJ3aXNlXG4gKiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gcmVzb2x2ZS5cbiAqIEByZXR1cm5zIFRoZSBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSByZWZlcmVuY2UuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGFuIGV4cGxpY2l0IG92ZXJyaWRlIGlzIG1hbGZvcm1lZCwgb3IgdGhlIGlkIGlzIG5vdCBhIHJlZ2lzdGVyZWQgY29tbXVuaXR5IHBsdWdpbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpblJlcG8ocGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBsdWdpbklkLCByZXBvIH0gPSBwbHVnaW47XG5cbiAgaWYgKHJlcG8gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghaXNWYWxpZFJlcG9SZWZlcmVuY2UocmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBcXGByZXBvXFxgIGZvciBjb21tdW5pdHkgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIjogJHtyZXBvfS4gRXhwZWN0ZWQgYW4gXFxgb3duZXIvbmFtZVxcYCByZWZlcmVuY2UuYCk7XG4gICAgfVxuICAgIHJldHVybiByZXBvO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0cnlSZXBvID0gc2VsZWN0UGx1Z2luUmVwbyh7IGVudHJpZXM6IGF3YWl0IGZldGNoQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnkoKSwgcGx1Z2luSWQgfSk7XG4gIGlmIChyZWdpc3RyeVJlcG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDb21tdW5pdHkgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgc28gaXRzIEdpdEh1YiBgXG4gICAgICAgICsgJ3JlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkLiBQYXNzIGFuIGV4cGxpY2l0IGByZXBvYCAoYG93bmVyL25hbWVgKSBvbiB0aGUgaW5qZWN0ZWQgcGx1Z2luLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2lzdHJ5UmVwbztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQ0EscUJBR087QUFDUCx1QkFBcUI7QUFDckIsMEJBQW9CO0FBU3BCLHVDQU9PO0FBQ1AsaUNBSU87QUFDUCxpQkFBb0I7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
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtYm9vdHN0cmFwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW5zdGFsbHMgYSBkZW1vIHZhdWx0J3MgKippbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyoqIGhlYWRsZXNzbHksIGJ5IGRvd25sb2FkaW5nXG4gKiB0aGVpciBwdWJsaXNoZWQgR2l0SHViIHJlbGVhc2UgYXNzZXRzIHN0cmFpZ2h0IGludG9cbiAqIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYC5cbiAqXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgZWFjaCBpbmplY3RlZCBwbHVnaW4ncyBgbWFpbi5qc2AgL1xuICogYG1hbmlmZXN0Lmpzb25gIHRvIGFscmVhZHkgYmUgb24gZGlzaywgYW5kIHRocm93cyB3aGVuIHRoZXkgYXJlIG5vdC4gVW50aWwgdGhpc1xuICogbW9kdWxlIGV4aXN0ZWQgdGhlIG9ubHkgZG9jdW1lbnRlZCByZW1lZHkgd2FzIGEgKipHVUkgc3RlcCoqIFx1MjAxNCBvcGVuIGBkZW1vLXZhdWx0L2BcbiAqIGluIE9ic2lkaWFuIG9uY2UgYW5kIGxldCBgZGVtby12YXVsdC1oZWxwZXJgIGluc3RhbGwgdGhlIHBsdWdpbiBhdCBydW50aW1lLlxuICogYC5vYnNpZGlhbi9wbHVnaW5zLypgIGlzIGdpdGlnbm9yZWQgaW4gYSBwbHVnaW4gcmVwbywgc28gdGhhdCBzdGF0ZVxuICogZXhpc3RzIG9uIGV4YWN0bHkgdGhlIG9uZSBtYWNoaW5lIHRoYXQgZGlkIGl0IGFuZCBpcyBpbnZpc2libGUgdG8gYSBmcmVzaCBjbG9uZSxcbiAqIGEgbmV3IG1hY2hpbmUsIG9yIENJLiBTaW5jZSBhIHBsdWdpbiByZXBvJ3MgcmVsZWFzZSBwcmVmbGlnaHQgcnVucyBpdHNcbiAqIGludGVncmF0aW9uIHRlc3RzLCB0aGF0IG1hZGUgKmN1dHRpbmcgYSByZWxlYXNlIGZyb20gYSBjbGVhbiBjbG9uZSogaW1wb3NzaWJsZVxuICogd2l0aG91dCBhIGh1bWFuIG9wZW5pbmcgYSBHVUkuXG4gKlxuICogRG93bmxvYWRpbmcgdGhlIHJlbGVhc2UgYXNzZXRzIGlzIHRoZSBleGFjdCBoZWFkbGVzcyBlcXVpdmFsZW50OiB0aGUgcmVzdWx0aW5nXG4gKiBmb2xkZXIgaXMgd2hhdCBPYnNpZGlhbiBpdHNlbGYgd291bGQgaGF2ZSBpbnN0YWxsZWQsIHNvIHRoZSBzaGlwcGVkXG4gKiBgKi1kZW1vLXZhdWx0LnppcGAgXHUyMDE0IHdoaWNoIHVuemlwcyBpbnRvIGEgc2luZ2xlIGAqLWRlbW8tdmF1bHQtPHZlcnNpb24+YCBmb2xkZXIgXHUyMDE0XG4gKiBzdGF5cyB0aGUgc3RhbmRhcmQgZGVtby12YXVsdCBhcnRpZmFjdC5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzLCBwbHVzIHRoZSBgYm9vdHN0cmFwLWRlbW8tdmF1bHRgIENMSSBzdWJjb21tYW5kOlxuICpcbiAqIC0ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IFx1MjAxNCBpbnN0YWxsIHRoZSBtaXNzaW5nIG9uZXMsIGV4cGxpY2l0bHkuXG4gKiAtIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmN9IFx1MjAxNCBkbyB0aGF0IGFuZCB0aGVuIGJ1aWxkIHRoZSBwb3B1bGF0ZSBtYXAsXG4gKiAgIHNvIGEgZ2xvYmFsIHNldHVwIHNlbGYtaGVhbHMgd2l0aCBubyBtYW51YWwgc3RlcCBhdCBhbGwuXG4gKlxuICogVGhlIHN5bmMgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgIGRlbGliZXJhdGVseSBrZWVwcyB0aHJvd2luZzogYGZldGNoYCBoYXMgbm9cbiAqIHN5bmNocm9ub3VzIGZvcm0sIHNvIGF1dG8taGVhbGluZyBjYW4gb25seSBsaXZlIG9uIGFuIGFzeW5jIHNpYmxpbmcuIEl0cyBtZXNzYWdlXG4gKiBub3cgbmFtZXMgYm90aCByZW1lZGllcyBhYm92ZSBpbnN0ZWFkIG9mIHRoZSBHVUkgc3RlcC5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeSB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuXG5pbXBvcnQge1xuICBidWlsZFBsdWdpbkFzc2V0VXJsLFxuICBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwsXG4gIGlzVmFsaWRSZXBvUmVmZXJlbmNlLFxuICBPUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMsXG4gIFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyxcbiAgc2VsZWN0UGx1Z2luUmVwb1xufSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUsXG4gIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG4vKipcbiAqIEJyb3dzZXIgYFVzZXItQWdlbnRgIGZvciB0aGUgYXNzZXQgZG93bmxvYWRzLCBtYXRjaGluZyBgb2JzaWRpYW4taW5zdGFsbGVyLnRzYCBcdTIwMTRcbiAqIGEgcGxhaW4gTm9kZSBmZXRjaCBpcyByZWplY3RlZCBieSBzb21lIENETiBlZGdlcy5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI0LjAuMC4wIFNhZmFyaS81MzcuMzYnO1xuXG5jb25zdCBIVFRQX05PVF9GT1VORCA9IDQwNDtcblxuLyoqXG4gKiBUaGUgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MuIEV2ZXJ5IGluamVjdGVkXG4gKiBwbHVnaW4gb2YgZXZlcnkgZGVtby12YXVsdCBwcm9qZWN0IGluIGEgcnVuIHJlc29sdmVzIGFnYWluc3QgdGhlIHNhbWUgdGFibGUsIGFuZFxuICogaXQgaXMgYSBtdWx0aS1tZWdhYnl0ZSBkb2N1bWVudC5cbiAqL1xubGV0IHJlZ2lzdHJ5UHJvbWlzZTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmplY3RlZCBwbHVnaW5zIHRvIGluc3RhbGwgXHUyMDE0IHRoZSBzYW1lIGxpc3QgcGFzc2VkIHRvIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYC4gUGx1Z2lucyB3aG9zZVxuICAgKiBiaW5hcmllcyBhcmUgYWxyZWFkeSBwcmVzZW50IGFyZSBza2lwcGVkICh1bmxlc3Mge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMuc2hvdWxkRm9yY2V9KSxcbiAgICogYXMgYXJlIHBsdWdpbnMgY2FycnlpbmcgYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAuXG4gICAqL1xuICByZWFkb25seSBpbmplY3RQbHVnaW5zOiByZWFkb25seSBJbmplY3RQbHVnaW5QYXJhbXNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZS1kb3dubG9hZCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjdXJyZW50IHJlbGVhc2UuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAgXHUyMDE0IHRoZSBub3JtYWwgcGF0aCBpbnN0YWxscyBvbmx5IHdoYXQgaXMgbWlzc2luZywgc28gYSB3YXJtIGNoZWNrb3V0IGRvZXMgbm9cbiAgICogbmV0d29yayBJL08gYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIGEge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUmVzdWx0IHtcbiAgLyoqXG4gIFRoZSBwbHVnaW5zIHRoYXQgd2VyZSBkb3dubG9hZGVkIGFuZCB3cml0dGVuLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlZDogcmVhZG9ubHkgSW5zdGFsbGVkUGx1Z2luSW5mb1tdO1xuXG4gIC8qKlxuICBUaGUgaWRzIG9mIHBsdWdpbnMgbGVmdCB1bnRvdWNoZWQgXHUyMDE0IGFscmVhZHkgaW5zdGFsbGVkLCBvciBvcHRlZCBvdXQgdmlhIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZFBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogT25lIHBsdWdpbiBpbnN0YWxsZWQgYnkge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbGxlZFBsdWdpbkluZm8ge1xuICAvKipcbiAgVGhlIGFzc2V0IGZpbGUgbmFtZXMgYWN0dWFsbHkgd3JpdHRlbiwgZS5nLiBgWydtYWluLmpzJywgJ21hbmlmZXN0Lmpzb24nLCAnc3R5bGVzLmNzcyddYC5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgR2l0SHViIHJlcG9zaXRvcnkgdGhlIGFzc2V0cyBjYW1lIGZyb20sIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlbGVhc2UgdGFnIGRvd25sb2FkZWQgZnJvbSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVwb3NpdG9yeSdzIGxhdGVzdCByZWxlYXNlIHdhcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGV2ZXJ5IGluamVjdGVkIGNvbW11bml0eSBwbHVnaW4gd2hvc2UgYnVpbHQgZmlsZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgZGVtbyB2YXVsdCwgYnlcbiAqIGRvd25sb2FkaW5nIGl0cyBwdWJsaXNoZWQgcmVsZWFzZSBhc3NldHMgaW50byBgZGVtby12YXVsdC8ub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AuXG4gKlxuICogRWFjaCBwbHVnaW4ncyByZXBvc2l0b3J5IGNvbWVzIGZyb20gaXRzIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30gd2hlbiBnaXZlbiwgb3RoZXJ3aXNlIGZyb21cbiAqIE9ic2lkaWFuJ3Mgb3duIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgXHUyMDE0IHRoZSBzYW1lIGBpZGAgXHUyMTkyIGByZXBvYCB0YWJsZSB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyXG4gKiBpbnN0YWxscyBmcm9tLCBzbyBubyBwbHVnaW4tc3BlY2lmaWMgbWFwcGluZyBpcyBoYXJkY29kZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtc30uXG4gKiBAcmV0dXJucyBXaGF0IHdhcyBpbnN0YWxsZWQgYW5kIHdoYXQgd2FzIHNraXBwZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEgcGx1Z2luJ3MgcmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQsIG9yIGEgcmVxdWlyZWQgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zKHBhcmFtczogQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyk6IFByb21pc2U8Qm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdD4ge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGluamVjdFBsdWdpbnMsIHNob3VsZEZvcmNlID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICBjb25zdCBib290c3RyYXBwYWJsZSA9IGluamVjdFBsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+IHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHRhcmdldHMgPSBzaG91bGRGb3JjZSA/IGJvb3RzdHJhcHBhYmxlIDogcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMoeyBkZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zIH0pO1xuICBjb25zdCB0YXJnZXRQbHVnaW5JZHMgPSBuZXcgU2V0KHRhcmdldHMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5wbHVnaW5JZCkpO1xuXG4gIGNvbnN0IGluc3RhbGxlZDogSW5zdGFsbGVkUGx1Z2luSW5mb1tdID0gW107XG4gIGZvciAoY29uc3QgcGx1Z2luIG9mIHRhcmdldHMpIHtcbiAgICAvLyBTZXF1ZW50aWFsIG9uIHB1cnBvc2U6IHRoZSBpbnN0YWxscyBzaGFyZSBvbmUgbWVtb2lzZWQgcmVnaXN0cnkgZmV0Y2guXG4gICAgLy8gUGFyYWxsZWxpc20gd291bGQgYnV5IG5vdGhpbmcgYnV0IGludGVybGVhdmVkIGxvZ3MgZm9yIHRoZSBoYW5kZnVsIG9mIHBsdWdpbnMgYSBkZW1vIHZhdWx0IGluamVjdHMuXG4gICAgaW5zdGFsbGVkLnB1c2goYXdhaXQgaW5zdGFsbFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4pKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbGVkLFxuICAgIHNraXBwZWRQbHVnaW5JZHM6IGluamVjdFBsdWdpbnMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5wbHVnaW5JZCkuZmlsdGVyKChwbHVnaW5JZCkgPT4gIXRhcmdldFBsdWdpbklkcy5oYXMocGx1Z2luSWQpKVxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzZWxmLWhlYWxpbmcgY291bnRlcnBhcnQgb2YgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgOiBpbnN0YWxscyBhbnkgaW5qZWN0ZWQgY29tbXVuaXR5IHBsdWdpbiB3aG9zZVxuICogYmluYXJpZXMgYXJlIG1pc3NpbmcgKHNlZSB7QGxpbmsgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc30pLCB0aGVuIGJ1aWxkcyB0aGUgcG9wdWxhdGUgbWFwIGV4YWN0bHkgYXMgdGhlXG4gKiBzeW5jaHJvbm91cyBidWlsZGVyIGRvZXMuXG4gKlxuICogVXNlIHRoaXMgZnJvbSBhIGdsb2JhbCBzZXR1cCdzIGBwb3B1bGF0ZWAgdGh1bmsgXHUyMDE0IGJvdGggdGhlIFZpdGVzdCBhbmQgSmVzdCBhZGFwdGVycyBhY2NlcHQgYSB0aHVua1xuICogcmV0dXJuaW5nIGEgcHJvbWlzZSBcdTIwMTQgc28gYSBmcmVzaCBjbG9uZSwgYSBuZXcgbWFjaGluZSwgb3IgQ0kgbmVlZHMgbm8gbWFudWFsIGluc3RhbGwgc3RlcC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNhbWUgYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXNgIHRoZSBzeW5jaHJvbm91cyBidWlsZGVyIHRha2VzLlxuICogQHJldHVybnMgVGhlIHBvcHVsYXRlIG1hcCwgcmVhZHkgdG8gaGFuZCB0byBhIGdsb2JhbCBzZXR1cCdzIGBwb3B1bGF0ZWAgb3IgYFRlbXBvcmFyeVZhdWx0LnBvcHVsYXRlYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luYyhwYXJhbXM6IEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXMpOiBQcm9taXNlPFBvcHVsYXRlRmlsZXNQYXJhbXM+IHtcbiAgaWYgKHBhcmFtcy5pbmplY3RQbHVnaW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICBhd2FpdCBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zKHsgZGVtb1ZhdWx0UGF0aDogcGFyYW1zLmRlbW9WYXVsdFBhdGgsIGluamVjdFBsdWdpbnM6IHBhcmFtcy5pbmplY3RQbHVnaW5zIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUocGFyYW1zKTtcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIE5ldHdvcmsgZG93bmxvYWQgZ2x1ZSwgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbi8qKlxuICogQnVpbGRzIHRoZSByZXF1ZXN0IGhlYWRlcnMgZm9yIGEgR2l0SHViIGRvd25sb2FkLCBzZW5kaW5nIGEgYEdJVEhVQl9UT0tFTmAgLyBgR0hfVE9LRU5gIGJlYXJlciB3aGVuIG9uZVxuICogaXMgaW4gdGhlIGVudmlyb25tZW50IFx1MjAxNCB3aXRob3V0IGl0IHRoZSBhbm9ueW1vdXMgcXVvdGEgcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgaGVhZGVycyB0byBzZW5kLlxuICovXG5mdW5jdGlvbiBidWlsZEdpdEh1YkhlYWRlcnMoKTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gIGlmICh0b2tlbikge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuICB9XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG4vKipcbiAqIERvd25sb2FkcyBvbmUgcmVsZWFzZSBhc3NldC5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0J3MgZG93bmxvYWQgVVJMLlxuICogQHBhcmFtIGlzUmVxdWlyZWQgLSBXaGV0aGVyIGEgbWlzc2luZyBhc3NldCAoSFRUUCA0MDQpIGlzIGFuIGVycm9yIHJhdGhlciB0aGFuIGFuIGFic2VudCBvcHRpb25hbCBmaWxlLlxuICogQHJldHVybnMgVGhlIGFzc2V0J3MgYnl0ZXMsIG9yIGB1bmRlZmluZWRgIHdoZW4gYW4gb3B0aW9uYWwgYXNzZXQgaXMgbm90IHB1Ymxpc2hlZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGRvd25sb2FkIGZhaWxzIGFuZCB0aGUgYXNzZXQgaXMgcmVxdWlyZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGlzUmVxdWlyZWQ6IGJvb2xlYW4pOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgeyBoZWFkZXJzOiBidWlsZEdpdEh1YkhlYWRlcnMoKSB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGlmICghaXNSZXF1aXJlZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IEhUVFBfTk9UX0ZPVU5EKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZCAke3VybH06IEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX0gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgbWVtb2lzZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcmVnaXN0cnkgcm93cy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlZ2lzdHJ5IGNhbm5vdCBiZSBmZXRjaGVkIG9yIHBhcnNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDb21tdW5pdHlQbHVnaW5SZWdpc3RyeSgpOiBQcm9taXNlPHJlYWRvbmx5IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXT4ge1xuICByZWdpc3RyeVByb21pc2UgPz89IChhc3luYyAoKTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+ID0+IHtcbiAgICBsb2coYFtkZW1vLXZhdWx0LWJvb3RzdHJhcF0gRmV0Y2hpbmcgT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5IGZyb20gJHtDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkx9Li4uYCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwsIHsgaGVhZGVyczogYnVpbGRHaXRIdWJIZWFkZXJzKCkgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZldGNoIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSAoJHtDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkx9KTogYFxuICAgICAgICAgICsgYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX0gJHtyZXNwb25zZS5zdGF0dXNUZXh0fS4gYFxuICAgICAgICAgICsgJ1Bhc3MgYW4gZXhwbGljaXQgYHJlcG9gIG9uIHRoZSBpbmplY3RlZCBwbHVnaW4gdG8gc2tpcCB0aGUgcmVnaXN0cnkgbG9va3VwLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgcmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdO1xuICB9KSgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlZ2lzdHJ5UHJvbWlzZTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAvLyBEbyBub3QgbWVtb2lzZSBhIGZhaWx1cmU6IGEgdHJhbnNpZW50IG5ldHdvcmsgZXJyb3IgbXVzdCBub3QgcG9pc29uIGV2ZXJ5IGxhdGVyIGxvb2t1cC5cbiAgICByZWdpc3RyeVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgb25lIHBsdWdpbidzIHJlbGVhc2UgYXNzZXRzIGFuZCB3cml0ZXMgdGhlbSBpbnRvIHRoZSBkZW1vIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBkZW1vVmF1bHRQYXRoIC0gVGhlIGRlbW8gdmF1bHQgcm9vdC5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIGluc3RhbGwuXG4gKiBAcmV0dXJucyBXaGF0IHdhcyBpbnN0YWxsZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZXBvc2l0b3J5IGNhbm5vdCBiZSByZXNvbHZlZCBvciBhIHJlcXVpcmVkIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUGx1Z2luKGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBQcm9taXNlPEluc3RhbGxlZFBsdWdpbkluZm8+IHtcbiAgY29uc3QgeyBwbHVnaW5JZCwgdmVyc2lvbiB9ID0gcGx1Z2luO1xuICBjb25zdCByZXBvID0gYXdhaXQgcmVzb2x2ZVBsdWdpblJlcG8ocGx1Z2luKTtcbiAgY29uc3QgdGFyZ2V0RGlyZWN0b3J5ID0gcmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5KHsgZGVtb1ZhdWx0UGF0aCwgcGx1Z2luIH0pO1xuXG4gIGxvZyhgW2RlbW8tdmF1bHQtYm9vdHN0cmFwXSBJbnN0YWxsaW5nIFwiJHtwbHVnaW5JZH1cIiBmcm9tICR7cmVwb31AJHt2ZXJzaW9uID8/ICdsYXRlc3QnfSBpbnRvICR7dGFyZ2V0RGlyZWN0b3J5fS4uLmApO1xuXG4gIGNvbnN0IGRvd25sb2FkcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5SRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMubWFwKGFzeW5jIChhc3NldE5hbWUpID0+ICh7XG4gICAgICBhc3NldE5hbWUsXG4gICAgICBjb250ZW50OiBhd2FpdCBkb3dubG9hZEFzc2V0KGJ1aWxkUGx1Z2luQXNzZXRVcmwoeyBhc3NldE5hbWUsIHJlcG8sIHZlcnNpb24gfSksIHRydWUpXG4gICAgfSkpLFxuICAgIC4uLk9QVElPTkFMX1BMVUdJTl9BU1NFVF9OQU1FUy5tYXAoYXN5bmMgKGFzc2V0TmFtZSkgPT4gKHtcbiAgICAgIGFzc2V0TmFtZSxcbiAgICAgIGNvbnRlbnQ6IGF3YWl0IGRvd25sb2FkQXNzZXQoYnVpbGRQbHVnaW5Bc3NldFVybCh7IGFzc2V0TmFtZSwgcmVwbywgdmVyc2lvbiB9KSwgZmFsc2UpXG4gICAgfSkpXG4gIF0pO1xuXG4gIG1rZGlyU3luYyh0YXJnZXREaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGFzc2V0TmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgeyBhc3NldE5hbWUsIGNvbnRlbnQgfSBvZiBkb3dubG9hZHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKHRhcmdldERpcmVjdG9yeSwgYXNzZXROYW1lKSwgY29udGVudCk7XG4gICAgYXNzZXROYW1lcy5wdXNoKGFzc2V0TmFtZSk7XG4gIH1cblxuICBsb2coYFtkZW1vLXZhdWx0LWJvb3RzdHJhcF0gSW5zdGFsbGVkIFwiJHtwbHVnaW5JZH1cIjogJHthc3NldE5hbWVzLmpvaW4oJywgJyl9LmApO1xuXG4gIHJldHVybiB7IGFzc2V0TmFtZXMsIHBsdWdpbklkLCByZXBvLCB2ZXJzaW9uIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIEdpdEh1YiByZXBvc2l0b3J5IHB1Ymxpc2hpbmcgYSBwbHVnaW4gXHUyMDE0IHRoZSBleHBsaWNpdCBvdmVycmlkZSB3aGVuIGdpdmVuLCBvdGhlcndpc2VcbiAqIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeS5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZXNvbHZlLlxuICogQHJldHVybnMgVGhlIGBvd25lci9uYW1lYCByZXBvc2l0b3J5IHJlZmVyZW5jZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW4gZXhwbGljaXQgb3ZlcnJpZGUgaXMgbWFsZm9ybWVkLCBvciB0aGUgaWQgaXMgbm90IGEgcmVnaXN0ZXJlZCBjb21tdW5pdHkgcGx1Z2luLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUGx1Z2luUmVwbyhwbHVnaW46IEluamVjdFBsdWdpblBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcGx1Z2luSWQsIHJlcG8gfSA9IHBsdWdpbjtcblxuICBpZiAocmVwbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFpc1ZhbGlkUmVwb1JlZmVyZW5jZShyZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFxcYHJlcG9cXGAgZm9yIGNvbW11bml0eSBwbHVnaW4gXCIke3BsdWdpbklkfVwiOiAke3JlcG99LiBFeHBlY3RlZCBhbiBcXGBvd25lci9uYW1lXFxgIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcG87XG4gIH1cblxuICBjb25zdCByZWdpc3RyeVJlcG8gPSBzZWxlY3RQbHVnaW5SZXBvKHsgZW50cmllczogYXdhaXQgZmV0Y2hDb21tdW5pdHlQbHVnaW5SZWdpc3RyeSgpLCBwbHVnaW5JZCB9KTtcbiAgaWYgKHJlZ2lzdHJ5UmVwbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENvbW11bml0eSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LCBzbyBpdHMgR2l0SHViIGBcbiAgICAgICAgKyAncmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQuIFBhc3MgYW4gZXhwbGljaXQgYHJlcG9gIChgb3duZXIvbmFtZWApIG9uIHRoZSBpbmplY3RlZCBwbHVnaW4uJ1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVnaXN0cnlSZXBvO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWlDQSxxQkFH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
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* `manifest.json` to already be on disk, and throws when they are not. Until this
|
|
10
10
|
* module existed the only documented remedy was a **GUI step** — open `demo-vault/`
|
|
11
11
|
* in Obsidian once and let `demo-vault-helper` install the plugin at runtime.
|
|
12
|
-
* `.obsidian/plugins/*` is gitignored in
|
|
12
|
+
* `.obsidian/plugins/*` is gitignored in a plugin repo, so that state
|
|
13
13
|
* exists on exactly the one machine that did it and is invisible to a fresh clone,
|
|
14
14
|
* a new machine, or CI. Since a plugin repo's release preflight runs its
|
|
15
15
|
* integration tests, that made *cutting a release from a clean clone* impossible
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
*
|
|
18
18
|
* Downloading the release assets is the exact headless equivalent: the resulting
|
|
19
19
|
* folder is what Obsidian itself would have installed, so the shipped
|
|
20
|
-
* `*-demo-vault
|
|
20
|
+
* `*-demo-vault.zip` — which unzips into a single `*-demo-vault-<version>` folder —
|
|
21
|
+
* stays the standard demo-vault artifact.
|
|
21
22
|
*
|
|
22
23
|
* Two entry points, plus the `bootstrap-demo-vault` CLI subcommand:
|
|
23
24
|
*
|
|
@@ -26,9 +26,10 @@ module.exports = __toCommonJS(demo_vault_populate_exports);
|
|
|
26
26
|
var import_node_fs = require("node:fs");
|
|
27
27
|
var import_node_path = require("node:path");
|
|
28
28
|
var import_community_plugin_registry = require("./community-plugin-registry.cjs");
|
|
29
|
+
var import_config_directory = require("./config-directory.cjs");
|
|
29
30
|
var import_demo_vault_tree = require("./demo-vault-tree.cjs");
|
|
30
31
|
var import_type_guards = require("./type-guards.cjs");
|
|
31
|
-
const OBSIDIAN_CONFIG_DIR =
|
|
32
|
+
const OBSIDIAN_CONFIG_DIR = import_config_directory.DEFAULT_CONFIG_DIRECTORY;
|
|
32
33
|
const PLUGINS_DIR = "plugins";
|
|
33
34
|
const DATA_JSON = "data.json";
|
|
34
35
|
const DATA_JSON_INDENT = 2;
|
|
@@ -101,4 +102,4 @@ function seedPlugin(demoVaultPath, plugin, map) {
|
|
|
101
102
|
resolveInjectedPluginSourceDirectory,
|
|
102
103
|
resolveMissingInjectedPlugins
|
|
103
104
|
});
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtcG9wdWxhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgYSBjb21wbGV0ZSB7QGxpbmsgUG9wdWxhdGVGaWxlc1BhcmFtc30gbWFwIGZvciBhIHBsdWdpbidzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCwgcmVhZHkgdG8gc2VlZCBpbnRvXG4gKiB0aGUgdGVtcCB2YXVsdCBiZWZvcmUgT2JzaWRpYW4gb3BlbnMgaXQuIENvbXBvc2VzIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gKHRoZSBub3RlIHRyZWUpIHdpdGggdGhlIHR3b1xuICogcGllY2VzIGl0IGRlbGliZXJhdGVseSBvbWl0czogc2VsZWN0ZWQgYC5vYnNpZGlhbi8qYCBjb25maWcgZmlsZXMsIGFuZCB0aGUgYnVpbHQgYmluYXJpZXMgKCsgYGRhdGEuanNvbmApXG4gKiBvZiBhbnkgZXh0cmEgY29tbXVuaXR5IHBsdWdpbnMgdGhlIGRlbW8gdmF1bHQgZGVwZW5kcyBvbiAoZS5nLiBDb2RlU2NyaXB0IFRvb2xraXQsIGBkZW1vLXZhdWx0LWhlbHBlcmApLlxuICpcbiAqIFBhaXJzIHdpdGggdGhlIGBlbmFibGVDb21tdW5pdHlQbHVnaW5zYCBvcHRpb24gb2YgdGhlIGdsb2JhbC1zZXR1cCBgY3JlYXRlU2V0dXBgOiB0aGlzIHNlZWRzIHRoZSBiaW5hcmllcyxcbiAqIHRoYXQgdHVybnMgdGhlbSBvbi4gSXQgaW50ZW50aW9uYWxseSBkb2VzIE5PVCB3cml0ZSBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgXHUyMDE0IHRoZSBoYXJuZXNzIG93bnMgdGhhdCBmaWxlXG4gKiAoaXQgbGlzdHMgdGhlIHBsdWdpbi11bmRlci10ZXN0KSwgYW5kIGVuYWJsaW5nIHRoZSBleHRyYXMgcGVyc2lzdHMgdGhlbS5cbiAqXG4gKiBTdGF5cyAqKnN5bmNocm9ub3VzKiosIHNvIGFuIGluamVjdGVkIHBsdWdpbiB3aG9zZSBiaW5hcmllcyBhcmUgYWJzZW50IGlzIGEgdGhyb3cgcmF0aGVyIHRoYW4gYSBkb3dubG9hZC5cbiAqIGBkZW1vLXZhdWx0LWJvb3RzdHJhcC50c2Agb3ducyB0aGUgaGVhZGxlc3MgaW5zdGFsbCB0aGUgdGhyb3cncyBtZXNzYWdlIHBvaW50cyBhdCBcdTIwMTQgaW5jbHVkaW5nXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jYCwgdGhlIHNlbGYtaGVhbGluZyBzaWJsaW5nIG9mIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS4gVGhlXG4gKiBtaXNzaW5nLXBsdWdpbiBkZXRlY3Rpb24gKHtAbGluayByZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc30pIGxpdmVzIGhlcmUgYW5kIGlzIHNoYXJlZCB3aXRoIGl0LCBzbyB0aGVcbiAqIHR3byBwYXRocyBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgd2hhdCBcIm5vdCBpbnN0YWxsZWRcIiBtZWFucy5cbiAqL1xuXG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgUG9wdWxhdGVGaWxlc1BhcmFtcyB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5cbmltcG9ydCB7IFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHsgcmVhZERlbW9WYXVsdFRyZWUgfSBmcm9tICcuL2RlbW8tdmF1bHQtdHJlZS5janMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLmNqcyc7XG5cbmNvbnN0IE9CU0lESUFOX0NPTkZJR19ESVIgPSAnLm9ic2lkaWFuJztcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgREFUQV9KU09OID0gJ2RhdGEuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuY29uc3QgREVGQVVMVF9PQlNJRElBTl9DT05GSUdfRklMRVMgPSBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzIChvZiBmaWxlcyBvciBkaXJlY3RvcmllcywgbWF0Y2hlZCBhdCBhbnkgZGVwdGgpIHRvIHNraXAgd2hpbGUgcmVhZGluZyB0aGUgbm90ZSB0cmVlIFx1MjAxNCBmb3J3YXJkZWQgdG9cbiAgICoge0BsaW5rIHJlYWREZW1vVmF1bHRUcmVlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsnLmdpdCcsICcub2JzaWRpYW4nXWBcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTmFtZXM/OiBJdGVyYWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyB0byBzZWVkIGludG8gYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYCAoYmluYXJpZXMgKyBvcHRpb25hbCBgZGF0YS5qc29uYCkuIFR1cm5cbiAgICogdGhlbSBvbiB3aXRoIHRoZSBnbG9iYWwtc2V0dXAgYGNyZWF0ZVNldHVwKHsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lucyB9KWAgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5qZWN0UGx1Z2lucz86IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xuXG4gIC8qKlxuICAgKiBgLm9ic2lkaWFuLypgIGNvbmZpZyBmaWxlcyB0byBjYXJyeSBvdmVyIGZyb20gdGhlIGRlbW8gdmF1bHQuIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gZXhjbHVkZXMgdGhlIHdob2xlXG4gICAqIGAub2JzaWRpYW5gIGRpcmVjdG9yeSwgc28gY29uZmlnIHRoZSB2YXVsdCByZWxpZXMgb24gKHByZXZpZXctbW9kZSBkZWZhdWx0LCBjb3JlIHBsdWdpbnMsIGFwcGVhcmFuY2UpIG11c3RcbiAgICogYmUgcmUtYWRkZWQgZXhwbGljaXRseS4gRmlsZXMgdGhhdCBkbyBub3QgZXhpc3QgYXJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGaWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY29tbXVuaXR5IHBsdWdpbiB0byBzZWVkIGludG8gdGhlIGRlbW8gdmF1bHQgYWxvbmdzaWRlIHRoZSBub3RlIHRyZWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0UGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIE92ZXJsYXkgd3JpdHRlbiBhcyBgLm9ic2lkaWFuL3BsdWdpbnMvPHBsdWdpbklkPi9kYXRhLmpzb25gIChKU09OLCAyLXNwYWNlIGluZGVudCkuIE9taXQgdG8ga2VlcCB3aGF0ZXZlclxuICAgKiBgZGF0YS5qc29uYCAoaWYgYW55KSBhbHJlYWR5IGxpdmVzIGluIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbXVuaXR5IHBsdWdpbidzIGlkIChpdHMgYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD5gIGZvbGRlciBuYW1lKS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSAoYG93bmVyL25hbWVgKSBwdWJsaXNoaW5nIHRoaXMgcGx1Z2luLCBjb25zdWx0ZWQgKipvbmx5KiogYnkgdGhlIGhlYWRsZXNzXG4gICAqIGJvb3RzdHJhcCAoYGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNgIC8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AgLyB0aGVcbiAgICogYGJvb3RzdHJhcC1kZW1vLXZhdWx0YCBDTEkpIHdoZW4gdGhlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQuIFN1cHBseWluZyBpdCBza2lwc1xuICAgKiB0aGUgbG9va3VwIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgd2hpY2ggaXMgYWxzbyB0aGUgd2F5IHRvIGJvb3RzdHJhcCBhIHBsdWdpblxuICAgKiB0aGF0IGlzIG5vdCBsaXN0ZWQgdGhlcmUgYXQgYWxsLiBOZXZlciB1c2VkIHdoZW4gdGhlIGZpbGVzIGFyZSBhbHJlYWR5IG9uIGRpc2suXG4gICAqL1xuICByZWFkb25seSByZXBvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdG8gcmVhZCB0aGUgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgZnJvbS4gRXZlcnkgZmlsZSBkaXJlY3RseSBpbnNpZGUgaXQgaXMgY29waWVkIGludG9cbiAgICogYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYDsgYG1haW4uanNgIGFuZCBgbWFuaWZlc3QuanNvbmAgYXJlIHJlcXVpcmVkLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgYWxzbyBvcHRzIHRoZSBwbHVnaW4gKipvdXQqKiBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwOiBhbiBleHBsaWNpdCBzb3VyY2UgZGlyZWN0b3J5XG4gICAqIG5hbWVzIGEgbG9jYWwgYnVpbGQgb3V0cHV0LCBub3Qgc29tZXdoZXJlIHRvIGRvd25sb2FkIGEgcHVibGlzaGVkIHJlbGVhc2UgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYDxkZW1vVmF1bHRQYXRoPi8ub2JzaWRpYW4vcGx1Z2lucy88cGx1Z2luSWQ+YFxuICAgKi9cblxuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZyB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIGRvd25sb2FkcyBmcm9tLCBwaW5uaW5nIHRoZSBpbnN0YWxsZWQgdmVyc2lvbi4gT21pdCBmb3IgdGhlXG4gICAqIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSBcdTIwMTQgd2hhdCB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzLiBMaWtlXG4gICAqIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30sIGNvbnN1bHRlZCBvbmx5IHdoaWxlIGJvb3RzdHJhcHBpbmcgbWlzc2luZyBiaW5hcmllcy5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBpbmplY3RlZCBwbHVnaW4gd2hvc2Ugc291cmNlIGRpcmVjdG9yeSB0byByZXNvbHZlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbHVnaW4gcmVwbydzIGBkZW1vLXZhdWx0L2AgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVtb1ZhdWx0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgaW5qZWN0ZWQgcGx1Z2lucyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IGluamVjdFBsdWdpbnM6IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZnVsbCBwb3B1bGF0ZSBtYXAgZm9yIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQvYDogdGhlIG5vdGUgdHJlZSwgdGhlIHNlbGVjdGVkIGAub2JzaWRpYW4vKmAgY29uZmlnXG4gKiBmaWxlcywgYW5kIGV2ZXJ5IGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzICgrIG9wdGlvbmFsIGBkYXRhLmpzb25gKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwb3B1bGF0ZSBtYXAsIHJlYWR5IHRvIGhhbmQgdG8gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIG9yIHtAbGluayBUZW1wb3JhcnlWYXVsdC5wb3B1bGF0ZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyk6IFBvcHVsYXRlRmlsZXNQYXJhbXMge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMsIGluamVjdFBsdWdpbnMgPSBbXSwgb2JzaWRpYW5Db25maWdGaWxlcyA9IERFRkFVTFRfT0JTSURJQU5fQ09ORklHX0ZJTEVTIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbWFwID0gcmVhZERlbW9WYXVsdFRyZWUoZXhjbHVkZWROYW1lcyA9PT0gdW5kZWZpbmVkID8geyBkZW1vVmF1bHRQYXRoIH0gOiB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMgfSk7XG5cbiAgZm9yIChjb25zdCBjb25maWdGaWxlIG9mIG9ic2lkaWFuQ29uZmlnRmlsZXMpIHtcbiAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBjb25maWdGaWxlKTtcbiAgICBpZiAoZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgICAgbWFwW2Ake09CU0lESUFOX0NPTkZJR19ESVJ9LyR7Y29uZmlnRmlsZX1gXSA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBpbmplY3RQbHVnaW5zKSB7XG4gICAgc2VlZFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4sIG1hcCk7XG4gIH1cblxuICByZXR1cm4gbWFwO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXJlY3RvcnkgYW4gaW5qZWN0ZWQgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgYXJlIHJlYWQgZnJvbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnlQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGV4cGxpY2l0IHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fSB3aGVuIHNldCwgb3RoZXJ3aXNlIHRoZSBwbHVnaW4ncyBmb2xkZXJcbiAqICAgaW5zaWRlIHRoZSBkZW1vIHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5KHBhcmFtczogUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPz8gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBQTFVHSU5TX0RJUiwgcGx1Z2luLnBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBpbmplY3RlZCBwbHVnaW5zIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQgYW5kIGNhbiB0aGVyZWZvcmUgYmVcbiAqIGluc3RhbGxlZCBoZWFkbGVzc2x5IFx1MjAxNCB0aGUgZXhhY3Qgc2V0IHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfSB3b3VsZCBvdGhlcndpc2UgdGhyb3cgb24uXG4gKlxuICogUGx1Z2lucyBjYXJyeWluZyBhbiBleHBsaWNpdCB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnNvdXJjZURpcmVjdG9yeX0gYXJlIGV4Y2x1ZGVkOiB0aGF0IG5hbWVzIGEgbG9jYWxcbiAqIGJ1aWxkIG91dHB1dCwgbm90IHNvbWV3aGVyZSB0byBkb3dubG9hZCBhIHB1Ymxpc2hlZCByZWxlYXNlIGludG8uXG4gKlxuICogU2hhcmVkIHdpdGggdGhlIGJvb3RzdHJhcCBzbyBcIm1pc3NpbmdcIiBoYXMgb25lIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdHdvIHRoYXQgY2FuIGRyaWZ0IGFwYXJ0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwbHVnaW5zIHRvIGJvb3RzdHJhcCwgaW4gdGhlIG9yZGVyIGdpdmVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMocGFyYW1zOiBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyk6IEluamVjdFBsdWdpblBhcmFtc1tdIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIHJldHVybiBwYXJhbXMuaW5qZWN0UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4ge1xuICAgIGlmIChwbHVnaW4uc291cmNlRGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWVzID0gcmVhZFBsdWdpbkZpbGVOYW1lcyhyZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnkoeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSkpO1xuICAgIHJldHVybiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMuc29tZSgoYXNzZXROYW1lKSA9PiAhZmlsZU5hbWVzLmluY2x1ZGVzKGFzc2V0TmFtZSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFwiaG93IHRvIGZpeCB0aGlzXCIgaGFsZiBvZiB0aGUgbWlzc2luZy1iaW5hcmllcyBlcnJvci5cbiAqXG4gKiBUaGUgcmVtZWR5IGRpZmZlcnMgYnkgb3B0LW91dDogYSBwbHVnaW4gcmVhZCBmcm9tIHRoZSBkZW1vIHZhdWx0IGNhbiBiZSBpbnN0YWxsZWQgaGVhZGxlc3NseSwgd2hpbGUgb25lXG4gKiByZWFkIGZyb20gYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAgbmFtZXMgYSBsb2NhbCBidWlsZCBvdXRwdXQgdGhlIGJvb3RzdHJhcCBtdXN0IG5ldmVyIG92ZXJ3cml0ZS5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIG5hbWVkIGluIHRoZSBDTEkgaGludCBzbyB0aGUgY29tbWFuZCBpcyBjb3B5LXBhc3RlYWJsZS5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nLlxuICogQHJldHVybnMgVGhlIHJlbWVkeSBzZW50ZW5jZShzKS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNaXNzaW5nUGx1Z2luUmVtZWR5KGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBzdHJpbmcge1xuICBpZiAocGx1Z2luLnNvdXJjZURpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdJdCB3YXMgcmVhZCBmcm9tIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLCB3aGljaCBvcHRzIGl0IG91dCBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIFx1MjAxNCAnXG4gICAgICArICdidWlsZCBpdCBpbnRvIHRoYXQgZGlyZWN0b3J5LCBvciBkcm9wIGBzb3VyY2VEaXJlY3RvcnlgIHRvIGluc3RhbGwgaXQgZnJvbSBpdHMgcHVibGlzaGVkIHJlbGVhc2UuJztcbiAgfVxuXG4gIHJldHVybiBgSW5zdGFsbCBpdCBoZWFkbGVzc2x5IHdpdGggXFxgbnB4IG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcgYm9vdHN0cmFwLWRlbW8tdmF1bHQgLS1kZW1vLXZhdWx0IFwiJHtkZW1vVmF1bHRQYXRofVwiXFxgLCBgXG4gICAgKyAnb3Igc3dpdGNoIHRoaXMgc2V0dXAgdG8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AsIHdoaWNoIGluc3RhbGxzIG1pc3NpbmcgcGx1Z2lucyBpdHNlbGYuICdcbiAgICArICdPcGVuaW5nIGRlbW8tdmF1bHQvIGluIE9ic2lkaWFuIG9uY2Ugc28gZGVtby12YXVsdC1oZWxwZXIgaW5zdGFsbHMgaXQgYWxzbyB3b3Jrcy4nO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBmaWxlIG5hbWVzIGRpcmVjdGx5IGluc2lkZSBhIHBsdWdpbidzIHNvdXJjZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSAtIFRoZSBkaXJlY3RvcnkgdG8gbGlzdC5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIG5hbWVzLCBvciBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBleGlzdHNTeW5jKHNvdXJjZURpcmVjdG9yeSlcbiAgICA/IHJlYWRkaXJTeW5jKHNvdXJjZURpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKVxuICAgIDogW107XG59XG5cbi8qKlxuICogU2VlZHMgb25lIGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzIChhbmQgb3B0aW9uYWwgYGRhdGEuanNvbmApIGludG8gdGhlIHBvcHVsYXRlIG1hcC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVmYXVsdCBzb3VyY2UgZGlyZWN0b3J5LlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gc2VlZC5cbiAqIEBwYXJhbSBtYXAgLSBUaGUgcG9wdWxhdGUgbWFwIHRvIHdyaXRlIGludG8uXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwbHVnaW4ncyBgbWFpbi5qc2AgLyBgbWFuaWZlc3QuanNvbmAgYXJlIG5vdCBvbiBkaXNrLCBuYW1pbmcgdGhlIGhlYWRsZXNzIHJlbWVkaWVzLlxuICovXG5mdW5jdGlvbiBzZWVkUGx1Z2luKGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMsIG1hcDogUG9wdWxhdGVGaWxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGRhdGEsIHBsdWdpbklkIH0gPSBwbHVnaW47XG4gIGNvbnN0IHNvdXJjZURpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcbiAgY29uc3QgcGx1Z2luUHJlZml4ID0gYCR7T0JTSURJQU5fQ09ORklHX0RJUn0vJHtQTFVHSU5TX0RJUn0vJHtwbHVnaW5JZH1gO1xuXG4gIGNvbnN0IGZpbGVOYW1lcyA9IHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5KTtcblxuICBmb3IgKGNvbnN0IHJlcXVpcmVkRmlsZSBvZiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMpIHtcbiAgICBpZiAoIWZpbGVOYW1lcy5pbmNsdWRlcyhyZXF1aXJlZEZpbGUpKSB7XG4gICAgICBjb25zdCByZW1lZHkgPSBidWlsZE1pc3NpbmdQbHVnaW5SZW1lZHkoZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbW11bml0eSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIG5vdCBpbnN0YWxsZWQgaW4gdGhlIGRlbW8gdmF1bHQgKCR7am9pbihzb3VyY2VEaXJlY3RvcnksIHJlcXVpcmVkRmlsZSl9IG1pc3NpbmcpLiAke3JlbWVkeX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgLy8gYGRhdGEuanNvbmAgaXMgcmVnZW5lcmF0ZWQgZnJvbSBgZGF0YWAgYmVsb3cgKHdoZW4gcHJvdmlkZWQpOyBza2lwIHRoZSBvbi1kaXNrIGNvcHkgdG8gYXZvaWQgc2VlZGluZyBpdCB0d2ljZS5cbiAgICBpZiAoZmlsZU5hbWUgPT09IERBVEFfSlNPTiAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXBbYCR7cGx1Z2luUHJlZml4fS8ke2ZpbGVOYW1lfWBdID0gcmVhZEZpbGVTeW5jKGpvaW4oc291cmNlRGlyZWN0b3J5LCBmaWxlTmFtZSkpO1xuICB9XG5cbiAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGRhdGFKc29uOiBzdHJpbmcgPSBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gICAgbWFwW2Ake3BsdWdpblByZWZpeH0vJHtEQVRBX0pTT059YF0gPSBgJHtkYXRhSnNvbn1cXG5gO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxxQkFJTztBQUNQLHVCQUFxQjtBQUlyQix1Q0FBNEM7QUFDNUMsNkJBQWtDO0FBQ2xDLHlCQUFrQztBQUVsQyxNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGNBQWM7QUFDcEIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sbUJBQW1CO0FBRXpCLE1BQU0sZ0NBQWdDLENBQUMsWUFBWSxtQkFBbUIsbUJBQW1CO0FBb0hsRixTQUFTLHVCQUF1QixRQUEyRDtBQUNoRyxRQUFNLEVBQUUsZUFBZSxlQUFlLGdCQUFnQixDQUFDLEdBQUcsc0JBQXNCLDhCQUE4QixJQUFJO0FBRWxILFFBQU0sVUFBTSwwQ0FBa0Isa0JBQWtCLFNBQVksRUFBRSxjQUFjLElBQUksRUFBRSxlQUFlLGNBQWMsQ0FBQztBQUVoSCxhQUFXLGNBQWMscUJBQXFCO0FBQzVDLFVBQU0saUJBQWEsdUJBQUssZUFBZSxxQkFBcUIsVUFBVTtBQUN0RSxZQUFJLDJCQUFXLFVBQVUsR0FBRztBQUMxQixVQUFJLEdBQUcsbUJBQW1CLElBQUksVUFBVSxFQUFFLFFBQUksNkJBQWEsVUFBVTtBQUFBLElBQ3ZFO0FBQUEsRUFDRjtBQUVBLGFBQVcsVUFBVSxlQUFlO0FBQ2xDLGVBQVcsZUFBZSxRQUFRLEdBQUc7QUFBQSxFQUN2QztBQUVBLFNBQU87QUFDVDtBQVNPLFNBQVMscUNBQXFDLFFBQTREO0FBQy9HLFFBQU0sRUFBRSxlQUFlLE9BQU8sSUFBSTtBQUNsQyxTQUFPLE9BQU8sdUJBQW1CLHVCQUFLLGVBQWUscUJBQXFCLGFBQWEsT0FBTyxRQUFRO0FBQ3hHO0FBY08sU0FBUyw4QkFBOEIsUUFBbUU7QUFDL0csUUFBTSxFQUFFLGNBQWMsSUFBSTtBQUMxQixTQUFPLE9BQU8sY0FBYyxPQUFPLENBQUMsV0FBVztBQUM3QyxRQUFJLE9BQU8sb0JBQW9CLFFBQVc7QUFDeEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLFlBQVksb0JBQW9CLHFDQUFxQyxFQUFFLGVBQWUsT0FBTyxDQUFDLENBQUM7QUFDckcsV0FBTyw2REFBNEIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLFNBQVMsU0FBUyxDQUFDO0FBQUEsRUFDdkYsQ0FBQztBQUNIO0FBWUEsU0FBUyx5QkFBeUIsZUFBdUIsUUFBb0M7QUFDM0YsTUFBSSxPQUFPLG9CQUFvQixRQUFXO0FBQ3hDLFdBQU87QUFBQSxFQUVUO0FBRUEsU0FBTyxvR0FBb0csYUFBYTtBQUcxSDtBQVFBLFNBQVMsb0JBQW9CLGlCQUFtQztBQUM5RCxhQUFPLDJCQUFXLGVBQWUsUUFDN0IsNEJBQVksaUJBQWlCLEVBQUUsZUFBZSxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxNQUFNLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLE1BQU0sSUFBSSxJQUNqSCxDQUFDO0FBQ1A7QUFVQSxTQUFTLFdBQVcsZUFBdUIsUUFBNEIsS0FBZ0M7QUFDckcsUUFBTSxFQUFFLE1BQU0sU0FBUyxJQUFJO0FBQzNCLFFBQU0sa0JBQWtCLHFDQUFxQyxFQUFFLGVBQWUsT0FBTyxDQUFDO0FBQ3RGLFFBQU0sZUFBZSxHQUFHLG1CQUFtQixJQUFJLFdBQVcsSUFBSSxRQUFRO0FBRXRFLFFBQU0sWUFBWSxvQkFBb0IsZUFBZTtBQUVyRCxhQUFXLGdCQUFnQiw4REFBNkI7QUFDdEQsUUFBSSxDQUFDLFVBQVUsU0FBUyxZQUFZLEdBQUc7QUFDckMsWUFBTSxTQUFTLHlCQUF5QixlQUFlLE1BQU07QUFDN0QsWUFBTSxJQUFJO0FBQUEsUUFDUixxQkFBcUIsUUFBUSw2Q0FBeUMsdUJBQUssaUJBQWlCLFlBQVksQ0FBQyxjQUFjLE1BQU07QUFBQSxNQUMvSDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsYUFBVyxZQUFZLFdBQVc7QUFFaEMsUUFBSSxhQUFhLGFBQWEsU0FBUyxRQUFXO0FBQ2hEO0FBQUEsSUFDRjtBQUNBLFFBQUksR0FBRyxZQUFZLElBQUksUUFBUSxFQUFFLFFBQUksaUNBQWEsdUJBQUssaUJBQWlCLFFBQVEsQ0FBQztBQUFBLEVBQ25GO0FBRUEsTUFBSSxTQUFTLFFBQVc7QUFDdEIsVUFBTSxlQUFtQixzQ0FBa0IsS0FBSyxVQUFVLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixRQUFJLEdBQUcsWUFBWSxJQUFJLFNBQVMsRUFBRSxJQUFJLEdBQUcsUUFBUTtBQUFBO0FBQUEsRUFDbkQ7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtcG9wdWxhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCdWlsZHMgYSBjb21wbGV0ZSB7QGxpbmsgUG9wdWxhdGVGaWxlc1BhcmFtc30gbWFwIGZvciBhIHBsdWdpbidzIGluLXJlcG8gYGRlbW8tdmF1bHQvYCwgcmVhZHkgdG8gc2VlZCBpbnRvXG4gKiB0aGUgdGVtcCB2YXVsdCBiZWZvcmUgT2JzaWRpYW4gb3BlbnMgaXQuIENvbXBvc2VzIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gKHRoZSBub3RlIHRyZWUpIHdpdGggdGhlIHR3b1xuICogcGllY2VzIGl0IGRlbGliZXJhdGVseSBvbWl0czogc2VsZWN0ZWQgYC5vYnNpZGlhbi8qYCBjb25maWcgZmlsZXMsIGFuZCB0aGUgYnVpbHQgYmluYXJpZXMgKCsgYGRhdGEuanNvbmApXG4gKiBvZiBhbnkgZXh0cmEgY29tbXVuaXR5IHBsdWdpbnMgdGhlIGRlbW8gdmF1bHQgZGVwZW5kcyBvbiAoZS5nLiBDb2RlU2NyaXB0IFRvb2xraXQsIGBkZW1vLXZhdWx0LWhlbHBlcmApLlxuICpcbiAqIFBhaXJzIHdpdGggdGhlIGBlbmFibGVDb21tdW5pdHlQbHVnaW5zYCBvcHRpb24gb2YgdGhlIGdsb2JhbC1zZXR1cCBgY3JlYXRlU2V0dXBgOiB0aGlzIHNlZWRzIHRoZSBiaW5hcmllcyxcbiAqIHRoYXQgdHVybnMgdGhlbSBvbi4gSXQgaW50ZW50aW9uYWxseSBkb2VzIE5PVCB3cml0ZSBgY29tbXVuaXR5LXBsdWdpbnMuanNvbmAgXHUyMDE0IHRoZSBoYXJuZXNzIG93bnMgdGhhdCBmaWxlXG4gKiAoaXQgbGlzdHMgdGhlIHBsdWdpbi11bmRlci10ZXN0KSwgYW5kIGVuYWJsaW5nIHRoZSBleHRyYXMgcGVyc2lzdHMgdGhlbS5cbiAqXG4gKiBTdGF5cyAqKnN5bmNocm9ub3VzKiosIHNvIGFuIGluamVjdGVkIHBsdWdpbiB3aG9zZSBiaW5hcmllcyBhcmUgYWJzZW50IGlzIGEgdGhyb3cgcmF0aGVyIHRoYW4gYSBkb3dubG9hZC5cbiAqIGBkZW1vLXZhdWx0LWJvb3RzdHJhcC50c2Agb3ducyB0aGUgaGVhZGxlc3MgaW5zdGFsbCB0aGUgdGhyb3cncyBtZXNzYWdlIHBvaW50cyBhdCBcdTIwMTQgaW5jbHVkaW5nXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jYCwgdGhlIHNlbGYtaGVhbGluZyBzaWJsaW5nIG9mIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS4gVGhlXG4gKiBtaXNzaW5nLXBsdWdpbiBkZXRlY3Rpb24gKHtAbGluayByZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc30pIGxpdmVzIGhlcmUgYW5kIGlzIHNoYXJlZCB3aXRoIGl0LCBzbyB0aGVcbiAqIHR3byBwYXRocyBjYW5ub3QgZGlzYWdyZWUgYWJvdXQgd2hhdCBcIm5vdCBpbnN0YWxsZWRcIiBtZWFucy5cbiAqL1xuXG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHsgUG9wdWxhdGVGaWxlc1BhcmFtcyB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0LmNqcyc7XG5cbmltcG9ydCB7IFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LmNqcyc7XG5pbXBvcnQgeyByZWFkRGVtb1ZhdWx0VHJlZSB9IGZyb20gJy4vZGVtby12YXVsdC10cmVlLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLypcbiAqIEJvdGggdGhlIGZvbGRlciB0aGUgZGVtbyB2YXVsdCdzIG93biBjb21taXR0ZWQgY29uZmlnIHNpdHMgaW4gb24gZGlzaywgYW5kIHRoZSBkZXN0aW5hdGlvbiB0aGUgbWFwXG4gKiBuYW1lcyBmb3IgaXQuIFRoZSB0d28gY29pbmNpZGUgYnkgY29uc3RydWN0aW9uOiB0aGUgc291cmNlIGlzIGEgcmVwbyBmb2xkZXIgT2JzaWRpYW4gY3JlYXRlZCB1bmRlciBpdHNcbiAqIGRlZmF1bHQsIGFuZCBhIGBjb25maWdEaXJlY3RvcnlgIG92ZXJyaWRlIG9uIHRoZSBydW4gaXMgYXBwbGllZCB0byB0aGUgZGVzdGluYXRpb24ga2V5cyBsYXRlciwgYnlcbiAqIGByZW1hcENvbmZpZ0RpcmVjdG9yeUtleXNgIGluIGBnbG9iYWwtc2V0dXAtY29yZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBvdmVycmlkZSBpcyBhY3R1YWxseSBrbm93bi5cbiAqL1xuY29uc3QgT0JTSURJQU5fQ09ORklHX0RJUiA9IERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWTtcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgREFUQV9KU09OID0gJ2RhdGEuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuY29uc3QgREVGQVVMVF9PQlNJRElBTl9DT05GSUdfRklMRVMgPSBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVzIChvZiBmaWxlcyBvciBkaXJlY3RvcmllcywgbWF0Y2hlZCBhdCBhbnkgZGVwdGgpIHRvIHNraXAgd2hpbGUgcmVhZGluZyB0aGUgbm90ZSB0cmVlIFx1MjAxNCBmb3J3YXJkZWQgdG9cbiAgICoge0BsaW5rIHJlYWREZW1vVmF1bHRUcmVlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFsnLmdpdCcsICcub2JzaWRpYW4nXWBcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVkTmFtZXM/OiBJdGVyYWJsZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyB0byBzZWVkIGludG8gYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYCAoYmluYXJpZXMgKyBvcHRpb25hbCBgZGF0YS5qc29uYCkuIFR1cm5cbiAgICogdGhlbSBvbiB3aXRoIHRoZSBnbG9iYWwtc2V0dXAgYGNyZWF0ZVNldHVwKHsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lucyB9KWAgb3B0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5qZWN0UGx1Z2lucz86IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xuXG4gIC8qKlxuICAgKiBgLm9ic2lkaWFuLypgIGNvbmZpZyBmaWxlcyB0byBjYXJyeSBvdmVyIGZyb20gdGhlIGRlbW8gdmF1bHQuIHtAbGluayByZWFkRGVtb1ZhdWx0VHJlZX0gZXhjbHVkZXMgdGhlIHdob2xlXG4gICAqIGAub2JzaWRpYW5gIGRpcmVjdG9yeSwgc28gY29uZmlnIHRoZSB2YXVsdCByZWxpZXMgb24gKHByZXZpZXctbW9kZSBkZWZhdWx0LCBjb3JlIHBsdWdpbnMsIGFwcGVhcmFuY2UpIG11c3RcbiAgICogYmUgcmUtYWRkZWQgZXhwbGljaXRseS4gRmlsZXMgdGhhdCBkbyBub3QgZXhpc3QgYXJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ2FwcC5qc29uJywgJ2FwcGVhcmFuY2UuanNvbicsICdjb3JlLXBsdWdpbnMuanNvbiddYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5Db25maWdGaWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY29tbXVuaXR5IHBsdWdpbiB0byBzZWVkIGludG8gdGhlIGRlbW8gdmF1bHQgYWxvbmdzaWRlIHRoZSBub3RlIHRyZWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0UGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIE92ZXJsYXkgd3JpdHRlbiBhcyBgLm9ic2lkaWFuL3BsdWdpbnMvPHBsdWdpbklkPi9kYXRhLmpzb25gIChKU09OLCAyLXNwYWNlIGluZGVudCkuIE9taXQgdG8ga2VlcCB3aGF0ZXZlclxuICAgKiBgZGF0YS5qc29uYCAoaWYgYW55KSBhbHJlYWR5IGxpdmVzIGluIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbXVuaXR5IHBsdWdpbidzIGlkIChpdHMgYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD5gIGZvbGRlciBuYW1lKS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSAoYG93bmVyL25hbWVgKSBwdWJsaXNoaW5nIHRoaXMgcGx1Z2luLCBjb25zdWx0ZWQgKipvbmx5KiogYnkgdGhlIGhlYWRsZXNzXG4gICAqIGJvb3RzdHJhcCAoYGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNgIC8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AgLyB0aGVcbiAgICogYGJvb3RzdHJhcC1kZW1vLXZhdWx0YCBDTEkpIHdoZW4gdGhlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQuIFN1cHBseWluZyBpdCBza2lwc1xuICAgKiB0aGUgbG9va3VwIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgd2hpY2ggaXMgYWxzbyB0aGUgd2F5IHRvIGJvb3RzdHJhcCBhIHBsdWdpblxuICAgKiB0aGF0IGlzIG5vdCBsaXN0ZWQgdGhlcmUgYXQgYWxsLiBOZXZlciB1c2VkIHdoZW4gdGhlIGZpbGVzIGFyZSBhbHJlYWR5IG9uIGRpc2suXG4gICAqL1xuICByZWFkb25seSByZXBvPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgdG8gcmVhZCB0aGUgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgZnJvbS4gRXZlcnkgZmlsZSBkaXJlY3RseSBpbnNpZGUgaXQgaXMgY29waWVkIGludG9cbiAgICogYC5vYnNpZGlhbi9wbHVnaW5zLzxwbHVnaW5JZD4vYDsgYG1haW4uanNgIGFuZCBgbWFuaWZlc3QuanNvbmAgYXJlIHJlcXVpcmVkLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgYWxzbyBvcHRzIHRoZSBwbHVnaW4gKipvdXQqKiBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwOiBhbiBleHBsaWNpdCBzb3VyY2UgZGlyZWN0b3J5XG4gICAqIG5hbWVzIGEgbG9jYWwgYnVpbGQgb3V0cHV0LCBub3Qgc29tZXdoZXJlIHRvIGRvd25sb2FkIGEgcHVibGlzaGVkIHJlbGVhc2UgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgYDxkZW1vVmF1bHRQYXRoPi8ub2JzaWRpYW4vcGx1Z2lucy88cGx1Z2luSWQ+YFxuICAgKi9cblxuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWxlYXNlIHRhZyB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIGRvd25sb2FkcyBmcm9tLCBwaW5uaW5nIHRoZSBpbnN0YWxsZWQgdmVyc2lvbi4gT21pdCBmb3IgdGhlXG4gICAqIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSBcdTIwMTQgd2hhdCB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyIGluc3RhbGxzLiBMaWtlXG4gICAqIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30sIGNvbnN1bHRlZCBvbmx5IHdoaWxlIGJvb3RzdHJhcHBpbmcgbWlzc2luZyBiaW5hcmllcy5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBpbmplY3RlZCBwbHVnaW4gd2hvc2Ugc291cmNlIGRpcmVjdG9yeSB0byByZXNvbHZlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwbHVnaW4gcmVwbydzIGBkZW1vLXZhdWx0L2AgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVtb1ZhdWx0UGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgaW5qZWN0ZWQgcGx1Z2lucyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IGluamVjdFBsdWdpbnM6IHJlYWRvbmx5IEluamVjdFBsdWdpblBhcmFtc1tdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZnVsbCBwb3B1bGF0ZSBtYXAgZm9yIGEgcGx1Z2luJ3MgYGRlbW8tdmF1bHQvYDogdGhlIG5vdGUgdHJlZSwgdGhlIHNlbGVjdGVkIGAub2JzaWRpYW4vKmAgY29uZmlnXG4gKiBmaWxlcywgYW5kIGV2ZXJ5IGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzICgrIG9wdGlvbmFsIGBkYXRhLmpzb25gKS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwb3B1bGF0ZSBtYXAsIHJlYWR5IHRvIGhhbmQgdG8gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIG9yIHtAbGluayBUZW1wb3JhcnlWYXVsdC5wb3B1bGF0ZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyk6IFBvcHVsYXRlRmlsZXNQYXJhbXMge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMsIGluamVjdFBsdWdpbnMgPSBbXSwgb2JzaWRpYW5Db25maWdGaWxlcyA9IERFRkFVTFRfT0JTSURJQU5fQ09ORklHX0ZJTEVTIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgbWFwID0gcmVhZERlbW9WYXVsdFRyZWUoZXhjbHVkZWROYW1lcyA9PT0gdW5kZWZpbmVkID8geyBkZW1vVmF1bHRQYXRoIH0gOiB7IGRlbW9WYXVsdFBhdGgsIGV4Y2x1ZGVkTmFtZXMgfSk7XG5cbiAgZm9yIChjb25zdCBjb25maWdGaWxlIG9mIG9ic2lkaWFuQ29uZmlnRmlsZXMpIHtcbiAgICBjb25zdCBjb25maWdQYXRoID0gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBjb25maWdGaWxlKTtcbiAgICBpZiAoZXhpc3RzU3luYyhjb25maWdQYXRoKSkge1xuICAgICAgbWFwW2Ake09CU0lESUFOX0NPTkZJR19ESVJ9LyR7Y29uZmlnRmlsZX1gXSA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBpbmplY3RQbHVnaW5zKSB7XG4gICAgc2VlZFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4sIG1hcCk7XG4gIH1cblxuICByZXR1cm4gbWFwO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBkaXJlY3RvcnkgYW4gaW5qZWN0ZWQgcGx1Z2luJ3MgYnVpbHQgZmlsZXMgYXJlIHJlYWQgZnJvbS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBSZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnlQYXJhbXN9LlxuICogQHJldHVybnMgVGhlIGV4cGxpY2l0IHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMuc291cmNlRGlyZWN0b3J5fSB3aGVuIHNldCwgb3RoZXJ3aXNlIHRoZSBwbHVnaW4ncyBmb2xkZXJcbiAqICAgaW5zaWRlIHRoZSBkZW1vIHZhdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5KHBhcmFtczogUmVzb2x2ZUluamVjdGVkUGx1Z2luU291cmNlRGlyZWN0b3J5UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPz8gam9pbihkZW1vVmF1bHRQYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBQTFVHSU5TX0RJUiwgcGx1Z2luLnBsdWdpbklkKTtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBpbmplY3RlZCBwbHVnaW5zIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQgYW5kIGNhbiB0aGVyZWZvcmUgYmVcbiAqIGluc3RhbGxlZCBoZWFkbGVzc2x5IFx1MjAxNCB0aGUgZXhhY3Qgc2V0IHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlfSB3b3VsZCBvdGhlcndpc2UgdGhyb3cgb24uXG4gKlxuICogUGx1Z2lucyBjYXJyeWluZyBhbiBleHBsaWNpdCB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnNvdXJjZURpcmVjdG9yeX0gYXJlIGV4Y2x1ZGVkOiB0aGF0IG5hbWVzIGEgbG9jYWxcbiAqIGJ1aWxkIG91dHB1dCwgbm90IHNvbWV3aGVyZSB0byBkb3dubG9hZCBhIHB1Ymxpc2hlZCByZWxlYXNlIGludG8uXG4gKlxuICogU2hhcmVkIHdpdGggdGhlIGJvb3RzdHJhcCBzbyBcIm1pc3NpbmdcIiBoYXMgb25lIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdHdvIHRoYXQgY2FuIGRyaWZ0IGFwYXJ0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zfS5cbiAqIEByZXR1cm5zIFRoZSBwbHVnaW5zIHRvIGJvb3RzdHJhcCwgaW4gdGhlIG9yZGVyIGdpdmVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMocGFyYW1zOiBSZXNvbHZlTWlzc2luZ0luamVjdGVkUGx1Z2luc1BhcmFtcyk6IEluamVjdFBsdWdpblBhcmFtc1tdIHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIHJldHVybiBwYXJhbXMuaW5qZWN0UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4ge1xuICAgIGlmIChwbHVnaW4uc291cmNlRGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWVzID0gcmVhZFBsdWdpbkZpbGVOYW1lcyhyZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnkoeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSkpO1xuICAgIHJldHVybiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMuc29tZSgoYXNzZXROYW1lKSA9PiAhZmlsZU5hbWVzLmluY2x1ZGVzKGFzc2V0TmFtZSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFwiaG93IHRvIGZpeCB0aGlzXCIgaGFsZiBvZiB0aGUgbWlzc2luZy1iaW5hcmllcyBlcnJvci5cbiAqXG4gKiBUaGUgcmVtZWR5IGRpZmZlcnMgYnkgb3B0LW91dDogYSBwbHVnaW4gcmVhZCBmcm9tIHRoZSBkZW1vIHZhdWx0IGNhbiBiZSBpbnN0YWxsZWQgaGVhZGxlc3NseSwgd2hpbGUgb25lXG4gKiByZWFkIGZyb20gYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAgbmFtZXMgYSBsb2NhbCBidWlsZCBvdXRwdXQgdGhlIGJvb3RzdHJhcCBtdXN0IG5ldmVyIG92ZXJ3cml0ZS5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIG5hbWVkIGluIHRoZSBDTEkgaGludCBzbyB0aGUgY29tbWFuZCBpcyBjb3B5LXBhc3RlYWJsZS5cbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHdob3NlIGJpbmFyaWVzIGFyZSBtaXNzaW5nLlxuICogQHJldHVybnMgVGhlIHJlbWVkeSBzZW50ZW5jZShzKS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNaXNzaW5nUGx1Z2luUmVtZWR5KGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBzdHJpbmcge1xuICBpZiAocGx1Z2luLnNvdXJjZURpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdJdCB3YXMgcmVhZCBmcm9tIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLCB3aGljaCBvcHRzIGl0IG91dCBvZiB0aGUgaGVhZGxlc3MgYm9vdHN0cmFwIFx1MjAxNCAnXG4gICAgICArICdidWlsZCBpdCBpbnRvIHRoYXQgZGlyZWN0b3J5LCBvciBkcm9wIGBzb3VyY2VEaXJlY3RvcnlgIHRvIGluc3RhbGwgaXQgZnJvbSBpdHMgcHVibGlzaGVkIHJlbGVhc2UuJztcbiAgfVxuXG4gIHJldHVybiBgSW5zdGFsbCBpdCBoZWFkbGVzc2x5IHdpdGggXFxgbnB4IG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcgYm9vdHN0cmFwLWRlbW8tdmF1bHQgLS1kZW1vLXZhdWx0IFwiJHtkZW1vVmF1bHRQYXRofVwiXFxgLCBgXG4gICAgKyAnb3Igc3dpdGNoIHRoaXMgc2V0dXAgdG8gYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY2AsIHdoaWNoIGluc3RhbGxzIG1pc3NpbmcgcGx1Z2lucyBpdHNlbGYuICdcbiAgICArICdPcGVuaW5nIGRlbW8tdmF1bHQvIGluIE9ic2lkaWFuIG9uY2Ugc28gZGVtby12YXVsdC1oZWxwZXIgaW5zdGFsbHMgaXQgYWxzbyB3b3Jrcy4nO1xufVxuXG4vKipcbiAqIExpc3RzIHRoZSBmaWxlIG5hbWVzIGRpcmVjdGx5IGluc2lkZSBhIHBsdWdpbidzIHNvdXJjZSBkaXJlY3RvcnkuXG4gKlxuICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSAtIFRoZSBkaXJlY3RvcnkgdG8gbGlzdC5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIG5hbWVzLCBvciBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBleGlzdHNTeW5jKHNvdXJjZURpcmVjdG9yeSlcbiAgICA/IHJlYWRkaXJTeW5jKHNvdXJjZURpcmVjdG9yeSwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lKVxuICAgIDogW107XG59XG5cbi8qKlxuICogU2VlZHMgb25lIGluamVjdGVkIHBsdWdpbidzIGJpbmFyaWVzIChhbmQgb3B0aW9uYWwgYGRhdGEuanNvbmApIGludG8gdGhlIHBvcHVsYXRlIG1hcC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QsIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVmYXVsdCBzb3VyY2UgZGlyZWN0b3J5LlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gc2VlZC5cbiAqIEBwYXJhbSBtYXAgLSBUaGUgcG9wdWxhdGUgbWFwIHRvIHdyaXRlIGludG8uXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwbHVnaW4ncyBgbWFpbi5qc2AgLyBgbWFuaWZlc3QuanNvbmAgYXJlIG5vdCBvbiBkaXNrLCBuYW1pbmcgdGhlIGhlYWRsZXNzIHJlbWVkaWVzLlxuICovXG5mdW5jdGlvbiBzZWVkUGx1Z2luKGRlbW9WYXVsdFBhdGg6IHN0cmluZywgcGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMsIG1hcDogUG9wdWxhdGVGaWxlc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGRhdGEsIHBsdWdpbklkIH0gPSBwbHVnaW47XG4gIGNvbnN0IHNvdXJjZURpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcbiAgY29uc3QgcGx1Z2luUHJlZml4ID0gYCR7T0JTSURJQU5fQ09ORklHX0RJUn0vJHtQTFVHSU5TX0RJUn0vJHtwbHVnaW5JZH1gO1xuXG4gIGNvbnN0IGZpbGVOYW1lcyA9IHJlYWRQbHVnaW5GaWxlTmFtZXMoc291cmNlRGlyZWN0b3J5KTtcblxuICBmb3IgKGNvbnN0IHJlcXVpcmVkRmlsZSBvZiBSRVFVSVJFRF9QTFVHSU5fQVNTRVRfTkFNRVMpIHtcbiAgICBpZiAoIWZpbGVOYW1lcy5pbmNsdWRlcyhyZXF1aXJlZEZpbGUpKSB7XG4gICAgICBjb25zdCByZW1lZHkgPSBidWlsZE1pc3NpbmdQbHVnaW5SZW1lZHkoZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbW11bml0eSBwbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIG5vdCBpbnN0YWxsZWQgaW4gdGhlIGRlbW8gdmF1bHQgKCR7am9pbihzb3VyY2VEaXJlY3RvcnksIHJlcXVpcmVkRmlsZSl9IG1pc3NpbmcpLiAke3JlbWVkeX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZU5hbWUgb2YgZmlsZU5hbWVzKSB7XG4gICAgLy8gYGRhdGEuanNvbmAgaXMgcmVnZW5lcmF0ZWQgZnJvbSBgZGF0YWAgYmVsb3cgKHdoZW4gcHJvdmlkZWQpOyBza2lwIHRoZSBvbi1kaXNrIGNvcHkgdG8gYXZvaWQgc2VlZGluZyBpdCB0d2ljZS5cbiAgICBpZiAoZmlsZU5hbWUgPT09IERBVEFfSlNPTiAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXBbYCR7cGx1Z2luUHJlZml4fS8ke2ZpbGVOYW1lfWBdID0gcmVhZEZpbGVTeW5jKGpvaW4oc291cmNlRGlyZWN0b3J5LCBmaWxlTmFtZSkpO1xuICB9XG5cbiAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGRhdGFKc29uOiBzdHJpbmcgPSBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gICAgbWFwW2Ake3BsdWdpblByZWZpeH0vJHtEQVRBX0pTT059YF0gPSBgJHtkYXRhSnNvbn1cXG5gO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxxQkFJTztBQUNQLHVCQUFxQjtBQUlyQix1Q0FBNEM7QUFDNUMsOEJBQXlDO0FBQ3pDLDZCQUFrQztBQUNsQyx5QkFBa0M7QUFRbEMsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxjQUFjO0FBQ3BCLE1BQU0s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
|