obsidian-integration-testing 11.0.0 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/adb-device-list.cjs +54 -0
- package/dist/lib/cjs/adb-device-list.d.cts +72 -0
- package/dist/lib/cjs/android-sdk.cjs +52 -0
- package/dist/lib/cjs/android-sdk.d.cts +29 -0
- package/dist/lib/cjs/app-startup-progress.cjs +87 -0
- package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
- package/dist/lib/cjs/appium-server-marker.cjs +112 -0
- package/dist/lib/cjs/appium-server-marker.d.cts +103 -0
- package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
- package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
- package/dist/lib/cjs/cli.cjs +104 -19
- package/dist/lib/cjs/cli.d.cts +16 -8
- package/dist/lib/cjs/community-plugin-registry.cjs +52 -0
- package/dist/lib/cjs/community-plugin-registry.d.cts +116 -0
- package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
- package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
- package/dist/lib/cjs/config-directory.cjs +46 -0
- package/dist/lib/cjs/config-directory.d.cts +45 -0
- package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
- package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
- package/dist/lib/cjs/context-provider.cjs +12 -1
- package/dist/lib/cjs/context-provider.d.cts +26 -3
- package/dist/lib/cjs/demo-vault-bootstrap.cjs +148 -0
- package/dist/lib/cjs/demo-vault-bootstrap.d.cts +114 -0
- package/dist/lib/cjs/demo-vault-populate.cjs +38 -10
- package/dist/lib/cjs/demo-vault-populate.d.cts +70 -0
- package/dist/lib/cjs/device-readiness.cjs +38 -3
- package/dist/lib/cjs/device-readiness.d.cts +83 -9
- package/dist/lib/cjs/emulator-arguments.cjs +6 -2
- package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
- package/dist/lib/cjs/emulator-backend.cjs +71 -0
- package/dist/lib/cjs/emulator-backend.d.cts +76 -0
- package/dist/lib/cjs/emulator-liveness.cjs +72 -0
- package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
- package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
- package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/eval-in-obsidian.d.cts +42 -13
- package/dist/lib/cjs/global-setup-core.cjs +30 -30
- package/dist/lib/cjs/global-setup-core.d.cts +27 -2
- package/dist/lib/cjs/headless-vault-config.cjs +51 -0
- package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
- package/dist/lib/cjs/index.cjs +24 -1
- package/dist/lib/cjs/index.d.cts +14 -5
- package/dist/lib/cjs/installer-asset.cjs +1 -1
- package/dist/lib/cjs/installer-asset.d.cts +1 -1
- package/dist/lib/cjs/integration-setup-failed-error.cjs +62 -0
- package/dist/lib/cjs/integration-setup-failed-error.d.cts +66 -0
- package/dist/lib/cjs/jest/global-setup.cjs +2 -2
- package/dist/lib/cjs/jest/global-setup.d.cts +5 -1
- package/dist/lib/cjs/kill-process-tree.cjs +18 -7
- package/dist/lib/cjs/kill-process-tree.d.cts +10 -2
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +173 -0
- package/dist/lib/cjs/mobile-input.d.cts +156 -0
- package/dist/lib/cjs/namespace-bootstrap.cjs +92 -9
- package/dist/lib/cjs/obsidian-installer.cjs +1 -1
- package/dist/lib/cjs/obsidian-instance.cjs +52 -3
- package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
- package/dist/lib/cjs/obsidian-metadata.cjs +123 -17
- package/dist/lib/cjs/obsidian-metadata.d.cts +17 -6
- package/dist/lib/cjs/obsidian-version-switch.cjs +3 -3
- package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
- package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
- package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
- package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
- package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
- package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
- package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
- package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
- package/dist/lib/cjs/parent-liveness.cjs +42 -5
- package/dist/lib/cjs/parent-liveness.d.cts +37 -5
- package/dist/lib/cjs/port-owner.cjs +61 -0
- package/dist/lib/cjs/port-owner.d.cts +47 -0
- package/dist/lib/cjs/process-capture.cjs +62 -0
- package/dist/lib/cjs/process-capture.d.cts +83 -0
- package/dist/lib/cjs/process-exit-message.cjs +14 -8
- package/dist/lib/cjs/process-exit-message.d.cts +37 -3
- package/dist/lib/cjs/process-liveness.cjs +51 -0
- package/dist/lib/cjs/process-liveness.d.cts +18 -0
- package/dist/lib/cjs/release-catalog.cjs +73 -0
- package/dist/lib/cjs/release-catalog.d.cts +125 -0
- package/dist/lib/cjs/run-version-matrix.cjs +1 -1
- package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
- package/dist/lib/cjs/teardown-verdict.cjs +53 -0
- package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
- package/dist/lib/cjs/temporary-vault.cjs +43 -8
- package/dist/lib/cjs/temporary-vault.d.cts +47 -5
- package/dist/lib/cjs/transport-appium.cjs +223 -17
- package/dist/lib/cjs/transport-appium.d.cts +104 -3
- package/dist/lib/cjs/transport-desktop-cdp.cjs +201 -6
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +100 -0
- package/dist/lib/cjs/transport-factory.cjs +1165 -142
- package/dist/lib/cjs/transport-factory.d.cts +10 -1
- package/dist/lib/cjs/transport-options.cjs +11 -3
- package/dist/lib/cjs/transport-options.d.cts +131 -12
- package/dist/lib/cjs/transport.cjs +1 -1
- package/dist/lib/cjs/transport.d.cts +7 -1
- package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
- package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
- package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
- package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
- package/dist/lib/cjs/version-matrix.cjs +1 -1
- package/dist/lib/cjs/version-matrix.d.cts +2 -2
- package/dist/lib/cjs/vitest/global-setup.cjs +13 -7
- package/dist/lib/cjs/vitest/global-setup.d.cts +5 -1
- package/dist/lib/cjs/vitest/setup.cjs +2 -1
- package/dist/lib/cjs/vitest/setup.d.cts +5 -0
- package/dist/lib/cjs/vitest/typings.d.cts +6 -4
- package/dist/lib/cjs/webview-cdp.cjs +263 -0
- package/dist/lib/cjs/webview-cdp.d.cts +156 -0
- package/dist/lib/cjs/wedged-appium-server.cjs +113 -0
- package/dist/lib/cjs/wedged-appium-server.d.cts +187 -0
- package/dist/lib/esm/adb-device-list.d.mts +72 -0
- package/dist/lib/esm/adb-device-list.mjs +28 -0
- package/dist/lib/esm/android-sdk.d.mts +29 -0
- package/dist/lib/esm/android-sdk.mjs +18 -0
- package/dist/lib/esm/app-startup-progress.d.mts +128 -0
- package/dist/lib/esm/app-startup-progress.mjs +59 -0
- package/dist/lib/esm/appium-server-marker.d.mts +103 -0
- package/dist/lib/esm/appium-server-marker.mjs +89 -0
- package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
- package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
- package/dist/lib/esm/cli.d.mts +16 -8
- package/dist/lib/esm/cli.mjs +110 -19
- package/dist/lib/esm/community-plugin-registry.d.mts +116 -0
- package/dist/lib/esm/community-plugin-registry.mjs +23 -0
- package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
- package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
- package/dist/lib/esm/config-directory.d.mts +45 -0
- package/dist/lib/esm/config-directory.mjs +21 -0
- package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
- package/dist/lib/esm/connect-to-cdp.mjs +13 -7
- package/dist/lib/esm/context-provider.d.mts +26 -3
- package/dist/lib/esm/context-provider.mjs +10 -1
- package/dist/lib/esm/demo-vault-bootstrap.d.mts +114 -0
- package/dist/lib/esm/demo-vault-bootstrap.mjs +127 -0
- package/dist/lib/esm/demo-vault-populate.d.mts +70 -0
- package/dist/lib/esm/demo-vault-populate.mjs +35 -9
- package/dist/lib/esm/device-readiness.d.mts +83 -9
- package/dist/lib/esm/device-readiness.mjs +34 -2
- package/dist/lib/esm/emulator-arguments.d.mts +26 -0
- package/dist/lib/esm/emulator-arguments.mjs +6 -2
- package/dist/lib/esm/emulator-backend.d.mts +76 -0
- package/dist/lib/esm/emulator-backend.mjs +45 -0
- package/dist/lib/esm/emulator-liveness.d.mts +158 -0
- package/dist/lib/esm/emulator-liveness.mjs +47 -0
- package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
- package/dist/lib/esm/emulator-snapshot.mjs +32 -0
- package/dist/lib/esm/eval-in-obsidian.d.mts +42 -13
- package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
- package/dist/lib/esm/global-setup-core.d.mts +27 -2
- package/dist/lib/esm/global-setup-core.mjs +34 -35
- package/dist/lib/esm/headless-vault-config.d.mts +67 -0
- package/dist/lib/esm/headless-vault-config.mjs +31 -0
- package/dist/lib/esm/index.d.mts +14 -5
- package/dist/lib/esm/index.mjs +26 -2
- package/dist/lib/esm/installer-asset.d.mts +1 -1
- package/dist/lib/esm/installer-asset.mjs +1 -1
- package/dist/lib/esm/integration-setup-failed-error.d.mts +66 -0
- package/dist/lib/esm/integration-setup-failed-error.mjs +38 -0
- package/dist/lib/esm/jest/global-setup.d.mts +5 -1
- package/dist/lib/esm/jest/global-setup.mjs +2 -2
- package/dist/lib/esm/kill-process-tree.d.mts +10 -2
- package/dist/lib/esm/kill-process-tree.mjs +16 -6
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.d.mts +156 -0
- package/dist/lib/esm/mobile-input.mjs +144 -0
- package/dist/lib/esm/namespace-bootstrap.mjs +95 -9
- package/dist/lib/esm/obsidian-installer.mjs +1 -1
- package/dist/lib/esm/obsidian-instance.d.mts +12 -0
- package/dist/lib/esm/obsidian-instance.mjs +55 -3
- package/dist/lib/esm/obsidian-metadata.d.mts +17 -6
- package/dist/lib/esm/obsidian-metadata.mjs +123 -17
- package/dist/lib/esm/obsidian-version-switch.mjs +3 -3
- package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
- package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
- package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
- package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
- package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
- package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
- package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
- package/dist/lib/esm/owned-vault-seed.mjs +9 -5
- package/dist/lib/esm/parent-liveness.d.mts +37 -5
- package/dist/lib/esm/parent-liveness.mjs +42 -5
- package/dist/lib/esm/port-owner.d.mts +47 -0
- package/dist/lib/esm/port-owner.mjs +36 -0
- package/dist/lib/esm/process-capture.d.mts +83 -0
- package/dist/lib/esm/process-capture.mjs +38 -0
- package/dist/lib/esm/process-exit-message.d.mts +37 -3
- package/dist/lib/esm/process-exit-message.mjs +13 -8
- package/dist/lib/esm/process-liveness.d.mts +18 -0
- package/dist/lib/esm/process-liveness.mjs +17 -0
- package/dist/lib/esm/release-catalog.d.mts +125 -0
- package/dist/lib/esm/release-catalog.mjs +46 -0
- package/dist/lib/esm/run-version-matrix.d.mts +1 -1
- package/dist/lib/esm/run-version-matrix.mjs +1 -1
- package/dist/lib/esm/teardown-verdict.d.mts +69 -0
- package/dist/lib/esm/teardown-verdict.mjs +28 -0
- package/dist/lib/esm/temporary-vault.d.mts +47 -5
- package/dist/lib/esm/temporary-vault.mjs +43 -8
- package/dist/lib/esm/transport-appium.d.mts +104 -3
- package/dist/lib/esm/transport-appium.mjs +233 -17
- package/dist/lib/esm/transport-desktop-cdp.d.mts +100 -0
- package/dist/lib/esm/transport-desktop-cdp.mjs +208 -7
- package/dist/lib/esm/transport-factory.d.mts +10 -1
- package/dist/lib/esm/transport-factory.mjs +1220 -149
- package/dist/lib/esm/transport-options.d.mts +131 -12
- package/dist/lib/esm/transport-options.mjs +9 -2
- package/dist/lib/esm/transport.d.mts +7 -1
- package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
- package/dist/lib/esm/vault-plugin-install.mjs +20 -0
- package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
- package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
- package/dist/lib/esm/version-matrix.d.mts +2 -2
- package/dist/lib/esm/version-matrix.mjs +1 -1
- package/dist/lib/esm/vitest/global-setup.d.mts +5 -1
- package/dist/lib/esm/vitest/global-setup.mjs +14 -7
- package/dist/lib/esm/vitest/setup.d.mts +5 -0
- package/dist/lib/esm/vitest/setup.mjs +3 -1
- package/dist/lib/esm/vitest/typings.d.mts +6 -4
- package/dist/lib/esm/webview-cdp.d.mts +156 -0
- package/dist/lib/esm/webview-cdp.mjs +235 -0
- package/dist/lib/esm/wedged-appium-server.d.mts +187 -0
- package/dist/lib/esm/wedged-appium-server.mjs +86 -0
- package/package.json +25 -23
- package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
- package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
- package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
- package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
- package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
- package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
- package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
- package/dist/lib/esm/obsidian-namespace.mjs +0 -1
|
@@ -203,4 +203,4 @@ export {
|
|
|
203
203
|
ensureShellCached,
|
|
204
204
|
getCachedShellDirectory
|
|
205
205
|
};
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHVwc3RyZWFtIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdXNlZCBkaXJlY3RseSB3aGVuIHByZXNlbnQsXG4gKiBhdm9pZGluZyBhbnkgbmV0d29yayBsb29rdXAuIE90aGVyd2lzZSB0aGUgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdCBpc1xuICogcXVlcmllZCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldCBpcyBwaWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgaGlzdG9yaWNhbFxuICogZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCB0b28gaXMgdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmdcbiAqIGJvdGggdGVtcGxhdGVkIHNlcGFyYXRvciBmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYWtlZFVybCA9IHNlbGVjdEluc3RhbGxlckRvd25sb2FkVXJsKHsgZG93bmxvYWRzOiBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2FkcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gfSk7XG4gIGlmIChiYWtlZFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtiYWtlZFVybF07XG4gIH1cblxuICBjb25zdCBhc3NldE5hbWVzID0gYXdhaXQgZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uKTtcbiAgaWYgKGFzc2V0TmFtZXMpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZSh7IGFzc2V0TmFtZXMsIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLCB2ZXJzaW9uIH0pO1xuICAgIGlmIChzZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2Ake1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7c2VsZWN0ZWR9YF07XG4gICAgfVxuICAgIGxvZyhgW2luc3RhbGxlcl0gTm8gaW5zdGFsbGVyIGFzc2V0IG1hdGNoZWQgZm9yICR7dmVyc2lvbn07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gIH1cblxuICByZXR1cm4gYnVpbGRJbnN0YWxsZXJBc3NldE5hbWVDYW5kaWRhdGVzKHsgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSlcbiAgICAubWFwKChuYW1lKSA9PiBgJHtSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke25hbWV9YCk7XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgc3luY2hyb25vdXNseSwgdGhyb3dpbmcgb24gYSBub24temVybyBleGl0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHJ1bihjb21tYW5kOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJndW1lbnRzLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmR9ICR7Y29tbWFuZEFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBiYXNlbmFtZShhcmd1bWVudCkpLmpvaW4oJyAnKX0gKGV4aXQgJHtTdHJpbmcocmVzdWx0LnN0YXR1cyl9KWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFtQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsY0FBYztBQUN2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxPQUFPLGFBQWE7QUFFcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsMEJBQTBCO0FBS25DLE1BQU0sc0JBQXNCO0FBSzVCLE1BQU0sNEJBQTRCO0FBS2xDLE1BQU0sc0JBQXNCO0FB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
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEubWpzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHRoZSBgb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlc2AgYXNzZXRzKSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gcHJlc2VudCxcbiAqIGF2b2lkaW5nIGFueSBuZXR3b3JrIGxvb2t1cC4gT3RoZXJ3aXNlIHRoZSByZWxlYXNlJ3MgcmVhbCBhc3NldCBsaXN0IGlzXG4gKiBxdWVyaWVkIHNvIHRoZSBwbGF0Zm9ybS1jb3JyZWN0IGFzc2V0IGlzIHBpY2tlZCByZWdhcmRsZXNzIG9mIHRoZSBoaXN0b3JpY2FsXG4gKiBkb3QtdnMtaHlwaGVuIG5hbWluZzsgaWYgdGhhdCBjYWxsIHRvbyBpcyB1bmF2YWlsYWJsZSBpdCBmYWxscyBiYWNrIHRvIHRyeWluZ1xuICogYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJha2VkVXJsID0gc2VsZWN0SW5zdGFsbGVyRG93bmxvYWRVcmwoeyBkb3dubG9hZHM6IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzLCBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSB9KTtcbiAgaWYgKGJha2VkVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2Jha2VkVXJsXTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgY29tbWFuZEFyZ3VtZW50czogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHtjb21tYW5kQXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGJhc2VuYW1lKGFyZ3VtZW50KSkuam9pbignICcpfSAoZXhpdCAke1N0cmluZyhyZXN1bHQuc3RhdHVzKX0pYCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQW1CQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLE9BQU8sYUFBYTtBQUVwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFdBQVc7QUFDcEIsU0FBUywwQkFBMEI7QUFLbkMsTUFBTSxzQkFBc0I7QUFLNUIsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSxz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
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* is keyed to the user-data dir, the owned instance runs in parallel with the
|
|
10
10
|
* user's own Obsidian. Confirmed by the Phase 0 spike (see the project plan).
|
|
11
11
|
*/
|
|
12
|
+
import type { ProcessExitInfo } from './process-exit-message.mjs';
|
|
12
13
|
/**
|
|
13
14
|
* Parameters for {@link launchOwnedObsidianInstance}.
|
|
14
15
|
*/
|
|
@@ -57,6 +58,17 @@ export interface OwnedObsidianInstance {
|
|
|
57
58
|
The CDP remote-debugging port the instance was launched with.
|
|
58
59
|
*/
|
|
59
60
|
readonly port: number;
|
|
61
|
+
/**
|
|
62
|
+
* Returns how the instance died once it is no longer running, otherwise
|
|
63
|
+
* `undefined`. This is the in-process half of the answer; a test worker in
|
|
64
|
+
* another process reads the same facts from the exit marker
|
|
65
|
+
* (`owned-instance-exit-marker.ts`).
|
|
66
|
+
*/
|
|
67
|
+
readExitInfo(): ProcessExitInfo | undefined;
|
|
68
|
+
/**
|
|
69
|
+
Returns the tail of everything the instance wrote to stdout/stderr.
|
|
70
|
+
*/
|
|
71
|
+
readOutput(): string;
|
|
60
72
|
}
|
|
61
73
|
/**
|
|
62
74
|
* Launches an isolated, harness-owned Obsidian instance and waits until its CDP
|
|
@@ -2,31 +2,83 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { createServer } from "node:net";
|
|
3
3
|
import { killProcessTree } from "./kill-process-tree.mjs";
|
|
4
4
|
import { log } from "./log.mjs";
|
|
5
|
+
import {
|
|
6
|
+
clearOwnedInstanceExitMarker,
|
|
7
|
+
writeOwnedInstanceExitMarker
|
|
8
|
+
} from "./owned-instance-exit-marker.mjs";
|
|
9
|
+
import { OwnedInstanceExitedError } from "./owned-instance-exited-error.mjs";
|
|
5
10
|
import { startParentLivenessServer } from "./parent-liveness.mjs";
|
|
11
|
+
import { attachProcessCapture } from "./process-capture.mjs";
|
|
6
12
|
const DEFAULT_CDP_HOST = "127.0.0.1";
|
|
7
13
|
const CDP_READY_POLL_INTERVAL_IN_MILLISECONDS = 1e3;
|
|
8
14
|
const CDP_READY_TIMEOUT_IN_MILLISECONDS = 6e4;
|
|
15
|
+
const OBSIDIAN_OUTPUT_TAIL_MAX_LENGTH = 8e3;
|
|
9
16
|
async function launchOwnedObsidianInstance(params) {
|
|
10
17
|
const cdpHost = params.cdpHost ?? DEFAULT_CDP_HOST;
|
|
11
18
|
const port = await pickFreePort();
|
|
12
19
|
const cdpUrl = `http://${cdpHost}:${String(port)}`;
|
|
13
20
|
const livenessServer = await startParentLivenessServer();
|
|
21
|
+
clearOwnedInstanceExitMarker(port);
|
|
14
22
|
log(`[obsidian-instance] Launching owned Obsidian: userData=${params.userDataDirectory}, cdpPort=${String(port)}`);
|
|
15
23
|
const child = spawn(
|
|
16
24
|
params.exePath,
|
|
17
25
|
[`--user-data-dir=${params.userDataDirectory}`, `--remote-debugging-port=${String(port)}`, ...params.extraArguments ?? []],
|
|
18
|
-
{ detached: true, stdio: "ignore" }
|
|
26
|
+
{ detached: true, stdio: ["ignore", "pipe", "pipe"] }
|
|
19
27
|
);
|
|
28
|
+
const capture = attachProcessCapture(child, {
|
|
29
|
+
maxOutputLengthInCharacters: OBSIDIAN_OUTPUT_TAIL_MAX_LENGTH,
|
|
30
|
+
onChunk: (chunk) => {
|
|
31
|
+
const text = chunk.text.trimEnd();
|
|
32
|
+
if (text.length > 0) {
|
|
33
|
+
log(`[obsidian-instance:${chunk.stream}] ${text}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
let isKillExpected = false;
|
|
38
|
+
child.once("exit", (code, signal) => {
|
|
39
|
+
if (isKillExpected) {
|
|
40
|
+
log(`[obsidian-instance] Owned Obsidian exited as asked: pid=${String(child.pid)} code=${String(code)} signal=${String(signal)}`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
log(`[obsidian-instance] !!! OWNED OBSIDIAN EXITED: pid=${String(child.pid)} code=${String(code)} signal=${String(signal)}`);
|
|
44
|
+
writeOwnedInstanceExitMarker({
|
|
45
|
+
code,
|
|
46
|
+
outputTail: capture.readOutput(),
|
|
47
|
+
pid: child.pid,
|
|
48
|
+
port,
|
|
49
|
+
signal
|
|
50
|
+
});
|
|
51
|
+
});
|
|
20
52
|
child.unref();
|
|
21
53
|
try {
|
|
22
54
|
await waitForCdpReady(cdpUrl);
|
|
23
55
|
log(`[obsidian-instance] Owned Obsidian is serving CDP at ${cdpUrl}.`);
|
|
24
|
-
return {
|
|
56
|
+
return {
|
|
57
|
+
cdpUrl,
|
|
58
|
+
kill,
|
|
59
|
+
parentLivenessPort: livenessServer.port,
|
|
60
|
+
port,
|
|
61
|
+
readExitInfo: () => capture.readExitInfo(),
|
|
62
|
+
readOutput: () => capture.readOutput()
|
|
63
|
+
};
|
|
25
64
|
} catch (error) {
|
|
65
|
+
const exitInfo = capture.readExitInfo();
|
|
26
66
|
kill();
|
|
67
|
+
if (exitInfo) {
|
|
68
|
+
throw new OwnedInstanceExitedError({
|
|
69
|
+
cdpUrl,
|
|
70
|
+
code: exitInfo.code,
|
|
71
|
+
outputTail: capture.readOutput(),
|
|
72
|
+
pid: child.pid,
|
|
73
|
+
signal: exitInfo.signal,
|
|
74
|
+
spawnError: exitInfo.spawnError
|
|
75
|
+
});
|
|
76
|
+
}
|
|
27
77
|
throw error;
|
|
28
78
|
}
|
|
29
79
|
function kill() {
|
|
80
|
+
isKillExpected = true;
|
|
81
|
+
clearOwnedInstanceExitMarker(port);
|
|
30
82
|
livenessServer.close();
|
|
31
83
|
killProcessTree(child);
|
|
32
84
|
}
|
|
@@ -75,4 +127,4 @@ export {
|
|
|
75
127
|
launchOwnedObsidianInstance,
|
|
76
128
|
pickFreePort
|
|
77
129
|
};
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgeyBraWxsUHJvY2Vzc1RyZWUgfSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlciB9IGZyb20gJy4vcGFyZW50LWxpdmVuZXNzLm1qcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIENEUCBob3N0IHRvIGJpbmQvcG9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMjcuMC4wLjEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2RwSG9zdD86IHN0cmluZztcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSAoc2hlbGwpIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcHBlbmRlZCBhZnRlciBgLS11c2VyLWRhdGEtZGlyYCBhbmRcbiAgICogYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YCBcdTIwMTQgdXNlZCB0byBwYXNzIHRoZSBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIHdoZW5cbiAgICogdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkIGhpZGRlbiAob2ZmLXNjcmVlbikuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleHRyYUFyZ3VtZW50cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBpc29sYXRlZCB1c2VyLWRhdGEgZGlyIHRvIHBhc3MgdmlhIGAtLXVzZXItZGF0YS1kaXJgLlxuICAgKi9cblxuICByZWFkb25seSB1c2VyRGF0YURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcnVubmluZywgaGFybmVzcy1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lZE9ic2lkaWFuSW5zdGFuY2Uge1xuICAvKipcbiAgQmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vMTI3LjAuMC4xOjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICBLaWxscyB0aGUgaW5zdGFuY2UgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICAgKi9cbiAga2lsbCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBMb29wYmFjayBwb3J0IHRoZSBpbnN0YW5jZSdzIHJlbmRlcmVyIGNvbm5lY3RzIGJhY2sgdG8gc28gaXQgZGVzdHJveXNcbiAgICogaXRzZWxmIGlmIHRoaXMgaGFybmVzcyBwcm9jZXNzIGRpZXMgd2l0aG91dCBjbGVhbmluZyB1cC4gU2VlXG4gICAqIGBwYXJlbnQtbGl2ZW5lc3MudHNgIGZvciB3aHkgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYWxvbmUgaXMgbm90XG4gICAqIGVub3VnaC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudExpdmVuZXNzUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgQ0RQIHJlbW90ZS1kZWJ1Z2dpbmcgcG9ydCB0aGUgaW5zdGFuY2Ugd2FzIGxhdW5jaGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfQ0RQX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IENEUF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYW4gaXNvbGF0ZWQsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHdhaXRzIHVudGlsIGl0cyBDRFBcbiAqIGVuZHBvaW50IGlzIHNlcnZpbmcgcGFnZSB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMYXVuY2ggcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBydW5uaW5nIG93bmVkIGluc3RhbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBDRFAgZG9lcyBub3QgYmVjb21lIHJlYWNoYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2UoXG4gIHBhcmFtczogTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zXG4pOiBQcm9taXNlPE93bmVkT2JzaWRpYW5JbnN0YW5jZT4ge1xuICBjb25zdCBjZHBIb3N0ID0gcGFyYW1zLmNkcEhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVDtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IHBpY2tGcmVlUG9ydCgpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7Y2RwSG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICAvLyBMaXN0ZW4gQkVGT1JFIHNwYXduaW5nLCBzbyB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgY2FuIG5ldmVyIHJhY2UgdGhlIHNlcnZlclxuICAvLyBJbnRvIGEgZmFpbGVkIGNvbm5lY3QgKHdoaWNoIGl0IHRyZWF0cyBhcyBcIm5vIHdhdGNoZG9nXCIsIGxlYXZpbmcgdGhlIGluc3RhbmNlIGFsaXZlKS5cbiAgY29uc3QgbGl2ZW5lc3NTZXJ2ZXIgPSBhd2FpdCBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgIHBhcmFtcy5leGVQYXRoLFxuICAgIFtgLS11c2VyLWRhdGEtZGlyPSR7cGFyYW1zLnVzZXJEYXRhRGlyZWN0b3J5fWAsIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gLCAuLi4ocGFyYW1zLmV4dHJhQXJndW1lbnRzID8/IFtdKV0sXG4gICAgeyBkZXRhY2hlZDogdHJ1ZSwgc3RkaW86ICdpZ25vcmUnIH1cbiAgKTtcbiAgY2hpbGQudW5yZWYoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDZHBSZWFkeShjZHBVcmwpO1xuICAgIGxvZyhgW29ic2lkaWFuLWluc3RhbmNlXSBPd25lZCBPYnNpZGlhbiBpcyBzZXJ2aW5nIENEUCBhdCAke2NkcFVybH0uYCk7XG4gICAgcmV0dXJuIHsgY2RwVXJsLCBraWxsLCBwYXJlbnRMaXZlbmVzc1BvcnQ6IGxpdmVuZXNzU2VydmVyLnBvcnQsIHBvcnQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBraWxsKCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiBraWxsKCk6IHZvaWQge1xuICAgIGxpdmVuZXNzU2VydmVyLmNsb3NlKCk7XG4gICAga2lsbFByb2Nlc3NUcmVlKGNoaWxkKTtcbiAgfVxufVxuXG4vKipcbiAqIFBpY2tzIGEgZnJlZSBUQ1AgcG9ydCBieSBiaW5kaW5nIHRvIHBvcnQgYDBgIGFuZCByZWFkaW5nIHRoZSBhc3NpZ25lZCBwb3J0LlxuICpcbiAqIFRoZXJlIGlzIGEgc21hbGwgdGltZS1vZi1jaGVjay90aW1lLW9mLXVzZSB3aW5kb3cgYmV0d2VlbiByZWxlYXNpbmcgdGhlIHBvcnRcbiAqIGhlcmUgYW5kIE9ic2lkaWFuIGJpbmRpbmcgaXQ7IGluIHByYWN0aWNlIGl0IGlzIG5lZ2xpZ2libGUgZm9yIHRlc3QgcnVucy5cbiAqXG4gKiBAcmV0dXJucyBBIGZyZWUgVENQIHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrRnJlZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oMCwgREVGQVVMVF9DRFBfSE9TVCwgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgYSBmcmVlIHBvcnQuJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IGFkZHJlc3M7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHBvcnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBvbGxzIHRoZSBDRFAgYC9qc29uYCBlbmRwb2ludCB1bnRpbCBhdCBsZWFzdCBvbmUgcGFnZSB0YXJnZXQgYXBwZWFycy5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGJhc2UgQ0RQIFVSTC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNkcFJlYWR5KGNkcFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NkcFVybH0vanNvbmApO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDZHBUYXJnZXRbXTtcbiAgICAgIGlmICh0YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnR5cGUgPT09ICdwYWdlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRW5kcG9pbnQgbm90IHVwIHlldCBcdTIwMTQga2VlcCBwb2xsaW5nLlxuICAgIH1cbiAgICBhd2FpdCBkZWxheShDRFBfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgT3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZGlkIG5vdCBleHBvc2UgQ0RQIGF0ICR7Y2RwVXJsfSB3aXRoaW4gJHtTdHJpbmcoQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFjQSxTQUFTLGFBQWE7QUFDdEIsU0FBUyxvQkFBb0I7QUFFN0IsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsaUNBQWlDO0FBNEQxQyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLDBDQUEwQztBQUNoRCxNQUFNLG9DQUFvQztBQWMxQyxlQUFzQiw0QkFDcEIsUUFDZ0M7QUFDaEMsUUFBTSxVQUFVLE9BQU8sV0FBVztBQUNsQyxRQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFFBQU0sU0FBUyxVQUFVLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQztBQUloRCxRQUFNLGlCQUFpQixNQUFNLDBCQUEwQjtBQUV2RCxNQUFJLDBEQUEwRCxPQUFPLGlCQUFpQixhQUFhLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDakgsUUFBTSxRQUFRO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxDQUFDLG1CQUFtQixPQUFPLGlCQUFpQixJQUFJLDJCQUEyQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUksT0FBTyxrQkFBa0IsQ0FBQyxDQUFFO0FBQUEsSUFDM0gsRUFBRSxVQUFVLE1BQU0sT0FBTyxTQUFTO0FBQUEsRUFDcEM7QUFDQSxRQUFNLE1BQU07QUFFWixNQUFJO0FBQ0YsVUFBTSxnQkFBZ0IsTUFBTTtBQUM1QixRQUFJLHdEQUF3RCxNQUFNLEdBQUc7QUFDckUsV0FBTyxFQUFFLFFBQVEsTUFBTSxvQkFBb0IsZUFBZSxNQUFNLEtBQUs7QUFBQSxFQUN2RSxTQUFTLE9BQWdCO0FBQ3ZCLFNBQUs7QUFDTCxVQUFNO0FBQUEsRUFDUjtBQUVBLFdBQVMsT0FBYTtBQUNwQixtQkFBZSxNQUFNO0FBQ3JCLG9CQUFnQixLQUFLO0FBQUEsRUFDdkI7QUFDRjtBQVVPLFNBQVMsZUFBZ0M7QUFDOUMsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsVUFBTSxTQUFTLGFBQWE7QUFDNUIsV0FBTyxLQUFLLFNBQVMsTUFBTTtBQUMzQixXQUFPLE9BQU8sR0FBRyxrQkFBa0IsTUFBTTtBQUN2QyxZQUFNLFVBQVUsT0FBTyxRQUFRO0FBQy9CLFVBQUksWUFBWSxRQUFRLE9BQU8sWUFBWSxVQUFVO0FBQ25ELGVBQU8sTUFBTTtBQUNiLGVBQU8sSUFBSSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BEO0FBQUEsTUFDRjtBQUNBLFlBQU0sRUFBRSxLQUFLLElBQUk7QUFDakIsYUFBTyxNQUFNLE1BQU07QUFDakIsZ0JBQVEsSUFBSTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBUUEsU0FBUyxNQUFNLElBQTJCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixlQUFXLFNBQVMsRUFBRTtBQUFBLEVBQ3hCLENBQUM7QUFDSDtBQU9BLGVBQWUsZ0JBQWdCLFFBQStCO0FBQzVELFFBQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUM5QixTQUFPLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFDNUIsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU87QUFDN0MsWUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLO0FBQ3BDLFVBQUksUUFBUSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQ3BEO0FBQUEsTUFDRjtBQUFBLElBQ0YsUUFBUTtBQUFBLElBRVI7QUFDQSxVQUFNLE1BQU0sdUNBQXVDO0FBQUEsRUFDckQ7QUFDQSxRQUFNLElBQUk7QUFBQSxJQUNSLGlEQUFpRCxNQUFNLFdBQVcsT0FBTyxpQ0FBaUMsQ0FBQztBQUFBLEVBQzdHO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NFeGl0SW5mbyB9IGZyb20gJy4vcHJvY2Vzcy1leGl0LW1lc3NhZ2UubWpzJztcblxuaW1wb3J0IHsga2lsbFByb2Nlc3NUcmVlIH0gZnJvbSAnLi9raWxsLXByb2Nlc3MtdHJlZS5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7XG4gIGNsZWFyT3duZWRJbnN0YW5jZUV4aXRNYXJrZXIsXG4gIHdyaXRlT3duZWRJbnN0YW5jZUV4aXRNYXJrZXJcbn0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0LW1hcmtlci5tanMnO1xuaW1wb3J0IHsgT3duZWRJbnN0YW5jZUV4aXRlZEVycm9yIH0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0ZWQtZXJyb3IubWpzJztcbmltcG9ydCB7IHN0YXJ0UGFyZW50TGl2ZW5lc3NTZXJ2ZXIgfSBmcm9tICcuL3BhcmVudC1saXZlbmVzcy5tanMnO1xuaW1wb3J0IHsgYXR0YWNoUHJvY2Vzc0NhcHR1cmUgfSBmcm9tICcuL3Byb2Nlc3MtY2FwdHVyZS5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBDRFAgaG9zdCB0byBiaW5kL3BvbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnMTI3LjAuMC4xJ2BcbiAgICovXG4gIHJlYWRvbmx5IGNkcEhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUgKHNoZWxsKSB0byBsYXVuY2guXG4gICAqL1xuICByZWFkb25seSBleGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYXBwZW5kZWQgYWZ0ZXIgYC0tdXNlci1kYXRhLWRpcmAgYW5kXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgXHUyMDE0IHVzZWQgdG8gcGFzcyB0aGUga2VlcC1hbGl2ZSBDaHJvbWl1bSBmbGFncyB3aGVuXG4gICAqIHRoZSBpbnN0YW5jZSBpcyBsYXVuY2hlZCBoaWRkZW4gKG9mZi1zY3JlZW4pLiBFbXB0eSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFBcmd1bWVudHM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgaXNvbGF0ZWQgdXNlci1kYXRhIGRpciB0byBwYXNzIHZpYSBgLS11c2VyLWRhdGEtZGlyYC5cbiAgICovXG5cbiAgcmVhZG9ubHkgdXNlckRhdGFEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJ1bm5pbmcsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhbkluc3RhbmNlIHtcbiAgLyoqXG4gIEJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovLzEyNy4wLjAuMTo1MTg4OGAuXG4gICAqL1xuICByZWFkb25seSBjZHBVcmw6IHN0cmluZztcblxuICAvKipcbiAgS2lsbHMgdGhlIGluc3RhbmNlIGFuZCBpdHMgZW50aXJlIHByb2Nlc3MgdHJlZS5cbiAgICovXG4gIGtpbGwoKTogdm9pZDtcblxuICAvKipcbiAgICogTG9vcGJhY2sgcG9ydCB0aGUgaW5zdGFuY2UncyByZW5kZXJlciBjb25uZWN0cyBiYWNrIHRvIHNvIGl0IGRlc3Ryb3lzXG4gICAqIGl0c2VsZiBpZiB0aGlzIGhhcm5lc3MgcHJvY2VzcyBkaWVzIHdpdGhvdXQgY2xlYW5pbmcgdXAuIFNlZVxuICAgKiBgcGFyZW50LWxpdmVuZXNzLnRzYCBmb3Igd2h5IHRoZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGFsb25lIGlzIG5vdFxuICAgKiBlbm91Z2guXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRMaXZlbmVzc1BvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIENEUCByZW1vdGUtZGVidWdnaW5nIHBvcnQgdGhlIGluc3RhbmNlIHdhcyBsYXVuY2hlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGhvdyB0aGUgaW5zdGFuY2UgZGllZCBvbmNlIGl0IGlzIG5vIGxvbmdlciBydW5uaW5nLCBvdGhlcndpc2VcbiAgICogYHVuZGVmaW5lZGAuIFRoaXMgaXMgdGhlIGluLXByb2Nlc3MgaGFsZiBvZiB0aGUgYW5zd2VyOyBhIHRlc3Qgd29ya2VyIGluXG4gICAqIGFub3RoZXIgcHJvY2VzcyByZWFkcyB0aGUgc2FtZSBmYWN0cyBmcm9tIHRoZSBleGl0IG1hcmtlclxuICAgKiAoYG93bmVkLWluc3RhbmNlLWV4aXQtbWFya2VyLnRzYCkuXG4gICAqL1xuICByZWFkRXhpdEluZm8oKTogUHJvY2Vzc0V4aXRJbmZvIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBSZXR1cm5zIHRoZSB0YWlsIG9mIGV2ZXJ5dGhpbmcgdGhlIGluc3RhbmNlIHdyb3RlIHRvIHN0ZG91dC9zdGRlcnIuXG4gICAqL1xuICByZWFkT3V0cHV0KCk6IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgQ0RQX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTAwMDtcbmNvbnN0IENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwXzAwMDtcbmNvbnN0IE9CU0lESUFOX09VVFBVVF9UQUlMX01BWF9MRU5HVEggPSA4MDAwO1xuXG5pbnRlcmZhY2UgQ2RwVGFyZ2V0IHtcbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIExhdW5jaGVzIGFuIGlzb2xhdGVkLCBoYXJuZXNzLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGFuZCB3YWl0cyB1bnRpbCBpdHMgQ0RQXG4gKiBlbmRwb2ludCBpcyBzZXJ2aW5nIHBhZ2UgdGFyZ2V0cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gTGF1bmNoIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgcnVubmluZyBvd25lZCBpbnN0YW5jZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgQ0RQIGRvZXMgbm90IGJlY29tZSByZWFjaGFibGUgd2l0aGluIHRoZSB0aW1lb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlKFxuICBwYXJhbXM6IExhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZVBhcmFtc1xuKTogUHJvbWlzZTxPd25lZE9ic2lkaWFuSW5zdGFuY2U+IHtcbiAgY29uc3QgY2RwSG9zdCA9IHBhcmFtcy5jZHBIb3N0ID8/IERFRkFVTFRfQ0RQX0hPU1Q7XG4gIGNvbnN0IHBvcnQgPSBhd2FpdCBwaWNrRnJlZVBvcnQoKTtcbiAgY29uc3QgY2RwVXJsID0gYGh0dHA6Ly8ke2NkcEhvc3R9OiR7U3RyaW5nKHBvcnQpfWA7XG5cbiAgLy8gTGlzdGVuIEJFRk9SRSBzcGF3bmluZywgc28gdGhlIHJlbmRlcmVyIHdhdGNoZG9nIGNhbiBuZXZlciByYWNlIHRoZSBzZXJ2ZXJcbiAgLy8gSW50byBhIGZhaWxlZCBjb25uZWN0ICh3aGljaCBpdCB0cmVhdHMgYXMgXCJubyB3YXRjaGRvZ1wiLCBsZWF2aW5nIHRoZSBpbnN0YW5jZSBhbGl2ZSkuXG4gIGNvbnN0IGxpdmVuZXNzU2VydmVyID0gYXdhaXQgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlcigpO1xuXG4gIC8vIFBvcnRzIGFyZSByZWN5Y2xlZCBieSB0aGUgT1MsIHNvIGFuIG9sZGVyIGluc3RhbmNlJ3MgZGVhdGggcmVjb3JkZWQgb24gdGhpc1xuICAvLyBQb3J0IHdvdWxkIG90aGVyd2lzZSBiZSByZWFkIGFzIHRoaXMgb25lJ3MuXG4gIGNsZWFyT3duZWRJbnN0YW5jZUV4aXRNYXJrZXIocG9ydCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICAvKlxuICAgKiBQaXBlZCByYXRoZXIgdGhhbiBgJ2lnbm9yZSdgOiBhbiBFbGVjdHJvbi9DaHJvbWl1bSBmYXRhbCBpcyB3cml0dGVuIHRvXG4gICAqIHN0ZGVyciBhbmQgbm93aGVyZSBlbHNlLCBhbmQgZGlzY2FyZGluZyBpdCBpcyB3aHkgYSBkeWluZyBpbnN0YW5jZSB1c2VkIHRvXG4gICAqIGJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBoZWFsdGh5IG9uZS4gVGhlIGNhcHR1cmUgZHJhaW5zIGJvdGggcGlwZXMgZm9yXG4gICAqIHRoZSBwcm9jZXNzJ3Mgd2hvbGUgbGlmZSAoYSBmdWxsIHBpcGUgYnVmZmVyIHdvdWxkIGJsb2NrIHRoZSBhcHAgaXRzZWxmKSBhbmRcbiAgICoga2VlcHMgb25seSBhIGJvdW5kZWQgdGFpbC5cbiAgICovXG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oXG4gICAgcGFyYW1zLmV4ZVBhdGgsXG4gICAgW2AtLXVzZXItZGF0YS1kaXI9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9YCwgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0PSR7U3RyaW5nKHBvcnQpfWAsIC4uLihwYXJhbXMuZXh0cmFBcmd1bWVudHMgPz8gW10pXSxcbiAgICB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10gfVxuICApO1xuICBjb25zdCBjYXB0dXJlID0gYXR0YWNoUHJvY2Vzc0NhcHR1cmUoY2hpbGQsIHtcbiAgICBtYXhPdXRwdXRMZW5ndGhJbkNoYXJhY3RlcnM6IE9CU0lESUFOX09VVFBVVF9UQUlMX01BWF9MRU5HVEgsXG4gICAgb25DaHVuazogKGNodW5rKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gY2h1bmsudGV4dC50cmltRW5kKCk7XG4gICAgICBpZiAodGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZyhgW29ic2lkaWFuLWluc3RhbmNlOiR7Y2h1bmsuc3RyZWFtfV0gJHt0ZXh0fWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2V0IGJ5IGBraWxsKClgLCBzbyBhIGRlYXRoIHRoZSBoYXJuZXNzIG9yZGVyZWQgaXMgbmV2ZXIgcmVwb3J0ZWQgYXMgb25lIGl0XG4gIC8vIFN1ZmZlcmVkIFx1MjAxNCBhIG1hcmtlciBsZWZ0IGJ5IGEgY2xlYW4gdGVhcmRvd24gd291bGQgY29udmljdCB0aGUgbmV4dCBydW4nc1xuICAvLyBIZWFsdGh5IGluc3RhbmNlIG9mIGFuIGV4aXQgdGhhdCBuZXZlciBoYXBwZW5lZC5cbiAgbGV0IGlzS2lsbEV4cGVjdGVkID0gZmFsc2U7XG5cbiAgY2hpbGQub25jZSgnZXhpdCcsIChjb2RlOiBudWxsIHwgbnVtYmVyLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzIHwgbnVsbCkgPT4ge1xuICAgIGlmIChpc0tpbGxFeHBlY3RlZCkge1xuICAgICAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIE93bmVkIE9ic2lkaWFuIGV4aXRlZCBhcyBhc2tlZDogcGlkPSR7U3RyaW5nKGNoaWxkLnBpZCl9IGNvZGU9JHtTdHJpbmcoY29kZSl9IHNpZ25hbD0ke1N0cmluZyhzaWduYWwpfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIExvdWQgb24gcHVycG9zZS4gVGhpcyBvbmUgbGluZSBpcyB3aGF0IHNlcGFyYXRlcyBhIGNsZWFuIHF1aXQgZnJvbSBhXG4gICAgLy8gQ3Jhc2gsIGFuZCBpdHMgYWJzZW5jZSBvbmNlIGNvc3QgYSBkYXkgb2YgZ3Vlc3NpbmcuXG4gICAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdICEhISBPV05FRCBPQlNJRElBTiBFWElURUQ6IHBpZD0ke1N0cmluZyhjaGlsZC5waWQpfSBjb2RlPSR7U3RyaW5nKGNvZGUpfSBzaWduYWw9JHtTdHJpbmcoc2lnbmFsKX1gKTtcbiAgICB3cml0ZU93bmVkSW5zdGFuY2VFeGl0TWFya2VyKHtcbiAgICAgIGNvZGUsXG4gICAgICBvdXRwdXRUYWlsOiBjYXB0dXJlLnJlYWRPdXRwdXQoKSxcbiAgICAgIHBpZDogY2hpbGQucGlkLFxuICAgICAgcG9ydCxcbiAgICAgIHNpZ25hbFxuICAgIH0pO1xuICB9KTtcblxuICBjaGlsZC51bnJlZigpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNkcFJlYWR5KGNkcFVybCk7XG4gICAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIE93bmVkIE9ic2lkaWFuIGlzIHNlcnZpbmcgQ0RQIGF0ICR7Y2RwVXJsfS5gKTtcbiAgICByZXR1cm4ge1xuICAgICAgY2RwVXJsLFxuICAgICAga2lsbCxcbiAgICAgIHBhcmVudExpdmVuZXNzUG9ydDogbGl2ZW5lc3NTZXJ2ZXIucG9ydCxcbiAgICAgIHBvcnQsXG4gICAgICByZWFkRXhpdEluZm86ICgpID0+IGNhcHR1cmUucmVhZEV4aXRJbmZvKCksXG4gICAgICByZWFkT3V0cHV0OiAoKSA9PiBjYXB0dXJlLnJlYWRPdXRwdXQoKVxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLypcbiAgICAgKiBSZWFkIGJlZm9yZSBraWxsaW5nLCBzbyB0aGUgdmVyZGljdCBpcyB0aGUgaW5zdGFuY2UncyBvd24uIEEgQ0RQIHRpbWVvdXRcbiAgICAgKiB3aG9zZSBwcm9jZXNzIGlzIGFscmVhZHkgZ29uZSBpcyBub3QgYSBzbG93IGJvb3QgXHUyMDE0IGl0IGlzIGEgYm9vdCB0aGF0XG4gICAgICogZW5kZWQgXHUyMDE0IGFuZCBzYXlpbmcgc28gYmVhdHMgcmVwb3J0aW5nIG9ubHkgdGhlIGJ1ZGdldCBpdCBibGV3LlxuICAgICAqXG4gICAgICogRGVsaWJlcmF0ZWx5IE5PVCBhIGZhc3QtZmFpbCBpbnNpZGUgdGhlIHBvbGw6IG9uIHNvbWUgaW5zdGFsbHMgdGhlXG4gICAgICogbGF1bmNoZWQgZXhlY3V0YWJsZSBpcyBhIHNoaW0gdGhhdCBleGl0cyBvbmNlIGl0IGhhcyBoYW5kZWQgb2ZmIHRvIHRoZVxuICAgICAqIHJlYWwgYXBwLCBzbyBhIGRlYWQgY2hpbGQgbWlkLXBvbGwgZG9lcyBub3QgaW1wbHkgYSBkZWFkIGluc3RhbmNlLiBPbmx5IGFcbiAgICAgKiBkZWFkIGNoaWxkIHRoYXQgYWxzbyBuZXZlciBzZXJ2ZWQgQ0RQIGRvZXMuXG4gICAgICovXG4gICAgY29uc3QgZXhpdEluZm8gPSBjYXB0dXJlLnJlYWRFeGl0SW5mbygpO1xuICAgIGtpbGwoKTtcbiAgICBpZiAoZXhpdEluZm8pIHtcbiAgICAgIHRocm93IG5ldyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3Ioe1xuICAgICAgICBjZHBVcmwsXG4gICAgICAgIGNvZGU6IGV4aXRJbmZvLmNvZGUsXG4gICAgICAgIG91dHB1dFRhaWw6IGNhcHR1cmUucmVhZE91dHB1dCgpLFxuICAgICAgICBwaWQ6IGNoaWxkLnBpZCxcbiAgICAgICAgc2lnbmFsOiBleGl0SW5mby5zaWduYWwsXG4gICAgICAgIHNwYXduRXJyb3I6IGV4aXRJbmZvLnNwYXduRXJyb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGwoKTogdm9pZCB7XG4gICAgaXNLaWxsRXhwZWN0ZWQgPSB0cnVlO1xuICAgIGNsZWFyT3duZWRJbnN0YW5jZUV4aXRNYXJrZXIocG9ydCk7XG4gICAgbGl2ZW5lc3NTZXJ2ZXIuY2xvc2UoKTtcbiAgICBraWxsUHJvY2Vzc1RyZWUoY2hpbGQpO1xuICB9XG59XG5cbi8qKlxuICogUGlja3MgYSBmcmVlIFRDUCBwb3J0IGJ5IGJpbmRpbmcgdG8gcG9ydCBgMGAgYW5kIHJlYWRpbmcgdGhlIGFzc2lnbmVkIHBvcnQuXG4gKlxuICogVGhlcmUgaXMgYSBzbWFsbCB0aW1lLW9mLWNoZWNrL3RpbWUtb2YtdXNlIHdpbmRvdyBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgcG9ydFxuICogaGVyZSBhbmQgT2JzaWRpYW4gYmluZGluZyBpdDsgaW4gcHJhY3RpY2UgaXQgaXMgbmVnbGlnaWJsZSBmb3IgdGVzdCBydW5zLlxuICpcbiAqIEByZXR1cm5zIEEgZnJlZSBUQ1AgcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tGcmVlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3RlbigwLCBERUZBVUxUX0NEUF9IT1NULCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgIGlmIChhZGRyZXNzID09PSBudWxsIHx8IHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGRldGVybWluZSBhIGZyZWUgcG9ydC4nKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgcG9ydCB9ID0gYWRkcmVzcztcbiAgICAgIHNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUocG9ydCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUG9sbHMgdGhlIENEUCBgL2pzb25gIGVuZHBvaW50IHVudGlsIGF0IGxlYXN0IG9uZSBwYWdlIHRhcmdldCBhcHBlYXJzLlxuICpcbiAqIEBwYXJhbSBjZHBVcmwgLSBUaGUgYmFzZSBDRFAgVVJMLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2RwUmVhZHkoY2RwVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7Y2RwVXJsfS9qc29uYCk7XG4gICAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENkcFRhcmdldFtdO1xuICAgICAgaWYgKHRhcmdldHMuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQudHlwZSA9PT0gJ3BhZ2UnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBFbmRwb2ludCBub3QgdXAgeWV0IFx1MjAxNCBrZWVwIHBvbGxpbmcuXG4gICAgfVxuICAgIGF3YWl0IGRlbGF5KENEUF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBPd25lZCBPYnNpZGlhbiBpbnN0YW5jZSBkaWQgbm90IGV4cG9zZSBDRFAgYXQgJHtjZHBVcmx9IHdpdGhpbiAke1N0cmluZyhDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmBcbiAgKTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQWNBLFNBQVMsYUFBYTtBQUN0QixTQUFTLG9CQUFvQjtBQUk3QixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLFdBQVc7QUFDcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9B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
|
|
@@ -20,9 +20,19 @@
|
|
|
20
20
|
* The concrete JS runtime versions an installer's Electron shell ships — the
|
|
21
21
|
* **entire** `process.versions` object, read empirically by booting that
|
|
22
22
|
* installer over CDP (see `scripts/collect-runtime-versions.ts`). Absent for
|
|
23
|
-
* versions not yet collected (or that could not be booted).
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* versions not yet collected (or that could not be booted).
|
|
24
|
+
*
|
|
25
|
+
* **These are the WINDOWS (`.exe`) values, and that matters.** A given Electron
|
|
26
|
+
* version does bundle the same Node / V8 / Chromium everywhere — but the Electron
|
|
27
|
+
* version itself is a property of the *installer*, not of the release, and two
|
|
28
|
+
* installers of the same Obsidian version can differ: `1.12.4` shipped Electron
|
|
29
|
+
* `39.6.0` in its `.exe` and `39.7.0` in every other installer, and `1.8.10`
|
|
30
|
+
* shipped `34.2.0` vs `34.5.2`. This field carries one flat value, measured on
|
|
31
|
+
* the `.exe` — the installer that, with the `.dmg`, is published for all 106
|
|
32
|
+
* installer-bearing releases. So a consumer pinning a macOS or Linux installer
|
|
33
|
+
* should treat `electron` as accurate to the patch only for the 104 releases
|
|
34
|
+
* where the platforms agree. The collection workflow boots all three platforms
|
|
35
|
+
* and reports any new divergence.
|
|
26
36
|
*
|
|
27
37
|
* The index signature carries every key `process.versions` exposes for that
|
|
28
38
|
* Electron build — beyond the four well-known ones below, that typically includes
|
|
@@ -90,8 +100,9 @@ export interface ObsidianVersionChangelogUrls {
|
|
|
90
100
|
}
|
|
91
101
|
/**
|
|
92
102
|
* The pre-resolved asset download URLs for a version, baked into `metadata.json`
|
|
93
|
-
* from the
|
|
94
|
-
*
|
|
103
|
+
* from the `obsidianmd/obsidian-releases` release assets — plus, for catalyst
|
|
104
|
+
* builds, the `releases.obsidian.md` CDN, which publishes no listing and so is
|
|
105
|
+
* probed (see the `metadata.json` section in `CLAUDE.md`).
|
|
95
106
|
*
|
|
96
107
|
* These are the exact URLs the version's assets are published at, so the
|
|
97
108
|
* integration-time download paths can skip the GitHub release-API lookup and the
|
|
@@ -156,7 +167,7 @@ export interface ObsidianVersionMetadata {
|
|
|
156
167
|
readonly channel?: string;
|
|
157
168
|
/**
|
|
158
169
|
* The pre-resolved asset download URLs for the version, baked from the
|
|
159
|
-
*
|
|
170
|
+
* `obsidianmd/obsidian-releases` release assets. Absent for versions not present
|
|
160
171
|
* in the catalog (the caller then falls back to hand-rolled resolution).
|
|
161
172
|
*/
|
|
162
173
|
readonly downloads?: ObsidianVersionDownloads;
|