obsidian-integration-testing 1.2.0 → 1.2.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/README.md +10 -7
- package/dist/lib/cjs/integration-global-setup.cjs +11 -2
- package/dist/lib/cjs/transport-appium.cjs +11 -1
- package/dist/lib/cjs/transport-desktop-cdp.cjs +10 -2
- package/dist/lib/cjs/transport-desktop-cli.cjs +12 -3
- package/dist/lib/cjs/transport-factory.cjs +50 -1
- package/dist/lib/esm/integration-global-setup.mjs +11 -2
- package/dist/lib/esm/transport-appium.mjs +11 -1
- package/dist/lib/esm/transport-desktop-cdp.mjs +10 -2
- package/dist/lib/esm/transport-desktop-cli.mjs +12 -3
- package/dist/lib/esm/transport-factory.mjs +40 -1
- package/dist/obsidian-integration-testing-1.2.1.tgz +0 -0
- package/package.json +2 -1
- package/patches/@wdio+protocols+9.27.0.patch +12 -0
- package/patches/@wdio+types+9.27.0.patch +13 -0
- package/patches/urlpattern-polyfill+10.1.0.patch +13 -0
- package/dist/obsidian-integration-testing-1.2.0.tgz +0 -0
package/README.md
CHANGED
|
@@ -467,7 +467,7 @@ export default defineConfig({
|
|
|
467
467
|
projects: [
|
|
468
468
|
{
|
|
469
469
|
test: {
|
|
470
|
-
name: 'integration-tests
|
|
470
|
+
name: 'integration-tests:desktop-cli',
|
|
471
471
|
fileParallelism: false,
|
|
472
472
|
globalSetup: ['obsidian-integration-testing/obsidian-plugin-vitest-setup'],
|
|
473
473
|
include: ['src/**/*.integration.test.ts'],
|
|
@@ -480,7 +480,7 @@ export default defineConfig({
|
|
|
480
480
|
},
|
|
481
481
|
{
|
|
482
482
|
test: {
|
|
483
|
-
name: 'integration-tests
|
|
483
|
+
name: 'integration-tests:desktop-cdp',
|
|
484
484
|
fileParallelism: false,
|
|
485
485
|
globalSetup: ['obsidian-integration-testing/obsidian-plugin-vitest-setup'],
|
|
486
486
|
include: ['src/**/*.integration.test.ts'],
|
|
@@ -492,7 +492,7 @@ export default defineConfig({
|
|
|
492
492
|
},
|
|
493
493
|
{
|
|
494
494
|
test: {
|
|
495
|
-
name: 'integration-tests
|
|
495
|
+
name: 'integration-tests:android-appium',
|
|
496
496
|
fileParallelism: false,
|
|
497
497
|
globalSetup: ['obsidian-integration-testing/obsidian-plugin-vitest-setup'],
|
|
498
498
|
include: ['src/**/*.android.integration.test.ts'],
|
|
@@ -513,17 +513,20 @@ export default defineConfig({
|
|
|
513
513
|
Run specific platforms:
|
|
514
514
|
|
|
515
515
|
```bash
|
|
516
|
-
# All
|
|
516
|
+
# All tests
|
|
517
517
|
npx vitest run
|
|
518
518
|
|
|
519
519
|
# Desktop CLI only
|
|
520
|
-
npx vitest run --project integration-tests
|
|
520
|
+
npx vitest run --project integration-tests:desktop-cli
|
|
521
521
|
|
|
522
522
|
# Desktop CDP only
|
|
523
|
-
npx vitest run --project integration-tests
|
|
523
|
+
npx vitest run --project integration-tests:desktop-cdp
|
|
524
524
|
|
|
525
525
|
# Android only (requires Appium + emulator running)
|
|
526
|
-
npx vitest run --project integration-tests
|
|
526
|
+
npx vitest run --project integration-tests:android-appium
|
|
527
|
+
|
|
528
|
+
# All platforms
|
|
529
|
+
npx vitest run --project integration-tests:*
|
|
527
530
|
```
|
|
528
531
|
|
|
529
532
|
## Support
|
|
@@ -45,8 +45,11 @@ let tempVault;
|
|
|
45
45
|
let transport;
|
|
46
46
|
async function setup(project) {
|
|
47
47
|
const transportOptions = project.config.environmentOptions["obsidianTransport"];
|
|
48
|
+
console.warn("[integration-setup] Creating transport...");
|
|
48
49
|
transport = await (0, import_transport_factory.createTransportFromOptions)(transportOptions);
|
|
50
|
+
console.warn(`[integration-setup] Transport created: ${transport.constructor.name}`);
|
|
49
51
|
const projectRoot = findProjectRoot();
|
|
52
|
+
console.warn(`[integration-setup] Project root: ${projectRoot}`);
|
|
50
53
|
const distPath = await resolveDistPath(projectRoot);
|
|
51
54
|
const manifestJson = JSON.parse(await (0, import_promises.readFile)((0, import_node_path.join)(distPath, "manifest.json"), "utf-8"));
|
|
52
55
|
const pluginId = manifestJson.id;
|
|
@@ -57,14 +60,19 @@ async function setup(project) {
|
|
|
57
60
|
}
|
|
58
61
|
const mainJs = (0, import_node_path.join)(distPath, MAIN_JS);
|
|
59
62
|
const buildStat = await (0, import_promises.stat)(mainJs);
|
|
60
|
-
console.warn(`Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
|
|
63
|
+
console.warn(`[integration-setup] Using ${distPath} (${buildStat.mtime.toISOString()}). If outdated, rebuild.`);
|
|
61
64
|
tempVault = new import_temp_vault.TempVault();
|
|
65
|
+
console.warn(`[integration-setup] Created temp vault: ${tempVault.path}`);
|
|
62
66
|
const pluginDir = (0, import_node_path.join)(tempVault.path, OBSIDIAN_CONFIG_DIR, PLUGINS_DIR, pluginId);
|
|
63
67
|
await (0, import_promises.mkdir)(pluginDir, { recursive: true });
|
|
64
68
|
await (0, import_promises.cp)(distPath, pluginDir, { recursive: true });
|
|
65
69
|
await (0, import_promises.writeFile)((0, import_node_path.join)(tempVault.path, OBSIDIAN_CONFIG_DIR, COMMUNITY_PLUGINS_JSON), JSON.stringify([pluginId]));
|
|
70
|
+
console.warn("[integration-setup] Syncing vault to device...");
|
|
66
71
|
await tempVault.syncToDevice();
|
|
72
|
+
console.warn("[integration-setup] Registering vault...");
|
|
67
73
|
await tempVault.register();
|
|
74
|
+
console.warn("[integration-setup] Vault registered.");
|
|
75
|
+
console.warn(`[integration-setup] Enabling plugin "${pluginId}"...`);
|
|
68
76
|
const { errorMessage } = await (0, import_obsidian_cli.evalInObsidian)({
|
|
69
77
|
args: { pluginId },
|
|
70
78
|
fn: import_enable_plugin.enablePluginWithErrorCapture,
|
|
@@ -74,6 +82,7 @@ async function setup(project) {
|
|
|
74
82
|
if (errorMessage) {
|
|
75
83
|
throw new Error(`Plugin "${pluginId}" failed to load: ${errorMessage}`);
|
|
76
84
|
}
|
|
85
|
+
console.warn(`[integration-setup] Plugin "${pluginId}" enabled successfully.`);
|
|
77
86
|
project.provide("obsidianTransport", transportOptions);
|
|
78
87
|
project.provide("tempVaultPath", tempVault.path);
|
|
79
88
|
}
|
|
@@ -118,4 +127,4 @@ async function resolveDistPath(projectRoot) {
|
|
|
118
127
|
setup,
|
|
119
128
|
teardown
|
|
120
129
|
});
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uLWdsb2JhbC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHRoZSBnbG9iYWwgc2V0dXAgYW5kIHRlYXJkb3duIGZ1bmN0aW9ucyBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgc2V0dXAgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTWFuaWZlc3QgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ3ZpdGVzdCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5cbmltcG9ydCB7IGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUgfSBmcm9tICcuL2VuYWJsZS1wbHVnaW4uY2pzJztcbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGVtcG9yYXJ5IHZhdWx0IHByb3ZpZGVkIGJ5IHRoZSBnbG9iYWwgc2V0dXAuXG4gKlxuICogQHJldHVybnMgVGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBWYXVsdCgpOiBUZW1wVmF1bHQge1xuICBjb25zdCB0ZW1wVmF1bHRQYXRoID0gaW5qZWN0KCd0ZW1wVmF1bHRQYXRoJyk7XG4gIHJldHVybiBuZXcgVGVtcFZhdWx0KHRlbXBWYXVsdFBhdGgpO1xufVxuXG5jb25zdCBESVNUX0RFViA9ICdkaXN0L2Rldic7XG5jb25zdCBESVNUX0JVSUxEID0gJ2Rpc3QvYnVpbGQnO1xuY29uc3QgTUFJTl9KUyA9ICdtYWluLmpzJztcbmNvbnN0IE9CU0lESUFOX0NPTkZJR19ESVIgPSAnLm9ic2lkaWFuJztcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiA9ICdjb21tdW5pdHktcGx1Z2lucy5qc29uJztcblxubGV0IHRlbXBWYXVsdDogVGVtcFZhdWx0O1xubGV0IHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBwcm9qZWN0LmNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnNbJ29ic2lkaWFuVHJhbnNwb3J0J10gYXMgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuICB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyh0cmFuc3BvcnRPcHRpb25zKTtcblxuICBjb25zdCBwcm9qZWN0Um9vdCA9IGZpbmRQcm9qZWN0Um9vdCgpO1xuICBjb25zdCBkaXN0UGF0aCA9IGF3YWl0IHJlc29sdmVEaXN0UGF0aChwcm9qZWN0Um9vdCk7XG4gIGNvbnN0IG1hbmlmZXN0SnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoam9pbihkaXN0UGF0aCwgJ21hbmlmZXN0Lmpzb24nKSwgJ3V0Zi04JykpIGFzIFBsdWdpbk1hbmlmZXN0O1xuICBjb25zdCBwbHVnaW5JZCA9IG1hbmlmZXN0SnNvbi5pZDtcblxuICBpZiAodHJhbnNwb3J0LmlzTW9iaWxlICYmIG1hbmlmZXN0SnNvbi5pc0Rlc2t0b3BPbmx5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgaGFzIGlzRGVza3RvcE9ubHk6IHRydWUgaW4gbWFuaWZlc3QuanNvbi4gTW9iaWxlIGludGVncmF0aW9uIHRlc3RzIGNhbm5vdCBydW4gZm9yIGRlc2t0b3Atb25seSBwbHVnaW5zLmBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWFpbkpzID0gam9pbihkaXN0UGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGJ1aWxkU3RhdCA9IGF3YWl0IHN0YXQobWFpbkpzKTtcblxuICBjb25zb2xlLndhcm4oYFVzaW5nICR7ZGlzdFBhdGh9ICgke2J1aWxkU3RhdC5tdGltZS50b0lTT1N0cmluZygpfSkuIElmIG91dGRhdGVkLCByZWJ1aWxkLmApO1xuXG4gIHRlbXBWYXVsdCA9IG5ldyBUZW1wVmF1bHQoKTtcbiAgY29uc3QgcGx1Z2luRGlyID0gam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgUExVR0lOU19ESVIsIHBsdWdpbklkKTtcbiAgYXdhaXQgbWtkaXIocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY3AoZGlzdFBhdGgsIHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKHRlbXBWYXVsdC5wYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBDT01NVU5JVFlfUExVR0lOU19KU09OKSwgSlNPTi5zdHJpbmdpZnkoW3BsdWdpbklkXSkpO1xuICBhd2FpdCB0ZW1wVmF1bHQuc3luY1RvRGV2aWNlKCk7XG4gIGF3YWl0IHRlbXBWYXVsdC5yZWdpc3RlcigpO1xuXG4gIC8vIEVuYWJsZSB0aGUgcGx1Z2luIGFuZCB2ZXJpZnkgaXQgbG9hZGVkLiBPYnNpZGlhbidzIGVuYWJsZVBsdWdpbigpIHdyYXBzXG4gIC8vIExvYWRQbHVnaW4oKSBpbiBhIHRyeS1jYXRjaCB0aGF0IHN3YWxsb3dzIGVycm9ycyBhbmQgcmV0dXJucyBmYWxzZS5cbiAgLy8gV2UgbW9ua2V5LXBhdGNoIGxvYWRQbHVnaW4oKSB0byBjYXB0dXJlIHRoZSBlcnJvciBiZWZvcmUgaXQncyBzd2FsbG93ZWQuXG4gIGNvbnN0IHsgZXJyb3JNZXNzYWdlIH0gPSBhd2FpdCBldmFsSW5PYnNpZGlhbih7XG4gICAgYXJnczogeyBwbHVnaW5JZCB9LFxuICAgIGZuOiBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlLFxuICAgIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M6IHRydWUsXG4gICAgdmF1bHRQYXRoOiB0ZW1wVmF1bHQucGF0aFxuICB9KTtcblxuICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGZhaWxlZCB0byBsb2FkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgfVxuXG4gIHByb2plY3QucHJvdmlkZSgnb2JzaWRpYW5UcmFuc3BvcnQnLCB0cmFuc3BvcnRPcHRpb25zKTtcbiAgcHJvamVjdC5wcm92aWRlKCd0ZW1wVmF1bHRQYXRoJywgdGVtcFZhdWx0LnBhdGgpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHRlbXBWYXVsdC5kaXNwb3NlKCk7XG4gIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcHJvamVjdCByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSBgcHJvY2Vzcy5jd2QoKWAgbG9va2luZyBmb3IgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZnVuY3Rpb24gZmluZFByb2plY3RSb290KCk6IHN0cmluZyB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIExvb3AgdGVybWluYXRlcyBhdCBmaWxlc3lzdGVtIHJvb3QuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihkaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGpvaW4oZGlyLCAnLi4nKTtcbiAgICBpZiAocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcHJvamVjdCByb290IChubyBwYWNrYWdlLmpzb24gZm91bmQpLicpO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZGlzdCBwYXRoIHRvIHVzZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogUGlja3Mgd2hpY2hldmVyIG9mIGBkaXN0L2RldmAgYW5kIGBkaXN0L2J1aWxkYCBoYXMgYSBuZXdlciBgbWFpbi5qc2AuXG4gKiBJZiBvbmx5IG9uZSBleGlzdHMsIHRoYXQgb25lIGlzIHVzZWQuIFRocm93cyBpZiBuZWl0aGVyIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdFJvb3QgLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNob3NlbiBkaXN0IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZXZQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9ERVYpO1xuICBjb25zdCBidWlsZFBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0JVSUxEKTtcbiAgY29uc3QgZGV2TWFpbkpzID0gam9pbihkZXZQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgYnVpbGRNYWluSnMgPSBqb2luKGJ1aWxkUGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGRldlN0YXQgPSBleGlzdHNTeW5jKGRldk1haW5KcykgPyBhd2FpdCBzdGF0KGRldk1haW5KcykgOiBudWxsO1xuICBjb25zdCBidWlsZFN0YXQgPSBleGlzdHNTeW5jKGJ1aWxkTWFpbkpzKSA/IGF3YWl0IHN0YXQoYnVpbGRNYWluSnMpIDogbnVsbDtcblxuICBpZiAoZGV2U3RhdCAmJiBidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gZGV2U3RhdC5tdGltZSA+IGJ1aWxkU3RhdC5tdGltZSA/IGRldlBhdGggOiBidWlsZFBhdGg7XG4gIH1cblxuICBpZiAoZGV2U3RhdCkge1xuICAgIHJldHVybiBkZXZQYXRoO1xuICB9XG5cbiAgaWYgKGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBidWlsZFBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJ1aWxkIGZvdW5kLiBSdW4gYG5wbSBydW4gYnVpbGRgIG9yIGBucG0gcnVuIGRldmAgZmlyc3QuJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFCQUEyQjtBQUMzQixzQkFNTztBQUNQLHVCQUFxQjtBQUNyQixvQkFBdUI7QUFLdkIsMkJBQTZDO0FBQzdDLDBCQUErQjtBQUMvQix3QkFBMEI7QUFDMUIsK0JBQTJDO0FBT3BDLFNBQVMsZUFBMEI7QUFDeEMsUUFBTSxvQkFBZ0Isc0JBQU8sZUFBZTtBQUM1QyxTQUFPLElBQUksNEJBQVUsYUFBYTtBQUNwQztBQUVBLE1BQU0sV0FBVztBQUNqQixNQUFNLGFBQWE7QUFDbkIsTUFBTSxVQUFVO0FBQ2hCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sY0FBYztBQUNwQixNQUFNLHlCQUF5QjtBQUUvQixJQUFJO0FBQ0osSUFBSTtBQVVKLGVBQXNCLE1BQU0sU0FBcUM7QUFDL0QsUUFBTSxtQkFBbUIsUUFBUSxPQUFPLG1CQUFtQixtQkFBbUI7QUFDOUUsY0FBWSxVQUFNLHFEQUEyQixnQkFBZ0I7QUFFN0QsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLFdBQVcsTUFBTSxnQkFBZ0IsV0FBVztBQUNsRCxRQUFNLGVBQWUsS0FBSyxNQUFNLFVBQU0sOEJBQVMsdUJBQUssVUFBVSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3hGLFFBQU0sV0FBVyxhQUFhO0FBRTlCLE1BQUksVUFBVSxZQUFZLGFBQWEsZUFBZTtBQUNwRCxVQUFNLElBQUk7QUFBQSxNQUNSLFdBQVcsUUFBUTtBQUFBLElBQ3JCO0FBQUEsRUFDRjtBQUVBLFFBQU0sYUFBUyx1QkFBSyxVQUFVLE9BQU87QUFDckMsUUFBTSxZQUFZLFVBQU0sc0JBQUssTUFBTTtBQUVuQyxVQUFRLEtBQUssU0FBUyxRQUFRLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQywwQkFBMEI7QUFFMUYsY0FBWSxJQUFJLDRCQUFVO0FBQzFCLFFBQU0sZ0JBQVksdUJBQUssVUFBVSxNQUFNLHFCQUFxQixhQUFhLFFBQVE7QUFDakYsWUFBTSx1QkFBTSxXQUFXLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDMUMsWUFBTSxvQkFBRyxVQUFVLFdBQVcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxZQUFNLCtCQUFVLHVCQUFLLFVBQVUsTUFBTSxxQkFBcUIsc0JBQXNCLEdBQUcsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0csUUFBTSxVQUFVLGFBQWE7QUFDN0IsUUFBTSxVQUFVLFNBQVM7QUFLekIsUUFBTSxFQUFFLGFBQWEsSUFBSSxVQUFNLG9DQUFlO0FBQUEsSUFDNUMsTUFBTSxFQUFFLFNBQVM7QUFBQSxJQUNqQixJQUFJO0FBQUEsSUFDSiwyQkFBMkI7QUFBQSxJQUMzQixXQUFXLFVBQVU7QUFBQSxFQUN2QixDQUFDO0FBRUQsTUFBSSxjQUFjO0FBQ2hCLFVBQU0sSUFBSSxNQUFNLFdBQVcsUUFBUSxxQkFBcUIsWUFBWSxFQUFFO0FBQUEsRUFDeEU7QUFFQSxVQUFRLFFBQVEscUJBQXFCLGdCQUFnQjtBQUNyRCxVQUFRLFFBQVEsaUJBQWlCLFVBQVUsSUFBSTtBQUNqRDtBQU9BLGVBQXNCLFdBQTBCO0FBQzlDLFFBQU0sVUFBVSxRQUFRO0FBQ3hCLFFBQU0sVUFBVSxVQUFVO0FBQzVCO0FBT0EsU0FBUyxrQkFBMEI7QUFDakMsTUFBSSxNQUFNLFFBQVEsSUFBSTtBQUd0QixTQUFPLE1BQU07QUFDWCxZQUFJLCtCQUFXLHVCQUFLLEtBQUssY0FBYyxDQUFDLEdBQUc7QUFDekMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGFBQVMsdUJBQUssS0FBSyxJQUFJO0FBQzdCLFFBQUksV0FBVyxLQUFLO0FBQ2xCLFlBQU0sSUFBSSxNQUFNLHNEQUFzRDtBQUFBLElBQ3hFO0FBQ0EsVUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVdBLGVBQWUsZ0JBQWdCLGFBQXNDO0FBQ25FLFFBQU0sY0FBVSx1QkFBSyxhQUFhLFFBQVE7QUFDMUMsUUFBTSxnQkFBWSx1QkFBSyxhQUFhLFVBQVU7QUFDOUMsUUFBTSxnQkFBWSx1QkFBSyxTQUFTLE9BQU87QUFDdkMsUUFBTSxrQkFBYyx1QkFBSyxXQUFXLE9BQU87QUFDM0MsUUFBTSxjQUFVLDJCQUFXLFNBQVMsSUFBSSxVQUFNLHNCQUFLLFNBQVMsSUFBSTtBQUNoRSxRQUFNLGdCQUFZLDJCQUFXLFdBQVcsSUFBSSxVQUFNLHNCQUFLLFdBQVcsSUFBSTtBQUV0RSxNQUFJLFdBQVcsV0FBVztBQUN4QixXQUFPLFFBQVEsUUFBUSxVQUFVLFFBQVEsVUFBVTtBQUFBLEVBQ3JEO0FBRUEsTUFBSSxTQUFTO0FBQ1gsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFdBQVc7QUFDYixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sSUFBSSxNQUFNLDZEQUE2RDtBQUMvRTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uLWdsb2JhbC1zZXR1cC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHRoZSBnbG9iYWwgc2V0dXAgYW5kIHRlYXJkb3duIGZ1bmN0aW9ucyBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgc2V0dXAgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luTWFuaWZlc3QgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRlc3RQcm9qZWN0IH0gZnJvbSAndml0ZXN0L25vZGUnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQge1xuICBjcCxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBzdGF0LFxuICB3cml0ZUZpbGVcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ3ZpdGVzdCc7XG5cbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhblRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5cbmltcG9ydCB7IGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUgfSBmcm9tICcuL2VuYWJsZS1wbHVnaW4uY2pzJztcbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9vYnNpZGlhbi1jbGkuY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdGVtcG9yYXJ5IHZhdWx0IHByb3ZpZGVkIGJ5IHRoZSBnbG9iYWwgc2V0dXAuXG4gKlxuICogQHJldHVybnMgVGhlIHRlbXBvcmFyeSB2YXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBWYXVsdCgpOiBUZW1wVmF1bHQge1xuICBjb25zdCB0ZW1wVmF1bHRQYXRoID0gaW5qZWN0KCd0ZW1wVmF1bHRQYXRoJyk7XG4gIHJldHVybiBuZXcgVGVtcFZhdWx0KHRlbXBWYXVsdFBhdGgpO1xufVxuXG5jb25zdCBESVNUX0RFViA9ICdkaXN0L2Rldic7XG5jb25zdCBESVNUX0JVSUxEID0gJ2Rpc3QvYnVpbGQnO1xuY29uc3QgTUFJTl9KUyA9ICdtYWluLmpzJztcbmNvbnN0IE9CU0lESUFOX0NPTkZJR19ESVIgPSAnLm9ic2lkaWFuJztcbmNvbnN0IFBMVUdJTlNfRElSID0gJ3BsdWdpbnMnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfSlNPTiA9ICdjb21tdW5pdHktcGx1Z2lucy5qc29uJztcblxubGV0IHRlbXBWYXVsdDogVGVtcFZhdWx0O1xubGV0IHRyYW5zcG9ydDogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbi8qKlxuICogVml0ZXN0IGdsb2JhbCBzZXR1cCBmdW5jdGlvbi5cbiAqXG4gKiBDb3BpZXMgdGhlIGJ1aWx0IHBsdWdpbiBpbnRvIGEgdGVtcG9yYXJ5IHZhdWx0LCBlbmFibGVzIGl0IHZpYSB0aGUgT2JzaWRpYW4gQ0xJLFxuICogYW5kIHByb3ZpZGVzIGB0ZW1wVmF1bHRQYXRoYCB0byB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdCAtIFRoZSBWaXRlc3QgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwKHByb2plY3Q6IFRlc3RQcm9qZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBwcm9qZWN0LmNvbmZpZy5lbnZpcm9ubWVudE9wdGlvbnNbJ29ic2lkaWFuVHJhbnNwb3J0J10gYXMgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBjb25zb2xlLndhcm4oJ1tpbnRlZ3JhdGlvbi1zZXR1cF0gQ3JlYXRpbmcgdHJhbnNwb3J0Li4uJyk7XG4gIHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zb2xlLndhcm4oYFtpbnRlZ3JhdGlvbi1zZXR1cF0gVHJhbnNwb3J0IGNyZWF0ZWQ6ICR7dHJhbnNwb3J0LmNvbnN0cnVjdG9yLm5hbWV9YCk7XG5cbiAgY29uc3QgcHJvamVjdFJvb3QgPSBmaW5kUHJvamVjdFJvb3QoKTtcbiAgY29uc29sZS53YXJuKGBbaW50ZWdyYXRpb24tc2V0dXBdIFByb2plY3Qgcm9vdDogJHtwcm9qZWN0Um9vdH1gKTtcbiAgY29uc3QgZGlzdFBhdGggPSBhd2FpdCByZXNvbHZlRGlzdFBhdGgocHJvamVjdFJvb3QpO1xuICBjb25zdCBtYW5pZmVzdEpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlzdFBhdGgsICdtYW5pZmVzdC5qc29uJyksICd1dGYtOCcpKSBhcyBQbHVnaW5NYW5pZmVzdDtcbiAgY29uc3QgcGx1Z2luSWQgPSBtYW5pZmVzdEpzb24uaWQ7XG5cbiAgaWYgKHRyYW5zcG9ydC5pc01vYmlsZSAmJiBtYW5pZmVzdEpzb24uaXNEZXNrdG9wT25seSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBpc0Rlc2t0b3BPbmx5OiB0cnVlIGluIG1hbmlmZXN0Lmpzb24uIE1vYmlsZSBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW5ub3QgcnVuIGZvciBkZXNrdG9wLW9ubHkgcGx1Z2lucy5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1haW5KcyA9IGpvaW4oZGlzdFBhdGgsIE1BSU5fSlMpO1xuICBjb25zdCBidWlsZFN0YXQgPSBhd2FpdCBzdGF0KG1haW5Kcyk7XG5cbiAgY29uc29sZS53YXJuKGBbaW50ZWdyYXRpb24tc2V0dXBdIFVzaW5nICR7ZGlzdFBhdGh9ICgke2J1aWxkU3RhdC5tdGltZS50b0lTT1N0cmluZygpfSkuIElmIG91dGRhdGVkLCByZWJ1aWxkLmApO1xuXG4gIHRlbXBWYXVsdCA9IG5ldyBUZW1wVmF1bHQoKTtcbiAgY29uc29sZS53YXJuKGBbaW50ZWdyYXRpb24tc2V0dXBdIENyZWF0ZWQgdGVtcCB2YXVsdDogJHt0ZW1wVmF1bHQucGF0aH1gKTtcbiAgY29uc3QgcGx1Z2luRGlyID0gam9pbih0ZW1wVmF1bHQucGF0aCwgT0JTSURJQU5fQ09ORklHX0RJUiwgUExVR0lOU19ESVIsIHBsdWdpbklkKTtcbiAgYXdhaXQgbWtkaXIocGx1Z2luRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY3AoZGlzdFBhdGgsIHBsdWdpbkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKHRlbXBWYXVsdC5wYXRoLCBPQlNJRElBTl9DT05GSUdfRElSLCBDT01NVU5JVFlfUExVR0lOU19KU09OKSwgSlNPTi5zdHJpbmdpZnkoW3BsdWdpbklkXSkpO1xuXG4gIGNvbnNvbGUud2FybignW2ludGVncmF0aW9uLXNldHVwXSBTeW5jaW5nIHZhdWx0IHRvIGRldmljZS4uLicpO1xuICBhd2FpdCB0ZW1wVmF1bHQuc3luY1RvRGV2aWNlKCk7XG4gIGNvbnNvbGUud2FybignW2ludGVncmF0aW9uLXNldHVwXSBSZWdpc3RlcmluZyB2YXVsdC4uLicpO1xuICBhd2FpdCB0ZW1wVmF1bHQucmVnaXN0ZXIoKTtcbiAgY29uc29sZS53YXJuKCdbaW50ZWdyYXRpb24tc2V0dXBdIFZhdWx0IHJlZ2lzdGVyZWQuJyk7XG5cbiAgLy8gRW5hYmxlIHRoZSBwbHVnaW4gYW5kIHZlcmlmeSBpdCBsb2FkZWQuIE9ic2lkaWFuJ3MgZW5hYmxlUGx1Z2luKCkgd3JhcHNcbiAgLy8gTG9hZFBsdWdpbigpIGluIGEgdHJ5LWNhdGNoIHRoYXQgc3dhbGxvd3MgZXJyb3JzIGFuZCByZXR1cm5zIGZhbHNlLlxuICAvLyBXZSBtb25rZXktcGF0Y2ggbG9hZFBsdWdpbigpIHRvIGNhcHR1cmUgdGhlIGVycm9yIGJlZm9yZSBpdCdzIHN3YWxsb3dlZC5cbiAgY29uc29sZS53YXJuKGBbaW50ZWdyYXRpb24tc2V0dXBdIEVuYWJsaW5nIHBsdWdpbiBcIiR7cGx1Z2luSWR9XCIuLi5gKTtcbiAgY29uc3QgeyBlcnJvck1lc3NhZ2UgfSA9IGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICBhcmdzOiB7IHBsdWdpbklkIH0sXG4gICAgZm46IGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUsXG4gICAgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrczogdHJ1ZSxcbiAgICB2YXVsdFBhdGg6IHRlbXBWYXVsdC5wYXRoXG4gIH0pO1xuXG4gIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgZmFpbGVkIHRvIGxvYWQ6ICR7ZXJyb3JNZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc29sZS53YXJuKGBbaW50ZWdyYXRpb24tc2V0dXBdIFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgZW5hYmxlZCBzdWNjZXNzZnVsbHkuYCk7XG4gIHByb2plY3QucHJvdmlkZSgnb2JzaWRpYW5UcmFuc3BvcnQnLCB0cmFuc3BvcnRPcHRpb25zKTtcbiAgcHJvamVjdC5wcm92aWRlKCd0ZW1wVmF1bHRQYXRoJywgdGVtcFZhdWx0LnBhdGgpO1xufVxuXG4vKipcbiAqIFZpdGVzdCBnbG9iYWwgdGVhcmRvd24gZnVuY3Rpb24uXG4gKlxuICogUmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IHZhdWx0IGNyZWF0ZWQgZHVyaW5nIHNldHVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVhcmRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHRlbXBWYXVsdC5kaXNwb3NlKCk7XG4gIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgcHJvamVjdCByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSBgcHJvY2Vzcy5jd2QoKWAgbG9va2luZyBmb3IgYHBhY2thZ2UuanNvbmAuXG4gKlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZnVuY3Rpb24gZmluZFByb2plY3RSb290KCk6IHN0cmluZyB7XG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIExvb3AgdGVybWluYXRlcyBhdCBmaWxlc3lzdGVtIHJvb3QuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGV4aXN0c1N5bmMoam9pbihkaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGpvaW4oZGlyLCAnLi4nKTtcbiAgICBpZiAocGFyZW50ID09PSBkaXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcHJvamVjdCByb290IChubyBwYWNrYWdlLmpzb24gZm91bmQpLicpO1xuICAgIH1cbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZGlzdCBwYXRoIHRvIHVzZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKlxuICogUGlja3Mgd2hpY2hldmVyIG9mIGBkaXN0L2RldmAgYW5kIGBkaXN0L2J1aWxkYCBoYXMgYSBuZXdlciBgbWFpbi5qc2AuXG4gKiBJZiBvbmx5IG9uZSBleGlzdHMsIHRoYXQgb25lIGlzIHVzZWQuIFRocm93cyBpZiBuZWl0aGVyIGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvamVjdFJvb3QgLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcHJvamVjdCByb290LlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNob3NlbiBkaXN0IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZURpc3RQYXRoKHByb2plY3RSb290OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZXZQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgRElTVF9ERVYpO1xuICBjb25zdCBidWlsZFBhdGggPSBqb2luKHByb2plY3RSb290LCBESVNUX0JVSUxEKTtcbiAgY29uc3QgZGV2TWFpbkpzID0gam9pbihkZXZQYXRoLCBNQUlOX0pTKTtcbiAgY29uc3QgYnVpbGRNYWluSnMgPSBqb2luKGJ1aWxkUGF0aCwgTUFJTl9KUyk7XG4gIGNvbnN0IGRldlN0YXQgPSBleGlzdHNTeW5jKGRldk1haW5KcykgPyBhd2FpdCBzdGF0KGRldk1haW5KcykgOiBudWxsO1xuICBjb25zdCBidWlsZFN0YXQgPSBleGlzdHNTeW5jKGJ1aWxkTWFpbkpzKSA/IGF3YWl0IHN0YXQoYnVpbGRNYWluSnMpIDogbnVsbDtcblxuICBpZiAoZGV2U3RhdCAmJiBidWlsZFN0YXQpIHtcbiAgICByZXR1cm4gZGV2U3RhdC5tdGltZSA+IGJ1aWxkU3RhdC5tdGltZSA/IGRldlBhdGggOiBidWlsZFBhdGg7XG4gIH1cblxuICBpZiAoZGV2U3RhdCkge1xuICAgIHJldHVybiBkZXZQYXRoO1xuICB9XG5cbiAgaWYgKGJ1aWxkU3RhdCkge1xuICAgIHJldHVybiBidWlsZFBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJ1aWxkIGZvdW5kLiBSdW4gYG5wbSBydW4gYnVpbGRgIG9yIGBucG0gcnVuIGRldmAgZmlyc3QuJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -84,12 +84,16 @@ class AppiumTransport {
|
|
|
84
84
|
* @param _vaultPath - Not used on mobile.
|
|
85
85
|
*/
|
|
86
86
|
async preflightCheck(_vaultPath) {
|
|
87
|
+
console.warn("[appium-transport] Running preflight check...");
|
|
87
88
|
const state = await this.browser.queryAppState(this.appId);
|
|
89
|
+
console.warn(`[appium-transport] App state: ${String(state)} (need ${String(APP_STATE_FOREGROUND)}=foreground)`);
|
|
88
90
|
if (state !== APP_STATE_FOREGROUND) {
|
|
91
|
+
console.warn(`[appium-transport] Activating app ${this.appId}...`);
|
|
89
92
|
await this.browser.activateApp(this.appId);
|
|
90
93
|
await delay(APP_RESTART_DELAY_IN_MILLISECONDS);
|
|
91
94
|
}
|
|
92
95
|
await this.ensureWebViewContext();
|
|
96
|
+
console.warn("[appium-transport] Preflight check passed.");
|
|
93
97
|
}
|
|
94
98
|
/**
|
|
95
99
|
* Pushes vault files to the device.
|
|
@@ -121,6 +125,7 @@ class AppiumTransport {
|
|
|
121
125
|
* @param vaultPath - The absolute path to the vault on the host machine.
|
|
122
126
|
*/
|
|
123
127
|
async registerVault(vaultPath) {
|
|
128
|
+
console.warn(`[appium-transport] Registering vault: ${vaultPath}`);
|
|
124
129
|
const deviceVaultPath = this.getDeviceVaultPath(vaultPath);
|
|
125
130
|
const obsidianMarker = `${deviceVaultPath}/.obsidian/app.json`;
|
|
126
131
|
const base64Content = Buffer.from("{}", "utf-8").toString("base64");
|
|
@@ -175,13 +180,16 @@ class AppiumTransport {
|
|
|
175
180
|
*/
|
|
176
181
|
async ensureWebViewContext() {
|
|
177
182
|
const deadline = Date.now() + WEBVIEW_POLL_TIMEOUT_IN_MILLISECONDS;
|
|
183
|
+
console.warn(`[appium-transport] Waiting for ${WEBVIEW_CONTEXT_PREFIX} context (timeout=${String(WEBVIEW_POLL_TIMEOUT_IN_MILLISECONDS)}ms)...`);
|
|
178
184
|
while (Date.now() < deadline) {
|
|
179
185
|
const contexts = await this.browser.getContexts();
|
|
180
186
|
const obsidianContext = contexts.find((ctx) => typeof ctx === "string" && ctx.startsWith(WEBVIEW_CONTEXT_PREFIX));
|
|
181
187
|
if (obsidianContext) {
|
|
188
|
+
console.warn(`[appium-transport] Found WebView context: ${obsidianContext}`);
|
|
182
189
|
await this.browser.switchContext(obsidianContext);
|
|
183
190
|
return;
|
|
184
191
|
}
|
|
192
|
+
console.warn(`[appium-transport] WebView not ready, available contexts: ${JSON.stringify(contexts)}. Retrying...`);
|
|
185
193
|
await delay(WEBVIEW_POLL_INTERVAL_IN_MILLISECONDS);
|
|
186
194
|
}
|
|
187
195
|
throw new Error(`No ${WEBVIEW_CONTEXT_PREFIX} context found within ${String(WEBVIEW_POLL_TIMEOUT_IN_MILLISECONDS)}ms. Is the Obsidian app fully loaded?`);
|
|
@@ -200,12 +208,14 @@ class AppiumTransport {
|
|
|
200
208
|
*/
|
|
201
209
|
async waitForLayoutReady() {
|
|
202
210
|
const deadline = Date.now() + LAYOUT_READY_POLL_TIMEOUT_IN_MILLISECONDS;
|
|
211
|
+
console.warn(`[appium-transport] Waiting for layout ready (timeout=${String(LAYOUT_READY_POLL_TIMEOUT_IN_MILLISECONDS)}ms)...`);
|
|
203
212
|
while (Date.now() < deadline) {
|
|
204
213
|
try {
|
|
205
214
|
const isReady = await this.browser.execute(
|
|
206
215
|
'return typeof app !== "undefined" && app.workspace && app.workspace.layoutReady === true'
|
|
207
216
|
);
|
|
208
217
|
if (isReady) {
|
|
218
|
+
console.warn("[appium-transport] Layout is ready.");
|
|
209
219
|
return;
|
|
210
220
|
}
|
|
211
221
|
} catch {
|
|
@@ -229,4 +239,4 @@ function extractVaultName(vaultPath) {
|
|
|
229
239
|
0 && (module.exports = {
|
|
230
240
|
AppiumTransport
|
|
231
241
|
});
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1hcHBpdW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBcHBpdW0gdHJhbnNwb3J0IFx1MjAxNCBldmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSB2aWEgV2ViVmlld1xuICogSmF2YVNjcmlwdCBpbmplY3Rpb24uIE1hbmFnZXMgdmF1bHQgbGlmZWN5Y2xlIHZpYSBsb2NhbFN0b3JhZ2UgYW5kIGZpbGUgcHVzaC5cbiAqXG4gKiBDb25maWd1cmVkIHZpYSBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCBpbiB2aXRlc3QgY29uZmlnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHZpdGVzdC5jb25maWcudHNcbiAqIGVudmlyb25tZW50T3B0aW9uczoge1xuICogICBvYnNpZGlhblRyYW5zcG9ydDoge1xuICogICAgIHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bScsXG4gKiAgICAgYXBwaXVtVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJyxcbiAqICAgICBkZXZpY2VJZDogJ2VtdWxhdG9yLTU1NTQnLFxuICogICB9LFxuICogfVxuICogYGBgXG4gKlxuICogRm9yIEJyb3dzZXJTdGFjaywgc2V0IGBhcHBpdW1VcmxgIHRvIHRoZSBCcm93c2VyU3RhY2sgaHViIFVSTFxuICogXHUyMDE0IHRoZSB0cmFuc3BvcnQgaXRzZWxmIGlzIGh1Yi1hZ25vc3RpYy5cbiAqXG4gKiAjIyBIb3cgdmF1bHQgcmVnaXN0cmF0aW9uIHdvcmtzIG9uIG1vYmlsZVxuICpcbiAqIE9ic2lkaWFuIE1vYmlsZSBzdG9yZXMgaXRzIHZhdWx0IHJlZ2lzdHJ5IGluIHRoZSBXZWJWaWV3J3MgYGxvY2FsU3RvcmFnZWA6XG4gKlxuICogLSBgbW9iaWxlLWV4dGVybmFsLXZhdWx0c2AgXHUyMDE0IEpTT04gYXJyYXkgb2YgcmVnaXN0ZXJlZCB2YXVsdCBwYXRoc1xuICogLSBgbW9iaWxlLXNlbGVjdGVkLXZhdWx0YCBcdTIwMTQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmF1bHQgcGF0aFxuICogLSBgZW5hYmxlLXBsdWdpbi08dmF1bHRQYXRoPmAgXHUyMDE0IGBcInRydWVcImAgdG8gZW5hYmxlIHRoZSBwbHVnaW4gc3lzdGVtIGZvciB0aGUgdmF1bHRcbiAqXG4gKiBUbyByZWdpc3RlciBhIHZhdWx0IHByb2dyYW1tYXRpY2FsbHkgKHdpdGhvdXQgVUkgaW50ZXJhY3Rpb24pOlxuICpcbiAqIDEuIFB1c2ggdmF1bHQgZmlsZXMgdG8gdGhlIGRldmljZSAoZS5nLiBgL3NkY2FyZC9Eb2N1bWVudHMvPE5hbWU+Ly5vYnNpZGlhbi9hcHAuanNvbmApXG4gKiAyLiBTd2l0Y2ggdG8gYFdFQlZJRVdfbWQub2JzaWRpYW5gIGNvbnRleHRcbiAqIDMuIFNldCB0aGUgbG9jYWxTdG9yYWdlIGVudHJpZXNcbiAqIDQuIENhbGwgYGxvY2F0aW9uLnJlbG9hZCgpYCBcdTIwMTQgT2JzaWRpYW4gcmUtcmVhZHMgbG9jYWxTdG9yYWdlIGFuZCBvcGVucyB0aGUgdmF1bHRcbiAqXG4gKiBUaGlzIGF2b2lkcyB0aGUgb25ib2FyZGluZyBmbG93IGVudGlyZWx5LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlciB9IGZyb20gJ3dlYmRyaXZlcmlvJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQXBwaXVtIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBpdW1UcmFuc3BvcnRDb25maWcge1xuICAvKipcbiAgICogQXBwIHBhY2thZ2UgKEFuZHJvaWQpIG9yIGJ1bmRsZSBJRCAoaU9TKS5cbiAgICogRGVmYXVsdHMgdG8gYCdtZC5vYnNpZGlhbidgLlxuICAgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBcHBpdW0gYnJvd3Nlci9kcml2ZXIgaW5zdGFuY2UuXG4gICAqIENyZWF0ZWQgYnkgdGhlIGNvbnN1bWVyIHZpYSBlLmcuIFdlYkRyaXZlcklPJ3MgYHJlbW90ZSgpYC5cbiAgICovXG4gIGJyb3dzZXI6IEJyb3dzZXI7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybS4gRGV0ZXJtaW5lcyBXZWJWaWV3IGNvbnRleHQgbmFtaW5nIGFuZCBkZXZpY2UgZmlsZSBwYXRocy5cbiAgICovXG4gIHBsYXRmb3JtOiAnYW5kcm9pZCcgfCAnaW9zJztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIG9uIHRoZSBkZXZpY2Ugd2hlcmUgT2JzaWRpYW4gc3RvcmVzIHZhdWx0cy5cbiAgICpcbiAgICogRGVmYXVsdHM6XG4gICAqIC0gQW5kcm9pZDogYC9zZGNhcmQvRG9jdW1lbnRzL2BcbiAgICogLSBpT1M6IGBAbWQub2JzaWRpYW46ZG9jdW1lbnRzL2BcbiAgICovXG4gIHZhdWx0QmFzZVBhdGg/OiBzdHJpbmc7XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBBUFBfU1RBVEVfRk9SRUdST1VORCA9IDQ7XG5jb25zdCBXRUJWSUVXX0NPTlRFWFRfUFJFRklYID0gJ1dFQlZJRVdfbWQub2JzaWRpYW4nO1xuY29uc3QgV0VCVklFV19QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBERUZBVUxUX0FQUF9JRCA9ICdtZC5vYnNpZGlhbic7XG5cbmNvbnN0IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhbmRyb2lkOiAnL3NkY2FyZC9Eb2N1bWVudHMvJyxcbiAgaW9zOiAnQG1kLm9ic2lkaWFuOmRvY3VtZW50cy8nXG59O1xuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIE9ic2lkaWFuIE1vYmlsZSB2aWEgQXBwaXVtIFdlYlZpZXcgSlMgaW5qZWN0aW9uLlxuICpcbiAqIEV2YWx1YXRlcyBleHByZXNzaW9ucyBieSBzd2l0Y2hpbmcgdG8gdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0IGFuZFxuICogY2FsbGluZyBgZXhlY3V0ZSgpYC4gTWFuYWdlcyB2YXVsdHMgYnkgd3JpdGluZyB0byB0aGUgV2ViVmlldydzIGBsb2NhbFN0b3JhZ2VgXG4gKiAod2hpY2ggT2JzaWRpYW4gdXNlcyBhcyBpdHMgdmF1bHQgcmVnaXN0cnkgb24gbW9iaWxlKSBhbmQgcHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgQXBwaXVtVHJhbnNwb3J0IGltcGxlbWVudHMgT2JzaWRpYW5UcmFuc3BvcnQge1xuICAvKiogKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyb3dzZXI6IEJyb3dzZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm06ICdhbmRyb2lkJyB8ICdpb3MnO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhdWx0QmFzZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBcHBpdW0gdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQXBwaXVtIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBwaXVtVHJhbnNwb3J0Q29uZmlnKSB7XG4gICAgdGhpcy5icm93c2VyID0gY29uZmlnLmJyb3dzZXI7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IGNvbmZpZy5wbGF0Zm9ybTtcbiAgICB0aGlzLmFwcElkID0gY29uZmlnLmFwcElkID8/IERFRkFVTFRfQVBQX0lEO1xuICAgIHRoaXMudmF1bHRCYXNlUGF0aCA9IGNvbmZpZy52YXVsdEJhc2VQYXRoID8/IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIW3RoaXMucGxhdGZvcm1dID8/ICcvc2RjYXJkL0RvY3VtZW50cy8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZHMgdGhlIEFwcGl1bSBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSdzIFdlYlZpZXcuXG4gICAqXG4gICAqIFN3aXRjaGVzIHRvIHRoZSBgV0VCVklFV19tZC5vYnNpZGlhbmAgY29udGV4dCwgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24sXG4gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBfb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucyAoY3dkIGlzIG5vdCB1c2VkIG9uIG1vYmlsZSBcdTIwMTQgdmF1bHQgdGFyZ2V0aW5nIGlzIHZpYSBsb2NhbFN0b3JhZ2UpLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgX29wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZTxudWxsIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBbXT4oXG4gICAgICBgcmV0dXJuICgke2V4cHJlc3Npb259KWBcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5PX09VVFBVVDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIE9ic2lkaWFuIGFwcCBpcyBydW5uaW5nIGFuZCB0aGUgV2ViVmlldyBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBfdmF1bHRQYXRoIC0gTm90IHVzZWQgb24gbW9iaWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKF92YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5icm93c2VyLnF1ZXJ5QXBwU3RhdGUodGhpcy5hcHBJZCk7XG4gICAgaWYgKHN0YXRlICE9PSBBUFBfU1RBVEVfRk9SRUdST1VORCkge1xuICAgICAgYXdhaXQgdGhpcy5icm93c2VyLmFjdGl2YXRlQXBwKHRoaXMuYXBwSWQpO1xuICAgICAgYXdhaXQgZGVsYXkoQVBQX1JFU1RBUlRfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIHZhdWx0IGZpbGVzIHRvIHRoZSBkZXZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCAodXNlZCBhcyB0aGUgdmF1bHQgZGlyZWN0b3J5IG5hbWUgb24gZGV2aWNlKS5cbiAgICogQHBhcmFtIGZpbGVzIC0gTWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBzdHJpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1c2hGaWxlcyh2YXVsdFBhdGg6IHN0cmluZywgZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZGV2aWNlRmlsZVBhdGggPSBgJHtkZXZpY2VWYXVsdFBhdGh9LyR7ZmlsZVBhdGh9YDtcbiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSBCdWZmZXIuZnJvbShjb250ZW50LCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBhd2FpdCB0aGlzLmJyb3dzZXIucHVzaEZpbGUoZGV2aWNlRmlsZVBhdGgsIGJhc2U2NENvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YXVsdCBvbiBtb2JpbGUgYnkgcHVzaGluZyBmaWxlcyBhbmQgY29uZmlndXJpbmcgbG9jYWxTdG9yYWdlLlxuICAgKlxuICAgKiBUaGUgcmVnaXN0cmF0aW9uIGZsb3c6XG4gICAqIDEuIFB1c2ggYSBtaW5pbWFsIGAub2JzaWRpYW4vYXBwLmpzb25gIHRvIHRoZSBkZXZpY2Ugc28gT2JzaWRpYW4gcmVjb2duaXplcyB0aGUgdmF1bHRcbiAgICogMi4gU3dpdGNoIHRvIHRoZSBXZWJWaWV3IGNvbnRleHRcbiAgICogMy4gQWRkIHRoZSB2YXVsdCB0byBsb2NhbFN0b3JhZ2UgKGBtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzYCwgYG1vYmlsZS1zZWxlY3RlZC12YXVsdGAsXG4gICAqICAgIGBlbmFibGUtcGx1Z2luLTxwYXRoPmApXG4gICAqIDQuIFRyaWdnZXIgYGxvY2F0aW9uLnJlbG9hZCgpYCBzbyBPYnNpZGlhbiByZS1yZWFkcyBsb2NhbFN0b3JhZ2UgYW5kIG9wZW5zIHRoZSB2YXVsdFxuICAgKiA1LiBXYWl0IGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWBcbiAgICpcbiAgICogRXhpc3RpbmcgdmF1bHQgcmVnaXN0cmF0aW9ucyBpbiBsb2NhbFN0b3JhZ2UgYXJlIHByZXNlcnZlZCAoYXBwZW5kLCBub3Qgb3ZlcndyaXRlKS5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBvbiB0aGUgaG9zdCBtYWNoaW5lLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgLy8gUHVzaCBhIG1pbmltYWwgLm9ic2lkaWFuIGRpcmVjdG9yeSBzbyBPYnNpZGlhbiByZWNvZ25pemVzIGl0IGFzIGEgdmF1bHQuXG4gICAgY29uc3Qgb2JzaWRpYW5NYXJrZXIgPSBgJHtkZXZpY2VWYXVsdFBhdGh9Ly5vYnNpZGlhbi9hcHAuanNvbmA7XG4gICAgY29uc3QgYmFzZTY0Q29udGVudCA9IEJ1ZmZlci5mcm9tKCd7fScsICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBhd2FpdCB0aGlzLmJyb3dzZXIucHVzaEZpbGUob2JzaWRpYW5NYXJrZXIsIGJhc2U2NENvbnRlbnQpO1xuXG4gICAgLy8gU3dpdGNoIHRvIFdlYlZpZXcgYW5kIGNvbmZpZ3VyZSBsb2NhbFN0b3JhZ2UuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXZWJWaWV3Q29udGV4dCgpO1xuXG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmV4ZWN1dGUoKHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzJykgPz8gJ1tdJykgYXMgc3RyaW5nW107XG4gICAgICBpZiAoIWV4aXN0aW5nLmluY2x1ZGVzKHBhdGgpKSB7XG4gICAgICAgIGV4aXN0aW5nLnB1c2gocGF0aCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzJywgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKTtcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtb2JpbGUtc2VsZWN0ZWQtdmF1bHQnLCBwYXRoKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGBlbmFibGUtcGx1Z2luLSR7cGF0aH1gLCAndHJ1ZScpO1xuICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSwgZGV2aWNlVmF1bHRQYXRoKTtcblxuICAgIC8vIFdhaXQgZm9yIHJlbG9hZCArIHZhdWx0IGluaXRpYWxpemF0aW9uLlxuICAgIGF3YWl0IHRoaXMud2FpdEZvckxheW91dFJlYWR5KCk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlcnMgYSB2YXVsdCBvbiBtb2JpbGUgYnkgcmVtb3ZpbmcgaXQgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAqXG4gICAqIFByZXNlcnZlcyBvdGhlciB2YXVsdCByZWdpc3RyYXRpb25zLiBJZiB0aGUgdW5yZWdpc3RlcmVkIHZhdWx0IHdhcyBzZWxlY3RlZCxcbiAgICogc3dpdGNoZXMgdG8gdGhlIGZpcnN0IHJlbWFpbmluZyB2YXVsdCAob3IgY2xlYXJzIHRoZSBzZWxlY3Rpb24pLlxuICAgKlxuICAgKiBOb3RlOiBWYXVsdCBmaWxlcyBvbiB0aGUgZGV2aWNlIGFyZSBub3QgZGVsZXRlZC4gVGhlIHRlc3QgaGFybmVzcyBvciBDSVxuICAgKiBlbnZpcm9ubWVudCBzaG91bGQgaGFuZGxlIGRldmljZSBjbGVhbnVwLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IG9uIHRoZSBob3N0IG1hY2hpbmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGV2aWNlVmF1bHRQYXRoID0gdGhpcy5nZXREZXZpY2VWYXVsdFBhdGgodmF1bHRQYXRoKTtcblxuICAgIGF3YWl0IHRoaXMuZW5zdXJlV2ViVmlld0NvbnRleHQoKTtcblxuICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5leGVjdXRlKChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9iaWxlLWV4dGVybmFsLXZhdWx0cycpID8/ICdbXScpIGFzIHN0cmluZ1tdO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBleGlzdGluZy5maWx0ZXIoKHYpID0+IHYgIT09IHBhdGgpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21vYmlsZS1leHRlcm5hbC12YXVsdHMnLCBKU09OLnN0cmluZ2lmeShmaWx0ZXJlZCkpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYGVuYWJsZS1wbHVnaW4tJHtwYXRofWApO1xuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtb2JpbGUtc2VsZWN0ZWQtdmF1bHQnKSA9PT0gcGF0aCkge1xuICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtb2JpbGUtc2VsZWN0ZWQtdmF1bHQnLCBmaWx0ZXJlZFswXSA/PyAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ21vYmlsZS1zZWxlY3RlZC12YXVsdCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgZGV2aWNlVmF1bHRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2hlcyB0aGUgZHJpdmVyIHRvIHRoZSBgV0VCVklFV19tZC5vYnNpZGlhbmAgY29udGV4dC5cbiAgICpcbiAgICogUG9sbHMgdW50aWwgdGhlIGNvbnRleHQgYmVjb21lcyBhdmFpbGFibGUgKHRoZSBhcHAgbWF5IHN0aWxsIGJlIGxvYWRpbmcpLlxuICAgKiBVc2VzIHRoZSBgV0VCVklFV19tZC5vYnNpZGlhbmAgY29udGV4dCBzcGVjaWZpY2FsbHkgdG8gYXZvaWQgY29ubmVjdGluZ1xuICAgKiB0byBDaHJvbWUgb3Igb3RoZXIgV2ViVmlld3Mgb24gdGhlIGRldmljZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlV2ViVmlld0NvbnRleHQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgV0VCVklFV19QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgY29uc3QgY29udGV4dHMgPSBhd2FpdCB0aGlzLmJyb3dzZXIuZ2V0Q29udGV4dHMoKTtcbiAgICAgIGNvbnN0IG9ic2lkaWFuQ29udGV4dCA9IGNvbnRleHRzLmZpbmQoKGN0eCk6IGN0eCBpcyBzdHJpbmcgPT4gdHlwZW9mIGN0eCA9PT0gJ3N0cmluZycgJiYgY3R4LnN0YXJ0c1dpdGgoV0VCVklFV19DT05URVhUX1BSRUZJWCkpO1xuXG4gICAgICBpZiAob2JzaWRpYW5Db250ZXh0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5zd2l0Y2hDb250ZXh0KG9ic2lkaWFuQ29udGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZGVsYXkoV0VCVklFV19QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyAke1dFQlZJRVdfQ09OVEVYVF9QUkVGSVh9IGNvbnRleHQgZm91bmQgd2l0aGluICR7U3RyaW5nKFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuIElzIHRoZSBPYnNpZGlhbiBhcHAgZnVsbHkgbG9hZGVkP2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgaG9zdC1zaWRlIHZhdWx0IHBhdGggdG8gdGhlIGRldmljZS1zaWRlIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBBYnNvbHV0ZSBwYXRoIG9uIHRoZSBob3N0IG1hY2hpbmUuXG4gICAqIEByZXR1cm5zIFRoZSBkZXZpY2Utc2lkZSB2YXVsdCBwYXRoLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXREZXZpY2VWYXVsdFBhdGgodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnZhdWx0QmFzZVBhdGh9JHtleHRyYWN0VmF1bHROYW1lKHZhdWx0UGF0aCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xscyB1bnRpbCBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgaXMgYHRydWVgIGluIHRoZSBXZWJWaWV3LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yTGF5b3V0UmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc1JlYWR5ID0gYXdhaXQgdGhpcy5icm93c2VyLmV4ZWN1dGU8Ym9vbGVhbiwgW10+KFxuICAgICAgICAgICdyZXR1cm4gdHlwZW9mIGFwcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcHAud29ya3NwYWNlICYmIGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkgPT09IHRydWUnXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc1JlYWR5KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQXBwIG5vdCByZWFkeSB5ZXQgKHBhZ2UgbWF5IGJlIHJlbG9hZGluZykuXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGRlbGF5KExBWU9VVF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBPYnNpZGlhbiBsYXlvdXQgZGlkIG5vdCBiZWNvbWUgcmVhZHkgd2l0aGluICR7U3RyaW5nKExBWU9VVF9SRUFEWV9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2ApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHZhdWx0IGRpcmVjdG9yeSBuYW1lIGZyb20gYSBob3N0LXNpZGUgdmF1bHQgcGF0aC5cbiAqXG4gKiBAcGFyYW0gdmF1bHRQYXRoIC0gQWJzb2x1dGUgcGF0aCBvbiB0aGUgaG9zdCBtYWNoaW5lLlxuICogQHJldHVybnMgVGhlIGxhc3QgcGF0aCBzZWdtZW50ICh2YXVsdCBkaXJlY3RvcnkgbmFtZSkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RWYXVsdE5hbWUodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gdmF1bHRQYXRoLnJlcGxhY2UoL1tcXFxcL10rJC8sICcnKTtcbiAgY29uc3QgbGFzdFNlcCA9IE1hdGgubWF4KG5vcm1hbGl6ZWQubGFzdEluZGV4T2YoJy8nKSwgbm9ybWFsaXplZC5sYXN0SW5kZXhPZignXFxcXCcpKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQuc2xpY2UobGFzdFNlcCArIDEpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdGQSxNQUFNLFlBQVk7QUFDbEIsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSw0Q0FBNEM7QUFDbEQsTUFBTSxvQ0FBb0M7QUFDMUMsTUFBTSxpQkFBaUI7QUFFdkIsTUFBTSwwQkFBa0Q7QUFBQSxFQUN0RCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQ1A7QUFTTyxNQUFNLGdCQUE2QztBQUFBO0FBQUEsRUFFeEMsV0FBVztBQUFBLEVBQ1Y7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQStCO0FBQ2hELFNBQUssVUFBVSxPQUFPO0FBQ3RCLFNBQUssV0FBVyxPQUFPO0FBQ3ZCLFNBQUssUUFBUSxPQUFPLFNBQVM7QUFDN0IsU0FBSyxnQkFBZ0IsT0FB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
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1hcHBpdW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBcHBpdW0gdHJhbnNwb3J0IFx1MjAxNCBldmFsdWF0ZXMgZXhwcmVzc2lvbnMgaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSB2aWEgV2ViVmlld1xuICogSmF2YVNjcmlwdCBpbmplY3Rpb24uIE1hbmFnZXMgdmF1bHQgbGlmZWN5Y2xlIHZpYSBsb2NhbFN0b3JhZ2UgYW5kIGZpbGUgcHVzaC5cbiAqXG4gKiBDb25maWd1cmVkIHZpYSBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCBpbiB2aXRlc3QgY29uZmlnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHZpdGVzdC5jb25maWcudHNcbiAqIGVudmlyb25tZW50T3B0aW9uczoge1xuICogICBvYnNpZGlhblRyYW5zcG9ydDoge1xuICogICAgIHR5cGU6ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bScsXG4gKiAgICAgYXBwaXVtVXJsOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJyxcbiAqICAgICBkZXZpY2VJZDogJ2VtdWxhdG9yLTU1NTQnLFxuICogICB9LFxuICogfVxuICogYGBgXG4gKlxuICogRm9yIEJyb3dzZXJTdGFjaywgc2V0IGBhcHBpdW1VcmxgIHRvIHRoZSBCcm93c2VyU3RhY2sgaHViIFVSTFxuICogXHUyMDE0IHRoZSB0cmFuc3BvcnQgaXRzZWxmIGlzIGh1Yi1hZ25vc3RpYy5cbiAqXG4gKiAjIyBIb3cgdmF1bHQgcmVnaXN0cmF0aW9uIHdvcmtzIG9uIG1vYmlsZVxuICpcbiAqIE9ic2lkaWFuIE1vYmlsZSBzdG9yZXMgaXRzIHZhdWx0IHJlZ2lzdHJ5IGluIHRoZSBXZWJWaWV3J3MgYGxvY2FsU3RvcmFnZWA6XG4gKlxuICogLSBgbW9iaWxlLWV4dGVybmFsLXZhdWx0c2AgXHUyMDE0IEpTT04gYXJyYXkgb2YgcmVnaXN0ZXJlZCB2YXVsdCBwYXRoc1xuICogLSBgbW9iaWxlLXNlbGVjdGVkLXZhdWx0YCBcdTIwMTQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmF1bHQgcGF0aFxuICogLSBgZW5hYmxlLXBsdWdpbi08dmF1bHRQYXRoPmAgXHUyMDE0IGBcInRydWVcImAgdG8gZW5hYmxlIHRoZSBwbHVnaW4gc3lzdGVtIGZvciB0aGUgdmF1bHRcbiAqXG4gKiBUbyByZWdpc3RlciBhIHZhdWx0IHByb2dyYW1tYXRpY2FsbHkgKHdpdGhvdXQgVUkgaW50ZXJhY3Rpb24pOlxuICpcbiAqIDEuIFB1c2ggdmF1bHQgZmlsZXMgdG8gdGhlIGRldmljZSAoZS5nLiBgL3NkY2FyZC9Eb2N1bWVudHMvPE5hbWU+Ly5vYnNpZGlhbi9hcHAuanNvbmApXG4gKiAyLiBTd2l0Y2ggdG8gYFdFQlZJRVdfbWQub2JzaWRpYW5gIGNvbnRleHRcbiAqIDMuIFNldCB0aGUgbG9jYWxTdG9yYWdlIGVudHJpZXNcbiAqIDQuIENhbGwgYGxvY2F0aW9uLnJlbG9hZCgpYCBcdTIwMTQgT2JzaWRpYW4gcmUtcmVhZHMgbG9jYWxTdG9yYWdlIGFuZCBvcGVucyB0aGUgdmF1bHRcbiAqXG4gKiBUaGlzIGF2b2lkcyB0aGUgb25ib2FyZGluZyBmbG93IGVudGlyZWx5LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQnJvd3NlciB9IGZyb20gJ3dlYmRyaXZlcmlvJztcblxuaW1wb3J0IHR5cGUge1xuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQXBwaXVtIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBpdW1UcmFuc3BvcnRDb25maWcge1xuICAvKipcbiAgICogQXBwIHBhY2thZ2UgKEFuZHJvaWQpIG9yIGJ1bmRsZSBJRCAoaU9TKS5cbiAgICogRGVmYXVsdHMgdG8gYCdtZC5vYnNpZGlhbidgLlxuICAgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBcHBpdW0gYnJvd3Nlci9kcml2ZXIgaW5zdGFuY2UuXG4gICAqIENyZWF0ZWQgYnkgdGhlIGNvbnN1bWVyIHZpYSBlLmcuIFdlYkRyaXZlcklPJ3MgYHJlbW90ZSgpYC5cbiAgICovXG4gIGJyb3dzZXI6IEJyb3dzZXI7XG5cbiAgLyoqXG4gICAqIFRhcmdldCBwbGF0Zm9ybS4gRGV0ZXJtaW5lcyBXZWJWaWV3IGNvbnRleHQgbmFtaW5nIGFuZCBkZXZpY2UgZmlsZSBwYXRocy5cbiAgICovXG4gIHBsYXRmb3JtOiAnYW5kcm9pZCcgfCAnaW9zJztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIG9uIHRoZSBkZXZpY2Ugd2hlcmUgT2JzaWRpYW4gc3RvcmVzIHZhdWx0cy5cbiAgICpcbiAgICogRGVmYXVsdHM6XG4gICAqIC0gQW5kcm9pZDogYC9zZGNhcmQvRG9jdW1lbnRzL2BcbiAgICogLSBpT1M6IGBAbWQub2JzaWRpYW46ZG9jdW1lbnRzL2BcbiAgICovXG4gIHZhdWx0QmFzZVBhdGg/OiBzdHJpbmc7XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBBUFBfU1RBVEVfRk9SRUdST1VORCA9IDQ7XG5jb25zdCBXRUJWSUVXX0NPTlRFWFRfUFJFRklYID0gJ1dFQlZJRVdfbWQub2JzaWRpYW4nO1xuY29uc3QgV0VCVklFV19QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuY29uc3QgTEFZT1VUX1JFQURZX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBERUZBVUxUX0FQUF9JRCA9ICdtZC5vYnNpZGlhbic7XG5cbmNvbnN0IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhbmRyb2lkOiAnL3NkY2FyZC9Eb2N1bWVudHMvJyxcbiAgaW9zOiAnQG1kLm9ic2lkaWFuOmRvY3VtZW50cy8nXG59O1xuXG4vKipcbiAqIFRyYW5zcG9ydCB0aGF0IGNvbW11bmljYXRlcyB3aXRoIE9ic2lkaWFuIE1vYmlsZSB2aWEgQXBwaXVtIFdlYlZpZXcgSlMgaW5qZWN0aW9uLlxuICpcbiAqIEV2YWx1YXRlcyBleHByZXNzaW9ucyBieSBzd2l0Y2hpbmcgdG8gdGhlIGBXRUJWSUVXX21kLm9ic2lkaWFuYCBjb250ZXh0IGFuZFxuICogY2FsbGluZyBgZXhlY3V0ZSgpYC4gTWFuYWdlcyB2YXVsdHMgYnkgd3JpdGluZyB0byB0aGUgV2ViVmlldydzIGBsb2NhbFN0b3JhZ2VgXG4gKiAod2hpY2ggT2JzaWRpYW4gdXNlcyBhcyBpdHMgdmF1bHQgcmVnaXN0cnkgb24gbW9iaWxlKSBhbmQgcHVzaGluZyBmaWxlcyB0byB0aGUgZGV2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgQXBwaXVtVHJhbnNwb3J0IGltcGxlbWVudHMgT2JzaWRpYW5UcmFuc3BvcnQge1xuICAvKiogKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyb3dzZXI6IEJyb3dzZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm06ICdhbmRyb2lkJyB8ICdpb3MnO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhdWx0QmFzZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBcHBpdW0gdHJhbnNwb3J0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gQXBwaXVtIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBwaXVtVHJhbnNwb3J0Q29uZmlnKSB7XG4gICAgdGhpcy5icm93c2VyID0gY29uZmlnLmJyb3dzZXI7XG4gICAgdGhpcy5wbGF0Zm9ybSA9IGNvbmZpZy5wbGF0Zm9ybTtcbiAgICB0aGlzLmFwcElkID0gY29uZmlnLmFwcElkID8/IERFRkFVTFRfQVBQX0lEO1xuICAgIHRoaXMudmF1bHRCYXNlUGF0aCA9IGNvbmZpZy52YXVsdEJhc2VQYXRoID8/IERFRkFVTFRfVkFVTFRfQkFTRV9QQVRIW3RoaXMucGxhdGZvcm1dID8/ICcvc2RjYXJkL0RvY3VtZW50cy8nO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZHMgdGhlIEFwcGl1bSBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIE1vYmlsZSdzIFdlYlZpZXcuXG4gICAqXG4gICAqIFN3aXRjaGVzIHRvIHRoZSBgV0VCVklFV19tZC5vYnNpZGlhbmAgY29udGV4dCwgZXhlY3V0ZXMgdGhlIGV4cHJlc3Npb24sXG4gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuXG4gICAqIEBwYXJhbSBfb3B0aW9ucyAtIEV2YWx1YXRpb24gb3B0aW9ucyAoY3dkIGlzIG5vdCB1c2VkIG9uIG1vYmlsZSBcdTIwMTQgdmF1bHQgdGFyZ2V0aW5nIGlzIHZpYSBsb2NhbFN0b3JhZ2UpLlxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCByZXN1bHQgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV2YWx1YXRlKGV4cHJlc3Npb246IHN0cmluZywgX29wdGlvbnM6IFRyYW5zcG9ydEV2YWxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZTxudWxsIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBbXT4oXG4gICAgICBgcmV0dXJuICgke2V4cHJlc3Npb259KWBcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5PX09VVFBVVDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIE9ic2lkaWFuIGFwcCBpcyBydW5uaW5nIGFuZCB0aGUgV2ViVmlldyBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBfdmF1bHRQYXRoIC0gTm90IHVzZWQgb24gbW9iaWxlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByZWZsaWdodENoZWNrKF92YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybignW2FwcGl1bS10cmFuc3BvcnRdIFJ1bm5pbmcgcHJlZmxpZ2h0IGNoZWNrLi4uJyk7XG4gICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLmJyb3dzZXIucXVlcnlBcHBTdGF0ZSh0aGlzLmFwcElkKTtcbiAgICBjb25zb2xlLndhcm4oYFthcHBpdW0tdHJhbnNwb3J0XSBBcHAgc3RhdGU6ICR7U3RyaW5nKHN0YXRlKX0gKG5lZWQgJHtTdHJpbmcoQVBQX1NUQVRFX0ZPUkVHUk9VTkQpfT1mb3JlZ3JvdW5kKWApO1xuICAgIGlmIChzdGF0ZSAhPT0gQVBQX1NUQVRFX0ZPUkVHUk9VTkQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2FwcGl1bS10cmFuc3BvcnRdIEFjdGl2YXRpbmcgYXBwICR7dGhpcy5hcHBJZH0uLi5gKTtcbiAgICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5hY3RpdmF0ZUFwcCh0aGlzLmFwcElkKTtcbiAgICAgIGF3YWl0IGRlbGF5KEFQUF9SRVNUQVJUX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXZWJWaWV3Q29udGV4dCgpO1xuICAgIGNvbnNvbGUud2FybignW2FwcGl1bS10cmFuc3BvcnRdIFByZWZsaWdodCBjaGVjayBwYXNzZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIHZhdWx0IGZpbGVzIHRvIHRoZSBkZXZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCAodXNlZCBhcyB0aGUgdmF1bHQgZGlyZWN0b3J5IG5hbWUgb24gZGV2aWNlKS5cbiAgICogQHBhcmFtIGZpbGVzIC0gTWFwIG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgdG8gY29udGVudCBzdHJpbmdzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1c2hGaWxlcyh2YXVsdFBhdGg6IHN0cmluZywgZmlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZpY2VWYXVsdFBhdGggPSB0aGlzLmdldERldmljZVZhdWx0UGF0aCh2YXVsdFBhdGgpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVzKSkge1xuICAgICAgY29uc3QgZGV2aWNlRmlsZVBhdGggPSBgJHtkZXZpY2VWYXVsdFBhdGh9LyR7ZmlsZVBhdGh9YDtcbiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSBCdWZmZXIuZnJvbShjb250ZW50LCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBhd2FpdCB0aGlzLmJyb3dzZXIucHVzaEZpbGUoZGV2aWNlRmlsZVBhdGgsIGJhc2U2NENvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YXVsdCBvbiBtb2JpbGUgYnkgcHVzaGluZyBmaWxlcyBhbmQgY29uZmlndXJpbmcgbG9jYWxTdG9yYWdlLlxuICAgKlxuICAgKiBUaGUgcmVnaXN0cmF0aW9uIGZsb3c6XG4gICAqIDEuIFB1c2ggYSBtaW5pbWFsIGAub2JzaWRpYW4vYXBwLmpzb25gIHRvIHRoZSBkZXZpY2Ugc28gT2JzaWRpYW4gcmVjb2duaXplcyB0aGUgdmF1bHRcbiAgICogMi4gU3dpdGNoIHRvIHRoZSBXZWJWaWV3IGNvbnRleHRcbiAgICogMy4gQWRkIHRoZSB2YXVsdCB0byBsb2NhbFN0b3JhZ2UgKGBtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzYCwgYG1vYmlsZS1zZWxlY3RlZC12YXVsdGAsXG4gICAqICAgIGBlbmFibGUtcGx1Z2luLTxwYXRoPmApXG4gICAqIDQuIFRyaWdnZXIgYGxvY2F0aW9uLnJlbG9hZCgpYCBzbyBPYnNpZGlhbiByZS1yZWFkcyBsb2NhbFN0b3JhZ2UgYW5kIG9wZW5zIHRoZSB2YXVsdFxuICAgKiA1LiBXYWl0IGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWBcbiAgICpcbiAgICogRXhpc3RpbmcgdmF1bHQgcmVnaXN0cmF0aW9ucyBpbiBsb2NhbFN0b3JhZ2UgYXJlIHByZXNlcnZlZCAoYXBwZW5kLCBub3Qgb3ZlcndyaXRlKS5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBvbiB0aGUgaG9zdCBtYWNoaW5lLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLndhcm4oYFthcHBpdW0tdHJhbnNwb3J0XSBSZWdpc3RlcmluZyB2YXVsdDogJHt2YXVsdFBhdGh9YCk7XG4gICAgY29uc3QgZGV2aWNlVmF1bHRQYXRoID0gdGhpcy5nZXREZXZpY2VWYXVsdFBhdGgodmF1bHRQYXRoKTtcblxuICAgIC8vIFB1c2ggYSBtaW5pbWFsIC5vYnNpZGlhbiBkaXJlY3Rvcnkgc28gT2JzaWRpYW4gcmVjb2duaXplcyBpdCBhcyBhIHZhdWx0LlxuICAgIGNvbnN0IG9ic2lkaWFuTWFya2VyID0gYCR7ZGV2aWNlVmF1bHRQYXRofS8ub2JzaWRpYW4vYXBwLmpzb25gO1xuICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSBCdWZmZXIuZnJvbSgne30nLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgYXdhaXQgdGhpcy5icm93c2VyLnB1c2hGaWxlKG9ic2lkaWFuTWFya2VyLCBiYXNlNjRDb250ZW50KTtcblxuICAgIC8vIFN3aXRjaCB0byBXZWJWaWV3IGFuZCBjb25maWd1cmUgbG9jYWxTdG9yYWdlLlxuICAgIGF3YWl0IHRoaXMuZW5zdXJlV2ViVmlld0NvbnRleHQoKTtcblxuICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5leGVjdXRlKChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9iaWxlLWV4dGVybmFsLXZhdWx0cycpID8/ICdbXScpIGFzIHN0cmluZ1tdO1xuICAgICAgaWYgKCFleGlzdGluZy5pbmNsdWRlcyhwYXRoKSkge1xuICAgICAgICBleGlzdGluZy5wdXNoKHBhdGgpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbW9iaWxlLWV4dGVybmFsLXZhdWx0cycsIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nKSk7XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbW9iaWxlLXNlbGVjdGVkLXZhdWx0JywgcGF0aCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgZW5hYmxlLXBsdWdpbi0ke3BhdGh9YCwgJ3RydWUnKTtcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0sIGRldmljZVZhdWx0UGF0aCk7XG5cbiAgICAvLyBXYWl0IGZvciByZWxvYWQgKyB2YXVsdCBpbml0aWFsaXphdGlvbi5cbiAgICBhd2FpdCB0aGlzLndhaXRGb3JMYXlvdXRSZWFkeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIGEgdmF1bHQgb24gbW9iaWxlIGJ5IHJlbW92aW5nIGl0IGZyb20gbG9jYWxTdG9yYWdlLlxuICAgKlxuICAgKiBQcmVzZXJ2ZXMgb3RoZXIgdmF1bHQgcmVnaXN0cmF0aW9ucy4gSWYgdGhlIHVucmVnaXN0ZXJlZCB2YXVsdCB3YXMgc2VsZWN0ZWQsXG4gICAqIHN3aXRjaGVzIHRvIHRoZSBmaXJzdCByZW1haW5pbmcgdmF1bHQgKG9yIGNsZWFycyB0aGUgc2VsZWN0aW9uKS5cbiAgICpcbiAgICogTm90ZTogVmF1bHQgZmlsZXMgb24gdGhlIGRldmljZSBhcmUgbm90IGRlbGV0ZWQuIFRoZSB0ZXN0IGhhcm5lc3Mgb3IgQ0lcbiAgICogZW52aXJvbm1lbnQgc2hvdWxkIGhhbmRsZSBkZXZpY2UgY2xlYW51cC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBvbiB0aGUgaG9zdCBtYWNoaW5lLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRldmljZVZhdWx0UGF0aCA9IHRoaXMuZ2V0RGV2aWNlVmF1bHRQYXRoKHZhdWx0UGF0aCk7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdlYlZpZXdDb250ZXh0KCk7XG5cbiAgICBhd2FpdCB0aGlzLmJyb3dzZXIuZXhlY3V0ZSgocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vYmlsZS1leHRlcm5hbC12YXVsdHMnKSA/PyAnW10nKSBhcyBzdHJpbmdbXTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gZXhpc3RpbmcuZmlsdGVyKCh2KSA9PiB2ICE9PSBwYXRoKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtb2JpbGUtZXh0ZXJuYWwtdmF1bHRzJywgSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWQpKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGBlbmFibGUtcGx1Z2luLSR7cGF0aH1gKTtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9iaWxlLXNlbGVjdGVkLXZhdWx0JykgPT09IHBhdGgpIHtcbiAgICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbW9iaWxlLXNlbGVjdGVkLXZhdWx0JywgZmlsdGVyZWRbMF0gPz8gJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdtb2JpbGUtc2VsZWN0ZWQtdmF1bHQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGRldmljZVZhdWx0UGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdGhlIGRyaXZlciB0byB0aGUgYFdFQlZJRVdfbWQub2JzaWRpYW5gIGNvbnRleHQuXG4gICAqXG4gICAqIFBvbGxzIHVudGlsIHRoZSBjb250ZXh0IGJlY29tZXMgYXZhaWxhYmxlICh0aGUgYXBwIG1heSBzdGlsbCBiZSBsb2FkaW5nKS5cbiAgICogVXNlcyB0aGUgYFdFQlZJRVdfbWQub2JzaWRpYW5gIGNvbnRleHQgc3BlY2lmaWNhbGx5IHRvIGF2b2lkIGNvbm5lY3RpbmdcbiAgICogdG8gQ2hyb21lIG9yIG90aGVyIFdlYlZpZXdzIG9uIHRoZSBkZXZpY2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZVdlYlZpZXdDb250ZXh0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFdFQlZJRVdfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICBjb25zb2xlLndhcm4oYFthcHBpdW0tdHJhbnNwb3J0XSBXYWl0aW5nIGZvciAke1dFQlZJRVdfQ09OVEVYVF9QUkVGSVh9IGNvbnRleHQgKHRpbWVvdXQ9JHtTdHJpbmcoV0VCVklFV19QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcykuLi5gKTtcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IGNvbnRleHRzID0gYXdhaXQgdGhpcy5icm93c2VyLmdldENvbnRleHRzKCk7XG4gICAgICBjb25zdCBvYnNpZGlhbkNvbnRleHQgPSBjb250ZXh0cy5maW5kKChjdHgpOiBjdHggaXMgc3RyaW5nID0+IHR5cGVvZiBjdHggPT09ICdzdHJpbmcnICYmIGN0eC5zdGFydHNXaXRoKFdFQlZJRVdfQ09OVEVYVF9QUkVGSVgpKTtcblxuICAgICAgaWYgKG9ic2lkaWFuQ29udGV4dCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYFthcHBpdW0tdHJhbnNwb3J0XSBGb3VuZCBXZWJWaWV3IGNvbnRleHQ6ICR7b2JzaWRpYW5Db250ZXh0fWApO1xuICAgICAgICBhd2FpdCB0aGlzLmJyb3dzZXIuc3dpdGNoQ29udGV4dChvYnNpZGlhbkNvbnRleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUud2FybihgW2FwcGl1bS10cmFuc3BvcnRdIFdlYlZpZXcgbm90IHJlYWR5LCBhdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkoY29udGV4dHMpfS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgIGF3YWl0IGRlbGF5KFdFQlZJRVdfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgTm8gJHtXRUJWSUVXX0NPTlRFWFRfUFJFRklYfSBjb250ZXh0IGZvdW5kIHdpdGhpbiAke1N0cmluZyhXRUJWSUVXX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgT2JzaWRpYW4gYXBwIGZ1bGx5IGxvYWRlZD9gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGhvc3Qtc2lkZSB2YXVsdCBwYXRoIHRvIHRoZSBkZXZpY2Utc2lkZSBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gQWJzb2x1dGUgcGF0aCBvbiB0aGUgaG9zdCBtYWNoaW5lLlxuICAgKiBAcmV0dXJucyBUaGUgZGV2aWNlLXNpZGUgdmF1bHQgcGF0aC5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGV2aWNlVmF1bHRQYXRoKHZhdWx0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy52YXVsdEJhc2VQYXRofSR7ZXh0cmFjdFZhdWx0TmFtZSh2YXVsdFBhdGgpfWA7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdW50aWwgYGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHlgIGlzIGB0cnVlYCBpbiB0aGUgV2ViVmlldy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckxheW91dFJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIExBWU9VVF9SRUFEWV9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIGNvbnNvbGUud2FybihgW2FwcGl1bS10cmFuc3BvcnRdIFdhaXRpbmcgZm9yIGxheW91dCByZWFkeSAodGltZW91dD0ke1N0cmluZyhMQVlPVVRfUkVBRFlfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc1JlYWR5ID0gYXdhaXQgdGhpcy5icm93c2VyLmV4ZWN1dGU8Ym9vbGVhbiwgW10+KFxuICAgICAgICAgICdyZXR1cm4gdHlwZW9mIGFwcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcHAud29ya3NwYWNlICYmIGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkgPT09IHRydWUnXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc1JlYWR5KSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbYXBwaXVtLXRyYW5zcG9ydF0gTGF5b3V0IGlzIHJlYWR5LicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFwcCBub3QgcmVhZHkgeWV0IChwYWdlIG1heSBiZSByZWxvYWRpbmcpLlxuICAgICAgfVxuXG4gICAgICBhd2FpdCBkZWxheShMQVlPVVRfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgT2JzaWRpYW4gbGF5b3V0IGRpZCBub3QgYmVjb21lIHJlYWR5IHdpdGhpbiAke1N0cmluZyhMQVlPVVRfUkVBRFlfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSB2YXVsdCBkaXJlY3RvcnkgbmFtZSBmcm9tIGEgaG9zdC1zaWRlIHZhdWx0IHBhdGguXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIEFic29sdXRlIHBhdGggb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqIEByZXR1cm5zIFRoZSBsYXN0IHBhdGggc2VnbWVudCAodmF1bHQgZGlyZWN0b3J5IG5hbWUpLlxuICovXG5mdW5jdGlvbiBleHRyYWN0VmF1bHROYW1lKHZhdWx0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHZhdWx0UGF0aC5yZXBsYWNlKC9bXFxcXC9dKyQvLCAnJyk7XG4gIGNvbnN0IGxhc3RTZXAgPSBNYXRoLm1heChub3JtYWxpemVkLmxhc3RJbmRleE9mKCcvJyksIG5vcm1hbGl6ZWQubGFzdEluZGV4T2YoJ1xcXFwnKSk7XG4gIHJldHVybiBub3JtYWxpemVkLnNsaWNlKGxhc3RTZXAgKyAxKTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnRkEsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sd0NBQXdDO0FBQzlDLE1BQU0sdUNBQXVDO0FBQzdDLE1BQU0sNkNBQTZDO0FBQ25ELE1BQU0sNENBQTRDO0FBQ2xELE1BQU0sb0NBQW9DO0FBQzFDLE1BQU0saUJBQWlCO0FBRXZCLE1BQU0sMEJBQWtEO0FBQUEsRUFDdEQsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUNQO0FBU08sTUFBTSxnQkFBNkM7QUFBQTtBQUFBLEVBRXhDLFdBQVc7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUErQjtBQUNoRCxTQUFLLFVBQVUsT0FBTztBQUN0QixTQUFL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
|
|
@@ -105,6 +105,7 @@ class DesktopCdpTransport {
|
|
|
105
105
|
* @param vaultPath - The vault path (used for vault registration check).
|
|
106
106
|
*/
|
|
107
107
|
async preflightCheck(vaultPath) {
|
|
108
|
+
console.warn(`[cdp-transport] Running preflight check for vault: ${vaultPath}`);
|
|
108
109
|
if (!(0, import_obsidian_config.isVaultRegistered)(vaultPath)) {
|
|
109
110
|
throw new Error(
|
|
110
111
|
`Vault is not registered in Obsidian: ${vaultPath}. Register the vault first with registerVault() or TempVault.register().`
|
|
@@ -115,6 +116,7 @@ class DesktopCdpTransport {
|
|
|
115
116
|
if (targets.length === 0) {
|
|
116
117
|
throw new Error("No page targets");
|
|
117
118
|
}
|
|
119
|
+
console.warn(`[cdp-transport] CDP reachable, ${String(targets.length)} target(s) found.`);
|
|
118
120
|
} catch {
|
|
119
121
|
await this.ensureObsidianRunning();
|
|
120
122
|
}
|
|
@@ -128,6 +130,7 @@ class DesktopCdpTransport {
|
|
|
128
130
|
* @param vaultPath - The absolute path to the vault folder.
|
|
129
131
|
*/
|
|
130
132
|
async registerVault(vaultPath) {
|
|
133
|
+
console.warn(`[cdp-transport] Registering vault: ${vaultPath}`);
|
|
131
134
|
const targets = await this.getPageTargets();
|
|
132
135
|
if (targets.length === 0) {
|
|
133
136
|
throw new Error("No Obsidian CDP targets available. Is Obsidian running?");
|
|
@@ -145,10 +148,12 @@ class DesktopCdpTransport {
|
|
|
145
148
|
} finally {
|
|
146
149
|
ipcWs.close();
|
|
147
150
|
}
|
|
151
|
+
console.warn(`[cdp-transport] Polling for vault target (timeout=${String(VAULT_POLL_TIMEOUT_IN_MILLISECONDS)}ms)...`);
|
|
148
152
|
const deadline = Date.now() + VAULT_POLL_TIMEOUT_IN_MILLISECONDS;
|
|
149
153
|
while (Date.now() < deadline) {
|
|
150
154
|
try {
|
|
151
155
|
await this.findTargetForVault(vaultPath);
|
|
156
|
+
console.warn("[cdp-transport] Vault target found.");
|
|
152
157
|
return;
|
|
153
158
|
} catch {
|
|
154
159
|
}
|
|
@@ -255,20 +260,23 @@ class DesktopCdpTransport {
|
|
|
255
260
|
* Launches Obsidian with `--remote-debugging-port` and polls until CDP becomes available.
|
|
256
261
|
*/
|
|
257
262
|
async ensureObsidianRunning() {
|
|
258
|
-
console.warn("Obsidian CDP not reachable. Starting Obsidian with remote debugging...");
|
|
263
|
+
console.warn("[cdp-transport] Obsidian CDP not reachable. Starting Obsidian with remote debugging...");
|
|
259
264
|
try {
|
|
260
265
|
await (0, import_exec.exec)(getObsidianLaunchCommand(this.cdpPort), { isQuiet: true });
|
|
261
266
|
} catch {
|
|
262
267
|
}
|
|
268
|
+
console.warn(`[cdp-transport] Polling for CDP endpoint at ${this.cdpUrl} (timeout=${String(AUTO_START_TIMEOUT_IN_MILLISECONDS)}ms)...`);
|
|
263
269
|
const deadline = Date.now() + AUTO_START_TIMEOUT_IN_MILLISECONDS;
|
|
264
270
|
while (Date.now() < deadline) {
|
|
265
271
|
await delay(AUTO_START_POLL_INTERVAL_IN_MILLISECONDS);
|
|
266
272
|
try {
|
|
267
273
|
const targets = await this.getPageTargets();
|
|
268
274
|
if (targets.length > 0) {
|
|
275
|
+
console.warn(`[cdp-transport] Obsidian CDP ready, ${String(targets.length)} target(s) found.`);
|
|
269
276
|
return;
|
|
270
277
|
}
|
|
271
278
|
} catch {
|
|
279
|
+
console.warn("[cdp-transport] CDP not ready yet, retrying...");
|
|
272
280
|
}
|
|
273
281
|
}
|
|
274
282
|
throw new Error(`Obsidian did not start within ${String(AUTO_START_TIMEOUT_IN_MILLISECONDS)}ms. Ensure Obsidian is installed and accessible.`);
|
|
@@ -387,4 +395,4 @@ function getObsidianLaunchCommand(port) {
|
|
|
387
395
|
0 && (module.exports = {
|
|
388
396
|
DesktopCdpTransport
|
|
389
397
|
});
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0RQIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBDaHJvbWUgRGV2VG9vbHMgUHJvdG9jb2xcbiAqIG92ZXIgV2ViU29ja2V0IGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICpcbiAqIE9ic2lkaWFuIGV4cG9zZXMgQ0RQIG9uIHBvcnQgODMxNSBieSBkZWZhdWx0LiBUaGlzIHRyYW5zcG9ydCBjb25uZWN0cyB0b1xuICogcGFnZSB0YXJnZXRzLCBzZW5kcyBgUnVudGltZS5ldmFsdWF0ZWAgY29tbWFuZHMsIGFuZCByb3V0ZXMgdG8gdGhlIGNvcnJlY3RcbiAqIHZhdWx0IHRhcmdldCB1c2luZyBgZ2V0QmFzZVBhdGgoKWAgcHJvYmluZy5cbiAqXG4gKiBBZHZhbnRhZ2VzIG92ZXIgQ0xJIHRyYW5zcG9ydDpcbiAqIC0gTm8gQ0xJIGJpbmFyeSBpbnN0YWxsYXRpb24gbmVlZGVkXG4gKiAtIE5vIFwiQ0xJIGVuYWJsZWRcIiBzZXR0aW5nIHJlcXVpcmVkIGluIE9ic2lkaWFuXG4gKiAtIExvd2VyIG92ZXJoZWFkIChXZWJTb2NrZXQgdnMuIHByb2Nlc3Mgc3Bhd24gcGVyIGV2YWwpXG4gKlxuICogUmVxdWlyZW1lbnRzOlxuICogLSBPYnNpZGlhbiBtdXN0IGJlIHJ1bm5pbmcgd2l0aCByZW1vdGUgZGVidWdnaW5nIGVuYWJsZWQgKHBvcnQgODMxNSlcbiAqIC0gTm9kZS5qcyAyMisgKHVzZXMgYnVpbHQtaW4gYFdlYlNvY2tldGAgYW5kIGBmZXRjaGAgZ2xvYmFscylcbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5pbXBvcnQgeyBpc1ZhdWx0UmVnaXN0ZXJlZCB9IGZyb20gJy4vb2JzaWRpYW4tY29uZmlnLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ0RQIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnIHtcbiAgLyoqXG4gICAqIENEUCBob3N0LiBEZWZhdWx0cyB0byBgJ2xvY2FsaG9zdCdgLlxuICAgKi9cbiAgY2RwSG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RQIHBvcnQuIERlZmF1bHRzIHRvIGA4MzE1YC5cbiAgICovXG4gIGNkcFBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBpbmRpdmlkdWFsIENEUCBjb21tYW5kcy5cbiAgICogRGVmYXVsdHMgdG8gYDMwMDAwYC5cbiAgICovXG4gIGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDZHBFeGNlcHRpb25EZXRhaWxzIHtcbiAgZXhjZXB0aW9uPzogQ2RwRXhjZXB0aW9uT2JqZWN0O1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDZHBFeGNlcHRpb25PYmplY3Qge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENkcFJlc3BvbnNlIHtcbiAgaWQ6IG51bWJlcjtcbiAgcmVzdWx0PzogQ2RwUmVzcG9uc2VSZXN1bHQ7XG59XG5cbmludGVyZmFjZSBDZHBSZXNwb25zZVJlc3VsdCB7XG4gIGV4Y2VwdGlvbkRldGFpbHM/OiBDZHBFeGNlcHRpb25EZXRhaWxzO1xuICByZXN1bHQ/OiBDZHBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENkcFRhcmdldCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHdlYlNvY2tldERlYnVnZ2VyVXJsOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDZHBWYWx1ZSB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU/OiB1bmtub3duO1xufVxuXG5jb25zdCBDRFBfREVGQVVMVF9QT1JUID0gODMxNTtcbmNvbnN0IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcblxuLyoqXG4gKiBUcmFuc3BvcnQgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBEZXNrdG9wIE9ic2lkaWFuIHZpYSBDaHJvbWUgRGV2VG9vbHMgUHJvdG9jb2wuXG4gKlxuICogQ29ubmVjdHMgdG8gT2JzaWRpYW4ncyBDRFAgV2ViU29ja2V0IGVuZHBvaW50LCBzZW5kcyBgUnVudGltZS5ldmFsdWF0ZWBcbiAqIGNvbW1hbmRzLCBhbmQgcm91dGVzIGV4cHJlc3Npb25zIHRvIHRoZSBjb3JyZWN0IHZhdWx0IHRhcmdldC5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BDZHBUcmFuc3BvcnQgaW1wbGVtZW50cyBPYnNpZGlhblRyYW5zcG9ydCB7XG4gIC8qKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhY3RpdmVWYXVsdFBhdGg6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkcFBvcnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHBVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIHByaXZhdGUgbWVzc2FnZUlkID0gMDtcbiAgcHJpdmF0ZSB3czogbnVsbCB8IFdlYlNvY2tldCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQ0RQIHRyYW5zcG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIENEUCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnPzogRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZykge1xuICAgIGNvbnN0IGhvc3QgPSBjb25maWc/LmNkcEhvc3QgPz8gJ2xvY2FsaG9zdCc7XG4gICAgdGhpcy5jZHBQb3J0ID0gY29uZmlnPy5jZHBQb3J0ID8/IENEUF9ERUZBVUxUX1BPUlQ7XG4gICAgdGhpcy5jZHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtTdHJpbmcodGhpcy5jZHBQb3J0KX1gO1xuICAgIHRoaXMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IGNvbmZpZz8uY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIG9mIHRoZSBhY3RpdmUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIHZpYSBDRFAgYFJ1bnRpbWUuZXZhbHVhdGVgLlxuICAgKlxuICAgKiBSb3V0ZXMgdG8gdGhlIGNvcnJlY3QgdmF1bHQgdGFyZ2V0IGJhc2VkIG9uIGBvcHRpb25zLmN3ZGAuXG4gICAqXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBFdmFsdWF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHJlc3VsdCBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXZhbHVhdGUoZXhwcmVzc2lvbjogc3RyaW5nLCBvcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgd3MgPSBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24ob3B0aW9ucy5jd2QpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZCh3cywgJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgICBhd2FpdFByb21pc2U6IHRydWUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLnJlc3VsdD8uZXhjZXB0aW9uRGV0YWlscykge1xuICAgICAgY29uc3QgZGVzYyA9IHJlc3BvbnNlLnJlc3VsdC5leGNlcHRpb25EZXRhaWxzLmV4Y2VwdGlvbj8uZGVzY3JpcHRpb25cbiAgICAgICAgPz8gcmVzcG9uc2UucmVzdWx0LmV4Y2VwdGlvbkRldGFpbHMudGV4dDtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ0RQIGV2YWx1YXRpb24gZXJyb3I6ICR7ZGVzY31gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRPYmogPSByZXNwb25zZS5yZXN1bHQ/LnJlc3VsdDtcbiAgICBpZiAoIXJlc3VsdE9iaiB8fCByZXN1bHRPYmoudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBOT19PVVRQVVQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhyZXN1bHRPYmoudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIENEUCBlbmRwb2ludCBpcyByZWFjaGFibGUgYW5kIGhhcyBPYnNpZGlhbiB0YXJnZXRzLlxuICAgKlxuICAgKiBJZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgYXR0ZW1wdHMgdG8gYXV0by1zdGFydCBpdCB2aWEgVVJJIHByb3RvY29sXG4gICAqIGFuZCBwb2xscyB1bnRpbCBDRFAgYmVjb21lcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCAodXNlZCBmb3IgdmF1bHQgcmVnaXN0cmF0aW9uIGNoZWNrKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcmVmbGlnaHRDaGVjayh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNWYXVsdFJlZ2lzdGVyZWQodmF1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmF1bHQgaXMgbm90IHJlZ2lzdGVyZWQgaW4gT2JzaWRpYW46ICR7dmF1bHRQYXRofS4gUmVnaXN0ZXIgdGhlIHZhdWx0IGZpcnN0IHdpdGggcmVnaXN0ZXJWYXVsdCgpIG9yIFRlbXBWYXVsdC5yZWdpc3RlcigpLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmdldFBhZ2VUYXJnZXRzKCk7XG4gICAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwYWdlIHRhcmdldHMnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlT2JzaWRpYW5SdW5uaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZhdWx0IHZpYSBFbGVjdHJvbiBJUEMgZXZhbHVhdGVkIHRocm91Z2ggQ0RQLlxuICAgKlxuICAgKiBVc2VzIGFuIGV4aXN0aW5nIE9ic2lkaWFuIHRhcmdldCB0byBzZW5kIHRoZSBgdmF1bHQtb3BlbmAgSVBDIGNvbW1hbmQsXG4gICAqIHRoZW4gcG9sbHMgdW50aWwgdGhlIG5ldyB2YXVsdCdzIHRhcmdldCBhcHBlYXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHRoaXMuZ2V0UGFnZVRhcmdldHMoKTtcbiAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gT2JzaWRpYW4gQ0RQIHRhcmdldHMgYXZhaWxhYmxlLiBJcyBPYnNpZGlhbiBydW5uaW5nPycpO1xuICAgIH1cblxuICAgIGNvbnN0IGlwY1dzID0gYXdhaXQgdGhpcy5jb25uZWN0VG9UYXJnZXQoZW5zdXJlTm9uTnVsbGFibGUodGFyZ2V0c1swXSkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpcGNFeHByID0gYnVpbGRMYXlvdXRSZWFkeUV4cHJlc3Npb24oXG4gICAgICAgIGB3aW5kb3cuZWxlY3Ryb24uaXBjUmVuZGVyZXIuc2VuZFN5bmMoJ3ZhdWx0LW9wZW4nLCAke0pTT04uc3RyaW5naWZ5KHZhdWx0UGF0aCl9LCBmYWxzZSk7YFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoaXBjV3MsICdSdW50aW1lLmV2YWx1YXRlJywge1xuICAgICAgICBhd2FpdFByb21pc2U6IHRydWUsXG4gICAgICAgIGV4cHJlc3Npb246IGlwY0V4cHIsXG4gICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpcGNXcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5maW5kVGFyZ2V0Rm9yVmF1bHQodmF1bHRQYXRoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFZhdWx0IHRhcmdldCBub3QgcmVhZHkgeWV0LlxuICAgICAgfVxuICAgICAgYXdhaXQgZGVsYXkoVkFVTFRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IGF0ICR7dmF1bHRQYXRofSBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoVkFVTFRfUE9MTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhIHZhdWx0IGJ5IGRlc3Ryb3lpbmcgaXRzIHdpbmRvdyBhbmQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVucmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCB0aGlzLmZpbmRUYXJnZXRGb3JWYXVsdCh2YXVsdFBhdGgpO1xuICAgICAgY29uc3Qgd3MgPSBhd2FpdCB0aGlzLmNvbm5lY3RUb1RhcmdldCh0YXJnZXQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVzdHJveUV4cHIgPSBidWlsZExheW91dFJlYWR5RXhwcmVzc2lvbihgXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAod2luZG93LmVsZWN0cm9uICYmIHdpbmRvdy5lbGVjdHJvbi5yZW1vdGUpIHtcbiAgICAgICAgICAgICAgd2luZG93LmVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICBgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zZW5kQ29tbWFuZCh3cywgJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgICAgICAgYXdhaXRQcm9taXNlOiB0cnVlLFxuICAgICAgICAgIGV4cHJlc3Npb246IGRlc3Ryb3lFeHByLFxuICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB3cy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gV2luZG93IG1heSBhbHJlYWR5IGJlIGNsb3NlZC5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hY3RpdmVWYXVsdFBhdGggPT09IHZhdWx0UGF0aCkge1xuICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGVsYXkoVkFVTFRfQ0xPU0VfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmdldFBhZ2VUYXJnZXRzKCk7XG4gICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd3MgPSBhd2FpdCB0aGlzLmNvbm5lY3RUb1RhcmdldChlbnN1cmVOb25OdWxsYWJsZSh0YXJnZXRzWzBdKSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZW1vdmVFeHByID0gYnVpbGRMYXlvdXRSZWFkeUV4cHJlc3Npb24oXG4gICAgICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtcmVtb3ZlJywgJHtKU09OLnN0cmluZ2lmeSh2YXVsdFBhdGgpfSk7YFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKHdzLCAnUnVudGltZS5ldmFsdWF0ZScsIHtcbiAgICAgICAgICBhd2FpdFByb21pc2U6IHRydWUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogcmVtb3ZlRXhwcixcbiAgICAgICAgICByZXR1cm5CeVZhbHVlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgd3MuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdHMgdG8gYSBDRFAgdGFyZ2V0J3MgV2ViU29ja2V0IGVuZHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIENEUCB0YXJnZXQgdG8gY29ubmVjdCB0by5cbiAgICogQHJldHVybnMgVGhlIG9wZW4gV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RUb1RhcmdldCh0YXJnZXQ6IENkcFRhcmdldCk6IFByb21pc2U8V2ViU29ja2V0PiB7XG4gICAgY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0KHRhcmdldC53ZWJTb2NrZXREZWJ1Z2dlclVybCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd3Mub25vcGVuID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgICAgd3Mub25lcnJvciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ0RQIHRhcmdldDogJHt0YXJnZXQud2ViU29ja2V0RGVidWdnZXJVcmx9YCkpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gd3M7XG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdHMgdGhlIGFjdGl2ZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53cz8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy53cyA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVWYXVsdFBhdGggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlcmUgaXMgYW4gYWN0aXZlIFdlYlNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSBjb3JyZWN0IHZhdWx0IHRhcmdldC5cbiAgICpcbiAgICogUmV1c2VzIHRoZSBleGlzdGluZyBjb25uZWN0aW9uIGlmIGl0IHRhcmdldHMgdGhlIHJlcXVlc3RlZCB2YXVsdC5cbiAgICogT3RoZXJ3aXNlLCBmaW5kcyB0aGUgY29ycmVjdCB0YXJnZXQgYW5kIHJlY29ubmVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCB0byB0YXJnZXQuXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbm5lY3Rpb24odmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFdlYlNvY2tldD4ge1xuICAgIGlmICh0aGlzLndzPy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiAmJiB0aGlzLmFjdGl2ZVZhdWx0UGF0aCA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy53cztcbiAgICB9XG5cbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IHRoaXMuZmluZFRhcmdldEZvclZhdWx0KHZhdWx0UGF0aCk7XG4gICAgdGhpcy53cyA9IGF3YWl0IHRoaXMuY29ubmVjdFRvVGFyZ2V0KHRhcmdldCk7XG4gICAgdGhpcy5hY3RpdmVWYXVsdFBhdGggPSB2YXVsdFBhdGg7XG4gICAgcmV0dXJuIHRoaXMud3M7XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoZXMgT2JzaWRpYW4gd2l0aCBgLS1yZW1vdGUtZGVidWdnaW5nLXBvcnRgIGFuZCBwb2xscyB1bnRpbCBDRFAgYmVjb21lcyBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZU9ic2lkaWFuUnVubmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ09ic2lkaWFuIENEUCBub3QgcmVhY2hhYmxlLiBTdGFydGluZyBPYnNpZGlhbiB3aXRoIHJlbW90ZSBkZWJ1Z2dpbmcuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCh0aGlzLmNkcFBvcnQpLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgbGF1bmNoIGNvbW1hbmQgbWF5IGZhaWwgb24gc29tZSBzeXN0ZW1zIFx1MjAxNCB3ZSdsbCBzdGlsbCB0cnkgcG9sbGluZy5cbiAgICB9XG5cbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGF3YWl0IGRlbGF5KEFVVE9fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHRoaXMuZ2V0UGFnZVRhcmdldHMoKTtcbiAgICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIE5vdCByZWFkeSB5ZXQuXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBPYnNpZGlhbiBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke1N0cmluZyhBVVRPX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy4gRW5zdXJlIE9ic2lkaWFuIGlzIGluc3RhbGxlZCBhbmQgYWNjZXNzaWJsZS5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgQ0RQIHRhcmdldCB0aGF0IGhhcyB0aGUgZ2l2ZW4gdmF1bHQgb3Blbi5cbiAgICpcbiAgICogRm9yIGEgc2luZ2xlIHRhcmdldCwgcmV0dXJucyBpdCBkaXJlY3RseS4gRm9yIG11bHRpcGxlIHRhcmdldHMsXG4gICAqIHByb2JlcyBlYWNoIGJ5IGV2YWx1YXRpbmcgYGdldEJhc2VQYXRoKClgIHRvIGZpbmQgdGhlIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0gdmF1bHRQYXRoIC0gVGhlIHZhdWx0IHBhdGggdG8gbWF0Y2guXG4gICAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBDRFAgdGFyZ2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmaW5kVGFyZ2V0Rm9yVmF1bHQodmF1bHRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENkcFRhcmdldD4ge1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmdldFBhZ2VUYXJnZXRzKCk7XG5cbiAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gT2JzaWRpYW4gQ0RQIHRhcmdldHMgZm91bmQnKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0YXJnZXRzWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlUGF0aCA9IGF3YWl0IHRoaXMucHJvYmVWYXVsdFBhdGgodGFyZ2V0KTtcbiAgICAgICAgaWYgKGJhc2VQYXRoID09PSB2YXVsdFBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTm90IGEgdmF1bHQgdGFyZ2V0IG9yIG5vdCByZWFkeS5cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENEUCB0YXJnZXQgZm91bmQgZm9yIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIHBhZ2UtdHlwZSB0YXJnZXRzIGZyb20gdGhlIENEUCBgL2pzb25gIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBwYWdlIHRhcmdldHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFBhZ2VUYXJnZXRzKCk6IFByb21pc2U8Q2RwVGFyZ2V0W10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuY2RwVXJsfS9qc29uYCk7XG4gICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDZHBUYXJnZXRbXTtcbiAgICByZXR1cm4gdGFyZ2V0cy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gJ3BhZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9iZXMgYSB0YXJnZXQgdG8gZGlzY292ZXIgd2hpY2ggdmF1bHQgcGF0aCBpdCBoYXMgb3Blbi5cbiAgICpcbiAgICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBXZWJTb2NrZXQgY29ubmVjdGlvbiwgZXZhbHVhdGVzIGBnZXRCYXNlUGF0aCgpYCxcbiAgICogYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBDRFAgdGFyZ2V0IHRvIHByb2JlLlxuICAgKiBAcmV0dXJucyBUaGUgdmF1bHQncyBiYXNlIHBhdGguXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2JlVmF1bHRQYXRoKHRhcmdldDogQ2RwVGFyZ2V0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB3cyA9IGF3YWl0IHRoaXMuY29ubmVjdFRvVGFyZ2V0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZCh3cywgJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgICAgIGV4cHJlc3Npb246ICdhcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpJyxcbiAgICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3RyaW5nKHJlc3BvbnNlLnJlc3VsdD8ucmVzdWx0Py52YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHdzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgQ0RQIGNvbW1hbmQgb3ZlciBXZWJTb2NrZXQgYW5kIHdhaXRzIGZvciB0aGUgcmVzcG9uc2UuXG4gICAqXG4gICAqIEBwYXJhbSB3cyAtIFRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIG1ldGhvZCAtIFRoZSBDRFAgbWV0aG9kIG5hbWUuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBUaGUgQ0RQIHJlc3BvbnNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZW5kQ29tbWFuZCh3czogV2ViU29ja2V0LCBtZXRob2Q6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8Q2RwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBpZCA9ICsrdGhpcy5tZXNzYWdlSWQ7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q2RwUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDRFAgY29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcodGhpcy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzKX1tczogJHttZXRob2R9YCkpO1xuICAgICAgfSwgdGhpcy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzKTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudDogTWVzc2FnZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1zZyA9IEpTT04ucGFyc2UoU3RyaW5nKGV2ZW50LmRhdGEpKSBhcyBDZHBSZXNwb25zZTtcbiAgICAgICAgaWYgKG1zZy5pZCA9PT0gaWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICAgIHJlc29sdmUobXNnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3cy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHsgaWQsIG1ldGhvZCwgcGFyYW1zIH0pKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbiBhc3luYyBJSUZFIHRoYXQgd2FpdHMgZm9yIGxheW91dCByZWFkeSBhbmQgZXhlY3V0ZXMgYSBib2R5LlxuICpcbiAqIEBwYXJhbSBib2R5IC0gVGhlIEphdmFTY3JpcHQgc3RhdGVtZW50cyB0byBleGVjdXRlLlxuICogQHJldHVybnMgVGhlIElJRkUgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF5b3V0UmVhZHlFeHByZXNzaW9uKGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgKGFzeW5jICgpID0+IHtcbiAgaWYgKCFhcHAud29ya3NwYWNlLmxheW91dFJlYWR5KSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeShyZXNvbHZlKSk7XG4gIH1cbiAgJHtib2R5fVxufSkoKWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29tbWFuZCB0byBsYXVuY2ggT2JzaWRpYW4gd2l0aCByZW1vdGUgZGVidWdnaW5nIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHBvcnQgLSBUaGUgQ0RQIHBvcnQgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIHNoZWxsIGNvbW1hbmQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRPYnNpZGlhbkxhdW5jaENvbW1hbmQocG9ydDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZmxhZyA9IGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gO1xuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGBzdGFydCBcIlwiIFwiJUxPQ0FMQVBQREFUQSVcXFxcUHJvZ3JhbXNcXFxcT2JzaWRpYW5cXFxcT2JzaWRpYW4uZXhlXCIgJHtmbGFnfWA7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gYC9BcHBsaWNhdGlvbnMvT2JzaWRpYW4uYXBwL0NvbnRlbnRzL01hY09TL09ic2lkaWFuICR7ZmxhZ30gJmA7XG4gIH1cblxuICByZXR1cm4gYG9ic2lkaWFuICR7ZmxhZ30gJmA7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCQSwwQkFBb0I7QUFPcEIsa0JBQXFCO0FBQ3JCLDZCQUFrQztBQUNsQyx5QkFBa0M7QUF1RGxDLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sa0NBQWtDO0FBQ3hDLE1BQU0sWUFBWTtBQUNsQixNQUFNLHNDQUFzQztBQUM1QyxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLG9DQUFvQztBQUMxQyxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLHFDQUFxQztBQVFwQyxNQUFNLG9CQUFpRDtBQUFBO0FBQUEsRUFFNUMsV0FBVztBQUFBLEVBQ25CLGtCQUFpQztBQUFBLEVBQ3hCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNULFlBQVk7QUFBQSxFQUNaLEtBQXVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3hCLFlBQVksUUFBb0M7QUFDckQsVUFBTSxPQUFPLFFBQVEsV0FBVztBQUNoQyxTQUFLLFVBQVUsUUFBUSxXQUFXO0FBQ2xDLFNBQUssU0FB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
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3AgQ0RQIHRyYW5zcG9ydCBcdTIwMTQgZXZhbHVhdGVzIGV4cHJlc3Npb25zIHZpYSBDaHJvbWUgRGV2VG9vbHMgUHJvdG9jb2xcbiAqIG92ZXIgV2ViU29ja2V0IGFuZCBtYW5hZ2VzIHZhdWx0cyB2aWEgRWxlY3Ryb24gSVBDLlxuICpcbiAqIE9ic2lkaWFuIGV4cG9zZXMgQ0RQIG9uIHBvcnQgODMxNSBieSBkZWZhdWx0LiBUaGlzIHRyYW5zcG9ydCBjb25uZWN0cyB0b1xuICogcGFnZSB0YXJnZXRzLCBzZW5kcyBgUnVudGltZS5ldmFsdWF0ZWAgY29tbWFuZHMsIGFuZCByb3V0ZXMgdG8gdGhlIGNvcnJlY3RcbiAqIHZhdWx0IHRhcmdldCB1c2luZyBgZ2V0QmFzZVBhdGgoKWAgcHJvYmluZy5cbiAqXG4gKiBBZHZhbnRhZ2VzIG92ZXIgQ0xJIHRyYW5zcG9ydDpcbiAqIC0gTm8gQ0xJIGJpbmFyeSBpbnN0YWxsYXRpb24gbmVlZGVkXG4gKiAtIE5vIFwiQ0xJIGVuYWJsZWRcIiBzZXR0aW5nIHJlcXVpcmVkIGluIE9ic2lkaWFuXG4gKiAtIExvd2VyIG92ZXJoZWFkIChXZWJTb2NrZXQgdnMuIHByb2Nlc3Mgc3Bhd24gcGVyIGV2YWwpXG4gKlxuICogUmVxdWlyZW1lbnRzOlxuICogLSBPYnNpZGlhbiBtdXN0IGJlIHJ1bm5pbmcgd2l0aCByZW1vdGUgZGVidWdnaW5nIGVuYWJsZWQgKHBvcnQgODMxNSlcbiAqIC0gTm9kZS5qcyAyMisgKHVzZXMgYnVpbHQtaW4gYFdlYlNvY2tldGAgYW5kIGBmZXRjaGAgZ2xvYmFscylcbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5pbXBvcnQgeyBpc1ZhdWx0UmVnaXN0ZXJlZCB9IGZyb20gJy4vb2JzaWRpYW4tY29uZmlnLmNqcyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMuY2pzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgQ0RQIHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnIHtcbiAgLyoqXG4gICAqIENEUCBob3N0LiBEZWZhdWx0cyB0byBgJ2xvY2FsaG9zdCdgLlxuICAgKi9cbiAgY2RwSG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RQIHBvcnQuIERlZmF1bHRzIHRvIGA4MzE1YC5cbiAgICovXG4gIGNkcFBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBpbmRpdmlkdWFsIENEUCBjb21tYW5kcy5cbiAgICogRGVmYXVsdHMgdG8gYDMwMDAwYC5cbiAgICovXG4gIGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDZHBFeGNlcHRpb25EZXRhaWxzIHtcbiAgZXhjZXB0aW9uPzogQ2RwRXhjZXB0aW9uT2JqZWN0O1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDZHBFeGNlcHRpb25PYmplY3Qge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENkcFJlc3BvbnNlIHtcbiAgaWQ6IG51bWJlcjtcbiAgcmVzdWx0PzogQ2RwUmVzcG9uc2VSZXN1bHQ7XG59XG5cbmludGVyZmFjZSBDZHBSZXNwb25zZVJlc3VsdCB7XG4gIGV4Y2VwdGlvbkRldGFpbHM/OiBDZHBFeGNlcHRpb25EZXRhaWxzO1xuICByZXN1bHQ/OiBDZHBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENkcFRhcmdldCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHdlYlNvY2tldERlYnVnZ2VyVXJsOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDZHBWYWx1ZSB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU/OiB1bmtub3duO1xufVxuXG5jb25zdCBDRFBfREVGQVVMVF9QT1JUID0gODMxNTtcbmNvbnN0IENPTU1BTkRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5jb25zdCBWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcbmNvbnN0IFZBVUxUX0NMT1NFX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbmNvbnN0IEFVVE9fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcblxuLyoqXG4gKiBUcmFuc3BvcnQgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCBEZXNrdG9wIE9ic2lkaWFuIHZpYSBDaHJvbWUgRGV2VG9vbHMgUHJvdG9jb2wuXG4gKlxuICogQ29ubmVjdHMgdG8gT2JzaWRpYW4ncyBDRFAgV2ViU29ja2V0IGVuZHBvaW50LCBzZW5kcyBgUnVudGltZS5ldmFsdWF0ZWBcbiAqIGNvbW1hbmRzLCBhbmQgcm91dGVzIGV4cHJlc3Npb25zIHRvIHRoZSBjb3JyZWN0IHZhdWx0IHRhcmdldC5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BDZHBUcmFuc3BvcnQgaW1wbGVtZW50cyBPYnNpZGlhblRyYW5zcG9ydCB7XG4gIC8qKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNNb2JpbGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhY3RpdmVWYXVsdFBhdGg6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkcFBvcnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHBVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIHByaXZhdGUgbWVzc2FnZUlkID0gMDtcbiAgcHJpdmF0ZSB3czogbnVsbCB8IFdlYlNvY2tldCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQ0RQIHRyYW5zcG9ydC5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIENEUCBjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnPzogRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZykge1xuICAgIGNvbnN0IGhvc3QgPSBjb25maWc/LmNkcEhvc3QgPz8gJ2xvY2FsaG9zdCc7XG4gICAgdGhpcy5jZHBQb3J0ID0gY29uZmlnPy5jZHBQb3J0ID8/IENEUF9ERUZBVUxUX1BPUlQ7XG4gICAgdGhpcy5jZHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtTdHJpbmcodGhpcy5jZHBQb3J0KX1gO1xuICAgIHRoaXMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IGNvbmZpZz8uY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIG9mIHRoZSBhY3RpdmUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIHZpYSBDRFAgYFJ1bnRpbWUuZXZhbHVhdGVgLlxuICAgKlxuICAgKiBSb3V0ZXMgdG8gdGhlIGNvcnJlY3QgdmF1bHQgdGFyZ2V0IGJhc2VkIG9uIGBvcHRpb25zLmN3ZGAuXG4gICAqXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIEphdmFTY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBFdmFsdWF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHJlc3VsdCBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXZhbHVhdGUoZXhwcmVzc2lvbjogc3RyaW5nLCBvcHRpb25zOiBUcmFuc3BvcnRFdmFsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgd3MgPSBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24ob3B0aW9ucy5jd2QpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZCh3cywgJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgICBhd2FpdFByb21pc2U6IHRydWUsXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLnJlc3VsdD8uZXhjZXB0aW9uRGV0YWlscykge1xuICAgICAgY29uc3QgZGVzYyA9IHJlc3BvbnNlLnJlc3VsdC5leGNlcHRpb25EZXRhaWxzLmV4Y2VwdGlvbj8uZGVzY3JpcHRpb25cbiAgICAgICAgPz8gcmVzcG9uc2UucmVzdWx0LmV4Y2VwdGlvbkRldGFpbHMudGV4dDtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ0RQIGV2YWx1YXRpb24gZXJyb3I6ICR7ZGVzY31gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRPYmogPSByZXNwb25zZS5yZXN1bHQ/LnJlc3VsdDtcbiAgICBpZiAoIXJlc3VsdE9iaiB8fCByZXN1bHRPYmoudHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBOT19PVVRQVVQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhyZXN1bHRPYmoudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIENEUCBlbmRwb2ludCBpcyByZWFjaGFibGUgYW5kIGhhcyBPYnNpZGlhbiB0YXJnZXRzLlxuICAgKlxuICAgKiBJZiBPYnNpZGlhbiBpcyBub3QgcnVubmluZywgYXR0ZW1wdHMgdG8gYXV0by1zdGFydCBpdCB2aWEgVVJJIHByb3RvY29sXG4gICAqIGFuZCBwb2xscyB1bnRpbCBDRFAgYmVjb21lcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgdmF1bHQgcGF0aCAodXNlZCBmb3IgdmF1bHQgcmVnaXN0cmF0aW9uIGNoZWNrKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcmVmbGlnaHRDaGVjayh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybihgW2NkcC10cmFuc3BvcnRdIFJ1bm5pbmcgcHJlZmxpZ2h0IGNoZWNrIGZvciB2YXVsdDogJHt2YXVsdFBhdGh9YCk7XG4gICAgaWYgKCFpc1ZhdWx0UmVnaXN0ZXJlZCh2YXVsdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWYXVsdCBpcyBub3QgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbjogJHt2YXVsdFBhdGh9LiBSZWdpc3RlciB0aGUgdmF1bHQgZmlyc3Qgd2l0aCByZWdpc3RlclZhdWx0KCkgb3IgVGVtcFZhdWx0LnJlZ2lzdGVyKCkuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHRoaXMuZ2V0UGFnZVRhcmdldHMoKTtcbiAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBhZ2UgdGFyZ2V0cycpO1xuICAgICAgfVxuICAgICAgY29uc29sZS53YXJuKGBbY2RwLXRyYW5zcG9ydF0gQ0RQIHJlYWNoYWJsZSwgJHtTdHJpbmcodGFyZ2V0cy5sZW5ndGgpfSB0YXJnZXQocykgZm91bmQuYCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZU9ic2lkaWFuUnVubmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSB2YXVsdCB2aWEgRWxlY3Ryb24gSVBDIGV2YWx1YXRlZCB0aHJvdWdoIENEUC5cbiAgICpcbiAgICogVXNlcyBhbiBleGlzdGluZyBPYnNpZGlhbiB0YXJnZXQgdG8gc2VuZCB0aGUgYHZhdWx0LW9wZW5gIElQQyBjb21tYW5kLFxuICAgKiB0aGVuIHBvbGxzIHVudGlsIHRoZSBuZXcgdmF1bHQncyB0YXJnZXQgYXBwZWFycy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJWYXVsdCh2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybihgW2NkcC10cmFuc3BvcnRdIFJlZ2lzdGVyaW5nIHZhdWx0OiAke3ZhdWx0UGF0aH1gKTtcbiAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgdGhpcy5nZXRQYWdlVGFyZ2V0cygpO1xuICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBPYnNpZGlhbiBDRFAgdGFyZ2V0cyBhdmFpbGFibGUuIElzIE9ic2lkaWFuIHJ1bm5pbmc/Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXBjV3MgPSBhd2FpdCB0aGlzLmNvbm5lY3RUb1RhcmdldChlbnN1cmVOb25OdWxsYWJsZSh0YXJnZXRzWzBdKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlwY0V4cHIgPSBidWlsZExheW91dFJlYWR5RXhwcmVzc2lvbihcbiAgICAgICAgYHdpbmRvdy5lbGVjdHJvbi5pcGNSZW5kZXJlci5zZW5kU3luYygndmF1bHQtb3BlbicsICR7SlNPTi5zdHJpbmdpZnkodmF1bHRQYXRoKX0sIGZhbHNlKTtgXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChpcGNXcywgJ1J1bnRpbWUuZXZhbHVhdGUnLCB7XG4gICAgICAgIGF3YWl0UHJvbWlzZTogdHJ1ZSxcbiAgICAgICAgZXhwcmVzc2lvbjogaXBjRXhwcixcbiAgICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlwY1dzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbY2RwLXRyYW5zcG9ydF0gUG9sbGluZyBmb3IgdmF1bHQgdGFyZ2V0ICh0aW1lb3V0PSR7U3RyaW5nKFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zKS4uLmApO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFZBVUxUX1BPTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5maW5kVGFyZ2V0Rm9yVmF1bHQodmF1bHRQYXRoKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbY2RwLXRyYW5zcG9ydF0gVmF1bHQgdGFyZ2V0IGZvdW5kLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmF1bHQgdGFyZ2V0IG5vdCByZWFkeSB5ZXQuXG4gICAgICB9XG4gICAgICBhd2FpdCBkZWxheShWQVVMVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgYXQgJHt2YXVsdFBhdGh9IGRpZCBub3QgYmVjb21lIHJlYWR5IHdpdGhpbiAke1N0cmluZyhWQVVMVF9QT0xMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIGEgdmF1bHQgYnkgZGVzdHJveWluZyBpdHMgd2luZG93IGFuZCByZW1vdmluZyBpdCBmcm9tIHRoZSByZWdpc3RyeS5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5yZWdpc3RlclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IHRoaXMuZmluZFRhcmdldEZvclZhdWx0KHZhdWx0UGF0aCk7XG4gICAgICBjb25zdCB3cyA9IGF3YWl0IHRoaXMuY29ubmVjdFRvVGFyZ2V0KHRhcmdldCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZXN0cm95RXhwciA9IGJ1aWxkTGF5b3V0UmVhZHlFeHByZXNzaW9uKGBcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZWxlY3Ryb24gJiYgd2luZG93LmVsZWN0cm9uLnJlbW90ZSkge1xuICAgICAgICAgICAgICB3aW5kb3cuZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIGApO1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKHdzLCAnUnVudGltZS5ldmFsdWF0ZScsIHtcbiAgICAgICAgICBhd2FpdFByb21pc2U6IHRydWUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogZGVzdHJveUV4cHIsXG4gICAgICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHdzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBXaW5kb3cgbWF5IGFscmVhZHkgYmUgY2xvc2VkLlxuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZVZhdWx0UGF0aCA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBhd2FpdCBkZWxheShWQVVMVF9DTE9TRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHRoaXMuZ2V0UGFnZVRhcmdldHMoKTtcbiAgICBpZiAodGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB3cyA9IGF3YWl0IHRoaXMuY29ubmVjdFRvVGFyZ2V0KGVuc3VyZU5vbk51bGxhYmxlKHRhcmdldHNbMF0pKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUV4cHIgPSBidWlsZExheW91dFJlYWR5RXhwcmVzc2lvbihcbiAgICAgICAgICBgd2luZG93LmVsZWN0cm9uLmlwY1JlbmRlcmVyLnNlbmRTeW5jKCd2YXVsdC1yZW1vdmUnLCAke0pTT04uc3RyaW5naWZ5KHZhdWx0UGF0aCl9KTtgXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2VuZENvbW1hbmQod3MsICdSdW50aW1lLmV2YWx1YXRlJywge1xuICAgICAgICAgIGF3YWl0UHJvbWlzZTogdHJ1ZSxcbiAgICAgICAgICBleHByZXNzaW9uOiByZW1vdmVFeHByLFxuICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB3cy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBhIENEUCB0YXJnZXQncyBXZWJTb2NrZXQgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgQ0RQIHRhcmdldCB0byBjb25uZWN0IHRvLlxuICAgKiBAcmV0dXJucyBUaGUgb3BlbiBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdFRvVGFyZ2V0KHRhcmdldDogQ2RwVGFyZ2V0KTogUHJvbWlzZTxXZWJTb2NrZXQ+IHtcbiAgICBjb25zdCB3cyA9IG5ldyBXZWJTb2NrZXQodGFyZ2V0LndlYlNvY2tldERlYnVnZ2VyVXJsKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB3cy5vbm9wZW4gPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICB3cy5vbmVycm9yID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gY29ubmVjdCB0byBDRFAgdGFyZ2V0OiAke3RhcmdldC53ZWJTb2NrZXREZWJ1Z2dlclVybH1gKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiB3cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0cyB0aGUgYWN0aXZlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndzPy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgdGhpcy53cy5jbG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLndzID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZVZhdWx0UGF0aCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGVyZSBpcyBhbiBhY3RpdmUgV2ViU29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIGNvcnJlY3QgdmF1bHQgdGFyZ2V0LlxuICAgKlxuICAgKiBSZXVzZXMgdGhlIGV4aXN0aW5nIGNvbm5lY3Rpb24gaWYgaXQgdGFyZ2V0cyB0aGUgcmVxdWVzdGVkIHZhdWx0LlxuICAgKiBPdGhlcndpc2UsIGZpbmRzIHRoZSBjb3JyZWN0IHRhcmdldCBhbmQgcmVjb25uZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSB2YXVsdCBwYXRoIHRvIHRhcmdldC5cbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQ29ubmVjdGlvbih2YXVsdFBhdGg6IHN0cmluZyk6IFByb21pc2U8V2ViU29ja2V0PiB7XG4gICAgaWYgKHRoaXMud3M/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOICYmIHRoaXMuYWN0aXZlVmF1bHRQYXRoID09PSB2YXVsdFBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLndzO1xuICAgIH1cblxuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgdGhpcy5maW5kVGFyZ2V0Rm9yVmF1bHQodmF1bHRQYXRoKTtcbiAgICB0aGlzLndzID0gYXdhaXQgdGhpcy5jb25uZWN0VG9UYXJnZXQodGFyZ2V0KTtcbiAgICB0aGlzLmFjdGl2ZVZhdWx0UGF0aCA9IHZhdWx0UGF0aDtcbiAgICByZXR1cm4gdGhpcy53cztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXVuY2hlcyBPYnNpZGlhbiB3aXRoIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgYW5kIHBvbGxzIHVudGlsIENEUCBiZWNvbWVzIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlT2JzaWRpYW5SdW5uaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybignW2NkcC10cmFuc3BvcnRdIE9ic2lkaWFuIENEUCBub3QgcmVhY2hhYmxlLiBTdGFydGluZyBPYnNpZGlhbiB3aXRoIHJlbW90ZSBkZWJ1Z2dpbmcuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKGdldE9ic2lkaWFuTGF1bmNoQ29tbWFuZCh0aGlzLmNkcFBvcnQpLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgbGF1bmNoIGNvbW1hbmQgbWF5IGZhaWwgb24gc29tZSBzeXN0ZW1zIFx1MjAxNCB3ZSdsbCBzdGlsbCB0cnkgcG9sbGluZy5cbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFtjZHAtdHJhbnNwb3J0XSBQb2xsaW5nIGZvciBDRFAgZW5kcG9pbnQgYXQgJHt0aGlzLmNkcFVybH0gKHRpbWVvdXQ9JHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMpLi4uYCk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBhd2FpdCBkZWxheShBVVRPX1NUQVJUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmdldFBhZ2VUYXJnZXRzKCk7XG4gICAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtjZHAtdHJhbnNwb3J0XSBPYnNpZGlhbiBDRFAgcmVhZHksICR7U3RyaW5nKHRhcmdldHMubGVuZ3RoKX0gdGFyZ2V0KHMpIGZvdW5kLmApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUud2FybignW2NkcC10cmFuc3BvcnRdIENEUCBub3QgcmVhZHkgeWV0LCByZXRyeWluZy4uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgT2JzaWRpYW4gZGlkIG5vdCBzdGFydCB3aXRoaW4gJHtTdHJpbmcoQVVUT19TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuIEVuc3VyZSBPYnNpZGlhbiBpcyBpbnN0YWxsZWQgYW5kIGFjY2Vzc2libGUuYCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIENEUCB0YXJnZXQgdGhhdCBoYXMgdGhlIGdpdmVuIHZhdWx0IG9wZW4uXG4gICAqXG4gICAqIEZvciBhIHNpbmdsZSB0YXJnZXQsIHJldHVybnMgaXQgZGlyZWN0bHkuIEZvciBtdWx0aXBsZSB0YXJnZXRzLFxuICAgKiBwcm9iZXMgZWFjaCBieSBldmFsdWF0aW5nIGBnZXRCYXNlUGF0aCgpYCB0byBmaW5kIHRoZSBtYXRjaC5cbiAgICpcbiAgICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSB2YXVsdCBwYXRoIHRvIG1hdGNoLlxuICAgKiBAcmV0dXJucyBUaGUgbWF0Y2hpbmcgQ0RQIHRhcmdldC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZFRhcmdldEZvclZhdWx0KHZhdWx0UGF0aDogc3RyaW5nKTogUHJvbWlzZTxDZHBUYXJnZXQ+IHtcbiAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgdGhpcy5nZXRQYWdlVGFyZ2V0cygpO1xuXG4gICAgaWYgKHRhcmdldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIE9ic2lkaWFuIENEUCB0YXJnZXRzIGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldHMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGFyZ2V0c1swXSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBhd2FpdCB0aGlzLnByb2JlVmF1bHRQYXRoKHRhcmdldCk7XG4gICAgICAgIGlmIChiYXNlUGF0aCA9PT0gdmF1bHRQYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIE5vdCBhIHZhdWx0IHRhcmdldCBvciBub3QgcmVhZHkuXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBDRFAgdGFyZ2V0IGZvdW5kIGZvciB2YXVsdDogJHt2YXVsdFBhdGh9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgbGlzdCBvZiBwYWdlLXR5cGUgdGFyZ2V0cyBmcm9tIHRoZSBDRFAgYC9qc29uYCBlbmRwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcGFnZSB0YXJnZXRzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRQYWdlVGFyZ2V0cygpOiBQcm9taXNlPENkcFRhcmdldFtdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLmNkcFVybH0vanNvbmApO1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2RwVGFyZ2V0W107XG4gICAgcmV0dXJuIHRhcmdldHMuZmlsdGVyKCh0KSA9PiB0LnR5cGUgPT09ICdwYWdlJyk7XG4gIH1cblxuICAvKipcbiAgICogUHJvYmVzIGEgdGFyZ2V0IHRvIGRpc2NvdmVyIHdoaWNoIHZhdWx0IHBhdGggaXQgaGFzIG9wZW4uXG4gICAqXG4gICAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgV2ViU29ja2V0IGNvbm5lY3Rpb24sIGV2YWx1YXRlcyBgZ2V0QmFzZVBhdGgoKWAsXG4gICAqIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgQ0RQIHRhcmdldCB0byBwcm9iZS5cbiAgICogQHJldHVybnMgVGhlIHZhdWx0J3MgYmFzZSBwYXRoLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9iZVZhdWx0UGF0aCh0YXJnZXQ6IENkcFRhcmdldCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgd3MgPSBhd2FpdCB0aGlzLmNvbm5lY3RUb1RhcmdldCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZENvbW1hbmQod3MsICdSdW50aW1lLmV2YWx1YXRlJywge1xuICAgICAgICBleHByZXNzaW9uOiAnYXBwLnZhdWx0LmFkYXB0ZXIuZ2V0QmFzZVBhdGgoKScsXG4gICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFN0cmluZyhyZXNwb25zZS5yZXN1bHQ/LnJlc3VsdD8udmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB3cy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIENEUCBjb21tYW5kIG92ZXIgV2ViU29ja2V0IGFuZCB3YWl0cyBmb3IgdGhlIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0gd3MgLSBUaGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgQ0RQIG1ldGhvZCBuYW1lLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIENEUCBtZXRob2QgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgVGhlIENEUCByZXNwb25zZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZENvbW1hbmQod3M6IFdlYlNvY2tldCwgbWV0aG9kOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPENkcFJlc3BvbnNlPiB7XG4gICAgY29uc3QgaWQgPSArK3RoaXMubWVzc2FnZUlkO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENkcFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ0RQIGNvbW1hbmQgdGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKHRoaXMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9bXM6ICR7bWV0aG9kfWApKTtcbiAgICAgIH0sIHRoaXMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IE1lc3NhZ2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtc2cgPSBKU09OLnBhcnNlKFN0cmluZyhldmVudC5kYXRhKSkgYXMgQ2RwUmVzcG9uc2U7XG4gICAgICAgIGlmIChtc2cuaWQgPT09IGlkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIHdzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgICByZXNvbHZlKG1zZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd3MuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7IGlkLCBtZXRob2QsIHBhcmFtcyB9KSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW4gYXN5bmMgSUlGRSB0aGF0IHdhaXRzIGZvciBsYXlvdXQgcmVhZHkgYW5kIGV4ZWN1dGVzIGEgYm9keS5cbiAqXG4gKiBAcGFyYW0gYm9keSAtIFRoZSBKYXZhU2NyaXB0IHN0YXRlbWVudHMgdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIFRoZSBJSUZFIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZExheW91dFJlYWR5RXhwcmVzc2lvbihib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYChhc3luYyAoKSA9PiB7XG4gIGlmICghYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeSkge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkocmVzb2x2ZSkpO1xuICB9XG4gICR7Ym9keX1cbn0pKClgO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgdG8gbGF1bmNoIE9ic2lkaWFuIHdpdGggcmVtb3RlIGRlYnVnZ2luZyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBwb3J0IC0gVGhlIENEUCBwb3J0IHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBzaGVsbCBjb21tYW5kIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZ2V0T2JzaWRpYW5MYXVuY2hDb21tYW5kKHBvcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGZsYWcgPSBgLS1yZW1vdGUtZGVidWdnaW5nLXBvcnQ9JHtTdHJpbmcocG9ydCl9YDtcblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBgc3RhcnQgXCJcIiBcIiVMT0NBTEFQUERBVEElXFxcXFByb2dyYW1zXFxcXE9ic2lkaWFuXFxcXE9ic2lkaWFuLmV4ZVwiICR7ZmxhZ31gO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGAvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbiAke2ZsYWd9ICZgO1xuICB9XG5cbiAgcmV0dXJuIGBvYnNpZGlhbiAke2ZsYWd9ICZgO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQkEsMEJBQW9CO0FBT3BCLGtCQUFxQjtBQUNyQiw2QkFBa0M7QUFDbEMseUJBQWtDO0FBdURsQyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLGtDQUFrQztBQUN4QyxNQUFNLFlBQVk7QUFDbEIsTUFBTSxzQ0FBc0M7QUFDNUMsTUFBTSxxQ0FBcUM7QUFDM0MsTUFBTSxvQ0FBb0M7QUFDMUMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxxQ0FBcUM7QUFRcEMsTUFBTSxvQkFBaUQ7QUFBQTtBQUFBLEVBRTVDLFdBQVc7QUFBQSxFQUNuQixrQkFBaUM7QUFBQSxFQUN4QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixLQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU94QixZQUFZLFFBQW9DO0FBQ3JELFVBQU0sT0FBTyxRQUFRLFdBQVc7QUFDaEMsU0FBSyxVQUFVLFFBQVEsV0FBVztBQUNsQyxTQUFLLFNBQVMsVUFBVSxJQUFJLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQztBQUNwRCxTQUFLLCtCQUErQixRQUFRLGdDQUFnQztBQUFBLEVBQzlFO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxNQUFhLFVBQXlCO0FBQ3BDLFNBQUssV0FBVztBQUNoQixVQUFNLFFBQVEsUUFB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QUM5RCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDakIsQ0FBQztBQUNELGFBQU8sT0FBTyxTQUFTLFFBQVEsUUFBUSxLQUFLO0FBQUEsSUFDOUMsVUFBRTtBQUNBLFNBQUcsTUFBTTtBQUFBLElBQ1g7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsTUFBYyxZQUFZLElBQWUsUUFBZ0IsUUFBdUQ7QUFDOUcsVUFBTSxLQUFLLEVBQUUsS0FBSztBQUVsQixXQUFPLElBQUksUUFBcUIsQ0FBQyxTQUFTLFdBQVc7QUFDbkQsWUFBTSxVQUFVLFdBQVcsTUFBTTtBQUMvQixXQUFHLG9CQUFvQixXQUFXLE9BQU87QUFDekMsZUFBTyxJQUFJLE1BQU0sK0JBQStCLE9BQU8sS0FBSyw0QkFBNEIsQ0FBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO0FBQUEsTUFDM0csR0FBRyxLQUFLLDRCQUE0QjtBQUVwQyxlQUFTLFFBQVEsT0FBMkI7QUFDMUMsY0FBTSxNQUFNLEtBQUssTUFBTSxPQUFPLE1BQU0sSUFBSSxDQUFDO0FBQ3pDLFlBQUksSUFBSSxPQUFPLElBQUk7QUFDakIsdUJBQWEsT0FBTztBQUNwQixhQUFHLG9CQUFvQixXQUFXLE9BQU87QUFDekMsa0JBQVEsR0FBRztBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBRUEsU0FBRyxpQkFBaUIsV0FBVyxPQUFPO0FBQ3RDLFNBQUcsS0FBSyxLQUFLLFVBQVUsRUFBRSxJQUFJLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFBQSxJQUNoRCxDQUFDO0FBQUEsRUFDSDtBQUNGO0FBUUEsU0FBUywyQkFBMkIsTUFBc0I7QUFDeEQsU0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSUwsSUFBSTtBQUFBO0FBRVI7QUFRQSxTQUFTLE1BQU0sSUFBMkI7QUFDeEMsU0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLGVBQVcsU0FBUyxFQUFFO0FBQUEsRUFDeEIsQ0FBQztBQUNIO0FBUUEsU0FBUyx5QkFBeUIsTUFBc0I7QUFDdEQsUUFBTSxPQUFPLDJCQUEyQixPQUFPLElBQUksQ0FBQztBQUVwRCxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxXQUFPLCtEQUErRCxJQUFJO0FBQUEsRUFDNUU7QUFFQSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsVUFBVTtBQUNqQyxXQUFPLHNEQUFzRCxJQUFJO0FBQUEsRUFDbkU7QUFFQSxTQUFPLFlBQVksSUFBSTtBQUN6QjsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|