obsidian-integration-testing 12.2.0 → 13.0.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/README.md +1 -5
- package/dist/lib/cjs/adb.cjs +1 -1
- package/dist/lib/cjs/app-config.cjs +1 -1
- package/dist/lib/cjs/app-config.d.cts +1 -1
- package/dist/lib/cjs/appium-dependencies.cjs +1 -1
- package/dist/lib/cjs/appium-session-config.cjs +3 -5
- package/dist/lib/cjs/appium-session-config.d.cts +6 -9
- package/dist/lib/cjs/connect-to-cdp.cjs +1 -1
- package/dist/lib/cjs/connect-to-cdp.d.cts +5 -0
- package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
- package/dist/lib/cjs/desktop-only-plugin-skip-error.cjs +1 -1
- package/dist/lib/cjs/device-readiness.cjs +1 -1
- package/dist/lib/cjs/device-settings.cjs +1 -1
- package/dist/lib/cjs/device-settings.d.cts +1 -1
- package/dist/lib/cjs/emulator-device-id.cjs +1 -1
- package/dist/lib/cjs/emulator-device-id.d.cts +7 -6
- package/dist/lib/cjs/emulator-reaper.cjs +1 -1
- package/dist/lib/cjs/emulator-reaper.d.cts +2 -2
- package/dist/lib/cjs/emulator-reclaim.cjs +1 -1
- package/dist/lib/cjs/emulator-reclaim.d.cts +17 -17
- package/dist/lib/cjs/eval-cap.cjs +29 -0
- package/dist/lib/cjs/eval-cap.d.cts +43 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/eval-in-obsidian.d.cts +5 -0
- package/dist/lib/cjs/fit-screenshot.cjs +1 -1
- package/dist/lib/cjs/generate-function-call.cjs +1 -1
- package/dist/lib/cjs/generate-function-call.d.cts +1 -1
- package/dist/lib/cjs/global-setup-core.cjs +1 -1
- package/dist/lib/cjs/global-setup-core.d.cts +4 -4
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/integration-setup-failed-error.cjs +1 -1
- package/dist/lib/cjs/jest/global-setup.cjs +1 -1
- package/dist/lib/cjs/jest/global-setup.d.cts +3 -3
- package/dist/lib/cjs/leftover-cleanup.cjs +1 -1
- package/dist/lib/cjs/leftover-cleanup.d.cts +2 -2
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +1 -1
- package/dist/lib/cjs/namespace-bootstrap.cjs +13 -3
- package/dist/lib/cjs/obsidian-instance.cjs +1 -1
- package/dist/lib/cjs/obsidian-version-switch.cjs +1 -1
- package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
- package/dist/lib/cjs/owned-vault-seed.cjs +3 -3
- package/dist/lib/cjs/poll-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/poll-in-obsidian.d.cts +4 -3
- package/dist/lib/cjs/process-capture.cjs +1 -1
- package/dist/lib/cjs/process-capture.d.cts +5 -5
- package/dist/lib/cjs/process-exit-message.cjs +1 -1
- package/dist/lib/cjs/process-exit-message.d.cts +2 -2
- package/dist/lib/cjs/run-version-matrix.cjs +3 -3
- package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
- package/dist/lib/cjs/setup-lock.cjs +1 -1
- package/dist/lib/cjs/soft-keyboard-geometry.cjs +17 -8
- package/dist/lib/cjs/soft-keyboard-geometry.d.cts +46 -9
- package/dist/lib/cjs/soft-keyboard.cjs +7 -4
- package/dist/lib/cjs/soft-keyboard.d.cts +16 -2
- package/dist/lib/cjs/temporary-vault.cjs +3 -1
- package/dist/lib/cjs/transport-appium.cjs +7 -5
- package/dist/lib/cjs/transport-desktop-cdp.cjs +81 -15
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +44 -1
- package/dist/lib/cjs/transport-factory.cjs +2 -2
- package/dist/lib/cjs/transport-options.cjs +1 -1
- package/dist/lib/cjs/transport-options.d.cts +11 -1
- package/dist/lib/cjs/vault-teardown-verdict.cjs +1 -1
- 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 +1 -1
- package/dist/lib/cjs/vitest/global-setup.d.cts +3 -3
- package/dist/lib/cjs/webview-cdp.cjs +45 -14
- package/dist/lib/cjs/webview-cdp.d.cts +17 -0
- package/dist/lib/esm/adb.mjs +1 -1
- package/dist/lib/esm/app-config.d.mts +1 -1
- package/dist/lib/esm/app-config.mjs +1 -1
- package/dist/lib/esm/appium-dependencies.mjs +1 -1
- package/dist/lib/esm/appium-session-config.d.mts +6 -9
- package/dist/lib/esm/appium-session-config.mjs +3 -4
- package/dist/lib/esm/connect-to-cdp.d.mts +5 -0
- package/dist/lib/esm/connect-to-cdp.mjs +1 -1
- package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
- package/dist/lib/esm/desktop-only-plugin-skip-error.mjs +1 -1
- package/dist/lib/esm/device-readiness.mjs +1 -1
- package/dist/lib/esm/device-settings.d.mts +1 -1
- package/dist/lib/esm/device-settings.mjs +1 -1
- package/dist/lib/esm/emulator-device-id.d.mts +7 -6
- package/dist/lib/esm/emulator-device-id.mjs +1 -1
- package/dist/lib/esm/emulator-reaper.d.mts +2 -2
- package/dist/lib/esm/emulator-reaper.mjs +1 -1
- package/dist/lib/esm/emulator-reclaim.d.mts +17 -17
- package/dist/lib/esm/emulator-reclaim.mjs +1 -1
- package/dist/lib/esm/eval-cap.d.mts +43 -0
- package/dist/lib/esm/eval-cap.mjs +5 -0
- package/dist/lib/esm/eval-in-obsidian.d.mts +5 -0
- package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
- package/dist/lib/esm/fit-screenshot.mjs +1 -1
- package/dist/lib/esm/generate-function-call.d.mts +1 -1
- package/dist/lib/esm/generate-function-call.mjs +1 -1
- package/dist/lib/esm/global-setup-core.d.mts +4 -4
- package/dist/lib/esm/global-setup-core.mjs +1 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/integration-setup-failed-error.mjs +1 -1
- package/dist/lib/esm/jest/global-setup.d.mts +3 -3
- package/dist/lib/esm/jest/global-setup.mjs +1 -1
- package/dist/lib/esm/leftover-cleanup.d.mts +2 -2
- package/dist/lib/esm/leftover-cleanup.mjs +1 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.mjs +1 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +13 -3
- package/dist/lib/esm/obsidian-instance.mjs +1 -1
- package/dist/lib/esm/obsidian-version-switch.mjs +1 -1
- package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
- package/dist/lib/esm/owned-vault-seed.mjs +3 -3
- package/dist/lib/esm/poll-in-obsidian.d.mts +4 -3
- package/dist/lib/esm/poll-in-obsidian.mjs +1 -1
- package/dist/lib/esm/process-capture.d.mts +5 -5
- package/dist/lib/esm/process-capture.mjs +1 -1
- package/dist/lib/esm/process-exit-message.d.mts +2 -2
- package/dist/lib/esm/process-exit-message.mjs +1 -1
- package/dist/lib/esm/run-version-matrix.d.mts +1 -1
- package/dist/lib/esm/run-version-matrix.mjs +3 -3
- package/dist/lib/esm/setup-lock.mjs +1 -1
- package/dist/lib/esm/soft-keyboard-geometry.d.mts +46 -9
- package/dist/lib/esm/soft-keyboard-geometry.mjs +17 -8
- package/dist/lib/esm/soft-keyboard.d.mts +16 -2
- package/dist/lib/esm/soft-keyboard.mjs +7 -4
- package/dist/lib/esm/temporary-vault.mjs +3 -1
- package/dist/lib/esm/transport-appium.mjs +7 -5
- package/dist/lib/esm/transport-desktop-cdp.d.mts +44 -1
- package/dist/lib/esm/transport-desktop-cdp.mjs +81 -15
- package/dist/lib/esm/transport-factory.mjs +2 -2
- package/dist/lib/esm/transport-options.d.mts +11 -1
- package/dist/lib/esm/transport-options.mjs +1 -1
- package/dist/lib/esm/vault-teardown-verdict.mjs +1 -1
- 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 +3 -3
- package/dist/lib/esm/vitest/global-setup.mjs +1 -1
- package/dist/lib/esm/webview-cdp.d.mts +17 -0
- package/dist/lib/esm/webview-cdp.mjs +45 -14
- package/package.json +1 -7
|
@@ -75,4 +75,4 @@ function extractNetworkAgentInfo(connectivityOutput, networkId) {
|
|
|
75
75
|
resolveDeviceIdleTimeoutInMilliseconds,
|
|
76
76
|
resolveNetworkReadyTimeoutInMilliseconds
|
|
77
77
|
});
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1yZWFkaW5lc3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIGRlY2lkaW5nIHdoZW4gYSBmcmVzaGx5LWJvb3RlZCBBbmRyb2lkIGVtdWxhdG9yIGlzIHJlYWR5XG4gKiBlbm91Z2ggdG8gZXN0YWJsaXNoIGFuIEFwcGl1bSBzZXNzaW9uLCBwbHVzIHJlc29sdmluZyB0aGUgdHdvIHJlYWRpbmVzcy13YWl0XG4gKiB0aW1lb3V0cyBmcm9tIHRoZSB0cmFuc3BvcnQgb3B0aW9ucy4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5XG4gKiBgdHJhbnNwb3J0LWZhY3RvcnlgIHNvIHRoZSBwYXJzaW5nIGFuZCBkZWZhdWx0IHJlc29sdXRpb24gc3RheSB1bml0LXRlc3RhYmxlXG4gKiAodGhlIGZhY3RvcnkgaXRzZWxmIG5lZWRzIGEgcmVhbCBlbXVsYXRvciBhbmQgaXMgZXhjbHVkZWQgZnJvbSB1bml0IHRlc3RzKS5cbiAqXG4gKiBSZWFkaW5lc3MgaXMgdHdvIGluZGVwZW5kZW50IHF1ZXN0aW9ucywgd2FpdGVkIG9uIGluIHR3byBwaGFzZXM6XG4gKlxuICogMS4gKipJcyB0aGUgZ3Vlc3QgaWRsZT8qKiBgc3lzLmJvb3RfY29tcGxldGVkYCBmaXJlcyAqYmVmb3JlKiBpdCBpczogcGFja2FnZVxuICogICAgb3B0aW1pemF0aW9uIChgZGV4Mm9hdGApIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZyBhZnRlciBpdCwgc28gYVxuICogICAgc2Vzc2lvbiBlc3RhYmxpc2hlZCB0aGUgaW5zdGFudCBpdCBmaXJlcyBtYWtlcyBldmVyeSBvbmUgb2YgVWlBdXRvbWF0b3IyJ3NcbiAqICAgIHNlcmlhbGl6ZWQgYGFkYmAgcm91bmQtdHJpcHMgY29udGVuZCB3aXRoIHRoYXQgd29yayBhbmQgaW5mbGF0ZSB+M3guIEdhdGluZ1xuICogICAgdGhlIHNlc3Npb24gb24gYSBsYXRlciwgcXVpZXRlciBzaWduYWwgKHRoZSBib290IGFuaW1hdGlvbiBoYXMgc3RvcHBlZCBhbmRcbiAqICAgIHRoZSBwYWNrYWdlIG1hbmFnZXIgaXMgc2VydmluZykgbGV0cyBpdCBydW4gYWdhaW5zdCBhbiBpZGxlIGd1ZXN0IGluc3RlYWQuXG4gKiAyLiAqKkRvZXMgdGhlIGd1ZXN0IGhhdmUgYSBuZXR3b3JrPyoqIEJvdGggaWRsZSBzaWduYWxzIGFyZSB0cnVlIHdlbGwgKmJlZm9yZSpcbiAqICAgIHRoZSBkZWZhdWx0IG5ldHdvcmsgaXMgY3JlYXRlZCBhbmQgdmFsaWRhdGVkIFx1MjAxNCB0aGF0IGxhbmRzIH44MHMgaW50byBndWVzdFxuICogICAgdXB0aW1lLCB0ZW5zIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIGlkbGUgZ2F0ZSBjbGVhcnMgXHUyMDE0IGFuZCBuZWl0aGVyIHNheXNcbiAqICAgIGFueXRoaW5nIGFib3V0IGNvbm5lY3Rpdml0eSwgc28gYW4gaWRsZS1vbmx5IGdhdGUgaGFuZHMgdGhlIHN1aXRlIGEgZGV2aWNlXG4gKiAgICB3aXRoIG5vIHJvdXRlLiBTZWUge0BsaW5rIGNoZWNrTmV0d29ya1ZhbGlkYXRlZH0gZm9yIHRoZSBtZWFzdXJlbWVudCBhbmRcbiAqICAgIGZvciB3aHkgdGhlIHRocmVlIG9idmlvdXMgY29ubmVjdGl2aXR5IHByb2JlcyBhcmUgYWxsIHdyb25nIGhlcmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG5jb25zdCBBQ1RJVkVfREVGQVVMVF9ORVRXT1JLX1BBVFRFUk4gPSAvXlxccypBY3RpdmUgZGVmYXVsdCBuZXR3b3JrOlxccyooPzxuZXR3b3JrSWQ+XFxTKykvbTtcbmNvbnN0IEJPT1RfQU5JTUFUSU9OX1NUT1BQRURfU1RBVEUgPSAnc3RvcHBlZCc7XG5jb25zdCBGSVJTVF9WQUxJREFURURfUEFUVEVSTiA9IC9cXGJmaXJzdFZhbGlkYXRlZFxccysoPzx0aW1lc3RhbXA+XFxkKykvO1xuY29uc3QgTkVUV09SS19BR0VOVF9JTkZPX01BUktFUiA9ICdOZXR3b3JrQWdlbnRJbmZveyc7XG5jb25zdCBORVRXT1JLX0lEX1BBVFRFUk4gPSAvXlxcZCskLztcbmNvbnN0IFBBQ0tBR0VfTElORV9QUkVGSVggPSAncGFja2FnZTonO1xuY29uc3QgVkFMSURBVEVEX1NDT1JFX1BPTElDWSA9ICdJU19WQUxJREFURUQnO1xuXG4vKipcbiAqIERlZmF1bHQgZm9yIHtAbGluayBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLmRldmljZUlkbGVUaW1lb3V0SW5NaWxsaXNlY29uZHN9LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9ERVZJQ0VfSURMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwXzAwMDtcblxuLyoqXG4gKiBEZWZhdWx0IGZvciB7QGxpbmsgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucy5uZXR3b3JrUmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHN9LlxuICpcbiAqIFRoZSBidWRnZXQgc3RhcnRzICphZnRlciogYHN5cy5ib290X2NvbXBsZXRlZGAsIHdoZXJlIHRoZSBtZWFzdXJlZCB3YWl0IG9uIGFcbiAqIGNvbGQgV0hQWCBlbXVsYXRvciBpcyB+MzBzICh2YWxpZGF0aW9uIGF0IH44MHMgZnJvbSBib290LCBhZ2FpbnN0IGEgYm9vdCBmbGFnXG4gKiBhdCB+NTZzKS4gVGhlIGRlZmF1bHQgaXMgaGVhZHJvb20gZm9yIHRoZSBzdGFydmVkL0NJIHJlZ2ltZSB0aGUgb3RoZXIgQW5kcm9pZFxuICogYnVkZ2V0cyBhcmUgYWxyZWFkeSBzaXplZCBmb3IsIG5vdCB0aGUgZXhwZWN0ZWQgY29zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkVUV09SS19SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEyMF8wMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrRGV2aWNlSWRsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tEZXZpY2VJZGxlUGFyYW1zIHtcbiAgLyoqXG4gIFJhdyBzdGRvdXQgb2YgYGFkYiBzaGVsbCBnZXRwcm9wIGluaXQuc3ZjLmJvb3RhbmltYC5cbiAgICovXG4gIHJlYWRvbmx5IGJvb3RBbmltYXRpb25Qcm9wZXJ0eTogc3RyaW5nO1xuXG4gIC8qKlxuICBSYXcgc3Rkb3V0IG9mIGBhZGIgc2hlbGwgY21kIHBhY2thZ2UgbGlzdCBwYWNrYWdlc2AuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTGlzdE91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja05ldHdvcmtWYWxpZGF0ZWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrTmV0d29ya1ZhbGlkYXRlZFBhcmFtcyB7XG4gIC8qKlxuICBSYXcgc3Rkb3V0IG9mIGBhZGIgc2hlbGwgZHVtcHN5cyBjb25uZWN0aXZpdHlgLlxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGl2aXR5T3V0cHV0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgYm9vdGVkIGVtdWxhdG9yIGlzIGlkbGUgZW5vdWdoIHRvIHN0YXJ0IGFuIEFwcGl1bSBzZXNzaW9uLFxuICogZnJvbSB0aGUgcmF3IG91dHB1dCBvZiB0aGUgdHdvIHByb2JlIGNvbW1hbmRzLlxuICpcbiAqIFRoZSBndWVzdCBpcyBjb25zaWRlcmVkIGlkbGUgb25jZSB0aGUgYm9vdCBhbmltYXRpb24gaGFzIHN0b3BwZWQgKiphbmQqKiB0aGVcbiAqIHBhY2thZ2UgbWFuYWdlciBpcyBzZXJ2aW5nIChpdCBsaXN0cyBhdCBsZWFzdCBvbmUgcGFja2FnZSkuIEJvdGggYXJlIGJpbmFyeSxcbiAqIGxhdGVyLXRoYW4tYHN5cy5ib290X2NvbXBsZXRlZGAgc2lnbmFscywgc28gdGhpcyByZXR1cm5zIGB0cnVlYCB3ZWxsIGFmdGVyIHRoZVxuICogcHJlbWF0dXJlIGJvb3QtY29tcGxldGVkIGZsYWcgYnV0IHdpdGhvdXQgYW55IGxhdGVuY3kgdGhyZXNob2xkcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNhbXBsZWQgcHJvYmUgb3V0cHV0cy5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBndWVzdCBpcyBpZGxlIGVub3VnaCB0byBwcm9jZWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tEZXZpY2VJZGxlKHBhcmFtczogQ2hlY2tEZXZpY2VJZGxlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IGlzQm9vdEFuaW1hdGlvblN0b3BwZWQgPSBwYXJhbXMuYm9vdEFuaW1hdGlvblByb3BlcnR5LnRyaW0oKSA9PT0gQk9PVF9BTklNQVRJT05fU1RPUFBFRF9TVEFURTtcbiAgY29uc3QgaXNQYWNrYWdlTWFuYWdlclJlYWR5ID0gcGFyYW1zLnBhY2thZ2VMaXN0T3V0cHV0XG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5zb21lKChsaW5lKSA9PiBsaW5lLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoUEFDS0FHRV9MSU5FX1BSRUZJWCkpO1xuICByZXR1cm4gaXNCb290QW5pbWF0aW9uU3RvcHBlZCAmJiBpc1BhY2thZ2VNYW5hZ2VyUmVhZHk7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgYm9vdGVkIGVtdWxhdG9yIGhhcyBhIHdvcmtpbmcgbmV0d29yaywgZnJvbSB0aGUgcmF3IG91dHB1dFxuICogb2YgYGFkYiBzaGVsbCBkdW1wc3lzIGNvbm5lY3Rpdml0eWAuXG4gKlxuICogUmVhZHkgbWVhbnMgdGhlIGR1bXAgbmFtZXMgYW4gKiphY3RpdmUgZGVmYXVsdCBuZXR3b3JrKiogKmFuZCogdGhhdCBuZXR3b3JrJ3NcbiAqIG93biBhZ2VudCBpbmZvIHJlcG9ydHMgdmFsaWRhdGlvbiBcdTIwMTQgZWl0aGVyIGFuIGBJU19WQUxJREFURURgIHNjb3JlIHBvbGljeSBvciBhXG4gKiBub24temVybyBgZmlyc3RWYWxpZGF0ZWRgIHRpbWVzdGFtcC4gQm90aCBhcmUgcmVxdWlyZWQ6IGEgZGVmYXVsdCBuZXR3b3JrXG4gKiBleGlzdHMgZm9yIHNlY29uZHMgYmVmb3JlIGl0IHZhbGlkYXRlcywgYW5kIGR1cmluZyB0aGF0IHdpbmRvdyBpdCBjYXJyaWVzIG5vXG4gKiB1c2FibGUgcm91dGUuXG4gKlxuICogV2h5IHRoaXMgbWF0dGVycyBhdCBhbGw6IHRoZSB0d28ge0BsaW5rIGNoZWNrRGV2aWNlSWRsZX0gc2lnbmFscyBhcmUgc2F0aXNmaWVkXG4gKiB3ZWxsIGJlZm9yZSB0aGlzIG9uZS4gVmFsaWRhdGlvbiBsYW5kcyB+NzAtODBzIGludG8gZ3Vlc3QgdXB0aW1lIFx1MjAxNCBtZWFzdXJlZCBvblxuICogYG9ic2lkaWFuX3Rlc3RgLCBgY3JlYXRlZCA3MDYzNSBmaXJzdFZhbGlkYXRlZCA3MjY4MWAsIGFuZCBvbiBhIGNvbGQgYm9vdCBvZlxuICogYG9ic2lkaWFuX3NjcmVlbnNob3RzYCwgYGNyZWF0ZWQgNjY4NzAgZmlyc3RWYWxpZGF0ZWQgNzk4NzBgLCB3aGljaCBhdCA4NXNcbiAqIHVwdGltZSBzdGlsbCBzY29yZWQgYEVWRVJfRVZBTFVBVEVEJklTX1VOTUVURVJFRGAgd2l0aCBubyBgSVNfVkFMSURBVEVEYCBhbmRcbiAqIG5vIGBmaXJzdFZhbGlkYXRlZGAgZmllbGQgYXQgYWxsLiBBZ2FpbnN0IGEgYm9vdCBmbGFnIGF0IH41NnMgdGhhdCBsZWF2ZXMgYVxuICogZ2FwIG9mIHRlbnMgb2Ygc2Vjb25kcyBvbiBhIGZhc3QgaG9zdCwgYW5kIG1vcmUgb24gYSBzbG93IG9uZS4gQSBzdWl0ZSBzdGFydGVkXG4gKiBpbiB0aGF0IGdhcCBkb2VzIG5vdCBtZXJlbHkgcnVuIHNsb3dseTogYSB0ZXN0IHRoYXQgcmVhY2hlcyB0aGUgbmV0d29yayBydW5zXG4gKiB0byBjb21wbGV0aW9uIGFnYWluc3QgYSBzaWxlbnRseSBlbXB0eSByZXN1bHQsIHdoaWNoIG5vIGFzc2VydGlvbiBpbnNpZGUgdGhlXG4gKiBzdWl0ZSBjYW4gdGVsbCBhcGFydCBmcm9tIGEgZ2VudWluZWx5IGVtcHR5IGZlZWQuXG4gKlxuICogYGR1bXBzeXMgY29ubmVjdGl2aXR5YCBpcyB0aGUgaG9uZXN0IHNvdXJjZSwgYW5kIHRoZSB0aHJlZSBwcm9iZXMgdGhhdCBsb29rXG4gKiBsaWtlIGJldHRlciBvbmVzIGFyZSBhbGwgd3JvbmcgXHUyMDE0IGVhY2ggb2YgdGhlbSBtaXNsZWQgYSBmdWxsIGRheSBvZlxuICogaW52ZXN0aWdhdGlvbiBiZWZvcmUgdGhpcyB3YXMgdW5kZXJzdG9vZDpcbiAqXG4gKiAtIGBpcCByb3V0ZWAgc2hvd3MgKipubyoqIGRlZmF1bHQgcm91dGUgb24gYSBoZWFsdGh5IGRldmljZTogQW5kcm9pZCB1c2VzXG4gKiAgIHBlci1uZXR3b3JrIHBvbGljeSByb3V0aW5nLCBhbmQgdGhlIHJvdXRlIGxpdmVzIGluIHRhYmxlIDEwMTUsIG5vdCBgbWFpbmAuXG4gKiAtIGBwaW5nYCBmYWlscyBvbiBhIGhlYWx0aHkgZGV2aWNlOiBRRU1VIHVzZXItbW9kZSBOQVQgZG9lcyBub3QgZm9yd2FyZCBJQ01QXG4gKiAgIG9uIFdpbmRvd3MgaG9zdHMuXG4gKiAtIGBnZXRwcm9wIG5ldC5kbnMxYCBpcyBlbXB0eSBvbiBldmVyeSBtb2Rlcm4gQW5kcm9pZDogRE5TIHdlbnQgcGVyLW5ldHdvcmtcbiAqICAgaW4gOC85LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc2FtcGxlZCBwcm9iZSBvdXRwdXQuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZ3Vlc3QgaGFzIGEgdmFsaWRhdGVkIGRlZmF1bHQgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTmV0d29ya1ZhbGlkYXRlZChwYXJhbXM6IENoZWNrTmV0d29ya1ZhbGlkYXRlZFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBhY3RpdmVOZXR3b3JrSWQgPSBBQ1RJVkVfREVGQVVMVF9ORVRXT1JLX1BBVFRFUk4uZXhlYyhwYXJhbXMuY29ubmVjdGl2aXR5T3V0cHV0KT8uZ3JvdXBzPy5bJ25ldHdvcmtJZCddID8/ICcnO1xuICBpZiAoIU5FVFdPUktfSURfUEFUVEVSTi50ZXN0KGFjdGl2ZU5ldHdvcmtJZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhZ2VudEluZm8gPSBleHRyYWN0TmV0d29ya0FnZW50SW5mbyhwYXJhbXMuY29ubmVjdGl2aXR5T3V0cHV0LCBhY3RpdmVOZXR3b3JrSWQpO1xuICBpZiAoYWdlbnRJbmZvLmluY2x1ZGVzKFZBTElEQVRFRF9TQ09SRV9QT0xJQ1kpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmaXJzdFZhbGlkYXRlZFRpbWVzdGFtcCA9IE51bWJlcihGSVJTVF9WQUxJREFURURfUEFUVEVSTi5leGVjKGFnZW50SW5mbyk/Lmdyb3Vwcz8uWyd0aW1lc3RhbXAnXSA/PyAnMCcpO1xuICByZXR1cm4gZmlyc3RWYWxpZGF0ZWRUaW1lc3RhbXAgPiAwO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwb3N0LWJvb3QgZGV2aWNlLWlkbGUgd2FpdCB0aW1lb3V0LCBhcHBseWluZyB0aGUgZGVmYXVsdCB3aGVuXG4gKiB0aGUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKlxuICogVGhpcyBib3VuZHMgaG93IGxvbmcgdGhlIGZhY3Rvcnkgd2FpdHMgZm9yIGEgZnJlc2hseS1zdGFydGVkIGVtdWxhdG9yIHRvXG4gKiBiZWNvbWUgaWRsZSAoc2VlIHtAbGluayBjaGVja0RldmljZUlkbGV9KSBiZWZvcmUgZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uLiBBXG4gKiB2YWx1ZSBvZiBgMGAgc2tpcHMgdGhlIHdhaXQgZW50aXJlbHkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgQW5kcm9pZCBBcHBpdW0gdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGV2aWNlSWRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyhcbiAgb3B0aW9uczogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc1xuKTogbnVtYmVyIHtcbiAgcmV0dXJuIG9wdGlvbnMuZGV2aWNlSWRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX0RFVklDRV9JRExFX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBuZXR3b3JrLXJlYWR5IHdhaXQgdGltZW91dCwgYXBwbHlpbmcgdGhlIGRlZmF1bHQgd2hlbiB0aGUgb3B0aW9uXG4gKiBpcyBvbWl0dGVkLlxuICpcbiAqIFRoaXMgYm91bmRzIGhvdyBsb25nIHRoZSBmYWN0b3J5IHdhaXRzLCBhZnRlciB0aGUgaWRsZSBnYXRlLCBmb3IgdGhlIGd1ZXN0IHRvXG4gKiByZXBvcnQgYSB2YWxpZGF0ZWQgZGVmYXVsdCBuZXR3b3JrIChzZWUge0BsaW5rIGNoZWNrTmV0d29ya1ZhbGlkYXRlZH0pIGJlZm9yZVxuICogZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uLiBBIHZhbHVlIG9mIGAwYCBza2lwcyB0aGUgd2FpdCBlbnRpcmVseS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVOZXR3b3JrUmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHMoXG4gIG9wdGlvbnM6IE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnNcbik6IG51bWJlciB7XG4gIHJldHVybiBvcHRpb25zLm5ldHdvcmtSZWFkeVRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX05FVFdPUktfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGBOZXR3b3JrQWdlbnRJbmZve1x1MjAyNn1gIGVudHJ5IGZvciBvbmUgbmV0d29yayBpZCBmcm9tIGFcbiAqIGNvbm5lY3Rpdml0eSBkdW1wLlxuICpcbiAqICoqQm91bmRlZCB0byB0aGUgZW50cnkncyBvd24gbGluZSwgYW5kIHRoYXQgYm91bmQgaXMgbG9hZC1iZWFyaW5nLioqIEEgcmVhbFxuICogZHVtcCBsaXN0cyB0aGUgYWN0aXZlIG5ldHdvcmsncyBhZ2VudCB1bmRlciBgQ3VycmVudCBOZXR3b3JrczpgIGFuZCB0aGVuLCBtdWNoXG4gKiBmdXJ0aGVyIGRvd24sIGEgYE5ldHdvcmtPZmZlcmAgcGVyIHByb3ZpZGVyIFx1MjAxNCBhbmQgdGhvc2Ugb2ZmZXJzIGNhcnJ5XG4gKiBgSVNfVkFMSURBVEVEYCBpbiB0aGVpciBzY29yZSBwb2xpY2llcyB3aGF0ZXZlciB0aGUgbGl2ZSBuZXR3b3JrIGlzIGRvaW5nLiBBXG4gKiBkdW1wIHNhbXBsZWQgaGVyZSB3aXRoIGFuIHVudmFsaWRhdGVkIGRlZmF1bHQgbmV0d29yayBoZWxkIHNldmVuIHN1Y2ggb2ZmZXJzLFxuICogc28gcmVhZGluZyBwYXN0IHRoZSBhZ2VudCdzIG93biBsaW5lIHJlcG9ydHMgKmV2ZXJ5KiBkdW1wIGFzIHZhbGlkYXRlZC4gT25lXG4gKiBlbnRyeSBpcyBvbmUgbGluZSBpbiB0aGUgb2JzZXJ2ZWQgb3V0cHV0OyBhbiBlbnRyeSB0aGF0IGV2ZXIgd3JhcHMgcmVhZHMgYXNcbiAqIG5vdC1yZWFkeSwgd2hpY2ggaXMgdGhlIHNhZmUgZGlyZWN0aW9uIHRvIGJlIHdyb25nIGluLlxuICpcbiAqIEBwYXJhbSBjb25uZWN0aXZpdHlPdXRwdXQgLSBSYXcgc3Rkb3V0IG9mIGBhZGIgc2hlbGwgZHVtcHN5cyBjb25uZWN0aXZpdHlgLlxuICogQHBhcmFtIG5ldHdvcmtJZCAtIFRoZSBuZXR3b3JrIGlkIHdob3NlIGVudHJ5IHRvIGV4dHJhY3QuXG4gKiBAcmV0dXJucyBUaGUgZW50cnkncyBsaW5lLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgZHVtcCBoYXMgbm8gc3VjaCBlbnRyeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE5ldHdvcmtBZ2VudEluZm8oY29ubmVjdGl2aXR5T3V0cHV0OiBzdHJpbmcsIG5ldHdvcmtJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGNvbm5lY3Rpdml0eU91dHB1dC5pbmRleE9mKGAke05FVFdPUktfQUdFTlRfSU5GT19NQVJLRVJ9bmV0d29ya3ske25ldHdvcmtJZH19YCk7XG4gIGlmIChzdGFydEluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGxpbmVFbmRJbmRleCA9IGNvbm5lY3Rpdml0eU91dHB1dC5pbmRleE9mKCdcXG4nLCBzdGFydEluZGV4KTtcbiAgcmV0dXJuIGxpbmVFbmRJbmRleCA9PT0gLTFcbiAgICA/IGNvbm5lY3Rpdml0eU91dHB1dC5zbGljZShzdGFydEluZGV4KVxuICAgIDogY29ubmVjdGl2aXR5T3V0cHV0LnNsaWNlKHN0YXJ0SW5kZXgsIGxpbmVFbmRJbmRleCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJCQSxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLDBCQUEwQjtBQUNoQyxNQUFNLDRCQUE0QjtBQUNsQyxNQUFNLHFCQUFxQjtBQUMzQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLHlCQUF5QjtBQUt4QixNQUFNLDhDQUE4QztBQVVwRCxNQUFNLGdEQUFnRDtBQXVDdEQsU0FBUyxnQkFBZ0IsUUFBd0M7QUFDdEUsUUFBTSx5QkFBeUIsT0FBTyxzQkFBc0IsS0FBSyxNQUFNO0FBQ3ZFLFFBQU0sd0JBQXdCLE9BQU8sa0JBQ2xDLE1BQU0sSUFBSSxFQUNWLEtBQUssQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLFdBQVcsbUJBQW1CLENBQUM7QUFDbEUsU0FBTywwQkFBMEI7QUFDbkM7QUFxQ08sU0FBUyxzQkFBc0IsUUFBOEM7QUFDbEYsUUFBTSxrQkFBa0IsK0JBQStCLEtBQUssT0FBTyxrQkFBa0IsR0FBRyxTQUFTLFdBQVcsS0FBSztBQUNqSCxNQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZSxHQUFHO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxZQUFZLHdCQUF3QixPQUFPLG9CQUFvQixlQUFlO0FBQ3BGLE1BQUksVUFBVSxTQUFTLHNCQUFzQixHQUFHO0FBQzlDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSwwQkFBMEIsT0FBTyx3QkFBd0IsS0FBSyxTQUFTLEdBQUcsU0FBUyxXQUFXLEtBQUssR0FBRztBQUM1RyxTQUFPLDBCQUEwQjtBQUNuQztBQWFPLFNBQVMsdUNBQ2QsU0FDUTtBQUNSLFNBQU8sUUFBUSxtQ0FBbUM7QUFDcEQ7QUFhTyxTQUFTLHlDQUNkLFNBQ1E7QUFDUixTQUFPLFFBQVEscUNBQXFDO0FBQ3REO0FBbUJBLFNBQVMsd0JBQXdCLG9CQUE0QixXQUEyQjtBQUN0RixRQUFNLGFBQWEsbUJBQW1CLFFBQVEsR0FBRyx5QkFBeUIsV0FBVyxTQUFTLEdBQUc7QUFDakcsTUFBSSxlQUFlLElBQUk7QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGVBQWUsbUJBQW1CLFFBQVEsTUFBTSxVQUFVO0FBQ2hFLFNBQU8saUJBQWlCLEtBQ3BCLG1CQUFtQixNQUFNLFVBQVUsSUFDbkMsbUJBQW1CLE1BQU0sWUFBWSxZQUFZO0FBQ3ZEOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1yZWFkaW5lc3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBQdXJlIGhlbHBlcnMgZm9yIGRlY2lkaW5nIHdoZW4gYSBmcmVzaGx5LWJvb3RlZCBBbmRyb2lkIGVtdWxhdG9yIGlzIHJlYWR5XG4gKiBlbm91Z2ggdG8gZXN0YWJsaXNoIGFuIEFwcGl1bSBzZXNzaW9uLCBwbHVzIHJlc29sdmluZyB0aGUgdHdvIHJlYWRpbmVzcy13YWl0XG4gKiB0aW1lb3V0cyBmcm9tIHRoZSB0cmFuc3BvcnQgb3B0aW9ucy4gS2VwdCBzZXBhcmF0ZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbi1vbmx5XG4gKiBgdHJhbnNwb3J0LWZhY3RvcnlgIHNvIHRoZSBwYXJzaW5nIGFuZCBkZWZhdWx0IHJlc29sdXRpb24gc3RheSB1bml0LXRlc3RhYmxlXG4gKiAodGhlIGZhY3RvcnkgaXRzZWxmIG5lZWRzIGEgcmVhbCBlbXVsYXRvciBhbmQgaXMgZXhjbHVkZWQgZnJvbSB1bml0IHRlc3RzKS5cbiAqXG4gKiBSZWFkaW5lc3MgaXMgdHdvIGluZGVwZW5kZW50IHF1ZXN0aW9ucywgd2FpdGVkIG9uIGluIHR3byBwaGFzZXM6XG4gKlxuICogMS4gKipJcyB0aGUgZ3Vlc3QgaWRsZT8qKiBgc3lzLmJvb3RfY29tcGxldGVkYCBmaXJlcyAqYmVmb3JlKiBpdCBpczogcGFja2FnZVxuICogICAgb3B0aW1pemF0aW9uIChgZGV4Mm9hdGApIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZyBhZnRlciBpdCwgc28gYVxuICogICAgc2Vzc2lvbiBlc3RhYmxpc2hlZCB0aGUgaW5zdGFudCBpdCBmaXJlcyBtYWtlcyBldmVyeSBvbmUgb2YgVWlBdXRvbWF0b3IyJ3NcbiAqICAgIHNlcmlhbGl6ZWQgYGFkYmAgcm91bmQtdHJpcHMgY29udGVuZCB3aXRoIHRoYXQgd29yayBhbmQgaW5mbGF0ZSB+M3guIEdhdGluZ1xuICogICAgdGhlIHNlc3Npb24gb24gYSBsYXRlciwgcXVpZXRlciBzaWduYWwgKHRoZSBib290IGFuaW1hdGlvbiBoYXMgc3RvcHBlZCBhbmRcbiAqICAgIHRoZSBwYWNrYWdlIG1hbmFnZXIgaXMgc2VydmluZykgbGV0cyBpdCBydW4gYWdhaW5zdCBhbiBpZGxlIGd1ZXN0IGluc3RlYWQuXG4gKiAyLiAqKkRvZXMgdGhlIGd1ZXN0IGhhdmUgYSBuZXR3b3JrPyoqIEJvdGggaWRsZSBzaWduYWxzIGFyZSB0cnVlIHdlbGwgKmJlZm9yZSpcbiAqICAgIHRoZSBkZWZhdWx0IG5ldHdvcmsgaXMgY3JlYXRlZCBhbmQgdmFsaWRhdGVkIFx1MjAxNCB0aGF0IGxhbmRzIH44MHMgaW50byBndWVzdFxuICogICAgdXB0aW1lLCB0ZW5zIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIGlkbGUgZ2F0ZSBjbGVhcnMgXHUyMDE0IGFuZCBuZWl0aGVyIHNheXNcbiAqICAgIGFueXRoaW5nIGFib3V0IGNvbm5lY3Rpdml0eSwgc28gYW4gaWRsZS1vbmx5IGdhdGUgaGFuZHMgdGhlIHN1aXRlIGEgZGV2aWNlXG4gKiAgICB3aXRoIG5vIHJvdXRlLiBTZWUge0BsaW5rIGNoZWNrTmV0d29ya1ZhbGlkYXRlZH0gZm9yIHRoZSBtZWFzdXJlbWVudCBhbmRcbiAqICAgIGZvciB3aHkgdGhlIHRocmVlIG9idmlvdXMgY29ubmVjdGl2aXR5IHByb2JlcyBhcmUgYWxsIHdyb25nIGhlcmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG5jb25zdCBBQ1RJVkVfREVGQVVMVF9ORVRXT1JLX1BBVFRFUk4gPSAvXlxccypBY3RpdmUgZGVmYXVsdCBuZXR3b3JrOlxccyooPzxuZXR3b3JrSWQ+XFxTKykvbTtcbmNvbnN0IEJPT1RfQU5JTUFUSU9OX1NUT1BQRURfU1RBVEUgPSAnc3RvcHBlZCc7XG5jb25zdCBGSVJTVF9WQUxJREFURURfUEFUVEVSTiA9IC9cXGJmaXJzdFZhbGlkYXRlZFxccysoPzx0aW1lc3RhbXA+XFxkKykvO1xuY29uc3QgTkVUV09SS19BR0VOVF9JTkZPX01BUktFUiA9ICdOZXR3b3JrQWdlbnRJbmZveyc7XG5jb25zdCBORVRXT1JLX0lEX1BBVFRFUk4gPSAvXlxcZCskLztcbmNvbnN0IFBBQ0tBR0VfTElORV9QUkVGSVggPSAncGFja2FnZTonO1xuY29uc3QgVkFMSURBVEVEX1NDT1JFX1BPTElDWSA9ICdJU19WQUxJREFURUQnO1xuXG4vKipcbiAqIERlZmF1bHQgZm9yIHtAbGluayBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLmRldmljZUlkbGVUaW1lb3V0SW5NaWxsaXNlY29uZHN9LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9ERVZJQ0VfSURMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwXzAwMDtcblxuLyoqXG4gKiBEZWZhdWx0IGZvciB7QGxpbmsgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucy5uZXR3b3JrUmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHN9LlxuICpcbiAqIFRoZSBidWRnZXQgc3RhcnRzICphZnRlciogYHN5cy5ib290X2NvbXBsZXRlZGAsIHdoZXJlIHRoZSBtZWFzdXJlZCB3YWl0IG9uIGFcbiAqIGNvbGQgV0hQWCBlbXVsYXRvciBpcyB+MzBzICh2YWxpZGF0aW9uIGF0IH44MHMgZnJvbSBib290LCBhZ2FpbnN0IGEgYm9vdCBmbGFnXG4gKiBhdCB+NTZzKS4gVGhlIGRlZmF1bHQgaXMgaGVhZHJvb20gZm9yIHRoZSBzdGFydmVkL0NJIHJlZ2ltZSB0aGUgb3RoZXIgQW5kcm9pZFxuICogYnVkZ2V0cyBhcmUgYWxyZWFkeSBzaXplZCBmb3IsIG5vdCB0aGUgZXhwZWN0ZWQgY29zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkVUV09SS19SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEyMF8wMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNoZWNrRGV2aWNlSWRsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlY2tEZXZpY2VJZGxlUGFyYW1zIHtcbiAgLyoqXG4gIFJhdyBzdGRvdXQgb2YgYGFkYiBzaGVsbCBnZXRwcm9wIGluaXQuc3ZjLmJvb3RhbmltYC5cbiAgICovXG4gIHJlYWRvbmx5IGJvb3RBbmltYXRpb25Qcm9wZXJ0eTogc3RyaW5nO1xuXG4gIC8qKlxuICBSYXcgc3Rkb3V0IG9mIGBhZGIgc2hlbGwgY21kIHBhY2thZ2UgbGlzdCBwYWNrYWdlc2AuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTGlzdE91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjaGVja05ldHdvcmtWYWxpZGF0ZWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrTmV0d29ya1ZhbGlkYXRlZFBhcmFtcyB7XG4gIC8qKlxuICBSYXcgc3Rkb3V0IG9mIGBhZGIgc2hlbGwgZHVtcHN5cyBjb25uZWN0aXZpdHlgLlxuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGl2aXR5T3V0cHV0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgYm9vdGVkIGVtdWxhdG9yIGlzIGlkbGUgZW5vdWdoIHRvIHN0YXJ0IGFuIEFwcGl1bSBzZXNzaW9uLFxuICogZnJvbSB0aGUgcmF3IG91dHB1dCBvZiB0aGUgdHdvIHByb2JlIGNvbW1hbmRzLlxuICpcbiAqIFRoZSBndWVzdCBpcyBjb25zaWRlcmVkIGlkbGUgb25jZSB0aGUgYm9vdCBhbmltYXRpb24gaGFzIHN0b3BwZWQgKiphbmQqKiB0aGVcbiAqIHBhY2thZ2UgbWFuYWdlciBpcyBzZXJ2aW5nIChpdCBsaXN0cyBhdCBsZWFzdCBvbmUgcGFja2FnZSkuIEJvdGggYXJlIGJpbmFyeSxcbiAqIGxhdGVyLXRoYW4tYHN5cy5ib290X2NvbXBsZXRlZGAgc2lnbmFscywgc28gdGhpcyByZXR1cm5zIGB0cnVlYCB3ZWxsIGFmdGVyIHRoZVxuICogcHJlbWF0dXJlIGJvb3QtY29tcGxldGVkIGZsYWcgYnV0IHdpdGhvdXQgYW55IGxhdGVuY3kgdGhyZXNob2xkcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNhbXBsZWQgcHJvYmUgb3V0cHV0cy5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBndWVzdCBpcyBpZGxlIGVub3VnaCB0byBwcm9jZWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tEZXZpY2VJZGxlKHBhcmFtczogQ2hlY2tEZXZpY2VJZGxlUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IGlzQm9vdEFuaW1hdGlvblN0b3BwZWQgPSBwYXJhbXMuYm9vdEFuaW1hdGlvblByb3BlcnR5LnRyaW0oKSA9PT0gQk9PVF9BTklNQVRJT05fU1RPUFBFRF9TVEFURTtcbiAgY29uc3QgaXNQYWNrYWdlTWFuYWdlclJlYWR5ID0gcGFyYW1zLnBhY2thZ2VMaXN0T3V0cHV0XG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5zb21lKChsaW5lKSA9PiBsaW5lLnRyaW1TdGFydCgpLnN0YXJ0c1dpdGgoUEFDS0FHRV9MSU5FX1BSRUZJWCkpO1xuICByZXR1cm4gaXNCb290QW5pbWF0aW9uU3RvcHBlZCAmJiBpc1BhY2thZ2VNYW5hZ2VyUmVhZHk7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgYm9vdGVkIGVtdWxhdG9yIGhhcyBhIHdvcmtpbmcgbmV0d29yaywgZnJvbSB0aGUgcmF3IG91dHB1dFxuICogb2YgYGFkYiBzaGVsbCBkdW1wc3lzIGNvbm5lY3Rpdml0eWAuXG4gKlxuICogUmVhZHkgbWVhbnMgdGhlIGR1bXAgbmFtZXMgYW4gKiphY3RpdmUgZGVmYXVsdCBuZXR3b3JrKiogKmFuZCogdGhhdCBuZXR3b3JrJ3NcbiAqIG93biBhZ2VudCBpbmZvIHJlcG9ydHMgdmFsaWRhdGlvbiBcdTIwMTQgZWl0aGVyIGFuIGBJU19WQUxJREFURURgIHNjb3JlIHBvbGljeSBvciBhXG4gKiBub24temVybyBgZmlyc3RWYWxpZGF0ZWRgIHRpbWVzdGFtcC4gQm90aCBhcmUgcmVxdWlyZWQ6IGEgZGVmYXVsdCBuZXR3b3JrXG4gKiBleGlzdHMgZm9yIHNlY29uZHMgYmVmb3JlIGl0IHZhbGlkYXRlcywgYW5kIGR1cmluZyB0aGF0IHdpbmRvdyBpdCBjYXJyaWVzIG5vXG4gKiB1c2FibGUgcm91dGUuXG4gKlxuICogV2h5IHRoaXMgbWF0dGVycyBhdCBhbGw6IHRoZSB0d28ge0BsaW5rIGNoZWNrRGV2aWNlSWRsZX0gc2lnbmFscyBhcmUgc2F0aXNmaWVkXG4gKiB3ZWxsIGJlZm9yZSB0aGlzIG9uZS4gVmFsaWRhdGlvbiBsYW5kcyB+NzAtODBzIGludG8gZ3Vlc3QgdXB0aW1lIFx1MjAxNCBtZWFzdXJlZCBvblxuICogYG9ic2lkaWFuX3Rlc3RgLCBgY3JlYXRlZCA3MDYzNSBmaXJzdFZhbGlkYXRlZCA3MjY4MWAsIGFuZCBvbiBhIGNvbGQgYm9vdCBvZlxuICogYG9ic2lkaWFuX3NjcmVlbnNob3RzYCwgYGNyZWF0ZWQgNjY4NzAgZmlyc3RWYWxpZGF0ZWQgNzk4NzBgLCB3aGljaCBhdCA4NXNcbiAqIHVwdGltZSBzdGlsbCBzY29yZWQgYEVWRVJfRVZBTFVBVEVEJklTX1VOTUVURVJFRGAgd2l0aCBubyBgSVNfVkFMSURBVEVEYCBhbmRcbiAqIG5vIGBmaXJzdFZhbGlkYXRlZGAgZmllbGQgYXQgYWxsLiBBZ2FpbnN0IGEgYm9vdCBmbGFnIGF0IH41NnMgdGhhdCBsZWF2ZXMgYVxuICogZ2FwIG9mIHRlbnMgb2Ygc2Vjb25kcyBvbiBhIGZhc3QgaG9zdCwgYW5kIG1vcmUgb24gYSBzbG93IG9uZS4gQSBzdWl0ZSBzdGFydGVkXG4gKiBpbiB0aGF0IGdhcCBkb2VzIG5vdCBtZXJlbHkgcnVuIHNsb3dseTogYSB0ZXN0IHRoYXQgcmVhY2hlcyB0aGUgbmV0d29yayBydW5zXG4gKiB0byBjb21wbGV0aW9uIGFnYWluc3QgYSBzaWxlbnRseSBlbXB0eSByZXN1bHQsIHdoaWNoIG5vIGFzc2VydGlvbiBpbnNpZGUgdGhlXG4gKiBzdWl0ZSBjYW4gdGVsbCBhcGFydCBmcm9tIGEgZ2VudWluZWx5IGVtcHR5IGZlZWQuXG4gKlxuICogYGR1bXBzeXMgY29ubmVjdGl2aXR5YCBpcyB0aGUgaG9uZXN0IHNvdXJjZSwgYW5kIHRoZSB0aHJlZSBwcm9iZXMgdGhhdCBsb29rXG4gKiBsaWtlIGJldHRlciBvbmVzIGFyZSBhbGwgd3JvbmcgXHUyMDE0IGVhY2ggb2YgdGhlbSBtaXNsZWQgYSBmdWxsIGRheSBvZlxuICogaW52ZXN0aWdhdGlvbiBiZWZvcmUgdGhpcyB3YXMgdW5kZXJzdG9vZDpcbiAqXG4gKiAtIGBpcCByb3V0ZWAgc2hvd3MgKipubyoqIGRlZmF1bHQgcm91dGUgb24gYSBoZWFsdGh5IGRldmljZTogQW5kcm9pZCB1c2VzXG4gKiAgIHBlci1uZXR3b3JrIHBvbGljeSByb3V0aW5nLCBhbmQgdGhlIHJvdXRlIGxpdmVzIGluIHRhYmxlIDEwMTUsIG5vdCBgbWFpbmAuXG4gKiAtIGBwaW5nYCBmYWlscyBvbiBhIGhlYWx0aHkgZGV2aWNlOiBRRU1VIHVzZXItbW9kZSBOQVQgZG9lcyBub3QgZm9yd2FyZCBJQ01QXG4gKiAgIG9uIFdpbmRvd3MgaG9zdHMuXG4gKiAtIGBnZXRwcm9wIG5ldC5kbnMxYCBpcyBlbXB0eSBvbiBldmVyeSBtb2Rlcm4gQW5kcm9pZDogRE5TIHdlbnQgcGVyLW5ldHdvcmtcbiAqICAgaW4gOC85LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc2FtcGxlZCBwcm9iZSBvdXRwdXQuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgZ3Vlc3QgaGFzIGEgdmFsaWRhdGVkIGRlZmF1bHQgbmV0d29yay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrTmV0d29ya1ZhbGlkYXRlZChwYXJhbXM6IENoZWNrTmV0d29ya1ZhbGlkYXRlZFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCBhY3RpdmVOZXR3b3JrSWQgPSBBQ1RJVkVfREVGQVVMVF9ORVRXT1JLX1BBVFRFUk4uZXhlYyhwYXJhbXMuY29ubmVjdGl2aXR5T3V0cHV0KT8uZ3JvdXBzPy5bJ25ldHdvcmtJZCddID8/ICcnO1xuICBpZiAoIU5FVFdPUktfSURfUEFUVEVSTi50ZXN0KGFjdGl2ZU5ldHdvcmtJZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhZ2VudEluZm8gPSBleHRyYWN0TmV0d29ya0FnZW50SW5mbyhwYXJhbXMuY29ubmVjdGl2aXR5T3V0cHV0LCBhY3RpdmVOZXR3b3JrSWQpO1xuICBpZiAoYWdlbnRJbmZvLmluY2x1ZGVzKFZBTElEQVRFRF9TQ09SRV9QT0xJQ1kpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBmaXJzdFZhbGlkYXRlZFRpbWVzdGFtcCA9IE51bWJlcihGSVJTVF9WQUxJREFURURfUEFUVEVSTi5leGVjKGFnZW50SW5mbyk/Lmdyb3Vwcz8uWyd0aW1lc3RhbXAnXSA/PyAnMCcpO1xuICByZXR1cm4gZmlyc3RWYWxpZGF0ZWRUaW1lc3RhbXAgPiAwO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwb3N0LWJvb3QgZGV2aWNlLWlkbGUgd2FpdCB0aW1lb3V0LCBhcHBseWluZyB0aGUgZGVmYXVsdCB3aGVuXG4gKiB0aGUgb3B0aW9uIGlzIG9taXR0ZWQuXG4gKlxuICogVGhpcyBib3VuZHMgaG93IGxvbmcgdGhlIGZhY3Rvcnkgd2FpdHMgZm9yIGEgZnJlc2hseS1zdGFydGVkIGVtdWxhdG9yIHRvXG4gKiBiZWNvbWUgaWRsZSAoc2VlIHtAbGluayBjaGVja0RldmljZUlkbGV9KSBiZWZvcmUgZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uLiBBXG4gKiB2YWx1ZSBvZiBgMGAgc2tpcHMgdGhlIHdhaXQgZW50aXJlbHkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgQW5kcm9pZCBBcHBpdW0gdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRGV2aWNlSWRsZVRpbWVvdXRJbk1pbGxpc2Vjb25kcyhcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnNgIGlzIG9uZSB0cmFuc3BvcnQgb3B0aW9ucyBiYWcgcmVhZCBieSBzaXggaGVscGVycywgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgdGhlbSBhbGwuXG4gIG9wdGlvbnM6IE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnNcbik6IG51bWJlciB7XG4gIHJldHVybiBvcHRpb25zLmRldmljZUlkbGVUaW1lb3V0SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9ERVZJQ0VfSURMRV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmV0d29yay1yZWFkeSB3YWl0IHRpbWVvdXQsIGFwcGx5aW5nIHRoZSBkZWZhdWx0IHdoZW4gdGhlIG9wdGlvblxuICogaXMgb21pdHRlZC5cbiAqXG4gKiBUaGlzIGJvdW5kcyBob3cgbG9uZyB0aGUgZmFjdG9yeSB3YWl0cywgYWZ0ZXIgdGhlIGlkbGUgZ2F0ZSwgZm9yIHRoZSBndWVzdCB0b1xuICogcmVwb3J0IGEgdmFsaWRhdGVkIGRlZmF1bHQgbmV0d29yayAoc2VlIHtAbGluayBjaGVja05ldHdvcmtWYWxpZGF0ZWR9KSBiZWZvcmVcbiAqIGVzdGFibGlzaGluZyB0aGUgc2Vzc2lvbi4gQSB2YWx1ZSBvZiBgMGAgc2tpcHMgdGhlIHdhaXQgZW50aXJlbHkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgQW5kcm9pZCBBcHBpdW0gdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTmV0d29ya1JlYWR5VGltZW91dEluTWlsbGlzZWNvbmRzKFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gUGVybWFuZW50OiBgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc2AgaXMgb25lIHRyYW5zcG9ydCBvcHRpb25zIGJhZyByZWFkIGJ5IHNpeCBoZWxwZXJzLCBzbyBubyBwZXItb3duZXIgbmFtZSBjYW4gc2F0aXNmeSB0aGVtIGFsbC5cbiAgb3B0aW9uczogT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc1xuKTogbnVtYmVyIHtcbiAgcmV0dXJuIG9wdGlvbnMubmV0d29ya1JlYWR5VGltZW91dEluTWlsbGlzZWNvbmRzID8/IERFRkFVTFRfTkVUV09SS19SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYE5ldHdvcmtBZ2VudEluZm97XHUyMDI2fWAgZW50cnkgZm9yIG9uZSBuZXR3b3JrIGlkIGZyb20gYVxuICogY29ubmVjdGl2aXR5IGR1bXAuXG4gKlxuICogKipCb3VuZGVkIHRvIHRoZSBlbnRyeSdzIG93biBsaW5lLCBhbmQgdGhhdCBib3VuZCBpcyBsb2FkLWJlYXJpbmcuKiogQSByZWFsXG4gKiBkdW1wIGxpc3RzIHRoZSBhY3RpdmUgbmV0d29yaydzIGFnZW50IHVuZGVyIGBDdXJyZW50IE5ldHdvcmtzOmAgYW5kIHRoZW4sIG11Y2hcbiAqIGZ1cnRoZXIgZG93biwgYSBgTmV0d29ya09mZmVyYCBwZXIgcHJvdmlkZXIgXHUyMDE0IGFuZCB0aG9zZSBvZmZlcnMgY2FycnlcbiAqIGBJU19WQUxJREFURURgIGluIHRoZWlyIHNjb3JlIHBvbGljaWVzIHdoYXRldmVyIHRoZSBsaXZlIG5ldHdvcmsgaXMgZG9pbmcuIEFcbiAqIGR1bXAgc2FtcGxlZCBoZXJlIHdpdGggYW4gdW52YWxpZGF0ZWQgZGVmYXVsdCBuZXR3b3JrIGhlbGQgc2V2ZW4gc3VjaCBvZmZlcnMsXG4gKiBzbyByZWFkaW5nIHBhc3QgdGhlIGFnZW50J3Mgb3duIGxpbmUgcmVwb3J0cyAqZXZlcnkqIGR1bXAgYXMgdmFsaWRhdGVkLiBPbmVcbiAqIGVudHJ5IGlzIG9uZSBsaW5lIGluIHRoZSBvYnNlcnZlZCBvdXRwdXQ7IGFuIGVudHJ5IHRoYXQgZXZlciB3cmFwcyByZWFkcyBhc1xuICogbm90LXJlYWR5LCB3aGljaCBpcyB0aGUgc2FmZSBkaXJlY3Rpb24gdG8gYmUgd3JvbmcgaW4uXG4gKlxuICogQHBhcmFtIGNvbm5lY3Rpdml0eU91dHB1dCAtIFJhdyBzdGRvdXQgb2YgYGFkYiBzaGVsbCBkdW1wc3lzIGNvbm5lY3Rpdml0eWAuXG4gKiBAcGFyYW0gbmV0d29ya0lkIC0gVGhlIG5ldHdvcmsgaWQgd2hvc2UgZW50cnkgdG8gZXh0cmFjdC5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSdzIGxpbmUsIG9yIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBkdW1wIGhhcyBubyBzdWNoIGVudHJ5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TmV0d29ya0FnZW50SW5mbyhjb25uZWN0aXZpdHlPdXRwdXQ6IHN0cmluZywgbmV0d29ya0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdGFydEluZGV4ID0gY29ubmVjdGl2aXR5T3V0cHV0LmluZGV4T2YoYCR7TkVUV09SS19BR0VOVF9JTkZPX01BUktFUn1uZXR3b3JreyR7bmV0d29ya0lkfX1gKTtcbiAgaWYgKHN0YXJ0SW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgbGluZUVuZEluZGV4ID0gY29ubmVjdGl2aXR5T3V0cHV0LmluZGV4T2YoJ1xcbicsIHN0YXJ0SW5kZXgpO1xuICByZXR1cm4gbGluZUVuZEluZGV4ID09PSAtMVxuICAgID8gY29ubmVjdGl2aXR5T3V0cHV0LnNsaWNlKHN0YXJ0SW5kZXgpXG4gICAgOiBjb25uZWN0aXZpdHlPdXRwdXQuc2xpY2Uoc3RhcnRJbmRleCwgbGluZUVuZEluZGV4KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkJBLE1BQU0saUNBQWlDO0FBQ3ZDLE1BQU0sK0JBQStCO0FBQ3JDLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sNEJBQTRCO0FBQ2xDLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0seUJBQXlCO0FBS3hCLE1BQU0sOENBQThDO0FBVXBELE1BQU0sZ0RBQWdEO0FBdUN0RCxTQUFTLGdCQUFnQixRQUF3QztBQUN0RSxRQUFNLHlCQUF5QixPQUFPLHNCQUFzQixLQUFLLE1BQU07QUFDdkUsUUFBTSx3QkFBd0IsT0FBTyxrQkFDbEMsTUFBTSxJQUFJLEVBQ1YsS0FBSyxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsV0FBVyxtQkFBbUIsQ0FBQztBQUNsRSxTQUFPLDBCQUEwQjtBQUNuQztBQXFDTyxTQUFTLHNCQUFzQixRQUE4QztBQUNsRixRQUFNLGtCQUFrQiwrQkFBK0IsS0FBSyxPQUFPLGtCQUFrQixHQUFHLFNBQVMsV0FBVyxLQUFLO0FBQ2pILE1BQUksQ0FBQyxtQkFBbUIsS0FBSyxlQUFlLEdBQUc7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFlBQVksd0JBQXdCLE9BQU8sb0JBQW9CLGVBQWU7QUFDcEYsTUFBSSxVQUFVLFNBQVMsc0JBQXNCLEdBQUc7QUFDOUMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLDBCQUEwQixPQUFPLHdCQUF3QixLQUFLLFNBQVMsR0FBRyxTQUFTLFdBQVcsS0FBSyxHQUFHO0FBQzVHLFNBQU8sMEJBQTBCO0FBQ25DO0FBYU8sU0FBUyx1Q0FFZCxTQUNRO0FBQ1IsU0FBTyxRQUFRLG1DQUFtQztBQUNwRDtBQWFPLFNBQVMseUNBRWQsU0FDUTtBQUNSLFNBQU8sUUFBUSxxQ0FBcUM7QUFDdEQ7QUFtQkEsU0FBUyx3QkFBd0Isb0JBQTRCLFdBQTJCO0FBQ3RGLFFBQU0sYUFBYSxtQkFBbUIsUUFBUSxHQUFHLHlCQUF5QixXQUFXLFNBQVMsR0FBRztBQUNqRyxNQUFJLGVBQWUsSUFBSTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSxtQkFBbUIsUUFBUSxNQUFNLFVBQVU7QUFDaEUsU0FBTyxpQkFBaUIsS0FDcEIsbUJBQW1CLE1BQU0sVUFBVSxJQUNuQyxtQkFBbUIsTUFBTSxZQUFZLFlBQVk7QUFDdkQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -85,4 +85,4 @@ async function writeDeviceSetting(params) {
|
|
|
85
85
|
withSoftKeyboardEnabled,
|
|
86
86
|
writeDeviceSetting
|
|
87
87
|
});
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5ncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCB3cml0ZXMgQW5kcm9pZCBkZXZpY2Ugc2V0dGluZ3MgXHUyMDE0IGFuZCB3cmFwcyB0aGUgb25lIHNldHRpbmcgYVxuICogc2NyZWVuc2hvdCBzdWl0ZSBoYXMgdG8gY2hhbmdlLlxuICpcbiAqIFRoZSBzY3JlZW5zaG90IEFWRHMgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlXG4gKiBvbi1zY3JlZW4ga2V5Ym9hcmQgZXZlbiB3aGVyZSB0aGUgcGFnZSBhc2tzIGZvciBvbmUuIGBzaG93X2ltZV93aXRoX2hhcmRfa2V5Ym9hcmRgXG4gKiBpcyB3aGF0IHR1cm5zIGl0IGJhY2sgb24uIHtAbGluayB3aXRoU29mdEtleWJvYXJkRW5hYmxlZH0gZmxpcHMgaXQsIHJ1bnMgdGhlXG4gKiB3b3JrLCBhbmQgcHV0cyB0aGUgZGV2aWNlIGJhY2sgZXhhY3RseSBhcyBpdCBmb3VuZCBpdCBcdTIwMTQgaW5jbHVkaW5nIHJlc3RvcmluZyBhXG4gKiBzZXR0aW5nIHRoYXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgd2hpY2ggdGFrZXMgYSBkZWxldGUgcmF0aGVyIHRoYW4gYSB3cml0ZVxuICogKHNlZSBgZGV2aWNlLXNldHRpbmctcmVzdG9yZWApLlxuICpcbiAqIEV2ZXJ5IGZ1bmN0aW9uIGhlcmUgc2hlbGxzIG91dCwgc28gdGhlIHdob2xlIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGU7XG4gKiB0aGUgcmVzdG9yZSBkZWNpc2lvbiBhbmQgdGhlIGFyZ3VtZW50IGxpc3QgaXQgZGVwZW5kcyBvbiBhcmUgdW5pdC10ZXN0ZWQgaW5cbiAqIHRoZWlyIG93biBtb2R1bGVzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKHNoZWxscyBvdXQgdG8gYSByZWFsIGRldmljZSkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGV2aWNlU2V0dGluZ05hbWVzcGFjZSB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcblxuaW1wb3J0IHsgcnVuQWRiVGV4dCB9IGZyb20gJy4vYWRiLmNqcyc7XG5pbXBvcnQge1xuICBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQsXG4gIHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZURldmljZVNldHRpbmd9IGFuZCB7QGxpbmsgcmVhZERldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmcncyBuYW1lIHdpdGhpbiB7QGxpbmsgbmFtZXNwYWNlfSwgZS5nLiBgc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG5hbWVzcGFjZSB0aGUgbmFtZSBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERldmljZVNldHRpbmdOYW1lc3BhY2UuU2VjdXJlfVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogRGV2aWNlU2V0dGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5ncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCB3cml0ZXMgQW5kcm9pZCBkZXZpY2Ugc2V0dGluZ3MgXHUyMDE0IGFuZCB3cmFwcyB0aGUgb25lIHNldHRpbmcgYVxuICogc2NyZWVuc2hvdCBzdWl0ZSBoYXMgdG8gY2hhbmdlLlxuICpcbiAqIFRoZSBzY3JlZW5zaG90IEFWRHMgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlXG4gKiBvbi1zY3JlZW4ga2V5Ym9hcmQgZXZlbiB3aGVyZSB0aGUgcGFnZSBhc2tzIGZvciBvbmUuIGBzaG93X2ltZV93aXRoX2hhcmRfa2V5Ym9hcmRgXG4gKiBpcyB3aGF0IHR1cm5zIGl0IGJhY2sgb24uIHtAbGluayB3aXRoU29mdEtleWJvYXJkRW5hYmxlZH0gZmxpcHMgaXQsIHJ1bnMgdGhlXG4gKiB3b3JrLCBhbmQgcHV0cyB0aGUgZGV2aWNlIGJhY2sgZXhhY3RseSBhcyBpdCBmb3VuZCBpdCBcdTIwMTQgaW5jbHVkaW5nIHJlc3RvcmluZyBhXG4gKiBzZXR0aW5nIHRoYXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgd2hpY2ggdGFrZXMgYSBkZWxldGUgcmF0aGVyIHRoYW4gYSB3cml0ZVxuICogKHNlZSBgZGV2aWNlLXNldHRpbmctcmVzdG9yZWApLlxuICpcbiAqIEV2ZXJ5IGZ1bmN0aW9uIGhlcmUgc2hlbGxzIG91dCwgc28gdGhlIHdob2xlIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGU7XG4gKiB0aGUgcmVzdG9yZSBkZWNpc2lvbiBhbmQgdGhlIGFyZ3VtZW50IGxpc3QgaXQgZGVwZW5kcyBvbiBhcmUgdW5pdC10ZXN0ZWQgaW5cbiAqIHRoZWlyIG93biBtb2R1bGVzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKHNoZWxscyBvdXQgdG8gYSByZWFsIGRldmljZSkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGV2aWNlU2V0dGluZ05hbWVzcGFjZSB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcblxuaW1wb3J0IHsgcnVuQWRiVGV4dCB9IGZyb20gJy4vYWRiLmNqcyc7XG5pbXBvcnQge1xuICBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQsXG4gIHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZURldmljZVNldHRpbmd9IGFuZCB7QGxpbmsgcmVhZERldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmcncyBuYW1lIHdpdGhpbiB7QGxpbmsgbmFtZXNwYWNlfSwgZS5nLiBgc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG5hbWVzcGFjZSB0aGUgbmFtZSBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERldmljZVNldHRpbmdOYW1lc3BhY2UuU2VjdXJlfVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogRGV2aWNlU2V0dGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIGlzIHBlcm1pdHRlZC5cbiAgICovXG4gIGNhbGxiYWNrKHRoaXM6IHZvaWQpOiBQcm9taXNlPFQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlIHRvIGFkZHJlc3MuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3cml0ZURldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtcyBleHRlbmRzIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZyBkZWNpZGluZyB3aGV0aGVyIEFuZHJvaWQgZHJhd3MgYSBrZXlib2FyZCB3aGlsZSBhIGhhcmR3YXJlIG9uZSBpcyBhdHRhY2hlZC5cbiAqL1xuY29uc3QgU09GVF9LRVlCT0FSRF9TRVRUSU5HX05BTUUgPSAnc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkJztcblxuY29uc3QgU09GVF9LRVlCT0FSRF9TRVRUSU5HX09OID0gJzEnO1xuXG4vKipcbiAqIENsZWFycyBhIGRldmljZSBzZXR0aW5nLCByZXR1cm5pbmcgaXQgdG8gbmV2ZXItaGF2aW5nLWJlZW4td3JpdHRlbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSwgdGhlIHNldHRpbmcgYW5kIGl0cyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHNldHRpbmcgaXMgZ29uZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYERldmljZVNldHRpbmdQYXJhbXNgIGlzIG9uZSBiYWcgc2hhcmVkIGJ5IHRoZSByZWFkIGFuZCBkZWxldGUgaGVscGVycywgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVEZXZpY2VTZXR0aW5nKHBhcmFtczogRGV2aWNlU2V0dGluZ1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBidWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50cyh7XG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIC4uLihwYXJhbXMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lc3BhY2U6IHBhcmFtcy5uYW1lc3BhY2UgfSksXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5EZWxldGVcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgZGV2aWNlIHNldHRpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBzZXR0aW5nIGFuZCBpdHMgbmFtZXNwYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc2V0dGluZydzIHZhbHVlLCBvciB0aGUgbGl0ZXJhbCBgbnVsbGAgd2hlbiBpdCBoYXMgbmV2ZXJcbiAqICAgYmVlbiB3cml0dGVuLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gUGVybWFuZW50OiBgRGV2aWNlU2V0dGluZ1BhcmFtc2AgaXMgb25lIGJhZyBzaGFyZWQgYnkgdGhlIHJlYWQgYW5kIGRlbGV0ZSBoZWxwZXJzLCBzbyBubyBwZXItb3duZXIgbmFtZSBjYW4gc2F0aXNmeSBib3RoLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWREZXZpY2VTZXR0aW5nKHBhcmFtczogRGV2aWNlU2V0dGluZ1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBidWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50cyh7XG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIC4uLihwYXJhbXMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lc3BhY2U6IHBhcmFtcy5uYW1lc3BhY2UgfSksXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5HZXRcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcm1pdHMgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgY2FsbGJhY2ssIHRoZW4gcmVzdG9yZXMgdGhlIGRldmljZSBleGFjdGx5LlxuICpcbiAqIFRoZSByZXN0b3JlIHJ1bnMgd2hldGhlciB0aGUgY2FsbGJhY2sgc3VjY2VlZGVkIG9yIHRocmV3IFx1MjAxNCBhIHN1aXRlIHRoYXQgZGllcyBtaWQtY2FwdHVyZSBtdXN0IG5vdCBsZWF2ZVxuICogdGhlIGRldmljZSBjb25maWd1cmVkIGRpZmZlcmVudGx5IHRoYW4gaXQgZm91bmQgaXQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gV2hhdCB0aGUgd3JhcHBlZCB3b3JrIHJldHVybnMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSBhbmQgdGhlIHdvcmsgdG8gcnVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB3aGF0ZXZlciB0aGUgY2FsbGJhY2sgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU29mdEtleWJvYXJkRW5hYmxlZDxUPihwYXJhbXM6IFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHNldHRpbmdQYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMgPSB7XG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZCxcbiAgICBuYW1lOiBTT0ZUX0tFWUJPQVJEX1NFVFRJTkdfTkFNRVxuICB9O1xuXG4gIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBhd2FpdCByZWFkRGV2aWNlU2V0dGluZyhzZXR0aW5nUGFyYW1zKTtcbiAgYXdhaXQgd3JpdGVEZXZpY2VTZXR0aW5nKHsgLi4uc2V0dGluZ1BhcmFtcywgdmFsdWU6IFNPRlRfS0VZQk9BUkRfU0VUVElOR19PTiB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwYXJhbXMuY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCByZXN0b3JlID0gcmVzb2x2ZURldmljZVNldHRpbmdSZXN0b3JlKHByZXZpb3VzVmFsdWUpO1xuICAgIGlmIChyZXN0b3JlLmtpbmQgPT09IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5EZWxldGUpIHtcbiAgICAgIGF3YWl0IGRlbGV0ZURldmljZVNldHRpbmcoc2V0dGluZ1BhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHdyaXRlRGV2aWNlU2V0dGluZyh7IC4uLnNldHRpbmdQYXJhbXMsIHZhbHVlOiByZXN0b3JlLnZhbHVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFdyaXRlcyBhIGRldmljZSBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgc2V0dGluZywgaXRzIG5hbWVzcGFjZSBhbmQgdGhlIHZhbHVlIHRvIHdyaXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZURldmljZVNldHRpbmcocGFyYW1zOiBXcml0ZURldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmFsdWU6IHBhcmFtcy52YWx1ZSxcbiAgICAgIHZlcmI6IERldmljZVNldHRpbmdWZXJiLlB1dFxuICAgIH0pLFxuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWRcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JBLGlCQUEyQjtBQUMzQixvQ0FHTztBQUNQLHFDQUdPO0FBc0RQLE1BQU0sNkJBQTZCO0FBRW5DLE1BQU0sMkJBQTJCO0FBU2pDLGVBQXNCLG9CQUFvQixRQUE0QztBQUNwRixZQUFNLHVCQUFXO0FBQUEsSUFDZixzQkFBa0Isb0VBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxNQUFNLGlEQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDtBQVVBLGVBQXNCLGtCQUFrQixRQUE4QztBQUNwRixTQUFPLFVBQU0sdUJBQVc7QUFBQSxJQUN0QixzQkFBa0Isb0VBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxNQUFNLGlEQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDtBQVlBLGVBQXNCLHdCQUEyQixRQUFzRDtBQUNyRyxRQUFNLGdCQUFxQztBQUFBLElBQ3pDLFVBQVUsT0FBTztBQUFBLElBQ2pCLE1BQU07QUFBQSxFQUNSO0FBRUEsUUFBTSxnQkFBZ0IsTUFBTSxrQkFBa0IsYUFBYTtBQUMzRCxRQUFNLG1CQUFtQixFQUFFLEdBQUcsZUFBZSxPQUFPLHlCQUF5QixDQUFDO0FBRTlFLE1BQUk7QUFDRixXQUFPLE1BQU0sT0FBTyxTQUFTO0FBQUEsRUFDL0IsVUFBRTtBQUNBLFVBQU0sY0FBVSwyREFBNEIsYUFBYTtBQUN6RCxRQUFJLFFBQVEsU0FBUyx1REFBeUIsUUFBUTtBQUNwRCxZQUFNLG9CQUFvQixhQUFhO0FBQUEsSUFDekMsT0FBTztBQUNMLFlBQU0sbUJBQW1CLEVBQUUsR0FBRyxlQUFlLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNyRTtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLG1CQUFtQixRQUFpRDtBQUN4RixZQUFNLHVCQUFXO0FBQUEsSUFDZixzQkFBa0Isb0VBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxPQUFPLE9BQU87QUFBQSxNQUNkLE1BQU0saURBQWtCO0FBQUEsSUFDMUIsQ0FBQztBQUFBLElBQ0QsVUFBVSxPQUFPO0FBQUEsRUFDbkIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -29,4 +29,4 @@ function selectEmulatorDeviceId(params) {
|
|
|
29
29
|
0 && (module.exports = {
|
|
30
30
|
selectEmulatorDeviceId
|
|
31
31
|
});
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWRldmljZS1pZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFBpY2tzIHRoZSBydW5uaW5nIGVtdWxhdG9yIHRoYXQgYmVsb25ncyB0byBhIG5hbWVkIEFWRC5cbiAqXG4gKiBBIGNhcHR1cmUgc3VpdGUgbXVzdCBuZXZlciB0YWtlIFwidGhlIGZpcnN0IGRldmljZSBgYWRiIGRldmljZXNgIGxpc3RzXCIuIFR3b1xuICogdGhpbmdzIHJvdXRpbmVseSBtYWtlIHRoYXQgdGhlIHdyb25nIGRldmljZSBvbiBhIG1hY2hpbmUgcnVubmluZyB0aGVzZVxuICogc3VpdGVzOiBhIHBoeXNpY2FsIHBob25lIGlzIG9mdGVuIHBsdWdnZWQgaW4gYWxvbmdzaWRlLCBhbmQgdGhlIGhhcm5lc3MncyBvd25cbiAqIGBvYnNpZGlhbl90ZXN0YCBBVkQgcnVucyBhdCBhIGRpZmZlcmVudCBnZW9tZXRyeSB0aGFuIHRoZVxuICogYG9ic2lkaWFuX3NjcmVlbnNob3RzYCBBVkQgc2l6ZWQgdG8gdGhlIHN0b3JlJ3MgZnJhbWUuIFBpY2tpbmcgYnkgcG9zaXRpb25cbiAqIHNpbGVudGx5IHBob3RvZ3JhcGhzIHRoZSB3cm9uZyBzY3JlZW4gYXQgdGhlIHdyb25nIHNpemUsIGFuZCB0aGUgZGltZW5zaW9uXG4gKiBhc3NlcnRpb24gdGhhdCB3b3VsZCBoYXZlIGNhdWdodCBpdCBmaXJlcyBzZXZlcmFsIG1pbnV0ZXMgbGF0ZXIsIGFmdGVyIHRoZVxuICogcnVuLlxuICpcbiAqIFB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgYGFkYmAgcm91bmQtdHJpcHMgdGhhdCBnYXRoZXIgdGhlIEFWRCBuYW1lcyBsaXZlIGluXG4gKiBgcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWRgLlxuICovXG5cbi8qKlxuICogT25lIHJ1bm5pbmcgZW11bGF0b3IsIHBhaXJlZCB3aXRoIHRoZSBBVkQgaXQgd2FzIHN0YXJ0ZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgQVZEIG5hbWUgdGhlIGVtdWxhdG9yIHJlcG9ydHMsIGUuZy4gYG9ic2lkaWFuX3NjcmVlbnNob3RzYC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRldmljZSBVRElELCBlLmcuIGBlbXVsYXRvci01NTU0YC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNlbGVjdEVtdWxhdG9yRGV2aWNlSWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdEVtdWxhdG9yRGV2aWNlSWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIEFWRCBuYW1lIHRvIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFdmVyeSBydW5uaW5nIGVtdWxhdG9yLCB3aXRoIHRoZSBBVkQgZWFjaCB3YXMgc3RhcnRlZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuZGlkYXRlczogcmVhZG9ubHkgRW11bGF0b3JEZXZpY2VDYW5kaWRhdGVbXTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgZW11bGF0b3Igc3RhcnRlZCBmcm9tIGEgbmFtZWQgQVZELlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQVZEIHRvIG1hdGNoIGFuZCB0aGUgcnVubmluZyBlbXVsYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBkZXZpY2UgVURJRCwgb3IgYG51bGxgIHdoZW4gbm8gcnVubmluZyBlbXVsYXRvciBjYXJyaWVzIHRoYXQgQVZEIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RFbXVsYXRvckRldmljZUlkKHBhcmFtczogU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHBhcmFtcy5jYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmF2ZE5hbWUgPT09IHBhcmFtcy5hdmROYW1lKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2guZGV2aWNlSWQgOiBudWxsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNETyxTQUFTLHVCQUF1QixRQUFxRDtBQUMxRixRQUFNLFFBQVEsT0FBTyxXQUFXLEtBQUssQ0FBQyxjQUFjLFVBQVUsWUFBWSxPQUFPLE9BQU87QUFDeEYsU0FBTyxRQUFRLE1BQU0sV0FBVztBQUNsQzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
* Picks the running emulator that belongs to a named AVD.
|
|
5
5
|
*
|
|
6
6
|
* A capture suite must never take "the first device `adb devices` lists". Two
|
|
7
|
-
* things routinely make that the wrong device on
|
|
8
|
-
* often plugged
|
|
9
|
-
* runs at a different geometry than the
|
|
10
|
-
* store's frame. Picking by position
|
|
11
|
-
* the wrong size, and the dimension
|
|
12
|
-
* several minutes later, after the
|
|
7
|
+
* things routinely make that the wrong device on a machine running these
|
|
8
|
+
* suites: a physical phone is often plugged in alongside, and the harness's own
|
|
9
|
+
* `obsidian_test` AVD runs at a different geometry than the
|
|
10
|
+
* `obsidian_screenshots` AVD sized to the store's frame. Picking by position
|
|
11
|
+
* silently photographs the wrong screen at the wrong size, and the dimension
|
|
12
|
+
* assertion that would have caught it fires several minutes later, after the
|
|
13
|
+
* run.
|
|
13
14
|
*
|
|
14
15
|
* Pure and unit-tested; the `adb` round-trips that gather the AVD names live in
|
|
15
16
|
* `resolve-emulator-device-id`.
|
|
@@ -245,4 +245,4 @@ function resolveOwnModuleUrl() {
|
|
|
245
245
|
runEmulatorReaper,
|
|
246
246
|
spawnEmulatorReaper
|
|
247
247
|
});
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlYXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0b3BzIGFuIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uY2UgaXRzIHJ1biBpcyBnb25lIGZvciBnb29kIFx1MjAxNCB0aGVcbiAqIGNhc2Ugbm90aGluZyBlbHNlIGNvdmVycywgKipMNTYqKidzIHBhdGggQiB3aXRoIG5vIGxhdGVyIHJ1bjogdGhlIHJ1bm5lciBpc1xuICoga2lsbGVkIChTSUdLSUxMLCBUYXNrIE1hbmFnZXIsIGFuIElERSBzdG9wIGJ1dHRvbiksIG5vIHRlYXJkb3duIHJ1bnMsIGFuZCBub1xuICogb3RoZXIgQW5kcm9pZCBydW4gZXZlciBjb21lcyBhbG9uZyB0byByZWNsYWltIHRoZSBsZWZ0b3ZlciBmcm9tIGl0cyBtYXJrZXIuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGVtdWxhdG9yIGxlZnQgbGlrZSB0aGF0IGtlcHQgYG5ldHNpbWRgIHNwaW5uaW5nIGZvciBzaXggaG91cnMuXG4gKlxuICogVGhlIHJlYXBlciBpcyBhIHNtYWxsIGRldGFjaGVkIE5vZGUgcHJvY2VzcyBzcGF3bmVkIGJlc2lkZSBldmVyeSBlbXVsYXRvciB0aGVcbiAqIGhhcm5lc3Mgc3RhcnRzIG9yIHRha2VzIG92ZXIuIEl0IGhvbGRzIG5vIGhhbmRsZSB0byB0aGUgZW11bGF0b3IgYW5kIG5lZWRzXG4gKiBub25lOiB0aGUgbWFya2VyIChgZW11bGF0b3ItbWFya2VyLnRzYCkgc2F5cyB3aGF0IHRvIHN0b3AsIGFuZCB0aGUgdmVyaWZpZWRcbiAqIHN0b3AgKGBlbXVsYXRvci1yZWNsYWltLnRzYCkgaXMgdGhlIG9uZSB0aGUgcnVuJ3Mgb3duIHRlYXJkb3duIHVzZXMuXG4gKlxuICogIyMgSXQgd2F0Y2hlcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIG5vdCB0aGUgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgaXRcbiAqXG4gKiBUaGUgcHJvY2VzcyB0aGF0IHN0YXJ0cyB0aGUgZW11bGF0b3IgaXMgbm90IGFsd2F5cyB0aGUgcnVuLiBBIHByb2plY3Qgd2l0aCBub1xuICogdHJhbnNwb3J0IGdsb2JhbCBzZXR1cCBib290cyBpdCBmcm9tIGEgKip0ZXN0IHdvcmtlcioqICgqKkw1NioqIHBhdGggQSksIGFuZFxuICogVml0ZXN0IGVuZHMgd29ya2VycyBkdXJpbmcgYSBwZXJmZWN0bHkgaGVhbHRoeSBydW4gXHUyMDE0IHNvIGEgcmVhcGVyIHRpZWQgdG8gaXRzXG4gKiBzcGF3bmVyJ3MgbGlmZXRpbWUgKHRoZSAqKkwzMyoqIGxpdmVuZXNzIHNvY2tldCwgdGhlIGZpcnN0IGlkZWEpIHdvdWxkIHN0b3BcbiAqIHRoZSBlbXVsYXRvciBtaWQtcnVuLCBvciByYWNlIHRoZSBuZXh0IHdvcmtlciB0YWtpbmcgaXQgb3Zlci4gVGhlIGBhbmRyb2lkYFxuICogc2V0dXAgbG9jayAoKipMNyoqKSBpcyBoZWxkIGJ5IHRoZSBydW4ncyBtYWluIHByb2Nlc3MgZm9yIHRoZSB3aG9sZSBydW4sIGFuZFxuICogaXRzIGhvbGRlciBiZWluZyBhbGl2ZSBpcyBleGFjdGx5IHdoYXQgXCJhbiBBbmRyb2lkIHJ1biBpcyBpbiBmbGlnaHRcIiBtZWFucy5cbiAqXG4gKiBTbyB0aGUgcmVhcGVyIHBvbGxzIHRoYXQgbG9jaywgYW5kIG9uY2UgaXQgY2FuICoqdGFrZSoqIGl0IFx1MjAxNCBubyBsaXZlIHJ1blxuICogaG9sZHMgaXQgXHUyMDE0IGl0IHN0b3BzIHRoZSBoYXJuZXNzJ3MgbGVmdG92ZXJzIHdoaWxlIGhvbGRpbmcgaXQsIHdoaWNoIGlzIHRoZVxuICogcHJlY29uZGl0aW9uIGV2ZXJ5IGxlZnRvdmVyIHN0b3AgZG9jdW1lbnRzOiBubyBydW4gY2FuIGFkb3B0IGFuIGVtdWxhdG9yIHRoYXRcbiAqIGlzIG1pZC1zaHV0ZG93bi4gVGhhdCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgbmV4dCBydW4ncyBwcmVmbGlnaHQgd291bGQgZG8sXG4gKiBkb25lIGF0IHRoZSBmaXJzdCBtb21lbnQgdGhhdCBydW4gY291bGQgaGF2ZSBkb25lIGl0LlxuICpcbiAqIEEgZGVhZCBzYW1lLWhvc3QgaG9sZGVyIGlzIGFiYW5kb25lZCBhdCBvbmNlLiBBIGxpdmUtUElEIGhvbGRlciB0aGF0IGhhcyBnb25lXG4gKiBzaWxlbnQgaXMgb25seSBhYmFuZG9uZWQgYWZ0ZXJcbiAqIHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU30sIGZhciB3aWRlciB0aGFuIHRoZVxuICogdHdvIG1pbnV0ZXMgYSB3YWl0aW5nIHJ1biBzdGVhbHMgb246IGEgcmVhcGVyIGlzIGFsd2F5cyB3YWl0aW5nLCBzbyBhdCB0d29cbiAqIG1pbnV0ZXMgYSBsaXZlIHJ1biB0aGF0IGJsb2NrZWQgaXRzIGV2ZW50IGxvb3Agd291bGQgbG9zZSBpdHMgZW11bGF0b3IuXG4gKlxuICogIyMgRmFpbC1vcGVuLCBsaWtlIHRoZSByZW5kZXJlciB3YXRjaGRvZ1xuICpcbiAqIEEgcmVhcGVyIGlzIGFybWVkIG9ubHkgd2hlbiBhIGxpdmUgcnVuIGhvbGRzIHRoZSBsb2NrIGF0IHRoZSBtb21lbnQgdGhlXG4gKiBlbXVsYXRvciBpcyByZWNvcmRlZC4gQSBydW4gdGhhdCB0YWtlcyBubyBsb2NrIFx1MjAxNCBhIGhhbmQtd2lyZWRcbiAqIGBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9uc2AgXHUyMDE0IGdldHMgbm9uZSwgYW5kIHNheXMgc28sIHJhdGhlciB0aGFuIGEgcmVhcGVyXG4gKiB0aGF0IHdvdWxkIHJlYWQgaXRzIG1pc3NpbmcgbG9jayBhcyBcInRoZSBydW4gaXMgb3ZlclwiIGFuZCBzdG9wIGFuIGVtdWxhdG9yXG4gKiBzb21lYm9keSBpcyB1c2luZy4gQSBzcGF3biB0aGF0IGZhaWxzIGlzIGxvZ2dlZCBhbmQgbmV2ZXIgZmFpbHMgdGhlIGxhdW5jaC5cbiAqXG4gKiAjIyBIb3cgaXQgcnVuc1xuICpcbiAqIGBwcm9jZXNzLmV4ZWNQYXRoIC1lIDxib290c3RyYXA+IDx0aGlzIG1vZHVsZSdzIFVSTD4gPGF2ZE5hbWU+IDxzdGFydGVkQXQ+YDpcbiAqIHRoZSBib290c3RyYXAgYGltcG9ydCgpYHMgdGhpcyB2ZXJ5IG1vZHVsZSBhbmQgY2FsbHMge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS5cbiAqIFRoZSBVUkwgaXMgdGhlIGJ1aWx0IGAubWpzYCAvIGAuY2pzYCBpbiBhIGNvbnN1bWVyJ3MgaW5zdGFsbCwgYW5kIHRoZSBgLnRzYFxuICogc291cmNlIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMsIHdoaWNoIE5vZGUncyB0eXBlIHN0cmlwcGluZyBydW5zIGFzLWlzIFx1MjAxNCBzb1xuICogbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBhIG1vZHVsZSB0aGF0IHJlYWRzIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbC4gSXRzIHN0ZG91dC9zdGRlcnIgZ28gdG8gYSBwZXItQVZEIGxvZyBmaWxlLCBjYXBwZWRcbiAqIGF0IHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTfSwgc28gdGhlIHZlcmRpY3QgbGluZXMgdGhlIHN0b3BcbiAqIHByaW50cyBhcmUgb24gcmVjb3JkIGV2ZW4gdGhvdWdoIG5vIHRlcm1pbmFsIGlzIGxlZnQgdG8gc2hvdyB0aGVtLlxuICpcbiAqICMjIEl0IGlzIHN0YXJ0ZWQgdGhyb3VnaCBhIHJlbGF5LCBzbyBhIHByb2Nlc3MtdHJlZSBraWxsIGNhbm5vdCB0YWtlIGl0XG4gKlxuICogYGRldGFjaGVkYCBkb2VzIG5vdCByZXBhcmVudCBvbiBXaW5kb3dzOiBhIGNoaWxkIHNwYXduZWQgc3RyYWlnaHQgZnJvbSB0aGUgcnVuXG4gKiBzdGF5cyBpbiB0aGUgcnVuJ3MgcHJvY2VzcyB0cmVlLCBzbyB0aGUga2lsbCBzaGFwZXMgdGhhdCB3YWxrIHRoYXQgdHJlZSB0YWtlXG4gKiB0aGUgc2FmZXR5IG5ldCBhbG9uZyB3aXRoIHRoZSB0aGluZyBpdCB3YXMgZ3VhcmRpbmcgXHUyMDE0IFRhc2sgTWFuYWdlcidzICpFbmRcbiAqIHRhc2sqLCBgdGFza2tpbGwgL1RgLCBhbiBJREUgc3RvcCBidXR0b24sIGEgYFBhcmVudFByb2Nlc3NJZGAgZGVzY2VuZGFudFxuICogc3dlZXAuIE1lYXN1cmVkIG9uIDIwMjYtMDktMTE6IGEgcmVhcGVyIGRpZWQgd2l0aCB0aGUgcnVuIGl0IHdhcyB3YXRjaGluZywgYW5kXG4gKiB0aGUgZW11bGF0b3IgaXQgd291bGQgaGF2ZSBzdG9wcGVkIGlkbGVkIG9uIGZvciB0ZW4gbWludXRlcy5cbiAqXG4gKiBTbyB0aGUgc3Bhd24gZ29lcyB0aHJvdWdoIGEgcmVsYXkgXHUyMDE0IHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXB9IFx1MjAxNFxuICogd2hpY2ggc3RhcnRzIHRoZSByZWFwZXIgYW5kIGV4aXRzIGF0IG9uY2UuIEJ5IHRoZSB0aW1lIGFueSB0cmVlLXdhbGtlciB0YWtlc1xuICogaXRzIHNuYXBzaG90IHRoZSByZWxheSBpcyBnb25lLCBzbyB0aGVyZSBpcyBubyBlZGdlIGZyb20gdGhlIHJ1biB0byB0aGUgcmVhcGVyXG4gKiBsZWZ0IHRvIGZvbGxvdy4gVGhpcyBpcyB0aGUgZG91YmxlLWZvcmsgaWRpb20sIGFuZCBpdCBob2xkcyBvbiBQT1NJWCBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogb25jZSB0aGUgcmVsYXkgZXhpdHMsIHRoZSByZWFwZXIgYmVsb25ncyB0byBgaW5pdGAuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY2xvc2VTeW5jLFxuICBta2RpclN5bmMsXG4gIG9wZW5TeW5jLFxuICBzdGF0U3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvck1hcmtlciB9IGZyb20gJy4vZW11bGF0b3ItbWFya2VyLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFNldHVwTG9jayB9IGZyb20gJy4vc2V0dXAtbG9jay5janMnO1xuXG5pbXBvcnQgeyByZWFkRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuaW1wb3J0IHsgRW11bGF0b3JSZWNsYWltZXIgfSBmcm9tICcuL2VtdWxhdG9yLXJlY2xhaW0uY2pzJztcbmltcG9ydCB7IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGNoZWNrSXNQcm9jZXNzQWxpdmUgfSBmcm9tICcuL3Byb2Nlc3MtbGl2ZW5lc3MuY2pzJztcbmltcG9ydCB7XG4gIEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgY2hlY2tJc1NldHVwTG9ja0hlbGQsXG4gIHRyeUFjcXVpcmVTZXR1cExvY2tcbn0gZnJvbSAnLi9zZXR1cC1sb2NrLmNqcyc7XG5cbi8qKlxuICogSG93IG9mdGVuIHRoZSByZWFwZXIgbG9va3MgYXQgdGhlIG1hcmtlciBhbmQgdGhlIGxvY2sgXHUyMDE0IHRoZSBsb2NrJ3Mgb3duXG4gKiBoZWFydGJlYXQgaW50ZXJ2YWwsIHNvIGEga2lsbGVkIHJ1biBpcyBub3RpY2VkIHdpdGhpbiBvbmUgYmVhdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGxvbmcgYSBzYW1lLWhvc3QgbG9jayBob2xkZXIgd2hvc2UgUElEIGlzIHN0aWxsIGFsaXZlIG1heSBzdGF5IHNpbGVudFxuICogYmVmb3JlIHRoZSByZWFwZXIgdHJlYXRzIGl0cyBydW4gYXMgZ29uZTogMzAgbWludXRlcywgdGhlIHRocmVzaG9sZCB0aGUgbG9ja1xuICogYWxyZWFkeSB1c2VzIGFjcm9zcyBob3N0cy4gT25seSBhIHJlY3ljbGVkIFBJRCBzaG91bGQgZXZlciByZWFjaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9MT0NLX1NJTEVOQ0VfSU5fTUlMTElTRUNPTkRTID0gMV84MDBfMDAwO1xuXG4vKipcbiAqIFRoZSBzaXplIHBhc3Qgd2hpY2ggdGhlIHJlYXBlciBsb2cgaXMgc3RhcnRlZCBhZnJlc2ggcmF0aGVyIHRoYW4gYXBwZW5kZWQgdG8uXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKipcbiAqIFRoZSBleHBvcnQgdGhlIGJvb3RzdHJhcCBjYWxscy4gTmFtZWQgaGVyZSBzbyB0aGUgYm9vdHN0cmFwIGFuZCB0aGUgZXhwb3J0XG4gKiBjYW5ub3QgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRSA9ICdydW5FbXVsYXRvclJlYXBlcic7XG5cbmNvbnN0IExPQ0tfTEFCRUwgPSAnZW11bGF0b3ItcmVhcGVyJztcbmNvbnN0IFJFQVBFUl9MT0dfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLXJlYXBlci5sb2cnO1xuXG4vKipcbiAqIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvcjogdGhlIGVtdWxhdG9yIGEgbWFya2VyIHJlY29yZGVkIHdoZW4gaXQgd2FzIGFybWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgbWFya2VyIGl0IHdhdGNoZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHdhdGNoZWQgZW11bGF0b3Igd2FzIGxhdW5jaGVkLiBBIHRha2VvdmVyIGtlZXBzIGl0LCBzbyBpdCBuYW1lcyBvbmVcbiAgICogZW11bGF0b3IgYWNyb3NzIGV2ZXJ5IHJ1biB0aGF0IG93bnMgaXQsIGFuZCB0ZWxscyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoZVxuICAgKiBzYW1lIEFWRCBhcGFydC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbWFya2VyIHNheXMgdGhlIHJlYXBlciBzaG91bGQgZG8gbmV4dC5cbiAqXG4gKiAtIGBlbXVsYXRvci1zdG9wcGVkYCBcdTIwMTQgdGhlIG1hcmtlciBpcyBnb25lLCBvciBub25lIG9mIGl0cyBQSURzIGlzIGFsaXZlOiB0aGVcbiAqICAgZW11bGF0b3Igd2FzIHN0b3BwZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB3YXRjaC5cbiAqIC0gYHN1cGVyc2VkZWRgIFx1MjAxNCB0aGUgbWFya2VyIG5vdyByZWNvcmRzIGEgZGlmZmVyZW50IGVtdWxhdG9yIG9mIHRoZSBzYW1lIEFWRCxcbiAqICAgd2hpY2ggaGFzIGl0cyBvd24gcmVhcGVyLlxuICogLSBgd2F0Y2hgIFx1MjAxNCB0aGUgZW11bGF0b3IgaXMgc3RpbGwgdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0ID0gJ2VtdWxhdG9yLXN0b3BwZWQnIHwgJ3N1cGVyc2VkZWQnIHwgJ3dhdGNoJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2h9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsYXVuY2ggdGltZSBvZiB0aGUgZW11bGF0b3IgdGhpcyByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFybWVkU3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgV2hldGhlciBhIFBJRCBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJc1BpZEFsaXZlOiAocGlkOiBudW1iZXIpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBBVkQncyBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBpZiBhbnkuXG4gICAqL1xuICByZWFkb25seSBtYXJrZXI6IEVtdWxhdG9yTWFya2VyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzcGF3bkVtdWxhdG9yUmVhcGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgZW11bGF0b3Igd2FzIGp1c3QgcmVjb3JkZWQuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFJlY2VpdmVzIHRoZSBhcm1lZCAvIG5vdC1hcm1lZCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICBUaGUgcmVjb3JkZWQgZW11bGF0b3IncyBsYXVuY2ggdGltZSwgYXMgd3JpdHRlbiBpbnRvIGl0cyBtYXJrZXIuXG4gICAqL1xuICByZWFkb25seSBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGhlIHJlYXBlcidzIGFyZ3VtZW50cyBmb3IgaXRzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0gcmVhcGVyQXJndW1lbnRzIC0gV2hhdCB0aGUgcmVhcGVyIHdhdGNoZXMgZm9yLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGluIHRoZSBvcmRlciB7QGxpbmsgcGFyc2VFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gcmVhZHMgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSwgU3RyaW5nKHJlYXBlckFyZ3VtZW50cy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyldO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc2NyaXB0IGBub2RlIC1lYCBydW5zIHRvIHN0YXJ0IHRoZSByZWFwZXIuXG4gKlxuICogSXQgYGltcG9ydCgpYHMgdGhlIG1vZHVsZSB3aG9zZSBVUkwgaXMgaXRzIGZpcnN0IGFyZ3VtZW50IGFuZCBoYW5kcyB0aGUgcmVzdFxuICogdG8ge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS4gYGltcG9ydCgpYCByYXRoZXIgdGhhbiBgcmVxdWlyZWAsIGJlY2F1c2UgaXRcbiAqIGxvYWRzIGFsbCB0aHJlZSBmb3JtcyB0aGUgbW9kdWxlIHNoaXBzIGFzIFx1MjAxNCBFU00sIENKUywgYW5kIHRoaXMgcmVwbydzIG93blxuICogYC50c2Agc291cmNlIHVuZGVyIE5vZGUncyB0eXBlIHN0cmlwcGluZy4gQSBDSlMgbW9kdWxlJ3MgbmFtZWQgZXhwb3J0cyBhcmVcbiAqIGZvdW5kIGJ5IE5vZGUncyBzdGF0aWMgYW5hbHlzaXM7IGBkZWZhdWx0YCBpcyB0aGUgZmFsbGJhY2sgd2hlbiB0aGV5IGFyZSBub3QuXG4gKlxuICogQHJldHVybnMgVGhlIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJCb290c3RyYXAoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICAnaW1wb3J0KHByb2Nlc3MuYXJndlsxXSkudGhlbigocmVhcGVyTW9kdWxlKSA9PiB7JyxcbiAgICBgICBjb25zdCBydW4gPSByZWFwZXJNb2R1bGUuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX0gPz8gcmVhcGVyTW9kdWxlLmRlZmF1bHQuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX07YCxcbiAgICAnICByZXR1cm4gcnVuKHByb2Nlc3MuYXJndi5zbGljZSgyKSk7JyxcbiAgICAnfSkuY2F0Y2goKGVycm9yKSA9PiB7JyxcbiAgICAnICBjb25zb2xlLmVycm9yKGVycm9yKTsnLFxuICAgICcgIHByb2Nlc3MuZXhpdENvZGUgPSAxOycsXG4gICAgJ30pOydcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHNjcmlwdCBgbm9kZSAtZWAgcnVucyBhcyB0aGUgKipyZWxheSoqOiBpdCBzdGFydHMgdGhlIHJlYXBlciBhbmRcbiAqIGV4aXRzIGF0IG9uY2UsIHNvIHRoZSByZWFwZXIgaXMgbGVmdCB3aXRoIGEgZGVhZCBwYXJlbnQgYW5kIG5vIHRyZWUtd2Fsa2luZ1xuICoga2lsbCBvZiB0aGUgcnVuIGNhbiByZWFjaCBpdC4gU2VlIHRoZSByZWxheSBzZWN0aW9uIGluIHRoaXMgbW9kdWxlJ3MgaGVhZGVyXG4gKiBmb3Igd2h5IHRoYXQgaW5kaXJlY3Rpb24gZXhpc3RzIGF0IGFsbC5cbiAqXG4gKiBJdHMgb3duIGFyZ3VtZW50cyBhcmUgdGhlIHJlYXBlcidzIHdob2xlIGNvbW1hbmQgbGluZSBcdTIwMTQgdGhlIGJvb3RzdHJhcCBzY3JpcHRcbiAqIGZpcnN0LCB0aGVuIGV2ZXJ5dGhpbmcgdGhhdCBib290c3RyYXAgcmVhZHMgXHUyMDE0IHNvIHRoZSByZWxheSBuZXZlciBoYXMgdG8ga25vd1xuICogd2hhdCBhbnkgb2YgdGhlbSBtZWFuLiBJdCBoYW5kcyB0aGUgcmVhcGVyIGl0cyBvd24gc3Rkb3V0IGFuZCBzdGRlcnIsIHdoaWNoXG4gKiBhcmUgdGhlIGNhcHBlZCBsb2cgZmlsZSB0aGUgc3Bhd25lciBvcGVuZWQsIHNvIHRoZSBsb2cgaXMgdW5hZmZlY3RlZCBieSB0aGVcbiAqIGV4dHJhIGhvcC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ2NvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7JyxcbiAgICAndHJ5IHsnLFxuICAgICcgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW1wiLWVcIiwgcHJvY2Vzcy5hcmd2WzFdLCAuLi5wcm9jZXNzLmFyZ3Yuc2xpY2UoMildLCB7JyxcbiAgICAnICAgIGRldGFjaGVkOiB0cnVlLCcsXG4gICAgJyAgICBzdGRpbzogW1wiaWdub3JlXCIsIDEsIDJdLCcsXG4gICAgJyAgICB3aW5kb3dzSGlkZTogdHJ1ZScsXG4gICAgJyAgfSk7JyxcbiAgICAnICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7IGNvbnNvbGUuZXJyb3IoZXJyb3IpOyB9KTsnLFxuICAgICcgIGNoaWxkLnVucmVmKCk7JyxcbiAgICAnfSBjYXRjaCAoZXJyb3IpIHsnLFxuICAgICcgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOycsXG4gICAgJyAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7JyxcbiAgICAnfSdcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSByZWFwZXIncyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIGFyZ3VtZW50cyBhZnRlciB0aGUgbW9kdWxlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudHMsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhleSBhcmUgbm90IHRoZSB0d28ge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyaXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndjogcmVhZG9ubHkgc3RyaW5nW10pOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFthdmROYW1lLCBzdGFydGVkQXRUZXh0LCAuLi5yZXN0XSA9IGFyZ3Y7XG4gIGlmICghYXZkTmFtZSB8fCBzdGFydGVkQXRUZXh0ID09PSB1bmRlZmluZWQgfHwgcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzID0gTnVtYmVyKHN0YXJ0ZWRBdFRleHQpO1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB8fCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IGF2ZE5hbWUsIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzIH07XG59XG5cbi8qKlxuICogRGVjaWRlcyBob3cgdGhlIHJlYXBlciBsb2cgaXMgb3BlbmVkLCBzbyBpdCBjYW4gbmV2ZXIgZ3JvdyB3aXRob3V0IGJvdW5kLlxuICpcbiAqIEBwYXJhbSBzaXplSW5CeXRlcyAtIFRoZSBsb2cncyBjdXJyZW50IHNpemUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqIEByZXR1cm5zIGAnYSdgIHRvIGFwcGVuZCwgb3IgYCd3J2AgdG8gc3RhcnQgaXQgYWZyZXNoIG9uY2UgaXQgaGFzIHBhc3NlZCB0aGUgY2FwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVtdWxhdG9yUmVhcGVyTG9nT3BlbkZsYWcoc2l6ZUluQnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCk6ICdhJyB8ICd3JyB7XG4gIHJldHVybiBzaXplSW5CeXRlcyAhPT0gdW5kZWZpbmVkICYmIHNpemVJbkJ5dGVzID4gRU1VTEFUT1JfUkVBUEVSX0xPR19NQVhfU0laRV9JTl9CWVRFUyA/ICd3JyA6ICdhJztcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoYXQgdGhlIG1hcmtlciBzYXlzIHRoZSByZWFwZXIgc2hvdWxkIGRvIG5leHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBhbmQgdGhlIGVtdWxhdG9yIHRoZSByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAqIEByZXR1cm5zIFRoZSB2ZXJkaWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2gocGFyYW1zOiBSZXNvbHZlRW11bGF0b3JSZWFwZXJXYXRjaFBhcmFtcyk6IEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0IHtcbiAgY29uc3QgeyBtYXJrZXIgfSA9IHBhcmFtcztcbiAgaWYgKG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdlbXVsYXRvci1zdG9wcGVkJztcbiAgfVxuXG4gIGlmIChtYXJrZXIuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgIT09IHBhcmFtcy5hcm1lZFN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB7XG4gICAgcmV0dXJuICdzdXBlcnNlZGVkJztcbiAgfVxuXG4gIC8qXG4gICAqIEEgbGF1bmNoLXRpbWUgbWFya2VyJ3MgUElEIGxpc3QgaXMgZGVsaWJlcmF0ZWx5IGluY29tcGxldGUgXHUyMDE0IGl0IG5hbWVzIHRoZVxuICAgKiBsYXVuY2hlciwgYW5kIHRoZSBiYWNrZW5kIGl0IGZvcmtzIGlzIGlkZW50aWZpZWQgYnkgdGhlIHByZS1sYXVuY2ggZGlmZixcbiAgICogd2hpY2ggY29zdHMgYSBob3N0IHByb2Nlc3MgbGlzdGluZyB0aGlzIHBvbGwgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG1ha2UuXG4gICAqIFNvIGl0IGlzIG5ldmVyIHJlYWQgYXMgc3RvcHBlZCBmcm9tIFBJRHMgYWxvbmU6IHRoZSByZWNsYWltLCB3aGljaCBkb2VzXG4gICAqIG1ha2UgdGhhdCBsaXN0aW5nLCBpcyB3aGF0IGp1ZGdlcyBpdC5cbiAgICovXG4gIGlmIChtYXJrZXIucHJlTGF1bmNoRW11bGF0b3JQaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3dhdGNoJztcbiAgfVxuXG4gIHJldHVybiBtYXJrZXIub3duZWRFbXVsYXRvclBpZHMuc29tZSgocGlkKSA9PiBwYXJhbXMuY2hlY2tJc1BpZEFsaXZlKHBpZCkpID8gJ3dhdGNoJyA6ICdlbXVsYXRvci1zdG9wcGVkJztcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERldGFjaGVkLXByb2Nlc3MgZ2x1ZSBjb3ZlcmVkIGJ5IHRoZSBBbmRyb2lkIGludGVncmF0aW9uIHN1aXRlLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuLyoqXG4gKiBUaGUgcmVhcGVyIHByb2Nlc3MncyBib2R5OiB3YXRjaGVzIHRoZSBtYXJrZXIgYW5kIHRoZSBsb2NrIHVudGlsIGVpdGhlciB0aGVcbiAqIGVtdWxhdG9yIGlzIGdvbmUgb3Igbm8gcnVuIGhvbGRzIHRoZSBsb2NrLCBhbmQgaW4gdGhlIHNlY29uZCBjYXNlIHN0b3BzIHRoZVxuICogaGFybmVzcydzIGxlZnRvdmVycyB3aGlsZSBob2xkaW5nIGl0LlxuICpcbiAqIEV4cG9ydGVkIGZvciB0aGUgYm9vdHN0cmFwLCB3aGljaCBpcyBpdHMgb25seSBjYWxsZXIuXG4gKlxuICogQHBhcmFtIGFyZ3YgLSBUaGUgcmVhcGVyJ3MgYXJndW1lbnRzLCBhcyB7QGxpbmsgYnVpbGRFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gd3JvdGUgdGhlbS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkVtdWxhdG9yUmVhcGVyKGFyZ3Y6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlYXBlckFyZ3VtZW50cyA9IHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndik7XG4gIGlmICghcmVhcGVyQXJndW1lbnRzKSB7XG4gICAgbG9nKGBbZW11bGF0b3ItcmVhcGVyXSBSZWZ1c2luZyB0byBydW46IGV4cGVjdGVkIDxhdmROYW1lPiA8c3RhcnRlZEF0SW5NaWxsaXNlY29uZHM+LCBnb3QgJHtKU09OLnN0cmluZ2lmeShhcmd2KX0uYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9ID0gcmVhcGVyQXJndW1lbnRzO1xuICByZWFwZXJMb2coXG4gICAgYFdhdGNoaW5nIHRoZSBlbXVsYXRvciBzdGFydGVkIGF0ICR7bmV3IERhdGUoc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCl9IChyZWFwZXIgUElEICR7U3RyaW5nKHByb2Nlc3MucGlkKX0pOyBpdCBpcyBzdG9wcGVkIG9uY2Ugbm8gQW5kcm9pZCBydW4gaG9sZHMgdGhlICcke0FORFJPSURfU0VUVVBfTE9DS19TQ09QRX0nIHNldHVwIGxvY2suYFxuICApO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCB2ZXJkaWN0ID0gcmVhZFdhdGNoVmVyZGljdChyZWFwZXJBcmd1bWVudHMpO1xuICAgIGlmICh2ZXJkaWN0ICE9PSAnd2F0Y2gnKSB7XG4gICAgICByZWFwZXJMb2coZGVzY3JpYmVFeGl0KHZlcmRpY3QpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbG9jazogU2V0dXBMb2NrIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsb2NrID0gdHJ5QWNxdWlyZVNldHVwTG9jayh7XG4gICAgICAgIGxhYmVsOiBMT0NLX0xBQkVMLFxuICAgICAgICBzY29wZTogQU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFLFxuICAgICAgICBzdGFsZUFmdGVyU2lsZW5jZUluTWlsbGlzZWNvbmRzOiBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIC8vIEZhaWwgb3BlbjogYSBsb2NrIHRoaXMgcHJvY2VzcyBjYW5ub3QgZXZlbiBsb29rIGF0IGlzIG5vIGV2aWRlbmNlIHRoZSBydW4gaXMgb3Zlci5cbiAgICAgIHJlYXBlckxvZyhgR2l2aW5nIHVwOiB0aGUgc2V0dXAgbG9jayBjb3VsZCBub3QgYmUgcmVhZCAoJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9KS4gVGhlIG5leHQgQW5kcm9pZCBydW4gcmVjbGFpbXMgdGhlIGVtdWxhdG9yIGluc3RlYWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvY2spIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZSBydW4gbWF5IGhhdmUgZW5kZWQgbm9ybWFsbHkgYmV0d2VlbiB0aGUgbG9vayBhYm92ZSBhbmQgdGhlIGxvY2s6IGl0cyB0ZWFyZG93biB0aGVuIHN0b3BwZWQgdGhlIGVtdWxhdG9yLlxuICAgICAgICBjb25zdCBsb2NrZWRWZXJkaWN0ID0gcmVhZFdhdGNoVmVyZGljdChyZWFwZXJBcmd1bWVudHMpO1xuICAgICAgICBpZiAobG9ja2VkVmVyZGljdCAhPT0gJ3dhdGNoJykge1xuICAgICAgICAgIHJlYXBlckxvZyhkZXNjcmliZUV4aXQobG9ja2VkVmVyZGljdCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYXBlckxvZygnTm8gQW5kcm9pZCBydW4gaG9sZHMgdGhlIHNldHVwIGxvY2sgYW55IG1vcmUsIHNvIG5vdGhpbmcgaXMgbGVmdCB0byBzdG9wIHRoZSBlbXVsYXRvci4gU3RvcHBpbmcgdGhlIGxlZnRvdmVycyB0aGlzIGhhcm5lc3Mgc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBuZXcgRW11bGF0b3JSZWNsYWltZXIocmVhcGVyTG9nKS5yZWNsYWltTGVmdG92ZXJFbXVsYXRvcnMoeyBzY29wZTogJ2VuZC1vZi1ydW4nIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbG9jay5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgRU1VTEFUT1JfUkVBUEVSX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYXBlckxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2coYFtlbXVsYXRvci1yZWFwZXI6JHthdmROYW1lfV0gJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZWFwZXIgZm9yIGFuIGVtdWxhdG9yIHRoZSBoYXJuZXNzIGp1c3QgcmVjb3JkZWQgYXMgaXRzIG93biwgd2hlblxuICogYSBsaXZlIHJ1biBob2xkcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2sgXHUyMDE0IGFuZCBzYXlzIHdoaWNoIGl0IGRpZC5cbiAqXG4gKiBOZXZlciB0aHJvd3M6IGEgcmVhcGVyIHRoYXQgY2Fubm90IGJlIHNwYXduZWQgaXMgYSBsb3N0IHNhZmV0eSBuZXQsIG5vdCBhXG4gKiByZWFzb24gdG8gZmFpbCB0aGUgbGF1bmNoIGl0IHdvdWxkIGhhdmUgZ3VhcmRlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJlY29yZGVkIGVtdWxhdG9yLCBhbmQgd2hlcmUgdG8gcmVwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25FbXVsYXRvclJlYXBlcihwYXJhbXM6IFNwYXduRW11bGF0b3JSZWFwZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhdmROYW1lIH0gPSBwYXJhbXM7XG4gIGlmICghY2hlY2tJc1NldHVwTG9ja0hlbGQoQU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFKSkge1xuICAgIHBhcmFtcy5sb2coXG4gICAgICBgTm8gZW11bGF0b3IgcmVhcGVyIGFybWVkIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6IG5vIHJ1biBob2xkcyB0aGUgJyR7QU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFfScgc2V0dXAgbG9jaywgc28gYSByZWFwZXIgY291bGQgbm90IHRlbGwgdGhpcyBydW4gZW5kaW5nIGZyb20gaXQgYmVpbmcga2lsbGVkLiBJZiB0aGlzIHByb2Nlc3MgaXMga2lsbGVkLCBvbmx5IHRoZSBuZXh0IEFuZHJvaWQgcnVuIG9uIHRoaXMgaG9zdCBzdG9wcyB0aGUgZW11bGF0b3IuYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZVBhdGggPSBqb2luKGdldFJlYXBlckxvZ0RpcmVjdG9yeSgpLCBgJHthdmROYW1lfSR7UkVBUEVSX0xPR19GSUxFX1NVRkZJWH1gKTtcbiAgdHJ5IHtcbiAgICBta2RpclN5bmMoZ2V0UmVhcGVyTG9nRGlyZWN0b3J5KCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IGxvZ0ZpbGVEZXNjcmlwdG9yID0gb3BlblN5bmMobG9nRmlsZVBhdGgsIHJlc29sdmVFbXVsYXRvclJlYXBlckxvZ09wZW5GbGFnKHJlYWRGaWxlU2l6ZShsb2dGaWxlUGF0aCkpKTtcbiAgICB0cnkge1xuICAgICAgLypcbiAgICAgICAqIFRocm91Z2ggdGhlIHJlbGF5LCBuZXZlciBzdHJhaWdodCBhdCB0aGUgcmVhcGVyOiBhIHJlYXBlciBzcGF3bmVkIGhlcmVcbiAgICAgICAqIHdvdWxkIGJlIGEgY2hpbGQgb2YgdGhpcyBydW4gYW5kIHdvdWxkIGRpZSB3aXRoIGl0IHVuZGVyIGFueSBraWxsIHRoYXRcbiAgICAgICAqIHdhbGtzIHRoZSBwcm9jZXNzIHRyZWUuIFRoZSByZWxheSBleGl0cyBhdCBvbmNlLCBsZWF2aW5nIHRoZSByZWFwZXIgd2l0aFxuICAgICAgICogYSBkZWFkIHBhcmVudCBhbmQgbm8gZWRnZSBiYWNrIHRvIHRoaXMgcnVuLlxuICAgICAgICovXG4gICAgICBjb25zdCByZWxheSA9IHNwYXduKFxuICAgICAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgICAgICBbXG4gICAgICAgICAgJy1lJyxcbiAgICAgICAgICBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXAoKSxcbiAgICAgICAgICBidWlsZEVtdWxhdG9yUmVhcGVyQm9vdHN0cmFwKCksXG4gICAgICAgICAgcmVzb2x2ZU93bk1vZHVsZVVybCgpLFxuICAgICAgICAgIC4uLmJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcGFyYW1zLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHsgZGV0YWNoZWQ6IHRydWUsIHN0ZGlvOiBbJ2lnbm9yZScsIGxvZ0ZpbGVEZXNjcmlwdG9yLCBsb2dGaWxlRGVzY3JpcHRvcl0sIHdpbmRvd3NIaWRlOiB0cnVlIH1cbiAgICAgICk7XG4gICAgICByZWxheS5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBwYXJhbXMubG9nKGBUaGUgZW11bGF0b3IgcmVhcGVyIHJlbGF5IGZvciBBVkQgXCIke2F2ZE5hbWV9XCIgZmFpbGVkIHRvIHN0YXJ0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgICAgIHJlbGF5LnVucmVmKCk7XG4gICAgICBwYXJhbXMubG9nKFxuICAgICAgICBgRW11bGF0b3IgcmVhcGVyIGFybWVkIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6IGlmIHRoaXMgcnVuIGlzIGtpbGxlZCBcdTIwMTQgYSBwcm9jZXNzLXRyZWUga2lsbCBpbmNsdWRlZCwgc2luY2UgdGhlIHJlYXBlciBpcyBzdGFydGVkIHRocm91Z2ggYSByZWxheSB0aGF0IGV4aXRzIGF0IG9uY2UgXHUyMDE0IGl0IHN0b3BzIHRoZSBlbXVsYXRvciBvbmNlIG5vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSAnJHtBTkRST0lEX1NFVFVQX0xPQ0tfU0NPUEV9JyBzZXR1cCBsb2NrLiBJdHMgUElEIGlzIHRoZSBmaXJzdCBsaW5lIG9mIGl0cyBsb2c6ICR7bG9nRmlsZVBhdGh9YFxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xvc2VTeW5jKGxvZ0ZpbGVEZXNjcmlwdG9yKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgcGFyYW1zLmxvZyhgQ291bGQgbm90IGFybSB0aGUgZW11bGF0b3IgcmVhcGVyIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRXhpdCh2ZXJkaWN0OiBFeGNsdWRlPEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0LCAnd2F0Y2gnPik6IHN0cmluZyB7XG4gIHJldHVybiB2ZXJkaWN0ID09PSAnc3VwZXJzZWRlZCdcbiAgICA/ICdUaGUgbWFya2VyIG5vdyByZWNvcmRzIGEgbGF0ZXIgZW11bGF0b3Igb2YgdGhpcyBBVkQsIHdoaWNoIGhhcyBpdHMgb3duIHJlYXBlcjsgbm90aGluZyBsZWZ0IHRvIHdhdGNoLidcbiAgICA6ICdUaGUgZW11bGF0b3Igd2FzIHN0b3BwZWQ7IG5vdGhpbmcgbGVmdCB0byB3YXRjaC4nO1xufVxuXG5mdW5jdGlvbiBnZXRSZWFwZXJMb2dEaXJlY3RvcnkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4odG1wZGlyKCksIEhBUk5FU1NfVEVNUF9ESVJfTkFNRSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGaWxlU2l6ZShwYXRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBzdGF0U3luYyhwYXRoKS5zaXplO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0IHtcbiAgcmV0dXJuIHJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoKHtcbiAgICBhcm1lZFN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiByZWFwZXJBcmd1bWVudHMuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMsXG4gICAgY2hlY2tJc1BpZEFsaXZlOiBjaGVja0lzUHJvY2Vzc0FsaXZlLFxuICAgIG1hcmtlcjogcmVhZEVtdWxhdG9yTWFya2VyKHJlYXBlckFyZ3VtZW50cy5hdmROYW1lKVxuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGlzIG1vZHVsZSdzIG93biBVUkwgXHUyMDE0IHRoZSBvbmUgdGhlIGJvb3RzdHJhcCBpbXBvcnRzLlxuICpcbiAqIFRoZSBDSlMgYnVpbGQgaGFzIG5vIGBpbXBvcnQubWV0YWAgKGVzYnVpbGQgZW1wdGllcyBpdCksIGJ1dCBpdCBoYXNcbiAqIGBfX2ZpbGVuYW1lYDsgdGhlIEVTTSBidWlsZCBhbmQgdGhlIGAudHNgIHNvdXJjZSBoYXZlIGBpbXBvcnQubWV0YS51cmxgLlxuICpcbiAqIEByZXR1cm5zIFRoZSBVUkwgb2YgdGhpcyBtb2R1bGUgYXMgaXQgaXMgcnVubmluZy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU93bk1vZHVsZVVybCgpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIF9fZmlsZW5hbWUgPT09ICdzdHJpbmcnID8gcGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmIDogaW1wb3J0Lm1ldGEudXJsO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUVBLGdDQUFzQjtBQUN0QixxQkFLTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFBcUI7QUFDckIsMEJBQW9C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
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlYXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0b3BzIGFuIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uY2UgaXRzIHJ1biBpcyBnb25lIGZvciBnb29kIFx1MjAxNCB0aGVcbiAqIGNhc2Ugbm90aGluZyBlbHNlIGNvdmVycywgKipMNTYqKidzIHBhdGggQiB3aXRoIG5vIGxhdGVyIHJ1bjogdGhlIHJ1bm5lciBpc1xuICoga2lsbGVkIChTSUdLSUxMLCBUYXNrIE1hbmFnZXIsIGFuIElERSBzdG9wIGJ1dHRvbiksIG5vIHRlYXJkb3duIHJ1bnMsIGFuZCBub1xuICogb3RoZXIgQW5kcm9pZCBydW4gZXZlciBjb21lcyBhbG9uZyB0byByZWNsYWltIHRoZSBsZWZ0b3ZlciBmcm9tIGl0cyBtYXJrZXIuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGVtdWxhdG9yIGxlZnQgbGlrZSB0aGF0IGtlcHQgYG5ldHNpbWRgIHNwaW5uaW5nIGZvciBzaXggaG91cnMuXG4gKlxuICogVGhlIHJlYXBlciBpcyBhIHNtYWxsIGRldGFjaGVkIE5vZGUgcHJvY2VzcyBzcGF3bmVkIGJlc2lkZSBldmVyeSBlbXVsYXRvciB0aGVcbiAqIGhhcm5lc3Mgc3RhcnRzIG9yIHRha2VzIG92ZXIuIEl0IGhvbGRzIG5vIGhhbmRsZSB0byB0aGUgZW11bGF0b3IgYW5kIG5lZWRzXG4gKiBub25lOiB0aGUgbWFya2VyIChgZW11bGF0b3ItbWFya2VyLnRzYCkgc2F5cyB3aGF0IHRvIHN0b3AsIGFuZCB0aGUgdmVyaWZpZWRcbiAqIHN0b3AgKGBlbXVsYXRvci1yZWNsYWltLnRzYCkgaXMgdGhlIG9uZSB0aGUgcnVuJ3Mgb3duIHRlYXJkb3duIHVzZXMuXG4gKlxuICogIyMgSXQgd2F0Y2hlcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIG5vdCB0aGUgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgaXRcbiAqXG4gKiBUaGUgcHJvY2VzcyB0aGF0IHN0YXJ0cyB0aGUgZW11bGF0b3IgaXMgbm90IGFsd2F5cyB0aGUgcnVuLiBBIHByb2plY3Qgd2l0aCBub1xuICogdHJhbnNwb3J0IGdsb2JhbCBzZXR1cCBib290cyBpdCBmcm9tIGEgKip0ZXN0IHdvcmtlcioqICgqKkw1NioqIHBhdGggQSksIGFuZFxuICogVml0ZXN0IGVuZHMgd29ya2VycyBkdXJpbmcgYSBwZXJmZWN0bHkgaGVhbHRoeSBydW4gXHUyMDE0IHNvIGEgcmVhcGVyIHRpZWQgdG8gaXRzXG4gKiBzcGF3bmVyJ3MgbGlmZXRpbWUgKHRoZSAqKkwzMyoqIGxpdmVuZXNzIHNvY2tldCwgdGhlIGZpcnN0IGlkZWEpIHdvdWxkIHN0b3BcbiAqIHRoZSBlbXVsYXRvciBtaWQtcnVuLCBvciByYWNlIHRoZSBuZXh0IHdvcmtlciB0YWtpbmcgaXQgb3Zlci4gVGhlIGBhbmRyb2lkYFxuICogc2V0dXAgbG9jayAoKipMNyoqKSBpcyBoZWxkIGJ5IHRoZSBydW4ncyBtYWluIHByb2Nlc3MgZm9yIHRoZSB3aG9sZSBydW4sIGFuZFxuICogaXRzIGhvbGRlciBiZWluZyBhbGl2ZSBpcyBleGFjdGx5IHdoYXQgXCJhbiBBbmRyb2lkIHJ1biBpcyBpbiBmbGlnaHRcIiBtZWFucy5cbiAqXG4gKiBTbyB0aGUgcmVhcGVyIHBvbGxzIHRoYXQgbG9jaywgYW5kIG9uY2UgaXQgY2FuICoqdGFrZSoqIGl0IFx1MjAxNCBubyBsaXZlIHJ1blxuICogaG9sZHMgaXQgXHUyMDE0IGl0IHN0b3BzIHRoZSBoYXJuZXNzJ3MgbGVmdG92ZXJzIHdoaWxlIGhvbGRpbmcgaXQsIHdoaWNoIGlzIHRoZVxuICogcHJlY29uZGl0aW9uIGV2ZXJ5IGxlZnRvdmVyIHN0b3AgZG9jdW1lbnRzOiBubyBydW4gY2FuIGFkb3B0IGFuIGVtdWxhdG9yIHRoYXRcbiAqIGlzIG1pZC1zaHV0ZG93bi4gVGhhdCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgbmV4dCBydW4ncyBwcmVmbGlnaHQgd291bGQgZG8sXG4gKiBkb25lIGF0IHRoZSBmaXJzdCBtb21lbnQgdGhhdCBydW4gY291bGQgaGF2ZSBkb25lIGl0LlxuICpcbiAqIEEgZGVhZCBzYW1lLWhvc3QgaG9sZGVyIGlzIGFiYW5kb25lZCBhdCBvbmNlLiBBIGxpdmUtUElEIGhvbGRlciB0aGF0IGhhcyBnb25lXG4gKiBzaWxlbnQgaXMgb25seSBhYmFuZG9uZWQgYWZ0ZXJcbiAqIHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU30sIGZhciB3aWRlciB0aGFuIHRoZVxuICogdHdvIG1pbnV0ZXMgYSB3YWl0aW5nIHJ1biBzdGVhbHMgb246IGEgcmVhcGVyIGlzIGFsd2F5cyB3YWl0aW5nLCBzbyBhdCB0d29cbiAqIG1pbnV0ZXMgYSBsaXZlIHJ1biB0aGF0IGJsb2NrZWQgaXRzIGV2ZW50IGxvb3Agd291bGQgbG9zZSBpdHMgZW11bGF0b3IuXG4gKlxuICogIyMgRmFpbC1vcGVuLCBsaWtlIHRoZSByZW5kZXJlciB3YXRjaGRvZ1xuICpcbiAqIEEgcmVhcGVyIGlzIGFybWVkIG9ubHkgd2hlbiBhIGxpdmUgcnVuIGhvbGRzIHRoZSBsb2NrIGF0IHRoZSBtb21lbnQgdGhlXG4gKiBlbXVsYXRvciBpcyByZWNvcmRlZC4gQSBydW4gdGhhdCB0YWtlcyBubyBsb2NrIFx1MjAxNCBhIGhhbmQtd2lyZWRcbiAqIGBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9uc2AgXHUyMDE0IGdldHMgbm9uZSwgYW5kIHNheXMgc28sIHJhdGhlciB0aGFuIGEgcmVhcGVyXG4gKiB0aGF0IHdvdWxkIHJlYWQgaXRzIG1pc3NpbmcgbG9jayBhcyBcInRoZSBydW4gaXMgb3ZlclwiIGFuZCBzdG9wIGFuIGVtdWxhdG9yXG4gKiBzb21lYm9keSBpcyB1c2luZy4gQSBzcGF3biB0aGF0IGZhaWxzIGlzIGxvZ2dlZCBhbmQgbmV2ZXIgZmFpbHMgdGhlIGxhdW5jaC5cbiAqXG4gKiAjIyBIb3cgaXQgcnVuc1xuICpcbiAqIGBwcm9jZXNzLmV4ZWNQYXRoIC1lIDxib290c3RyYXA+IDx0aGlzIG1vZHVsZSdzIFVSTD4gPGF2ZE5hbWU+IDxzdGFydGVkQXQ+YDpcbiAqIHRoZSBib290c3RyYXAgYGltcG9ydCgpYHMgdGhpcyB2ZXJ5IG1vZHVsZSBhbmQgY2FsbHMge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS5cbiAqIFRoZSBVUkwgaXMgdGhlIGJ1aWx0IGAubWpzYCAvIGAuY2pzYCBpbiBhIGNvbnN1bWVyJ3MgaW5zdGFsbCwgYW5kIHRoZSBgLnRzYFxuICogc291cmNlIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMsIHdoaWNoIE5vZGUncyB0eXBlIHN0cmlwcGluZyBydW5zIGFzLWlzIFx1MjAxNCBzb1xuICogbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBhIG1vZHVsZSB0aGF0IHJlYWRzIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbC4gSXRzIHN0ZG91dC9zdGRlcnIgZ28gdG8gYSBwZXItQVZEIGxvZyBmaWxlLCBjYXBwZWRcbiAqIGF0IHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTfSwgc28gdGhlIHZlcmRpY3QgbGluZXMgdGhlIHN0b3BcbiAqIHByaW50cyBhcmUgb24gcmVjb3JkIGV2ZW4gdGhvdWdoIG5vIHRlcm1pbmFsIGlzIGxlZnQgdG8gc2hvdyB0aGVtLlxuICpcbiAqICMjIEl0IGlzIHN0YXJ0ZWQgdGhyb3VnaCBhIHJlbGF5LCBzbyBhIHByb2Nlc3MtdHJlZSBraWxsIGNhbm5vdCB0YWtlIGl0XG4gKlxuICogYGRldGFjaGVkYCBkb2VzIG5vdCByZXBhcmVudCBvbiBXaW5kb3dzOiBhIGNoaWxkIHNwYXduZWQgc3RyYWlnaHQgZnJvbSB0aGUgcnVuXG4gKiBzdGF5cyBpbiB0aGUgcnVuJ3MgcHJvY2VzcyB0cmVlLCBzbyB0aGUga2lsbCBzaGFwZXMgdGhhdCB3YWxrIHRoYXQgdHJlZSB0YWtlXG4gKiB0aGUgc2FmZXR5IG5ldCBhbG9uZyB3aXRoIHRoZSB0aGluZyBpdCB3YXMgZ3VhcmRpbmcgXHUyMDE0IFRhc2sgTWFuYWdlcidzICpFbmRcbiAqIHRhc2sqLCBgdGFza2tpbGwgL1RgLCBhbiBJREUgc3RvcCBidXR0b24sIGEgYFBhcmVudFByb2Nlc3NJZGAgZGVzY2VuZGFudFxuICogc3dlZXAuIE1lYXN1cmVkIG9uIDIwMjYtMDktMTE6IGEgcmVhcGVyIGRpZWQgd2l0aCB0aGUgcnVuIGl0IHdhcyB3YXRjaGluZywgYW5kXG4gKiB0aGUgZW11bGF0b3IgaXQgd291bGQgaGF2ZSBzdG9wcGVkIGlkbGVkIG9uIGZvciB0ZW4gbWludXRlcy5cbiAqXG4gKiBTbyB0aGUgc3Bhd24gZ29lcyB0aHJvdWdoIGEgcmVsYXkgXHUyMDE0IHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXB9IFx1MjAxNFxuICogd2hpY2ggc3RhcnRzIHRoZSByZWFwZXIgYW5kIGV4aXRzIGF0IG9uY2UuIEJ5IHRoZSB0aW1lIGFueSB0cmVlLXdhbGtlciB0YWtlc1xuICogaXRzIHNuYXBzaG90IHRoZSByZWxheSBpcyBnb25lLCBzbyB0aGVyZSBpcyBubyBlZGdlIGZyb20gdGhlIHJ1biB0byB0aGUgcmVhcGVyXG4gKiBsZWZ0IHRvIGZvbGxvdy4gVGhpcyBpcyB0aGUgZG91YmxlLWZvcmsgaWRpb20sIGFuZCBpdCBob2xkcyBvbiBQT1NJWCBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogb25jZSB0aGUgcmVsYXkgZXhpdHMsIHRoZSByZWFwZXIgYmVsb25ncyB0byBgaW5pdGAuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY2xvc2VTeW5jLFxuICBta2RpclN5bmMsXG4gIG9wZW5TeW5jLFxuICBzdGF0U3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvck1hcmtlciB9IGZyb20gJy4vZW11bGF0b3ItbWFya2VyLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFNldHVwTG9jayB9IGZyb20gJy4vc2V0dXAtbG9jay5janMnO1xuXG5pbXBvcnQgeyByZWFkRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuaW1wb3J0IHsgRW11bGF0b3JSZWNsYWltZXIgfSBmcm9tICcuL2VtdWxhdG9yLXJlY2xhaW0uY2pzJztcbmltcG9ydCB7IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGNoZWNrSXNQcm9jZXNzQWxpdmUgfSBmcm9tICcuL3Byb2Nlc3MtbGl2ZW5lc3MuY2pzJztcbmltcG9ydCB7XG4gIEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgY2hlY2tJc1NldHVwTG9ja0hlbGQsXG4gIHRyeUFjcXVpcmVTZXR1cExvY2tcbn0gZnJvbSAnLi9zZXR1cC1sb2NrLmNqcyc7XG5cbi8qKlxuICogSG93IG9mdGVuIHRoZSByZWFwZXIgbG9va3MgYXQgdGhlIG1hcmtlciBhbmQgdGhlIGxvY2sgXHUyMDE0IHRoZSBsb2NrJ3Mgb3duXG4gKiBoZWFydGJlYXQgaW50ZXJ2YWwsIHNvIGEga2lsbGVkIHJ1biBpcyBub3RpY2VkIHdpdGhpbiBvbmUgYmVhdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGxvbmcgYSBzYW1lLWhvc3QgbG9jayBob2xkZXIgd2hvc2UgUElEIGlzIHN0aWxsIGFsaXZlIG1heSBzdGF5IHNpbGVudFxuICogYmVmb3JlIHRoZSByZWFwZXIgdHJlYXRzIGl0cyBydW4gYXMgZ29uZTogMzAgbWludXRlcywgdGhlIHRocmVzaG9sZCB0aGUgbG9ja1xuICogYWxyZWFkeSB1c2VzIGFjcm9zcyBob3N0cy4gT25seSBhIHJlY3ljbGVkIFBJRCBzaG91bGQgZXZlciByZWFjaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9MT0NLX1NJTEVOQ0VfSU5fTUlMTElTRUNPTkRTID0gMV84MDBfMDAwO1xuXG4vKipcbiAqIFRoZSBzaXplIHBhc3Qgd2hpY2ggdGhlIHJlYXBlciBsb2cgaXMgc3RhcnRlZCBhZnJlc2ggcmF0aGVyIHRoYW4gYXBwZW5kZWQgdG8uXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKipcbiAqIFRoZSBleHBvcnQgdGhlIGJvb3RzdHJhcCBjYWxscy4gTmFtZWQgaGVyZSBzbyB0aGUgYm9vdHN0cmFwIGFuZCB0aGUgZXhwb3J0XG4gKiBjYW5ub3QgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRSA9ICdydW5FbXVsYXRvclJlYXBlcic7XG5cbmNvbnN0IExPQ0tfTEFCRUwgPSAnZW11bGF0b3ItcmVhcGVyJztcbmNvbnN0IFJFQVBFUl9MT0dfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLXJlYXBlci5sb2cnO1xuXG4vKipcbiAqIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvcjogdGhlIGVtdWxhdG9yIGEgbWFya2VyIHJlY29yZGVkIHdoZW4gaXQgd2FzIGFybWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgbWFya2VyIGl0IHdhdGNoZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHdhdGNoZWQgZW11bGF0b3Igd2FzIGxhdW5jaGVkLiBBIHRha2VvdmVyIGtlZXBzIGl0LCBzbyBpdCBuYW1lcyBvbmVcbiAgICogZW11bGF0b3IgYWNyb3NzIGV2ZXJ5IHJ1biB0aGF0IG93bnMgaXQsIGFuZCB0ZWxscyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoZVxuICAgKiBzYW1lIEFWRCBhcGFydC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbWFya2VyIHNheXMgdGhlIHJlYXBlciBzaG91bGQgZG8gbmV4dC5cbiAqXG4gKiAtIGBlbXVsYXRvci1zdG9wcGVkYCBcdTIwMTQgdGhlIG1hcmtlciBpcyBnb25lLCBvciBub25lIG9mIGl0cyBQSURzIGlzIGFsaXZlOiB0aGVcbiAqICAgZW11bGF0b3Igd2FzIHN0b3BwZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB3YXRjaC5cbiAqIC0gYHN1cGVyc2VkZWRgIFx1MjAxNCB0aGUgbWFya2VyIG5vdyByZWNvcmRzIGEgZGlmZmVyZW50IGVtdWxhdG9yIG9mIHRoZSBzYW1lIEFWRCxcbiAqICAgd2hpY2ggaGFzIGl0cyBvd24gcmVhcGVyLlxuICogLSBgd2F0Y2hgIFx1MjAxNCB0aGUgZW11bGF0b3IgaXMgc3RpbGwgdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0ID0gJ2VtdWxhdG9yLXN0b3BwZWQnIHwgJ3N1cGVyc2VkZWQnIHwgJ3dhdGNoJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2h9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsYXVuY2ggdGltZSBvZiB0aGUgZW11bGF0b3IgdGhpcyByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFybWVkU3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgV2hldGhlciBhIFBJRCBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgY2hlY2tJc1BpZEFsaXZlKHRoaXM6IHZvaWQsIHBpZDogbnVtYmVyKTogYm9vbGVhbjtcblxuICAvKipcbiAgVGhlIEFWRCdzIG1hcmtlciBhcyBpdCByZWFkcyBub3csIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtlcjogRW11bGF0b3JNYXJrZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwYXduRW11bGF0b3JSZWFwZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXduRW11bGF0b3JSZWFwZXJQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB3aG9zZSBlbXVsYXRvciB3YXMganVzdCByZWNvcmRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgUmVjZWl2ZXMgdGhlIGFybWVkIC8gbm90LWFybWVkIGxpbmUuXG4gICAqL1xuICBsb2codGhpczogdm9pZCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgVGhlIHJlY29yZGVkIGVtdWxhdG9yJ3MgbGF1bmNoIHRpbWUsIGFzIHdyaXR0ZW4gaW50byBpdHMgbWFya2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIHRoZSByZWFwZXIncyBhcmd1bWVudHMgZm9yIGl0cyBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHJlYXBlckFyZ3VtZW50cyAtIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvci5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBpbiB0aGUgb3JkZXIge0BsaW5rIHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHJlYWRzIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKHJlYXBlckFyZ3VtZW50czogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbcmVhcGVyQXJndW1lbnRzLmF2ZE5hbWUsIFN0cmluZyhyZWFwZXJBcmd1bWVudHMuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMpXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHNjcmlwdCBgbm9kZSAtZWAgcnVucyB0byBzdGFydCB0aGUgcmVhcGVyLlxuICpcbiAqIEl0IGBpbXBvcnQoKWBzIHRoZSBtb2R1bGUgd2hvc2UgVVJMIGlzIGl0cyBmaXJzdCBhcmd1bWVudCBhbmQgaGFuZHMgdGhlIHJlc3RcbiAqIHRvIHtAbGluayBydW5FbXVsYXRvclJlYXBlcn0uIGBpbXBvcnQoKWAgcmF0aGVyIHRoYW4gYHJlcXVpcmVgLCBiZWNhdXNlIGl0XG4gKiBsb2FkcyBhbGwgdGhyZWUgZm9ybXMgdGhlIG1vZHVsZSBzaGlwcyBhcyBcdTIwMTQgRVNNLCBDSlMsIGFuZCB0aGlzIHJlcG8ncyBvd25cbiAqIGAudHNgIHNvdXJjZSB1bmRlciBOb2RlJ3MgdHlwZSBzdHJpcHBpbmcuIEEgQ0pTIG1vZHVsZSdzIG5hbWVkIGV4cG9ydHMgYXJlXG4gKiBmb3VuZCBieSBOb2RlJ3Mgc3RhdGljIGFuYWx5c2lzOyBgZGVmYXVsdGAgaXMgdGhlIGZhbGxiYWNrIHdoZW4gdGhleSBhcmUgbm90LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtdWxhdG9yUmVhcGVyQm9vdHN0cmFwKCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ2ltcG9ydChwcm9jZXNzLmFyZ3ZbMV0pLnRoZW4oKHJlYXBlck1vZHVsZSkgPT4geycsXG4gICAgYCAgY29uc3QgcnVuID0gcmVhcGVyTW9kdWxlLiR7RU1VTEFUT1JfUkVBUEVSX0VOVFJZX05BTUV9ID8/IHJlYXBlck1vZHVsZS5kZWZhdWx0LiR7RU1VTEFUT1JfUkVBUEVSX0VOVFJZX05BTUV9O2AsXG4gICAgJyAgcmV0dXJuIHJ1bihwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpOycsXG4gICAgJ30pLmNhdGNoKChlcnJvcikgPT4geycsXG4gICAgJyAgY29uc29sZS5lcnJvcihlcnJvcik7JyxcbiAgICAnICBwcm9jZXNzLmV4aXRDb2RlID0gMTsnLFxuICAgICd9KTsnXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzY3JpcHQgYG5vZGUgLWVgIHJ1bnMgYXMgdGhlICoqcmVsYXkqKjogaXQgc3RhcnRzIHRoZSByZWFwZXIgYW5kXG4gKiBleGl0cyBhdCBvbmNlLCBzbyB0aGUgcmVhcGVyIGlzIGxlZnQgd2l0aCBhIGRlYWQgcGFyZW50IGFuZCBubyB0cmVlLXdhbGtpbmdcbiAqIGtpbGwgb2YgdGhlIHJ1biBjYW4gcmVhY2ggaXQuIFNlZSB0aGUgcmVsYXkgc2VjdGlvbiBpbiB0aGlzIG1vZHVsZSdzIGhlYWRlclxuICogZm9yIHdoeSB0aGF0IGluZGlyZWN0aW9uIGV4aXN0cyBhdCBhbGwuXG4gKlxuICogSXRzIG93biBhcmd1bWVudHMgYXJlIHRoZSByZWFwZXIncyB3aG9sZSBjb21tYW5kIGxpbmUgXHUyMDE0IHRoZSBib290c3RyYXAgc2NyaXB0XG4gKiBmaXJzdCwgdGhlbiBldmVyeXRoaW5nIHRoYXQgYm9vdHN0cmFwIHJlYWRzIFx1MjAxNCBzbyB0aGUgcmVsYXkgbmV2ZXIgaGFzIHRvIGtub3dcbiAqIHdoYXQgYW55IG9mIHRoZW0gbWVhbi4gSXQgaGFuZHMgdGhlIHJlYXBlciBpdHMgb3duIHN0ZG91dCBhbmQgc3RkZXJyLCB3aGljaFxuICogYXJlIHRoZSBjYXBwZWQgbG9nIGZpbGUgdGhlIHNwYXduZXIgb3BlbmVkLCBzbyB0aGUgbG9nIGlzIHVuYWZmZWN0ZWQgYnkgdGhlXG4gKiBleHRyYSBob3AuXG4gKlxuICogQHJldHVybnMgVGhlIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJSZWxheUJvb3RzdHJhcCgpOiBzdHJpbmcge1xuICByZXR1cm4gW1xuICAgICdjb25zdCB7IHNwYXduIH0gPSByZXF1aXJlKFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpOycsXG4gICAgJ3RyeSB7JyxcbiAgICAnICBjb25zdCBjaGlsZCA9IHNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIFtcIi1lXCIsIHByb2Nlc3MuYXJndlsxXSwgLi4ucHJvY2Vzcy5hcmd2LnNsaWNlKDIpXSwgeycsXG4gICAgJyAgICBkZXRhY2hlZDogdHJ1ZSwnLFxuICAgICcgICAgc3RkaW86IFtcImlnbm9yZVwiLCAxLCAyXSwnLFxuICAgICcgICAgd2luZG93c0hpZGU6IHRydWUnLFxuICAgICcgIH0pOycsXG4gICAgJyAgY2hpbGQub25jZShcImVycm9yXCIsIChlcnJvcikgPT4geyBjb25zb2xlLmVycm9yKGVycm9yKTsgfSk7JyxcbiAgICAnICBjaGlsZC51bnJlZigpOycsXG4gICAgJ30gY2F0Y2ggKGVycm9yKSB7JyxcbiAgICAnICBjb25zb2xlLmVycm9yKGVycm9yKTsnLFxuICAgICcgIHByb2Nlc3MuZXhpdENvZGUgPSAxOycsXG4gICAgJ30nXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgcmVhcGVyJ3MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gYXJndiAtIFRoZSBhcmd1bWVudHMgYWZ0ZXIgdGhlIG1vZHVsZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnRzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXkgYXJlIG5vdCB0aGUgdHdvIHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzfSB3cml0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKGFyZ3Y6IHJlYWRvbmx5IHN0cmluZ1tdKTogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMgfCB1bmRlZmluZWQge1xuICBjb25zdCBbYXZkTmFtZSwgc3RhcnRlZEF0VGV4dCwgLi4ucmVzdF0gPSBhcmd2O1xuICBpZiAoIWF2ZE5hbWUgfHwgc3RhcnRlZEF0VGV4dCA9PT0gdW5kZWZpbmVkIHx8IHJlc3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyA9IE51bWJlcihzdGFydGVkQXRUZXh0KTtcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydGVkQXRJbk1pbGxpc2Vjb25kcykgfHwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgPD0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4geyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9O1xufVxuXG4vKipcbiAqIERlY2lkZXMgaG93IHRoZSByZWFwZXIgbG9nIGlzIG9wZW5lZCwgc28gaXQgY2FuIG5ldmVyIGdyb3cgd2l0aG91dCBib3VuZC5cbiAqXG4gKiBAcGFyYW0gc2l6ZUluQnl0ZXMgLSBUaGUgbG9nJ3MgY3VycmVudCBzaXplLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vbmUuXG4gKiBAcmV0dXJucyBgJ2EnYCB0byBhcHBlbmQsIG9yIGAndydgIHRvIHN0YXJ0IGl0IGFmcmVzaCBvbmNlIGl0IGhhcyBwYXNzZWQgdGhlIGNhcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvclJlYXBlckxvZ09wZW5GbGFnKHNpemVJbkJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiAnYScgfCAndycge1xuICByZXR1cm4gc2l6ZUluQnl0ZXMgIT09IHVuZGVmaW5lZCAmJiBzaXplSW5CeXRlcyA+IEVNVUxBVE9SX1JFQVBFUl9MT0dfTUFYX1NJWkVfSU5fQllURVMgPyAndycgOiAnYSc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGF0IHRoZSBtYXJrZXIgc2F5cyB0aGUgcmVhcGVyIHNob3VsZCBkbyBuZXh0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbWFya2VyIGFzIGl0IHJlYWRzIG5vdywgYW5kIHRoZSBlbXVsYXRvciB0aGUgcmVhcGVyIHdhcyBhcm1lZCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoKHBhcmFtczogUmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2hQYXJhbXMpOiBFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCB7XG4gIGNvbnN0IHsgbWFya2VyIH0gPSBwYXJhbXM7XG4gIGlmIChtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnZW11bGF0b3Itc3RvcHBlZCc7XG4gIH1cblxuICBpZiAobWFya2VyLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzICE9PSBwYXJhbXMuYXJtZWRTdGFydGVkQXRJbk1pbGxpc2Vjb25kcykge1xuICAgIHJldHVybiAnc3VwZXJzZWRlZCc7XG4gIH1cblxuICAvKlxuICAgKiBBIGxhdW5jaC10aW1lIG1hcmtlcidzIFBJRCBsaXN0IGlzIGRlbGliZXJhdGVseSBpbmNvbXBsZXRlIFx1MjAxNCBpdCBuYW1lcyB0aGVcbiAgICogbGF1bmNoZXIsIGFuZCB0aGUgYmFja2VuZCBpdCBmb3JrcyBpcyBpZGVudGlmaWVkIGJ5IHRoZSBwcmUtbGF1bmNoIGRpZmYsXG4gICAqIHdoaWNoIGNvc3RzIGEgaG9zdCBwcm9jZXNzIGxpc3RpbmcgdGhpcyBwb2xsIGRlbGliZXJhdGVseSBkb2VzIG5vdCBtYWtlLlxuICAgKiBTbyBpdCBpcyBuZXZlciByZWFkIGFzIHN0b3BwZWQgZnJvbSBQSURzIGFsb25lOiB0aGUgcmVjbGFpbSwgd2hpY2ggZG9lc1xuICAgKiBtYWtlIHRoYXQgbGlzdGluZywgaXMgd2hhdCBqdWRnZXMgaXQuXG4gICAqL1xuICBpZiAobWFya2VyLnByZUxhdW5jaEVtdWxhdG9yUGlkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd3YXRjaCc7XG4gIH1cblxuICByZXR1cm4gbWFya2VyLm93bmVkRW11bGF0b3JQaWRzLnNvbWUoKHBpZCkgPT4gcGFyYW1zLmNoZWNrSXNQaWRBbGl2ZShwaWQpKSA/ICd3YXRjaCcgOiAnZW11bGF0b3Itc3RvcHBlZCc7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZXRhY2hlZC1wcm9jZXNzIGdsdWUgY292ZXJlZCBieSB0aGUgQW5kcm9pZCBpbnRlZ3JhdGlvbiBzdWl0ZSwgbm90IHVuaXQgdGVzdHMuICovXG5cbi8qKlxuICogVGhlIHJlYXBlciBwcm9jZXNzJ3MgYm9keTogd2F0Y2hlcyB0aGUgbWFya2VyIGFuZCB0aGUgbG9jayB1bnRpbCBlaXRoZXIgdGhlXG4gKiBlbXVsYXRvciBpcyBnb25lIG9yIG5vIHJ1biBob2xkcyB0aGUgbG9jaywgYW5kIGluIHRoZSBzZWNvbmQgY2FzZSBzdG9wcyB0aGVcbiAqIGhhcm5lc3MncyBsZWZ0b3ZlcnMgd2hpbGUgaG9sZGluZyBpdC5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGhlIGJvb3RzdHJhcCwgd2hpY2ggaXMgaXRzIG9ubHkgY2FsbGVyLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIHJlYXBlcidzIGFyZ3VtZW50cywgYXMge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyb3RlIHRoZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbXVsYXRvclJlYXBlcihhcmd2OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWFwZXJBcmd1bWVudHMgPSBwYXJzZUVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKGFyZ3YpO1xuICBpZiAoIXJlYXBlckFyZ3VtZW50cykge1xuICAgIGxvZyhgW2VtdWxhdG9yLXJlYXBlcl0gUmVmdXNpbmcgdG8gcnVuOiBleHBlY3RlZCA8YXZkTmFtZT4gPHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzPiwgZ290ICR7SlNPTi5zdHJpbmdpZnkoYXJndil9LmApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgYXZkTmFtZSwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgfSA9IHJlYXBlckFyZ3VtZW50cztcbiAgcmVhcGVyTG9nKFxuICAgIGBXYXRjaGluZyB0aGUgZW11bGF0b3Igc3RhcnRlZCBhdCAke25ldyBEYXRlKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpfSAocmVhcGVyIFBJRCAke1N0cmluZyhwcm9jZXNzLnBpZCl9KTsgaXQgaXMgc3RvcHBlZCBvbmNlIG5vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSAnJHtBTkRST0lEX1NFVFVQX0xPQ0tfU0NPUEV9JyBzZXR1cCBsb2NrLmBcbiAgKTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgdmVyZGljdCA9IHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzKTtcbiAgICBpZiAodmVyZGljdCAhPT0gJ3dhdGNoJykge1xuICAgICAgcmVhcGVyTG9nKGRlc2NyaWJlRXhpdCh2ZXJkaWN0KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxvY2s6IFNldHVwTG9jayB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbG9jayA9IHRyeUFjcXVpcmVTZXR1cExvY2soe1xuICAgICAgICBsYWJlbDogTE9DS19MQUJFTCxcbiAgICAgICAgc2NvcGU6IEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgICAgICAgc3RhbGVBZnRlclNpbGVuY2VJbk1pbGxpc2Vjb25kczogRU1VTEFUT1JfUkVBUEVSX0xPQ0tfU0lMRU5DRV9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvLyBGYWlsIG9wZW46IGEgbG9jayB0aGlzIHByb2Nlc3MgY2Fubm90IGV2ZW4gbG9vayBhdCBpcyBubyBldmlkZW5jZSB0aGUgcnVuIGlzIG92ZXIuXG4gICAgICByZWFwZXJMb2coYEdpdmluZyB1cDogdGhlIHNldHVwIGxvY2sgY291bGQgbm90IGJlIHJlYWQgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSkuIFRoZSBuZXh0IEFuZHJvaWQgcnVuIHJlY2xhaW1zIHRoZSBlbXVsYXRvciBpbnN0ZWFkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsb2NrKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgcnVuIG1heSBoYXZlIGVuZGVkIG5vcm1hbGx5IGJldHdlZW4gdGhlIGxvb2sgYWJvdmUgYW5kIHRoZSBsb2NrOiBpdHMgdGVhcmRvd24gdGhlbiBzdG9wcGVkIHRoZSBlbXVsYXRvci5cbiAgICAgICAgY29uc3QgbG9ja2VkVmVyZGljdCA9IHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzKTtcbiAgICAgICAgaWYgKGxvY2tlZFZlcmRpY3QgIT09ICd3YXRjaCcpIHtcbiAgICAgICAgICByZWFwZXJMb2coZGVzY3JpYmVFeGl0KGxvY2tlZFZlcmRpY3QpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWFwZXJMb2coJ05vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSBzZXR1cCBsb2NrIGFueSBtb3JlLCBzbyBub3RoaW5nIGlzIGxlZnQgdG8gc3RvcCB0aGUgZW11bGF0b3IuIFN0b3BwaW5nIHRoZSBsZWZ0b3ZlcnMgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQuLi4nKTtcbiAgICAgICAgYXdhaXQgbmV3IEVtdWxhdG9yUmVjbGFpbWVyKHJlYXBlckxvZykucmVjbGFpbUxlZnRvdmVyRW11bGF0b3JzKHsgc2NvcGU6ICdlbmQtb2YtcnVuJyB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxvY2sucmVsZWFzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWFwZXJMb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9nKGBbZW11bGF0b3ItcmVhcGVyOiR7YXZkTmFtZX1dICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0cyB0aGUgcmVhcGVyIGZvciBhbiBlbXVsYXRvciB0aGUgaGFybmVzcyBqdXN0IHJlY29yZGVkIGFzIGl0cyBvd24sIHdoZW5cbiAqIGEgbGl2ZSBydW4gaG9sZHMgdGhlIGBhbmRyb2lkYCBzZXR1cCBsb2NrIFx1MjAxNCBhbmQgc2F5cyB3aGljaCBpdCBkaWQuXG4gKlxuICogTmV2ZXIgdGhyb3dzOiBhIHJlYXBlciB0aGF0IGNhbm5vdCBiZSBzcGF3bmVkIGlzIGEgbG9zdCBzYWZldHkgbmV0LCBub3QgYVxuICogcmVhc29uIHRvIGZhaWwgdGhlIGxhdW5jaCBpdCB3b3VsZCBoYXZlIGd1YXJkZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZWNvcmRlZCBlbXVsYXRvciwgYW5kIHdoZXJlIHRvIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXduRW11bGF0b3JSZWFwZXIocGFyYW1zOiBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYXZkTmFtZSB9ID0gcGFyYW1zO1xuICBpZiAoIWNoZWNrSXNTZXR1cExvY2tIZWxkKEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSkpIHtcbiAgICBwYXJhbXMubG9nKFxuICAgICAgYE5vIGVtdWxhdG9yIHJlYXBlciBhcm1lZCBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiBubyBydW4gaG9sZHMgdGhlICcke0FORFJPSURfU0VUVVBfTE9DS19TQ09QRX0nIHNldHVwIGxvY2ssIHNvIGEgcmVhcGVyIGNvdWxkIG5vdCB0ZWxsIHRoaXMgcnVuIGVuZGluZyBmcm9tIGl0IGJlaW5nIGtpbGxlZC4gSWYgdGhpcyBwcm9jZXNzIGlzIGtpbGxlZCwgb25seSB0aGUgbmV4dCBBbmRyb2lkIHJ1biBvbiB0aGlzIGhvc3Qgc3RvcHMgdGhlIGVtdWxhdG9yLmBcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gam9pbihnZXRSZWFwZXJMb2dEaXJlY3RvcnkoKSwgYCR7YXZkTmFtZX0ke1JFQVBFUl9MT0dfRklMRV9TVUZGSVh9YCk7XG4gIHRyeSB7XG4gICAgbWtkaXJTeW5jKGdldFJlYXBlckxvZ0RpcmVjdG9yeSgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBsb2dGaWxlRGVzY3JpcHRvciA9IG9wZW5TeW5jKGxvZ0ZpbGVQYXRoLCByZXNvbHZlRW11bGF0b3JSZWFwZXJMb2dPcGVuRmxhZyhyZWFkRmlsZVNpemUobG9nRmlsZVBhdGgpKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8qXG4gICAgICAgKiBUaHJvdWdoIHRoZSByZWxheSwgbmV2ZXIgc3RyYWlnaHQgYXQgdGhlIHJlYXBlcjogYSByZWFwZXIgc3Bhd25lZCBoZXJlXG4gICAgICAgKiB3b3VsZCBiZSBhIGNoaWxkIG9mIHRoaXMgcnVuIGFuZCB3b3VsZCBkaWUgd2l0aCBpdCB1bmRlciBhbnkga2lsbCB0aGF0XG4gICAgICAgKiB3YWxrcyB0aGUgcHJvY2VzcyB0cmVlLiBUaGUgcmVsYXkgZXhpdHMgYXQgb25jZSwgbGVhdmluZyB0aGUgcmVhcGVyIHdpdGhcbiAgICAgICAqIGEgZGVhZCBwYXJlbnQgYW5kIG5vIGVkZ2UgYmFjayB0byB0aGlzIHJ1bi5cbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVsYXkgPSBzcGF3bihcbiAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgW1xuICAgICAgICAgICctZScsXG4gICAgICAgICAgYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCksXG4gICAgICAgICAgYnVpbGRFbXVsYXRvclJlYXBlckJvb3RzdHJhcCgpLFxuICAgICAgICAgIHJlc29sdmVPd25Nb2R1bGVVcmwoKSxcbiAgICAgICAgICAuLi5idWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKHsgYXZkTmFtZSwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IHBhcmFtcy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICBdLFxuICAgICAgICB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogWydpZ25vcmUnLCBsb2dGaWxlRGVzY3JpcHRvciwgbG9nRmlsZURlc2NyaXB0b3JdLCB3aW5kb3dzSGlkZTogdHJ1ZSB9XG4gICAgICApO1xuICAgICAgcmVsYXkub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcGFyYW1zLmxvZyhgVGhlIGVtdWxhdG9yIHJlYXBlciByZWxheSBmb3IgQVZEIFwiJHthdmROYW1lfVwiIGZhaWxlZCB0byBzdGFydDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gICAgICByZWxheS51bnJlZigpO1xuICAgICAgcGFyYW1zLmxvZyhcbiAgICAgICAgYEVtdWxhdG9yIHJlYXBlciBhcm1lZCBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiBpZiB0aGlzIHJ1biBpcyBraWxsZWQgXHUyMDE0IGEgcHJvY2Vzcy10cmVlIGtpbGwgaW5jbHVkZWQsIHNpbmNlIHRoZSByZWFwZXIgaXMgc3RhcnRlZCB0aHJvdWdoIGEgcmVsYXkgdGhhdCBleGl0cyBhdCBvbmNlIFx1MjAxNCBpdCBzdG9wcyB0aGUgZW11bGF0b3Igb25jZSBubyBBbmRyb2lkIHJ1biBob2xkcyB0aGUgJyR7QU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFfScgc2V0dXAgbG9jay4gSXRzIFBJRCBpcyB0aGUgZmlyc3QgbGluZSBvZiBpdHMgbG9nOiAke2xvZ0ZpbGVQYXRofWBcbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsb3NlU3luYyhsb2dGaWxlRGVzY3JpcHRvcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHBhcmFtcy5sb2coYENvdWxkIG5vdCBhcm0gdGhlIGVtdWxhdG9yIHJlYXBlciBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZUV4aXQodmVyZGljdDogRXhjbHVkZTxFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCwgJ3dhdGNoJz4pOiBzdHJpbmcge1xuICByZXR1cm4gdmVyZGljdCA9PT0gJ3N1cGVyc2VkZWQnXG4gICAgPyAnVGhlIG1hcmtlciBub3cgcmVjb3JkcyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoaXMgQVZELCB3aGljaCBoYXMgaXRzIG93biByZWFwZXI7IG5vdGhpbmcgbGVmdCB0byB3YXRjaC4nXG4gICAgOiAnVGhlIGVtdWxhdG9yIHdhcyBzdG9wcGVkOyBub3RoaW5nIGxlZnQgdG8gd2F0Y2guJztcbn1cblxuZnVuY3Rpb24gZ2V0UmVhcGVyTG9nRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKHRtcGRpcigpLCBIQVJORVNTX1RFTVBfRElSX05BTUUpO1xufVxuXG5mdW5jdGlvbiByZWFkRmlsZVNpemUocGF0aDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3RhdFN5bmMocGF0aCkuc2l6ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkV2F0Y2hWZXJkaWN0KHJlYXBlckFyZ3VtZW50czogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMpOiBFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCB7XG4gIHJldHVybiByZXNvbHZlRW11bGF0b3JSZWFwZXJXYXRjaCh7XG4gICAgYXJtZWRTdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcmVhcGVyQXJndW1lbnRzLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzLFxuICAgIGNoZWNrSXNQaWRBbGl2ZTogY2hlY2tJc1Byb2Nlc3NBbGl2ZSxcbiAgICBtYXJrZXI6IHJlYWRFbXVsYXRvck1hcmtlcihyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSlcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhpcyBtb2R1bGUncyBvd24gVVJMIFx1MjAxNCB0aGUgb25lIHRoZSBib290c3RyYXAgaW1wb3J0cy5cbiAqXG4gKiBUaGUgQ0pTIGJ1aWxkIGhhcyBubyBgaW1wb3J0Lm1ldGFgIChlc2J1aWxkIGVtcHRpZXMgaXQpLCBidXQgaXQgaGFzXG4gKiBgX19maWxlbmFtZWA7IHRoZSBFU00gYnVpbGQgYW5kIHRoZSBgLnRzYCBzb3VyY2UgaGF2ZSBgaW1wb3J0Lm1ldGEudXJsYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVVJMIG9mIHRoaXMgbW9kdWxlIGFzIGl0IGlzIHJ1bm5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPd25Nb2R1bGVVcmwoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJyA/IHBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZiA6IGltcG9ydC5tZXRhLnVybDtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVFQSxnQ0FBc0I7QUFDdEIscUJBS087QUFDUCxxQkFBdUI7QUFDdkIsdUJBQXFCO0FBQ3JCLDBCQUFvQjtB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
|
|
@@ -125,7 +125,7 @@ export interface ResolveEmulatorReaperWatchParams {
|
|
|
125
125
|
/**
|
|
126
126
|
Whether a PID is still running.
|
|
127
127
|
*/
|
|
128
|
-
|
|
128
|
+
checkIsPidAlive(this: void, pid: number): boolean;
|
|
129
129
|
/**
|
|
130
130
|
The AVD's marker as it reads now, if any.
|
|
131
131
|
*/
|
|
@@ -142,7 +142,7 @@ export interface SpawnEmulatorReaperParams {
|
|
|
142
142
|
/**
|
|
143
143
|
Receives the armed / not-armed line.
|
|
144
144
|
*/
|
|
145
|
-
|
|
145
|
+
log(this: void, message: string): void;
|
|
146
146
|
/**
|
|
147
147
|
The recorded emulator's launch time, as written into its marker.
|
|
148
148
|
*/
|
|
@@ -309,4 +309,4 @@ function parseHostProcessList(output) {
|
|
|
309
309
|
EmulatorReclaimer,
|
|
310
310
|
HOST_PROCESS_QUERY_TIMEOUT_IN_MILLISECONDS
|
|
311
311
|
});
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlY2xhaW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdG9wcyB0aGUgZW11bGF0b3JzIHRoaXMgaGFybmVzcyBzdGFydGVkLCBhbmQgKip2ZXJpZmllcyoqIGVhY2ggc3RvcCBcdTIwMTQgdGhlXG4gKiBtYXJrZXItZHJpdmVuIGhhbGYgb2YgZW11bGF0b3Igb3duZXJzaGlwIChgZW11bGF0b3ItbWFya2VyLnRzYCwgKipMNTYqKikuXG4gKlxuICogSXQgbGl2ZXMgYXBhcnQgZnJvbSBgdHJhbnNwb3J0LWZhY3RvcnkudHNgIHNvIHRoYXQgYSBwcm9jZXNzIHdpdGggbm8gYnVzaW5lc3NcbiAqIGxvYWRpbmcgdGhlIHdob2xlIHRyYW5zcG9ydCBzdGFjayBjYW4gc3RpbGwgc3RvcCBhbiBlbXVsYXRvciBjb3JyZWN0bHkuIFRoYXRcbiAqIHByb2Nlc3MgaXMgdGhlIGVtdWxhdG9yIHJlYXBlciAoYGVtdWxhdG9yLXJlYXBlci50c2ApOiBpdCBydW5zIGRldGFjaGVkIGZyb21cbiAqIGFueSB0ZXN0IHJ1bm5lciwgYW5kIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMgaXQgcnVucyBzdHJhaWdodCBmcm9tIHNvdXJjZVxuICogdW5kZXIgTm9kZSdzIHR5cGUgc3RyaXBwaW5nLCB3aGVyZSBhIG1vZHVsZSByZWFkaW5nIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbCBcdTIwMTQgd2hpY2ggdGhlIGZhY3RvcnkncyBpbXBvcnQgZ3JhcGggcmVhY2hlcyBcdTIwMTRcbiAqIGNhbm5vdCBsb2FkIGF0IGFsbC4gU28gbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBpdCBlaXRoZXIuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZW11bGF0b3IgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IHRoZSBBbmRyb2lkIGludGVncmF0aW9uIHN1aXRlLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NMaXN0RW50cnkgfSBmcm9tICcuL2VtdWxhdG9yLWJhY2tlbmQuY2pzJztcbmltcG9ydCB0eXBlIHsgRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuXG5pbXBvcnQgeyBjaGVja0lzRGV2aWNlTGlzdGVkIH0gZnJvbSAnLi9hZGItZGV2aWNlLWxpc3QuY2pzJztcbmltcG9ydCB7XG4gIHBhcnNlUG9zaXhQcm9jZXNzTGlzdCxcbiAgcGFyc2VXaW5kb3dzVGFza0xpc3QsXG4gIHNlbGVjdEVtdWxhdG9yQmFja2VuZFBpZHNcbn0gZnJvbSAnLi9lbXVsYXRvci1iYWNrZW5kLmNqcyc7XG5pbXBvcnQge1xuICBjbGVhckVtdWxhdG9yTWFya2VyLFxuICBjbGVhckVtdWxhdG9yTWFya2VySWZTdG9wcGVkLFxuICBsaXN0RW11bGF0b3JNYXJrZXJzLFxuICByZXNvbHZlRW11bGF0b3JNYXJrZXJWZXJkaWN0LFxuICBzZWxlY3RMaXZlTWFya2VkUGlkc1xufSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuaW1wb3J0IHtcbiAga2lsbFByb2Nlc3NUcmVlLFxuICBraWxsUHJvY2Vzc1RyZWVCeVBpZFxufSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLmNqcyc7XG5pbXBvcnQgeyBjaGVja0lzUHJvY2Vzc0FsaXZlIH0gZnJvbSAnLi9wcm9jZXNzLWxpdmVuZXNzLmNqcyc7XG5pbXBvcnQge1xuICBidWlsZFRlYXJkb3duTWVzc2FnZSxcbiAgcmVzb2x2ZVRlYXJkb3duT3V0Y29tZVxufSBmcm9tICcuL3RlYXJkb3duLXZlcmRpY3QuY2pzJztcblxuLyoqXG4gKiBCdWRnZXQgZm9yIG9uZSBxdWljayBgYWRiYCBjYWxsIFx1MjAxNCBgYWRiIGRldmljZXNgLCBhIGNvbnNvbGUgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKlxuICogYGR1bXBzeXMgY29ubmVjdGl2aXR5YCBpcyBmYXIgbGFyZ2VyIHRoYW4gdGhlIG90aGVyIHByb2Jlcycgb3V0cHV0LCBhbmQgTm9kZSdzXG4gKiBkZWZhdWx0IDEgTWlCIGBtYXhCdWZmZXJgIHdvdWxkIGZhaWwgdGhlIGNhbGwgcmF0aGVyIHRoYW4gdHJ1bmNhdGUgaXQgXHUyMDE0IHdoaWNoXG4gKiB3b3VsZCByZWFkIGFzIFwibm90IHJlYWR5XCIgZm9yZXZlciBhbmQgYnVybiB0aGUgd2hvbGUgbmV0d29yayBidWRnZXQuIEEgaG9zdFxuICogcHJvY2VzcyBsaXN0aW5nIHNoYXJlcyB0aGUgc2FtZSBjZWlsaW5nLlxuICovXG5leHBvcnQgY29uc3QgQURCX0RVTVBTWVNfTUFYX0JVRkZFUl9JTl9CWVRFUyA9IDhfMzg4XzYwODtcblxuLypcbiAqIDMwcywgbm90IHRoZSAxMHMgYSBgdGFza2xpc3RgIGNvc3RzIG9uIGFuIGlkbGUgaG9zdDogdGhpcyBxdWVyeSBydW5zIGluIHRoZVxuICogc2FtZSBwb3N0LWJvb3QgY29udGVudGlvbiB3aW5kb3cgdGhhdCBpbmZsYXRlcyBldmVyeSBgYWRiYCByb3VuZC10cmlwIDI1LTUweFxuICogKEw0NSksIGFuZCB0aGUgZmlyc3QgZW5kLXRvLWVuZCBydW4gb3ZlcnJhbiBhIDEwcyBidWRnZXQgdGhlcmUgXHUyMDE0IHNpbGVudGx5XG4gKiBkaXNhcm1pbmcgdGhlIHRlYXJkb3duIGVzY2FsYXRpb24uIFNpemVkIGxpa2UgYEFEQl9EVU1QU1lTX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTYCxcbiAqIGZvciB0aGUgc2FtZSByZWFzb24uXG4gKi9cbmV4cG9ydCBjb25zdCBIT1NUX1BST0NFU1NfUVVFUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5cbmNvbnN0IEVNVUxBVE9SX0VTQ0FMQVRFRF9TVE9QX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEVNVUxBVE9SX1NUT1BfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5jb25zdCBFTVVMQVRPUl9TVE9QX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMjBfMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX1BFUl9TRUNPTkQgPSAxMDAwO1xuXG4vKipcbiAqIEEgaG9zdCBjb21tYW5kIGFuZCBpdHMgYXJndW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RDb21tYW5kUXVlcnkge1xuICAvKipcbiAgVGhlIGV4ZWN1dGFibGUgdG8gcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgY29tbWFuZCdzIGFyZ3VtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBFbXVsYXRvclJlY2xhaW1lci5yZWNsYWltTGVmdG92ZXJFbXVsYXRvcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY2xhaW1MZWZ0b3ZlckVtdWxhdG9yc1BhcmFtcyB7XG4gIC8qKlxuICBBbiBBVkQgd2hvc2UgbGVmdG92ZXIgaXMgbGVmdCBhbG9uZSBcdTIwMTQgdGhlIG9uZSBhIHByZWZsaWdodCBpcyBhYm91dCB0byBhZG9wdCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjZXB0QXZkTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogYCdwcmVmbGlnaHQnYCBzcGFyZXMgYW4gZW11bGF0b3IgYW5vdGhlciBsaXZlIGhhcm5lc3MgcHJvY2VzcyBzdGlsbCBvd25zLlxuICAgKiBgJ2VuZC1vZi1ydW4nYCBkb2VzIG5vdDogdGhlIGNhbGxlciBob2xkcyB0aGUgYGFuZHJvaWRgIGxvY2sgd2l0aCBubyBydW4gaW5cbiAgICogZmxpZ2h0IFx1MjAxNCB0aGUgcnVuJ3Mgb3duIGdsb2JhbCB0ZWFyZG93biwgb3IgdGhlIGVtdWxhdG9yIHJlYXBlciBhZnRlciB0aGVcbiAgICogcnVuIGlzIGdvbmUgXHUyMDE0IHNvIHRoYXQgb3duZXIgY2FuIG9ubHkgYmUgb25lIG9mIHRoZSBmaW5pc2hlZCBydW4nc1xuICAgKiBwcm9jZXNzZXMsIHdoaWNoIG5vIGxvbmdlciBoYXMgYSB0dXJuIHRvIHN0b3AgaXQuXG4gICAqL1xuICByZWFkb25seSBzY29wZTogJ2VuZC1vZi1ydW4nIHwgJ3ByZWZsaWdodCc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVtdWxhdG9yUmVjbGFpbWVyLnN0b3BFbXVsYXRvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcEVtdWxhdG9yUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBVkQgbmFtZSwgbmFtZWQgaW4gdGhlIHdhcm5pbmcgc28gdGhlIGxlZnRvdmVyIGlzIGlkZW50aWZpYWJsZSwgYW5kIHRoZSBrZXkgb2YgaXRzIG1hcmtlci5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRldmljZSB0aGUgZW11bGF0b3IgaXMgc2VydmluZywgc2h1dCBkb3duIG92ZXIgaXRzIGNvbnNvbGUgYW5kIHBvbGxlZFxuICAgKiB0byBkZWNpZGUgd2hldGhlciBpdCBhY3R1YWxseSBzdG9wcGVkLiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBlbXVsYXRvciBmYWlsZWRcbiAgICogYmVmb3JlIGFueSBkZXZpY2UgYXBwZWFyZWQuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGVtdWxhdG9yIGxhdW5jaGVyIHByb2Nlc3MgdGhpcyBydW4gc3Bhd25lZC4gYHVuZGVmaW5lZGAgZm9yIGEgbGVmdG92ZXJcbiAgICogdGhpcyBydW4gdG9vayBvdmVyLCB3aG9zZSBsYXVuY2hlciBiZWxvbmdlZCB0byBhbm90aGVyIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBlbXVsYXRvclByb2Nlc3M/OiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gIFRoZSBlbXVsYXRvciBQSURzIHRoaXMgcnVuIG93bnMsIGVzY2FsYXRlZCB0byB3aGVuIHRoZSBjb25zb2xlIGFuZCB0aGUgbGF1bmNoZXIncyB0cmVlIGtpbGwgbGVhdmUgb25lIGJlaGluZC5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVkRW11bGF0b3JQaWRzOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuaW50ZXJmYWNlIENoZWNrSXNFbXVsYXRvckdvbmVQYXJhbXMge1xuICAvKipcbiAgVGhlIGRldmljZSB0aGUgZW11bGF0b3Igc2VydmVzLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vbmUgZXZlciBhcHBlYXJlZCBcdTIwMTQgdGhlIFBJRHMgYXJlIHRoZW4gdGhlIG9ubHkgcHJvb2YuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgVGhlIGVtdWxhdG9yIFBJRHMgdGhpcyBydW4gb3ducy5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVkRW11bGF0b3JQaWRzOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuaW50ZXJmYWNlIFdhaXRGb3JFbXVsYXRvclN0b3BwZWRQYXJhbXMge1xuICAvKipcbiAgVGhlIGRldmljZSB0aGUgZW11bGF0b3Igc2VydmVzLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vbmUgZXZlciBhcHBlYXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBUaGUgZW11bGF0b3IgUElEcyB0aGlzIHJ1biBvd25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZWRFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdO1xuXG4gIC8qKlxuICBIb3cgbG9uZyB0byB3YWl0IGZvciB0aGUgZW11bGF0b3IgdG8gZGlzYXBwZWFyLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaW5kcywgc3RvcHMgYW5kIHZlcmlmaWVzIHRoZSBoYXJuZXNzJ3MgZW11bGF0b3JzLCByZXBvcnRpbmcgdGhyb3VnaCB0aGVcbiAqIGNhbGxlcidzIGxvZyBzbyBlYWNoIGNhbGxlciBrZWVwcyBpdHMgb3duIHByZWZpeC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVtdWxhdG9yUmVjbGFpbWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2c6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZWNsYWltZXIgdGhhdCByZXBvcnRzIHVuZGVyIHRoZSBjYWxsZXIncyBvd24gbG9nIHByZWZpeC5cbiAgICpcbiAgICogQHBhcmFtIGxvZyAtIFJlY2VpdmVzIGV2ZXJ5IHByb2dyZXNzIGFuZCB2ZXJkaWN0IGxpbmUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5sb2cgPSBsb2c7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBgYWRiIGRldmljZXNgIGFuZCByZXR1cm5zIGl0cyByYXcgc3Rkb3V0LlxuICAgKlxuICAgKiBUaGUgcmF3IGxpc3RpbmcgaXMgd2hhdCB0ZWFyZG93biBuZWVkczogYGdldENvbm5lY3RlZERldmljZUlkc2Aga2VlcHMgb25seVxuICAgKiB0aGUgYGRldmljZWAgc3RhdGUsIGFuZCBhbiBlbXVsYXRvciBvbiBpdHMgd2F5IG91dCBhbnN3ZXJzIGBvZmZsaW5lYCB3aGlsZVxuICAgKiBzdGlsbCBob2xkaW5nIHRoZSBBVkQgXHUyMDE0IHNlZSBgYWRiLWRldmljZS1saXN0LnRzYC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJhdyBgYWRiIGRldmljZXNgIG91dHB1dC5cbiAgICogQHRocm93cyBJZiBhZGIgY291bGQgbm90IGJlIHJ1biBhdCBhbGwuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGV2aWNlc091dHB1dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGV4ZWNGaWxlKCdhZGInLCBbJ2RldmljZXMnXSwgeyB0aW1lb3V0OiBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0sIChlcnJvciwgc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHJ1biAnYWRiIGRldmljZXMnOiAke2Vycm9yLm1lc3NhZ2V9LiBJcyBBREIgaW5zdGFsbGVkIGFuZCBpbiBQQVRIP2ApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZGVycikge1xuICAgICAgICAgIHRoaXMubG9nKGBBREIgc3RkZXJyOiAke3N0ZGVyci50cmltKCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgZXZlcnkgcHJvY2VzcyBvbiB0aGUgaG9zdC5cbiAgICpcbiAgICogQSBob3N0IGFsd2F5cyBoYXMgcHJvY2Vzc2VzLCBzbyBhIGxpc3RpbmcgdGhhdCBwYXJzZXMgdG8gKip6ZXJvKiogcm93cyBpcyBhXG4gICAqIGZhaWxlZCBxdWVyeSBob3dldmVyIGl0IGV4aXRlZCwgYW5kIGNvbWVzIGJhY2sgYXMgYHVuZGVmaW5lZGAgZXhhY3RseSBsaWtlXG4gICAqIG9uZSB0aGF0IGRpZCBub3QgcnVuIFx1MjAxNCBuZXZlciBhcyBhbiBlbXB0eSBsaXN0IGEgY2FsbGVyIGNvdWxkIHJlYWQgYXMgXCJub1xuICAgKiBlbXVsYXRvciBpcyBydW5uaW5nXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBob3N0J3MgcHJvY2Vzc2VzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBsaXN0aW5nIGZhaWxlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeUhvc3RQcm9jZXNzZXMoKTogUHJvbWlzZTxQcm9jZXNzTGlzdEVudHJ5W10gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBxdWVyeSA9IGJ1aWxkSG9zdFByb2Nlc3NRdWVyeSgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpID0+IHtcbiAgICAgIGV4ZWNGaWxlKFxuICAgICAgICBxdWVyeS5jb21tYW5kLFxuICAgICAgICBxdWVyeS5jb21tYW5kQXJndW1lbnRzLFxuICAgICAgICB7IG1heEJ1ZmZlcjogQURCX0RVTVBTWVNfTUFYX0JVRkZFUl9JTl9CWVRFUywgdGltZW91dDogSE9TVF9QUk9DRVNTX1FVRVJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0sXG4gICAgICAgIChlcnJvciwgc3Rkb3V0KSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZyhgV2FybmluZzogY291bGQgbm90IGxpc3QgaG9zdCBwcm9jZXNzZXMgKFxcYCR7cXVlcnkuY29tbWFuZH1cXGApOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoZXJyb3IgPyAnJyA6IHN0ZG91dCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9jZXNzZXMgPSBwYXJzZUhvc3RQcm9jZXNzTGlzdChvdXRwdXQpO1xuICAgIGlmIChwcm9jZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmxvZyhgV2FybmluZzogXFxgJHtxdWVyeS5jb21tYW5kfVxcYCBsaXN0ZWQgbm8gcHJvY2Vzc2VzLmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBlbXVsYXRvcnMgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQgdGhhdCBubyBsaXZlIHJ1biBpcyByZXNwb25zaWJsZVxuICAgKiBmb3IsIGFuZCBkcm9wcyB0aGUgbWFya2VycyB0aGF0IG5vIGxvbmdlciBkZXNjcmliZSBhIHJ1bm5pbmcgZW11bGF0b3IuXG4gICAqXG4gICAqIE9ubHkgZXZlciBhY3RzIG9uIGEgKiptYXJrZXItdmVyaWZpZWQqKiBlbXVsYXRvcjogb25lIHdob3NlIG1hcmtlciBuYW1lcyBhXG4gICAqIFBJRCB0aGF0IGlzIHN0aWxsIGEgbGl2ZSBlbXVsYXRvciBwcm9jZXNzLiBBbiBlbXVsYXRvciB3aXRob3V0IGEgbWFya2VyIFx1MjAxNFxuICAgKiBib290ZWQgYnkgaGFuZCwgYnkgQ0ksIG9yIGJ5IGFub3RoZXIgdG9vbCBcdTIwMTQgaXMgbmV2ZXIgdG91Y2hlZCwgd2hpY2gga2VlcHNcbiAgICogdGhlIEw0NiBsaW5lOiBuZXZlciBhIGBxZW11KmAgc3dlZXAuXG4gICAqXG4gICAqIENhbGxlcnMgbXVzdCBob2xkIHRoZSBgYW5kcm9pZGAgc2V0dXAgbG9jayAoTDcpLCB3aGljaCBpcyB3aGF0IG1ha2VzIGFcbiAgICogbGVmdG92ZXIgc2FmZSB0byBzdG9wOiBubyBvdGhlciBBbmRyb2lkIHJ1biBjYW4gYmUgbWlkLWZsaWdodCBvbiBpdC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFdoaWNoIEFWRCB0byBsZWF2ZSBhbG9uZSwgYW5kIHdoZXRoZXIgdGhpcyBydW4gaXMgZW5kaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlY2xhaW1MZWZ0b3ZlckVtdWxhdG9ycyhwYXJhbXM6IFJlY2xhaW1MZWZ0b3ZlckVtdWxhdG9yc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1hcmtlcnMgPSBsaXN0RW11bGF0b3JNYXJrZXJzKCkuZmlsdGVyKChtYXJrZXIpID0+IG1hcmtlci5hdmROYW1lICE9PSBwYXJhbXMuZXhjZXB0QXZkTmFtZSk7XG4gICAgaWYgKG1hcmtlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvY2Vzc2VzID0gYXdhaXQgdGhpcy5xdWVyeUhvc3RQcm9jZXNzZXMoKTtcbiAgICBpZiAocHJvY2Vzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFdpdGhvdXQgYSBsaXN0aW5nIGV2ZXJ5IG1hcmtlciB3b3VsZCByZWFkIGFzIHN0YWxlLCBhbmQgZGVsZXRpbmcgdGhlbSB3b3VsZCBsZWF2ZSB0aGUgbGVmdG92ZXJzIGltcG9zc2libGUgdG8gY29udmljdC5cbiAgICAgIHRoaXMubG9nKGBDYW5ub3QganVkZ2UgJHtTdHJpbmcobWFya2Vycy5sZW5ndGgpfSBlbXVsYXRvciBtYXJrZXIocykgd2l0aG91dCBhIGhvc3QgcHJvY2VzcyBsaXN0aW5nOyBsZWF2aW5nIHRoZW0gZm9yIGEgbGF0ZXIgcnVuLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxpdmVFbXVsYXRvclBpZHMgPSBzZWxlY3RFbXVsYXRvckJhY2tlbmRQaWRzKHsga25vd25QaWRzOiBbXSwgcHJvY2Vzc2VzIH0pO1xuICAgIGZvciAoY29uc3QgbWFya2VyIG9mIG1hcmtlcnMpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVjbGFpbUxlZnRvdmVyRW11bGF0b3IobWFya2VyLCBsaXZlRW11bGF0b3JQaWRzLCBwYXJhbXMuc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBhbiBlbXVsYXRvciB0aGlzIGhhcm5lc3Mgb3ducywgYW5kICoqdmVyaWZpZXMqKiBpdCBzdG9wcGVkLlxuICAgKlxuICAgKiBUaGUgY29uc29sZSBzaHV0ZG93biBnb2VzIGZpcnN0IGJlY2F1c2UgaXQgaXMgdGhlIG9ubHkgcGF0aCB0aGF0IHJlbGVhc2VzXG4gICAqIHRoZSBBVkQncyBgbXVsdGlpbnN0YW5jZS5sb2NrYDsgYSBgdGFza2tpbGxgIGxlYXZlcyB0aGUgbG9jayBiZWhpbmQsIGFuZCBhXG4gICAqIHN0YWxlIGxvY2sgaXMgd2hhdCBtYWtlcyB0aGUgbmV4dCBydW4gZmFpbCB3aXRoIGBSdW5uaW5nIG11bHRpcGxlIGVtdWxhdG9yc1xuICAgKiB3aXRoIHRoZSBzYW1lIEFWRGAgXHUyMDE0IGEgRkFUQUwgdGhlIGVtdWxhdG9yIHdyaXRlcyB0byBpdHMgb3duIHN0ZG91dCwgd2hlcmVcbiAgICogbm9ib2R5IHNlZXMgaXQuXG4gICAqXG4gICAqIFdvcmtzIHdpdGhvdXQgYSBsYXVuY2hlciBoYW5kbGUgdG9vOiBhIGxlZnRvdmVyIHRoaXMgcnVuIHRvb2sgb3ZlciBoYXMgb25seVxuICAgKiBpdHMgUElEcywgd2hpY2ggaXMgYWxsIHRoZSBlc2NhbGF0aW9uIGJlbG93IGV2ZXIgbmVlZGVkLiBUaGUgbWFya2VyIGdvZXNcbiAgICogb25seSB3aXRoIGEgKip2ZXJpZmllZCoqIHN0b3AsIHNvIGFuIGVtdWxhdG9yIHRoYXQgb3V0bGl2ZWQgdGhpcyBhdHRlbXB0XG4gICAqIHN0YXlzIGNvbnZpY3RhYmxlIGJ5IHRoZSBuZXh0IG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbXVsYXRvciBwcm9jZXNzLCB0aGUgZGV2aWNlIGl0IHNlcnZlcyBhbmQgdGhlIFBJRHMgdGhpcyBydW4gb3ducy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdG9wRW11bGF0b3IocGFyYW1zOiBTdG9wRW11bGF0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLmRldmljZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMua2lsbEVtdWxhdG9yQ29uc29sZShwYXJhbXMuZGV2aWNlSWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmVtdWxhdG9yUHJvY2Vzcykge1xuICAgICAga2lsbFByb2Nlc3NUcmVlKHBhcmFtcy5lbXVsYXRvclByb2Nlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHdhaXRQYXJhbXM6IFdhaXRGb3JFbXVsYXRvclN0b3BwZWRQYXJhbXMgPSB7XG4gICAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkLFxuICAgICAgb3duZWRFbXVsYXRvclBpZHM6IHBhcmFtcy5vd25lZEVtdWxhdG9yUGlkcyxcbiAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogRU1VTEFUT1JfU1RPUF9USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICAgIH07XG5cbiAgICBsZXQgaGFzRXNjYWxhdGVkID0gZmFsc2U7XG4gICAgbGV0IGlzU3RvcHBlZCA9IGF3YWl0IHRoaXMud2FpdEZvckVtdWxhdG9yU3RvcHBlZCh3YWl0UGFyYW1zKTtcblxuICAgIGlmICghaXNTdG9wcGVkKSB7XG4gICAgICBjb25zdCBzdXJ2aXZpbmdQaWRzID0gcGFyYW1zLm93bmVkRW11bGF0b3JQaWRzLmZpbHRlcigocGlkKSA9PiBjaGVja0lzUHJvY2Vzc0FsaXZlKHBpZCkpO1xuICAgICAgaWYgKHN1cnZpdmluZ1BpZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBoYXNFc2NhbGF0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZyhcbiAgICAgICAgICBgQXV0by1zdGFydGVkIGVtdWxhdG9yIG91dGxpdmVkIGl0cyBjb25zb2xlIHNodXRkb3duIGFuZCB0aGUgbGF1bmNoZXIncyBwcm9jZXNzIHRyZWU7IGVzY2FsYXRpbmcgdG8gdGhlIGVtdWxhdG9yIFBJRChzKSB0aGlzIHJ1biBvd25zOiBbJHtzdXJ2aXZpbmdQaWRzLmpvaW4oJywgJyl9XS5gXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcGlkIG9mIHN1cnZpdmluZ1BpZHMpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWVCeVBpZChwaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlzU3RvcHBlZCA9IGF3YWl0IHRoaXMud2FpdEZvckVtdWxhdG9yU3RvcHBlZCh7IC4uLndhaXRQYXJhbXMsIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogRU1VTEFUT1JfRVNDQUxBVEVEX1NUT1BfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2coYnVpbGRUZWFyZG93bk1lc3NhZ2Uoe1xuICAgICAgZXZpZGVuY2U6IHBhcmFtcy5kZXZpY2VJZCA9PT0gdW5kZWZpbmVkID8gYEFWRCBcIiR7cGFyYW1zLmF2ZE5hbWV9XCJgIDogYEFWRCBcIiR7cGFyYW1zLmF2ZE5hbWV9XCIgb24gZGV2aWNlICR7cGFyYW1zLmRldmljZUlkfWAsXG4gICAgICBvdXRjb21lOiByZXNvbHZlVGVhcmRvd25PdXRjb21lKHsgaGFzRXNjYWxhdGVkLCBpc1N0b3BwZWQgfSksXG4gICAgICBzdWJqZWN0OiAnQXV0by1zdGFydGVkIGVtdWxhdG9yJyxcbiAgICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogRU1VTEFUT1JfU1RPUF9USU1FT1VUX0lOX01JTExJU0VDT05EU1xuICAgIH0pKTtcblxuICAgIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgIGNsZWFyRW11bGF0b3JNYXJrZXJJZlN0b3BwZWQocGFyYW1zLmF2ZE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgdGhlIGVtdWxhdG9yIHRoaXMgcnVuIHN0YXJ0ZWQgaXMgcmVhbGx5IGdvbmUuXG4gICAqXG4gICAqIFR3byBpbmRlcGVuZGVudCBwcm9vZnMsIGNoZWFwZXN0IGZpcnN0OiBub25lIG9mIHRoZSBQSURzIHRoaXMgcnVuIG93bnMgaXNcbiAgICogYWxpdmUsIGFuZCB0aGUgZGV2aWNlIG5vIGxvbmdlciBhcHBlYXJzIGluIGBhZGIgZGV2aWNlc2AgKippbiBhbnkgc3RhdGUqKiAoYVxuICAgKiBkeWluZyBlbXVsYXRvciBhbnN3ZXJzIGBvZmZsaW5lYCB3aGlsZSBpdCBzdGlsbCBob2xkcyB0aGUgQVZEKS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgYW5kIHRoZSBQSURzIHRoaXMgcnVuIG93bnMuXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIG5vdGhpbmcgb2YgdGhpcyBydW4ncyBlbXVsYXRvciBpcyBsZWZ0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lzRW11bGF0b3JHb25lKHBhcmFtczogQ2hlY2tJc0VtdWxhdG9yR29uZVBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChwYXJhbXMub3duZWRFbXVsYXRvclBpZHMuc29tZSgocGlkKSA9PiBjaGVja0lzUHJvY2Vzc0FsaXZlKHBpZCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5kZXZpY2VJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuICFjaGVja0lzRGV2aWNlTGlzdGVkKHsgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZCwgZGV2aWNlc091dHB1dDogYXdhaXQgdGhpcy5nZXREZXZpY2VzT3V0cHV0KCkgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIC8qXG4gICAgICAgKiBBbiBhZGIgdGhhdCBjYW5ub3QgcnVuIGlzIG5vdCBldmlkZW5jZSBhYm91dCB0aGUgZW11bGF0b3IgXHUyMDE0IGFuZCB0aGUgUElEXG4gICAgICAgKiBwcm9iZSBhYm92ZSBoYXMgYWxyZWFkeSBzYWlkIHRoaXMgcnVuJ3MgcHJvY2Vzc2VzIGFyZSBnb25lLCB3aGljaCBpcyB0aGVcbiAgICAgICAqIHN0cm9uZ2VyIG9mIHRoZSB0d28gcHJvb2ZzLlxuICAgICAgICovXG4gICAgICB0aGlzLmxvZyhgQ291bGQgbm90IHJlLWNoZWNrIGNvbm5lY3RlZCBkZXZpY2VzIHdoaWxlIHN0b3BwaW5nIHRoZSBlbXVsYXRvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNrcyB0aGUgZW11bGF0b3IgdG8gc2h1dCBpdHNlbGYgZG93biBvdmVyIGl0cyBjb25zb2xlLlxuICAgKlxuICAgKiBQcmVmZXJyZWQgb3ZlciBraWxsaW5nIHRoZSBwcm9jZXNzIG91dHJpZ2h0IGJlY2F1c2UgaXQgaXMgdGhlIHBhdGggdGhhdFxuICAgKiByZWxlYXNlcyB0aGUgQVZEJ3MgYG11bHRpaW5zdGFuY2UubG9ja2AuIEJlc3QtZWZmb3J0OiBhIGNvbnNvbGUgdGhhdCBkb2VzXG4gICAqIG5vdCBhbnN3ZXIgaXMgcmVwb3J0ZWQgYW5kIHRoZSBjYWxsZXIgZmFsbHMgdGhyb3VnaCB0byB0aGUga2lsbC5cbiAgICpcbiAgICogQHBhcmFtIGRldmljZUlkIC0gVGhlIGVtdWxhdG9yJ3MgZGV2aWNlIElELlxuICAgKi9cbiAgcHJpdmF0ZSBraWxsRW11bGF0b3JDb25zb2xlKGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGV4ZWNGaWxlKCdhZGInLCBbJy1zJywgZGV2aWNlSWQsICdlbXUnLCAna2lsbCddLCB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKGVycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgdGhpcy5sb2coXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgID8gYEVtdWxhdG9yIGNvbnNvbGUgc2h1dGRvd24gZm9yICR7ZGV2aWNlSWR9IGRpZCBub3QgYW5zd2VyOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgICAgICAgOiBgRW11bGF0b3IgY29uc29sZSBzaHV0ZG93biBmb3IgJHtkZXZpY2VJZH06ICR7c3Rkb3V0LnRyaW0oKX1gXG4gICAgICAgICk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHMgb24gb25lIGVtdWxhdG9yIG1hcmtlciBmb3Ige0BsaW5rIHJlY2xhaW1MZWZ0b3ZlckVtdWxhdG9yc30uXG4gICAqXG4gICAqIEBwYXJhbSBtYXJrZXIgLSBUaGUgbWFya2VyIHRvIGp1ZGdlLlxuICAgKiBAcGFyYW0gbGl2ZUVtdWxhdG9yUGlkcyAtIFRoZSBlbXVsYXRvciBwcm9jZXNzZXMgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGhvc3QuXG4gICAqIEBwYXJhbSBzY29wZSAtIFdoZXRoZXIgYW4gZW11bGF0b3IgYW5vdGhlciBsaXZlIGhhcm5lc3MgcHJvY2VzcyBvd25zIGlzIHNwYXJlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVjbGFpbUxlZnRvdmVyRW11bGF0b3IobWFya2VyOiBFbXVsYXRvck1hcmtlciwgbGl2ZUVtdWxhdG9yUGlkczogcmVhZG9ubHkgbnVtYmVyW10sIHNjb3BlOiBSZWNsYWltTGVmdG92ZXJFbXVsYXRvcnNQYXJhbXNbJ3Njb3BlJ10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2ZXJkaWN0ID0gcmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdCh7XG4gICAgICBjdXJyZW50UGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgIGlzT3duZXJBbGl2ZTogY2hlY2tJc1Byb2Nlc3NBbGl2ZShtYXJrZXIub3duZXJQaWQpLFxuICAgICAgbGl2ZUVtdWxhdG9yUGlkcyxcbiAgICAgIG1hcmtlclxuICAgIH0pO1xuXG4gICAgaWYgKHZlcmRpY3QgPT09ICdzdGFsZS1tYXJrZXInKSB7XG4gICAgICB0aGlzLmxvZyhgRHJvcHBpbmcgdGhlIGVtdWxhdG9yIG1hcmtlciBmb3IgQVZEIFwiJHttYXJrZXIuYXZkTmFtZX1cIjogbm9uZSBvZiBpdHMgUElEcyBbJHttYXJrZXIub3duZWRFbXVsYXRvclBpZHMuam9pbignLCAnKX1dIGlzIGEgcnVubmluZyBlbXVsYXRvciBhbnkgbW9yZS5gKTtcbiAgICAgIGNsZWFyRW11bGF0b3JNYXJrZXIobWFya2VyLmF2ZE5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogQSBtYXJrZXIgd3JpdHRlbiBhdCBsYXVuY2ggaGFzIG5vIGRldmljZSB5ZXQ6IHRoZSBlbXVsYXRvciB3YXMgc3RpbGxcbiAgICAgKiBib290aW5nIHdoZW4gd2hhdGV2ZXIgcmVjb3JkZWQgaXQgc3RvcHBlZCBsb29raW5nLiBUaGUgc3RvcCBiZWxvdyByZWFkc1xuICAgICAqIHRoYXQgYWJzZW5jZSBjb3JyZWN0bHkgXHUyMDE0IG5vIGNvbnNvbGUgdG8gc2h1dCBkb3duLCB0aGUgb3duZWQgUElEcyBhcmUgdGhlXG4gICAgICogd2hvbGUgb2YgdGhlIGV2aWRlbmNlIFx1MjAxNCBzbyBpdCBpcyBkZXNjcmliZWQgcmF0aGVyIHRoYW4gcGFwZXJlZCBvdmVyLlxuICAgICAqL1xuICAgIGNvbnN0IGV2aWRlbmNlID0gZGVzY3JpYmVNYXJrZWRFbXVsYXRvcihtYXJrZXIpO1xuXG4gICAgaWYgKHZlcmRpY3QgPT09ICdpbi11c2UtYnktbGl2ZS1ydW4nICYmIHNjb3BlID09PSAncHJlZmxpZ2h0Jykge1xuICAgICAgdGhpcy5sb2coYExlYXZpbmcgdGhlIGVtdWxhdG9yIGZvciAke2V2aWRlbmNlfSBhbG9uZTogdGhlIGhhcm5lc3MgcHJvY2VzcyB0aGF0IG93bnMgaXQgKFBJRCAke1N0cmluZyhtYXJrZXIub3duZXJQaWQpfSkgaXMgc3RpbGwgcnVubmluZy5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VJblNlY29uZHMgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gbWFya2VyLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSAvIE1JTExJU0VDT05EU19QRVJfU0VDT05EKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBTdG9wcGluZyB0aGUgZW11bGF0b3IgZm9yICR7ZXZpZGVuY2V9OiB0aGlzIGhhcm5lc3Mgc3RhcnRlZCBpdCAke1N0cmluZyhhZ2VJblNlY29uZHMpfXMgYWdvLCBhbmQgbm8gbGl2ZSBydW4gaXMgbGVmdCB0byBzdG9wIGl0LmBcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuc3RvcEVtdWxhdG9yKHtcbiAgICAgIGF2ZE5hbWU6IG1hcmtlci5hdmROYW1lLFxuICAgICAgZGV2aWNlSWQ6IG1hcmtlci5kZXZpY2VJZCxcbiAgICAgIG93bmVkRW11bGF0b3JQaWRzOiBzZWxlY3RMaXZlTWFya2VkUGlkcyhtYXJrZXIsIGxpdmVFbXVsYXRvclBpZHMpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdW50aWwgdGhpcyBydW4ncyBlbXVsYXRvciBpcyBnb25lLCBvciB0aGUgYnVkZ2V0IGVsYXBzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgUElEcyB0aGlzIHJ1biBvd25zLCBhbmQgdGhlIGJ1ZGdldC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGVtdWxhdG9yIGRpc2FwcGVhcmVkIHdpdGhpbiB0aGUgYnVkZ2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yRW11bGF0b3JTdG9wcGVkKHBhcmFtczogV2FpdEZvckVtdWxhdG9yU3RvcHBlZFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHBhcmFtcy50aW1lb3V0SW5NaWxsaXNlY29uZHM7XG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5jaGVja0lzRW11bGF0b3JHb25lKHBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgRU1VTEFUT1JfU1RPUF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHBsYXRmb3JtJ3MgXCJsaXN0IGV2ZXJ5IHByb2Nlc3NcIiBxdWVyeS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZCBhbmQgYXJndW1lbnRzIHRvIHJ1bi5cbiAqL1xuZnVuY3Rpb24gYnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5KCk6IEhvc3RDb21tYW5kUXVlcnkge1xuICByZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgID8geyBjb21tYW5kOiAndGFza2xpc3QnLCBjb21tYW5kQXJndW1lbnRzOiBbJy9GTycsICdDU1YnLCAnL05IJ10gfVxuICAgIDogeyBjb21tYW5kOiAncHMnLCBjb21tYW5kQXJndW1lbnRzOiBbJy1lbycsICdwaWQ9LGNvbW09J10gfTtcbn1cblxuLyoqXG4gKiBOYW1lcyB0aGUgZW11bGF0b3IgYSBtYXJrZXIgZGVzY3JpYmVzLCBmb3IgdGhlIGxvZy5cbiAqXG4gKiBAcGFyYW0gbWFya2VyIC0gVGhlIG1hcmtlci5cbiAqIEByZXR1cm5zIFRoZSBBVkQgYW5kIGl0cyBkZXZpY2UsIG9yIHRoZSBBVkQgYWxvbmUgZm9yIGEgbGF1bmNoIHRoYXQgaGFkIG5vdCBwcm9kdWNlZCBhIGRldmljZSB5ZXQuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlTWFya2VkRW11bGF0b3IobWFya2VyOiBFbXVsYXRvck1hcmtlcik6IHN0cmluZyB7XG4gIHJldHVybiBtYXJrZXIuZGV2aWNlSWQgPT09IHVuZGVmaW5lZFxuICAgID8gYEFWRCBcIiR7bWFya2VyLmF2ZE5hbWV9XCIgKG5vIGRldmljZTogaXQgd2FzIHN0aWxsIGJvb3Rpbmcgd2hlbiBpdCB3YXMgcmVjb3JkZWQpYFxuICAgIDogYEFWRCBcIiR7bWFya2VyLmF2ZE5hbWV9XCIgb24gZGV2aWNlICR7bWFya2VyLmRldmljZUlkfWA7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgaG9zdCBwcm9jZXNzIGxpc3Rpbmcgd2l0aCB0aGUgcGxhdGZvcm0ncyBwYXJzZXIuXG4gKlxuICogQHBhcmFtIG91dHB1dCAtIFJhdyBzdGRvdXQgb2Yge0BsaW5rIGJ1aWxkSG9zdFByb2Nlc3NRdWVyeX0ncyBjb21tYW5kLlxuICogQHJldHVybnMgVGhlIGxpc3RlZCBwcm9jZXNzZXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSG9zdFByb2Nlc3NMaXN0KG91dHB1dDogc3RyaW5nKTogUHJvY2Vzc0xpc3RFbnRyeVtdIHtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBwYXJzZVdpbmRvd3NUYXNrTGlzdChvdXRwdXQpIDogcGFyc2VQb3NpeFByb2Nlc3NMaXN0KG91dHB1dCk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxnQ0FBeUI7QUFDekIsMEJBQW9CO0FBS3BCLDZCQUFvQztBQUNwQyw4QkFJTztBQUNQLDZCQU1PO0FBQ1AsK0JBR087QUFDUCw4QkFBb0M7QUFDcEMsOEJBR087QUFLQSxNQUFNLDJDQUEyQztBQVFqRCxNQUFNLGtDQUFrQztBQVN4QyxNQUFNLDZDQUE2QztBQUUxRCxNQUFNLGtEQUFrRDtBQUN4RCxNQUFNLDhDQUE4QztBQUNwRCxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDBCQUEwQjtBQWlHekIsTUFBTSxrQkFBa0I7QUFBQSxFQUNaO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxLQUFnQztBQUNqRCxTQUFLLE1BQU07QUFB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
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlY2xhaW0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTdG9wcyB0aGUgZW11bGF0b3JzIHRoaXMgaGFybmVzcyBzdGFydGVkLCBhbmQgKip2ZXJpZmllcyoqIGVhY2ggc3RvcCBcdTIwMTQgdGhlXG4gKiBtYXJrZXItZHJpdmVuIGhhbGYgb2YgZW11bGF0b3Igb3duZXJzaGlwIChgZW11bGF0b3ItbWFya2VyLnRzYCwgKipMNTYqKikuXG4gKlxuICogSXQgbGl2ZXMgYXBhcnQgZnJvbSBgdHJhbnNwb3J0LWZhY3RvcnkudHNgIHNvIHRoYXQgYSBwcm9jZXNzIHdpdGggbm8gYnVzaW5lc3NcbiAqIGxvYWRpbmcgdGhlIHdob2xlIHRyYW5zcG9ydCBzdGFjayBjYW4gc3RpbGwgc3RvcCBhbiBlbXVsYXRvciBjb3JyZWN0bHkuIFRoYXRcbiAqIHByb2Nlc3MgaXMgdGhlIGVtdWxhdG9yIHJlYXBlciAoYGVtdWxhdG9yLXJlYXBlci50c2ApOiBpdCBydW5zIGRldGFjaGVkIGZyb21cbiAqIGFueSB0ZXN0IHJ1bm5lciwgYW5kIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMgaXQgcnVucyBzdHJhaWdodCBmcm9tIHNvdXJjZVxuICogdW5kZXIgTm9kZSdzIHR5cGUgc3RyaXBwaW5nLCB3aGVyZSBhIG1vZHVsZSByZWFkaW5nIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbCBcdTIwMTQgd2hpY2ggdGhlIGZhY3RvcnkncyBpbXBvcnQgZ3JhcGggcmVhY2hlcyBcdTIwMTRcbiAqIGNhbm5vdCBsb2FkIGF0IGFsbC4gU28gbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBpdCBlaXRoZXIuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZW11bGF0b3IgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IHRoZSBBbmRyb2lkIGludGVncmF0aW9uIHN1aXRlLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NMaXN0RW50cnkgfSBmcm9tICcuL2VtdWxhdG9yLWJhY2tlbmQuY2pzJztcbmltcG9ydCB0eXBlIHsgRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuXG5pbXBvcnQgeyBjaGVja0lzRGV2aWNlTGlzdGVkIH0gZnJvbSAnLi9hZGItZGV2aWNlLWxpc3QuY2pzJztcbmltcG9ydCB7XG4gIHBhcnNlUG9zaXhQcm9jZXNzTGlzdCxcbiAgcGFyc2VXaW5kb3dzVGFza0xpc3QsXG4gIHNlbGVjdEVtdWxhdG9yQmFja2VuZFBpZHNcbn0gZnJvbSAnLi9lbXVsYXRvci1iYWNrZW5kLmNqcyc7XG5pbXBvcnQge1xuICBjbGVhckVtdWxhdG9yTWFya2VyLFxuICBjbGVhckVtdWxhdG9yTWFya2VySWZTdG9wcGVkLFxuICBsaXN0RW11bGF0b3JNYXJrZXJzLFxuICByZXNvbHZlRW11bGF0b3JNYXJrZXJWZXJkaWN0LFxuICBzZWxlY3RMaXZlTWFya2VkUGlkc1xufSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5janMnO1xuaW1wb3J0IHtcbiAga2lsbFByb2Nlc3NUcmVlLFxuICBraWxsUHJvY2Vzc1RyZWVCeVBpZFxufSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLmNqcyc7XG5pbXBvcnQgeyBjaGVja0lzUHJvY2Vzc0FsaXZlIH0gZnJvbSAnLi9wcm9jZXNzLWxpdmVuZXNzLmNqcyc7XG5pbXBvcnQge1xuICBidWlsZFRlYXJkb3duTWVzc2FnZSxcbiAgcmVzb2x2ZVRlYXJkb3duT3V0Y29tZVxufSBmcm9tICcuL3RlYXJkb3duLXZlcmRpY3QuY2pzJztcblxuLyoqXG4gKiBCdWRnZXQgZm9yIG9uZSBxdWljayBgYWRiYCBjYWxsIFx1MjAxNCBgYWRiIGRldmljZXNgLCBhIGNvbnNvbGUgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKlxuICogYGR1bXBzeXMgY29ubmVjdGl2aXR5YCBpcyBmYXIgbGFyZ2VyIHRoYW4gdGhlIG90aGVyIHByb2Jlcycgb3V0cHV0LCBhbmQgTm9kZSdzXG4gKiBkZWZhdWx0IDEgTWlCIGBtYXhCdWZmZXJgIHdvdWxkIGZhaWwgdGhlIGNhbGwgcmF0aGVyIHRoYW4gdHJ1bmNhdGUgaXQgXHUyMDE0IHdoaWNoXG4gKiB3b3VsZCByZWFkIGFzIFwibm90IHJlYWR5XCIgZm9yZXZlciBhbmQgYnVybiB0aGUgd2hvbGUgbmV0d29yayBidWRnZXQuIEEgaG9zdFxuICogcHJvY2VzcyBsaXN0aW5nIHNoYXJlcyB0aGUgc2FtZSBjZWlsaW5nLlxuICovXG5leHBvcnQgY29uc3QgQURCX0RVTVBTWVNfTUFYX0JVRkZFUl9JTl9CWVRFUyA9IDhfMzg4XzYwODtcblxuLypcbiAqIDMwcywgbm90IHRoZSAxMHMgYSBgdGFza2xpc3RgIGNvc3RzIG9uIGFuIGlkbGUgaG9zdDogdGhpcyBxdWVyeSBydW5zIGluIHRoZVxuICogc2FtZSBwb3N0LWJvb3QgY29udGVudGlvbiB3aW5kb3cgdGhhdCBpbmZsYXRlcyBldmVyeSBgYWRiYCByb3VuZC10cmlwIDI1LTUweFxuICogKEw0NSksIGFuZCB0aGUgZmlyc3QgZW5kLXRvLWVuZCBydW4gb3ZlcnJhbiBhIDEwcyBidWRnZXQgdGhlcmUgXHUyMDE0IHNpbGVudGx5XG4gKiBkaXNhcm1pbmcgdGhlIHRlYXJkb3duIGVzY2FsYXRpb24uIFNpemVkIGxpa2UgYEFEQl9EVU1QU1lTX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTYCxcbiAqIGZvciB0aGUgc2FtZSByZWFzb24uXG4gKi9cbmV4cG9ydCBjb25zdCBIT1NUX1BST0NFU1NfUVVFUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG5cbmNvbnN0IEVNVUxBVE9SX0VTQ0FMQVRFRF9TVE9QX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEVNVUxBVE9SX1NUT1BfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5jb25zdCBFTVVMQVRPUl9TVE9QX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMjBfMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX1BFUl9TRUNPTkQgPSAxMDAwO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBFbXVsYXRvclJlY2xhaW1lci5yZWNsYWltTGVmdG92ZXJFbXVsYXRvcnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVjbGFpbWVyUmVjbGFpbUxlZnRvdmVyRW11bGF0b3JzUGFyYW1zIHtcbiAgLyoqXG4gIEFuIEFWRCB3aG9zZSBsZWZ0b3ZlciBpcyBsZWZ0IGFsb25lIFx1MjAxNCB0aGUgb25lIGEgcHJlZmxpZ2h0IGlzIGFib3V0IHRvIGFkb3B0IGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBleGNlcHRBdmROYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBgJ3ByZWZsaWdodCdgIHNwYXJlcyBhbiBlbXVsYXRvciBhbm90aGVyIGxpdmUgaGFybmVzcyBwcm9jZXNzIHN0aWxsIG93bnMuXG4gICAqIGAnZW5kLW9mLXJ1bidgIGRvZXMgbm90OiB0aGUgY2FsbGVyIGhvbGRzIHRoZSBgYW5kcm9pZGAgbG9jayB3aXRoIG5vIHJ1biBpblxuICAgKiBmbGlnaHQgXHUyMDE0IHRoZSBydW4ncyBvd24gZ2xvYmFsIHRlYXJkb3duLCBvciB0aGUgZW11bGF0b3IgcmVhcGVyIGFmdGVyIHRoZVxuICAgKiBydW4gaXMgZ29uZSBcdTIwMTQgc28gdGhhdCBvd25lciBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZpbmlzaGVkIHJ1bidzXG4gICAqIHByb2Nlc3Nlcywgd2hpY2ggbm8gbG9uZ2VyIGhhcyBhIHR1cm4gdG8gc3RvcCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiAnZW5kLW9mLXJ1bicgfCAncHJlZmxpZ2h0Jztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRW11bGF0b3JSZWNsYWltZXIuc3RvcEVtdWxhdG9yfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXVsYXRvclJlY2xhaW1lclN0b3BFbXVsYXRvclBhcmFtcyB7XG4gIC8qKlxuICBUaGUgQVZEIG5hbWUsIG5hbWVkIGluIHRoZSB3YXJuaW5nIHNvIHRoZSBsZWZ0b3ZlciBpcyBpZGVudGlmaWFibGUsIGFuZCB0aGUga2V5IG9mIGl0cyBtYXJrZXIuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgdGhlIGVtdWxhdG9yIGlzIHNlcnZpbmcsIHNodXQgZG93biBvdmVyIGl0cyBjb25zb2xlIGFuZCBwb2xsZWRcbiAgICogdG8gZGVjaWRlIHdoZXRoZXIgaXQgYWN0dWFsbHkgc3RvcHBlZC4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgZW11bGF0b3IgZmFpbGVkXG4gICAqIGJlZm9yZSBhbnkgZGV2aWNlIGFwcGVhcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbXVsYXRvciBsYXVuY2hlciBwcm9jZXNzIHRoaXMgcnVuIHNwYXduZWQuIGB1bmRlZmluZWRgIGZvciBhIGxlZnRvdmVyXG4gICAqIHRoaXMgcnVuIHRvb2sgb3Zlciwgd2hvc2UgbGF1bmNoZXIgYmVsb25nZWQgdG8gYW5vdGhlciBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZW11bGF0b3JQcm9jZXNzPzogQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBUaGUgZW11bGF0b3IgUElEcyB0aGlzIHJ1biBvd25zLCBlc2NhbGF0ZWQgdG8gd2hlbiB0aGUgY29uc29sZSBhbmQgdGhlIGxhdW5jaGVyJ3MgdHJlZSBraWxsIGxlYXZlIG9uZSBiZWhpbmQuXG4gICAqL1xuICByZWFkb25seSBvd25lZEVtdWxhdG9yUGlkczogcmVhZG9ubHkgbnVtYmVyW107XG59XG5cbi8qKlxuICogQSBob3N0IGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdENvbW1hbmRRdWVyeSB7XG4gIC8qKlxuICBUaGUgZXhlY3V0YWJsZSB0byBydW4uXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSBjb21tYW5kJ3MgYXJndW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZEFyZ3VtZW50czogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBFbXVsYXRvclJlY2xhaW1lckNoZWNrSXNFbXVsYXRvckdvbmVQYXJhbXMge1xuICAvKipcbiAgVGhlIGRldmljZSB0aGUgZW11bGF0b3Igc2VydmVzLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5vbmUgZXZlciBhcHBlYXJlZCBcdTIwMTQgdGhlIFBJRHMgYXJlIHRoZW4gdGhlIG9ubHkgcHJvb2YuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgVGhlIGVtdWxhdG9yIFBJRHMgdGhpcyBydW4gb3ducy5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVkRW11bGF0b3JQaWRzOiByZWFkb25seSBudW1iZXJbXTtcbn1cblxuaW50ZXJmYWNlIEVtdWxhdG9yUmVjbGFpbWVyV2FpdEZvckVtdWxhdG9yU3RvcHBlZFBhcmFtcyB7XG4gIC8qKlxuICBUaGUgZGV2aWNlIHRoZSBlbXVsYXRvciBzZXJ2ZXMsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm9uZSBldmVyIGFwcGVhcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gIFRoZSBlbXVsYXRvciBQSURzIHRoaXMgcnVuIG93bnMuXG4gICAqL1xuICByZWFkb25seSBvd25lZEVtdWxhdG9yUGlkczogcmVhZG9ubHkgbnVtYmVyW107XG5cbiAgLyoqXG4gIEhvdyBsb25nIHRvIHdhaXQgZm9yIHRoZSBlbXVsYXRvciB0byBkaXNhcHBlYXIsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZpbmRzLCBzdG9wcyBhbmQgdmVyaWZpZXMgdGhlIGhhcm5lc3MncyBlbXVsYXRvcnMsIHJlcG9ydGluZyB0aHJvdWdoIHRoZVxuICogY2FsbGVyJ3MgbG9nIHNvIGVhY2ggY2FsbGVyIGtlZXBzIGl0cyBvd24gcHJlZml4LlxuICovXG5leHBvcnQgY2xhc3MgRW11bGF0b3JSZWNsYWltZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlY2xhaW1lciB0aGF0IHJlcG9ydHMgdW5kZXIgdGhlIGNhbGxlcidzIG93biBsb2cgcHJlZml4LlxuICAgKlxuICAgKiBAcGFyYW0gbG9nIC0gUmVjZWl2ZXMgZXZlcnkgcHJvZ3Jlc3MgYW5kIHZlcmRpY3QgbGluZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihsb2c6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICB0aGlzLmxvZyA9IGxvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGBhZGIgZGV2aWNlc2AgYW5kIHJldHVybnMgaXRzIHJhdyBzdGRvdXQuXG4gICAqXG4gICAqIFRoZSByYXcgbGlzdGluZyBpcyB3aGF0IHRlYXJkb3duIG5lZWRzOiBgZ2V0Q29ubmVjdGVkRGV2aWNlSWRzYCBrZWVwcyBvbmx5XG4gICAqIHRoZSBgZGV2aWNlYCBzdGF0ZSwgYW5kIGFuIGVtdWxhdG9yIG9uIGl0cyB3YXkgb3V0IGFuc3dlcnMgYG9mZmxpbmVgIHdoaWxlXG4gICAqIHN0aWxsIGhvbGRpbmcgdGhlIEFWRCBcdTIwMTQgc2VlIGBhZGItZGV2aWNlLWxpc3QudHNgLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmF3IGBhZGIgZGV2aWNlc2Agb3V0cHV0LlxuICAgKiBAdGhyb3dzIElmIGFkYiBjb3VsZCBub3QgYmUgcnVuIGF0IGFsbC5cbiAgICovXG4gIHB1YmxpYyBnZXREZXZpY2VzT3V0cHV0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZXhlY0ZpbGUoJ2FkYicsIFsnZGV2aWNlcyddLCB7IHRpbWVvdXQ6IEFEQl9ERVZJQ0VfQ0hFQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gcnVuICdhZGIgZGV2aWNlcyc6ICR7ZXJyb3IubWVzc2FnZX0uIElzIEFEQiBpbnN0YWxsZWQgYW5kIGluIFBBVEg/YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2coYEFEQiBzdGRlcnI6ICR7c3RkZXJyLnRyaW0oKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBldmVyeSBwcm9jZXNzIG9uIHRoZSBob3N0LlxuICAgKlxuICAgKiBBIGhvc3QgYWx3YXlzIGhhcyBwcm9jZXNzZXMsIHNvIGEgbGlzdGluZyB0aGF0IHBhcnNlcyB0byAqKnplcm8qKiByb3dzIGlzIGFcbiAgICogZmFpbGVkIHF1ZXJ5IGhvd2V2ZXIgaXQgZXhpdGVkLCBhbmQgY29tZXMgYmFjayBhcyBgdW5kZWZpbmVkYCBleGFjdGx5IGxpa2VcbiAgICogb25lIHRoYXQgZGlkIG5vdCBydW4gXHUyMDE0IG5ldmVyIGFzIGFuIGVtcHR5IGxpc3QgYSBjYWxsZXIgY291bGQgcmVhZCBhcyBcIm5vXG4gICAqIGVtdWxhdG9yIGlzIHJ1bm5pbmdcIi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGhvc3QncyBwcm9jZXNzZXMsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIGxpc3RpbmcgZmFpbGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHF1ZXJ5SG9zdFByb2Nlc3NlcygpOiBQcm9taXNlPFByb2Nlc3NMaXN0RW50cnlbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgIHF1ZXJ5LmNvbW1hbmQsXG4gICAgICAgIHF1ZXJ5LmNvbW1hbmRBcmd1bWVudHMsXG4gICAgICAgIHsgbWF4QnVmZmVyOiBBREJfRFVNUFNZU19NQVhfQlVGRkVSX0lOX0JZVEVTLCB0aW1lb3V0OiBIT1NUX1BST0NFU1NfUVVFUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSxcbiAgICAgICAgKGVycm9yLCBzdGRvdXQpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKGBXYXJuaW5nOiBjb3VsZCBub3QgbGlzdCBob3N0IHByb2Nlc3NlcyAoXFxgJHtxdWVyeS5jb21tYW5kfVxcYCk6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShlcnJvciA/ICcnIDogc3Rkb3V0KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2Nlc3NlcyA9IHBhcnNlSG9zdFByb2Nlc3NMaXN0KG91dHB1dCk7XG4gICAgaWYgKHByb2Nlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubG9nKGBXYXJuaW5nOiBcXGAke3F1ZXJ5LmNvbW1hbmR9XFxgIGxpc3RlZCBubyBwcm9jZXNzZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZXM7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIGVtdWxhdG9ycyB0aGlzIGhhcm5lc3Mgc3RhcnRlZCB0aGF0IG5vIGxpdmUgcnVuIGlzIHJlc3BvbnNpYmxlXG4gICAqIGZvciwgYW5kIGRyb3BzIHRoZSBtYXJrZXJzIHRoYXQgbm8gbG9uZ2VyIGRlc2NyaWJlIGEgcnVubmluZyBlbXVsYXRvci5cbiAgICpcbiAgICogT25seSBldmVyIGFjdHMgb24gYSAqKm1hcmtlci12ZXJpZmllZCoqIGVtdWxhdG9yOiBvbmUgd2hvc2UgbWFya2VyIG5hbWVzIGFcbiAgICogUElEIHRoYXQgaXMgc3RpbGwgYSBsaXZlIGVtdWxhdG9yIHByb2Nlc3MuIEFuIGVtdWxhdG9yIHdpdGhvdXQgYSBtYXJrZXIgXHUyMDE0XG4gICAqIGJvb3RlZCBieSBoYW5kLCBieSBDSSwgb3IgYnkgYW5vdGhlciB0b29sIFx1MjAxNCBpcyBuZXZlciB0b3VjaGVkLCB3aGljaCBrZWVwc1xuICAgKiB0aGUgTDQ2IGxpbmU6IG5ldmVyIGEgYHFlbXUqYCBzd2VlcC5cbiAgICpcbiAgICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGBhbmRyb2lkYCBzZXR1cCBsb2NrIChMNyksIHdoaWNoIGlzIHdoYXQgbWFrZXMgYVxuICAgKiBsZWZ0b3ZlciBzYWZlIHRvIHN0b3A6IG5vIG90aGVyIEFuZHJvaWQgcnVuIGNhbiBiZSBtaWQtZmxpZ2h0IG9uIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gV2hpY2ggQVZEIHRvIGxlYXZlIGFsb25lLCBhbmQgd2hldGhlciB0aGlzIHJ1biBpcyBlbmRpbmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVjbGFpbUxlZnRvdmVyRW11bGF0b3JzKHBhcmFtczogRW11bGF0b3JSZWNsYWltZXJSZWNsYWltTGVmdG92ZXJFbXVsYXRvcnNQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gbGlzdEVtdWxhdG9yTWFya2VycygpLmZpbHRlcigobWFya2VyKSA9PiBtYXJrZXIuYXZkTmFtZSAhPT0gcGFyYW1zLmV4Y2VwdEF2ZE5hbWUpO1xuICAgIGlmIChtYXJrZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlcyA9IGF3YWl0IHRoaXMucXVlcnlIb3N0UHJvY2Vzc2VzKCk7XG4gICAgaWYgKHByb2Nlc3NlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBXaXRob3V0IGEgbGlzdGluZyBldmVyeSBtYXJrZXIgd291bGQgcmVhZCBhcyBzdGFsZSwgYW5kIGRlbGV0aW5nIHRoZW0gd291bGQgbGVhdmUgdGhlIGxlZnRvdmVycyBpbXBvc3NpYmxlIHRvIGNvbnZpY3QuXG4gICAgICB0aGlzLmxvZyhgQ2Fubm90IGp1ZGdlICR7U3RyaW5nKG1hcmtlcnMubGVuZ3RoKX0gZW11bGF0b3IgbWFya2VyKHMpIHdpdGhvdXQgYSBob3N0IHByb2Nlc3MgbGlzdGluZzsgbGVhdmluZyB0aGVtIGZvciBhIGxhdGVyIHJ1bi5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaXZlRW11bGF0b3JQaWRzID0gc2VsZWN0RW11bGF0b3JCYWNrZW5kUGlkcyh7IGtub3duUGlkczogW10sIHByb2Nlc3NlcyB9KTtcbiAgICBmb3IgKGNvbnN0IG1hcmtlciBvZiBtYXJrZXJzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlY2xhaW1MZWZ0b3ZlckVtdWxhdG9yKG1hcmtlciwgbGl2ZUVtdWxhdG9yUGlkcywgcGFyYW1zLnNjb3BlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgYW4gZW11bGF0b3IgdGhpcyBoYXJuZXNzIG93bnMsIGFuZCAqKnZlcmlmaWVzKiogaXQgc3RvcHBlZC5cbiAgICpcbiAgICogVGhlIGNvbnNvbGUgc2h1dGRvd24gZ29lcyBmaXJzdCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHBhdGggdGhhdCByZWxlYXNlc1xuICAgKiB0aGUgQVZEJ3MgYG11bHRpaW5zdGFuY2UubG9ja2A7IGEgYHRhc2traWxsYCBsZWF2ZXMgdGhlIGxvY2sgYmVoaW5kLCBhbmQgYVxuICAgKiBzdGFsZSBsb2NrIGlzIHdoYXQgbWFrZXMgdGhlIG5leHQgcnVuIGZhaWwgd2l0aCBgUnVubmluZyBtdWx0aXBsZSBlbXVsYXRvcnNcbiAgICogd2l0aCB0aGUgc2FtZSBBVkRgIFx1MjAxNCBhIEZBVEFMIHRoZSBlbXVsYXRvciB3cml0ZXMgdG8gaXRzIG93biBzdGRvdXQsIHdoZXJlXG4gICAqIG5vYm9keSBzZWVzIGl0LlxuICAgKlxuICAgKiBXb3JrcyB3aXRob3V0IGEgbGF1bmNoZXIgaGFuZGxlIHRvbzogYSBsZWZ0b3ZlciB0aGlzIHJ1biB0b29rIG92ZXIgaGFzIG9ubHlcbiAgICogaXRzIFBJRHMsIHdoaWNoIGlzIGFsbCB0aGUgZXNjYWxhdGlvbiBiZWxvdyBldmVyIG5lZWRlZC4gVGhlIG1hcmtlciBnb2VzXG4gICAqIG9ubHkgd2l0aCBhICoqdmVyaWZpZWQqKiBzdG9wLCBzbyBhbiBlbXVsYXRvciB0aGF0IG91dGxpdmVkIHRoaXMgYXR0ZW1wdFxuICAgKiBzdGF5cyBjb252aWN0YWJsZSBieSB0aGUgbmV4dCBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZW11bGF0b3IgcHJvY2VzcywgdGhlIGRldmljZSBpdCBzZXJ2ZXMgYW5kIHRoZSBQSURzIHRoaXMgcnVuIG93bnMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3RvcEVtdWxhdG9yKHBhcmFtczogRW11bGF0b3JSZWNsYWltZXJTdG9wRW11bGF0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLmRldmljZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMua2lsbEVtdWxhdG9yQ29uc29sZShwYXJhbXMuZGV2aWNlSWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmVtdWxhdG9yUHJvY2Vzcykge1xuICAgICAga2lsbFByb2Nlc3NUcmVlKHBhcmFtcy5lbXVsYXRvclByb2Nlc3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHdhaXRQYXJhbXM6IEVtdWxhdG9yUmVjbGFpbWVyV2FpdEZvckVtdWxhdG9yU3RvcHBlZFBhcmFtcyA9IHtcbiAgICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQsXG4gICAgICBvd25lZEVtdWxhdG9yUGlkczogcGFyYW1zLm93bmVkRW11bGF0b3JQaWRzLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBFTVVMQVRPUl9TVE9QX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gICAgfTtcblxuICAgIGxldCBoYXNFc2NhbGF0ZWQgPSBmYWxzZTtcbiAgICBsZXQgaXNTdG9wcGVkID0gYXdhaXQgdGhpcy53YWl0Rm9yRW11bGF0b3JTdG9wcGVkKHdhaXRQYXJhbXMpO1xuXG4gICAgaWYgKCFpc1N0b3BwZWQpIHtcbiAgICAgIGNvbnN0IHN1cnZpdmluZ1BpZHMgPSBwYXJhbXMub3duZWRFbXVsYXRvclBpZHMuZmlsdGVyKChwaWQpID0+IGNoZWNrSXNQcm9jZXNzQWxpdmUocGlkKSk7XG4gICAgICBpZiAoc3Vydml2aW5nUGlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGhhc0VzY2FsYXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIGBBdXRvLXN0YXJ0ZWQgZW11bGF0b3Igb3V0bGl2ZWQgaXRzIGNvbnNvbGUgc2h1dGRvd24gYW5kIHRoZSBsYXVuY2hlcidzIHByb2Nlc3MgdHJlZTsgZXNjYWxhdGluZyB0byB0aGUgZW11bGF0b3IgUElEKHMpIHRoaXMgcnVuIG93bnM6IFske3N1cnZpdmluZ1BpZHMuam9pbignLCAnKX1dLmBcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwaWQgb2Ygc3Vydml2aW5nUGlkcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZUJ5UGlkKHBpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNTdG9wcGVkID0gYXdhaXQgdGhpcy53YWl0Rm9yRW11bGF0b3JTdG9wcGVkKHsgLi4ud2FpdFBhcmFtcywgdGltZW91dEluTWlsbGlzZWNvbmRzOiBFTVVMQVRPUl9FU0NBTEFURURfU1RPUF9USU1FT1VUX0lOX01JTExJU0VDT05EUyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvZyhidWlsZFRlYXJkb3duTWVzc2FnZSh7XG4gICAgICBldmlkZW5jZTogcGFyYW1zLmRldmljZUlkID09PSB1bmRlZmluZWQgPyBgQVZEIFwiJHtwYXJhbXMuYXZkTmFtZX1cImAgOiBgQVZEIFwiJHtwYXJhbXMuYXZkTmFtZX1cIiBvbiBkZXZpY2UgJHtwYXJhbXMuZGV2aWNlSWR9YCxcbiAgICAgIG91dGNvbWU6IHJlc29sdmVUZWFyZG93bk91dGNvbWUoeyBoYXNFc2NhbGF0ZWQsIGlzU3RvcHBlZCB9KSxcbiAgICAgIHN1YmplY3Q6ICdBdXRvLXN0YXJ0ZWQgZW11bGF0b3InLFxuICAgICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBFTVVMQVRPUl9TVE9QX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTXG4gICAgfSkpO1xuXG4gICAgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgY2xlYXJFbXVsYXRvck1hcmtlcklmU3RvcHBlZChwYXJhbXMuYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZXMgd2hldGhlciB0aGUgZW11bGF0b3IgdGhpcyBydW4gc3RhcnRlZCBpcyByZWFsbHkgZ29uZS5cbiAgICpcbiAgICogVHdvIGluZGVwZW5kZW50IHByb29mcywgY2hlYXBlc3QgZmlyc3Q6IG5vbmUgb2YgdGhlIFBJRHMgdGhpcyBydW4gb3ducyBpc1xuICAgKiBhbGl2ZSwgYW5kIHRoZSBkZXZpY2Ugbm8gbG9uZ2VyIGFwcGVhcnMgaW4gYGFkYiBkZXZpY2VzYCAqKmluIGFueSBzdGF0ZSoqIChhXG4gICAqIGR5aW5nIGVtdWxhdG9yIGFuc3dlcnMgYG9mZmxpbmVgIHdoaWxlIGl0IHN0aWxsIGhvbGRzIHRoZSBBVkQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSBhbmQgdGhlIFBJRHMgdGhpcyBydW4gb3ducy5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gbm90aGluZyBvZiB0aGlzIHJ1bidzIGVtdWxhdG9yIGlzIGxlZnQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrSXNFbXVsYXRvckdvbmUocGFyYW1zOiBFbXVsYXRvclJlY2xhaW1lckNoZWNrSXNFbXVsYXRvckdvbmVQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLm93bmVkRW11bGF0b3JQaWRzLnNvbWUoKHBpZCkgPT4gY2hlY2tJc1Byb2Nlc3NBbGl2ZShwaWQpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZGV2aWNlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhY2hlY2tJc0RldmljZUxpc3RlZCh7IGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQsIGRldmljZXNPdXRwdXQ6IGF3YWl0IHRoaXMuZ2V0RGV2aWNlc091dHB1dCgpIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvKlxuICAgICAgICogQW4gYWRiIHRoYXQgY2Fubm90IHJ1biBpcyBub3QgZXZpZGVuY2UgYWJvdXQgdGhlIGVtdWxhdG9yIFx1MjAxNCBhbmQgdGhlIFBJRFxuICAgICAgICogcHJvYmUgYWJvdmUgaGFzIGFscmVhZHkgc2FpZCB0aGlzIHJ1bidzIHByb2Nlc3NlcyBhcmUgZ29uZSwgd2hpY2ggaXMgdGhlXG4gICAgICAgKiBzdHJvbmdlciBvZiB0aGUgdHdvIHByb29mcy5cbiAgICAgICAqL1xuICAgICAgdGhpcy5sb2coYENvdWxkIG5vdCByZS1jaGVjayBjb25uZWN0ZWQgZGV2aWNlcyB3aGlsZSBzdG9wcGluZyB0aGUgZW11bGF0b3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFza3MgdGhlIGVtdWxhdG9yIHRvIHNodXQgaXRzZWxmIGRvd24gb3ZlciBpdHMgY29uc29sZS5cbiAgICpcbiAgICogUHJlZmVycmVkIG92ZXIga2lsbGluZyB0aGUgcHJvY2VzcyBvdXRyaWdodCBiZWNhdXNlIGl0IGlzIHRoZSBwYXRoIHRoYXRcbiAgICogcmVsZWFzZXMgdGhlIEFWRCdzIGBtdWx0aWluc3RhbmNlLmxvY2tgLiBCZXN0LWVmZm9ydDogYSBjb25zb2xlIHRoYXQgZG9lc1xuICAgKiBub3QgYW5zd2VyIGlzIHJlcG9ydGVkIGFuZCB0aGUgY2FsbGVyIGZhbGxzIHRocm91Z2ggdG8gdGhlIGtpbGwuXG4gICAqXG4gICAqIEBwYXJhbSBkZXZpY2VJZCAtIFRoZSBlbXVsYXRvcidzIGRldmljZSBJRC5cbiAgICovXG4gIHByaXZhdGUga2lsbEVtdWxhdG9yQ29uc29sZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWyctcycsIGRldmljZUlkLCAnZW11JywgJ2tpbGwnXSwgeyB0aW1lb3V0OiBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTIH0sIChlcnJvciwgc3Rkb3V0KSA9PiB7XG4gICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICA/IGBFbXVsYXRvciBjb25zb2xlIHNodXRkb3duIGZvciAke2RldmljZUlkfSBkaWQgbm90IGFuc3dlcjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICAgIDogYEVtdWxhdG9yIGNvbnNvbGUgc2h1dGRvd24gZm9yICR7ZGV2aWNlSWR9OiAke3N0ZG91dC50cmltKCl9YFxuICAgICAgICApO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RzIG9uIG9uZSBlbXVsYXRvciBtYXJrZXIgZm9yIHtAbGluayByZWNsYWltTGVmdG92ZXJFbXVsYXRvcnN9LlxuICAgKlxuICAgKiBAcGFyYW0gbWFya2VyIC0gVGhlIG1hcmtlciB0byBqdWRnZS5cbiAgICogQHBhcmFtIGxpdmVFbXVsYXRvclBpZHMgLSBUaGUgZW11bGF0b3IgcHJvY2Vzc2VzIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBob3N0LlxuICAgKiBAcGFyYW0gc2NvcGUgLSBXaGV0aGVyIGFuIGVtdWxhdG9yIGFub3RoZXIgbGl2ZSBoYXJuZXNzIHByb2Nlc3Mgb3ducyBpcyBzcGFyZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlY2xhaW1MZWZ0b3ZlckVtdWxhdG9yKG1hcmtlcjogRW11bGF0b3JNYXJrZXIsIGxpdmVFbXVsYXRvclBpZHM6IHJlYWRvbmx5IG51bWJlcltdLCBzY29wZTogRW11bGF0b3JSZWNsYWltZXJSZWNsYWltTGVmdG92ZXJFbXVsYXRvcnNQYXJhbXNbJ3Njb3BlJ10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2ZXJkaWN0ID0gcmVzb2x2ZUVtdWxhdG9yTWFya2VyVmVyZGljdCh7XG4gICAgICBjdXJyZW50UGlkOiBwcm9jZXNzLnBpZCxcbiAgICAgIGlzT3duZXJBbGl2ZTogY2hlY2tJc1Byb2Nlc3NBbGl2ZShtYXJrZXIub3duZXJQaWQpLFxuICAgICAgbGl2ZUVtdWxhdG9yUGlkcyxcbiAgICAgIG1hcmtlclxuICAgIH0pO1xuXG4gICAgaWYgKHZlcmRpY3QgPT09ICdzdGFsZS1tYXJrZXInKSB7XG4gICAgICB0aGlzLmxvZyhgRHJvcHBpbmcgdGhlIGVtdWxhdG9yIG1hcmtlciBmb3IgQVZEIFwiJHttYXJrZXIuYXZkTmFtZX1cIjogbm9uZSBvZiBpdHMgUElEcyBbJHttYXJrZXIub3duZWRFbXVsYXRvclBpZHMuam9pbignLCAnKX1dIGlzIGEgcnVubmluZyBlbXVsYXRvciBhbnkgbW9yZS5gKTtcbiAgICAgIGNsZWFyRW11bGF0b3JNYXJrZXIobWFya2VyLmF2ZE5hbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogQSBtYXJrZXIgd3JpdHRlbiBhdCBsYXVuY2ggaGFzIG5vIGRldmljZSB5ZXQ6IHRoZSBlbXVsYXRvciB3YXMgc3RpbGxcbiAgICAgKiBib290aW5nIHdoZW4gd2hhdGV2ZXIgcmVjb3JkZWQgaXQgc3RvcHBlZCBsb29raW5nLiBUaGUgc3RvcCBiZWxvdyByZWFkc1xuICAgICAqIHRoYXQgYWJzZW5jZSBjb3JyZWN0bHkgXHUyMDE0IG5vIGNvbnNvbGUgdG8gc2h1dCBkb3duLCB0aGUgb3duZWQgUElEcyBhcmUgdGhlXG4gICAgICogd2hvbGUgb2YgdGhlIGV2aWRlbmNlIFx1MjAxNCBzbyBpdCBpcyBkZXNjcmliZWQgcmF0aGVyIHRoYW4gcGFwZXJlZCBvdmVyLlxuICAgICAqL1xuICAgIGNvbnN0IGV2aWRlbmNlID0gZGVzY3JpYmVNYXJrZWRFbXVsYXRvcihtYXJrZXIpO1xuXG4gICAgaWYgKHZlcmRpY3QgPT09ICdpbi11c2UtYnktbGl2ZS1ydW4nICYmIHNjb3BlID09PSAncHJlZmxpZ2h0Jykge1xuICAgICAgdGhpcy5sb2coYExlYXZpbmcgdGhlIGVtdWxhdG9yIGZvciAke2V2aWRlbmNlfSBhbG9uZTogdGhlIGhhcm5lc3MgcHJvY2VzcyB0aGF0IG93bnMgaXQgKFBJRCAke1N0cmluZyhtYXJrZXIub3duZXJQaWQpfSkgaXMgc3RpbGwgcnVubmluZy5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VJblNlY29uZHMgPSBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gbWFya2VyLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSAvIE1JTExJU0VDT05EU19QRVJfU0VDT05EKTtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBTdG9wcGluZyB0aGUgZW11bGF0b3IgZm9yICR7ZXZpZGVuY2V9OiB0aGlzIGhhcm5lc3Mgc3RhcnRlZCBpdCAke1N0cmluZyhhZ2VJblNlY29uZHMpfXMgYWdvLCBhbmQgbm8gbGl2ZSBydW4gaXMgbGVmdCB0byBzdG9wIGl0LmBcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuc3RvcEVtdWxhdG9yKHtcbiAgICAgIGF2ZE5hbWU6IG1hcmtlci5hdmROYW1lLFxuICAgICAgZGV2aWNlSWQ6IG1hcmtlci5kZXZpY2VJZCxcbiAgICAgIG93bmVkRW11bGF0b3JQaWRzOiBzZWxlY3RMaXZlTWFya2VkUGlkcyhtYXJrZXIsIGxpdmVFbXVsYXRvclBpZHMpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdW50aWwgdGhpcyBydW4ncyBlbXVsYXRvciBpcyBnb25lLCBvciB0aGUgYnVkZ2V0IGVsYXBzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgUElEcyB0aGlzIHJ1biBvd25zLCBhbmQgdGhlIGJ1ZGdldC5cbiAgICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGVtdWxhdG9yIGRpc2FwcGVhcmVkIHdpdGhpbiB0aGUgYnVkZ2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yRW11bGF0b3JTdG9wcGVkKHBhcmFtczogRW11bGF0b3JSZWNsYWltZXJXYWl0Rm9yRW11bGF0b3JTdG9wcGVkUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgcGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcztcblxuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrSXNFbXVsYXRvckdvbmUocGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dChyZXNvbHZlLCBFTVVMQVRPUl9TVE9QX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcGxhdGZvcm0ncyBcImxpc3QgZXZlcnkgcHJvY2Vzc1wiIHF1ZXJ5LlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8gcnVuLlxuICovXG5mdW5jdGlvbiBidWlsZEhvc3RQcm9jZXNzUXVlcnkoKTogSG9zdENvbW1hbmRRdWVyeSB7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG4gICAgPyB7IGNvbW1hbmQ6ICd0YXNrbGlzdCcsIGNvbW1hbmRBcmd1bWVudHM6IFsnL0ZPJywgJ0NTVicsICcvTkgnXSB9XG4gICAgOiB7IGNvbW1hbmQ6ICdwcycsIGNvbW1hbmRBcmd1bWVudHM6IFsnLWVvJywgJ3BpZD0sY29tbT0nXSB9O1xufVxuXG4vKipcbiAqIE5hbWVzIHRoZSBlbXVsYXRvciBhIG1hcmtlciBkZXNjcmliZXMsIGZvciB0aGUgbG9nLlxuICpcbiAqIEBwYXJhbSBtYXJrZXIgLSBUaGUgbWFya2VyLlxuICogQHJldHVybnMgVGhlIEFWRCBhbmQgaXRzIGRldmljZSwgb3IgdGhlIEFWRCBhbG9uZSBmb3IgYSBsYXVuY2ggdGhhdCBoYWQgbm90IHByb2R1Y2VkIGEgZGV2aWNlIHlldC5cbiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVNYXJrZWRFbXVsYXRvcihtYXJrZXI6IEVtdWxhdG9yTWFya2VyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG1hcmtlci5kZXZpY2VJZCA9PT0gdW5kZWZpbmVkXG4gICAgPyBgQVZEIFwiJHttYXJrZXIuYXZkTmFtZX1cIiAobm8gZGV2aWNlOiBpdCB3YXMgc3RpbGwgYm9vdGluZyB3aGVuIGl0IHdhcyByZWNvcmRlZClgXG4gICAgOiBgQVZEIFwiJHttYXJrZXIuYXZkTmFtZX1cIiBvbiBkZXZpY2UgJHttYXJrZXIuZGV2aWNlSWR9YDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBob3N0IHByb2Nlc3MgbGlzdGluZyB3aXRoIHRoZSBwbGF0Zm9ybSdzIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0gb3V0cHV0IC0gUmF3IHN0ZG91dCBvZiB7QGxpbmsgYnVpbGRIb3N0UHJvY2Vzc1F1ZXJ5fSdzIGNvbW1hbmQuXG4gKiBAcmV0dXJucyBUaGUgbGlzdGVkIHByb2Nlc3Nlcy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VIb3N0UHJvY2Vzc0xpc3Qob3V0cHV0OiBzdHJpbmcpOiBQcm9jZXNzTGlzdEVudHJ5W10ge1xuICByZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHBhcnNlV2luZG93c1Rhc2tMaXN0KG91dHB1dCkgOiBwYXJzZVBvc2l4UHJvY2Vzc0xpc3Qob3V0cHV0KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLGdDQUF5QjtBQUN6QiwwQkFBb0I7QUFLcEIsNkJBQW9DO0FBQ3BDLDhCQUlPO0FBQ1AsNkJBTU87QUFDUCwrQkFHTztBQUNQLDhCQUFvQztBQUNwQyw4QkFHTztBQUtBLE1BQU0sMkNBQTJDO0FBUWpELE1BQU0sa0NBQWtDO0FBU3hDLE1BQU0sNkNB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
|
|
@@ -20,23 +20,10 @@ import type { ProcessListEntry } from './emulator-backend.cjs';
|
|
|
20
20
|
export declare const ADB_DEVICE_CHECK_TIMEOUT_IN_MILLISECONDS = 5000;
|
|
21
21
|
export declare const ADB_DUMPSYS_MAX_BUFFER_IN_BYTES = 8388608;
|
|
22
22
|
export declare const HOST_PROCESS_QUERY_TIMEOUT_IN_MILLISECONDS = 30000;
|
|
23
|
-
/**
|
|
24
|
-
* A host command and its arguments.
|
|
25
|
-
*/
|
|
26
|
-
export interface HostCommandQuery {
|
|
27
|
-
/**
|
|
28
|
-
The executable to run.
|
|
29
|
-
*/
|
|
30
|
-
readonly command: string;
|
|
31
|
-
/**
|
|
32
|
-
The command's arguments.
|
|
33
|
-
*/
|
|
34
|
-
readonly commandArguments: string[];
|
|
35
|
-
}
|
|
36
23
|
/**
|
|
37
24
|
* Parameters for {@link EmulatorReclaimer.reclaimLeftoverEmulators}.
|
|
38
25
|
*/
|
|
39
|
-
export interface
|
|
26
|
+
export interface EmulatorReclaimerReclaimLeftoverEmulatorsParams {
|
|
40
27
|
/**
|
|
41
28
|
An AVD whose leftover is left alone — the one a preflight is about to adopt instead.
|
|
42
29
|
*/
|
|
@@ -53,7 +40,7 @@ export interface ReclaimLeftoverEmulatorsParams {
|
|
|
53
40
|
/**
|
|
54
41
|
* Parameters for {@link EmulatorReclaimer.stopEmulator}.
|
|
55
42
|
*/
|
|
56
|
-
export interface
|
|
43
|
+
export interface EmulatorReclaimerStopEmulatorParams {
|
|
57
44
|
/**
|
|
58
45
|
The AVD name, named in the warning so the leftover is identifiable, and the key of its marker.
|
|
59
46
|
*/
|
|
@@ -74,6 +61,19 @@ export interface StopEmulatorParams {
|
|
|
74
61
|
*/
|
|
75
62
|
readonly ownedEmulatorPids: readonly number[];
|
|
76
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* A host command and its arguments.
|
|
66
|
+
*/
|
|
67
|
+
export interface HostCommandQuery {
|
|
68
|
+
/**
|
|
69
|
+
The executable to run.
|
|
70
|
+
*/
|
|
71
|
+
readonly command: string;
|
|
72
|
+
/**
|
|
73
|
+
The command's arguments.
|
|
74
|
+
*/
|
|
75
|
+
readonly commandArguments: string[];
|
|
76
|
+
}
|
|
77
77
|
/**
|
|
78
78
|
* Finds, stops and verifies the harness's emulators, reporting through the
|
|
79
79
|
* caller's log so each caller keeps its own prefix.
|
|
@@ -122,7 +122,7 @@ export declare class EmulatorReclaimer {
|
|
|
122
122
|
*
|
|
123
123
|
* @param params - Which AVD to leave alone, and whether this run is ending.
|
|
124
124
|
*/
|
|
125
|
-
reclaimLeftoverEmulators(params:
|
|
125
|
+
reclaimLeftoverEmulators(params: EmulatorReclaimerReclaimLeftoverEmulatorsParams): Promise<void>;
|
|
126
126
|
/**
|
|
127
127
|
* Stops an emulator this harness owns, and **verifies** it stopped.
|
|
128
128
|
*
|
|
@@ -139,7 +139,7 @@ export declare class EmulatorReclaimer {
|
|
|
139
139
|
*
|
|
140
140
|
* @param params - The emulator process, the device it serves and the PIDs this run owns.
|
|
141
141
|
*/
|
|
142
|
-
stopEmulator(params:
|
|
142
|
+
stopEmulator(params: EmulatorReclaimerStopEmulatorParams): Promise<void>;
|
|
143
143
|
/**
|
|
144
144
|
* Decides whether the emulator this run started is really gone.
|
|
145
145
|
*
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var eval_cap_exports = {};
|
|
20
|
+
__export(eval_cap_exports, {
|
|
21
|
+
DEFAULT_EVAL_CAP_IN_MILLISECONDS: () => DEFAULT_EVAL_CAP_IN_MILLISECONDS
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(eval_cap_exports);
|
|
24
|
+
const DEFAULT_EVAL_CAP_IN_MILLISECONDS = 3e4;
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
DEFAULT_EVAL_CAP_IN_MILLISECONDS
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtY2FwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHBlci1ldmFsIGNhcDogaG93IGxvbmcgYSBzaW5nbGUgYGV2YWxJbk9ic2lkaWFuYCBjbG9zdXJlIG1heSBydW4gYmVmb3JlXG4gKiB0aGUgdHJhbnNwb3J0IGNhcnJ5aW5nIGl0IGdpdmVzIHVwLlxuICpcbiAqIEl0IGxpdmVzIGluIGl0cyBvd24gbW9kdWxlLCBhbmQgaXMgcmUtZXhwb3J0ZWQgZnJvbSB0aGUgcGFja2FnZSByb290LCBiZWNhdXNlXG4gKiBpdCBpcyB0aGUgc2luZ2xlIG1vc3QgbG9hZC1iZWFyaW5nIG51bWJlciBhIHRlc3QgYXV0aG9yIGhhcyB0byByZXNwZWN0IFx1MjAxNCBhbmRcbiAqIHVudGlsIHRoaXMgbW9kdWxlIGV4aXN0ZWQgdGhlcmUgd2FzIG5vdGhpbmcgdG8gaW1wb3J0LiBCb3RoIHRyYW5zcG9ydHMgaGVsZFxuICogdGhlIHNhbWUgMzBzIHByaXZhdGVseSwgc28gZXZlcnkgY29uc3VtZXIgdGhhdCBuZWVkZWQgdG8gc2l6ZSBhIGNsb3N1cmVcbiAqIHJlc3RhdGVkIGl0IGFzIGEgbGl0ZXJhbCB3aXRoIGEgY29tbWVudCBzYXlpbmcgd2hlcmUgdGhlIG51bWJlciBjYW1lIGZyb20uXG4gKiBUaGF0IGlzIGEgbWlycm9yIG5vdGhpbmcgbWFpbnRhaW5zOiByYWlzZSBhIGNhcCBoZXJlIGFuZCBldmVyeSByZXN0YXRlbWVudCBpc1xuICogc2lsZW50bHkgd3JvbmcgaW4gdGhlIGRpcmVjdGlvbiB0aGF0IHByb2R1Y2VzIHRoZSB1bnJlYWRhYmxlIGZhaWx1cmUsIGJlY2F1c2VcbiAqIHRoZSBjb25zdW1lciBnb2VzIG9uIGJlbGlldmluZyBpdCBoYXMgaGVhZHJvb20gaXQgbm8gbG9uZ2VyIGhhcy5cbiAqXG4gKiAqKlRoZSB0d28gdHJhbnNwb3J0cyBzaGFyZSB0aGlzIE9ORSBjb25zdGFudCByYXRoZXIgdGhhbiBhZ3JlZWluZyBieVxuICogY29pbmNpZGVuY2UuKiogVGhleSBlbmZvcmNlIGl0IHRocm91Z2ggZGlmZmVyZW50IGtub2JzIFx1MjAxNCBkZXNrdG9wIGJvdW5kcyB0aGVcbiAqIGBSdW50aW1lLmV2YWx1YXRlYCBDRFAgY29tbWFuZCAoYGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHNgKSwgQW5kcm9pZFxuICogYm91bmRzIHRoZSBFeGVjdXRlIFNjcmlwdCBjYWxsIE5vZGUtc2lkZSAoYHNjcmlwdFRpbWVvdXRJbk1pbGxpc2Vjb25kc2ApIFx1MjAxNFxuICogYnV0IHRoZSBrbm9icyBhcmUgdHdvIGltcGxlbWVudGF0aW9ucyBvZiBvbmUgcG9saWN5LCBub3QgdHdvIHBvbGljaWVzIHRoYXRcbiAqIGhhcHBlbiB0byBhZ3JlZS4gQSByZWFkZXIgb2YgZWl0aGVyIGRlZmF1bHQgbm93IHNlZXMgd2hpY2ggaXQgaXMuXG4gKi9cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBwZXItZXZhbCBjYXAsIGluIG1pbGxpc2Vjb25kczogdGhlIGJ1ZGdldCBvbmUgYGV2YWxJbk9ic2lkaWFuYFxuICogY2xvc3VyZSBoYXMgdG8gZml0IGluc2lkZS5cbiAqXG4gKiBFdmVyeXRoaW5nIGF3YWl0ZWQgaW5zaWRlIGEgc2luZ2xlIGNsb3N1cmUgc2hhcmVzIHRoaXMgb25lIGJ1ZGdldCBcdTIwMTQgZXZlcnlcbiAqIGBsaWIud2FpdFVudGlsYCB0aW1lb3V0IGFuZCBldmVyeSBzZXR0bGUgYHNsZWVwYCBcdTIwMTQgc28gYSBjbG9zdXJlJ3MgZGVjbGFyZWRcbiAqIHdhaXRzIGhhdmUgdG8gc3VtIHRvIGxlc3MgdGhhbiB0aGlzLCBub3QgbWVyZWx5IGJlIGluZGl2aWR1YWxseSBzaG9ydGVyLlxuICpcbiAqIEFuIG92ZXJydW4gaXMgcmVwb3J0ZWQgYXMgYEV2YWxDYXBFeGNlZWRlZEVycm9yYCwgd2hpY2ggbmFtZXMgdGhlIGNhcCwgdGhlXG4gKiB0cmFuc3BvcnQgdGhhdCBlbmZvcmNlZCBpdCwgYW5kIHRoZSBvcHRpb24gdGhhdCBzZXRzIGl0LiBSYWlzaW5nIHRoYXQgb3B0aW9uXG4gKiBpcyBhbG1vc3QgbmV2ZXIgdGhlIHJpZ2h0IGFuc3dlcjogYSBjbG9zdXJlIHRoYXQgbmVlZHMgdG8gd2FpdCBsb25nZXIgdGhhblxuICogdGhpcyBzaG91bGQgbm90IGJlIHdhaXRpbmcgaW5zaWRlIE9ic2lkaWFuIGF0IGFsbC4gYHBvbGxJbk9ic2lkaWFuYCBpcyB0aGVcbiAqIHNhbmN0aW9uZWQgc2hhcGUgXHUyMDE0IHNob3J0IGNsb3N1cmVzLCB3aXRoIHRoZSB3YWl0aW5nIGRvbmUgZnJvbSBOb2RlIFx1MjAxNCBhbmQgaXRcbiAqIGV4aXN0cyBwcmVjaXNlbHkgc28gbm8gc2luZ2xlIGV2YWwgaXMgZXZlciBsb25nLlxuICpcbiAqIEJvdGggdHJhbnNwb3J0cyBkZWZhdWx0IHRvIHRoaXMgdmFsdWU6IGl0IGlzIHdoYXRcbiAqIGBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMuY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kc2AgYW5kXG4gKiBgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucy5zY3JpcHRUaW1lb3V0SW5NaWxsaXNlY29uZHNgIGZhbGwgYmFja1xuICogdG8gd2hlbiB0aGV5IGFyZSBvbWl0dGVkLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgPSAzMF8wMDA7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMkNPLE1BQU0sbUNBQW1DOyIsCiAgIm5hbWVzIjogW10KfQo=
|