testcafe 1.20.2-alpha.1 → 2.0.0-rc.3
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/lib/api/request-hooks/assert-type.js +2 -2
- package/lib/api/request-hooks/hook.js +2 -2
- package/lib/api/request-hooks/request-logger.js +2 -2
- package/lib/api/skip-js-errors/index.js +62 -0
- package/lib/api/structure/base-unit.js +2 -2
- package/lib/api/structure/fixture.js +13 -13
- package/lib/api/structure/test.js +18 -17
- package/lib/api/structure/testing-unit.js +26 -16
- package/lib/api/test-controller/assertion.js +5 -5
- package/lib/api/test-controller/execution-context.js +2 -2
- package/lib/api/test-controller/index.js +33 -30
- package/lib/api/test-controller/proxy.js +2 -2
- package/lib/api/test-page-url.js +4 -4
- package/lib/api/test-run-tracker.js +2 -2
- package/lib/api/wrap-test-function.js +3 -3
- package/lib/assertions/executor.js +4 -4
- package/lib/assertions/get-fn.js +3 -3
- package/lib/browser/connection/gateway.js +18 -18
- package/lib/browser/connection/get-hints.js +8 -8
- package/lib/browser/connection/index.js +11 -11
- package/lib/browser/connection/remotes-queue.js +4 -4
- package/lib/browser/provider/built-in/dedicated/base.js +6 -6
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +10 -10
- package/lib/browser/provider/built-in/dedicated/chrome/config.js +17 -17
- package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +4 -4
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -6
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +6 -6
- package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +4 -4
- package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +2 -2
- package/lib/browser/provider/built-in/dedicated/firefox/config.js +8 -8
- package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +3 -3
- package/lib/browser/provider/built-in/dedicated/firefox/index.js +5 -5
- package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +2 -2
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +7 -7
- package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +3 -3
- package/lib/browser/provider/built-in/path.js +2 -2
- package/lib/browser/provider/built-in/remote.js +3 -3
- package/lib/browser/provider/index.js +5 -5
- package/lib/browser/provider/plugin-host.js +5 -6
- package/lib/browser/provider/pool.js +4 -4
- package/lib/browser/provider/utils/argument-parsing.js +3 -3
- package/lib/browser/provider/utils/browser-starter.js +2 -2
- package/lib/cli/argument-parser/index.js +52 -41
- package/lib/cli/argument-parser/parse-utils.js +2 -2
- package/lib/cli/authentication-helper.js +3 -3
- package/lib/cli/cli.js +8 -8
- package/lib/cli/correct-browsers-and-sources.js +2 -2
- package/lib/cli/index.js +2 -2
- package/lib/cli/log.js +3 -3
- package/lib/cli/remotes-wizard.js +3 -3
- package/lib/client/automation/index.js +120 -34
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.js +321 -317
- package/lib/client/browser/service-worker.js +244 -290
- package/lib/client/core/deps/hammerhead.js +12 -4
- package/lib/client/core/index.js +145 -55
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/dom.js +33 -28
- package/lib/client/core/utils/position.js +18 -14
- package/lib/client/core/utils/style.js +8 -4
- package/lib/client/driver/command-executors/client-functions/selector-executor/filter.js +5 -5
- package/lib/client/driver/command-executors/client-functions/selector-executor/utils.js +3 -3
- package/lib/client/driver/deps/hammerhead.js +12 -4
- package/lib/client/driver/deps/testcafe-core.js +12 -4
- package/lib/client/driver/deps/testcafe-ui.js +12 -4
- package/lib/client/driver/index.js +654 -630
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/driver/status.js +2 -2
- package/lib/client/ui/index.js +10 -8
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client-functions/builder-symbol.js +1 -2
- package/lib/client-functions/client-function-builder.js +12 -12
- package/lib/client-functions/replicator.js +2 -2
- package/lib/client-functions/selector-api-execution-mode.js +2 -2
- package/lib/client-functions/selectors/add-api.js +48 -48
- package/lib/client-functions/selectors/selector-builder.js +17 -17
- package/lib/compiler/compile-client-function.js +6 -6
- package/lib/compiler/index.js +9 -9
- package/lib/compiler/test-file/api-based.js +8 -8
- package/lib/compiler/test-file/base.js +6 -6
- package/lib/compiler/test-file/exportble-lib-path.js +2 -2
- package/lib/compiler/test-file/formats/coffeescript/compiler.js +2 -2
- package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +2 -2
- package/lib/compiler/test-file/formats/es-next/compiler.js +4 -4
- package/lib/compiler/test-file/formats/es-next/get-test-list.js +4 -4
- package/lib/compiler/test-file/formats/raw.js +2 -2
- package/lib/compiler/test-file/formats/typescript/compiler.js +11 -11
- package/lib/compiler/test-file/formats/typescript/get-test-list.js +3 -3
- package/lib/compiler/test-file/test-file-parser-base.js +3 -3
- package/lib/configuration/configuration-base.js +15 -15
- package/lib/configuration/interfaces.js +1 -1
- package/lib/configuration/skip-js-errors-option-names.js +11 -0
- package/lib/configuration/testcafe-configuration.js +21 -16
- package/lib/configuration/types.js +1 -1
- package/lib/configuration/typescript-configuration.js +4 -4
- package/lib/custom-client-scripts/assert-type.js +2 -2
- package/lib/custom-client-scripts/client-script.js +6 -6
- package/lib/custom-client-scripts/get-code.js +2 -2
- package/lib/custom-client-scripts/routing.js +3 -3
- package/lib/custom-client-scripts/utils.js +3 -3
- package/lib/dashboard/connector.js +4 -4
- package/lib/dashboard/get-default-project-link.js +2 -2
- package/lib/dashboard/index.js +26 -26
- package/lib/errors/create-stack-filter.js +2 -2
- package/lib/errors/error-list.js +2 -2
- package/lib/errors/get-callsite.js +2 -2
- package/lib/errors/is-internal-stack-frame.js +5 -5
- package/lib/errors/process-test-fn-error.js +2 -2
- package/lib/errors/runtime/index.js +10 -10
- package/lib/errors/runtime/templates.js +5 -2
- package/lib/errors/runtime/type-assertions.js +6 -6
- package/lib/errors/stack-cleaning-hook.js +2 -2
- package/lib/errors/test-run/formattable-adapter.js +7 -7
- package/lib/errors/test-run/index.js +25 -5
- package/lib/errors/test-run/render-error-template/index.js +6 -6
- package/lib/errors/test-run/render-error-template/utils.js +2 -2
- package/lib/errors/test-run/templates.js +40 -31
- package/lib/errors/test-run/utils.js +7 -7
- package/lib/errors/types.js +5 -1
- package/lib/index.js +1 -1
- package/lib/live/file-watcher/index.js +2 -2
- package/lib/live/keyboard-observer.js +3 -3
- package/lib/live/test-run-controller.js +3 -3
- package/lib/live/test-run.js +3 -2
- package/lib/live/test-runner.js +2 -2
- package/lib/load-assets.js +2 -2
- package/lib/notifications/add-rendered-warning.js +4 -4
- package/lib/notifications/debug-logger.js +6 -6
- package/lib/notifications/deprecated.js +2 -2
- package/lib/notifications/information-message.js +4 -3
- package/lib/proxyless/resource-injector.js +4 -4
- package/lib/reporter/command/command-formatter.js +4 -4
- package/lib/reporter/index.js +10 -10
- package/lib/reporter/plugin-host.js +7 -7
- package/lib/role/index.js +8 -8
- package/lib/role/role.js +2 -2
- package/lib/runner/bootstrapper.js +20 -20
- package/lib/runner/browser-job.js +3 -3
- package/lib/runner/browser-set.js +12 -12
- package/lib/runner/fixture-hook-controller.js +5 -5
- package/lib/runner/index.js +43 -33
- package/lib/runner/task/index.js +10 -6
- package/lib/runner/test-run-hook-controller.js +5 -5
- package/lib/runner/tested-app.js +7 -7
- package/lib/screenshots/capturer.js +17 -17
- package/lib/screenshots/crop.js +8 -8
- package/lib/screenshots/index.js +6 -10
- package/lib/screenshots/utils.js +4 -4
- package/lib/services/compiler/host.js +8 -8
- package/lib/services/compiler/service.js +13 -13
- package/lib/services/compiler/test-run-proxy.js +8 -8
- package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +2 -2
- package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +2 -1
- package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +3 -3
- package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +2 -2
- package/lib/services/serialization/test-structure.js +4 -4
- package/lib/services/utils/ipc/interfaces.js +1 -3
- package/lib/services/utils/ipc/io.js +3 -3
- package/lib/services/utils/ipc/message.js +2 -2
- package/lib/services/utils/ipc/proxy.js +4 -4
- package/lib/services/utils/ipc/transport.js +2 -2
- package/lib/shared/errors/index.js +9 -2
- package/lib/shared/errors/selector-error-ctor-callback.js +7 -3
- package/lib/test-run/bookmark.js +1 -1
- package/lib/test-run/browser-manipulation-queue.js +3 -3
- package/lib/test-run/commands/actions.js +66 -46
- package/lib/test-run/commands/assertion.js +3 -3
- package/lib/test-run/commands/base.js +2 -2
- package/lib/test-run/commands/browser-manipulation.js +8 -8
- package/lib/test-run/commands/observation.js +4 -4
- package/lib/test-run/commands/options.js +27 -12
- package/lib/test-run/commands/type.js +2 -1
- package/lib/test-run/commands/utils.js +3 -2
- package/lib/test-run/commands/validations/argument.js +19 -10
- package/lib/test-run/commands/validations/factories.js +10 -2
- package/lib/test-run/commands/validations/initializers.js +4 -4
- package/lib/test-run/debug-log.js +4 -4
- package/lib/test-run/execute-js-expression/index.js +4 -4
- package/lib/test-run/index.js +48 -41
- package/lib/test-run/request/create-request-options.js +9 -9
- package/lib/test-run/request/process-response-data.js +2 -2
- package/lib/test-run/request/send.js +5 -5
- package/lib/testcafe.js +8 -4
- package/lib/utils/check-file-path.js +2 -2
- package/lib/utils/check-url.js +2 -2
- package/lib/utils/correct-file-path.js +4 -4
- package/lib/utils/delegated-api.js +1 -1
- package/lib/utils/detect-ffmpeg.js +3 -3
- package/lib/utils/diff/colors.js +2 -2
- package/lib/utils/diff/index.js +11 -7
- package/lib/utils/diff/util.js +5 -5
- package/lib/utils/diff.js +4 -4
- package/lib/utils/escape-user-agent.js +2 -2
- package/lib/utils/execute-fn-with-timeout.js +2 -2
- package/lib/utils/get-browser.js +2 -2
- package/lib/utils/get-filter-fn.js +4 -4
- package/lib/utils/get-options/base.js +2 -2
- package/lib/utils/get-options/compiler.js +2 -2
- package/lib/utils/get-options/dashboard.js +2 -2
- package/lib/utils/get-options/get-assertion-timeout.js +1 -1
- package/lib/utils/get-options/index.js +4 -2
- package/lib/utils/get-options/meta.js +2 -2
- package/lib/utils/get-options/quarantine.js +8 -6
- package/lib/utils/get-options/screenshot.js +2 -2
- package/lib/utils/get-options/skip-js-errors.js +35 -0
- package/lib/utils/get-options/ssl.js +6 -6
- package/lib/utils/get-options/video.js +2 -2
- package/lib/utils/is-password-input.js +1 -1
- package/lib/utils/log-entry.js +2 -2
- package/lib/utils/make-reg-exp.js +19 -6
- package/lib/utils/moment-loader.js +2 -2
- package/lib/utils/parse-file-list.js +7 -7
- package/lib/utils/path-pattern.js +4 -4
- package/lib/utils/prepare-reporters.js +2 -2
- package/lib/utils/prerender-callsite.js +6 -6
- package/lib/utils/process.js +7 -7
- package/lib/utils/promisified-functions.js +14 -14
- package/lib/utils/raw-command-callsite-record.js +2 -2
- package/lib/utils/resolve-path-relatively-cwd.js +2 -2
- package/lib/utils/string.js +3 -3
- package/lib/utils/temp-directory/cleanup-process/index.js +6 -6
- package/lib/utils/temp-directory/cleanup-process/worker.js +4 -4
- package/lib/utils/temp-directory/index.js +6 -6
- package/lib/utils/temp-directory/lockfile.js +2 -2
- package/lib/video-recorder/process.js +6 -6
- package/lib/video-recorder/recorder.js +9 -9
- package/lib/video-recorder/test-run-video-recorder.js +2 -2
- package/package.json +8 -7
- package/ts-defs/index.d.ts +46 -7
- package/ts-defs/selectors.d.ts +39 -0
- package/ts-defs/testcafe-scripts.d.ts +39 -0
|
@@ -45,10 +45,10 @@ class FixtureHookController {
|
|
|
45
45
|
return true;
|
|
46
46
|
item.runningFixtureBeforeHook = true;
|
|
47
47
|
try {
|
|
48
|
-
await execute_fn_with_timeout_1.default(fn, testRun.executionTimeout, item.fixtureCtx);
|
|
48
|
+
await (0, execute_fn_with_timeout_1.default)(fn, testRun.executionTimeout, item.fixtureCtx);
|
|
49
49
|
}
|
|
50
50
|
catch (err) {
|
|
51
|
-
item.fixtureBeforeHookErr = process_test_fn_error_1.default(err);
|
|
51
|
+
item.fixtureBeforeHookErr = (0, process_test_fn_error_1.default)(err);
|
|
52
52
|
}
|
|
53
53
|
item.runningFixtureBeforeHook = false;
|
|
54
54
|
return !item.fixtureBeforeHookErr;
|
|
@@ -58,10 +58,10 @@ class FixtureHookController {
|
|
|
58
58
|
return;
|
|
59
59
|
testRun.phase = phase_1.default.inFixtureAfterHook;
|
|
60
60
|
try {
|
|
61
|
-
await execute_fn_with_timeout_1.default(fn, testRun.executionTimeout, item.fixtureCtx);
|
|
61
|
+
await (0, execute_fn_with_timeout_1.default)(fn, testRun.executionTimeout, item.fixtureCtx);
|
|
62
62
|
}
|
|
63
63
|
catch (err) {
|
|
64
|
-
testRun.addError(process_test_fn_error_1.default(err));
|
|
64
|
+
testRun.addError((0, process_test_fn_error_1.default)(err));
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
async runFixtureBeforeHookIfNecessary(testRun) {
|
|
@@ -104,4 +104,4 @@ class FixtureHookController {
|
|
|
104
104
|
}
|
|
105
105
|
exports.default = FixtureHookController;
|
|
106
106
|
module.exports = exports.default;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1ob29rLWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2ZpeHR1cmUtaG9vay1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQStDO0FBQy9DLDRGQUFpRTtBQUlqRSwrRkFBb0U7QUFVcEUsTUFBcUIscUJBQXFCO0lBR3RDLFlBQW9CLEtBQWEsRUFBRSxzQkFBOEI7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUFFLFVBQXNDLEVBQUUsT0FBZ0I7UUFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUc7Z0JBQ1QsT0FBTyxFQUFtQixLQUFLO2dCQUMvQix3QkFBd0IsRUFBRSxLQUFLO2dCQUMvQixvQkFBb0IsRUFBTSxJQUFJO2dCQUM5QixtQkFBbUIsRUFBTyxDQUFDO2dCQUMzQixVQUFVLEVBQWdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2hELENBQUM7WUFFRixVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQUUsS0FBYSxFQUFFLHNCQUE4QjtRQUMzRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWixxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsT0FBa0IsQ0FBQyxDQUFDO2dCQUU1RSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVyQyxJQUFJLENBQUMsbUJBQW1CLElBQUksc0JBQXNCLENBQUM7YUFDdEQ7WUFFRCxPQUFPLFVBQVUsQ0FBQztRQUN0QixDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxrQkFBa0IsQ0FBRSxJQUFVO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBa0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxhQUFhLENBQUUsSUFBVTtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUNuRCxDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUFFLElBQWtCLEVBQUUsRUFBWSxFQUFFLE9BQWdCO1FBQ25GLElBQUksQ0FBQyxFQUFFO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFFaEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUVyQyxJQUFJO1lBQ0EsTUFBTSxpQ0FBb0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3RTtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLCtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUV0QyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3RDLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUUsSUFBa0IsRUFBRSxFQUFtQixFQUFFLE9BQWdCO1FBQ3pGLElBQUksQ0FBQyxFQUFFO1lBQ0gsT0FBTztRQUVYLE9BQU8sQ0FBQyxLQUFLLEdBQUcsZUFBYyxDQUFDLGtCQUFrQixDQUFDO1FBRWxELElBQUk7WUFDQSxNQUFNLGlDQUFvQixDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdFO1FBQ0QsT0FBTyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsUUFBUSxDQUFDLCtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLCtCQUErQixDQUFFLE9BQWdCO1FBQzFELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBa0IsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRELElBQUksSUFBSSxFQUFFO1lBQ04sTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsTUFBTSxPQUFPLEdBQUcsbUJBQW1CO21CQUNoQixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQTBCLEVBQUUsT0FBTyxDQUFDO21CQUNuRixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFakcsbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUN2QyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWMsQ0FBQyxtQkFBbUIsQ0FBQztnQkFFbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFFNUMsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFFRCxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLDhCQUE4QixDQUFFLE9BQWdCOztRQUN6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQWtCLENBQUM7UUFDaEQsTUFBTSxJQUFJLEdBQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSTtZQUNMLE9BQU87UUFFWCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxDQUFDO1lBQzlCLE9BQU87UUFFWCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV0RSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsYUFBTSxPQUFPLENBQUMsZUFBZSwwQ0FBRSwwQkFBMEIsQ0FBQztnQkFDdEQsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUMzQixFQUFDLENBQUM7U0FDTjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDSjtBQWxJRCx3Q0FrSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVEVTVF9SVU5fUEhBU0UgZnJvbSAnLi4vdGVzdC1ydW4vcGhhc2UnO1xuaW1wb3J0IHByb2Nlc3NUZXN0Rm5FcnJvciBmcm9tICcuLi9lcnJvcnMvcHJvY2Vzcy10ZXN0LWZuLWVycm9yJztcbmltcG9ydCBUZXN0IGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdCc7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuLi9hcGkvc3RydWN0dXJlL2ZpeHR1cmUnO1xuaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vdGVzdC1ydW4nO1xuaW1wb3J0IGV4ZWN1dGVGbldpdGhUaW1lb3V0IGZyb20gJy4uL3V0aWxzL2V4ZWN1dGUtZm4td2l0aC10aW1lb3V0JztcblxuaW50ZXJmYWNlIEZpeHR1cmVTdGF0ZSB7XG4gICAgc3RhcnRlZDogYm9vbGVhbjtcbiAgICBydW5uaW5nRml4dHVyZUJlZm9yZUhvb2s6IGJvb2xlYW47XG4gICAgZml4dHVyZUJlZm9yZUhvb2tFcnI6IG51bGwgfCBFcnJvcjtcbiAgICBwZW5kaW5nVGVzdFJ1bkNvdW50OiBudW1iZXI7XG4gICAgZml4dHVyZUN0eDogb2JqZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaXh0dXJlSG9va0NvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZpeHR1cmVNYXA6IE1hcDxGaXh0dXJlLCBGaXh0dXJlU3RhdGU+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0czogVGVzdFtdLCBicm93c2VyQ29ubmVjdGlvbkNvdW50OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZml4dHVyZU1hcCA9IEZpeHR1cmVIb29rQ29udHJvbGxlci5fY3JlYXRlRml4dHVyZU1hcCh0ZXN0cywgYnJvd3NlckNvbm5lY3Rpb25Db3VudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2Vuc3VyZUZpeHR1cmVNYXBJdGVtIChmaXh0dXJlTWFwOiBNYXA8Rml4dHVyZSwgRml4dHVyZVN0YXRlPiwgZml4dHVyZTogRml4dHVyZSk6IHZvaWQge1xuICAgICAgICBpZiAoIWZpeHR1cmVNYXAuaGFzKGZpeHR1cmUpKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0ZWQ6ICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgcnVubmluZ0ZpeHR1cmVCZWZvcmVIb29rOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaXh0dXJlQmVmb3JlSG9va0VycjogICAgIG51bGwsXG4gICAgICAgICAgICAgICAgcGVuZGluZ1Rlc3RSdW5Db3VudDogICAgICAwLFxuICAgICAgICAgICAgICAgIGZpeHR1cmVDdHg6ICAgICAgICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZpeHR1cmVNYXAuc2V0KGZpeHR1cmUsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NyZWF0ZUZpeHR1cmVNYXAgKHRlc3RzOiBUZXN0W10sIGJyb3dzZXJDb25uZWN0aW9uQ291bnQ6IG51bWJlcik6IE1hcDxGaXh0dXJlLCBGaXh0dXJlU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRlc3RzLnJlZHVjZSgoZml4dHVyZU1hcCwgdGVzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IHRlc3QuZml4dHVyZTtcblxuICAgICAgICAgICAgaWYgKCF0ZXN0LnNraXApIHtcbiAgICAgICAgICAgICAgICBGaXh0dXJlSG9va0NvbnRyb2xsZXIuX2Vuc3VyZUZpeHR1cmVNYXBJdGVtKGZpeHR1cmVNYXAsIGZpeHR1cmUgYXMgRml4dHVyZSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZml4dHVyZU1hcC5nZXQoZml4dHVyZSk7XG5cbiAgICAgICAgICAgICAgICBpdGVtLnBlbmRpbmdUZXN0UnVuQ291bnQgKz0gYnJvd3NlckNvbm5lY3Rpb25Db3VudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpeHR1cmVNYXA7XG4gICAgICAgIH0sIG5ldyBNYXAoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Rml4dHVyZU1hcEl0ZW0gKHRlc3Q6IFRlc3QpOiBudWxsIHwgRml4dHVyZVN0YXRlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRlc3Quc2tpcCA/IG51bGwgOiB0aGlzLl9maXh0dXJlTWFwLmdldCh0ZXN0LmZpeHR1cmUgYXMgRml4dHVyZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVGVzdEJsb2NrZWQgKHRlc3Q6IFRlc3QpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2dldEZpeHR1cmVNYXBJdGVtKHRlc3QpO1xuXG4gICAgICAgIHJldHVybiAhIWl0ZW0gJiYgaXRlbS5ydW5uaW5nRml4dHVyZUJlZm9yZUhvb2s7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcnVuRml4dHVyZUJlZm9yZUhvb2sgKGl0ZW06IEZpeHR1cmVTdGF0ZSwgZm46IEZ1bmN0aW9uLCB0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghZm4pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBpdGVtLnJ1bm5pbmdGaXh0dXJlQmVmb3JlSG9vayA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGVGbldpdGhUaW1lb3V0KGZuLCB0ZXN0UnVuLmV4ZWN1dGlvblRpbWVvdXQsIGl0ZW0uZml4dHVyZUN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaXRlbS5maXh0dXJlQmVmb3JlSG9va0VyciA9IHByb2Nlc3NUZXN0Rm5FcnJvcihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5ydW5uaW5nRml4dHVyZUJlZm9yZUhvb2sgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gIWl0ZW0uZml4dHVyZUJlZm9yZUhvb2tFcnI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcnVuRml4dHVyZUFmdGVySG9vayAoaXRlbTogRml4dHVyZVN0YXRlLCBmbjogRnVuY3Rpb24gfCBudWxsLCB0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghZm4pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGVzdFJ1bi5waGFzZSA9IFRFU1RfUlVOX1BIQVNFLmluRml4dHVyZUFmdGVySG9vaztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUZuV2l0aFRpbWVvdXQoZm4sIHRlc3RSdW4uZXhlY3V0aW9uVGltZW91dCwgaXRlbS5maXh0dXJlQ3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0ZXN0UnVuLmFkZEVycm9yKHByb2Nlc3NUZXN0Rm5FcnJvcihlcnIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBydW5GaXh0dXJlQmVmb3JlSG9va0lmTmVjZXNzYXJ5ICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0ZXN0UnVuLnRlc3QuZml4dHVyZSBhcyBGaXh0dXJlO1xuICAgICAgICBjb25zdCBpdGVtICAgID0gdGhpcy5fZ2V0Rml4dHVyZU1hcEl0ZW0odGVzdFJ1bi50ZXN0KTtcblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUnVuQmVmb3JlSG9vayA9ICFpdGVtLnN0YXJ0ZWQ7XG5cbiAgICAgICAgICAgIGl0ZW0uc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBzaG91bGRSdW5CZWZvcmVIb29rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXdhaXQgdGhpcy5fcnVuRml4dHVyZUJlZm9yZUhvb2soaXRlbSwgZml4dHVyZS5nbG9iYWxCZWZvcmVGbiBhcyBGdW5jdGlvbiwgdGVzdFJ1bilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhd2FpdCB0aGlzLl9ydW5GaXh0dXJlQmVmb3JlSG9vayhpdGVtLCBmaXh0dXJlLmJlZm9yZUZuIGFzIEZ1bmN0aW9uLCB0ZXN0UnVuKTtcblxuICAgICAgICAgICAgLy8gTk9URTogZmFpbCBhbGwgdGVzdHMgaW4gZml4dHVyZSBpZiBmaXh0dXJlLmJlZm9yZSBob29rIGhhcyBlcnJvclxuICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIGl0ZW0uZml4dHVyZUJlZm9yZUhvb2tFcnIpIHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuLnBoYXNlID0gVEVTVF9SVU5fUEhBU0UuaW5GaXh0dXJlQmVmb3JlSG9vaztcblxuICAgICAgICAgICAgICAgIHRlc3RSdW4uYWRkRXJyb3IoaXRlbS5maXh0dXJlQmVmb3JlSG9va0Vycik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRlc3RSdW4uZml4dHVyZUN0eCA9IGl0ZW0uZml4dHVyZUN0eDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBydW5GaXh0dXJlQWZ0ZXJIb29rSWZOZWNlc3NhcnkgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRlc3RSdW4udGVzdC5maXh0dXJlIGFzIEZpeHR1cmU7XG4gICAgICAgIGNvbnN0IGl0ZW0gICAgPSB0aGlzLl9nZXRGaXh0dXJlTWFwSXRlbSh0ZXN0UnVuLnRlc3QpO1xuXG4gICAgICAgIGlmICghaXRlbSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpdGVtLnBlbmRpbmdUZXN0UnVuQ291bnQtLTtcblxuICAgICAgICBpZiAoaXRlbS5wZW5kaW5nVGVzdFJ1bkNvdW50ICE9PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3J1bkZpeHR1cmVBZnRlckhvb2soaXRlbSwgZml4dHVyZS5hZnRlckZuLCB0ZXN0UnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fcnVuRml4dHVyZUFmdGVySG9vayhpdGVtLCBmaXh0dXJlLmdsb2JhbEFmdGVyRm4sIHRlc3RSdW4pO1xuXG4gICAgICAgIGlmIChpdGVtLmZpeHR1cmVDdHgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRlc3RSdW4uY29tcGlsZXJTZXJ2aWNlPy5yZW1vdmVGaXh0dXJlQ3R4c0Zyb21TdGF0ZSh7XG4gICAgICAgICAgICAgICAgZml4dHVyZUlkczogW2ZpeHR1cmUuaWRdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maXh0dXJlTWFwLmRlbGV0ZShmaXh0dXJlKTtcbiAgICB9XG59XG4iXX0=
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS1ob29rLWNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVubmVyL2ZpeHR1cmUtaG9vay1jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQStDO0FBQy9DLDRGQUFpRTtBQUlqRSwrRkFBb0U7QUFVcEUsTUFBcUIscUJBQXFCO0lBR3RDLFlBQW9CLEtBQWEsRUFBRSxzQkFBOEI7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUFFLFVBQXNDLEVBQUUsT0FBZ0I7UUFDMUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUc7Z0JBQ1QsT0FBTyxFQUFtQixLQUFLO2dCQUMvQix3QkFBd0IsRUFBRSxLQUFLO2dCQUMvQixvQkFBb0IsRUFBTSxJQUFJO2dCQUM5QixtQkFBbUIsRUFBTyxDQUFDO2dCQUMzQixVQUFVLEVBQWdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2hELENBQUM7WUFFRixVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQUUsS0FBYSxFQUFFLHNCQUE4QjtRQUMzRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWixxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsT0FBa0IsQ0FBQyxDQUFDO2dC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QyxDQUFDO2dCQUU1QyxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN4QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsOEJBQThCLENBQUUsT0FBZ0I7O1FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBa0IsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxJQUFJO1lBQ0wsT0FBTztRQUVYLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLENBQUM7WUFDOUIsT0FBTztRQUVYLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXRFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixNQUFNLENBQUEsTUFBQSxPQUFPLENBQUMsZUFBZSwwQ0FBRSwwQkFBMEIsQ0FBQztnQkFDdEQsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUMzQixDQUFDLENBQUEsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNKO0FBbElELHdDQWtJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBURVNUX1JVTl9QSEFTRSBmcm9tICcuLi90ZXN0LXJ1bi9waGFzZSc7XG5pbXBvcnQgcHJvY2Vzc1Rlc3RGbkVycm9yIGZyb20gJy4uL2Vycm9ycy9wcm9jZXNzLXRlc3QtZm4tZXJyb3InO1xuaW1wb3J0IFRlc3QgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS90ZXN0JztcbmltcG9ydCBGaXh0dXJlIGZyb20gJy4uL2FwaS9zdHJ1Y3R1cmUvZml4dHVyZSc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgZXhlY3V0ZUZuV2l0aFRpbWVvdXQgZnJvbSAnLi4vdXRpbHMvZXhlY3V0ZS1mbi13aXRoLXRpbWVvdXQnO1xuXG5pbnRlcmZhY2UgRml4dHVyZVN0YXRlIHtcbiAgICBzdGFydGVkOiBib29sZWFuO1xuICAgIHJ1bm5pbmdGaXh0dXJlQmVmb3JlSG9vazogYm9vbGVhbjtcbiAgICBmaXh0dXJlQmVmb3JlSG9va0VycjogbnVsbCB8IEVycm9yO1xuICAgIHBlbmRpbmdUZXN0UnVuQ291bnQ6IG51bWJlcjtcbiAgICBmaXh0dXJlQ3R4OiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpeHR1cmVIb29rQ29udHJvbGxlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZml4dHVyZU1hcDogTWFwPEZpeHR1cmUsIEZpeHR1cmVTdGF0ZT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRlc3RzOiBUZXN0W10sIGJyb3dzZXJDb25uZWN0aW9uQ291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9maXh0dXJlTWFwID0gRml4dHVyZUhvb2tDb250cm9sbGVyLl9jcmVhdGVGaXh0dXJlTWFwKHRlc3RzLCBicm93c2VyQ29ubmVjdGlvbkNvdW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfZW5zdXJlRml4dHVyZU1hcEl0ZW0gKGZpeHR1cmVNYXA6IE1hcDxGaXh0dXJlLCBGaXh0dXJlU3RhdGU+LCBmaXh0dXJlOiBGaXh0dXJlKTogdm9pZCB7XG4gICAgICAgIGlmICghZml4dHVyZU1hcC5oYXMoZml4dHVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgc3RhcnRlZDogICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBydW5uaW5nRml4dHVyZUJlZm9yZUhvb2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpeHR1cmVCZWZvcmVIb29rRXJyOiAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBwZW5kaW5nVGVzdFJ1bkNvdW50OiAgICAgIDAsXG4gICAgICAgICAgICAgICAgZml4dHVyZUN0eDogICAgICAgICAgICAgICBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZml4dHVyZU1hcC5zZXQoZml4dHVyZSwgaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfY3JlYXRlRml4dHVyZU1hcCAodGVzdHM6IFRlc3RbXSwgYnJvd3NlckNvbm5lY3Rpb25Db3VudDogbnVtYmVyKTogTWFwPEZpeHR1cmUsIEZpeHR1cmVTdGF0ZT4ge1xuICAgICAgICByZXR1cm4gdGVzdHMucmVkdWNlKChmaXh0dXJlTWFwLCB0ZXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gdGVzdC5maXh0dXJlO1xuXG4gICAgICAgICAgICBpZiAoIXRlc3Quc2tpcCkge1xuICAgICAgICAgICAgICAgIEZpeHR1cmVIb29rQ29udHJvbGxlci5fZW5zdXJlRml4dHVyZU1hcEl0ZW0oZml4dHVyZU1hcCwgZml4dHVyZSBhcyBGaXh0dXJlKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBmaXh0dXJlTWFwLmdldChmaXh0dXJlKTtcblxuICAgICAgICAgICAgICAgIGl0ZW0ucGVuZGluZ1Rlc3RSdW5Db3VudCArPSBicm93c2VyQ29ubmVjdGlvbkNvdW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZml4dHVyZU1hcDtcbiAgICAgICAgfSwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRGaXh0dXJlTWFwSXRlbSAodGVzdDogVGVzdCk6IG51bGwgfCBGaXh0dXJlU3RhdGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGVzdC5za2lwID8gbnVsbCA6IHRoaXMuX2ZpeHR1cmVNYXAuZ2V0KHRlc3QuZml4dHVyZSBhcyBGaXh0dXJlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUZXN0QmxvY2tlZCAodGVzdDogVGVzdCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZ2V0Rml4dHVyZU1hcEl0ZW0odGVzdCk7XG5cbiAgICAgICAgcmV0dXJuICEhaXRlbSAmJiBpdGVtLnJ1bm5pbmdGaXh0dXJlQmVmb3JlSG9vaztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5GaXh0dXJlQmVmb3JlSG9vayAoaXRlbTogRml4dHVyZVN0YXRlLCBmbjogRnVuY3Rpb24sIHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCFmbilcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGl0ZW0ucnVubmluZ0ZpeHR1cmVCZWZvcmVIb29rID0gdHJ1ZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZUZuV2l0aFRpbWVvdXQoZm4sIHRlc3RSdW4uZXhlY3V0aW9uVGltZW91dCwgaXRlbS5maXh0dXJlQ3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpdGVtLmZpeHR1cmVCZWZvcmVIb29rRXJyID0gcHJvY2Vzc1Rlc3RGbkVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLnJ1bm5pbmdGaXh0dXJlQmVmb3JlSG9vayA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiAhaXRlbS5maXh0dXJlQmVmb3JlSG9va0VycjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW5GaXh0dXJlQWZ0ZXJIb29rIChpdGVtOiBGaXh0dXJlU3RhdGUsIGZuOiBGdW5jdGlvbiB8IG51bGwsIHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFmbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0ZXN0UnVuLnBoYXNlID0gVEVTVF9SVU5fUEhBU0UuaW5GaXh0dXJlQWZ0ZXJIb29rO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBleGVjdXRlRm5XaXRoVGltZW91dChmbiwgdGVzdFJ1bi5leGVjdXRpb25UaW1lb3V0LCBpdGVtLmZpeHR1cmVDdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRlc3RSdW4uYWRkRXJyb3IocHJvY2Vzc1Rlc3RGbkVycm9yKGVycikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bkZpeHR1cmVCZWZvcmVIb29rSWZOZWNlc3NhcnkgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRlc3RSdW4udGVzdC5maXh0dXJlIGFzIEZpeHR1cmU7XG4gICAgICAgIGNvbnN0IGl0ZW0gICAgPSB0aGlzLl9nZXRGaXh0dXJlTWFwSXRlbSh0ZXN0UnVuLnRlc3QpO1xuXG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRSdW5CZWZvcmVIb29rID0gIWl0ZW0uc3RhcnRlZDtcblxuICAgICAgICAgICAgaXRlbS5zdGFydGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHNob3VsZFJ1bkJlZm9yZUhvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhd2FpdCB0aGlzLl9ydW5GaXh0dXJlQmVmb3JlSG9vayhpdGVtLCBmaXh0dXJlLmdsb2JhbEJlZm9yZUZuIGFzIEZ1bmN0aW9uLCB0ZXN0UnVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGF3YWl0IHRoaXMuX3J1bkZpeHR1cmVCZWZvcmVIb29rKGl0ZW0sIGZpeHR1cmUuYmVmb3JlRm4gYXMgRnVuY3Rpb24sIHRlc3RSdW4pO1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBmYWlsIGFsbCB0ZXN0cyBpbiBmaXh0dXJlIGlmIGZpeHR1cmUuYmVmb3JlIGhvb2sgaGFzIGVycm9yXG4gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgaXRlbS5maXh0dXJlQmVmb3JlSG9va0Vycikge1xuICAgICAgICAgICAgICAgIHRlc3RSdW4ucGhhc2UgPSBURVNUX1JVTl9QSEFTRS5pbkZpeHR1cmVCZWZvcmVIb29rO1xuXG4gICAgICAgICAgICAgICAgdGVzdFJ1bi5hZGRFcnJvcihpdGVtLmZpeHR1cmVCZWZvcmVIb29rRXJyKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGVzdFJ1bi5maXh0dXJlQ3R4ID0gaXRlbS5maXh0dXJlQ3R4O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bkZpeHR1cmVBZnRlckhvb2tJZk5lY2Vzc2FyeSAodGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGVzdFJ1bi50ZXN0LmZpeHR1cmUgYXMgRml4dHVyZTtcbiAgICAgICAgY29uc3QgaXRlbSAgICA9IHRoaXMuX2dldEZpeHR1cmVNYXBJdGVtKHRlc3RSdW4udGVzdCk7XG5cbiAgICAgICAgaWYgKCFpdGVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGl0ZW0ucGVuZGluZ1Rlc3RSdW5Db3VudC0tO1xuXG4gICAgICAgIGlmIChpdGVtLnBlbmRpbmdUZXN0UnVuQ291bnQgIT09IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fcnVuRml4dHVyZUFmdGVySG9vayhpdGVtLCBmaXh0dXJlLmFmdGVyRm4sIHRlc3RSdW4pO1xuICAgICAgICBhd2FpdCB0aGlzLl9ydW5GaXh0dXJlQWZ0ZXJIb29rKGl0ZW0sIGZpeHR1cmUuZ2xvYmFsQWZ0ZXJGbiwgdGVzdFJ1bik7XG5cbiAgICAgICAgaWYgKGl0ZW0uZml4dHVyZUN0eCkge1xuICAgICAgICAgICAgYXdhaXQgdGVzdFJ1bi5jb21waWxlclNlcnZpY2U/LnJlbW92ZUZpeHR1cmVDdHhzRnJvbVN0YXRlKHtcbiAgICAgICAgICAgICAgICBmaXh0dXJlSWRzOiBbZml4dHVyZS5pZF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpeHR1cmVNYXAuZGVsZXRlKGZpeHR1cmUpO1xuICAgIH1cbn1cbiJdfQ==
|