@workflow/core 5.0.0-beta.39 → 5.0.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/classify-error.d.ts.map +1 -1
- package/dist/classify-error.js +5 -2
- package/dist/correlation-id.d.ts +109 -0
- package/dist/correlation-id.d.ts.map +1 -0
- package/dist/correlation-id.js +139 -0
- package/dist/describe-error.d.ts.map +1 -1
- package/dist/describe-error.js +14 -1
- package/dist/events-consumer.d.ts +1 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +11 -3
- package/dist/private.d.ts +17 -1
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +1 -1
- package/dist/runtime/constants.d.ts +19 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +30 -1
- package/dist/runtime/deployment-guard.d.ts +99 -0
- package/dist/runtime/deployment-guard.d.ts.map +1 -0
- package/dist/runtime/deployment-guard.js +154 -0
- package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
- package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
- package/dist/runtime/quickjs-assets.generated.js +30 -0
- package/dist/runtime/quickjs-entrypoint.d.ts +124 -0
- package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
- package/dist/runtime/quickjs-entrypoint.js +1429 -0
- package/dist/runtime/quickjs-runtime.d.ts +193 -0
- package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
- package/dist/runtime/quickjs-runtime.js +1944 -0
- package/dist/runtime/run.d.ts +2 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +9 -4
- package/dist/runtime/runs.d.ts +18 -1
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +96 -2
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +9 -1
- package/dist/runtime/suspension-handler.d.ts +7 -0
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +29 -2
- package/dist/runtime/vm-mode.d.ts +44 -0
- package/dist/runtime/vm-mode.d.ts.map +1 -0
- package/dist/runtime/vm-mode.js +62 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
- package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
- package/dist/runtime/vm-serde-bundle.generated.js +16 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +484 -47
- package/dist/serialization/codec-devalue-vm.d.ts +9 -0
- package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
- package/dist/serialization/codec-devalue-vm.js +137 -0
- package/dist/serialization/reducers/class-vm.d.ts +20 -0
- package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/class-vm.js +77 -0
- package/dist/serialization/reducers/common-vm.d.ts +15 -0
- package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/common-vm.js +579 -0
- package/dist/serialization/reducers/common.d.ts.map +1 -1
- package/dist/serialization/reducers/common.js +28 -6
- package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
- package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
- package/dist/serialization/reducers/step-function-vm.js +97 -0
- package/dist/serialization/vm-bundle-entry.d.ts +12 -0
- package/dist/serialization/vm-bundle-entry.d.ts.map +1 -0
- package/dist/serialization/vm-bundle-entry.js +58 -0
- package/dist/serialization/workflow-vm.d.ts +24 -0
- package/dist/serialization/workflow-vm.d.ts.map +1 -0
- package/dist/serialization/workflow-vm.js +66 -0
- package/dist/serialization.d.ts +2 -1
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +26 -21
- package/dist/source-map.d.ts +20 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +47 -1
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +7 -2
- package/dist/telemetry/semantic-conventions.d.ts +78 -0
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +56 -1
- package/dist/telemetry.d.ts +5 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +13 -13
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/workflow/abort-controller.d.ts.map +1 -1
- package/dist/workflow/abort-controller.js +6 -4
- package/dist/workflow/attribute-dispatcher.js +2 -2
- package/dist/workflow/hook.js +2 -2
- package/dist/workflow/sleep.js +2 -2
- package/dist/workflow.d.ts +49 -2
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +723 -569
- package/docs/api-reference/create-hook.mdx +1 -1
- package/docs/foundations/starting-workflows.mdx +74 -1
- package/package.json +8 -7
package/dist/runtime/start.js
CHANGED
|
@@ -16,6 +16,7 @@ import { version as workflowCoreVersion } from '../version.js';
|
|
|
16
16
|
import { getWorldLazy } from './get-world-lazy.js';
|
|
17
17
|
import { getWorkflowQueueName, healthCheck } from './helpers.js';
|
|
18
18
|
import { Run } from './run.js';
|
|
19
|
+
import { getWorkflowVmFromEnv } from './vm-mode.js';
|
|
19
20
|
import { safeWaitUntil, waitedUntil } from './wait-until.js';
|
|
20
21
|
import { assertWorldSupportsRuntimeProtocol } from './world-compatibility.js';
|
|
21
22
|
/**
|
|
@@ -309,6 +310,12 @@ export async function start(workflow, argsOrOptions, options) {
|
|
|
309
310
|
// executing. Worlds with a single tenant return undefined and the field
|
|
310
311
|
// is simply absent.
|
|
311
312
|
const creatorEnvironment = world.getEnvironment?.();
|
|
313
|
+
// If WORKFLOW_VM is set on the client starting the run, stamp the
|
|
314
|
+
// engine choice into the run's executionContext so the run keeps
|
|
315
|
+
// executing on the engine it started on (the same deployment can
|
|
316
|
+
// serve both VM engines). Unknown values throw — see
|
|
317
|
+
// getWorkflowVmFromEnv().
|
|
318
|
+
const workflowVm = getWorkflowVmFromEnv();
|
|
312
319
|
const executionContext = {
|
|
313
320
|
traceCarrier,
|
|
314
321
|
workflowCoreVersion,
|
|
@@ -325,6 +332,7 @@ export async function start(workflow, argsOrOptions, options) {
|
|
|
325
332
|
...(targetHookResumeInputVersion !== undefined
|
|
326
333
|
? { hookResumeInputVersion: targetHookResumeInputVersion }
|
|
327
334
|
: {}),
|
|
335
|
+
...(workflowVm ? { workflowVm } : {}),
|
|
328
336
|
...(opts.replayedFromRunId
|
|
329
337
|
? { replayedFromRunId: opts.replayedFromRunId }
|
|
330
338
|
: {}),
|
|
@@ -434,4 +442,4 @@ export async function start(workflow, argsOrOptions, options) {
|
|
|
434
442
|
});
|
|
435
443
|
});
|
|
436
444
|
}
|
|
437
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRSxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLGdDQUFnQyxFQUNoQywwQ0FBMEMsRUFDMUMsaUNBQWlDLEVBQ2pDLG1CQUFtQixHQUNwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsMEJBQTBCLEVBRTFCLG1CQUFtQixFQUNuQixNQUFNLEdBQ1AsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFF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QkFDRSxhQUFhLEVBQUUsS0FBSztvQkFDcEIsS0FBSyxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7aUJBQ3hELENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxFQUFFLGFBQWEsQ0FBQztnQkFDbEIsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztnQkFDakMsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztnQkFDdkMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxXQUFXO29CQUMzQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRztvQkFDeEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztvQkFDaEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxHQUFHLENBQVUsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUNvbmZsaWN0RXJyb3IsIFdvcmtmbG93UnVudGltZUVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyB3b3JrZmxvd0Rpc3BsYXlOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd0ludm9rZVBheWxvYWQsIFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIEhPT0tfUkVTVU1FX0lOUFVUX1ZFUlNJT04sXG4gIGlzTGVnYWN5U3BlY1ZlcnNpb24sXG4gIFBBUkVOVF9SVU5fSURfQVRUUklCVVRFLFxuICBST09UX1JVTl9JRF9BVFRSSUJVVEUsXG4gIFNQRUNfVkVSU0lPTl9TVVBQT1JUU19BVFRSSUJVVEVTLFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ0JPUl9RVUVVRV9UUkFOU1BPUlQsXG4gIFNQRUNfVkVSU0lPTl9TVVBQT1JUU19DT01QUkVTU0lPTixcbiAgd29ya2Zsb3dSdW5JZFNjaGVtYSxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IG1vbm90b25pY0ZhY3RvcnkgfSBmcm9tICd1bGlkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMgfSBmcm9tICcuLi9hdHRyaWJ1dGUtY2hhbmdlcy5qcyc7XG5pbXBvcnQgeyBnZXRSdW5DYXBhYmlsaXRpZXMgfSBmcm9tICcuLi9jYXBhYmlsaXRpZXMuanMnO1xuaW1wb3J0IHsgaXNSZXRyeWFibGVXb3JsZEVycm9yIH0gZnJvbSAnLi4vY2xhc3NpZnktZXJyb3IuanMnO1xuaW1wb3J0IHsgaW1wb3J0S2V5IH0gZnJvbSAnLi4vZW5jcnlwdGlvbi5qcyc7XG5pbXBvcnQgeyBydW50aW1lTG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlIH0gZnJvbSAnLi4vc2NoZW1hcy5qcyc7XG5pbXBvcnQge1xuICBieXRlc1RvQmFzZTY0LFxuICBkZWNvZGVSdW5QdWJsaWNLZXksXG4gIGRlcml2ZVJ1bktleVBhaXIsXG59IGZyb20gJy4uL3NlYWxlZC1ib3guanMnO1xuaW1wb3J0IHtcbiAgZGVoeWRyYXRlV29ya2Zsb3dBcmd1bWVudHMsXG4gIHR5cGUgUGF5bG9hZEtleSxcbiAgU2VyaWFsaXphdGlvbkZvcm1hdCxcbiAgc2VhbFRvLFxufSBmcm9tICcuLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IGNvbnRleHRTdG9yYWdlIH0gZnJvbSAnLi4vc3RlcC9jb250ZXh0LXN0b3JhZ2UuanMnO1xuaW1wb3J0ICogYXMgQXR0cmlidXRlIGZyb20gJy4uL3RlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucy5qcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVUcmFjZUNhcnJpZXIsIHRyYWNlIH0gZnJvbSAnLi4vdGVsZW1ldHJ5LmpzJztcbmltcG9ydCB7IHZlcnNpb24gYXMgd29ya2Zsb3dDb3JlVmVyc2lvbiB9IGZyb20gJy4uL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgZ2V0V29ybGRMYXp5IH0gZnJvbSAnLi9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd1F1ZXVlTmFtZSwgaGVhbHRoQ2hlY2sgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgUnVuIH0gZnJvbSAnLi9ydW4uanMnO1xuaW1wb3J0IHsgc2FmZVdhaXRVbnRpbCwgd2FpdGVkVW50aWwgfSBmcm9tICcuL3dhaXQtdW50aWwuanMnO1xuaW1wb3J0IHsgYXNzZXJ0V29ybGRTdXBwb3J0c1J1bnRpbWVQcm90b2NvbCB9IGZyb20gJy4vd29ybGQtY29tcGF0aWJpbGl0eS5qcyc7XG5cbi8qKlxuICogVGltZW91dCBmb3IgdGhlIGNyb3NzLWRlcGxveW1lbnQgY2FwYWJpbGl0eSBwcm9iZSBkb25lIGJlZm9yZVxuICogZGVoeWRyYXRpbmcgd29ya2Zsb3cgYXJndW1lbnRzLiBLZXB0IHRpZ2h0IG9uIHB1cnBvc2U6IHRoZSBwcm9iZSBpc1xuICogYW4gb3B0aW1pemF0aW9uIChpdCBsZXRzIHRoZSBjYWxsZXIgZW1pdCB0aGUgZnJhbWVkIGJ5dGUtc3RyZWFtIHdpcmVcbiAqIGZvcm1hdCB3aGVuIHRoZSB0YXJnZXQgc3VwcG9ydHMgaXQpLCBhbmQgdGhlIGZhbGxiYWNrIG9uIHRpbWVvdXQgaXNcbiAqIHRoZSBsZWdhY3kgcmF3IGZvcm1hdCB3aGljaCBhbHdheXMgd29ya3MuIExvbmcgZGVsYXlzIGhlcmUgd291bGQganVzdFxuICogbWFrZSBgc3RhcnQoeyBkZXBsb3ltZW50SWQ6IC4uLiB9KWAgc2xvd2VyIGZvciB1c2VycyB3aG9zZSB0YXJnZXRcbiAqIGRlcGxveW1lbnRzIGRvbid0IHJlY29nbml6ZSB0aGUgaGVhbHRoIGNoZWNrIGF0IGFsbC5cbiAqL1xuY29uc3QgQ1JPU1NfREVQTE9ZTUVOVF9DQVBBQklMSVRZX1BST0JFX1RJTUVPVVRfTVMgPSAyXzAwMDtcblxuLyoqIFVMSUQgZ2VuZXJhdG9yIGZvciBjbGllbnQtc2lkZSBydW5JZCBnZW5lcmF0aW9uICovXG5jb25zdCB1bGlkID0gbW9ub3RvbmljRmFjdG9yeSgpO1xuXG4vKipcbiAqIENyb3NzLXJ1biBsaW5lYWdlIGZvciBhIHJ1biBiZWluZyBzdGFydGVkIGZyb20gaW5zaWRlIGFub3RoZXIgcnVuLlxuICpcbiAqIFRoZSBhbWJpZW50IHN0ZXAgY29udGV4dCBjYXJyaWVzIHRoZSBwYXJlbnQgcnVuIGlkIGFuZCB0aGUgcm9vdCBvZiBpdHNcbiAqIGxpbmVhZ2U7IHRoZSBydW50aW1lIGZpbGxzIGJvdGggZnJvbSB0aGUgcnVuIGl0IGFscmVhZHkgaGFzIGxvYWRlZCwgc28gdGhpc1xuICogaXMgYSBwdXJlIGNvbnRleHQgcmVhZCB3aXRoIG5vIEkvTy4gVGhlIG5ldyBydW4gcmVjb3JkcyBgJHBhcmVudFJ1bklkYCAodGhlXG4gKiBlZGdlKSBhbmQgaW5oZXJpdHMgdGhlIHBhcmVudCdzIGAkcm9vdFJ1bklkYCAodGhlIHBhcmVudCBpdHNlbGYgd2hlbiBpdCBpcyBhXG4gKiByb290KSwgc28gYSBkYWlzeSBjaGFpbiBvciBmYW4tb3V0IG9mIGFueSBkZXB0aCBncm91cHMgdW5kZXIgb25lIHJvb3QgaWQuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBhIHRvcC1sZXZlbCBgc3RhcnQoKWAsIHdoaWNoIGhhcyBubyBjb250ZXh0LCBzb1xuICogc3RhbmRhbG9uZSBydW5zIGNhcnJ5IG5vIGxpbmVhZ2UuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVMaW5lYWdlQXR0cmlidXRlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3RvcmUgPSBjb250ZXh0U3RvcmFnZS5nZXRTdG9yZSgpO1xuICBjb25zdCBwYXJlbnRSdW5JZCA9IHN0b3JlPy53b3JrZmxvd01ldGFkYXRhPy53b3JrZmxvd1J1bklkO1xuICBpZiAoIXBhcmVudFJ1bklkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgW1JPT1RfUlVOX0lEX0FUVFJJQlVURV06IHN0b3JlLnJvb3RSdW5JZCA/PyBwYXJlbnRSdW5JZCxcbiAgICBbUEFSRU5UX1JVTl9JRF9BVFRSSUJVVEVdOiBwYXJlbnRSdW5JZCxcbiAgfTtcbn1cblxuLy8gYGRlcGxveW1lbnRJZDogJ2xhdGVzdCdgIGlzIGEgbm8tb3AgaW4gV29ybGRzIHdpdGhvdXQgYXRvbWljIGRlcGxveW1lbnRzLlxuLy8gVGhlIHdhcm5pbmcgdGhhdCBleHBsYWlucyB0aGlzIG9ubHkgbmVlZHMgdG8gZmlyZSBvbmNlIHBlciBwcm9jZXNzOiBhXG4vLyB3b3JrZmxvdyB0aGF0IGhhcmRjb2RlcyAnbGF0ZXN0JyBmb3IgaXRzIFZlcmNlbCBkZXBsb3ltZW50IHdvdWxkIG90aGVyd2lzZVxuLy8gbG9nIGl0IG9uIGV2ZXJ5IGxvY2FsL1Bvc3RncmVzIHJ1biwgZmxvb2RpbmcgdGlnaHQgZGV2IGxvb3BzLlxubGV0IGhhc1dhcm5lZExhdGVzdE5vT3AgPSBmYWxzZTtcblxuLyoqXG4gKiBSZXNldCB0aGUgYGRlcGxveW1lbnRJZDogJ2xhdGVzdCdgIG5vLW9wIHdhcm4tb25jZSBndWFyZC4gVGVzdC1vbmx5IOKAlFxuICogZXhwb3J0ZWQgc28gdW5pdCB0ZXN0cyBjYW4gZXhlcmNpc2UgdGhlIHdhcm4gcGF0aCBhY3Jvc3MgYHN0YXJ0KClgIGNhbGxzLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0TGF0ZXN0Tm9PcFdhcm5Gb3JUZXN0cygpOiB2b2lkIHtcbiAgaGFzV2FybmVkTGF0ZXN0Tm9PcCA9IGZhbHNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0T3B0aW9uc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIHdvcmxkIHRvIHVzZSBmb3IgdGhlIHdvcmtmbG93IHJ1biBjcmVhdGlvbixcbiAgICogYnkgZGVmYXVsdCB0aGUgd29ybGQgaXMgaW5mZXJyZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgd29ybGQ/OiBXb3JsZDtcblxuICAvKipcbiAgICogVGhlIHNwZWMgdmVyc2lvbiB0byB1c2UgZm9yIHRoZSB3b3JrZmxvdyBydW4uIERlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbi5cbiAgICovXG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCByZWdpb24gaWRlbnRpZmllciBmb3IgdGhlIG5ldyBydW4uIEN1cnJlbnRseSBjb25zdW1lZCBvbmx5XG4gICAqIGJ5IGBAd29ya2Zsb3cvd29ybGQtdmVyY2VsYCwgd2hpY2ggZW1iZWRzIHRoZSByZWdpb24gaW50byB0aGUgdGFnZ2VkXG4gICAqIHJ1biBJRCBhbmQgcm91dGVzIHRoZSBpbml0aWFsIHdvcmtmbG93IG1lc3NhZ2UgdG8gdGhlIG1hdGNoaW5nXG4gICAqIHJlZ2lvbmFsIHF1ZXVlLiBXaGVuIG9taXR0ZWQsIHRoZSB3b3JsZCBmYWxscyBiYWNrIHRvIGl0cyBvd25cbiAgICogZGVmYXVsdCAoZm9yIGB3b3JsZC12ZXJjZWxgOiB0aGUgYFZFUkNFTF9SRUdJT05gIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlLCB0aGVuIHRoZSBzZXJ2ZXItc2lkZSBkZWZhdWx0IHJlZ2lvbiBgaWFkMWAg4oCUIGEgY29uY3JldGUsXG4gICAqIHJvdXRhYmxlIHJlZ2lvbiBpcyBhbHdheXMgY2hvc2VuKS5cbiAgICpcbiAgICogV29ybGRzIHdpdGhvdXQgYSByZWdpb25hbCBkaW1lbnNpb24gaWdub3JlIHRoaXMgZmllbGQuXG4gICAqL1xuICByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsYWludGV4dCBhdHRyaWJ1dGVzIHRvIHNlZWQgb24gdGhlIHJ1biBhcyBpdCBpcyBjcmVhdGVkLlxuICAgKlxuICAgKiBBdmFpbGFibGUgZm9yIG5hdGl2ZS1hdHRyaWJ1dGVzIHJ1bnMgKHNwZWMgdmVyc2lvbiA0IGFuZCBsYXRlcikuXG4gICAqL1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogUGVybWl0IHJlc2VydmVkIGAkYC1wcmVmaXhlZCBrZXlzIGluIGBhdHRyaWJ1dGVzYC4gVGhlIGAkYCBuYW1lc3BhY2VcbiAgICogaXMgcmVzZXJ2ZWQgZm9yIGZyYW1ld29yay9saWJyYXJ5IGNvZGUgYnVpbHQgb24gdG9wIG9mIHRoZSB3b3JrZmxvd1xuICAgKiBTREsgKHRlbGVtZXRyeSwgYWdlbnQgbWV0YWRhdGEsIHBsYXRmb3JtLWVtaXR0ZWQgdGFncywgZXRjLik7IHVzZXJcbiAgICogY29kZSBNVVNUIE5PVCB3cml0ZSBrZXlzIGluIGl0LCBhbmQgdmFsaWRhdGlvbiByZWplY3RzIHRoZW0gc29cbiAgICogYWNjaWRlbnRhbCBjb2xsaXNpb25zIHdpdGggdG9vbGluZy1vd25lZCBrZXlzIGNhbid0IHNsaXAgdGhyb3VnaC5cbiAgICpcbiAgICogT25seSBmbGlwIHRoaXMgdG8gYHRydWVgIGlmIHlvdXIgY2FsbGVyIGlzIGl0c2VsZiBhIGZyYW1ld29yayBvclxuICAgKiBsaWJyYXJ5IHRoYXQgb3ducyBhIGAkYC1wcmVmaXhlZCBzdWItbmFtZXNwYWNlIGFuZCBrbm93cyB0aGVcbiAgICogY29udmVudGlvbnMgb2YgYW55IG90aGVyIHRvb2xzIHdyaXRpbmcgaW50byBpdC4gU2FtZSBzZW1hbnRpY3MgYXNcbiAgICogdGhlIGBzZXRBdHRyaWJ1dGVzYCBvcHRpb24gb2YgdGhlIHNhbWUgbmFtZS5cbiAgICovXG4gIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGV4aXN0aW5nIHJ1biB0aGlzIHJ1biBpcyBiZWluZyByZXBsYXllZCBmcm9tLCBpZiBhbnkuXG4gICAqXG4gICAqIFJlY29yZGVkIG9uIHRoZSBuZXcgcnVuJ3MgYGV4ZWN1dGlvbkNvbnRleHRgIGFzIGByZXBsYXllZEZyb21SdW5JZGAgc29cbiAgICogdG9vbGluZyAoZS5nLiB0aGUgZGFzaGJvYXJkIHJ1bnMgbGlzdCkgY2FuIHNob3cgdGhhdCBhIHJ1biBvcmlnaW5hdGVkIGFzXG4gICAqIGEgcmVwbGF5IGFuZCBsaW5rIGJhY2sgdG8gaXRzIHNvdXJjZS4gU2V0IGF1dG9tYXRpY2FsbHkgYnlcbiAgICoge0BsaW5rIHJlY3JlYXRlUnVuRnJvbUV4aXN0aW5nfTsgdGhlcmUncyB1c3VhbGx5IG5vIHJlYXNvbiB0byBwYXNzIGl0XG4gICAqIGRpcmVjdGx5LlxuICAgKlxuICAgKiBNdXN0IGJlIGEgcnVuIElEOiBgd3J1bl9gIGZvbGxvd2VkIGJ5IGEgMjYtY2hhciBVTElELiBJdCdzIGEgZm9yZWlnbiBrZXlcbiAgICogdG8gdGhlIHNvdXJjZSBydW4sIHNvIGBzdGFydCgpYCB2YWxpZGF0ZXMgdGhlIGV4YWN0IHNoYXBlIGFuZCByZWplY3RzXG4gICAqIGFueXRoaW5nIGVsc2UgcmF0aGVyIHRoYW4gcGVyc2lzdCBhIGxpbmVhZ2UgbGluayB0aGF0IHBvaW50cyBhdCBnYXJiYWdlLlxuICAgKi9cbiAgcmVwbGF5ZWRGcm9tUnVuSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRdWV1ZSBuYW1lc3BhY2Ugb2YgdGhlIHRhcmdldCBkZXBsb3ltZW50LiBTY29wZXMgdGhlIHdvcmtmbG93IHF1ZXVlXG4gICAqIHRvcGljIHRvIGBfX3tuYW1lc3BhY2V9X3drZl93b3JrZmxvd18qYCAoZS5nLiBgJ2V2ZSdgKSBpbnN0ZWFkIG9mIHRoZVxuICAgKiBkZWZhdWx0IGBfX3drZl93b3JrZmxvd18qYCwgYW5kIGlzIGFsc28gdXNlZCBmb3IgdGhlIGNyb3NzLWRlcGxveW1lbnRcbiAgICogY2FwYWJpbGl0eSBwcm9iZS4gRmFsbHMgYmFjayB0byBgV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFYCBpbiB0aGVcbiAgICogY2FsbGluZyBwcm9jZXNzLlxuICAgKlxuICAgKiBXaXRoaW4gYSBkZXBsb3ltZW50IHRoZSBlbnYgZmFsbGJhY2sgaXMgY29ycmVjdC4gQ3Jvc3MtY29udGV4dCBjYWxsZXJzXG4gICAqIChlLmcuIHRoZSBvYnNlcnZhYmlsaXR5IGRhc2hib2FyZCByZXBsYXlpbmcgYSBydW4pIG11c3QgcGFzcyB0aGVcbiAgICogVEFSR0VUIGRlcGxveW1lbnQncyBuYW1lc3BhY2UgZXhwbGljaXRseTogdGhlIGVudiBmYWxsYmFjayByZXNvbHZlcyBpblxuICAgKiB0aGUgY2FsbGVyJ3MgcHJvY2VzcywgYW5kIGEgcnVuIGVucXVldWVkIHRvIGEgdG9waWMgdGhlIHRhcmdldCBoYXMgbm9cbiAgICogY29uc3VtZXIgZm9yIGlzIG5ldmVyIHBpY2tlZCB1cC5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkIGV4dGVuZHMgU3RhcnRPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVwbG95bWVudCBJRCB0byB1c2UgZm9yIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYXV0b21hdGljYWxseSBpbmZlcnJlZCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiB3aGVuIGRlcGxveWluZyB0byBWZXJjZWwuXG4gICAqXG4gICAqIFNldCB0byBgJ2xhdGVzdCdgIHRvIGF1dG9tYXRpY2FsbHkgcmVzb2x2ZSB0aGUgbW9zdCByZWNlbnQgZGVwbG95bWVudFxuICAgKiBmb3IgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgKHNhbWUgcHJvZHVjdGlvbiB0YXJnZXQgb3IgZ2l0IGJyYW5jaCkuXG4gICAqIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIGluIHdvcmxkcyB3aXRoIGF0b21pYywgaW1tdXRhYmxlIGRlcGxveW1lbnRzXG4gICAqIChjdXJyZW50bHkgVmVyY2VsKS4gSW4gb3RoZXIgd29ybGRzIChsb2NhbCBkZXYsIFBvc3RncmVzKSB0aGVyZSBpcyBub1xuICAgKiBub3Rpb24gb2YgbXVsdGlwbGUgZGVwbG95bWVudHMgdG8gcmVzb2x2ZSBiZXR3ZWVuLCBzbyBgJ2xhdGVzdCdgIGhhcyBub1xuICAgKiBlZmZlY3Qg4oCUIGEgd2FybmluZyBpcyBsb2dnZWQgYW5kIHRoZSBydW4gdGFyZ2V0cyB0aGUgY3VycmVudCBkZXBsb3ltZW50LlxuICAgKlxuICAgKiAqKk5vdGU6KiogV2hlbiBgZGVwbG95bWVudElkYCBpcyBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZXMgYmVjb21lIGB1bmtub3duYFxuICAgKiBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhlIHR5cGVzIHdpbGwgYmUgY29uc2lzdGVudCBhY3Jvc3MgZGVwbG95bWVudHMuXG4gICAqL1xuICBkZXBsb3ltZW50SWQ6ICdsYXRlc3QnIHwgKHN0cmluZyAmIHt9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydE9wdGlvbnNXaXRob3V0RGVwbG95bWVudElkIGV4dGVuZHMgU3RhcnRPcHRpb25zQmFzZSB7XG4gIGRlcGxveW1lbnRJZD86IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFydGluZyBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhcnRPcHRpb25zID1cbiAgfCBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkXG4gIHwgU3RhcnRPcHRpb25zV2l0aG91dERlcGxveW1lbnRJZDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGltcG9ydGVkIHdvcmtmbG93IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd0Z1bmN0aW9uPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PiA9IChcbiAgLi4uYXJnczogVEFyZ3NcbikgPT4gUHJvbWlzZTxUUmVzdWx0PjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBnZW5lcmF0ZWQgbWV0YWRhdGEgb2YgYSB3b3JrZmxvdyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dNZXRhZGF0YSA9IHsgd29ya2Zsb3dJZDogc3RyaW5nIH07XG5cbi8qKlxuICogU3RhcnRzIGEgd29ya2Zsb3cgcnVuLlxuICpcbiAqIEBwYXJhbSB3b3JrZmxvdyAtIFRoZSBpbXBvcnRlZCB3b3JrZmxvdyBmdW5jdGlvbiB0byBzdGFydC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSB3b3JrZmxvdyAob3B0aW9uYWwpLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHdvcmtmbG93IHJ1biAob3B0aW9uYWwpLlxuICogQHJldHVybnMgVGhlIHVuaXF1ZSBydW4gSUQgZm9yIHRoZSBuZXdseSBzdGFydGVkIHdvcmtmbG93IGludm9jYXRpb24uXG4gKi9cbi8vIE92ZXJsb2FkcyB3aXRoIGRlcGxveW1lbnRJZCAtIGFyZ3MgYW5kIHJldHVybiB0eXBlIGJlY29tZSB1bmtub3duXG4vLyBVc2VzIGdlbmVyaWNzIHNvIHR5cGVkIHdvcmtmbG93cyBhcmUgYXNzaWduYWJsZSAoYXZvaWRzIGNvbnRyYXZhcmlhbmNlIGlzc3VlcyksXG4vLyBidXQgdGhlIHJldHVybiB0eXBlIGFuZCBhcmdzIGFyZSBzdGlsbCB1bmtub3duIHNpbmNlIHRoZSBkZXBsb3llZCB2ZXJzaW9uIG1heSBkaWZmZXIuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBhcmdzOiB1bmtub3duW10sXG4gIG9wdGlvbnM6IFN0YXJ0T3B0aW9uc1dpdGhEZXBsb3ltZW50SWRcbik6IFByb21pc2U8UnVuPHVua25vd24+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxbXSwgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBvcHRpb25zOiBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkXG4pOiBQcm9taXNlPFJ1bjx1bmtub3duPj47XG5cbi8vIE92ZXJsb2FkcyB3aXRob3V0IGRlcGxveW1lbnRJZCAtIHByZXNlcnZlIHR5cGUgaW5mZXJlbmNlXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBhcmdzOiBUQXJncyxcbiAgb3B0aW9ucz86IFN0YXJ0T3B0aW9uc1dpdGhvdXREZXBsb3ltZW50SWRcbik6IFByb21pc2U8UnVuPFRSZXN1bHQ+PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxbXSwgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBvcHRpb25zPzogU3RhcnRPcHRpb25zV2l0aG91dERlcGxveW1lbnRJZFxuKTogUHJvbWlzZTxSdW48VFJlc3VsdD4+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnQ8VEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFRSZXN1bHQ+KFxuICB3b3JrZmxvdzogV29ya2Zsb3dGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4gfCBXb3JrZmxvd01ldGFkYXRhLFxuICBhcmdzT3JPcHRpb25zPzogVEFyZ3MgfCBTdGFydE9wdGlvbnMsXG4gIG9wdGlvbnM/OiBTdGFydE9wdGlvbnNcbikge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gYXdhaXQgd2FpdGVkVW50aWwoKCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBmaWVsZCBpcyBhZGRlZCBieSBvdXIgY2xpZW50IHRyYW5zZm9ybVxuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IHdvcmtmbG93Py53b3JrZmxvd0lkO1xuXG4gICAgaWYgKCF3b3JrZmxvd05hbWUpIHtcbiAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgYCdzdGFydCcgcmVjZWl2ZWQgYW4gaW52YWxpZCB3b3JrZmxvdyBmdW5jdGlvbi4gRW5zdXJlIHRoZSBXb3JrZmxvdyBTREsgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgYW5kIHRoZSBmdW5jdGlvbiBpbmNsdWRlcyBhICd1c2Ugd29ya2Zsb3cnIGRpcmVjdGl2ZS5gLFxuICAgICAgICB7IHNsdWc6ICdzdGFydC1pbnZhbGlkLXdvcmtmbG93LWZ1bmN0aW9uJyB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNwYW5OYW1lID0gYHdvcmtmbG93LnN0YXJ0ICR7d29ya2Zsb3dEaXNwbGF5TmFtZSh3b3JrZmxvd05hbWUpfWA7XG4gICAgcmV0dXJuIHRyYWNlKHNwYW5OYW1lLCBhc3luYyAoc3BhbikgPT4ge1xuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd05hbWUod29ya2Zsb3dOYW1lKSxcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93T3BlcmF0aW9uKCdzdGFydCcpLFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBhcmdzOiBTZXJpYWxpemFibGVbXSA9IFtdO1xuICAgICAgbGV0IG9wdHM6IFN0YXJ0T3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzT3JPcHRpb25zKSkge1xuICAgICAgICBhcmdzID0gYXJnc09yT3B0aW9ucyBhcyBTZXJpYWxpemFibGVbXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3NPck9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdHMgPSBhcmdzT3JPcHRpb25zO1xuICAgICAgfVxuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93QXJndW1lbnRzQ291bnQoYXJncy5sZW5ndGgpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdvcmxkID0gb3B0cy53b3JsZCA/PyAoYXdhaXQgZ2V0V29ybGRMYXp5KCkpO1xuICAgICAgYXNzZXJ0V29ybGRTdXBwb3J0c1J1bnRpbWVQcm90b2NvbCh3b3JsZCk7XG4gICAgICBjb25zdCBjdXJyZW50RGVwbG95bWVudElkID0gYXdhaXQgd29ybGQuZ2V0RGVwbG95bWVudElkKCk7XG4gICAgICBsZXQgZGVwbG95bWVudElkID0gb3B0cy5kZXBsb3ltZW50SWQgPz8gY3VycmVudERlcGxveW1lbnRJZDtcblxuICAgICAgLy8gV2hlbiAnbGF0ZXN0JyBpcyByZXF1ZXN0ZWQsIHJlc29sdmUgdGhlIGFjdHVhbCBsYXRlc3QgZGVwbG95bWVudCBJRFxuICAgICAgLy8gZm9yIHRoZSBjdXJyZW50IGRlcGxveW1lbnQncyBlbnZpcm9ubWVudCAoc2FtZSBwcm9kdWN0aW9uIHRhcmdldCBvclxuICAgICAgLy8gc2FtZSBnaXQgYnJhbmNoIGZvciBwcmV2aWV3IGRlcGxveW1lbnRzKS5cbiAgICAgIC8vXG4gICAgICAvLyBSZXNvbHZpbmcgJ2xhdGVzdCcgb25seSBtZWFucyBzb21ldGhpbmcgaW4gd29ybGRzIHdpdGggYXRvbWljLFxuICAgICAgLy8gaW1tdXRhYmxlIGRlcGxveW1lbnRzIChlLmcuIFZlcmNlbCksIHdoaWNoIGltcGxlbWVudFxuICAgICAgLy8gcmVzb2x2ZUxhdGVzdERlcGxveW1lbnRJZCgpLiBXb3JsZHMgd2l0aG91dCB0aGF0IGNvbmNlcHQgKGxvY2FsIGRldixcbiAgICAgIC8vIHNlbGYtaG9zdGVkIFBvc3RncmVzKSBoYXZlIG5vdGhpbmcgdG8gcmVzb2x2ZSBiZXR3ZWVuLCBzbyByYXRoZXIgdGhhblxuICAgICAgLy8gZmFpbCBhIHJ1biB0aGF0IHdvcmtzIGZpbmUgb24gVmVyY2VsLCB3ZSB3YXJuIGFuZCBmYWxsIGJhY2sgdG8gdGhlXG4gICAgICAvLyBjdXJyZW50IGRlcGxveW1lbnQg4oCUIG1ha2luZyAnbGF0ZXN0JyBhbiBlZmZlY3RpdmUgbm8tb3AgdGhlcmUuXG4gICAgICBpZiAoZGVwbG95bWVudElkID09PSAnbGF0ZXN0Jykge1xuICAgICAgICBpZiAod29ybGQucmVzb2x2ZUxhdGVzdERlcGxveW1lbnRJZCkge1xuICAgICAgICAgIGRlcGxveW1lbnRJZCA9IGF3YWl0IHdvcmxkLnJlc29sdmVMYXRlc3REZXBsb3ltZW50SWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXYXJuIG9uY2UgcGVyIHByb2Nlc3Mg4oCUIHNlZSBoYXNXYXJuZWRMYXRlc3ROb09wIGFib3ZlLlxuICAgICAgICAgIGlmICghaGFzV2FybmVkTGF0ZXN0Tm9PcCkge1xuICAgICAgICAgICAgaGFzV2FybmVkTGF0ZXN0Tm9PcCA9IHRydWU7XG4gICAgICAgICAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAgIFwiZGVwbG95bWVudElkOiAnbGF0ZXN0JyBoYXMgbm8gZWZmZWN0IGluIHRoaXMgd29ybGQgYW5kIHdhcyBpZ25vcmVkLiBcIiArXG4gICAgICAgICAgICAgICAgJ0l0IGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHdvcmxkcyB3aXRoIGF0b21pYyBkZXBsb3ltZW50cywgc3VjaCBhcyBWZXJjZWwuICcgK1xuICAgICAgICAgICAgICAgICdUaGUgcnVuIHdpbGwgdGFyZ2V0IHRoZSBjdXJyZW50IGRlcGxveW1lbnQuJyxcbiAgICAgICAgICAgICAgeyBjdXJyZW50RGVwbG95bWVudElkIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlcGxveW1lbnRJZCA9IGN1cnJlbnREZXBsb3ltZW50SWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGVjaWRlIHdoZXRoZXIgdG8gd3JpdGUgYnl0ZSBzdHJlYW1zIGluIHRoZSBmcmFtZWQgd2lyZSBmb3JtYXQuXG4gICAgICAvLyBGb3Igc2FtZS1kZXBsb3ltZW50IHN0YXJ0cyAodGhlIGNvbW1vbiBjYXNlKSB3ZSBrbm93IHRoZSB0YXJnZXQgaXNcbiAgICAgIC8vIHJ1bm5pbmcgdGhpcyBzYW1lIFNESyB2ZXJzaW9uLCBzbyBmcmFtaW5nIGlzIHNhZmUuIEZvciBjcm9zcy1cbiAgICAgIC8vIGRlcGxveW1lbnQgc3RhcnRzIChleHBsaWNpdCBkZXBsb3ltZW50SWQgb3IgJ2xhdGVzdCcgdGhhdCByZXNvbHZlc1xuICAgICAgLy8gdG8gYSBkaWZmZXJlbnQgZGVwbG95bWVudCkgd2UgcHJvYmUgdGhlIHRhcmdldCB2aWEgaGVhbHRoQ2hlY2sgdG9cbiAgICAgIC8vIGxlYXJuIGl0cyB3b3JrZmxvdy1jb3JlIHZlcnNpb24sIHRoZW4gZGVyaXZlIHRoZSBjYXBhYmlsaXR5LiBUaGVcbiAgICAgIC8vIHByb2JlIGhhcyBhIHRpZ2h0IHRpbWVvdXQg4oCUIG9uIG1pc3MvZmFpbHVyZSB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4gICAgICAvLyBsZWdhY3kgcmF3IGJ5dGUgZm9ybWF0LCB3aGljaCBpcyB1bml2ZXJzYWxseSByZWFkYWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBXb3JsZHMgdGhhdCBkb24ndCBleHBvc2UgdGhlIGBzdHJlYW1zYCBBUEkgKGUuZy4gbWluaW1hbCB0ZXN0XG4gICAgICAvLyBtb2NrcykgY2FuJ3Qgc2VydmljZSBoZWFsdGggY2hlY2tzLCBzbyB3ZSBza2lwIHRoZSBwcm9iZSBmb3IgdGhlbS5cbiAgICAgIC8vIEdlbmVyYXRlIHJ1bklkIGNsaWVudC1zaWRlIHNvIHdlIGhhdmUgaXQgYmVmb3JlIHNlcmlhbGl6YXRpb25cbiAgICAgIC8vIChyZXF1aXJlZCBmb3IgZnV0dXJlIEUyRSBlbmNyeXB0aW9uIHdoZXJlIHJ1bklkIGlzIHBhcnQgb2YgdGhlXG4gICAgICAvLyBlbmNyeXB0aW9uIGNvbnRleHQpLiBXaGVuIHRoZSBXb3JsZCBwcm92aWRlcyBhIGBjcmVhdGVSdW5JZCgpYFxuICAgICAgLy8gaW1wbGVtZW50YXRpb24sIHVzZSBpdCBzbyB3b3JsZHMgY2FuIGVtYmVkIGltcGxlbWVudGF0aW9uLXNwZWNpZmljXG4gICAgICAvLyBtZXRhZGF0YSAoZS5nLiwgcmVnaW9uKSBpbnRvIHRoZSBJRCwgZm9yd2FyZGluZyB0aGUgZnVsbCBvcHRpb25zXG4gICAgICAvLyBiYWcgc28gd29ybGRzIGNhbiByZWFkIHdoaWNoZXZlciBmaWVsZHMgdGhleSByZWNvZ25pc2U7IG90aGVyd2lzZVxuICAgICAgLy8gZmFsbCBiYWNrIHRvIGEgc3RhbmRhcmQgbW9ub3RvbmljIFVMSUQuXG4gICAgICBjb25zdCBydW5JZCA9IGB3cnVuXyR7XG4gICAgICAgIHdvcmxkLmNyZWF0ZVJ1bklkXG4gICAgICAgICAgPyB3b3JsZC5jcmVhdGVSdW5JZChvcHRzIGFzIFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PilcbiAgICAgICAgICA6IHVsaWQoKVxuICAgICAgfWA7XG5cbiAgICAgIGxldCBmcmFtZWRCeXRlU3RyZWFtczogYm9vbGVhbjtcbiAgICAgIGxldCB0YXJnZXRTdXBwb3J0c0NvbXByZXNzaW9uOiBib29sZWFuO1xuICAgICAgLy8gVGhlIGNvbnN1bWVyJ3MgaG9vay1yZXN1bWUgcHJvdG9jb2wgdmVyc2lvbiwgc3RhbXBlZCBvbnRvIHRoZSBuZXcgcnVuXG4gICAgICAvLyBzbyBhIGxhdGVyIGByZXN1bWVIb29rKClgIGdhdGVzIGl0cyBwYXJhbGxlbCBwYXRoIG9uIHRoZSBkZXBsb3ltZW50XG4gICAgICAvLyB0aGF0IHdpbGwgYWN0dWFsbHkgY29uc3VtZSB0aGUgcXVldWUgbWVzc2FnZS4gYHVuZGVmaW5lZGAgbWVhbnMgXCJjb3VsZFxuICAgICAgLy8gbm90IGF0dGVzdFwiIGFuZCBmYWlscyB0aGUgZ2F0ZSBjbG9zZWQuXG4gICAgICBsZXQgdGFyZ2V0SG9va1Jlc3VtZUlucHV0VmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgLy8gUHVibGljIGtleSBvZiB0aGUgdGFyZ2V0IHJ1biwgd2hlbiB0aGUgY2FwYWJpbGl0eSBwcm9iZSB3YXMgYWJsZSB0b1xuICAgICAgLy8gc3VwcGx5IG9uZSAoY3Jvc3MtZGVwbG95bWVudCBvbmx5KS5cbiAgICAgIGxldCBwcm9iZWRSdW5QdWJsaWNLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChkZXBsb3ltZW50SWQgPT09IGN1cnJlbnREZXBsb3ltZW50SWQpIHtcbiAgICAgICAgZnJhbWVkQnl0ZVN0cmVhbXMgPSB0cnVlO1xuICAgICAgICB0YXJnZXRTdXBwb3J0c0NvbXByZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgLy8gU2FtZSBkZXBsb3ltZW50OiB0aGlzIHByb2Nlc3MgaXMgdGhlIGNvbnN1bWVyLCBzbyBpdHMgb3duIGNvbnN0YW50XG4gICAgICAgIC8vIGlzIGF1dGhvcml0YXRpdmUuXG4gICAgICAgIHRhcmdldEhvb2tSZXN1bWVJbnB1dFZlcnNpb24gPSBIT09LX1JFU1VNRV9JTlBVVF9WRVJTSU9OO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd29ybGQuc3RyZWFtcz8uZ2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZyYW1lZEJ5dGVTdHJlYW1zID0gZmFsc2U7XG4gICAgICAgIHRhcmdldFN1cHBvcnRzQ29tcHJlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgLy8gTm8gcHJvYmUgY2hhbm5lbCB0byB0aGUgdGFyZ2V0IOKAlCBjYW5ub3QgYXR0ZXN0IHRoZSBjb25zdW1lciBob25vcnNcbiAgICAgICAgLy8gYGhvb2tJbnB1dGAsIHNvIGxlYXZlIHRoZSBtYXJrZXIgb2ZmIChmYWlsIGNsb3NlZCB0byBzZXF1ZW50aWFsKS5cbiAgICAgICAgdGFyZ2V0SG9va1Jlc3VtZUlucHV0VmVyc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFzayBmb3IgdGhpcyBydW4ncyBwdWJsaWMga2V5IHdoaWxlIHdlJ3JlIGhlcmUuIFRoZSBwcm9iZSBhbHJlYWR5XG4gICAgICAgIC8vIGJsb2NrcyBgc3RhcnQoKWAgb24gZXZlcnkgY3Jvc3MtZGVwbG95bWVudCBjYWxsLCBhbmQgdGhlIHJlc3BvbmRlclxuICAgICAgICAvLyBleGVjdXRlcyBpbnNpZGUgdGhlIHRhcmdldCBkZXBsb3ltZW50IHdoZXJlIHRoZSBrZXkgbWF0ZXJpYWwgaXNcbiAgICAgICAgLy8gbG9jYWwg4oCUIHNvIHRoZSBrZXkgY29tZXMgYmFjayBmb3IgZnJlZSBvbiBhIHJlc3BvbnNlIHdlIGFyZVxuICAgICAgICAvLyBhbHJlYWR5IGF3YWl0aW5nLCBhbmQgd2UgY2FuIHNraXAgdGhlIGtleS1sb29rdXAgQVBJIHJlcXVlc3RcbiAgICAgICAgLy8gZW50aXJlbHkuIEJlc3QtZWZmb3J0OiBvbiB0aW1lb3V0IG9yIGFuIG9sZGVyIHRhcmdldCwgbm8ga2V5IGNvbWVzXG4gICAgICAgIC8vIGJhY2sgYW5kIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgcmVndWxhciBsb29rdXAgYmVsb3cuXG4gICAgICAgIGNvbnN0IHByb2JlID0gYXdhaXQgaGVhbHRoQ2hlY2sod29ybGQsIHtcbiAgICAgICAgICBkZXBsb3ltZW50SWQsXG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgICAgdGltZW91dDogQ1JPU1NfREVQTE9ZTUVOVF9DQVBBQklMSVRZX1BST0JFX1RJTUVPVVRfTVMsXG4gICAgICAgICAgbmFtZXNwYWNlOiBvcHRzLm5hbWVzcGFjZSxcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgcHJvYmVkUnVuUHVibGljS2V5ID0gcHJvYmU/LmVuY3J5cHRpb25QdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGdldFJ1bkNhcGFiaWxpdGllcyhwcm9iZT8ud29ya2Zsb3dDb3JlVmVyc2lvbik7XG4gICAgICAgIGZyYW1lZEJ5dGVTdHJlYW1zID0gY2FwYWJpbGl0aWVzLmZyYW1lZEJ5dGVTdHJlYW1zO1xuICAgICAgICB0YXJnZXRTdXBwb3J0c0NvbXByZXNzaW9uID0gY2FwYWJpbGl0aWVzLnN1cHBvcnRlZEZvcm1hdHMuaGFzKFxuICAgICAgICAgIFNlcmlhbGl6YXRpb25Gb3JtYXQuR1pJUFxuICAgICAgICApO1xuICAgICAgICAvLyBUaGUgcmVzcG9uZGVyIHJ1bnMgaW5zaWRlIHRoZSB0YXJnZXQgZGVwbG95bWVudCwgc28gaXRzXG4gICAgICAgIC8vIGBob29rUmVzdW1lSW5wdXRWZXJzaW9uYCByZWZsZWN0cyB0aGUgY29uc3VtZXIuIFVuZGVmaW5lZCBvbiBhblxuICAgICAgICAvLyBvbGRlciB0YXJnZXQgb3IgYSBwcm9iZSB0aW1lb3V0IOKAlCBsZWF2aW5nIHRoZSBtYXJrZXIgb2ZmLlxuICAgICAgICB0YXJnZXRIb29rUmVzdW1lSW5wdXRWZXJzaW9uID0gcHJvYmU/Lmhvb2tSZXN1bWVJbnB1dFZlcnNpb247XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICAgIC8vIFNlcmlhbGl6ZSBjdXJyZW50IHRyYWNlIGNvbnRleHQgdG8gcHJvcGFnYXRlIGFjcm9zcyBxdWV1ZSBib3VuZGFyeVxuICAgICAgY29uc3QgdHJhY2VDYXJyaWVyID0gYXdhaXQgc2VyaWFsaXplVHJhY2VDYXJyaWVyKCk7XG5cbiAgICAgIC8vIERlZmF1bHQgbmV3IHJ1bnMgdG8gdGhlIGNvbmZpZ3VyZWQgd29ybGQncyBzcGVjIHZlcnNpb24uIFRoZSB3b3JsZFxuICAgICAgLy8gaXRzZWxmIGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBhZ2FpbnN0IHRoaXMgcnVudGltZSdzIHNwZWMgdmVyc2lvbi5cbiAgICAgIGNvbnN0IHNwZWNWZXJzaW9uID0gb3B0cy5zcGVjVmVyc2lvbiA/PyB3b3JsZC5zcGVjVmVyc2lvbjtcbiAgICAgIGNvbnN0IHYxQ29tcGF0ID0gaXNMZWdhY3lTcGVjVmVyc2lvbihzcGVjVmVyc2lvbik7XG4gICAgICBjb25zdCBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9IG9wdHMuYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPT09IHRydWU7XG4gICAgICBsZXQgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvcHRzLmF0dHJpYnV0ZXMgJiYgT2JqZWN0LmtleXMob3B0cy5hdHRyaWJ1dGVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzcGVjVmVyc2lvbiA8IFNQRUNfVkVSU0lPTl9TVVBQT1JUU19BVFRSSUJVVEVTKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgJ0luaXRpYWwgd29ya2Zsb3cgYXR0cmlidXRlcyByZXF1aXJlIGEgV29ybGQgdGhhdCBzdXBwb3J0cyBzcGVjIHZlcnNpb24gNCBvciBsYXRlci4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBgbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlc2AgdHJlYXRzIGB1bmRlZmluZWRgIGFzIFwicmVtb3ZlIHRoaXNcbiAgICAgICAgLy8ga2V5XCIsIHdoaWNoIGlzIG1lYW5pbmdsZXNzIGF0IGNyZWF0aW9uIHRpbWUg4oCUIHJlamVjdCBpdCB1cCBmcm9udFxuICAgICAgICAvLyBzbyBKUyBjYWxsZXJzIGdldCBhIGNsZWFyIGVycm9yIGluc3RlYWQgb2YgYSBkb3duc3RyZWFtIHNjaGVtYVxuICAgICAgICAvLyBmYWlsdXJlICh0aGUgdHlwZXMgYWxyZWFkeSBmb3JiaWQgbm9uLXN0cmluZyB2YWx1ZXMpLlxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRzLmF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICAgYEluaXRpYWwgd29ya2Zsb3cgYXR0cmlidXRlICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0gbXVzdCBiZSBhIHN0cmluZyB2YWx1ZS5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhvcHRzLmF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgY2hhbmdlcy5tYXAoKHsga2V5LCB2YWx1ZSB9KSA9PiBba2V5LCB2YWx1ZSBhcyBzdHJpbmddKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDcm9zcy1ydW4gbGluZWFnZTogdGhlIHJlc2VydmVkIGtleXMgcmlkZSBvbiB0aGUgcnVuJ3MgZXhpc3RpbmdcbiAgICAgIC8vIGF0dHJpYnV0ZXMsIHNvIHRoZXkgYWRkIG5vIGV4dHJhIHdyaXRlLiBDYWxsZXIgYXR0cmlidXRlcyBhcmUgc3ByZWFkXG4gICAgICAvLyBsYXN0LCBzbyBhIGNhbGxlciB3aXRoIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzIGNhbiBkZWxpYmVyYXRlbHlcbiAgICAgIC8vIHJlLXBhcmVudC5cbiAgICAgIGNvbnN0IGxpbmVhZ2UgPVxuICAgICAgICBzcGVjVmVyc2lvbiA+PSBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQVRUUklCVVRFU1xuICAgICAgICAgID8gcmVzb2x2ZUxpbmVhZ2VBdHRyaWJ1dGVzKClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJ1bkF0dHJpYnV0ZXMgPSBsaW5lYWdlXG4gICAgICAgID8geyAuLi5saW5lYWdlLCAuLi5hdHRyaWJ1dGVzIH1cbiAgICAgICAgOiBhdHRyaWJ1dGVzO1xuXG4gICAgICAvLyBTaGFyZWQgYnkgdGhlIHJ1bl9jcmVhdGVkIGV2ZW50IGFuZCB0aGUgcmVzaWxpZW50LXN0YXJ0IHF1ZXVlIGlucHV0LlxuICAgICAgY29uc3QgYXR0cmlidXRlU2VlZCA9IHJ1bkF0dHJpYnV0ZXNcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBydW5BdHRyaWJ1dGVzLFxuICAgICAgICAgICAgLi4uKGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzIHx8IGxpbmVhZ2UgIT0gbnVsbFxuICAgICAgICAgICAgICA/IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgYXMgY29uc3QgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge307XG5cbiAgICAgIC8vIGByZXBsYXllZEZyb21SdW5JZGAgaXMgYSBmb3JlaWduIGtleSB0byB0aGUgc291cmNlIHJ1bjsgcmVqZWN0IGFueXRoaW5nXG4gICAgICAvLyB0aGF0IGlzbid0IGEgcmVhbCBydW4gSUQgc28gdGhlIGxpbmVhZ2UgbGluayBjYW4ndCBwb2ludCBhdCBnYXJiYWdlLlxuICAgICAgaWYgKFxuICAgICAgICBvcHRzLnJlcGxheWVkRnJvbVJ1bklkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIXdvcmtmbG93UnVuSWRTY2hlbWEuc2FmZVBhcnNlKG9wdHMucmVwbGF5ZWRGcm9tUnVuSWQpLnN1Y2Nlc3NcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgYHJlcGxheWVkRnJvbVJ1bklkIG11c3QgYmUgYSBydW4gSUQgKHdydW5fPHVsaWQ+KTsgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIFN0cmluZyhvcHRzLnJlcGxheWVkRnJvbVJ1bklkKS5zbGljZSgwLCA2NClcbiAgICAgICAgICApfS5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc29sdmUgZW5jcnlwdGlvbiBrZXkgZm9yIHRoZSBuZXcgcnVuLiBUaGUgcnVuSWQgaGFzIGFscmVhZHkgYmVlblxuICAgICAgLy8gZ2VuZXJhdGVkIGFib3ZlIChjbGllbnQtZ2VuZXJhdGVkIFVMSUQpIGFuZCB3aWxsIGJlIHVzZWQgZm9yIGJvdGhcbiAgICAgIC8vIGtleSBkZXJpdmF0aW9uIGFuZCB0aGUgcnVuX2NyZWF0ZWQgZXZlbnQuIFRoZSBXb3JsZCBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gdXNlcyB0aGUgcnVuSWQgZm9yIHBlci1ydW4gSEtERiBrZXkgZGVyaXZhdGlvbi4gV2UgcGFzcyB0aGUgcmVzb2x2ZWRcbiAgICAgIC8vIGRlcGxveW1lbnRJZCAobm90IGp1c3QgdGhlIHJhdyBvcHRzKSBzbyB0aGUgV29ybGQgY2FuIHVzZSBpdCBmb3JcbiAgICAgIC8vIGtleSByZXNvbHV0aW9uIGV2ZW4gd2hlbiBkZXBsb3ltZW50SWQgd2FzIGluZmVycmVkIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAgICAvLyByYXRoZXIgdGhhbiBleHBsaWNpdGx5IHByb3ZpZGVkIGluIG9wdHMgKGUuZy4sIGluIGUyZSB0ZXN0IHJ1bm5lcnMpLlxuICAgICAgLy8gUmVzb2x2ZSBob3cgdG8gZW5jcnlwdCB0aGUgd29ya2Zsb3cgYXJndW1lbnRzLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWZlcnJlZDogdGhlIGNhcGFiaWxpdHkgcHJvYmUgYWxyZWFkeSB0b2xkIHVzIHRoaXMgcnVuJ3MgcHVibGljXG4gICAgICAvLyBrZXksIHNvIHNlYWwgdG8gaXQuIFRoYXQgc2tpcHMgYGdldEVuY3J5cHRpb25LZXlGb3JSdW5gLCB3aGljaCBmb3IgYVxuICAgICAgLy8gY3Jvc3MtZGVwbG95bWVudCBzdGFydCBpcyBhIGBydW4ta2V5YCBBUEkgcmVxdWVzdCDigJQgdGhlIGxhc3Qgb25lIGxlZnRcbiAgICAgIC8vIG9uIHRoaXMgcGF0aC4gSXQgaXMgYWxzbyBhIHByaXZpbGVnZSByZWR1Y3Rpb246IHRoZSBjYWxsZXIgZW5kcyB1cFxuICAgICAgLy8gYWJsZSB0byB3cml0ZSB0aGUgYXJndW1lbnRzIGJ1dCBub3QgcmVhZCB0aGVtIGJhY2ssIHdoZXJlYXMgZmV0Y2hpbmdcbiAgICAgIC8vIHRoZSBzeW1tZXRyaWMga2V5IGdyYW50cyBmdWxsIHJlYWQgYWNjZXNzIHRvIGEgcnVuIGl0IG1lcmVseVxuICAgICAgLy8gbGF1bmNoZWQuXG4gICAgICBjb25zdCBwcm9iZWRQdWJsaWNLZXkgPSBkZWNvZGVSdW5QdWJsaWNLZXkocHJvYmVkUnVuUHVibGljS2V5KTtcblxuICAgICAgbGV0IGVuY3J5cHRpb25LZXk6IFBheWxvYWRLZXkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZW5jcnlwdGlvblB1YmxpY0tleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAocHJvYmVkUHVibGljS2V5KSB7XG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSBzZWFsVG8ocHJvYmVkUHVibGljS2V5KTtcbiAgICAgICAgZW5jcnlwdGlvblB1YmxpY0tleSA9IHByb2JlZFJ1blB1YmxpY0tleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd0tleSA9IGF3YWl0IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4/LihydW5JZCwge1xuICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgICB9KTtcbiAgICAgICAgZW5jcnlwdGlvbktleSA9IHJhd0tleSA/IGF3YWl0IGltcG9ydEtleShyYXdLZXkpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFB1Ymxpc2ggdGhlIHJ1bidzIFgyNTUxOSBwdWJsaWMga2V5IHNvIHRoYXQgY3Jvc3MtcnVuIHdyaXRlcnMgKGFcbiAgICAgICAgLy8gaG9vayByZXN1bXB0aW9uIGZyb20gYW5vdGhlciBkZXBsb3ltZW50LCBhIHNpYmxpbmcgd3JpdGluZyBpbnRvIGFcbiAgICAgICAgLy8gZm9yd2FyZGVkIHN0cmVhbSkgY2FuIHNlYWwgcGF5bG9hZHMgKnRvKiB0aGlzIHJ1biB3aXRob3V0IGhvbGRpbmdcbiAgICAgICAgLy8gaXRzIHN5bW1ldHJpYyBrZXkuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFByZXNlbmNlIG9mIHRoaXMgZmllbGQgaXMgdGhlIHdyaXRlci1zaWRlIGdhdGUgZm9yIHNlYWxlZFxuICAgICAgICAvLyBlbnZlbG9wZXMsIHNvIGl0IG11c3Qgb25seSBiZSBzdGFtcGVkIHdoZW4gdGhpcyBydW50aW1lIGNvdWxkXG4gICAgICAgIC8vIGl0c2VsZiBvcGVuIG9uZS4gVGhhdCBob2xkcyBieSBjb25zdHJ1Y3Rpb24gaGVyZTogZGVyaXZhdGlvbiBhbmRcbiAgICAgICAgLy8gYGVuY3BgIGRpc3BhdGNoIGxpdmUgaW4gdGhlIHNhbWUgcGFja2FnZSwgc28gYW55IGNvcmUgdGhhdCBjYW5cbiAgICAgICAgLy8gc3RhbXAgY2FuIGFsc28gb3Blbi4gUnVucyBhcmUgcGlubmVkIHRvIHRoZWlyIGNyZWF0aW5nIGRlcGxveW1lbnQsXG4gICAgICAgIC8vIHNvIHRoZSBjYXBhYmlsaXR5IHRoaXMgYXR0ZXN0cyB0byBpcyBzdGlsbCBhY2N1cmF0ZSBhdCByZXN1bWUgdGltZS5cbiAgICAgICAgZW5jcnlwdGlvblB1YmxpY0tleSA9IHJhd0tleVxuICAgICAgICAgID8gYnl0ZXNUb0Jhc2U2NCgoYXdhaXQgZGVyaXZlUnVuS2V5UGFpcihyYXdLZXkpKS5wdWJsaWNLZXkpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBydW4gdmlhIHJ1bl9jcmVhdGVkIGV2ZW50IChldmVudC1zb3VyY2VkIGFyY2hpdGVjdHVyZSlcbiAgICAgIC8vIFBhc3MgY2xpZW50LWdlbmVyYXRlZCBydW5JZCAtIHNlcnZlciB3aWxsIGFjY2VwdCBhbmQgdXNlIGl0XG4gICAgICAvLyBDb21wcmVzcyB3b3JrZmxvdyBhcmd1bWVudHMgb25seSB3aGVuIHRoZSBydW4gaXRzZWxmIGlzIG1hcmtlZCBhc1xuICAgICAgLy8gcG9zc2libHkgY29udGFpbmluZyBjb21wcmVzc2VkIHBheWxvYWRzIChzcGVjVmVyc2lvbiA+PSA1KSBBTkQgdGhlXG4gICAgICAvLyB0YXJnZXQgZGVwbG95bWVudCBjYW4gZGVjb2RlIHRoZW0gKHNhbWUtZGVwbG95bWVudCwgb3IgcHJvYmVkXG4gICAgICAvLyBjYXBhYmlsaXR5IGZvciBjcm9zcy1kZXBsb3ltZW50IHN0YXJ0cykuXG4gICAgICBjb25zdCBjb21wcmVzc2lvbiA9XG4gICAgICAgIHRhcmdldFN1cHBvcnRzQ29tcHJlc3Npb24gJiZcbiAgICAgICAgc3BlY1ZlcnNpb24gPj0gU1BFQ19WRVJTSU9OX1NVUFBPUlRTX0NPTVBSRVNTSU9OO1xuICAgICAgY29uc3Qgd29ya2Zsb3dBcmd1bWVudHMgPSBhd2FpdCBkZWh5ZHJhdGVXb3JrZmxvd0FyZ3VtZW50cyhcbiAgICAgICAgYXJncyxcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIG9wcyxcbiAgICAgICAgZ2xvYmFsVGhpcyxcbiAgICAgICAgdjFDb21wYXQsXG4gICAgICAgIGZyYW1lZEJ5dGVTdHJlYW1zLFxuICAgICAgICBjb21wcmVzc2lvblxuICAgICAgKTtcblxuICAgICAgLy8gVGhlIGVudmlyb25tZW50IHRoaXMgY2FsbGVyJ3Mgb3duIGBydW5fY3JlYXRlZGAgd3JpdGUgaXMgYXR0cmlidXRlZFxuICAgICAgLy8gdG8uIFN0YW1wZWQgaW50byB0aGUgcXVldWUgbWVzc2FnZSdzIGBydW5JbnB1dGAgKE5PVCBpbnRvXG4gICAgICAvLyBgcnVuX2NyZWF0ZWRgLCB3aG9zZSB0ZW5hbnQgdGhlIGJhY2tlbmQgYWxyZWFkeSBrbm93cykgc28gdGhlXG4gICAgICAvLyBkZXBsb3ltZW50IHRoYXQgY29uc3VtZXMgdGhlIG1lc3NhZ2UgY2FuIHRlbGwgd2hldGhlciB0aGUgcnVuIGl0IGlzXG4gICAgICAvLyBiZWluZyBhc2tlZCB0byByZXNpbGllbnRseSBjcmVhdGUgd2FzIGNyZWF0ZWQgYWdhaW5zdCBhIGRpZmZlcmVudFxuICAgICAgLy8gZW52aXJvbm1lbnQgdGhhbiBpdHMgb3duLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB0d28gd3JpdGVzIGJlbG93IGdvIHRvIGRpZmZlcmVudCBwbGFjZXMgYnkgZGlmZmVyZW50IHJvdXRlczpcbiAgICAgIC8vIGBldmVudHMuY3JlYXRlYCBpcyBhdHRyaWJ1dGVkIHRvIFRISVMgY2xpZW50J3MgdGVuYW50LCB3aGlsZSB0aGUgcXVldWVcbiAgICAgIC8vIG1lc3NhZ2UgaXMgcGlubmVkIHRvIGEgZGVwbG95bWVudElkLiBXaGVuIHRob3NlIGRpc2FncmVlIOKAlCBhXG4gICAgICAvLyBwcm9kdWN0aW9uLWNyZWRlbnRpYWxlZCBjbGllbnQgcGlubmluZyBhIHByZXZpZXcgZGVwbG95bWVudCDigJQgdGhlXG4gICAgICAvLyBwcmV2aWV3IGNvbnN1bWVyIGNhbid0IGZpbmQgdGhlIHJ1biBpbiBpdHMgb3duIHRlbmFudCwgZmFsbHMgYmFjayB0b1xuICAgICAgLy8gcmVzaWxpZW50IHN0YXJ0LCBhbmQgcmUtY3JlYXRlcyBpdDogb25lIGNsaWVudC1taW50ZWQgcnVuIGlkLCB0d29cbiAgICAgIC8vIGVudmlyb25tZW50cywgdGhlIHByb2R1Y3Rpb24gY29weSBwZW5kaW5nIGZvcmV2ZXIgYW5kIHRoZSBwcmV2aWV3IGNvcHlcbiAgICAgIC8vIGV4ZWN1dGluZy4gV29ybGRzIHdpdGggYSBzaW5nbGUgdGVuYW50IHJldHVybiB1bmRlZmluZWQgYW5kIHRoZSBmaWVsZFxuICAgICAgLy8gaXMgc2ltcGx5IGFic2VudC5cbiAgICAgIGNvbnN0IGNyZWF0b3JFbnZpcm9ubWVudCA9IHdvcmxkLmdldEVudmlyb25tZW50Py4oKTtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgdHJhY2VDYXJyaWVyLFxuICAgICAgICB3b3JrZmxvd0NvcmVWZXJzaW9uLFxuICAgICAgICBmZWF0dXJlczogeyBlbmNyeXB0aW9uOiAhIWVuY3J5cHRpb25LZXkgfSxcbiAgICAgICAgLy8gQXR0ZXN0IHRoYXQgdGhlICpjb25zdW1lciogZGVwbG95bWVudCdzIHJ1bnRpbWUgcmUtZW5zdXJlcyBhXG4gICAgICAgIC8vIGBob29rX3JlY2VpdmVkYCBldmVudCBmcm9tIGEgcXVldWUgbWVzc2FnZSdzIGBob29rSW5wdXRgIG9uIHJlcGxheS5cbiAgICAgICAgLy8gQSByZXN1bWUgb2YgdGhpcyBydW4gcmVhZHMgdGhlIG1hcmtlciAobWlycm9yZWQgb250byB0aGUgaG9vaydzXG4gICAgICAgIC8vIHJlc3VtZUNvbnRleHQgYnkgdGhlIHNlcnZlcikgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHBhcmFsbGVsIGZhc3RcbiAgICAgICAgLy8gcGF0aCBpcyBzYWZlLiBGb3IgYSBjcm9zcy1kZXBsb3ltZW50IHN0YXJ0IHRoZSBjb25zdW1lciBpcyB0aGVcbiAgICAgICAgLy8gdGFyZ2V0IGRlcGxveW1lbnQsIHNvIHdlIHN0YW1wIHRoZSAqdGFyZ2V0J3MqIHZhbHVlIGNhcnJpZWQgYmFjayBvblxuICAgICAgICAvLyB0aGUgaGVhbHRoLWNoZWNrIHByb2JlIOKAlCBuZXZlciB0aGUgY2FsbGVyJ3MuIE9taXR0ZWQgd2hlbiB3ZSBjb3VsZFxuICAgICAgICAvLyBub3QgYXR0ZXN0IHRoZSB0YXJnZXQgKG9sZGVyIHRhcmdldCwgdGltZW91dCwgb3Igbm8gcHJvYmUgY2hhbm5lbCksXG4gICAgICAgIC8vIHdoaWNoIGZhaWxzIHRoZSByZXN1bWUgZ2F0ZSBjbG9zZWQgdG8gdGhlIHNlcXVlbnRpYWwgcGF0aC5cbiAgICAgICAgLi4uKHRhcmdldEhvb2tSZXN1bWVJbnB1dFZlcnNpb24gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBob29rUmVzdW1lSW5wdXRWZXJzaW9uOiB0YXJnZXRIb29rUmVzdW1lSW5wdXRWZXJzaW9uIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKG9wdHMucmVwbGF5ZWRGcm9tUnVuSWRcbiAgICAgICAgICA/IHsgcmVwbGF5ZWRGcm9tUnVuSWQ6IG9wdHMucmVwbGF5ZWRGcm9tUnVuSWQgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2FsbCBldmVudHMuY3JlYXRlIChydW5fY3JlYXRlZCkgYW5kIHF1ZXVlIGluIHBhcmFsbGVsLlxuICAgICAgLy8gSWYgZXZlbnRzLmNyZWF0ZSBmYWlscyB3aXRoIDQyOS81eHgsIHRoZSBydW4gd2FzIHN0aWxsIGFjY2VwdGVkXG4gICAgICAvLyB2aWEgdGhlIHF1ZXVlIGFuZCBjcmVhdGlvbiB3aWxsIGJlIHJlLXRyaWVkIGFzeW5jIGJ5IHRoZSBydW50aW1lLlxuICAgICAgY29uc3QgW3J1bkNyZWF0ZWRSZXN1bHQsIHF1ZXVlUmVzdWx0XSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgIHdvcmxkLmV2ZW50cy5jcmVhdGUoXG4gICAgICAgICAgcnVuSWQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXZlbnRUeXBlOiAncnVuX2NyZWF0ZWQnLFxuICAgICAgICAgICAgc3BlY1ZlcnNpb24sXG4gICAgICAgICAgICBldmVudERhdGE6IHtcbiAgICAgICAgICAgICAgZGVwbG95bWVudElkOiBkZXBsb3ltZW50SWQsXG4gICAgICAgICAgICAgIHdvcmtmbG93TmFtZTogd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICBpbnB1dDogd29ya2Zsb3dBcmd1bWVudHMsXG4gICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLihlbmNyeXB0aW9uUHVibGljS2V5ID8geyBlbmNyeXB0aW9uUHVibGljS2V5IH0gOiB7fSksXG4gICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZVNlZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyB2MUNvbXBhdCB9XG4gICAgICAgICksXG4gICAgICAgIHdvcmxkLnF1ZXVlKFxuICAgICAgICAgIGdldFdvcmtmbG93UXVldWVOYW1lKHdvcmtmbG93TmFtZSwgb3B0cy5uYW1lc3BhY2UpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgICAgdHJhY2VDYXJyaWVyLFxuICAgICAgICAgICAgLi4uKHNwZWNWZXJzaW9uID49IFNQRUNfVkVSU0lPTl9TVVBQT1JUU19DQk9SX1FVRVVFX1RSQU5TUE9SVFxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHJ1bklucHV0OiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiB3b3JrZmxvd0FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgICAgICAgICAgICAgICB3b3JrZmxvd05hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAuLi4oZW5jcnlwdGlvblB1YmxpY0tleSA/IHsgZW5jcnlwdGlvblB1YmxpY0tleSB9IDoge30pLFxuICAgICAgICAgICAgICAgICAgICAuLi4oY3JlYXRvckVudmlyb25tZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgZW52aXJvbm1lbnQ6IGNyZWF0b3JFbnZpcm9ubWVudCB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZVNlZWQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfSBzYXRpc2ZpZXMgV29ya2Zsb3dJbnZva2VQYXlsb2FkLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgLy8gRm9yd2FyZCBhbnkgY2FsbGVyLXN1cHBsaWVkIHJlZ2lvbiBoaW50IHNvIHdvcmxkcyB3aXRoXG4gICAgICAgICAgICAvLyBwZXItcmVnaW9uIHF1ZXVlIHJvdXRpbmcgKGUuZy4gd29ybGQtdmVyY2VsKSBjYW4gdGFyZ2V0IHRoZVxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgcXVldWUuIFdvcmxkcyB3aXRob3V0IGEgcmVnaW9uYWwgZGltZW5zaW9uIGlnbm9yZVxuICAgICAgICAgICAgLy8gdGhpcyBmaWVsZC5cbiAgICAgICAgICAgIC4uLihvcHRzLnJlZ2lvbiAhPT0gdW5kZWZpbmVkID8geyByZWdpb246IG9wdHMucmVnaW9uIH0gOiB7fSksXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgXSk7XG5cbiAgICAgIC8vIFF1ZXVlIGZhaWx1cmUgaXMgYWx3YXlzIGZhdGFsIOKAlCB0aGUgcnVuIHdhcyBub3QgZW5xdWV1ZWRcbiAgICAgIGlmIChxdWV1ZVJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgdGhyb3cgcXVldWVSZXN1bHQucmVhc29uO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZXZlbnRzLmNyZWF0ZSByZXN1bHRcbiAgICAgIGxldCByZXNpbGllbnRTdGFydCA9IGZhbHNlO1xuICAgICAgaWYgKHJ1bkNyZWF0ZWRSZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHJ1bkNyZWF0ZWRSZXN1bHQucmVhc29uO1xuICAgICAgICBpZiAoRW50aXR5Q29uZmxpY3RFcnJvci5pcyhlcnIpKSB7XG4gICAgICAgICAgLy8gNDA5OiBUaGUgcnVuIGFscmVhZHkgZXhpc3RzLiBUaGlzIGNhbiBoYXBwZW4gaW4gZXh0cmVtZSBjYXNlcyB3aGVyZVxuICAgICAgICAgIC8vIHRoZSBydW4gY3JlYXRpb24gY2FsbCBnZXRzIGEgY29sZCBzdGFydCBvciBvdGhlciBzbG93ZG93biwgYW5kIHRoZSBxdWV1ZVxuICAgICAgICAgIC8vICsgcnVuX3N0YXJ0ZWQgY2FsbCBjb21wbGV0ZXMgZmFzdGVyLiBXZSBleHBlY3QgdGhpcyB0byBiZSA8PTElIG9mIGNhc2VzLlxuICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIHNhZmVseSByZXR1cm4uXG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZXRyeWFibGVXb3JsZEVycm9yKGVycikpIHtcbiAgICAgICAgICAvLyA0MjkgKFRocm90dGxlRXJyb3IpLCA1eHgsIGFuZCB0cmFuc2llbnQgdHJhbnNwb3J0IGZhaWx1cmVzXG4gICAgICAgICAgLy8gKFRSQU5TUE9SVC9USU1FT1VUKSBhcmUgcmV0cnlhYmxlIOKAlCB0aGUgcnVuIHdhcyBhY2NlcHRlZCB2aWEgdGhlXG4gICAgICAgICAgLy8gcXVldWUgYW5kIGNyZWF0aW9uIHdpbGwgYmUgcmUtdHJpZWQgYnkgdGhlIHJ1bnRpbWUgd2hlbiBpdCBjYWxsc1xuICAgICAgICAgIC8vIHJ1bl9zdGFydGVkLlxuICAgICAgICAgIHJlc2lsaWVudFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgICBydW50aW1lTG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAnUnVuIGNyZWF0aW9uIGV2ZW50IGZhaWxlZCwgYnV0IHRoZSBydW4gd2FzIGFjY2VwdGVkIHZpYSB0aGUgcXVldWUuICcgK1xuICAgICAgICAgICAgICAnVGhlIHJ1bl9jcmVhdGVkIGV2ZW50IHdpbGwgYmUgcmUtdHJpZWQgYXN5bmMgYnkgdGhlIHJ1bnRpbWUuJyxcbiAgICAgICAgICAgIHsgd29ya2Zsb3dSdW5JZDogcnVuSWQsIGVycm9yOiBlcnIubWVzc2FnZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJ1bkNyZWF0ZWRSZXN1bHQudmFsdWU7XG4gICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBydW4gd2FzIGNyZWF0ZWRcbiAgICAgICAgaWYgKCFyZXN1bHQucnVuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgXCJNaXNzaW5nICdydW4nIGluIHNlcnZlciByZXNwb25zZSBmb3IgJ3J1bl9jcmVhdGVkJyBldmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZlcmlmeSBzZXJ2ZXIgYWNjZXB0ZWQgb3VyIHJ1bklkXG4gICAgICAgIGlmICghdjFDb21wYXQgJiYgcmVzdWx0LnJ1bi5ydW5JZCAhPT0gcnVuSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICBgU2VydmVyIHJldHVybmVkIGRpZmZlcmVudCBydW5JZCB0aGFuIHJlcXVlc3RlZDogZXhwZWN0ZWQgJHtydW5JZH0sIGdvdCAke3Jlc3VsdC5ydW4ucnVuSWR9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlc2UgYXJndW1lbnQtc3RyZWFtIG9wcyBhcmUgZmx1c2hlZCBpbiB0aGUgYmFja2dyb3VuZDsgdGhlIHByb21pc2VcbiAgICAgIC8vIGhhbmRlZCB0byB3YWl0VW50aWwgbXVzdCBuZXZlciByZWplY3QgKGFuIHVuY29uc3VtZWQgd2FpdFVudGlsXG4gICAgICAvLyByZWplY3Rpb24gY3Jhc2hlcyB0aGUgcHJvY2VzcyBhcyB1bmhhbmRsZWRSZWplY3Rpb24pLCBzbyB1bmV4cGVjdGVkXG4gICAgICAvLyBmYWlsdXJlcyBhcmUgbG9nZ2VkIGluc3RlYWQuXG4gICAgICBzYWZlV2FpdFVudGlsKFByb21pc2UuYWxsKG9wcyksIChlcnIpID0+IHtcbiAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgICAgICdCYWNrZ3JvdW5kIGZsdXNoIG9mIHdvcmtmbG93IGFyZ3VtZW50IHN0cmVhbXMgZmFpbGVkJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB3b3JrZmxvd1J1bklkOiBydW5JZCxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dSdW5JZChydW5JZCksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5EZXBsb3ltZW50SWQoZGVwbG95bWVudElkKSxcbiAgICAgICAgLi4uKHJ1bkNyZWF0ZWRSZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJlxuICAgICAgICBydW5DcmVhdGVkUmVzdWx0LnZhbHVlLnJ1blxuICAgICAgICAgID8gQXR0cmlidXRlLldvcmtmbG93UnVuU3RhdHVzKHJ1bkNyZWF0ZWRSZXN1bHQudmFsdWUucnVuLnN0YXR1cylcbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IFJ1bjxUUmVzdWx0PihydW5JZCwgeyByZXNpbGllbnRTdGFydCB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|
|
445
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9zdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRSxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLGdDQUFnQyxFQUNoQywwQ0FBMEMsRUFDMUMsaUNBQWlDLEVBQ2pDLG1CQUFtQixHQUNwQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsMEJBQTBCLEVBRTFCLG1CQUFtQixFQUNuQixNQUFNLEdBQ1AsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLFNBQVMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFF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TSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FDN0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUVELHVFQUF1RTtZQUN2RSxpRUFBaUU7WUFDakUsc0VBQXNFO1lBQ3RFLCtCQUErQjtZQUMvQixhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN0QyxhQUFhLENBQUMsSUFBSSxDQUNoQixzREFBc0QsRUFDdEQ7b0JBQ0UsYUFBYSxFQUFFLEtBQUs7b0JBQ3BCLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUN4RCxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksRUFBRSxhQUFhLENBQUM7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pDLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssV0FBVztvQkFDM0MsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUc7b0JBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUixDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksR0FBRyxDQUFVLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlDb25mbGljdEVycm9yLCBXb3JrZmxvd1J1bnRpbWVFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgd29ya2Zsb3dEaXNwbGF5TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dJbnZva2VQYXlsb2FkLCBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQge1xuICBIT09LX1JFU1VNRV9JTlBVVF9WRVJTSU9OLFxuICBpc0xlZ2FjeVNwZWNWZXJzaW9uLFxuICBQQVJFTlRfUlVOX0lEX0FUVFJJQlVURSxcbiAgUk9PVF9SVU5fSURfQVRUUklCVVRFLFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQVRUUklCVVRFUyxcbiAgU1BFQ19WRVJTSU9OX1NVUFBPUlRTX0NCT1JfUVVFVUVfVFJBTlNQT1JULFxuICBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ09NUFJFU1NJT04sXG4gIHdvcmtmbG93UnVuSWRTY2hlbWEsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBtb25vdG9uaWNGYWN0b3J5IH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgeyBub3JtYWxpemVBdHRyaWJ1dGVDaGFuZ2VzIH0gZnJvbSAnLi4vYXR0cmlidXRlLWNoYW5nZXMuanMnO1xuaW1wb3J0IHsgZ2V0UnVuQ2FwYWJpbGl0aWVzIH0gZnJvbSAnLi4vY2FwYWJpbGl0aWVzLmpzJztcbmltcG9ydCB7IGlzUmV0cnlhYmxlV29ybGRFcnJvciB9IGZyb20gJy4uL2NsYXNzaWZ5LWVycm9yLmpzJztcbmltcG9ydCB7IGltcG9ydEtleSB9IGZyb20gJy4uL2VuY3J5cHRpb24uanMnO1xuaW1wb3J0IHsgcnVudGltZUxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZSB9IGZyb20gJy4uL3NjaGVtYXMuanMnO1xuaW1wb3J0IHtcbiAgYnl0ZXNUb0Jhc2U2NCxcbiAgZGVjb2RlUnVuUHVibGljS2V5LFxuICBkZXJpdmVSdW5LZXlQYWlyLFxufSBmcm9tICcuLi9zZWFsZWQtYm94LmpzJztcbmltcG9ydCB7XG4gIGRlaHlkcmF0ZVdvcmtmbG93QXJndW1lbnRzLFxuICB0eXBlIFBheWxvYWRLZXksXG4gIFNlcmlhbGl6YXRpb25Gb3JtYXQsXG4gIHNlYWxUbyxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgeyBjb250ZXh0U3RvcmFnZSB9IGZyb20gJy4uL3N0ZXAvY29udGV4dC1zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuaW1wb3J0IHsgc2VyaWFsaXplVHJhY2VDYXJyaWVyLCB0cmFjZSB9IGZyb20gJy4uL3RlbGVtZXRyeS5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIGFzIHdvcmtmbG93Q29yZVZlcnNpb24gfSBmcm9tICcuLi92ZXJzaW9uLmpzJztcbmltcG9ydCB7IGdldFdvcmxkTGF6eSB9IGZyb20gJy4vZ2V0LXdvcmxkLWxhenkuanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dRdWV1ZU5hbWUsIGhlYWx0aENoZWNrIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IFJ1biB9IGZyb20gJy4vcnVuLmpzJztcbmltcG9ydCB7IGdldFdvcmtmbG93Vm1Gcm9tRW52IH0gZnJvbSAnLi92bS1tb2RlLmpzJztcbmltcG9ydCB7IHNhZmVXYWl0VW50aWwsIHdhaXRlZFVudGlsIH0gZnJvbSAnLi93YWl0LXVudGlsLmpzJztcbmltcG9ydCB7IGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2wgfSBmcm9tICcuL3dvcmxkLWNvbXBhdGliaWxpdHkuanMnO1xuXG4vKipcbiAqIFRpbWVvdXQgZm9yIHRoZSBjcm9zcy1kZXBsb3ltZW50IGNhcGFiaWxpdHkgcHJvYmUgZG9uZSBiZWZvcmVcbiAqIGRlaHlkcmF0aW5nIHdvcmtmbG93IGFyZ3VtZW50cy4gS2VwdCB0aWdodCBvbiBwdXJwb3NlOiB0aGUgcHJvYmUgaXNcbiAqIGFuIG9wdGltaXphdGlvbiAoaXQgbGV0cyB0aGUgY2FsbGVyIGVtaXQgdGhlIGZyYW1lZCBieXRlLXN0cmVhbSB3aXJlXG4gKiBmb3JtYXQgd2hlbiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGl0KSwgYW5kIHRoZSBmYWxsYmFjayBvbiB0aW1lb3V0IGlzXG4gKiB0aGUgbGVnYWN5IHJhdyBmb3JtYXQgd2hpY2ggYWx3YXlzIHdvcmtzLiBMb25nIGRlbGF5cyBoZXJlIHdvdWxkIGp1c3RcbiAqIG1ha2UgYHN0YXJ0KHsgZGVwbG95bWVudElkOiAuLi4gfSlgIHNsb3dlciBmb3IgdXNlcnMgd2hvc2UgdGFyZ2V0XG4gKiBkZXBsb3ltZW50cyBkb24ndCByZWNvZ25pemUgdGhlIGhlYWx0aCBjaGVjayBhdCBhbGwuXG4gKi9cbmNvbnN0IENST1NTX0RFUExPWU1FTlRfQ0FQQUJJTElUWV9QUk9CRV9USU1FT1VUX01TID0gMl8wMDA7XG5cbi8qKiBVTElEIGdlbmVyYXRvciBmb3IgY2xpZW50LXNpZGUgcnVuSWQgZ2VuZXJhdGlvbiAqL1xuY29uc3QgdWxpZCA9IG1vbm90b25pY0ZhY3RvcnkoKTtcblxuLyoqXG4gKiBDcm9zcy1ydW4gbGluZWFnZSBmb3IgYSBydW4gYmVpbmcgc3RhcnRlZCBmcm9tIGluc2lkZSBhbm90aGVyIHJ1bi5cbiAqXG4gKiBUaGUgYW1iaWVudCBzdGVwIGNvbnRleHQgY2FycmllcyB0aGUgcGFyZW50IHJ1biBpZCBhbmQgdGhlIHJvb3Qgb2YgaXRzXG4gKiBsaW5lYWdlOyB0aGUgcnVudGltZSBmaWxscyBib3RoIGZyb20gdGhlIHJ1biBpdCBhbHJlYWR5IGhhcyBsb2FkZWQsIHNvIHRoaXNcbiAqIGlzIGEgcHVyZSBjb250ZXh0IHJlYWQgd2l0aCBubyBJL08uIFRoZSBuZXcgcnVuIHJlY29yZHMgYCRwYXJlbnRSdW5JZGAgKHRoZVxuICogZWRnZSkgYW5kIGluaGVyaXRzIHRoZSBwYXJlbnQncyBgJHJvb3RSdW5JZGAgKHRoZSBwYXJlbnQgaXRzZWxmIHdoZW4gaXQgaXMgYVxuICogcm9vdCksIHNvIGEgZGFpc3kgY2hhaW4gb3IgZmFuLW91dCBvZiBhbnkgZGVwdGggZ3JvdXBzIHVuZGVyIG9uZSByb290IGlkLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgYSB0b3AtbGV2ZWwgYHN0YXJ0KClgLCB3aGljaCBoYXMgbm8gY29udGV4dCwgc29cbiAqIHN0YW5kYWxvbmUgcnVucyBjYXJyeSBubyBsaW5lYWdlLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGluZWFnZUF0dHJpYnV0ZXMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN0b3JlID0gY29udGV4dFN0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgY29uc3QgcGFyZW50UnVuSWQgPSBzdG9yZT8ud29ya2Zsb3dNZXRhZGF0YT8ud29ya2Zsb3dSdW5JZDtcbiAgaWYgKCFwYXJlbnRSdW5JZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIFtST09UX1JVTl9JRF9BVFRSSUJVVEVdOiBzdG9yZS5yb290UnVuSWQgPz8gcGFyZW50UnVuSWQsXG4gICAgW1BBUkVOVF9SVU5fSURfQVRUUklCVVRFXTogcGFyZW50UnVuSWQsXG4gIH07XG59XG5cbi8vIGBkZXBsb3ltZW50SWQ6ICdsYXRlc3QnYCBpcyBhIG5vLW9wIGluIFdvcmxkcyB3aXRob3V0IGF0b21pYyBkZXBsb3ltZW50cy5cbi8vIFRoZSB3YXJuaW5nIHRoYXQgZXhwbGFpbnMgdGhpcyBvbmx5IG5lZWRzIHRvIGZpcmUgb25jZSBwZXIgcHJvY2VzczogYVxuLy8gd29ya2Zsb3cgdGhhdCBoYXJkY29kZXMgJ2xhdGVzdCcgZm9yIGl0cyBWZXJjZWwgZGVwbG95bWVudCB3b3VsZCBvdGhlcndpc2Vcbi8vIGxvZyBpdCBvbiBldmVyeSBsb2NhbC9Qb3N0Z3JlcyBydW4sIGZsb29kaW5nIHRpZ2h0IGRldiBsb29wcy5cbmxldCBoYXNXYXJuZWRMYXRlc3ROb09wID0gZmFsc2U7XG5cbi8qKlxuICogUmVzZXQgdGhlIGBkZXBsb3ltZW50SWQ6ICdsYXRlc3QnYCBuby1vcCB3YXJuLW9uY2UgZ3VhcmQuIFRlc3Qtb25seSDigJRcbiAqIGV4cG9ydGVkIHNvIHVuaXQgdGVzdHMgY2FuIGV4ZXJjaXNlIHRoZSB3YXJuIHBhdGggYWNyb3NzIGBzdGFydCgpYCBjYWxscy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldExhdGVzdE5vT3BXYXJuRm9yVGVzdHMoKTogdm9pZCB7XG4gIGhhc1dhcm5lZExhdGVzdE5vT3AgPSBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydE9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSB3b3JsZCB0byB1c2UgZm9yIHRoZSB3b3JrZmxvdyBydW4gY3JlYXRpb24sXG4gICAqIGJ5IGRlZmF1bHQgdGhlIHdvcmxkIGlzIGluZmVycmVkIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHdvcmxkPzogV29ybGQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzcGVjIHZlcnNpb24gdG8gdXNlIGZvciB0aGUgd29ya2Zsb3cgcnVuLiBEZWZhdWx0cyB0byB0aGUgbGF0ZXN0IHZlcnNpb24uXG4gICAqL1xuICBzcGVjVmVyc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgcmVnaW9uIGlkZW50aWZpZXIgZm9yIHRoZSBuZXcgcnVuLiBDdXJyZW50bHkgY29uc3VtZWQgb25seVxuICAgKiBieSBgQHdvcmtmbG93L3dvcmxkLXZlcmNlbGAsIHdoaWNoIGVtYmVkcyB0aGUgcmVnaW9uIGludG8gdGhlIHRhZ2dlZFxuICAgKiBydW4gSUQgYW5kIHJvdXRlcyB0aGUgaW5pdGlhbCB3b3JrZmxvdyBtZXNzYWdlIHRvIHRoZSBtYXRjaGluZ1xuICAgKiByZWdpb25hbCBxdWV1ZS4gV2hlbiBvbWl0dGVkLCB0aGUgd29ybGQgZmFsbHMgYmFjayB0byBpdHMgb3duXG4gICAqIGRlZmF1bHQgKGZvciBgd29ybGQtdmVyY2VsYDogdGhlIGBWRVJDRUxfUkVHSU9OYCBlbnZpcm9ubWVudFxuICAgKiB2YXJpYWJsZSwgdGhlbiB0aGUgc2VydmVyLXNpZGUgZGVmYXVsdCByZWdpb24gYGlhZDFgIOKAlCBhIGNvbmNyZXRlLFxuICAgKiByb3V0YWJsZSByZWdpb24gaXMgYWx3YXlzIGNob3NlbikuXG4gICAqXG4gICAqIFdvcmxkcyB3aXRob3V0IGEgcmVnaW9uYWwgZGltZW5zaW9uIGlnbm9yZSB0aGlzIGZpZWxkLlxuICAgKi9cbiAgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbGFpbnRleHQgYXR0cmlidXRlcyB0byBzZWVkIG9uIHRoZSBydW4gYXMgaXQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQXZhaWxhYmxlIGZvciBuYXRpdmUtYXR0cmlidXRlcyBydW5zIChzcGVjIHZlcnNpb24gNCBhbmQgbGF0ZXIpLlxuICAgKi9cbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFBlcm1pdCByZXNlcnZlZCBgJGAtcHJlZml4ZWQga2V5cyBpbiBgYXR0cmlidXRlc2AuIFRoZSBgJGAgbmFtZXNwYWNlXG4gICAqIGlzIHJlc2VydmVkIGZvciBmcmFtZXdvcmsvbGlicmFyeSBjb2RlIGJ1aWx0IG9uIHRvcCBvZiB0aGUgd29ya2Zsb3dcbiAgICogU0RLICh0ZWxlbWV0cnksIGFnZW50IG1ldGFkYXRhLCBwbGF0Zm9ybS1lbWl0dGVkIHRhZ3MsIGV0Yy4pOyB1c2VyXG4gICAqIGNvZGUgTVVTVCBOT1Qgd3JpdGUga2V5cyBpbiBpdCwgYW5kIHZhbGlkYXRpb24gcmVqZWN0cyB0aGVtIHNvXG4gICAqIGFjY2lkZW50YWwgY29sbGlzaW9ucyB3aXRoIHRvb2xpbmctb3duZWQga2V5cyBjYW4ndCBzbGlwIHRocm91Z2guXG4gICAqXG4gICAqIE9ubHkgZmxpcCB0aGlzIHRvIGB0cnVlYCBpZiB5b3VyIGNhbGxlciBpcyBpdHNlbGYgYSBmcmFtZXdvcmsgb3JcbiAgICogbGlicmFyeSB0aGF0IG93bnMgYSBgJGAtcHJlZml4ZWQgc3ViLW5hbWVzcGFjZSBhbmQga25vd3MgdGhlXG4gICAqIGNvbnZlbnRpb25zIG9mIGFueSBvdGhlciB0b29scyB3cml0aW5nIGludG8gaXQuIFNhbWUgc2VtYW50aWNzIGFzXG4gICAqIHRoZSBgc2V0QXR0cmlidXRlc2Agb3B0aW9uIG9mIHRoZSBzYW1lIG5hbWUuXG4gICAqL1xuICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBleGlzdGluZyBydW4gdGhpcyBydW4gaXMgYmVpbmcgcmVwbGF5ZWQgZnJvbSwgaWYgYW55LlxuICAgKlxuICAgKiBSZWNvcmRlZCBvbiB0aGUgbmV3IHJ1bidzIGBleGVjdXRpb25Db250ZXh0YCBhcyBgcmVwbGF5ZWRGcm9tUnVuSWRgIHNvXG4gICAqIHRvb2xpbmcgKGUuZy4gdGhlIGRhc2hib2FyZCBydW5zIGxpc3QpIGNhbiBzaG93IHRoYXQgYSBydW4gb3JpZ2luYXRlZCBhc1xuICAgKiBhIHJlcGxheSBhbmQgbGluayBiYWNrIHRvIGl0cyBzb3VyY2UuIFNldCBhdXRvbWF0aWNhbGx5IGJ5XG4gICAqIHtAbGluayByZWNyZWF0ZVJ1bkZyb21FeGlzdGluZ307IHRoZXJlJ3MgdXN1YWxseSBubyByZWFzb24gdG8gcGFzcyBpdFxuICAgKiBkaXJlY3RseS5cbiAgICpcbiAgICogTXVzdCBiZSBhIHJ1biBJRDogYHdydW5fYCBmb2xsb3dlZCBieSBhIDI2LWNoYXIgVUxJRC4gSXQncyBhIGZvcmVpZ24ga2V5XG4gICAqIHRvIHRoZSBzb3VyY2UgcnVuLCBzbyBgc3RhcnQoKWAgdmFsaWRhdGVzIHRoZSBleGFjdCBzaGFwZSBhbmQgcmVqZWN0c1xuICAgKiBhbnl0aGluZyBlbHNlIHJhdGhlciB0aGFuIHBlcnNpc3QgYSBsaW5lYWdlIGxpbmsgdGhhdCBwb2ludHMgYXQgZ2FyYmFnZS5cbiAgICovXG4gIHJlcGxheWVkRnJvbVJ1bklkPzogc3RyaW5nO1xuICAvKipcbiAgICogUXVldWUgbmFtZXNwYWNlIG9mIHRoZSB0YXJnZXQgZGVwbG95bWVudC4gU2NvcGVzIHRoZSB3b3JrZmxvdyBxdWV1ZVxuICAgKiB0b3BpYyB0byBgX197bmFtZXNwYWNlfV93a2Zfd29ya2Zsb3dfKmAgKGUuZy4gYCdldmUnYCkgaW5zdGVhZCBvZiB0aGVcbiAgICogZGVmYXVsdCBgX193a2Zfd29ya2Zsb3dfKmAsIGFuZCBpcyBhbHNvIHVzZWQgZm9yIHRoZSBjcm9zcy1kZXBsb3ltZW50XG4gICAqIGNhcGFiaWxpdHkgcHJvYmUuIEZhbGxzIGJhY2sgdG8gYFdPUktGTE9XX1FVRVVFX05BTUVTUEFDRWAgaW4gdGhlXG4gICAqIGNhbGxpbmcgcHJvY2Vzcy5cbiAgICpcbiAgICogV2l0aGluIGEgZGVwbG95bWVudCB0aGUgZW52IGZhbGxiYWNrIGlzIGNvcnJlY3QuIENyb3NzLWNvbnRleHQgY2FsbGVyc1xuICAgKiAoZS5nLiB0aGUgb2JzZXJ2YWJpbGl0eSBkYXNoYm9hcmQgcmVwbGF5aW5nIGEgcnVuKSBtdXN0IHBhc3MgdGhlXG4gICAqIFRBUkdFVCBkZXBsb3ltZW50J3MgbmFtZXNwYWNlIGV4cGxpY2l0bHk6IHRoZSBlbnYgZmFsbGJhY2sgcmVzb2x2ZXMgaW5cbiAgICogdGhlIGNhbGxlcidzIHByb2Nlc3MsIGFuZCBhIHJ1biBlbnF1ZXVlZCB0byBhIHRvcGljIHRoZSB0YXJnZXQgaGFzIG5vXG4gICAqIGNvbnN1bWVyIGZvciBpcyBuZXZlciBwaWNrZWQgdXAuXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRPcHRpb25zV2l0aERlcGxveW1lbnRJZCBleHRlbmRzIFN0YXJ0T3B0aW9uc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIGRlcGxveW1lbnQgSUQgdG8gdXNlIGZvciB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogd2hlbiBkZXBsb3lpbmcgdG8gVmVyY2VsLlxuICAgKlxuICAgKiBTZXQgdG8gYCdsYXRlc3QnYCB0byBhdXRvbWF0aWNhbGx5IHJlc29sdmUgdGhlIG1vc3QgcmVjZW50IGRlcGxveW1lbnRcbiAgICogZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50IChzYW1lIHByb2R1Y3Rpb24gdGFyZ2V0IG9yIGdpdCBicmFuY2gpLlxuICAgKiBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiB3b3JsZHMgd2l0aCBhdG9taWMsIGltbXV0YWJsZSBkZXBsb3ltZW50c1xuICAgKiAoY3VycmVudGx5IFZlcmNlbCkuIEluIG90aGVyIHdvcmxkcyAobG9jYWwgZGV2LCBQb3N0Z3JlcykgdGhlcmUgaXMgbm9cbiAgICogbm90aW9uIG9mIG11bHRpcGxlIGRlcGxveW1lbnRzIHRvIHJlc29sdmUgYmV0d2Vlbiwgc28gYCdsYXRlc3QnYCBoYXMgbm9cbiAgICogZWZmZWN0IOKAlCBhIHdhcm5pbmcgaXMgbG9nZ2VkIGFuZCB0aGUgcnVuIHRhcmdldHMgdGhlIGN1cnJlbnQgZGVwbG95bWVudC5cbiAgICpcbiAgICogKipOb3RlOioqIFdoZW4gYGRlcGxveW1lbnRJZGAgaXMgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzIGJlY29tZSBgdW5rbm93bmBcbiAgICogc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoZSB0eXBlcyB3aWxsIGJlIGNvbnNpc3RlbnQgYWNyb3NzIGRlcGxveW1lbnRzLlxuICAgKi9cbiAgZGVwbG95bWVudElkOiAnbGF0ZXN0JyB8IChzdHJpbmcgJiB7fSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRPcHRpb25zV2l0aG91dERlcGxveW1lbnRJZCBleHRlbmRzIFN0YXJ0T3B0aW9uc0Jhc2Uge1xuICBkZXBsb3ltZW50SWQ/OiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhcnRpbmcgYSB3b3JrZmxvdyBydW4uXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXJ0T3B0aW9ucyA9XG4gIHwgU3RhcnRPcHRpb25zV2l0aERlcGxveW1lbnRJZFxuICB8IFN0YXJ0T3B0aW9uc1dpdGhvdXREZXBsb3ltZW50SWQ7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBpbXBvcnRlZCB3b3JrZmxvdyBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dGdW5jdGlvbjxUQXJncyBleHRlbmRzIHVua25vd25bXSwgVFJlc3VsdD4gPSAoXG4gIC4uLmFyZ3M6IFRBcmdzXG4pID0+IFByb21pc2U8VFJlc3VsdD47XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZ2VuZXJhdGVkIG1ldGFkYXRhIG9mIGEgd29ya2Zsb3cgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93TWV0YWRhdGEgPSB7IHdvcmtmbG93SWQ6IHN0cmluZyB9O1xuXG4vKipcbiAqIFN0YXJ0cyBhIHdvcmtmbG93IHJ1bi5cbiAqXG4gKiBAcGFyYW0gd29ya2Zsb3cgLSBUaGUgaW1wb3J0ZWQgd29ya2Zsb3cgZnVuY3Rpb24gdG8gc3RhcnQuXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgd29ya2Zsb3cgKG9wdGlvbmFsKS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSB3b3JrZmxvdyBydW4gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIFRoZSB1bmlxdWUgcnVuIElEIGZvciB0aGUgbmV3bHkgc3RhcnRlZCB3b3JrZmxvdyBpbnZvY2F0aW9uLlxuICovXG4vLyBPdmVybG9hZHMgd2l0aCBkZXBsb3ltZW50SWQgLSBhcmdzIGFuZCByZXR1cm4gdHlwZSBiZWNvbWUgdW5rbm93blxuLy8gVXNlcyBnZW5lcmljcyBzbyB0eXBlZCB3b3JrZmxvd3MgYXJlIGFzc2lnbmFibGUgKGF2b2lkcyBjb250cmF2YXJpYW5jZSBpc3N1ZXMpLFxuLy8gYnV0IHRoZSByZXR1cm4gdHlwZSBhbmQgYXJncyBhcmUgc3RpbGwgdW5rbm93biBzaW5jZSB0aGUgZGVwbG95ZWQgdmVyc2lvbiBtYXkgZGlmZmVyLlxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248VEFyZ3MsIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgYXJnczogdW5rbm93bltdLFxuICBvcHRpb25zOiBTdGFydE9wdGlvbnNXaXRoRGVwbG95bWVudElkXG4pOiBQcm9taXNlPFJ1bjx1bmtub3duPj47XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydDxUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248W10sIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgb3B0aW9uczogU3RhcnRPcHRpb25zV2l0aERlcGxveW1lbnRJZFxuKTogUHJvbWlzZTxSdW48dW5rbm93bj4+O1xuXG4vLyBPdmVybG9hZHMgd2l0aG91dCBkZXBsb3ltZW50SWQgLSBwcmVzZXJ2ZSB0eXBlIGluZmVyZW5jZVxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0PFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248VEFyZ3MsIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgYXJnczogVEFyZ3MsXG4gIG9wdGlvbnM/OiBTdGFydE9wdGlvbnNXaXRob3V0RGVwbG95bWVudElkXG4pOiBQcm9taXNlPFJ1bjxUUmVzdWx0Pj47XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydDxUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248W10sIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgb3B0aW9ucz86IFN0YXJ0T3B0aW9uc1dpdGhvdXREZXBsb3ltZW50SWRcbik6IFByb21pc2U8UnVuPFRSZXN1bHQ+PjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0PFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgd29ya2Zsb3c6IFdvcmtmbG93RnVuY3Rpb248VEFyZ3MsIFRSZXN1bHQ+IHwgV29ya2Zsb3dNZXRhZGF0YSxcbiAgYXJnc09yT3B0aW9ucz86IFRBcmdzIHwgU3RhcnRPcHRpb25zLFxuICBvcHRpb25zPzogU3RhcnRPcHRpb25zXG4pIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuIGF3YWl0IHdhaXRlZFVudGlsKCgpID0+IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgZmllbGQgaXMgYWRkZWQgYnkgb3VyIGNsaWVudCB0cmFuc2Zvcm1cbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSB3b3JrZmxvdz8ud29ya2Zsb3dJZDtcblxuICAgIGlmICghd29ya2Zsb3dOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgIGAnc3RhcnQnIHJlY2VpdmVkIGFuIGludmFsaWQgd29ya2Zsb3cgZnVuY3Rpb24uIEVuc3VyZSB0aGUgV29ya2Zsb3cgU0RLIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGFuZCB0aGUgZnVuY3Rpb24gaW5jbHVkZXMgYSAndXNlIHdvcmtmbG93JyBkaXJlY3RpdmUuYCxcbiAgICAgICAgeyBzbHVnOiAnc3RhcnQtaW52YWxpZC13b3JrZmxvdy1mdW5jdGlvbicgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGFuTmFtZSA9IGB3b3JrZmxvdy5zdGFydCAke3dvcmtmbG93RGlzcGxheU5hbWUod29ya2Zsb3dOYW1lKX1gO1xuICAgIHJldHVybiB0cmFjZShzcGFuTmFtZSwgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgIHNwYW4/LnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAuLi5BdHRyaWJ1dGUuV29ya2Zsb3dOYW1lKHdvcmtmbG93TmFtZSksXG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd09wZXJhdGlvbignc3RhcnQnKSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgYXJnczogU2VyaWFsaXphYmxlW10gPSBbXTtcbiAgICAgIGxldCBvcHRzOiBTdGFydE9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc09yT3B0aW9ucykpIHtcbiAgICAgICAgYXJncyA9IGFyZ3NPck9wdGlvbnMgYXMgU2VyaWFsaXphYmxlW107XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmdzT3JPcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRzID0gYXJnc09yT3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgc3Bhbj8uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIC4uLkF0dHJpYnV0ZS5Xb3JrZmxvd0FyZ3VtZW50c0NvdW50KGFyZ3MubGVuZ3RoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB3b3JsZCA9IG9wdHMud29ybGQgPz8gKGF3YWl0IGdldFdvcmxkTGF6eSgpKTtcbiAgICAgIGFzc2VydFdvcmxkU3VwcG9ydHNSdW50aW1lUHJvdG9jb2wod29ybGQpO1xuICAgICAgY29uc3QgY3VycmVudERlcGxveW1lbnRJZCA9IGF3YWl0IHdvcmxkLmdldERlcGxveW1lbnRJZCgpO1xuICAgICAgbGV0IGRlcGxveW1lbnRJZCA9IG9wdHMuZGVwbG95bWVudElkID8/IGN1cnJlbnREZXBsb3ltZW50SWQ7XG5cbiAgICAgIC8vIFdoZW4gJ2xhdGVzdCcgaXMgcmVxdWVzdGVkLCByZXNvbHZlIHRoZSBhY3R1YWwgbGF0ZXN0IGRlcGxveW1lbnQgSURcbiAgICAgIC8vIGZvciB0aGUgY3VycmVudCBkZXBsb3ltZW50J3MgZW52aXJvbm1lbnQgKHNhbWUgcHJvZHVjdGlvbiB0YXJnZXQgb3JcbiAgICAgIC8vIHNhbWUgZ2l0IGJyYW5jaCBmb3IgcHJldmlldyBkZXBsb3ltZW50cykuXG4gICAgICAvL1xuICAgICAgLy8gUmVzb2x2aW5nICdsYXRlc3QnIG9ubHkgbWVhbnMgc29tZXRoaW5nIGluIHdvcmxkcyB3aXRoIGF0b21pYyxcbiAgICAgIC8vIGltbXV0YWJsZSBkZXBsb3ltZW50cyAoZS5nLiBWZXJjZWwpLCB3aGljaCBpbXBsZW1lbnRcbiAgICAgIC8vIHJlc29sdmVMYXRlc3REZXBsb3ltZW50SWQoKS4gV29ybGRzIHdpdGhvdXQgdGhhdCBjb25jZXB0IChsb2NhbCBkZXYsXG4gICAgICAvLyBzZWxmLWhvc3RlZCBQb3N0Z3JlcykgaGF2ZSBub3RoaW5nIHRvIHJlc29sdmUgYmV0d2Vlbiwgc28gcmF0aGVyIHRoYW5cbiAgICAgIC8vIGZhaWwgYSBydW4gdGhhdCB3b3JrcyBmaW5lIG9uIFZlcmNlbCwgd2Ugd2FybiBhbmQgZmFsbCBiYWNrIHRvIHRoZVxuICAgICAgLy8gY3VycmVudCBkZXBsb3ltZW50IOKAlCBtYWtpbmcgJ2xhdGVzdCcgYW4gZWZmZWN0aXZlIG5vLW9wIHRoZXJlLlxuICAgICAgaWYgKGRlcGxveW1lbnRJZCA9PT0gJ2xhdGVzdCcpIHtcbiAgICAgICAgaWYgKHdvcmxkLnJlc29sdmVMYXRlc3REZXBsb3ltZW50SWQpIHtcbiAgICAgICAgICBkZXBsb3ltZW50SWQgPSBhd2FpdCB3b3JsZC5yZXNvbHZlTGF0ZXN0RGVwbG95bWVudElkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2FybiBvbmNlIHBlciBwcm9jZXNzIOKAlCBzZWUgaGFzV2FybmVkTGF0ZXN0Tm9PcCBhYm92ZS5cbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZExhdGVzdE5vT3ApIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZExhdGVzdE5vT3AgPSB0cnVlO1xuICAgICAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICBcImRlcGxveW1lbnRJZDogJ2xhdGVzdCcgaGFzIG5vIGVmZmVjdCBpbiB0aGlzIHdvcmxkIGFuZCB3YXMgaWdub3JlZC4gXCIgK1xuICAgICAgICAgICAgICAgICdJdCBpcyBvbmx5IHN1cHBvcnRlZCBieSB3b3JsZHMgd2l0aCBhdG9taWMgZGVwbG95bWVudHMsIHN1Y2ggYXMgVmVyY2VsLiAnICtcbiAgICAgICAgICAgICAgICAnVGhlIHJ1biB3aWxsIHRhcmdldCB0aGUgY3VycmVudCBkZXBsb3ltZW50LicsXG4gICAgICAgICAgICAgIHsgY3VycmVudERlcGxveW1lbnRJZCB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXBsb3ltZW50SWQgPSBjdXJyZW50RGVwbG95bWVudElkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERlY2lkZSB3aGV0aGVyIHRvIHdyaXRlIGJ5dGUgc3RyZWFtcyBpbiB0aGUgZnJhbWVkIHdpcmUgZm9ybWF0LlxuICAgICAgLy8gRm9yIHNhbWUtZGVwbG95bWVudCBzdGFydHMgKHRoZSBjb21tb24gY2FzZSkgd2Uga25vdyB0aGUgdGFyZ2V0IGlzXG4gICAgICAvLyBydW5uaW5nIHRoaXMgc2FtZSBTREsgdmVyc2lvbiwgc28gZnJhbWluZyBpcyBzYWZlLiBGb3IgY3Jvc3MtXG4gICAgICAvLyBkZXBsb3ltZW50IHN0YXJ0cyAoZXhwbGljaXQgZGVwbG95bWVudElkIG9yICdsYXRlc3QnIHRoYXQgcmVzb2x2ZXNcbiAgICAgIC8vIHRvIGEgZGlmZmVyZW50IGRlcGxveW1lbnQpIHdlIHByb2JlIHRoZSB0YXJnZXQgdmlhIGhlYWx0aENoZWNrIHRvXG4gICAgICAvLyBsZWFybiBpdHMgd29ya2Zsb3ctY29yZSB2ZXJzaW9uLCB0aGVuIGRlcml2ZSB0aGUgY2FwYWJpbGl0eS4gVGhlXG4gICAgICAvLyBwcm9iZSBoYXMgYSB0aWdodCB0aW1lb3V0IOKAlCBvbiBtaXNzL2ZhaWx1cmUgd2UgZmFsbCBiYWNrIHRvIHRoZVxuICAgICAgLy8gbGVnYWN5IHJhdyBieXRlIGZvcm1hdCwgd2hpY2ggaXMgdW5pdmVyc2FsbHkgcmVhZGFibGUuXG4gICAgICAvL1xuICAgICAgLy8gV29ybGRzIHRoYXQgZG9uJ3QgZXhwb3NlIHRoZSBgc3RyZWFtc2AgQVBJIChlLmcuIG1pbmltYWwgdGVzdFxuICAgICAgLy8gbW9ja3MpIGNhbid0IHNlcnZpY2UgaGVhbHRoIGNoZWNrcywgc28gd2Ugc2tpcCB0aGUgcHJvYmUgZm9yIHRoZW0uXG4gICAgICAvLyBHZW5lcmF0ZSBydW5JZCBjbGllbnQtc2lkZSBzbyB3ZSBoYXZlIGl0IGJlZm9yZSBzZXJpYWxpemF0aW9uXG4gICAgICAvLyAocmVxdWlyZWQgZm9yIGZ1dHVyZSBFMkUgZW5jcnlwdGlvbiB3aGVyZSBydW5JZCBpcyBwYXJ0IG9mIHRoZVxuICAgICAgLy8gZW5jcnlwdGlvbiBjb250ZXh0KS4gV2hlbiB0aGUgV29ybGQgcHJvdmlkZXMgYSBgY3JlYXRlUnVuSWQoKWBcbiAgICAgIC8vIGltcGxlbWVudGF0aW9uLCB1c2UgaXQgc28gd29ybGRzIGNhbiBlbWJlZCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpY1xuICAgICAgLy8gbWV0YWRhdGEgKGUuZy4sIHJlZ2lvbikgaW50byB0aGUgSUQsIGZvcndhcmRpbmcgdGhlIGZ1bGwgb3B0aW9uc1xuICAgICAgLy8gYmFnIHNvIHdvcmxkcyBjYW4gcmVhZCB3aGljaGV2ZXIgZmllbGRzIHRoZXkgcmVjb2duaXNlOyBvdGhlcndpc2VcbiAgICAgIC8vIGZhbGwgYmFjayB0byBhIHN0YW5kYXJkIG1vbm90b25pYyBVTElELlxuICAgICAgY29uc3QgcnVuSWQgPSBgd3J1bl8ke1xuICAgICAgICB3b3JsZC5jcmVhdGVSdW5JZFxuICAgICAgICAgID8gd29ybGQuY3JlYXRlUnVuSWQob3B0cyBhcyBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pXG4gICAgICAgICAgOiB1bGlkKClcbiAgICAgIH1gO1xuXG4gICAgICBsZXQgZnJhbWVkQnl0ZVN0cmVhbXM6IGJvb2xlYW47XG4gICAgICBsZXQgdGFyZ2V0U3VwcG9ydHNDb21wcmVzc2lvbjogYm9vbGVhbjtcbiAgICAgIC8vIFRoZSBjb25zdW1lcidzIGhvb2stcmVzdW1lIHByb3RvY29sIHZlcnNpb24sIHN0YW1wZWQgb250byB0aGUgbmV3IHJ1blxuICAgICAgLy8gc28gYSBsYXRlciBgcmVzdW1lSG9vaygpYCBnYXRlcyBpdHMgcGFyYWxsZWwgcGF0aCBvbiB0aGUgZGVwbG95bWVudFxuICAgICAgLy8gdGhhdCB3aWxsIGFjdHVhbGx5IGNvbnN1bWUgdGhlIHF1ZXVlIG1lc3NhZ2UuIGB1bmRlZmluZWRgIG1lYW5zIFwiY291bGRcbiAgICAgIC8vIG5vdCBhdHRlc3RcIiBhbmQgZmFpbHMgdGhlIGdhdGUgY2xvc2VkLlxuICAgICAgbGV0IHRhcmdldEhvb2tSZXN1bWVJbnB1dFZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIC8vIFB1YmxpYyBrZXkgb2YgdGhlIHRhcmdldCBydW4sIHdoZW4gdGhlIGNhcGFiaWxpdHkgcHJvYmUgd2FzIGFibGUgdG9cbiAgICAgIC8vIHN1cHBseSBvbmUgKGNyb3NzLWRlcGxveW1lbnQgb25seSkuXG4gICAgICBsZXQgcHJvYmVkUnVuUHVibGljS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGVwbG95bWVudElkID09PSBjdXJyZW50RGVwbG95bWVudElkKSB7XG4gICAgICAgIGZyYW1lZEJ5dGVTdHJlYW1zID0gdHJ1ZTtcbiAgICAgICAgdGFyZ2V0U3VwcG9ydHNDb21wcmVzc2lvbiA9IHRydWU7XG4gICAgICAgIC8vIFNhbWUgZGVwbG95bWVudDogdGhpcyBwcm9jZXNzIGlzIHRoZSBjb25zdW1lciwgc28gaXRzIG93biBjb25zdGFudFxuICAgICAgICAvLyBpcyBhdXRob3JpdGF0aXZlLlxuICAgICAgICB0YXJnZXRIb29rUmVzdW1lSW5wdXRWZXJzaW9uID0gSE9PS19SRVNVTUVfSU5QVVRfVkVSU0lPTjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdvcmxkLnN0cmVhbXM/LmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmcmFtZWRCeXRlU3RyZWFtcyA9IGZhbHNlO1xuICAgICAgICB0YXJnZXRTdXBwb3J0c0NvbXByZXNzaW9uID0gZmFsc2U7XG4gICAgICAgIC8vIE5vIHByb2JlIGNoYW5uZWwgdG8gdGhlIHRhcmdldCDigJQgY2Fubm90IGF0dGVzdCB0aGUgY29uc3VtZXIgaG9ub3JzXG4gICAgICAgIC8vIGBob29rSW5wdXRgLCBzbyBsZWF2ZSB0aGUgbWFya2VyIG9mZiAoZmFpbCBjbG9zZWQgdG8gc2VxdWVudGlhbCkuXG4gICAgICAgIHRhcmdldEhvb2tSZXN1bWVJbnB1dFZlcnNpb24gPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBc2sgZm9yIHRoaXMgcnVuJ3MgcHVibGljIGtleSB3aGlsZSB3ZSdyZSBoZXJlLiBUaGUgcHJvYmUgYWxyZWFkeVxuICAgICAgICAvLyBibG9ja3MgYHN0YXJ0KClgIG9uIGV2ZXJ5IGNyb3NzLWRlcGxveW1lbnQgY2FsbCwgYW5kIHRoZSByZXNwb25kZXJcbiAgICAgICAgLy8gZXhlY3V0ZXMgaW5zaWRlIHRoZSB0YXJnZXQgZGVwbG95bWVudCB3aGVyZSB0aGUga2V5IG1hdGVyaWFsIGlzXG4gICAgICAgIC8vIGxvY2FsIOKAlCBzbyB0aGUga2V5IGNvbWVzIGJhY2sgZm9yIGZyZWUgb24gYSByZXNwb25zZSB3ZSBhcmVcbiAgICAgICAgLy8gYWxyZWFkeSBhd2FpdGluZywgYW5kIHdlIGNhbiBza2lwIHRoZSBrZXktbG9va3VwIEFQSSByZXF1ZXN0XG4gICAgICAgIC8vIGVudGlyZWx5LiBCZXN0LWVmZm9ydDogb24gdGltZW91dCBvciBhbiBvbGRlciB0YXJnZXQsIG5vIGtleSBjb21lc1xuICAgICAgICAvLyBiYWNrIGFuZCB3ZSBmYWxsIHRocm91Z2ggdG8gdGhlIHJlZ3VsYXIgbG9va3VwIGJlbG93LlxuICAgICAgICBjb25zdCBwcm9iZSA9IGF3YWl0IGhlYWx0aENoZWNrKHdvcmxkLCB7XG4gICAgICAgICAgZGVwbG95bWVudElkLFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIHRpbWVvdXQ6IENST1NTX0RFUExPWU1FTlRfQ0FQQUJJTElUWV9QUk9CRV9USU1FT1VUX01TLFxuICAgICAgICAgIG5hbWVzcGFjZTogb3B0cy5uYW1lc3BhY2UsXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgICAgIHByb2JlZFJ1blB1YmxpY0tleSA9IHByb2JlPy5lbmNyeXB0aW9uUHVibGljS2V5O1xuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSBnZXRSdW5DYXBhYmlsaXRpZXMocHJvYmU/LndvcmtmbG93Q29yZVZlcnNpb24pO1xuICAgICAgICBmcmFtZWRCeXRlU3RyZWFtcyA9IGNhcGFiaWxpdGllcy5mcmFtZWRCeXRlU3RyZWFtcztcbiAgICAgICAgdGFyZ2V0U3VwcG9ydHNDb21wcmVzc2lvbiA9IGNhcGFiaWxpdGllcy5zdXBwb3J0ZWRGb3JtYXRzLmhhcyhcbiAgICAgICAgICBTZXJpYWxpemF0aW9uRm9ybWF0LkdaSVBcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVGhlIHJlc3BvbmRlciBydW5zIGluc2lkZSB0aGUgdGFyZ2V0IGRlcGxveW1lbnQsIHNvIGl0c1xuICAgICAgICAvLyBgaG9va1Jlc3VtZUlucHV0VmVyc2lvbmAgcmVmbGVjdHMgdGhlIGNvbnN1bWVyLiBVbmRlZmluZWQgb24gYW5cbiAgICAgICAgLy8gb2xkZXIgdGFyZ2V0IG9yIGEgcHJvYmUgdGltZW91dCDigJQgbGVhdmluZyB0aGUgbWFya2VyIG9mZi5cbiAgICAgICAgdGFyZ2V0SG9va1Jlc3VtZUlucHV0VmVyc2lvbiA9IHByb2JlPy5ob29rUmVzdW1lSW5wdXRWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG4gICAgICAvLyBTZXJpYWxpemUgY3VycmVudCB0cmFjZSBjb250ZXh0IHRvIHByb3BhZ2F0ZSBhY3Jvc3MgcXVldWUgYm91bmRhcnlcbiAgICAgIGNvbnN0IHRyYWNlQ2FycmllciA9IGF3YWl0IHNlcmlhbGl6ZVRyYWNlQ2FycmllcigpO1xuXG4gICAgICAvLyBEZWZhdWx0IG5ldyBydW5zIHRvIHRoZSBjb25maWd1cmVkIHdvcmxkJ3Mgc3BlYyB2ZXJzaW9uLiBUaGUgd29ybGRcbiAgICAgIC8vIGl0c2VsZiBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYWdhaW5zdCB0aGlzIHJ1bnRpbWUncyBzcGVjIHZlcnNpb24uXG4gICAgICBjb25zdCBzcGVjVmVyc2lvbiA9IG9wdHMuc3BlY1ZlcnNpb24gPz8gd29ybGQuc3BlY1ZlcnNpb247XG4gICAgICBjb25zdCB2MUNvbXBhdCA9IGlzTGVnYWN5U3BlY1ZlcnNpb24oc3BlY1ZlcnNpb24pO1xuICAgICAgY29uc3QgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPSBvcHRzLmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzID09PSB0cnVlO1xuICAgICAgbGV0IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAob3B0cy5hdHRyaWJ1dGVzICYmIE9iamVjdC5rZXlzKG9wdHMuYXR0cmlidXRlcykubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoc3BlY1ZlcnNpb24gPCBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQVRUUklCVVRFUykge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgICdJbml0aWFsIHdvcmtmbG93IGF0dHJpYnV0ZXMgcmVxdWlyZSBhIFdvcmxkIHRoYXQgc3VwcG9ydHMgc3BlYyB2ZXJzaW9uIDQgb3IgbGF0ZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXNgIHRyZWF0cyBgdW5kZWZpbmVkYCBhcyBcInJlbW92ZSB0aGlzXG4gICAgICAgIC8vIGtleVwiLCB3aGljaCBpcyBtZWFuaW5nbGVzcyBhdCBjcmVhdGlvbiB0aW1lIOKAlCByZWplY3QgaXQgdXAgZnJvbnRcbiAgICAgICAgLy8gc28gSlMgY2FsbGVycyBnZXQgYSBjbGVhciBlcnJvciBpbnN0ZWFkIG9mIGEgZG93bnN0cmVhbSBzY2hlbWFcbiAgICAgICAgLy8gZmFpbHVyZSAodGhlIHR5cGVzIGFscmVhZHkgZm9yYmlkIG5vbi1zdHJpbmcgdmFsdWVzKS5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob3B0cy5hdHRyaWJ1dGVzKSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW50aW1lRXJyb3IoXG4gICAgICAgICAgICAgIGBJbml0aWFsIHdvcmtmbG93IGF0dHJpYnV0ZSAke0pTT04uc3RyaW5naWZ5KGtleSl9IG11c3QgYmUgYSBzdHJpbmcgdmFsdWUuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IG5vcm1hbGl6ZUF0dHJpYnV0ZUNoYW5nZXMob3B0cy5hdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgICBhdHRyaWJ1dGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgIGNoYW5nZXMubWFwKCh7IGtleSwgdmFsdWUgfSkgPT4gW2tleSwgdmFsdWUgYXMgc3RyaW5nXSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3Jvc3MtcnVuIGxpbmVhZ2U6IHRoZSByZXNlcnZlZCBrZXlzIHJpZGUgb24gdGhlIHJ1bidzIGV4aXN0aW5nXG4gICAgICAvLyBhdHRyaWJ1dGVzLCBzbyB0aGV5IGFkZCBubyBleHRyYSB3cml0ZS4gQ2FsbGVyIGF0dHJpYnV0ZXMgYXJlIHNwcmVhZFxuICAgICAgLy8gbGFzdCwgc28gYSBjYWxsZXIgd2l0aCBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyBjYW4gZGVsaWJlcmF0ZWx5XG4gICAgICAvLyByZS1wYXJlbnQuXG4gICAgICBjb25zdCBsaW5lYWdlID1cbiAgICAgICAgc3BlY1ZlcnNpb24gPj0gU1BFQ19WRVJTSU9OX1NVUFBPUlRTX0FUVFJJQlVURVNcbiAgICAgICAgICA/IHJlc29sdmVMaW5lYWdlQXR0cmlidXRlcygpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBydW5BdHRyaWJ1dGVzID0gbGluZWFnZVxuICAgICAgICA/IHsgLi4ubGluZWFnZSwgLi4uYXR0cmlidXRlcyB9XG4gICAgICAgIDogYXR0cmlidXRlcztcblxuICAgICAgLy8gU2hhcmVkIGJ5IHRoZSBydW5fY3JlYXRlZCBldmVudCBhbmQgdGhlIHJlc2lsaWVudC1zdGFydCBxdWV1ZSBpbnB1dC5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVNlZWQgPSBydW5BdHRyaWJ1dGVzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgYXR0cmlidXRlczogcnVuQXR0cmlidXRlcyxcbiAgICAgICAgICAgIC4uLihhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyB8fCBsaW5lYWdlICE9IG51bGxcbiAgICAgICAgICAgICAgPyB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzOiB0cnVlIGFzIGNvbnN0IH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9O1xuXG4gICAgICAvLyBgcmVwbGF5ZWRGcm9tUnVuSWRgIGlzIGEgZm9yZWlnbiBrZXkgdG8gdGhlIHNvdXJjZSBydW47IHJlamVjdCBhbnl0aGluZ1xuICAgICAgLy8gdGhhdCBpc24ndCBhIHJlYWwgcnVuIElEIHNvIHRoZSBsaW5lYWdlIGxpbmsgY2FuJ3QgcG9pbnQgYXQgZ2FyYmFnZS5cbiAgICAgIGlmIChcbiAgICAgICAgb3B0cy5yZXBsYXllZEZyb21SdW5JZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICF3b3JrZmxvd1J1bklkU2NoZW1hLnNhZmVQYXJzZShvcHRzLnJlcGxheWVkRnJvbVJ1bklkKS5zdWNjZXNzXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgIGByZXBsYXllZEZyb21SdW5JZCBtdXN0IGJlIGEgcnVuIElEICh3cnVuXzx1bGlkPik7IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBTdHJpbmcob3B0cy5yZXBsYXllZEZyb21SdW5JZCkuc2xpY2UoMCwgNjQpXG4gICAgICAgICAgKX0uYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNvbHZlIGVuY3J5cHRpb24ga2V5IGZvciB0aGUgbmV3IHJ1bi4gVGhlIHJ1bklkIGhhcyBhbHJlYWR5IGJlZW5cbiAgICAgIC8vIGdlbmVyYXRlZCBhYm92ZSAoY2xpZW50LWdlbmVyYXRlZCBVTElEKSBhbmQgd2lsbCBiZSB1c2VkIGZvciBib3RoXG4gICAgICAvLyBrZXkgZGVyaXZhdGlvbiBhbmQgdGhlIHJ1bl9jcmVhdGVkIGV2ZW50LiBUaGUgV29ybGQgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIHVzZXMgdGhlIHJ1bklkIGZvciBwZXItcnVuIEhLREYga2V5IGRlcml2YXRpb24uIFdlIHBhc3MgdGhlIHJlc29sdmVkXG4gICAgICAvLyBkZXBsb3ltZW50SWQgKG5vdCBqdXN0IHRoZSByYXcgb3B0cykgc28gdGhlIFdvcmxkIGNhbiB1c2UgaXQgZm9yXG4gICAgICAvLyBrZXkgcmVzb2x1dGlvbiBldmVuIHdoZW4gZGVwbG95bWVudElkIHdhcyBpbmZlcnJlZCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgICAgLy8gcmF0aGVyIHRoYW4gZXhwbGljaXRseSBwcm92aWRlZCBpbiBvcHRzIChlLmcuLCBpbiBlMmUgdGVzdCBydW5uZXJzKS5cbiAgICAgIC8vIFJlc29sdmUgaG93IHRvIGVuY3J5cHQgdGhlIHdvcmtmbG93IGFyZ3VtZW50cy5cbiAgICAgIC8vXG4gICAgICAvLyBQcmVmZXJyZWQ6IHRoZSBjYXBhYmlsaXR5IHByb2JlIGFscmVhZHkgdG9sZCB1cyB0aGlzIHJ1bidzIHB1YmxpY1xuICAgICAgLy8ga2V5LCBzbyBzZWFsIHRvIGl0LiBUaGF0IHNraXBzIGBnZXRFbmNyeXB0aW9uS2V5Rm9yUnVuYCwgd2hpY2ggZm9yIGFcbiAgICAgIC8vIGNyb3NzLWRlcGxveW1lbnQgc3RhcnQgaXMgYSBgcnVuLWtleWAgQVBJIHJlcXVlc3Qg4oCUIHRoZSBsYXN0IG9uZSBsZWZ0XG4gICAgICAvLyBvbiB0aGlzIHBhdGguIEl0IGlzIGFsc28gYSBwcml2aWxlZ2UgcmVkdWN0aW9uOiB0aGUgY2FsbGVyIGVuZHMgdXBcbiAgICAgIC8vIGFibGUgdG8gd3JpdGUgdGhlIGFyZ3VtZW50cyBidXQgbm90IHJlYWQgdGhlbSBiYWNrLCB3aGVyZWFzIGZldGNoaW5nXG4gICAgICAvLyB0aGUgc3ltbWV0cmljIGtleSBncmFudHMgZnVsbCByZWFkIGFjY2VzcyB0byBhIHJ1biBpdCBtZXJlbHlcbiAgICAgIC8vIGxhdW5jaGVkLlxuICAgICAgY29uc3QgcHJvYmVkUHVibGljS2V5ID0gZGVjb2RlUnVuUHVibGljS2V5KHByb2JlZFJ1blB1YmxpY0tleSk7XG5cbiAgICAgIGxldCBlbmNyeXB0aW9uS2V5OiBQYXlsb2FkS2V5IHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGVuY3J5cHRpb25QdWJsaWNLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHByb2JlZFB1YmxpY0tleSkge1xuICAgICAgICBlbmNyeXB0aW9uS2V5ID0gc2VhbFRvKHByb2JlZFB1YmxpY0tleSk7XG4gICAgICAgIGVuY3J5cHRpb25QdWJsaWNLZXkgPSBwcm9iZWRSdW5QdWJsaWNLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuSWQsIHtcbiAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSByYXdLZXkgPyBhd2FpdCBpbXBvcnRLZXkocmF3S2V5KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBQdWJsaXNoIHRoZSBydW4ncyBYMjU1MTkgcHVibGljIGtleSBzbyB0aGF0IGNyb3NzLXJ1biB3cml0ZXJzIChhXG4gICAgICAgIC8vIGhvb2sgcmVzdW1wdGlvbiBmcm9tIGFub3RoZXIgZGVwbG95bWVudCwgYSBzaWJsaW5nIHdyaXRpbmcgaW50byBhXG4gICAgICAgIC8vIGZvcndhcmRlZCBzdHJlYW0pIGNhbiBzZWFsIHBheWxvYWRzICp0byogdGhpcyBydW4gd2l0aG91dCBob2xkaW5nXG4gICAgICAgIC8vIGl0cyBzeW1tZXRyaWMga2V5LlxuICAgICAgICAvL1xuICAgICAgICAvLyBQcmVzZW5jZSBvZiB0aGlzIGZpZWxkIGlzIHRoZSB3cml0ZXItc2lkZSBnYXRlIGZvciBzZWFsZWRcbiAgICAgICAgLy8gZW52ZWxvcGVzLCBzbyBpdCBtdXN0IG9ubHkgYmUgc3RhbXBlZCB3aGVuIHRoaXMgcnVudGltZSBjb3VsZFxuICAgICAgICAvLyBpdHNlbGYgb3BlbiBvbmUuIFRoYXQgaG9sZHMgYnkgY29uc3RydWN0aW9uIGhlcmU6IGRlcml2YXRpb24gYW5kXG4gICAgICAgIC8vIGBlbmNwYCBkaXNwYXRjaCBsaXZlIGluIHRoZSBzYW1lIHBhY2thZ2UsIHNvIGFueSBjb3JlIHRoYXQgY2FuXG4gICAgICAgIC8vIHN0YW1wIGNhbiBhbHNvIG9wZW4uIFJ1bnMgYXJlIHBpbm5lZCB0byB0aGVpciBjcmVhdGluZyBkZXBsb3ltZW50LFxuICAgICAgICAvLyBzbyB0aGUgY2FwYWJpbGl0eSB0aGlzIGF0dGVzdHMgdG8gaXMgc3RpbGwgYWNjdXJhdGUgYXQgcmVzdW1lIHRpbWUuXG4gICAgICAgIGVuY3J5cHRpb25QdWJsaWNLZXkgPSByYXdLZXlcbiAgICAgICAgICA/IGJ5dGVzVG9CYXNlNjQoKGF3YWl0IGRlcml2ZVJ1bktleVBhaXIocmF3S2V5KSkucHVibGljS2V5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgcnVuIHZpYSBydW5fY3JlYXRlZCBldmVudCAoZXZlbnQtc291cmNlZCBhcmNoaXRlY3R1cmUpXG4gICAgICAvLyBQYXNzIGNsaWVudC1nZW5lcmF0ZWQgcnVuSWQgLSBzZXJ2ZXIgd2lsbCBhY2NlcHQgYW5kIHVzZSBpdFxuICAgICAgLy8gQ29tcHJlc3Mgd29ya2Zsb3cgYXJndW1lbnRzIG9ubHkgd2hlbiB0aGUgcnVuIGl0c2VsZiBpcyBtYXJrZWQgYXNcbiAgICAgIC8vIHBvc3NpYmx5IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBwYXlsb2FkcyAoc3BlY1ZlcnNpb24gPj0gNSkgQU5EIHRoZVxuICAgICAgLy8gdGFyZ2V0IGRlcGxveW1lbnQgY2FuIGRlY29kZSB0aGVtIChzYW1lLWRlcGxveW1lbnQsIG9yIHByb2JlZFxuICAgICAgLy8gY2FwYWJpbGl0eSBmb3IgY3Jvc3MtZGVwbG95bWVudCBzdGFydHMpLlxuICAgICAgY29uc3QgY29tcHJlc3Npb24gPVxuICAgICAgICB0YXJnZXRTdXBwb3J0c0NvbXByZXNzaW9uICYmXG4gICAgICAgIHNwZWNWZXJzaW9uID49IFNQRUNfVkVSU0lPTl9TVVBQT1JUU19DT01QUkVTU0lPTjtcbiAgICAgIGNvbnN0IHdvcmtmbG93QXJndW1lbnRzID0gYXdhaXQgZGVoeWRyYXRlV29ya2Zsb3dBcmd1bWVudHMoXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgICBvcHMsXG4gICAgICAgIGdsb2JhbFRoaXMsXG4gICAgICAgIHYxQ29tcGF0LFxuICAgICAgICBmcmFtZWRCeXRlU3RyZWFtcyxcbiAgICAgICAgY29tcHJlc3Npb25cbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBlbnZpcm9ubWVudCB0aGlzIGNhbGxlcidzIG93biBgcnVuX2NyZWF0ZWRgIHdyaXRlIGlzIGF0dHJpYnV0ZWRcbiAgICAgIC8vIHRvLiBTdGFtcGVkIGludG8gdGhlIHF1ZXVlIG1lc3NhZ2UncyBgcnVuSW5wdXRgIChOT1QgaW50b1xuICAgICAgLy8gYHJ1bl9jcmVhdGVkYCwgd2hvc2UgdGVuYW50IHRoZSBiYWNrZW5kIGFscmVhZHkga25vd3MpIHNvIHRoZVxuICAgICAgLy8gZGVwbG95bWVudCB0aGF0IGNvbnN1bWVzIHRoZSBtZXNzYWdlIGNhbiB0ZWxsIHdoZXRoZXIgdGhlIHJ1biBpdCBpc1xuICAgICAgLy8gYmVpbmcgYXNrZWQgdG8gcmVzaWxpZW50bHkgY3JlYXRlIHdhcyBjcmVhdGVkIGFnYWluc3QgYSBkaWZmZXJlbnRcbiAgICAgIC8vIGVudmlyb25tZW50IHRoYW4gaXRzIG93bi5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgdHdvIHdyaXRlcyBiZWxvdyBnbyB0byBkaWZmZXJlbnQgcGxhY2VzIGJ5IGRpZmZlcmVudCByb3V0ZXM6XG4gICAgICAvLyBgZXZlbnRzLmNyZWF0ZWAgaXMgYXR0cmlidXRlZCB0byBUSElTIGNsaWVudCdzIHRlbmFudCwgd2hpbGUgdGhlIHF1ZXVlXG4gICAgICAvLyBtZXNzYWdlIGlzIHBpbm5lZCB0byBhIGRlcGxveW1lbnRJZC4gV2hlbiB0aG9zZSBkaXNhZ3JlZSDigJQgYVxuICAgICAgLy8gcHJvZHVjdGlvbi1jcmVkZW50aWFsZWQgY2xpZW50IHBpbm5pbmcgYSBwcmV2aWV3IGRlcGxveW1lbnQg4oCUIHRoZVxuICAgICAgLy8gcHJldmlldyBjb25zdW1lciBjYW4ndCBmaW5kIHRoZSBydW4gaW4gaXRzIG93biB0ZW5hbnQsIGZhbGxzIGJhY2sgdG9cbiAgICAgIC8vIHJlc2lsaWVudCBzdGFydCwgYW5kIHJlLWNyZWF0ZXMgaXQ6IG9uZSBjbGllbnQtbWludGVkIHJ1biBpZCwgdHdvXG4gICAgICAvLyBlbnZpcm9ubWVudHMsIHRoZSBwcm9kdWN0aW9uIGNvcHkgcGVuZGluZyBmb3JldmVyIGFuZCB0aGUgcHJldmlldyBjb3B5XG4gICAgICAvLyBleGVjdXRpbmcuIFdvcmxkcyB3aXRoIGEgc2luZ2xlIHRlbmFudCByZXR1cm4gdW5kZWZpbmVkIGFuZCB0aGUgZmllbGRcbiAgICAgIC8vIGlzIHNpbXBseSBhYnNlbnQuXG4gICAgICBjb25zdCBjcmVhdG9yRW52aXJvbm1lbnQgPSB3b3JsZC5nZXRFbnZpcm9ubWVudD8uKCk7XG5cbiAgICAgIC8vIElmIFdPUktGTE9XX1ZNIGlzIHNldCBvbiB0aGUgY2xpZW50IHN0YXJ0aW5nIHRoZSBydW4sIHN0YW1wIHRoZVxuICAgICAgLy8gZW5naW5lIGNob2ljZSBpbnRvIHRoZSBydW4ncyBleGVjdXRpb25Db250ZXh0IHNvIHRoZSBydW4ga2VlcHNcbiAgICAgIC8vIGV4ZWN1dGluZyBvbiB0aGUgZW5naW5lIGl0IHN0YXJ0ZWQgb24gKHRoZSBzYW1lIGRlcGxveW1lbnQgY2FuXG4gICAgICAvLyBzZXJ2ZSBib3RoIFZNIGVuZ2luZXMpLiBVbmtub3duIHZhbHVlcyB0aHJvdyDigJQgc2VlXG4gICAgICAvLyBnZXRXb3JrZmxvd1ZtRnJvbUVudigpLlxuICAgICAgY29uc3Qgd29ya2Zsb3dWbSA9IGdldFdvcmtmbG93Vm1Gcm9tRW52KCk7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIHRyYWNlQ2FycmllcixcbiAgICAgICAgd29ya2Zsb3dDb3JlVmVyc2lvbixcbiAgICAgICAgZmVhdHVyZXM6IHsgZW5jcnlwdGlvbjogISFlbmNyeXB0aW9uS2V5IH0sXG4gICAgICAgIC8vIEF0dGVzdCB0aGF0IHRoZSAqY29uc3VtZXIqIGRlcGxveW1lbnQncyBydW50aW1lIHJlLWVuc3VyZXMgYVxuICAgICAgICAvLyBgaG9va19yZWNlaXZlZGAgZXZlbnQgZnJvbSBhIHF1ZXVlIG1lc3NhZ2UncyBgaG9va0lucHV0YCBvbiByZXBsYXkuXG4gICAgICAgIC8vIEEgcmVzdW1lIG9mIHRoaXMgcnVuIHJlYWRzIHRoZSBtYXJrZXIgKG1pcnJvcmVkIG9udG8gdGhlIGhvb2snc1xuICAgICAgICAvLyByZXN1bWVDb250ZXh0IGJ5IHRoZSBzZXJ2ZXIpIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBwYXJhbGxlbCBmYXN0XG4gICAgICAgIC8vIHBhdGggaXMgc2FmZS4gRm9yIGEgY3Jvc3MtZGVwbG95bWVudCBzdGFydCB0aGUgY29uc3VtZXIgaXMgdGhlXG4gICAgICAgIC8vIHRhcmdldCBkZXBsb3ltZW50LCBzbyB3ZSBzdGFtcCB0aGUgKnRhcmdldCdzKiB2YWx1ZSBjYXJyaWVkIGJhY2sgb25cbiAgICAgICAgLy8gdGhlIGhlYWx0aC1jaGVjayBwcm9iZSDigJQgbmV2ZXIgdGhlIGNhbGxlcidzLiBPbWl0dGVkIHdoZW4gd2UgY291bGRcbiAgICAgICAgLy8gbm90IGF0dGVzdCB0aGUgdGFyZ2V0IChvbGRlciB0YXJnZXQsIHRpbWVvdXQsIG9yIG5vIHByb2JlIGNoYW5uZWwpLFxuICAgICAgICAvLyB3aGljaCBmYWlscyB0aGUgcmVzdW1lIGdhdGUgY2xvc2VkIHRvIHRoZSBzZXF1ZW50aWFsIHBhdGguXG4gICAgICAgIC4uLih0YXJnZXRIb29rUmVzdW1lSW5wdXRWZXJzaW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgaG9va1Jlc3VtZUlucHV0VmVyc2lvbjogdGFyZ2V0SG9va1Jlc3VtZUlucHV0VmVyc2lvbiB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih3b3JrZmxvd1ZtID8geyB3b3JrZmxvd1ZtIH0gOiB7fSksXG4gICAgICAgIC4uLihvcHRzLnJlcGxheWVkRnJvbVJ1bklkXG4gICAgICAgICAgPyB7IHJlcGxheWVkRnJvbVJ1bklkOiBvcHRzLnJlcGxheWVkRnJvbVJ1bklkIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG5cbiAgICAgIC8vIENhbGwgZXZlbnRzLmNyZWF0ZSAocnVuX2NyZWF0ZWQpIGFuZCBxdWV1ZSBpbiBwYXJhbGxlbC5cbiAgICAgIC8vIElmIGV2ZW50cy5jcmVhdGUgZmFpbHMgd2l0aCA0MjkvNXh4LCB0aGUgcnVuIHdhcyBzdGlsbCBhY2NlcHRlZFxuICAgICAgLy8gdmlhIHRoZSBxdWV1ZSBhbmQgY3JlYXRpb24gd2lsbCBiZSByZS10cmllZCBhc3luYyBieSB0aGUgcnVudGltZS5cbiAgICAgIGNvbnN0IFtydW5DcmVhdGVkUmVzdWx0LCBxdWV1ZVJlc3VsdF0gPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgICB3b3JsZC5ldmVudHMuY3JlYXRlKFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3J1bl9jcmVhdGVkJyxcbiAgICAgICAgICAgIHNwZWNWZXJzaW9uLFxuICAgICAgICAgICAgZXZlbnREYXRhOiB7XG4gICAgICAgICAgICAgIGRlcGxveW1lbnRJZDogZGVwbG95bWVudElkLFxuICAgICAgICAgICAgICB3b3JrZmxvd05hbWU6IHdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgICAgaW5wdXQ6IHdvcmtmbG93QXJndW1lbnRzLFxuICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAuLi4oZW5jcnlwdGlvblB1YmxpY0tleSA/IHsgZW5jcnlwdGlvblB1YmxpY0tleSB9IDoge30pLFxuICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGVTZWVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgdjFDb21wYXQgfVxuICAgICAgICApLFxuICAgICAgICB3b3JsZC5xdWV1ZShcbiAgICAgICAgICBnZXRXb3JrZmxvd1F1ZXVlTmFtZSh3b3JrZmxvd05hbWUsIG9wdHMubmFtZXNwYWNlKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydW5JZCxcbiAgICAgICAgICAgIHRyYWNlQ2FycmllcixcbiAgICAgICAgICAgIC4uLihzcGVjVmVyc2lvbiA+PSBTUEVDX1ZFUlNJT05fU1VQUE9SVFNfQ0JPUl9RVUVVRV9UUkFOU1BPUlRcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBydW5JbnB1dDoge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dDogd29ya2Zsb3dBcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgIGRlcGxveW1lbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgICAgICAgICBzcGVjVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgLi4uKGVuY3J5cHRpb25QdWJsaWNLZXkgPyB7IGVuY3J5cHRpb25QdWJsaWNLZXkgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKGNyZWF0b3JFbnZpcm9ubWVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgPyB7IGVudmlyb25tZW50OiBjcmVhdG9yRW52aXJvbm1lbnQgfVxuICAgICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGVTZWVkLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0gc2F0aXNmaWVzIFdvcmtmbG93SW52b2tlUGF5bG9hZCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXBsb3ltZW50SWQsXG4gICAgICAgICAgICBzcGVjVmVyc2lvbixcbiAgICAgICAgICAgIC8vIEZvcndhcmQgYW55IGNhbGxlci1zdXBwbGllZCByZWdpb24gaGludCBzbyB3b3JsZHMgd2l0aFxuICAgICAgICAgICAgLy8gcGVyLXJlZ2lvbiBxdWV1ZSByb3V0aW5nIChlLmcuIHdvcmxkLXZlcmNlbCkgY2FuIHRhcmdldCB0aGVcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIHF1ZXVlLiBXb3JsZHMgd2l0aG91dCBhIHJlZ2lvbmFsIGRpbWVuc2lvbiBpZ25vcmVcbiAgICAgICAgICAgIC8vIHRoaXMgZmllbGQuXG4gICAgICAgICAgICAuLi4ob3B0cy5yZWdpb24gIT09IHVuZGVmaW5lZCA/IHsgcmVnaW9uOiBvcHRzLnJlZ2lvbiB9IDoge30pLFxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgIF0pO1xuXG4gICAgICAvLyBRdWV1ZSBmYWlsdXJlIGlzIGFsd2F5cyBmYXRhbCDigJQgdGhlIHJ1biB3YXMgbm90IGVucXVldWVkXG4gICAgICBpZiAocXVldWVSZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgIHRocm93IHF1ZXVlUmVzdWx0LnJlYXNvbjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGV2ZW50cy5jcmVhdGUgcmVzdWx0XG4gICAgICBsZXQgcmVzaWxpZW50U3RhcnQgPSBmYWxzZTtcbiAgICAgIGlmIChydW5DcmVhdGVkUmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICBjb25zdCBlcnIgPSBydW5DcmVhdGVkUmVzdWx0LnJlYXNvbjtcbiAgICAgICAgaWYgKEVudGl0eUNvbmZsaWN0RXJyb3IuaXMoZXJyKSkge1xuICAgICAgICAgIC8vIDQwOTogVGhlIHJ1biBhbHJlYWR5IGV4aXN0cy4gVGhpcyBjYW4gaGFwcGVuIGluIGV4dHJlbWUgY2FzZXMgd2hlcmVcbiAgICAgICAgICAvLyB0aGUgcnVuIGNyZWF0aW9uIGNhbGwgZ2V0cyBhIGNvbGQgc3RhcnQgb3Igb3RoZXIgc2xvd2Rvd24sIGFuZCB0aGUgcXVldWVcbiAgICAgICAgICAvLyArIHJ1bl9zdGFydGVkIGNhbGwgY29tcGxldGVzIGZhc3Rlci4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgPD0xJSBvZiBjYXNlcy5cbiAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGNhbiBzYWZlbHkgcmV0dXJuLlxuICAgICAgICB9IGVsc2UgaWYgKGlzUmV0cnlhYmxlV29ybGRFcnJvcihlcnIpKSB7XG4gICAgICAgICAgLy8gNDI5IChUaHJvdHRsZUVycm9yKSwgNXh4LCBhbmQgdHJhbnNpZW50IHRyYW5zcG9ydCBmYWlsdXJlc1xuICAgICAgICAgIC8vIChUUkFOU1BPUlQvVElNRU9VVCkgYXJlIHJldHJ5YWJsZSDigJQgdGhlIHJ1biB3YXMgYWNjZXB0ZWQgdmlhIHRoZVxuICAgICAgICAgIC8vIHF1ZXVlIGFuZCBjcmVhdGlvbiB3aWxsIGJlIHJlLXRyaWVkIGJ5IHRoZSBydW50aW1lIHdoZW4gaXQgY2FsbHNcbiAgICAgICAgICAvLyBydW5fc3RhcnRlZC5cbiAgICAgICAgICByZXNpbGllbnRTdGFydCA9IHRydWU7XG4gICAgICAgICAgcnVudGltZUxvZ2dlci53YXJuKFxuICAgICAgICAgICAgJ1J1biBjcmVhdGlvbiBldmVudCBmYWlsZWQsIGJ1dCB0aGUgcnVuIHdhcyBhY2NlcHRlZCB2aWEgdGhlIHF1ZXVlLiAnICtcbiAgICAgICAgICAgICAgJ1RoZSBydW5fY3JlYXRlZCBldmVudCB3aWxsIGJlIHJlLXRyaWVkIGFzeW5jIGJ5IHRoZSBydW50aW1lLicsXG4gICAgICAgICAgICB7IHdvcmtmbG93UnVuSWQ6IHJ1bklkLCBlcnJvcjogZXJyLm1lc3NhZ2UgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBydW5DcmVhdGVkUmVzdWx0LnZhbHVlO1xuICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgcnVuIHdhcyBjcmVhdGVkXG4gICAgICAgIGlmICghcmVzdWx0LnJ1bikge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIFwiTWlzc2luZyAncnVuJyBpbiBzZXJ2ZXIgcmVzcG9uc2UgZm9yICdydW5fY3JlYXRlZCcgZXZlbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWZXJpZnkgc2VydmVyIGFjY2VwdGVkIG91ciBydW5JZFxuICAgICAgICBpZiAoIXYxQ29tcGF0ICYmIHJlc3VsdC5ydW4ucnVuSWQgIT09IHJ1bklkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVudGltZUVycm9yKFxuICAgICAgICAgICAgYFNlcnZlciByZXR1cm5lZCBkaWZmZXJlbnQgcnVuSWQgdGhhbiByZXF1ZXN0ZWQ6IGV4cGVjdGVkICR7cnVuSWR9LCBnb3QgJHtyZXN1bHQucnVuLnJ1bklkfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZXNlIGFyZ3VtZW50LXN0cmVhbSBvcHMgYXJlIGZsdXNoZWQgaW4gdGhlIGJhY2tncm91bmQ7IHRoZSBwcm9taXNlXG4gICAgICAvLyBoYW5kZWQgdG8gd2FpdFVudGlsIG11c3QgbmV2ZXIgcmVqZWN0IChhbiB1bmNvbnN1bWVkIHdhaXRVbnRpbFxuICAgICAgLy8gcmVqZWN0aW9uIGNyYXNoZXMgdGhlIHByb2Nlc3MgYXMgdW5oYW5kbGVkUmVqZWN0aW9uKSwgc28gdW5leHBlY3RlZFxuICAgICAgLy8gZmFpbHVyZXMgYXJlIGxvZ2dlZCBpbnN0ZWFkLlxuICAgICAgc2FmZVdhaXRVbnRpbChQcm9taXNlLmFsbChvcHMpLCAoZXJyKSA9PiB7XG4gICAgICAgIHJ1bnRpbWVMb2dnZXIud2FybihcbiAgICAgICAgICAnQmFja2dyb3VuZCBmbHVzaCBvZiB3b3JrZmxvdyBhcmd1bWVudCBzdHJlYW1zIGZhaWxlZCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd29ya2Zsb3dSdW5JZDogcnVuSWQsXG4gICAgICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBzcGFuPy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgLi4uQXR0cmlidXRlLldvcmtmbG93UnVuSWQocnVuSWQpLFxuICAgICAgICAuLi5BdHRyaWJ1dGUuRGVwbG95bWVudElkKGRlcGxveW1lbnRJZCksXG4gICAgICAgIC4uLihydW5DcmVhdGVkUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiZcbiAgICAgICAgcnVuQ3JlYXRlZFJlc3VsdC52YWx1ZS5ydW5cbiAgICAgICAgICA/IEF0dHJpYnV0ZS5Xb3JrZmxvd1J1blN0YXR1cyhydW5DcmVhdGVkUmVzdWx0LnZhbHVlLnJ1bi5zdGF0dXMpXG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBSdW48VFJlc3VsdD4ocnVuSWQsIHsgcmVzaWxpZW50U3RhcnQgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|
|
@@ -98,6 +98,13 @@ export interface SuspensionHandlerResult {
|
|
|
98
98
|
* durably creating the user's hooks doesn't count as runtime overhead.
|
|
99
99
|
*/
|
|
100
100
|
hookCreationMs: number;
|
|
101
|
+
/**
|
|
102
|
+
* Whether serializing this suspension's new step inputs was passive (did
|
|
103
|
+
* not execute workflow-owned code such as getters, proxy traps, or custom
|
|
104
|
+
* serializers). `false` means the retained VM may have diverged from what
|
|
105
|
+
* a cold replay would compute, so the caller must demote to replay.
|
|
106
|
+
*/
|
|
107
|
+
retainedStepInputsSafe: boolean;
|
|
101
108
|
}
|
|
102
109
|
/**
|
|
103
110
|
* Handles a workflow suspension by processing all pending operations (hooks, steps, waits).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suspension-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/suspension-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAS/C,OAAO,EAGL,KAAK,cAAc,EAGnB,KAAK,WAAW,EAChB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAGV,uBAAuB,EAEvB,kBAAkB,EACnB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"suspension-handler.d.ts","sourceRoot":"","sources":["../../src/runtime/suspension-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAS/C,OAAO,EAGL,KAAK,cAAc,EAGnB,KAAK,WAAW,EAChB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAGV,uBAAuB,EAEvB,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,8EAA8E;IAC9E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC;;;;;;;OAOG;IACH,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC;;;;;;;;;;;;OAYG;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,cAAc,CAAC;KACjC,CAAC,CAAC;IACH;;;;;;OAMG;IACH,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;IACzB,wFAAwF;IACxF,sBAAsB,EAAE,OAAO,CAAC;IAChC,wEAAwE;IACxE,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAgED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,GAAG,EACH,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,eAAe,EACf,sBAAsB,GACvB,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwkB5D"}
|