footprintjs 10.0.1 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -1
- package/CLAUDE.md +61 -7
- package/README.md +136 -312
- package/dist/esm/index.d.ts +62 -2
- package/dist/esm/index.js +13 -6
- package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
- package/dist/esm/lib/attempt/anySignal.js +39 -0
- package/dist/esm/lib/attempt/call.d.ts +88 -0
- package/dist/esm/lib/attempt/call.js +129 -0
- package/dist/esm/lib/attempt/category.d.ts +37 -0
- package/dist/esm/lib/attempt/category.js +131 -0
- package/dist/esm/lib/attempt/correlation.d.ts +95 -0
- package/dist/esm/lib/attempt/correlation.js +178 -0
- package/dist/esm/lib/attempt/deadline.d.ts +44 -0
- package/dist/esm/lib/attempt/deadline.js +101 -0
- package/dist/esm/lib/attempt/decision.d.ts +52 -0
- package/dist/esm/lib/attempt/decision.js +134 -0
- package/dist/esm/lib/attempt/effect.d.ts +76 -0
- package/dist/esm/lib/attempt/effect.js +160 -0
- package/dist/esm/lib/attempt/errors.d.ts +41 -0
- package/dist/esm/lib/attempt/errors.js +44 -0
- package/dist/esm/lib/attempt/index.d.ts +18 -0
- package/dist/esm/lib/attempt/index.js +15 -0
- package/dist/esm/lib/attempt/name.d.ts +21 -0
- package/dist/esm/lib/attempt/name.js +43 -0
- package/dist/esm/lib/attempt/observed.d.ts +66 -0
- package/dist/esm/lib/attempt/observed.js +171 -0
- package/dist/esm/lib/attempt/policy.d.ts +45 -0
- package/dist/esm/lib/attempt/policy.js +83 -0
- package/dist/esm/lib/attempt/record.d.ts +11 -0
- package/dist/esm/lib/attempt/record.js +24 -0
- package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
- package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
- package/dist/esm/lib/attempt/runner.d.ts +157 -0
- package/dist/esm/lib/attempt/runner.js +523 -0
- package/dist/esm/lib/attempt/standalone.d.ts +47 -0
- package/dist/esm/lib/attempt/standalone.js +126 -0
- package/dist/esm/lib/attempt/types.d.ts +453 -0
- package/dist/esm/lib/attempt/types.js +16 -0
- package/dist/esm/lib/budget/index.d.ts +9 -0
- package/dist/esm/lib/budget/index.js +9 -0
- package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
- package/dist/esm/lib/budget/timeBudget.js +666 -0
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
- package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
- package/dist/esm/lib/builder/retryLoop.js +283 -0
- package/dist/esm/lib/builder/types.d.ts +35 -1
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/decide/decide.js +2 -2
- package/dist/esm/lib/decide/index.d.ts +1 -1
- package/dist/esm/lib/decide/index.js +2 -2
- package/dist/esm/lib/decide/types.d.ts +3 -0
- package/dist/esm/lib/decide/types.js +1 -8
- package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/esm/lib/engine/graph/StageNode.js +1 -1
- package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
- package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
- package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
- package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
- package/dist/esm/lib/engine/handlers/stageError.js +23 -1
- package/dist/esm/lib/engine/index.d.ts +2 -2
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
- package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
- package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
- package/dist/esm/lib/engine/traversalContext.js +6 -3
- package/dist/esm/lib/engine/types.d.ts +52 -57
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/esm/lib/errors/terminalFailure.js +60 -0
- package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/esm/lib/filter/evaluator.js +135 -0
- package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/esm/lib/ids/idempotencyKey.js +24 -0
- package/dist/esm/lib/memory/StageContext.d.ts +123 -3
- package/dist/esm/lib/memory/StageContext.js +245 -4
- package/dist/esm/lib/memory/attention.d.ts +26 -0
- package/dist/esm/lib/memory/attention.js +171 -0
- package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/esm/lib/memory/borrowedMutation.js +14 -1
- package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
- package/dist/esm/lib/memory/frameTypes.js +3 -1
- package/dist/esm/lib/memory/redaction.d.ts +12 -0
- package/dist/esm/lib/memory/redaction.js +54 -5
- package/dist/esm/lib/pause/record.js +10 -1
- package/dist/esm/lib/pause/types.d.ts +19 -0
- package/dist/esm/lib/pause/types.js +17 -1
- package/dist/esm/lib/reactive/createTypedScope.js +3 -1
- package/dist/esm/lib/reactive/types.d.ts +36 -4
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
- package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
- package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
- package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
- package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/esm/lib/recorder/attemptOTel.js +107 -0
- package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/esm/lib/recorder/attemptSeries.js +103 -0
- package/dist/esm/lib/recorder/hooks.d.ts +9 -0
- package/dist/esm/lib/recorder/hooks.js +4 -1
- package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
- package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
- package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/esm/lib/runner/RunnableChart.js +5 -1
- package/dist/esm/lib/runner/attach.d.ts +2 -1
- package/dist/esm/lib/runner/attach.js +8 -2
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/deadline.d.ts +42 -0
- package/dist/esm/lib/runner/deadline.js +90 -0
- package/dist/esm/lib/runner/index.d.ts +3 -1
- package/dist/esm/lib/runner/index.js +2 -1
- package/dist/esm/lib/runner/options.d.ts +17 -0
- package/dist/esm/lib/runner/options.js +3 -1
- package/dist/esm/lib/runner/recordSink.d.ts +128 -0
- package/dist/esm/lib/runner/recordSink.js +296 -0
- package/dist/esm/lib/runner/resume.d.ts +3 -0
- package/dist/esm/lib/runner/resume.js +22 -2
- package/dist/esm/lib/runner/snapshot.d.ts +2 -2
- package/dist/esm/lib/runner/snapshot.js +6 -2
- package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/esm/lib/scope/ScopeFacade.js +304 -7
- package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/esm/lib/scope/runtime.d.ts +3 -0
- package/dist/esm/lib/scope/runtime.js +1 -1
- package/dist/esm/lib/scope/types.d.ts +6 -0
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
- package/dist/esm/lib/sinks/fileSink.js +387 -0
- package/dist/esm/recorders.d.ts +8 -2
- package/dist/esm/recorders.js +7 -1
- package/dist/esm/sinks.d.ts +23 -0
- package/dist/esm/sinks.js +23 -0
- package/dist/esm/trace.d.ts +2 -2
- package/dist/esm/trace.js +1 -1
- package/dist/index.js +77 -60
- package/dist/lib/attempt/anySignal.js +43 -0
- package/dist/lib/attempt/call.js +134 -0
- package/dist/lib/attempt/category.js +136 -0
- package/dist/lib/attempt/correlation.js +186 -0
- package/dist/lib/attempt/deadline.js +112 -0
- package/dist/lib/attempt/decision.js +139 -0
- package/dist/lib/attempt/effect.js +174 -0
- package/dist/lib/attempt/errors.js +49 -0
- package/dist/lib/attempt/index.js +26 -0
- package/dist/lib/attempt/name.js +48 -0
- package/dist/lib/attempt/observed.js +177 -0
- package/dist/lib/attempt/policy.js +92 -0
- package/dist/lib/attempt/record.js +29 -0
- package/dist/lib/attempt/retryLoopContext.js +31 -0
- package/dist/lib/attempt/retryLoopTypes.js +3 -0
- package/dist/lib/attempt/runner.js +530 -0
- package/dist/lib/attempt/standalone.js +130 -0
- package/dist/lib/attempt/types.js +17 -0
- package/dist/lib/budget/index.js +17 -0
- package/dist/lib/budget/timeBudget.js +674 -0
- package/dist/lib/builder/FlowChartBuilder.js +199 -9
- package/dist/lib/builder/retryLoop.js +287 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/decide/decide.js +2 -2
- package/dist/lib/decide/index.js +2 -2
- package/dist/lib/decide/types.js +1 -8
- package/dist/lib/engine/graph/StageNode.js +1 -1
- package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
- package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
- package/dist/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
- package/dist/lib/engine/handlers/commitStage.js +24 -5
- package/dist/lib/engine/handlers/stageError.js +26 -2
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
- package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
- package/dist/lib/engine/traversalContext.js +6 -3
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/errors/terminalFailure.js +64 -0
- package/dist/lib/filter/evaluator.js +139 -0
- package/dist/lib/ids/idempotencyKey.js +28 -0
- package/dist/lib/memory/StageContext.js +246 -5
- package/dist/lib/memory/attention.js +175 -0
- package/dist/lib/memory/borrowedMutation.js +16 -2
- package/dist/lib/memory/frameTypes.js +3 -1
- package/dist/lib/memory/redaction.js +54 -5
- package/dist/lib/pause/record.js +10 -1
- package/dist/lib/pause/types.js +17 -1
- package/dist/lib/reactive/createTypedScope.js +3 -1
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/AttemptRecorder.js +417 -0
- package/dist/lib/recorder/ControlDepRecorder.js +50 -2
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +75 -6
- package/dist/lib/recorder/QualityRecorder.js +87 -29
- package/dist/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/lib/recorder/attemptMetricRows.js +209 -0
- package/dist/lib/recorder/attemptMetrics.js +174 -0
- package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
- package/dist/lib/recorder/attemptOTel.js +111 -0
- package/dist/lib/recorder/attemptSeries.js +113 -0
- package/dist/lib/recorder/hooks.js +4 -1
- package/dist/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/lib/runner/FlowChartExecutor.js +330 -101
- package/dist/lib/runner/RunnableChart.js +5 -1
- package/dist/lib/runner/attach.js +8 -2
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/deadline.js +94 -0
- package/dist/lib/runner/index.js +4 -2
- package/dist/lib/runner/options.js +3 -1
- package/dist/lib/runner/recordSink.js +302 -0
- package/dist/lib/runner/resume.js +22 -2
- package/dist/lib/runner/snapshot.js +6 -2
- package/dist/lib/scope/ScopeFacade.js +303 -6
- package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/lib/scope/runtime.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/lib/sinks/fileSink.js +392 -0
- package/dist/recorders.js +10 -2
- package/dist/sinks.js +32 -0
- package/dist/trace.js +1 -1
- package/dist/types/index.d.ts +62 -2
- package/dist/types/lib/attempt/anySignal.d.ts +19 -0
- package/dist/types/lib/attempt/call.d.ts +88 -0
- package/dist/types/lib/attempt/category.d.ts +37 -0
- package/dist/types/lib/attempt/correlation.d.ts +95 -0
- package/dist/types/lib/attempt/deadline.d.ts +44 -0
- package/dist/types/lib/attempt/decision.d.ts +52 -0
- package/dist/types/lib/attempt/effect.d.ts +76 -0
- package/dist/types/lib/attempt/errors.d.ts +41 -0
- package/dist/types/lib/attempt/index.d.ts +18 -0
- package/dist/types/lib/attempt/name.d.ts +21 -0
- package/dist/types/lib/attempt/observed.d.ts +66 -0
- package/dist/types/lib/attempt/policy.d.ts +45 -0
- package/dist/types/lib/attempt/record.d.ts +11 -0
- package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/types/lib/attempt/runner.d.ts +157 -0
- package/dist/types/lib/attempt/standalone.d.ts +47 -0
- package/dist/types/lib/attempt/types.d.ts +453 -0
- package/dist/types/lib/budget/index.d.ts +9 -0
- package/dist/types/lib/budget/timeBudget.d.ts +136 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/types/lib/builder/retryLoop.d.ts +56 -0
- package/dist/types/lib/builder/types.d.ts +35 -1
- package/dist/types/lib/decide/index.d.ts +1 -1
- package/dist/types/lib/decide/types.d.ts +3 -0
- package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
- package/dist/types/lib/engine/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
- package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/types/lib/engine/narrative/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/types.d.ts +74 -5
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/types/lib/engine/traversalContext.d.ts +7 -2
- package/dist/types/lib/engine/types.d.ts +52 -57
- package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/types/lib/memory/StageContext.d.ts +123 -3
- package/dist/types/lib/memory/attention.d.ts +26 -0
- package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/types/lib/memory/frameTypes.d.ts +38 -0
- package/dist/types/lib/memory/redaction.d.ts +12 -0
- package/dist/types/lib/pause/types.d.ts +19 -0
- package/dist/types/lib/reactive/types.d.ts +36 -4
- package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
- package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/types/lib/recorder/hooks.d.ts +9 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/types/lib/runner/attach.d.ts +2 -1
- package/dist/types/lib/runner/deadline.d.ts +42 -0
- package/dist/types/lib/runner/index.d.ts +3 -1
- package/dist/types/lib/runner/options.d.ts +17 -0
- package/dist/types/lib/runner/recordSink.d.ts +128 -0
- package/dist/types/lib/runner/resume.d.ts +3 -0
- package/dist/types/lib/runner/snapshot.d.ts +2 -2
- package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/types/lib/scope/runtime.d.ts +3 -0
- package/dist/types/lib/scope/types.d.ts +6 -0
- package/dist/types/lib/sinks/fileSink.d.ts +135 -0
- package/dist/types/recorders.d.ts +8 -2
- package/dist/types/sinks.d.ts +23 -0
- package/dist/types/trace.d.ts +2 -2
- package/package.json +20 -6
- package/dist/esm/lib/decide/evaluator.js +0 -130
- package/dist/lib/decide/evaluator.js +0 -134
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* recorder/attemptSeries.ts — what a RECORDER keeps of a series: the one evidence predicate, the stop that gave up, and a
|
|
4
|
+
* per-series tally rebuilt from `onAttempt` records (design §5.1, P1c).
|
|
5
|
+
*
|
|
6
|
+
* WHY one module: seven built-in recorders account for attempts, and each must agree on two questions — "is this
|
|
7
|
+
* series worth a row?" and "did it give up?" — or a Topology node and a boundary count would disagree about the
|
|
8
|
+
* same run. Asked here, once.
|
|
9
|
+
*
|
|
10
|
+
* THE predicate (`isRetryEvidence`): a series is evidence when it RETRIED (some attempt was followed by another),
|
|
11
|
+
* GAVE UP while a retry was possible (it stopped `exhausted`, `declined` or `no-time-left` with `of > 1`, §3.9), or
|
|
12
|
+
* TIMED OUT (an attempt ran out of its cap or the deadline — P1b's lone timeout is the incident's own shape). A
|
|
13
|
+
* policy stage that succeeded first time — or that paused or was aborted on its first attempt — is
|
|
14
|
+
* indistinguishable from a stage with no policy in every recorder row, so a chart in which nothing retried keeps
|
|
15
|
+
* those rows byte-identical (law 2). So is a LONE attempt (`of: 1`, recorded for every stage of a run with a
|
|
16
|
+
* deadline, P1b) that merely failed: a stage error like any other, so a deadline alone never multiplies rows.
|
|
17
|
+
*
|
|
18
|
+
* Records arrive in order within a series, so the predicate is decided at the series' FIRST record: attempt 1 is
|
|
19
|
+
* evidence iff it did not end the series quietly, and every later attempt is evidence by being one.
|
|
20
|
+
*
|
|
21
|
+
* L5 (`recorder/**`), beside the stores: it imports the attempt vocabulary's types only (the L0 leaf), so
|
|
22
|
+
* `recorder/` never takes a runtime edge into `attempt/` — whose runner reaches `decide/` and `scope/`, which
|
|
23
|
+
* import `recorder/` (a module cycle).
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.AttemptSeriesBook = exports.emptyOutcomeCounts = exports.subflowOfAttempt = exports.attemptRef = exports.attemptFailed = exports.isRetryEvidence = exports.gaveUp = void 0;
|
|
27
|
+
const foottrace_1 = require("foottrace");
|
|
28
|
+
/** The stop reasons that mean "gave up" — apart from `aborted` (the run ended it) and `paused` (§3.9). */
|
|
29
|
+
const GAVE_UP = new Set(['exhausted', 'declined', 'no-time-left']);
|
|
30
|
+
/** The series stopped on this record because retrying was given up (exhausted, declined or no time left). */
|
|
31
|
+
function gaveUp(record) {
|
|
32
|
+
return record.next === 'stop' && GAVE_UP.has(record.reason);
|
|
33
|
+
}
|
|
34
|
+
exports.gaveUp = gaveUp;
|
|
35
|
+
/**
|
|
36
|
+
* The record belongs to a STAGE's series that retried, gave up or timed out — the one row predicate every recorder
|
|
37
|
+
* shares. A call's or an observed attempt (`scope.$call`, `observed()`, P2) is never a row here: these recorders keep
|
|
38
|
+
* one row per stage execution, and a call is counted per TARGET (the `attempts()` recorder, P7) — drawn as a stage's
|
|
39
|
+
* retry it would say the stage retried when only its call did.
|
|
40
|
+
*/
|
|
41
|
+
function isRetryEvidence(record) {
|
|
42
|
+
if (record.kind !== 'stage')
|
|
43
|
+
return false;
|
|
44
|
+
return (record.attempt > 1 ||
|
|
45
|
+
record.next === 'retry' ||
|
|
46
|
+
record.outcome === 'timeout' ||
|
|
47
|
+
(gaveUp(record) && (record.of ?? 1) > 1));
|
|
48
|
+
}
|
|
49
|
+
exports.isRetryEvidence = isRetryEvidence;
|
|
50
|
+
/** Did the attempt itself fail — a failure, a timeout or the run's abort (not a success, not a pause)? */
|
|
51
|
+
function attemptFailed(record) {
|
|
52
|
+
return record.outcome === 'failed' || record.outcome === 'timeout' || record.outcome === 'aborted';
|
|
53
|
+
}
|
|
54
|
+
exports.attemptFailed = attemptFailed;
|
|
55
|
+
/** The record's name. */
|
|
56
|
+
function attemptRef(record) {
|
|
57
|
+
return { series: record.series, attempt: record.attempt };
|
|
58
|
+
}
|
|
59
|
+
exports.attemptRef = attemptRef;
|
|
60
|
+
/**
|
|
61
|
+
* The path-prefixed id of the subflow an attempt's stage ran in (`'sf-outer/sf-inner'`), or `undefined` at the top
|
|
62
|
+
* level — read off the stage execution's `runtimeStageId` (the event's, else the series'), the one id that always
|
|
63
|
+
* carries it.
|
|
64
|
+
*/
|
|
65
|
+
function subflowOfAttempt(event) {
|
|
66
|
+
const segments = (0, foottrace_1.subflowSegmentsOf)(event.traversalContext?.runtimeStageId ?? event.record.series);
|
|
67
|
+
return segments.length > 0 ? (0, foottrace_1.joinPath)(...segments) : undefined;
|
|
68
|
+
}
|
|
69
|
+
exports.subflowOfAttempt = subflowOfAttempt;
|
|
70
|
+
/** A zeroed per-outcome count. */
|
|
71
|
+
function emptyOutcomeCounts() {
|
|
72
|
+
return { ok: 0, failed: 0, timeout: 0, aborted: 0, paused: 0 };
|
|
73
|
+
}
|
|
74
|
+
exports.emptyOutcomeCounts = emptyOutcomeCounts;
|
|
75
|
+
/**
|
|
76
|
+
* Per-series tallies, keyed by `series`, for the series that are evidence. `add` returns the series' state after
|
|
77
|
+
* the record, or `undefined` for a record that is not evidence (nothing to keep).
|
|
78
|
+
*/
|
|
79
|
+
class AttemptSeriesBook {
|
|
80
|
+
bySeries = new Map();
|
|
81
|
+
add(record) {
|
|
82
|
+
if (!isRetryEvidence(record))
|
|
83
|
+
return undefined;
|
|
84
|
+
let entry = this.bySeries.get(record.series);
|
|
85
|
+
if (!entry) {
|
|
86
|
+
entry = { refs: [], counts: emptyOutcomeCounts() };
|
|
87
|
+
this.bySeries.set(record.series, entry);
|
|
88
|
+
}
|
|
89
|
+
entry.refs.push(attemptRef(record));
|
|
90
|
+
entry.counts[record.outcome] += 1;
|
|
91
|
+
const attempts = [...entry.refs];
|
|
92
|
+
if (record.next === 'retry')
|
|
93
|
+
return { series: record.series, attempts };
|
|
94
|
+
return { series: record.series, attempts, summary: summaryOf(entry.refs.length, entry.counts, record) };
|
|
95
|
+
}
|
|
96
|
+
clear() {
|
|
97
|
+
this.bySeries.clear();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.AttemptSeriesBook = AttemptSeriesBook;
|
|
101
|
+
function summaryOf(count, counts, last) {
|
|
102
|
+
return {
|
|
103
|
+
count,
|
|
104
|
+
...counts,
|
|
105
|
+
last: {
|
|
106
|
+
next: last.next,
|
|
107
|
+
reason: last.reason,
|
|
108
|
+
...(last.category !== undefined && { category: last.category }),
|
|
109
|
+
...(last.retryOnThrew && { retryOnThrew: true }),
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW1wdFNlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvYXR0ZW1wdFNlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILHlDQUF3RDtBQWdCeEQsMEdBQTBHO0FBQzFHLE1BQU0sT0FBTyxHQUErQixJQUFJLEdBQUcsQ0FBZ0IsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFFOUcsNkdBQTZHO0FBQzdHLFNBQWdCLE1BQU0sQ0FBQyxNQUE4QztJQUNuRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFGRCx3QkFFQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE1BQXFCO0lBQ25ELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUMsT0FBTyxDQUNMLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQztRQUNsQixNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU87UUFDdkIsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTO1FBQzVCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDekMsQ0FBQztBQUNKLENBQUM7QUFSRCwwQ0FRQztBQUVELDBHQUEwRztBQUMxRyxTQUFnQixhQUFhLENBQUMsTUFBcUI7SUFDakQsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQztBQUNyRyxDQUFDO0FB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LEVBQUUsWUFBWSxFQUFFLElBQWEsRUFBRSxDQUFDO1NBQzFEO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZGVyL2F0dGVtcHRTZXJpZXMudHMg4oCUIHdoYXQgYSBSRUNPUkRFUiBrZWVwcyBvZiBhIHNlcmllczogdGhlIG9uZSBldmlkZW5jZSBwcmVkaWNhdGUsIHRoZSBzdG9wIHRoYXQgZ2F2ZSB1cCwgYW5kIGFcbiAqIHBlci1zZXJpZXMgdGFsbHkgcmVidWlsdCBmcm9tIGBvbkF0dGVtcHRgIHJlY29yZHMgKGRlc2lnbiDCpzUuMSwgUDFjKS5cbiAqXG4gKiBXSFkgb25lIG1vZHVsZTogc2V2ZW4gYnVpbHQtaW4gcmVjb3JkZXJzIGFjY291bnQgZm9yIGF0dGVtcHRzLCBhbmQgZWFjaCBtdXN0IGFncmVlIG9uIHR3byBxdWVzdGlvbnMg4oCUIFwiaXMgdGhpc1xuICogc2VyaWVzIHdvcnRoIGEgcm93P1wiIGFuZCBcImRpZCBpdCBnaXZlIHVwP1wiIOKAlCBvciBhIFRvcG9sb2d5IG5vZGUgYW5kIGEgYm91bmRhcnkgY291bnQgd291bGQgZGlzYWdyZWUgYWJvdXQgdGhlXG4gKiBzYW1lIHJ1bi4gQXNrZWQgaGVyZSwgb25jZS5cbiAqXG4gKiBUSEUgcHJlZGljYXRlIChgaXNSZXRyeUV2aWRlbmNlYCk6IGEgc2VyaWVzIGlzIGV2aWRlbmNlIHdoZW4gaXQgUkVUUklFRCAoc29tZSBhdHRlbXB0IHdhcyBmb2xsb3dlZCBieSBhbm90aGVyKSxcbiAqIEdBVkUgVVAgd2hpbGUgYSByZXRyeSB3YXMgcG9zc2libGUgKGl0IHN0b3BwZWQgYGV4aGF1c3RlZGAsIGBkZWNsaW5lZGAgb3IgYG5vLXRpbWUtbGVmdGAgd2l0aCBgb2YgPiAxYCwgwqczLjkpLCBvclxuICogVElNRUQgT1VUIChhbiBhdHRlbXB0IHJhbiBvdXQgb2YgaXRzIGNhcCBvciB0aGUgZGVhZGxpbmUg4oCUIFAxYidzIGxvbmUgdGltZW91dCBpcyB0aGUgaW5jaWRlbnQncyBvd24gc2hhcGUpLiBBXG4gKiBwb2xpY3kgc3RhZ2UgdGhhdCBzdWNjZWVkZWQgZmlyc3QgdGltZSDigJQgb3IgdGhhdCBwYXVzZWQgb3Igd2FzIGFib3J0ZWQgb24gaXRzIGZpcnN0IGF0dGVtcHQg4oCUIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgc3RhZ2Ugd2l0aCBubyBwb2xpY3kgaW4gZXZlcnkgcmVjb3JkZXIgcm93LCBzbyBhIGNoYXJ0IGluIHdoaWNoIG5vdGhpbmcgcmV0cmllZCBrZWVwc1xuICogdGhvc2Ugcm93cyBieXRlLWlkZW50aWNhbCAobGF3IDIpLiBTbyBpcyBhIExPTkUgYXR0ZW1wdCAoYG9mOiAxYCwgcmVjb3JkZWQgZm9yIGV2ZXJ5IHN0YWdlIG9mIGEgcnVuIHdpdGggYVxuICogZGVhZGxpbmUsIFAxYikgdGhhdCBtZXJlbHkgZmFpbGVkOiBhIHN0YWdlIGVycm9yIGxpa2UgYW55IG90aGVyLCBzbyBhIGRlYWRsaW5lIGFsb25lIG5ldmVyIG11bHRpcGxpZXMgcm93cy5cbiAqXG4gKiBSZWNvcmRzIGFycml2ZSBpbiBvcmRlciB3aXRoaW4gYSBzZXJpZXMsIHNvIHRoZSBwcmVkaWNhdGUgaXMgZGVjaWRlZCBhdCB0aGUgc2VyaWVzJyBGSVJTVCByZWNvcmQ6IGF0dGVtcHQgMSBpc1xuICogZXZpZGVuY2UgaWZmIGl0IGRpZCBub3QgZW5kIHRoZSBzZXJpZXMgcXVpZXRseSwgYW5kIGV2ZXJ5IGxhdGVyIGF0dGVtcHQgaXMgZXZpZGVuY2UgYnkgYmVpbmcgb25lLlxuICpcbiAqIEw1IChgcmVjb3JkZXIvKipgKSwgYmVzaWRlIHRoZSBzdG9yZXM6IGl0IGltcG9ydHMgdGhlIGF0dGVtcHQgdm9jYWJ1bGFyeSdzIHR5cGVzIG9ubHkgKHRoZSBMMCBsZWFmKSwgc29cbiAqIGByZWNvcmRlci9gIG5ldmVyIHRha2VzIGEgcnVudGltZSBlZGdlIGludG8gYGF0dGVtcHQvYCDigJQgd2hvc2UgcnVubmVyIHJlYWNoZXMgYGRlY2lkZS9gIGFuZCBgc2NvcGUvYCwgd2hpY2hcbiAqIGltcG9ydCBgcmVjb3JkZXIvYCAoYSBtb2R1bGUgY3ljbGUpLlxuICovXG5cbmltcG9ydCB7IGpvaW5QYXRoLCBzdWJmbG93U2VnbWVudHNPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgQXR0ZW1wdE91dGNvbWUsIEF0dGVtcHRSZWFzb24sIEF0dGVtcHRSZWNvcmQsIEF0dGVtcHRTdW1tYXJ5IH0gZnJvbSAnLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5cbi8qKlxuICogT25lIGF0dGVtcHQsIG5hbWVkIOKAlCBgc2VyaWVzYCAodGhlIHN0YWdlIGV4ZWN1dGlvbidzIGBydW50aW1lU3RhZ2VJZGApIHBsdXMgdGhlIDEtYmFzZWQgYGF0dGVtcHRgLiBUaGVcbiAqIGlkZW50aXR5IGBBdHRlbXB0UmVjb3JkYCBjYXJyaWVzIHVudGlsIHRoZSBlbmdpbmUgc3RhbXBzIGZvb3R0cmFjZSdzIGF0dGVtcHQgaWQgKGRlc2lnbiDCpzMuNCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0ZW1wdFJlZiB7XG4gIHJlYWRvbmx5IHNlcmllczogc3RyaW5nO1xuICByZWFkb25seSBhdHRlbXB0OiBudW1iZXI7XG59XG5cbi8qKiBBdHRlbXB0IGNvdW50cyBwZXIgb3V0Y29tZSDigJQgdGhlIHNoYXBlIGBBdHRlbXB0U3VtbWFyeWAgdXNlcywgd2l0aG91dCB0aGUgc2VyaWVzJyBlbmQuICovXG5leHBvcnQgdHlwZSBBdHRlbXB0T3V0Y29tZUNvdW50cyA9IFJlYWRvbmx5PFJlY29yZDxBdHRlbXB0T3V0Y29tZSwgbnVtYmVyPj47XG5cbi8qKiBUaGUgc3RvcCByZWFzb25zIHRoYXQgbWVhbiBcImdhdmUgdXBcIiDigJQgYXBhcnQgZnJvbSBgYWJvcnRlZGAgKHRoZSBydW4gZW5kZWQgaXQpIGFuZCBgcGF1c2VkYCAowqczLjkpLiAqL1xuY29uc3QgR0FWRV9VUDogUmVhZG9ubHlTZXQ8QXR0ZW1wdFJlYXNvbj4gPSBuZXcgU2V0PEF0dGVtcHRSZWFzb24+KFsnZXhoYXVzdGVkJywgJ2RlY2xpbmVkJywgJ25vLXRpbWUtbGVmdCddKTtcblxuLyoqIFRoZSBzZXJpZXMgc3RvcHBlZCBvbiB0aGlzIHJlY29yZCBiZWNhdXNlIHJldHJ5aW5nIHdhcyBnaXZlbiB1cCAoZXhoYXVzdGVkLCBkZWNsaW5lZCBvciBubyB0aW1lIGxlZnQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdhdmVVcChyZWNvcmQ6IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbic+KTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvcmQubmV4dCA9PT0gJ3N0b3AnICYmIEdBVkVfVVAuaGFzKHJlY29yZC5yZWFzb24pO1xufVxuXG4vKipcbiAqIFRoZSByZWNvcmQgYmVsb25ncyB0byBhIFNUQUdFJ3Mgc2VyaWVzIHRoYXQgcmV0cmllZCwgZ2F2ZSB1cCBvciB0aW1lZCBvdXQg4oCUIHRoZSBvbmUgcm93IHByZWRpY2F0ZSBldmVyeSByZWNvcmRlclxuICogc2hhcmVzLiBBIGNhbGwncyBvciBhbiBvYnNlcnZlZCBhdHRlbXB0IChgc2NvcGUuJGNhbGxgLCBgb2JzZXJ2ZWQoKWAsIFAyKSBpcyBuZXZlciBhIHJvdyBoZXJlOiB0aGVzZSByZWNvcmRlcnMga2VlcFxuICogb25lIHJvdyBwZXIgc3RhZ2UgZXhlY3V0aW9uLCBhbmQgYSBjYWxsIGlzIGNvdW50ZWQgcGVyIFRBUkdFVCAodGhlIGBhdHRlbXB0cygpYCByZWNvcmRlciwgUDcpIOKAlCBkcmF3biBhcyBhIHN0YWdlJ3NcbiAqIHJldHJ5IGl0IHdvdWxkIHNheSB0aGUgc3RhZ2UgcmV0cmllZCB3aGVuIG9ubHkgaXRzIGNhbGwgZGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRyeUV2aWRlbmNlKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IGJvb2xlYW4ge1xuICBpZiAocmVjb3JkLmtpbmQgIT09ICdzdGFnZScpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIChcbiAgICByZWNvcmQuYXR0ZW1wdCA+IDEgfHxcbiAgICByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JyB8fFxuICAgIHJlY29yZC5vdXRjb21lID09PSAndGltZW91dCcgfHxcbiAgICAoZ2F2ZVVwKHJlY29yZCkgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpXG4gICk7XG59XG5cbi8qKiBEaWQgdGhlIGF0dGVtcHQgaXRzZWxmIGZhaWwg4oCUIGEgZmFpbHVyZSwgYSB0aW1lb3V0IG9yIHRoZSBydW4ncyBhYm9ydCAobm90IGEgc3VjY2Vzcywgbm90IGEgcGF1c2UpPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGVtcHRGYWlsZWQocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvcmQub3V0Y29tZSA9PT0gJ2ZhaWxlZCcgfHwgcmVjb3JkLm91dGNvbWUgPT09ICd0aW1lb3V0JyB8fCByZWNvcmQub3V0Y29tZSA9PT0gJ2Fib3J0ZWQnO1xufVxuXG4vKiogVGhlIHJlY29yZCdzIG5hbWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdFJlZihyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBBdHRlbXB0UmVmIHtcbiAgcmV0dXJuIHsgc2VyaWVzOiByZWNvcmQuc2VyaWVzLCBhdHRlbXB0OiByZWNvcmQuYXR0ZW1wdCB9O1xufVxuXG4vKipcbiAqIFRoZSBwYXRoLXByZWZpeGVkIGlkIG9mIHRoZSBzdWJmbG93IGFuIGF0dGVtcHQncyBzdGFnZSByYW4gaW4gKGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCksIG9yIGB1bmRlZmluZWRgIGF0IHRoZSB0b3BcbiAqIGxldmVsIOKAlCByZWFkIG9mZiB0aGUgc3RhZ2UgZXhlY3V0aW9uJ3MgYHJ1bnRpbWVTdGFnZUlkYCAodGhlIGV2ZW50J3MsIGVsc2UgdGhlIHNlcmllcycpLCB0aGUgb25lIGlkIHRoYXQgYWx3YXlzXG4gKiBjYXJyaWVzIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViZmxvd09mQXR0ZW1wdChldmVudDoge1xuICByZWFkb25seSByZWNvcmQ6IEF0dGVtcHRSZWNvcmQ7XG4gIHJlYWRvbmx5IHRyYXZlcnNhbENvbnRleHQ/OiB7IHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfTtcbn0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZWdtZW50cyA9IHN1YmZsb3dTZWdtZW50c09mKGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/IGV2ZW50LnJlY29yZC5zZXJpZXMpO1xuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMCA/IGpvaW5QYXRoKC4uLnNlZ21lbnRzKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgemVyb2VkIHBlci1vdXRjb21lIGNvdW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5T3V0Y29tZUNvdW50cygpOiBSZWNvcmQ8QXR0ZW1wdE91dGNvbWUsIG51bWJlcj4ge1xuICByZXR1cm4geyBvazogMCwgZmFpbGVkOiAwLCB0aW1lb3V0OiAwLCBhYm9ydGVkOiAwLCBwYXVzZWQ6IDAgfTtcbn1cblxuLyoqIFdoYXQgYSByZWNvcmRlciBrbm93cyBvZiBvbmUgc2VyaWVzIHNvIGZhci4gYHN1bW1hcnlgIGlzIHByZXNlbnQgb25jZSB0aGUgc2VyaWVzIGVuZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRlbXB0U2VyaWVzU3RhdGUge1xuICByZWFkb25seSBzZXJpZXM6IHN0cmluZztcbiAgLyoqIFRoZSBzZXJpZXMnIGF0dGVtcHRzLCBpbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgYXR0ZW1wdHM6IHJlYWRvbmx5IEF0dGVtcHRSZWZbXTtcbiAgLyoqXG4gICAqIFRoZSBzZXJpZXMgYXQgYSBnbGFuY2Ug4oCUIHRoZSBzYW1lIHZhbHVlIHRoZSBydW5uZXIgc3RhbXBzIG9uIGBTdGFnZVNuYXBzaG90LmF0dGVtcHRTdW1tYXJ5YCwgcmVidWlsdCBmcm9tIHRoZVxuICAgKiByZWNvcmRzLiBBYnNlbnQgd2hpbGUgdGhlIGxhc3QgcmVjb3JkIHNheXMgYHJldHJ5YDogdGhlIHNlcmllcyBpcyBpbiBmbGlnaHQsIG9yIHRoZSBydW4ncyBzaWduYWwgY3V0IGl0cyB3YWl0XG4gICAqIChubyByZWNvcmQgZm9sbG93czsgb25seSB0aGUgZXhlY3V0aW9uIHRyZWUga25vd3MgaG93IGl0IGVuZGVkKS5cbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnk/OiBBdHRlbXB0U3VtbWFyeTtcbn1cblxuLyoqXG4gKiBQZXItc2VyaWVzIHRhbGxpZXMsIGtleWVkIGJ5IGBzZXJpZXNgLCBmb3IgdGhlIHNlcmllcyB0aGF0IGFyZSBldmlkZW5jZS4gYGFkZGAgcmV0dXJucyB0aGUgc2VyaWVzJyBzdGF0ZSBhZnRlclxuICogdGhlIHJlY29yZCwgb3IgYHVuZGVmaW5lZGAgZm9yIGEgcmVjb3JkIHRoYXQgaXMgbm90IGV2aWRlbmNlIChub3RoaW5nIHRvIGtlZXApLlxuICovXG5leHBvcnQgY2xhc3MgQXR0ZW1wdFNlcmllc0Jvb2sge1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5U2VyaWVzID0gbmV3IE1hcDxzdHJpbmcsIHsgcmVmczogQXR0ZW1wdFJlZltdOyBjb3VudHM6IFJlY29yZDxBdHRlbXB0T3V0Y29tZSwgbnVtYmVyPiB9PigpO1xuXG4gIGFkZChyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBBdHRlbXB0U2VyaWVzU3RhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghaXNSZXRyeUV2aWRlbmNlKHJlY29yZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGVudHJ5ID0gdGhpcy5ieVNlcmllcy5nZXQocmVjb3JkLnNlcmllcyk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgZW50cnkgPSB7IHJlZnM6IFtdLCBjb3VudHM6IGVtcHR5T3V0Y29tZUNvdW50cygpIH07XG4gICAgICB0aGlzLmJ5U2VyaWVzLnNldChyZWNvcmQuc2VyaWVzLCBlbnRyeSk7XG4gICAgfVxuICAgIGVudHJ5LnJlZnMucHVzaChhdHRlbXB0UmVmKHJlY29yZCkpO1xuICAgIGVudHJ5LmNvdW50c1tyZWNvcmQub3V0Y29tZV0gKz0gMTtcbiAgICBjb25zdCBhdHRlbXB0cyA9IFsuLi5lbnRyeS5yZWZzXTtcbiAgICBpZiAocmVjb3JkLm5leHQgPT09ICdyZXRyeScpIHJldHVybiB7IHNlcmllczogcmVjb3JkLnNlcmllcywgYXR0ZW1wdHMgfTtcbiAgICByZXR1cm4geyBzZXJpZXM6IHJlY29yZC5zZXJpZXMsIGF0dGVtcHRzLCBzdW1tYXJ5OiBzdW1tYXJ5T2YoZW50cnkucmVmcy5sZW5ndGgsIGVudHJ5LmNvdW50cywgcmVjb3JkKSB9O1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5ieVNlcmllcy5jbGVhcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1bW1hcnlPZihjb3VudDogbnVtYmVyLCBjb3VudHM6IFJlY29yZDxBdHRlbXB0T3V0Y29tZSwgbnVtYmVyPiwgbGFzdDogQXR0ZW1wdFJlY29yZCk6IEF0dGVtcHRTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBjb3VudCxcbiAgICAuLi5jb3VudHMsXG4gICAgbGFzdDoge1xuICAgICAgbmV4dDogbGFzdC5uZXh0IGFzIEF0dGVtcHRTdW1tYXJ5WydsYXN0J11bJ25leHQnXSxcbiAgICAgIHJlYXNvbjogbGFzdC5yZWFzb24sXG4gICAgICAuLi4obGFzdC5jYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmIHsgY2F0ZWdvcnk6IGxhc3QuY2F0ZWdvcnkgfSksXG4gICAgICAuLi4obGFzdC5yZXRyeU9uVGhyZXcgJiYgeyByZXRyeU9uVGhyZXc6IHRydWUgYXMgY29uc3QgfSksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -57,6 +57,8 @@ exports.HOOKS = {
|
|
|
57
57
|
onError: { on: { scope: 'ErrorEvent', flow: 'FlowErrorEvent' }, executorMade: false },
|
|
58
58
|
onStageStart: { on: { scope: 'StageEvent' }, executorMade: false },
|
|
59
59
|
onStageEnd: { on: { scope: 'StageEvent' }, executorMade: false },
|
|
60
|
+
// Every attempt of a declared retry policy (10.1): fires DURING a stage, once per attempt, before onStageRetry.
|
|
61
|
+
onAttempt: { on: { flow: 'FlowAttemptEvent' }, executorMade: false },
|
|
60
62
|
// Declarative per-stage retry (9.15): fires DURING a stage, once per failed attempt that will be retried.
|
|
61
63
|
onStageRetry: { on: { flow: 'FlowStageRetryEvent' }, executorMade: false },
|
|
62
64
|
// Throttling (9.39.0, R9): a fork child's error the run's `throttlingErrorChecker` classified.
|
|
@@ -110,6 +112,7 @@ function recorderFailureEvent(site, thrown, hook) {
|
|
|
110
112
|
error: (0, errorInfo_js_1.extractErrorInfo)(thrown),
|
|
111
113
|
operation: operationFor(hook),
|
|
112
114
|
channel: 'scope',
|
|
115
|
+
...(site.correlation && { correlation: site.correlation }),
|
|
113
116
|
};
|
|
114
117
|
}
|
|
115
118
|
exports.recorderFailureEvent = recorderFailureEvent;
|
|
@@ -162,4 +165,4 @@ function fire(recorders, hook, event, onFailure = SWALLOW) {
|
|
|
162
165
|
}
|
|
163
166
|
}
|
|
164
167
|
exports.fire = fire;
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2hvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRzs7O0FBRUgsNERBQThEO0FBQzlELDhDQUEwQztBQUUxQyx5REFBMEQ7QUFnRDFEOzs7R0FHRztBQUNVLFFBQUEsS0FBSyxHQUFHO0lBQ25CLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzdELFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQy9ELGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDOUQsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUN0RSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUM5RCxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQ3RFLGNBQWMs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Q0gsQ0FBQztBQU5ELHdDQU1DO0FBS0Q7OztHQUdHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLE1BQWM7SUFDMUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLElBQUEsc0JBQVMsR0FBRTtZQUFFLE9BQU87UUFDekIsTUFBTSxFQUFFLEdBQUksUUFBNkIsQ0FBQyxFQUFFLENBQUM7UUFDN0Msc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxNQUFNLGVBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxjQUFjLElBQUksS0FBSyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdHLENBQUMsQ0FBQztBQUNKLENBQUM7QUFQRCxzQ0FPQztBQUVELE1BQU0sT0FBTyxHQUFnQixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFFN0M7Ozs7R0FJRztBQUNILFNBQWdCLElBQUksQ0FDbEIsU0FBMkIsRUFDM0IsSUFBTyxFQUNQLEtBQXFCLEVBQ3JCLFlBQXlCLE9BQU87SUFFaEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUM7WUFDSCxJQUFBLGtDQUFrQixFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUM7Z0JBQ0gsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxxRkFBcUY7WUFDdkYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQWpCRCxvQkFpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZGVyL2hvb2tzLnRzIOKAlCB0aGUgaG9vayByZWdpc3RyeSBhbmQgdGhlIG9uZSBkaXNwYXRjaGVyIChGNikuXG4gKlxuICogRXZlcnkgcmVjb3JkZXIgaG9vayBuYW1lIGlzIGRlY2xhcmVkIE9OQ0UsIGhlcmUsIGluIGBIT09LU2AuIEV2ZXJ5dGhpbmcgdGhhdCB1c2VkIHRvIGtlZXBcbiAqIGl0cyBvd24gaGFuZCBsaXN0IGRlcml2ZXMgZnJvbSBpdDpcbiAqXG4gKiAgIC0gY2hhbm5lbCByb3V0aW5nIChgQ29tYmluZWRSZWNvcmRlciDCtyBoYXMqUmVjb3JkZXJNZXRob2RzYCkgYXNrcyBgaG9va3NPbihjaGFubmVsKWAg4oCUIHRoZVxuICogICAgIHRocmVlIGhhbmQgbGlzdHMgaXQgcmVwbGFjZWQgKGBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTYCwgYEZMT1df4oCmYCwgYEVNSVRf4oCmYCkgYXJlIGdvbmU7XG4gKiAgIC0gdGhlIGRlZmVycmVkIHRpZXIncyB0YXBzIChgRGVmZXJyZWRPYnNlcnZlclRpZXIgwrcgYnVpbGRTY29wZVRhcCAvIGJ1aWxkRmxvd1RhcGApIGl0ZXJhdGVcbiAqICAgICBgaG9va3NPbmA7XG4gKiAgIC0gYENvbXBvc2l0ZVJlY29yZGVyYCdzIGZhbi1vdXQgaXMgZ2VuZXJhdGVkIGZyb20gYEhPT0tfTkFNRVNgIChldmVyeSBob29rLCBldmVyeSBjaGFubmVsKS5cbiAqXG4gKiBgZmlyZWAgaXMgdGhlIG9uZSBwZXItcmVjb3JkZXIgbG9vcDogY2FsbCB0aGUgaG9vayBvbiBlYWNoIHJlY29yZGVyLCBhbmQgaGFuZCBhIHRocm93IHRvIHRoZVxuICogY2FsbGVyJ3MgZmFpbHVyZSBwb2xpY3kg4oCUIG5ldmVyIHRvIHRoZSBjYWxsZXIncyBjYWxsZXIuIFRoZSBlbmdpbmUga2VlcHMgaXRzIHR3byBwb2xpY2llc1xuICogKHRoZSBzY29wZSBjaGFubmVsIHJvdXRlcyBhIHRocm93IHRvIGV2ZXJ5IHJlY29yZGVyJ3MgYG9uRXJyb3JgOyB0aGUgZmxvdyBjaGFubmVsIHdhcm5zIGluXG4gKiBkZXYgbW9kZSBhbmQgbW92ZXMgb24pOyBgZmlyZWAgb25seSBndWFyYW50ZWVzIHRoYXQgd2hhdGV2ZXIgdGhlIHBvbGljeSBkb2VzLCB0aGUgbG9vcCBnb2VzXG4gKiBvbiBhbmQgbm90aGluZyBlc2NhcGVzLiBCb3Jyb3dlZDogQyMgYE11bHRpY2FzdERlbGVnYXRlYCAob25lIGludm9jYXRpb24gbGlzdCksIE9wZW5UZWxlbWV0cnlcbiAqIGBNdWx0aVNwYW5Qcm9jZXNzb3JgIChvbmUgZmFuLW91dCwgYSBmYWlsaW5nIHByb2Nlc3NvciBuZXZlciBzdG9wcyB0aGUgb3RoZXJzKS5cbiAqXG4gKiAjIyBUaGUgY29tcGlsZS10aW1lIGxhd1xuICpcbiAqIGBIT09LU2AgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSB0aHJlZSByZWNvcmRlciBpbnRlcmZhY2VzIGluIEJPVEggZGlyZWN0aW9uczpcbiAqXG4gKiAgIC0gYSBob29rIGFkZGVkIHRvIGBTY29wZVJlY29yZGVyYCAvIGBGbG93UmVjb3JkZXJgIC8gYEVtaXRSZWNvcmRlcmAgYW5kIG5vdCB0byBgSE9PS1NgIGlzIGFcbiAqICAgICBtaXNzaW5nIHByb3BlcnR5IG9mIHRoZSBgc2F0aXNmaWVzYCBjbGF1c2Ug4oCUIGl0IGRvZXMgbm90IGNvbXBpbGU7XG4gKiAgIC0gYSBob29rIGFkZGVkIHRvIG9uZSBpbnRlcmZhY2UgdGhhdCBgSE9PS1NgIGxpc3RzIG9uIGFub3RoZXIgY2hhbm5lbCBvbmx5IGlzIGEgbWlzc2luZ1xuICogICAgIGtleSBvZiB0aGF0IGVudHJ5J3MgYG9uYCDigJQgaXQgZG9lcyBub3QgY29tcGlsZTtcbiAqICAgLSBhbiBlbnRyeSBuYW1pbmcgYSBjaGFubmVsIHdob3NlIGludGVyZmFjZSBkb2VzIG5vdCBkZWNsYXJlIGl0IGlzIGFuIGV4Y2VzcyBwcm9wZXJ0eSDigJRcbiAqICAgICBpdCBkb2VzIG5vdCBjb21waWxlLlxuICpcbiAqIFBpbm5lZCBieSB0ZXN0L2xpYi9yZWNvcmRlci9ob29rcy50ZXN0LnRzICh0aGUgYEB0cy1leHBlY3QtZXJyb3JgIHByb2JlcykuXG4gKi9cblxuaW1wb3J0IHsgaW52b2tlUmVjb3JkZXJIb29rIH0gZnJvbSAnLi4vY2FwdHVyZS9pbnZva2VIb29rLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV4dHJhY3RFcnJvckluZm8gfSBmcm9tICcuLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JFdmVudCwgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9FbWl0UmVjb3JkZXIuanMnO1xuXG4vKiogTWVtYmVycyBldmVyeSByZWNvcmRlciBpbnRlcmZhY2Ugc2hhcmVzIHRoYXQgYXJlIE5PVCBldmVudHMuICovXG50eXBlIExpZmVjeWNsZSA9ICdpZCcgfCAnY2xlYXInIHwgJ3RvU25hcHNob3QnO1xuXG4vKiogSG9va3Mgb2YgdGhlIGVtaXQgY2hhbm5lbCAoYEVtaXRSZWNvcmRlcmApLiAqL1xuZXhwb3J0IHR5cGUgRW1pdEhvb2tOYW1lID0gRXhjbHVkZTxrZXlvZiBFbWl0UmVjb3JkZXIsIExpZmVjeWNsZT47XG4vKiogSG9va3Mgb2YgdGhlIHNjb3BlIChkYXRhLWZsb3cpIGNoYW5uZWwuIGBTY29wZVJlY29yZGVyYCBhbHNvIGRlY2xhcmVzIGBvbkVtaXRgIOKAlCB0aGUgZW1pdFxuICogIGNoYW5uZWwgcmlkZXMgdGhlIHNjb3BlIGxpc3Qg4oCUIHNvIGl0IGlzIHN1YnRyYWN0ZWQgaGVyZSBhbmQgY291bnRlZCBvbiBgZW1pdGAuICovXG5leHBvcnQgdHlwZSBTY29wZUhvb2tOYW1lID0gRXhjbHVkZTxrZXlvZiBTY29wZVJlY29yZGVyLCBMaWZlY3ljbGUgfCBFbWl0SG9va05hbWU+O1xuLyoqIEhvb2tzIG9mIHRoZSBmbG93IChjb250cm9sLWZsb3cpIGNoYW5uZWwuICovXG5leHBvcnQgdHlwZSBGbG93SG9va05hbWUgPSBFeGNsdWRlPGtleW9mIEZsb3dSZWNvcmRlciwgTGlmZWN5Y2xlPjtcbi8qKiBFdmVyeSByZWNvcmRlciBob29rLCBvbiBhbnkgY2hhbm5lbC4gKi9cbmV4cG9ydCB0eXBlIEhvb2tOYW1lID0gU2NvcGVIb29rTmFtZSB8IEZsb3dIb29rTmFtZSB8IEVtaXRIb29rTmFtZTtcbi8qKiBUaGUgdGhyZWUgcnVudGltZSBjaGFubmVscyAodGhlIGJ1aWxkLXRpbWUgc3RydWN0dXJlIGNoYW5uZWwgZmlyZXMgaXRzIGhvb2tzIGJ5IG5hbWUpLiAqL1xuZXhwb3J0IHR5cGUgSG9va0NoYW5uZWwgPSAnc2NvcGUnIHwgJ2Zsb3cnIHwgJ2VtaXQnO1xuXG4vKiogVGhlIGNoYW5uZWxzIHdob3NlIGludGVyZmFjZSBERUNMQVJFUyBob29rIGBLYCDigJQgd2hhdCBhbiBlbnRyeSdzIGBvbmAgbXVzdCBuYW1lIGV4YWN0bHkuICovXG5leHBvcnQgdHlwZSBDaGFubmVsc09mPEsgZXh0ZW5kcyBIb29rTmFtZT4gPVxuICB8IChLIGV4dGVuZHMgU2NvcGVIb29rTmFtZSA/ICdzY29wZScgOiBuZXZlcilcbiAgfCAoSyBleHRlbmRzIEZsb3dIb29rTmFtZSA/ICdmbG93JyA6IG5ldmVyKVxuICB8IChLIGV4dGVuZHMgRW1pdEhvb2tOYW1lID8gJ2VtaXQnIDogbmV2ZXIpO1xuXG50eXBlIFBheWxvYWRPZjxJLCBLPiA9IEsgZXh0ZW5kcyBrZXlvZiBJID8gKE5vbk51bGxhYmxlPElbS10+IGV4dGVuZHMgKGV2ZW50OiBpbmZlciBFKSA9PiB1bmtub3duID8gRSA6IG5ldmVyKSA6IG5ldmVyO1xudHlwZSBDaGFubmVsSW50ZXJmYWNlID0geyBzY29wZTogU2NvcGVSZWNvcmRlcjsgZmxvdzogRmxvd1JlY29yZGVyOyBlbWl0OiBFbWl0UmVjb3JkZXIgfTtcblxuLyoqIFRoZSBwYXlsb2FkIGhvb2sgYEtgIHJlY2VpdmVzIG9uIGNoYW5uZWwgYENgIOKAlCByZWFkIG9mZiB0aGUgY2hhbm5lbCdzIGludGVyZmFjZSwgbmV2ZXIgcmVzdGF0ZWQuICovXG5leHBvcnQgdHlwZSBIb29rUGF5bG9hZDxLIGV4dGVuZHMgSG9va05hbWUsIEMgZXh0ZW5kcyBDaGFubmVsc09mPEs+ID0gQ2hhbm5lbHNPZjxLPj4gPSBDIGV4dGVuZHMgSG9va0NoYW5uZWxcbiAgPyBQYXlsb2FkT2Y8Q2hhbm5lbEludGVyZmFjZVtDXSwgSz5cbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBPbmUgcmVnaXN0cnkgZW50cnkuXG4gKlxuICogLSBgb25gIOKAlCBldmVyeSBjaGFubmVsIHRoZSBob29rIGlzIGRlY2xhcmVkIG9uLCBlYWNoIG1hcHBlZCB0byB0aGUgTkFNRSBvZiBpdHMgcGF5bG9hZCB0eXBlXG4gKiAgIChwcm9zZSBmb3IgcmVhZGVyczsgdGhlIHR5cGUgaXRzZWxmIGlzIGBIb29rUGF5bG9hZDxLLCBDPmAsIHJlYWQgb2ZmIHRoZSBpbnRlcmZhY2UpLlxuICogLSBgZXhlY3V0b3JNYWRlYCDigJQgYSBMQUJFTCAocmVhZCBieSB0ZXN0cyBhbmQgZG9jcywgbm90IGJ5IHJvdXRpbmcpOiBgdHJ1ZWAgd2hlbiB0aGUgZXhlY3V0b3Igc3ludGhlc2l6ZXMgdGhlIGV2ZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGFcbiAqICAgZGlzcGF0Y2ggc2l0ZSBpbiB0aGUgZW5naW5lICh0b2RheSBvbmx5IGBvblJlc3VtZWAsIGZpcmVkIGJ5IGBydW5uZXIvcmVzdW1lLnRzIMK3IGFubm91bmNlUmVzdW1lYCkuXG4gKiAgIFN1Y2ggYW4gZXZlbnQgZ29lcyB0aHJvdWdoIGBmaXJlYCBsaWtlIGV2ZXJ5IG90aGVyLCBzbyBhIHRocm93aW5nIHJlY29yZGVyIG5ldmVyIGFib3J0c1xuICogICB0aGUgZXhlY3V0b3IgY2FsbCB0aGF0IG1hZGUgaXQuXG4gKi9cbmV4cG9ydCB0eXBlIEhvb2tTcGVjPEsgZXh0ZW5kcyBIb29rTmFtZT4gPSB7XG4gIHJlYWRvbmx5IG9uOiB7IHJlYWRvbmx5IFtDIGluIENoYW5uZWxzT2Y8Sz5dOiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgZXhlY3V0b3JNYWRlOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBUSEUgcmVnaXN0cnkuIEtleSBvcmRlciBpcyB0aGUgb3JkZXIgZXZlcnkgZGVyaXZlZCBsaXN0IGtlZXBzOiBgaG9va3NPbihjaGFubmVsKWAgaXMgYW5cbiAqIG9yZGVyLXByZXNlcnZpbmcgZmlsdGVyIG9mIGl0LCBpZGVudGljYWwgdG8gdGhlIDkuMzUuMCBoYW5kLXdyaXR0ZW4gbGlzdHMgaXQgcmVwbGFjZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBIT09LUyA9IHtcbiAgb25SZWFkOiB7IG9uOiB7IHNjb3BlOiAnUmVhZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uV3JpdGU6IHsgb246IHsgc2NvcGU6ICdXcml0ZUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uQ29tbWl0OiB7IG9uOiB7IHNjb3BlOiAnQ29tbWl0RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25TdGFnZUV4ZWN1dGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93U3RhZ2VFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbk5leHQ6IHsgb246IHsgZmxvdzogJ0Zsb3dOZXh0RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25EZWNpc2lvbjogeyBvbjogeyBmbG93OiAnRmxvd0RlY2lzaW9uRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25Gb3JrOiB7IG9uOiB7IGZsb3c6ICdGbG93Rm9ya0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU2VsZWN0ZWQ6IHsgb246IHsgZmxvdzogJ0Zsb3dTZWxlY3RlZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3ViZmxvd0VudHJ5OiB7IG9uOiB7IGZsb3c6ICdGbG93U3ViZmxvd0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3ViZmxvd0V4aXQ6IHsgb246IHsgZmxvdzogJ0Zsb3dTdWJmbG93RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25TdWJmbG93UmVnaXN0ZXJlZDogeyBvbjogeyBmbG93OiAnRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25Mb29wOiB7IG9uOiB7IGZsb3c6ICdGbG93TG9vcEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uQnJlYWs6IHsgb246IHsgZmxvdzogJ0Zsb3dCcmVha0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRXJyb3I6IHsgb246IHsgc2NvcGU6ICdFcnJvckV2ZW50JywgZmxvdzogJ0Zsb3dFcnJvckV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3RhZ2VTdGFydDogeyBvbjogeyBzY29wZTogJ1N0YWdlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25TdGFnZUVuZDogeyBvbjogeyBzY29wZTogJ1N0YWdlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgLy8gRGVjbGFyYXRpdmUgcGVyLXN0YWdlIHJldHJ5ICg5LjE1KTogZmlyZXMgRFVSSU5HIGEgc3RhZ2UsIG9uY2UgcGVyIGZhaWxlZCBhdHRlbXB0IHRoYXQgd2lsbCBiZSByZXRyaWVkLlxuICBvblN0YWdlUmV0cnk6IHsgb246IHsgZmxvdzogJ0Zsb3dTdGFnZVJldHJ5RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgLy8gVGhyb3R0bGluZyAoOS4zOS4wLCBSOSk6IGEgZm9yayBjaGlsZCdzIGVycm9yIHRoZSBydW4ncyBgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcmAgY2xhc3NpZmllZC5cbiAgb25UaHJvdHRsZWQ6IHsgb246IHsgZmxvdzogJ0Zsb3dUaHJvdHRsZWRFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblBhdXNlOiB7IG9uOiB7IHNjb3BlOiAnUGF1c2VFdmVudCcsIGZsb3c6ICdGbG93UGF1c2VFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblJlc3VtZTogeyBvbjogeyBzY29wZTogJ1Jlc3VtZUV2ZW50JywgZmxvdzogJ0Zsb3dSZXN1bWVFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiB0cnVlIH0sXG4gIC8vIFJ1biBib3VuZGFyaWVzIOKAlCBsaXN0ZWQgc28gYSByZWNvcmRlciB3aG9zZSBPTkxZIGhvb2sgaXMgb25lIG9mIHRoZW0gc3RpbGwgcm91dGVzIHRvIHRoZSBmbG93IGNoYW5uZWwuXG4gIG9uUnVuU3RhcnQ6IHsgb246IHsgZmxvdzogJ0Zsb3dSdW5FdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblJ1bkVuZDogeyBvbjogeyBmbG93OiAnRmxvd1J1bkV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uUnVuRmFpbGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93UnVuRmFpbGVkRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25FbWl0OiB7IG9uOiB7IGVtaXQ6ICdFbWl0RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIHsgcmVhZG9ubHkgW0sgaW4gSG9va05hbWVdOiBIb29rU3BlYzxLPiB9O1xuXG4vKiogRXZlcnkgaG9vayBuYW1lLCBpbiByZWdpc3RyeSBvcmRlci4gKi9cbmV4cG9ydCBjb25zdCBIT09LX05BTUVTID0gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhIT09LUykpIGFzIHJlYWRvbmx5IEhvb2tOYW1lW107XG5cbi8qKiBUaGUgaG9va3MgZGVjbGFyZWQgb24gYGNoYW5uZWxgLCBpbiByZWdpc3RyeSBvcmRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6ICdzY29wZScpOiByZWFkb25seSBTY29wZUhvb2tOYW1lW107XG5leHBvcnQgZnVuY3Rpb24gaG9va3NPbihjaGFubmVsOiAnZmxvdycpOiByZWFkb25seSBGbG93SG9va05hbWVbXTtcbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6ICdlbWl0Jyk6IHJlYWRvbmx5IEVtaXRIb29rTmFtZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tzT24oY2hhbm5lbDogSG9va0NoYW5uZWwpOiByZWFkb25seSBIb29rTmFtZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tzT24oY2hhbm5lbDogSG9va0NoYW5uZWwpOiByZWFkb25seSBIb29rTmFtZVtdIHtcbiAgcmV0dXJuIEJZX0NIQU5ORUxbY2hhbm5lbF07XG59XG5cbmNvbnN0IGRlY2xhcmVkT24gPSAoY2hhbm5lbDogSG9va0NoYW5uZWwpID0+XG4gIE9iamVjdC5mcmVlemUoSE9PS19OQU1FUy5maWx0ZXIoKGhvb2spID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIT09LU1tob29rXS5vbiwgY2hhbm5lbCkpKTtcbi8qKiBDb21wdXRlZCBvbmNlIGF0IGxvYWQg4oCUIHJvdXRpbmcgYXNrcyBvbiBldmVyeSBhdHRhY2gsIHRoZSB0YXBzIG9uIGV2ZXJ5IHRyYXZlcnNlci4gKi9cbmNvbnN0IEJZX0NIQU5ORUw6IFJlYWRvbmx5PFJlY29yZDxIb29rQ2hhbm5lbCwgcmVhZG9ubHkgSG9va05hbWVbXT4+ID0ge1xuICBzY29wZTogZGVjbGFyZWRPbignc2NvcGUnKSxcbiAgZmxvdzogZGVjbGFyZWRPbignZmxvdycpLFxuICBlbWl0OiBkZWNsYXJlZE9uKCdlbWl0JyksXG59O1xuXG4vKiogVGhlIHNjb3BlLWNoYW5uZWwgZXJyb3Igb3BlcmF0aW9uIGEgZmFpbGluZyBob29rIGlzIHJlcG9ydGVkIHVuZGVyIChgRXJyb3JFdmVudC5vcGVyYXRpb25gKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVyYXRpb25Gb3IoaG9vazogc3RyaW5nKTogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdjb21taXQnIHtcbiAgaWYgKGhvb2sgPT09ICdvblJlYWQnKSByZXR1cm4gJ3JlYWQnO1xuICBpZiAoaG9vayA9PT0gJ29uQ29tbWl0JykgcmV0dXJuICdjb21taXQnO1xuICByZXR1cm4gJ3dyaXRlJztcbn1cblxuLyoqIFdoZXJlIGEgcmVjb3JkZXIgZmFpbHVyZSBpcyByZXBvcnRlZCBGUk9NIOKAlCB0aGUgc3RhZ2UgKG9yIHN5bnRoZXNpemVkIGV2ZW50KSB3aG9zZSBob29rIHRocmV3LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsdXJlU2l0ZSB7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUSEUgc2NvcGUtY2hhbm5lbCBgb25FcnJvcmAgZXZlbnQgZm9yIGEgcmVjb3JkZXIgdGhhdCB0aHJldyBpbiBgaG9va2Ag4oCUIGJ1aWx0IGluIE9ORSBwbGFjZVxuICogZm9yIGV2ZXJ5IHBhdGggdGhhdCByZXBvcnRzIG9uZTogdGhlIGlubGluZSBmYWNhZGUgKGBTY29wZUZhY2FkZSDCtyBfcm91dGVGYWlsdXJlYCksIHRoZVxuICogZXhlY3V0b3IncyBvd24gYG9uUmVzdW1lYCAoYHJ1bm5lci9yZXN1bWUudHMgwrcgYW5ub3VuY2VSZXN1bWVgKSBhbmQgZGVmZXJyZWQgZGVsaXZlcnlcbiAqIChgRGVmZXJyZWRPYnNlcnZlclRpZXIgwrcgcm91dGVMaXN0ZW5lckVycm9yYCkuIGBlcnJvcmAgaXMgdGhlIHN0cnVjdHVyZWQgZm9ybVxuICogKGBleHRyYWN0RXJyb3JJbmZvYDogYG1lc3NhZ2VgLCBgbmFtZWAsIGBjb2RlP2AsIGByYXdgID0gdGhlIHRocm93biB2YWx1ZSBpdHNlbGYpIHdoYXRldmVyXG4gKiB3YXMgdGhyb3duIOKAlCBhbiBgRXJyb3JgLCBhIHN0cmluZywgYW55dGhpbmcgKDkuMzkuMDsgYmVmb3JlLCB0aGUgaW5saW5lIHBhdGhzIHBhc3NlZCB0aGUgcmF3XG4gKiB0aHJvd24gdmFsdWUgYW5kIHRoZSBkZWZlcnJlZCB0aWVyIHdyYXBwZWQgaXQgaW4gYG5ldyBFcnJvciguLi4pYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRlckZhaWx1cmVFdmVudChzaXRlOiBGYWlsdXJlU2l0ZSwgdGhyb3duOiB1bmtub3duLCBob29rOiBzdHJpbmcpOiBFcnJvckV2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFnZU5hbWU6IHNpdGUuc3RhZ2VOYW1lLFxuICAgIHN0YWdlSWQ6IHNpdGUuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogc2l0ZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBwaXBlbGluZUlkOiBzaXRlLnBpcGVsaW5lSWQsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIGVycm9yOiBleHRyYWN0RXJyb3JJbmZvKHRocm93biksXG4gICAgb3BlcmF0aW9uOiBvcGVyYXRpb25Gb3IoaG9vayksXG4gICAgY2hhbm5lbDogJ3Njb3BlJyBhcyBjb25zdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBUZXh0IGZvciBhbnl0aGluZyBhIHJlY29yZGVyIHRocmV3LiBgJHtlcnJ9YCB0aHJvd3Mgb24gYSBudWxsLXByb3RvdHlwZSBvYmplY3QgKG5vXG4gKiBgdG9TdHJpbmdgKSBhbmQgb24gYSBzeW1ib2wg4oCUIGFuZCBhIHRocm93IGluc2lkZSB0aGUgaXNvbGF0aW9uIHdvdWxkIGVzY2FwZSBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlVGhyb3duKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnJvcik7XG4gIH1cbn1cblxuLyoqIFdoYXQgdG8gZG8gd2l0aCBhIHJlY29yZGVyJ3MgdGhyb3cuIEl0cyBvd24gdGhyb3cgaXMgc3dhbGxvd2VkIGJ5IGBmaXJlYC4gKi9cbmV4cG9ydCB0eXBlIEhvb2tGYWlsdXJlID0gKGVycm9yOiB1bmtub3duLCByZWNvcmRlcjogb2JqZWN0LCBob29rOiBIb29rTmFtZSkgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZmxvdyBjaGFubmVsJ3MgcG9saWN5LCB2ZXJiYXRpbSBzaW5jZSA5LjA6IHdhcm4gaW4gZGV2IG1vZGUsIG90aGVyd2lzZSBzYXkgbm90aGluZy5cbiAqIGBzb3VyY2VgIG5hbWVzIHRoZSBkaXNwYXRjaGVyIGluIHRoZSB3YXJuaW5nIChgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmAsIGBGbG93Q2hhcnRFeGVjdXRvcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FybkluRGV2TW9kZShzb3VyY2U6IHN0cmluZyk6IEhvb2tGYWlsdXJlIHtcbiAgcmV0dXJuIChlcnJvciwgcmVjb3JkZXIsIGhvb2spID0+IHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSAocmVjb3JkZXIgYXMgeyBpZD86IHVua25vd24gfSkuaWQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdICR7c291cmNlfTogcmVjb3JkZXIgXCIke1N0cmluZyhpZCl9XCIgdGhyZXcgaW4gJHtob29rfTogJHtkZXNjcmliZVRocm93bihlcnJvcil9YCk7XG4gIH07XG59XG5cbmNvbnN0IFNXQUxMT1c6IEhvb2tGYWlsdXJlID0gKCkgPT4gdW5kZWZpbmVkO1xuXG4vKipcbiAqIENhbGwgYGhvb2tgIG9uIGV2ZXJ5IHJlY29yZGVyIHRoYXQgaW1wbGVtZW50cyBpdCAobm9ybWFsIHByb3BlcnR5IGxvb2t1cCwgYHRoaXNgIGJvdW5kIOKAlFxuICogYGludm9rZVJlY29yZGVySG9va2ApLCBpbiBvcmRlci4gQSB0aHJvdyBnb2VzIHRvIGBvbkZhaWx1cmVgIGFuZCB0aGUgbG9vcCBjb250aW51ZXM7IGFcbiAqIHRocm93IEZST00gYG9uRmFpbHVyZWAgaXMgc3dhbGxvd2VkLiBOb3RoaW5nIGEgcmVjb3JkZXIgZG9lcyBjYW4gcmVhY2ggdGhlIGNhbGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcmU8SyBleHRlbmRzIEhvb2tOYW1lPihcbiAgcmVjb3JkZXJzOiBJdGVyYWJsZTxvYmplY3Q+LFxuICBob29rOiBLLFxuICBldmVudDogSG9va1BheWxvYWQ8Sz4sXG4gIG9uRmFpbHVyZTogSG9va0ZhaWx1cmUgPSBTV0FMTE9XLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgcmVjb3JkZXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgaG9vaywgZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvbkZhaWx1cmUoZXJyb3IsIHJlY29yZGVyLCBob29rKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBBbiBpc29sYXRpb24gdGhhdCB0aHJvd3MgaXMgaXRzZWxmIGlzb2xhdGVkIOKAlCByZWNvcmRlciBlcnJvcnMgbmV2ZXIgcmVhY2ggdGhlIHJ1bi5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2hvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRzs7O0FBR0gsNERBQThEO0FBQzlELDhDQUEwQztBQUUxQyx5REFBMEQ7QUFnRDFEOzs7R0FHRztBQUNVLFFBQUEsS0FBSyxHQUFHO0lBQ25CLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzdELFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQy9ELGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDOUQsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUN0RSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUM5RCxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQ3RFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDekUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUN4RSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDeEYsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUNoRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDckYsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDbEUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDaEUsZ0hBQWdIO0lBQ2hILFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDcEUsMEdBQTBHO0lBQzFHLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDMUUsK0ZBQStGO0lBQy9GLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDeEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQ3JGLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRTtJQUN2Rix5R0FBeUc7SUFDekcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDakUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDL0QsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUN4RSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtDQUNFLENBQUM7QUFFL0QsMENBQTBDO0FBQzdCLFFBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFLLENBQUMsQ0FBd0IsQ0FBQztBQU9uRixTQUFnQixPQUFPLENBQUMsT0FBb0I7SUFDMUMsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUZELDBCQUVDO0FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUUsQ0FDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVHLHlGQUF5RjtBQUN6RixNQUFNLFVBQVUsR0FBdUQ7SUFDckUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDMUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDeEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7Q0FDekIsQ0FBQztBQUVGLG1HQUFtRztBQUNuRyxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUN2QyxJQUFJLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDckMsSUFBSSxJQUFJLEtBQUssVUFBVTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3pDLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFKRCxvQ0FJQztBQVlEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsSUFBaUIsRUFBRSxNQUFlLEVBQUUsSUFBWTtJQUNuRixPQUFPO1FBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1FBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztRQUNyQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDbkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1FBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ3JCLEtBQUssRUFBRSxJQUFBLCtCQUFnQixFQUFDLE1BQU0sQ0FBQztRQUMvQixTQUFTLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztRQUM3QixPQUFPLEVBQUUsT0FBZ0I7UUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzNELENBQUM7QUFDSixDQUFDO0FBWkQsb0RBWUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsS0FBYztJQUMzQyxJQUFJLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUM7QUFORCx3Q0FNQztBQUtEOzs7R0FHRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxNQUFjO0lBQzFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQy9CLElBQUksQ0FBQyxJQUFBLHNCQUFTLEdBQUU7WUFBRSxPQUFPO1FBQ3pCLE1BQU0sRUFBRSxHQUFJLFFBQTZCLENBQUMsRUFBRSxDQUFDO1FBQzdDLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsTUFBTSxlQUFlLE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBYyxJQUFJLEtBQUssY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RyxDQUFDLENBQUM7QUFDSixDQUFDO0FBUEQsc0NBT0M7QUFFRCxNQUFNLE9BQU8sR0FBZ0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0FBRTdDOzs7O0dBSUc7QUFDSCxTQUFnQixJQUFJLENBQ2xCLFNBQTJCLEVBQzNCLElBQU8sRUFDUCxLQUFxQixFQUNyQixZQUF5QixPQUFPO0lBRWhDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDO1lBQ0gsSUFBQSxrQ0FBa0IsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AscUZBQXFGO1lBQ3ZGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFqQkQsb0JBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWNvcmRlci9ob29rcy50cyDigJQgdGhlIGhvb2sgcmVnaXN0cnkgYW5kIHRoZSBvbmUgZGlzcGF0Y2hlciAoRjYpLlxuICpcbiAqIEV2ZXJ5IHJlY29yZGVyIGhvb2sgbmFtZSBpcyBkZWNsYXJlZCBPTkNFLCBoZXJlLCBpbiBgSE9PS1NgLiBFdmVyeXRoaW5nIHRoYXQgdXNlZCB0byBrZWVwXG4gKiBpdHMgb3duIGhhbmQgbGlzdCBkZXJpdmVzIGZyb20gaXQ6XG4gKlxuICogICAtIGNoYW5uZWwgcm91dGluZyAoYENvbWJpbmVkUmVjb3JkZXIgwrcgaGFzKlJlY29yZGVyTWV0aG9kc2ApIGFza3MgYGhvb2tzT24oY2hhbm5lbClgIOKAlCB0aGVcbiAqICAgICB0aHJlZSBoYW5kIGxpc3RzIGl0IHJlcGxhY2VkIChgUkVDT1JERVJfRVZFTlRfTUVUSE9EU2AsIGBGTE9XX+KApmAsIGBFTUlUX+KApmApIGFyZSBnb25lO1xuICogICAtIHRoZSBkZWZlcnJlZCB0aWVyJ3MgdGFwcyAoYERlZmVycmVkT2JzZXJ2ZXJUaWVyIMK3IGJ1aWxkU2NvcGVUYXAgLyBidWlsZEZsb3dUYXBgKSBpdGVyYXRlXG4gKiAgICAgYGhvb2tzT25gO1xuICogICAtIGBDb21wb3NpdGVSZWNvcmRlcmAncyBmYW4tb3V0IGlzIGdlbmVyYXRlZCBmcm9tIGBIT09LX05BTUVTYCAoZXZlcnkgaG9vaywgZXZlcnkgY2hhbm5lbCkuXG4gKlxuICogYGZpcmVgIGlzIHRoZSBvbmUgcGVyLXJlY29yZGVyIGxvb3A6IGNhbGwgdGhlIGhvb2sgb24gZWFjaCByZWNvcmRlciwgYW5kIGhhbmQgYSB0aHJvdyB0byB0aGVcbiAqIGNhbGxlcidzIGZhaWx1cmUgcG9saWN5IOKAlCBuZXZlciB0byB0aGUgY2FsbGVyJ3MgY2FsbGVyLiBUaGUgZW5naW5lIGtlZXBzIGl0cyB0d28gcG9saWNpZXNcbiAqICh0aGUgc2NvcGUgY2hhbm5lbCByb3V0ZXMgYSB0aHJvdyB0byBldmVyeSByZWNvcmRlcidzIGBvbkVycm9yYDsgdGhlIGZsb3cgY2hhbm5lbCB3YXJucyBpblxuICogZGV2IG1vZGUgYW5kIG1vdmVzIG9uKTsgYGZpcmVgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IHdoYXRldmVyIHRoZSBwb2xpY3kgZG9lcywgdGhlIGxvb3AgZ29lc1xuICogb24gYW5kIG5vdGhpbmcgZXNjYXBlcy4gQm9ycm93ZWQ6IEMjIGBNdWx0aWNhc3REZWxlZ2F0ZWAgKG9uZSBpbnZvY2F0aW9uIGxpc3QpLCBPcGVuVGVsZW1ldHJ5XG4gKiBgTXVsdGlTcGFuUHJvY2Vzc29yYCAob25lIGZhbi1vdXQsIGEgZmFpbGluZyBwcm9jZXNzb3IgbmV2ZXIgc3RvcHMgdGhlIG90aGVycykuXG4gKlxuICogIyMgVGhlIGNvbXBpbGUtdGltZSBsYXdcbiAqXG4gKiBgSE9PS1NgIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgdGhyZWUgcmVjb3JkZXIgaW50ZXJmYWNlcyBpbiBCT1RIIGRpcmVjdGlvbnM6XG4gKlxuICogICAtIGEgaG9vayBhZGRlZCB0byBgU2NvcGVSZWNvcmRlcmAgLyBgRmxvd1JlY29yZGVyYCAvIGBFbWl0UmVjb3JkZXJgIGFuZCBub3QgdG8gYEhPT0tTYCBpcyBhXG4gKiAgICAgbWlzc2luZyBwcm9wZXJ0eSBvZiB0aGUgYHNhdGlzZmllc2AgY2xhdXNlIOKAlCBpdCBkb2VzIG5vdCBjb21waWxlO1xuICogICAtIGEgaG9vayBhZGRlZCB0byBvbmUgaW50ZXJmYWNlIHRoYXQgYEhPT0tTYCBsaXN0cyBvbiBhbm90aGVyIGNoYW5uZWwgb25seSBpcyBhIG1pc3NpbmdcbiAqICAgICBrZXkgb2YgdGhhdCBlbnRyeSdzIGBvbmAg4oCUIGl0IGRvZXMgbm90IGNvbXBpbGU7XG4gKiAgIC0gYW4gZW50cnkgbmFtaW5nIGEgY2hhbm5lbCB3aG9zZSBpbnRlcmZhY2UgZG9lcyBub3QgZGVjbGFyZSBpdCBpcyBhbiBleGNlc3MgcHJvcGVydHkg4oCUXG4gKiAgICAgaXQgZG9lcyBub3QgY29tcGlsZS5cbiAqXG4gKiBQaW5uZWQgYnkgdGVzdC9saWIvcmVjb3JkZXIvaG9va3MudGVzdC50cyAodGhlIGBAdHMtZXhwZWN0LWVycm9yYCBwcm9iZXMpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUnVuQ29ycmVsYXRpb24gfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4uL2NhcHR1cmUvaW52b2tlSG9vay5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBleHRyYWN0RXJyb3JJbmZvIH0gZnJvbSAnLi4vZXJyb3JzL2Vycm9ySW5mby5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRSZWNvcmRlciB9IGZyb20gJy4vRW1pdFJlY29yZGVyLmpzJztcblxuLyoqIE1lbWJlcnMgZXZlcnkgcmVjb3JkZXIgaW50ZXJmYWNlIHNoYXJlcyB0aGF0IGFyZSBOT1QgZXZlbnRzLiAqL1xudHlwZSBMaWZlY3ljbGUgPSAnaWQnIHwgJ2NsZWFyJyB8ICd0b1NuYXBzaG90JztcblxuLyoqIEhvb2tzIG9mIHRoZSBlbWl0IGNoYW5uZWwgKGBFbWl0UmVjb3JkZXJgKS4gKi9cbmV4cG9ydCB0eXBlIEVtaXRIb29rTmFtZSA9IEV4Y2x1ZGU8a2V5b2YgRW1pdFJlY29yZGVyLCBMaWZlY3ljbGU+O1xuLyoqIEhvb2tzIG9mIHRoZSBzY29wZSAoZGF0YS1mbG93KSBjaGFubmVsLiBgU2NvcGVSZWNvcmRlcmAgYWxzbyBkZWNsYXJlcyBgb25FbWl0YCDigJQgdGhlIGVtaXRcbiAqICBjaGFubmVsIHJpZGVzIHRoZSBzY29wZSBsaXN0IOKAlCBzbyBpdCBpcyBzdWJ0cmFjdGVkIGhlcmUgYW5kIGNvdW50ZWQgb24gYGVtaXRgLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVIb29rTmFtZSA9IEV4Y2x1ZGU8a2V5b2YgU2NvcGVSZWNvcmRlciwgTGlmZWN5Y2xlIHwgRW1pdEhvb2tOYW1lPjtcbi8qKiBIb29rcyBvZiB0aGUgZmxvdyAoY29udHJvbC1mbG93KSBjaGFubmVsLiAqL1xuZXhwb3J0IHR5cGUgRmxvd0hvb2tOYW1lID0gRXhjbHVkZTxrZXlvZiBGbG93UmVjb3JkZXIsIExpZmVjeWNsZT47XG4vKiogRXZlcnkgcmVjb3JkZXIgaG9vaywgb24gYW55IGNoYW5uZWwuICovXG5leHBvcnQgdHlwZSBIb29rTmFtZSA9IFNjb3BlSG9va05hbWUgfCBGbG93SG9va05hbWUgfCBFbWl0SG9va05hbWU7XG4vKiogVGhlIHRocmVlIHJ1bnRpbWUgY2hhbm5lbHMgKHRoZSBidWlsZC10aW1lIHN0cnVjdHVyZSBjaGFubmVsIGZpcmVzIGl0cyBob29rcyBieSBuYW1lKS4gKi9cbmV4cG9ydCB0eXBlIEhvb2tDaGFubmVsID0gJ3Njb3BlJyB8ICdmbG93JyB8ICdlbWl0JztcblxuLyoqIFRoZSBjaGFubmVscyB3aG9zZSBpbnRlcmZhY2UgREVDTEFSRVMgaG9vayBgS2Ag4oCUIHdoYXQgYW4gZW50cnkncyBgb25gIG11c3QgbmFtZSBleGFjdGx5LiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbHNPZjxLIGV4dGVuZHMgSG9va05hbWU+ID1cbiAgfCAoSyBleHRlbmRzIFNjb3BlSG9va05hbWUgPyAnc2NvcGUnIDogbmV2ZXIpXG4gIHwgKEsgZXh0ZW5kcyBGbG93SG9va05hbWUgPyAnZmxvdycgOiBuZXZlcilcbiAgfCAoSyBleHRlbmRzIEVtaXRIb29rTmFtZSA/ICdlbWl0JyA6IG5ldmVyKTtcblxudHlwZSBQYXlsb2FkT2Y8SSwgSz4gPSBLIGV4dGVuZHMga2V5b2YgSSA/IChOb25OdWxsYWJsZTxJW0tdPiBleHRlbmRzIChldmVudDogaW5mZXIgRSkgPT4gdW5rbm93biA/IEUgOiBuZXZlcikgOiBuZXZlcjtcbnR5cGUgQ2hhbm5lbEludGVyZmFjZSA9IHsgc2NvcGU6IFNjb3BlUmVjb3JkZXI7IGZsb3c6IEZsb3dSZWNvcmRlcjsgZW1pdDogRW1pdFJlY29yZGVyIH07XG5cbi8qKiBUaGUgcGF5bG9hZCBob29rIGBLYCByZWNlaXZlcyBvbiBjaGFubmVsIGBDYCDigJQgcmVhZCBvZmYgdGhlIGNoYW5uZWwncyBpbnRlcmZhY2UsIG5ldmVyIHJlc3RhdGVkLiAqL1xuZXhwb3J0IHR5cGUgSG9va1BheWxvYWQ8SyBleHRlbmRzIEhvb2tOYW1lLCBDIGV4dGVuZHMgQ2hhbm5lbHNPZjxLPiA9IENoYW5uZWxzT2Y8Sz4+ID0gQyBleHRlbmRzIEhvb2tDaGFubmVsXG4gID8gUGF5bG9hZE9mPENoYW5uZWxJbnRlcmZhY2VbQ10sIEs+XG4gIDogbmV2ZXI7XG5cbi8qKlxuICogT25lIHJlZ2lzdHJ5IGVudHJ5LlxuICpcbiAqIC0gYG9uYCDigJQgZXZlcnkgY2hhbm5lbCB0aGUgaG9vayBpcyBkZWNsYXJlZCBvbiwgZWFjaCBtYXBwZWQgdG8gdGhlIE5BTUUgb2YgaXRzIHBheWxvYWQgdHlwZVxuICogICAocHJvc2UgZm9yIHJlYWRlcnM7IHRoZSB0eXBlIGl0c2VsZiBpcyBgSG9va1BheWxvYWQ8SywgQz5gLCByZWFkIG9mZiB0aGUgaW50ZXJmYWNlKS5cbiAqIC0gYGV4ZWN1dG9yTWFkZWAg4oCUIGEgTEFCRUwgKHJlYWQgYnkgdGVzdHMgYW5kIGRvY3MsIG5vdCBieSByb3V0aW5nKTogYHRydWVgIHdoZW4gdGhlIGV4ZWN1dG9yIHN5bnRoZXNpemVzIHRoZSBldmVudCBpdHNlbGYgaW5zdGVhZCBvZiBhXG4gKiAgIGRpc3BhdGNoIHNpdGUgaW4gdGhlIGVuZ2luZSAodG9kYXkgb25seSBgb25SZXN1bWVgLCBmaXJlZCBieSBgcnVubmVyL3Jlc3VtZS50cyDCtyBhbm5vdW5jZVJlc3VtZWApLlxuICogICBTdWNoIGFuIGV2ZW50IGdvZXMgdGhyb3VnaCBgZmlyZWAgbGlrZSBldmVyeSBvdGhlciwgc28gYSB0aHJvd2luZyByZWNvcmRlciBuZXZlciBhYm9ydHNcbiAqICAgdGhlIGV4ZWN1dG9yIGNhbGwgdGhhdCBtYWRlIGl0LlxuICovXG5leHBvcnQgdHlwZSBIb29rU3BlYzxLIGV4dGVuZHMgSG9va05hbWU+ID0ge1xuICByZWFkb25seSBvbjogeyByZWFkb25seSBbQyBpbiBDaGFubmVsc09mPEs+XTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IGV4ZWN1dG9yTWFkZTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogVEhFIHJlZ2lzdHJ5LiBLZXkgb3JkZXIgaXMgdGhlIG9yZGVyIGV2ZXJ5IGRlcml2ZWQgbGlzdCBrZWVwczogYGhvb2tzT24oY2hhbm5lbClgIGlzIGFuXG4gKiBvcmRlci1wcmVzZXJ2aW5nIGZpbHRlciBvZiBpdCwgaWRlbnRpY2FsIHRvIHRoZSA5LjM1LjAgaGFuZC13cml0dGVuIGxpc3RzIGl0IHJlcGxhY2VkLlxuICovXG5leHBvcnQgY29uc3QgSE9PS1MgPSB7XG4gIG9uUmVhZDogeyBvbjogeyBzY29wZTogJ1JlYWRFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbldyaXRlOiB7IG9uOiB7IHNjb3BlOiAnV3JpdGVFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbkNvbW1pdDogeyBvbjogeyBzY29wZTogJ0NvbW1pdEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3RhZ2VFeGVjdXRlZDogeyBvbjogeyBmbG93OiAnRmxvd1N0YWdlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25OZXh0OiB7IG9uOiB7IGZsb3c6ICdGbG93TmV4dEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRGVjaXNpb246IHsgb246IHsgZmxvdzogJ0Zsb3dEZWNpc2lvbkV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRm9yazogeyBvbjogeyBmbG93OiAnRmxvd0ZvcmtFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblNlbGVjdGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93U2VsZWN0ZWRFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblN1YmZsb3dFbnRyeTogeyBvbjogeyBmbG93OiAnRmxvd1N1YmZsb3dFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblN1YmZsb3dFeGl0OiB7IG9uOiB7IGZsb3c6ICdGbG93U3ViZmxvd0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQ6IHsgb246IHsgZmxvdzogJ0Zsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uTG9vcDogeyBvbjogeyBmbG93OiAnRmxvd0xvb3BFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbkJyZWFrOiB7IG9uOiB7IGZsb3c6ICdGbG93QnJlYWtFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbkVycm9yOiB7IG9uOiB7IHNjb3BlOiAnRXJyb3JFdmVudCcsIGZsb3c6ICdGbG93RXJyb3JFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblN0YWdlU3RhcnQ6IHsgb246IHsgc2NvcGU6ICdTdGFnZUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3RhZ2VFbmQ6IHsgb246IHsgc2NvcGU6ICdTdGFnZUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIC8vIEV2ZXJ5IGF0dGVtcHQgb2YgYSBkZWNsYXJlZCByZXRyeSBwb2xpY3kgKDEwLjEpOiBmaXJlcyBEVVJJTkcgYSBzdGFnZSwgb25jZSBwZXIgYXR0ZW1wdCwgYmVmb3JlIG9uU3RhZ2VSZXRyeS5cbiAgb25BdHRlbXB0OiB7IG9uOiB7IGZsb3c6ICdGbG93QXR0ZW1wdEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIC8vIERlY2xhcmF0aXZlIHBlci1zdGFnZSByZXRyeSAoOS4xNSk6IGZpcmVzIERVUklORyBhIHN0YWdlLCBvbmNlIHBlciBmYWlsZWQgYXR0ZW1wdCB0aGF0IHdpbGwgYmUgcmV0cmllZC5cbiAgb25TdGFnZVJldHJ5OiB7IG9uOiB7IGZsb3c6ICdGbG93U3RhZ2VSZXRyeUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIC8vIFRocm90dGxpbmcgKDkuMzkuMCwgUjkpOiBhIGZvcmsgY2hpbGQncyBlcnJvciB0aGUgcnVuJ3MgYHRocm90dGxpbmdFcnJvckNoZWNrZXJgIGNsYXNzaWZpZWQuXG4gIG9uVGhyb3R0bGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93VGhyb3R0bGVkRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25QYXVzZTogeyBvbjogeyBzY29wZTogJ1BhdXNlRXZlbnQnLCBmbG93OiAnRmxvd1BhdXNlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25SZXN1bWU6IHsgb246IHsgc2NvcGU6ICdSZXN1bWVFdmVudCcsIGZsb3c6ICdGbG93UmVzdW1lRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogdHJ1ZSB9LFxuICAvLyBSdW4gYm91bmRhcmllcyDigJQgbGlzdGVkIHNvIGEgcmVjb3JkZXIgd2hvc2UgT05MWSBob29rIGlzIG9uZSBvZiB0aGVtIHN0aWxsIHJvdXRlcyB0byB0aGUgZmxvdyBjaGFubmVsLlxuICBvblJ1blN0YXJ0OiB7IG9uOiB7IGZsb3c6ICdGbG93UnVuRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25SdW5FbmQ6IHsgb246IHsgZmxvdzogJ0Zsb3dSdW5FdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblJ1bkZhaWxlZDogeyBvbjogeyBmbG93OiAnRmxvd1J1bkZhaWxlZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRW1pdDogeyBvbjogeyBlbWl0OiAnRW1pdEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyB7IHJlYWRvbmx5IFtLIGluIEhvb2tOYW1lXTogSG9va1NwZWM8Sz4gfTtcblxuLyoqIEV2ZXJ5IGhvb2sgbmFtZSwgaW4gcmVnaXN0cnkgb3JkZXIuICovXG5leHBvcnQgY29uc3QgSE9PS19OQU1FUyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoSE9PS1MpKSBhcyByZWFkb25seSBIb29rTmFtZVtdO1xuXG4vKiogVGhlIGhvb2tzIGRlY2xhcmVkIG9uIGBjaGFubmVsYCwgaW4gcmVnaXN0cnkgb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va3NPbihjaGFubmVsOiAnc2NvcGUnKTogcmVhZG9ubHkgU2NvcGVIb29rTmFtZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tzT24oY2hhbm5lbDogJ2Zsb3cnKTogcmVhZG9ubHkgRmxvd0hvb2tOYW1lW107XG5leHBvcnQgZnVuY3Rpb24gaG9va3NPbihjaGFubmVsOiAnZW1pdCcpOiByZWFkb25seSBFbWl0SG9va05hbWVbXTtcbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6IEhvb2tDaGFubmVsKTogcmVhZG9ubHkgSG9va05hbWVbXTtcbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6IEhvb2tDaGFubmVsKTogcmVhZG9ubHkgSG9va05hbWVbXSB7XG4gIHJldHVybiBCWV9DSEFOTkVMW2NoYW5uZWxdO1xufVxuXG5jb25zdCBkZWNsYXJlZE9uID0gKGNoYW5uZWw6IEhvb2tDaGFubmVsKSA9PlxuICBPYmplY3QuZnJlZXplKEhPT0tfTkFNRVMuZmlsdGVyKChob29rKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSE9PS1NbaG9va10ub24sIGNoYW5uZWwpKSk7XG4vKiogQ29tcHV0ZWQgb25jZSBhdCBsb2FkIOKAlCByb3V0aW5nIGFza3Mgb24gZXZlcnkgYXR0YWNoLCB0aGUgdGFwcyBvbiBldmVyeSB0cmF2ZXJzZXIuICovXG5jb25zdCBCWV9DSEFOTkVMOiBSZWFkb25seTxSZWNvcmQ8SG9va0NoYW5uZWwsIHJlYWRvbmx5IEhvb2tOYW1lW10+PiA9IHtcbiAgc2NvcGU6IGRlY2xhcmVkT24oJ3Njb3BlJyksXG4gIGZsb3c6IGRlY2xhcmVkT24oJ2Zsb3cnKSxcbiAgZW1pdDogZGVjbGFyZWRPbignZW1pdCcpLFxufTtcblxuLyoqIFRoZSBzY29wZS1jaGFubmVsIGVycm9yIG9wZXJhdGlvbiBhIGZhaWxpbmcgaG9vayBpcyByZXBvcnRlZCB1bmRlciAoYEVycm9yRXZlbnQub3BlcmF0aW9uYCkuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlcmF0aW9uRm9yKGhvb2s6IHN0cmluZyk6ICdyZWFkJyB8ICd3cml0ZScgfCAnY29tbWl0JyB7XG4gIGlmIChob29rID09PSAnb25SZWFkJykgcmV0dXJuICdyZWFkJztcbiAgaWYgKGhvb2sgPT09ICdvbkNvbW1pdCcpIHJldHVybiAnY29tbWl0JztcbiAgcmV0dXJuICd3cml0ZSc7XG59XG5cbi8qKiBXaGVyZSBhIHJlY29yZGVyIGZhaWx1cmUgaXMgcmVwb3J0ZWQgRlJPTSDigJQgdGhlIHN0YWdlIChvciBzeW50aGVzaXplZCBldmVudCkgd2hvc2UgaG9vayB0aHJldy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZVNpdGUge1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcnVuJ3MgY29ycmVsYXRpb24sIHdoZW4gdGhlIHNpdGUncyBldmVudHMgY2Fycnkgb25lIOKAlCB0aGUgZmFpbHVyZSBldmVudCBjYXJyaWVzIGl0IHRvby4gKi9cbiAgcmVhZG9ubHkgY29ycmVsYXRpb24/OiBSdW5Db3JyZWxhdGlvbjtcbn1cblxuLyoqXG4gKiBUSEUgc2NvcGUtY2hhbm5lbCBgb25FcnJvcmAgZXZlbnQgZm9yIGEgcmVjb3JkZXIgdGhhdCB0aHJldyBpbiBgaG9va2Ag4oCUIGJ1aWx0IGluIE9ORSBwbGFjZVxuICogZm9yIGV2ZXJ5IHBhdGggdGhhdCByZXBvcnRzIG9uZTogdGhlIGlubGluZSBmYWNhZGUgKGBTY29wZUZhY2FkZSDCtyBfcm91dGVGYWlsdXJlYCksIHRoZVxuICogZXhlY3V0b3IncyBvd24gYG9uUmVzdW1lYCAoYHJ1bm5lci9yZXN1bWUudHMgwrcgYW5ub3VuY2VSZXN1bWVgKSBhbmQgZGVmZXJyZWQgZGVsaXZlcnlcbiAqIChgRGVmZXJyZWRPYnNlcnZlclRpZXIgwrcgcm91dGVMaXN0ZW5lckVycm9yYCkuIGBlcnJvcmAgaXMgdGhlIHN0cnVjdHVyZWQgZm9ybVxuICogKGBleHRyYWN0RXJyb3JJbmZvYDogYG1lc3NhZ2VgLCBgbmFtZWAsIGBjb2RlP2AsIGByYXdgID0gdGhlIHRocm93biB2YWx1ZSBpdHNlbGYpIHdoYXRldmVyXG4gKiB3YXMgdGhyb3duIOKAlCBhbiBgRXJyb3JgLCBhIHN0cmluZywgYW55dGhpbmcgKDkuMzkuMDsgYmVmb3JlLCB0aGUgaW5saW5lIHBhdGhzIHBhc3NlZCB0aGUgcmF3XG4gKiB0aHJvd24gdmFsdWUgYW5kIHRoZSBkZWZlcnJlZCB0aWVyIHdyYXBwZWQgaXQgaW4gYG5ldyBFcnJvciguLi4pYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRlckZhaWx1cmVFdmVudChzaXRlOiBGYWlsdXJlU2l0ZSwgdGhyb3duOiB1bmtub3duLCBob29rOiBzdHJpbmcpOiBFcnJvckV2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFnZU5hbWU6IHNpdGUuc3RhZ2VOYW1lLFxuICAgIHN0YWdlSWQ6IHNpdGUuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogc2l0ZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBwaXBlbGluZUlkOiBzaXRlLnBpcGVsaW5lSWQsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIGVycm9yOiBleHRyYWN0RXJyb3JJbmZvKHRocm93biksXG4gICAgb3BlcmF0aW9uOiBvcGVyYXRpb25Gb3IoaG9vayksXG4gICAgY2hhbm5lbDogJ3Njb3BlJyBhcyBjb25zdCxcbiAgICAuLi4oc2l0ZS5jb3JyZWxhdGlvbiAmJiB7IGNvcnJlbGF0aW9uOiBzaXRlLmNvcnJlbGF0aW9uIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIFRleHQgZm9yIGFueXRoaW5nIGEgcmVjb3JkZXIgdGhyZXcuIGAke2Vycn1gIHRocm93cyBvbiBhIG51bGwtcHJvdG90eXBlIG9iamVjdCAobm9cbiAqIGB0b1N0cmluZ2ApIGFuZCBvbiBhIHN5bWJvbCDigJQgYW5kIGEgdGhyb3cgaW5zaWRlIHRoZSBpc29sYXRpb24gd291bGQgZXNjYXBlIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVUaHJvd24oZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycm9yKTtcbiAgfVxufVxuXG4vKiogV2hhdCB0byBkbyB3aXRoIGEgcmVjb3JkZXIncyB0aHJvdy4gSXRzIG93biB0aHJvdyBpcyBzd2FsbG93ZWQgYnkgYGZpcmVgLiAqL1xuZXhwb3J0IHR5cGUgSG9va0ZhaWx1cmUgPSAoZXJyb3I6IHVua25vd24sIHJlY29yZGVyOiBvYmplY3QsIGhvb2s6IEhvb2tOYW1lKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmbG93IGNoYW5uZWwncyBwb2xpY3ksIHZlcmJhdGltIHNpbmNlIDkuMDogd2FybiBpbiBkZXYgbW9kZSwgb3RoZXJ3aXNlIHNheSBub3RoaW5nLlxuICogYHNvdXJjZWAgbmFtZXMgdGhlIGRpc3BhdGNoZXIgaW4gdGhlIHdhcm5pbmcgKGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCwgYEZsb3dDaGFydEV4ZWN1dG9yYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJuSW5EZXZNb2RlKHNvdXJjZTogc3RyaW5nKTogSG9va0ZhaWx1cmUge1xuICByZXR1cm4gKGVycm9yLCByZWNvcmRlciwgaG9vaykgPT4ge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IChyZWNvcmRlciBhcyB7IGlkPzogdW5rbm93biB9KS5pZDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gJHtzb3VyY2V9OiByZWNvcmRlciBcIiR7U3RyaW5nKGlkKX1cIiB0aHJldyBpbiAke2hvb2t9OiAke2Rlc2NyaWJlVGhyb3duKGVycm9yKX1gKTtcbiAgfTtcbn1cblxuY29uc3QgU1dBTExPVzogSG9va0ZhaWx1cmUgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2FsbCBgaG9va2Agb24gZXZlcnkgcmVjb3JkZXIgdGhhdCBpbXBsZW1lbnRzIGl0IChub3JtYWwgcHJvcGVydHkgbG9va3VwLCBgdGhpc2AgYm91bmQg4oCUXG4gKiBgaW52b2tlUmVjb3JkZXJIb29rYCksIGluIG9yZGVyLiBBIHRocm93IGdvZXMgdG8gYG9uRmFpbHVyZWAgYW5kIHRoZSBsb29wIGNvbnRpbnVlczsgYVxuICogdGhyb3cgRlJPTSBgb25GYWlsdXJlYCBpcyBzd2FsbG93ZWQuIE5vdGhpbmcgYSByZWNvcmRlciBkb2VzIGNhbiByZWFjaCB0aGUgY2FsbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyZTxLIGV4dGVuZHMgSG9va05hbWU+KFxuICByZWNvcmRlcnM6IEl0ZXJhYmxlPG9iamVjdD4sXG4gIGhvb2s6IEssXG4gIGV2ZW50OiBIb29rUGF5bG9hZDxLPixcbiAgb25GYWlsdXJlOiBIb29rRmFpbHVyZSA9IFNXQUxMT1csXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCByZWNvcmRlciBvZiByZWNvcmRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgaW52b2tlUmVjb3JkZXJIb29rKHJlY29yZGVyLCBob29rLCBldmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9uRmFpbHVyZShlcnJvciwgcmVjb3JkZXIsIGhvb2spO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFuIGlzb2xhdGlvbiB0aGF0IHRocm93cyBpcyBpdHNlbGYgaXNvbGF0ZWQg4oCUIHJlY29yZGVyIGVycm9ycyBuZXZlciByZWFjaCB0aGUgcnVuLlxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -312,6 +312,7 @@ class DeferredObserverTier {
|
|
|
312
312
|
stageId: (0, foottrace_1.stageIdOf)(envelope.runtimeStageId),
|
|
313
313
|
runtimeStageId: envelope.runtimeStageId,
|
|
314
314
|
pipelineId: envelope.runId,
|
|
315
|
+
...correlationOf(envelope.payload),
|
|
315
316
|
}, error, envelope.method);
|
|
316
317
|
for (const [, { recorder, channels }] of this.registrations) {
|
|
317
318
|
// Inline-tier parity (review CRITICAL-1): the synthesized event is
|
|
@@ -363,4 +364,15 @@ class DeferredObserverTier {
|
|
|
363
364
|
}
|
|
364
365
|
}
|
|
365
366
|
exports.DeferredObserverTier = DeferredObserverTier;
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHOzs7QUFFSCx5Q0FBc0M7QUFFdEMsNERBQThEO0FBQzlELDhDQUEwQztBQUUxQyx5REFRb0M7QUFDcEMsbURBQXFGO0FBNkRyRix5RkFBeUY7QUFDNUUsUUFBQSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUNqRCxRQUFBLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELDZFQUE2RTtBQUM3RSxNQUFNLG1CQUFtQixHQUE4QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWlCL0QsTUFBYSxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUscUVBQXFFO1lBQ3JFLGdFQUFnRTtZQUNoRSxzRUFBc0U7WUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTztZQUNwQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7WUFDM0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1lBQzNCLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVztZQUNqQyxhQUFhLEVBQUUsT0FB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QyxPQUFPLENBQUMsQ0FBQztRQUNqQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUExVUQsb0RBMFVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBydW5uZXIvRGVmZXJyZWRPYnNlcnZlclRpZXIudHMg4oCUIFJGQy0wMDEgQmxvY2tzIDbigJM5OiB0aGUgZW5naW5lIHdpcmluZyBvZlxuICogdGhlIGRlZmVycmVkLW9ic2VydmVyIHBpcGVsaW5lLlxuICpcbiAqIFBhdHRlcm46ICBUaGluIGFkYXB0ZXIgYmV0d2VlbiB0aGUgZXhlY3V0b3IncyB0aHJlZSBvYnNlcnZlciBjaGFubmVscyBhbmRcbiAqICAgICAgICAgICB0aGUgUFVSRSBgb2JzZXJ2ZXItcXVldWVgIG1vZHVsZS4gVGhlIHB1cmUgbW9kdWxlIHN0YXlzXG4gKiAgICAgICAgICAgZW5naW5lLWZyZWUgKGl0IGltcG9ydHMgbm90aGluZyBmcm9tIHRoZSBlbmdpbmUg4oCUIHRoZSBlbmdpbmVcbiAqICAgICAgICAgICBpbXBvcnRzIElUKTsgdGhpcyB0aWVyIG93bnMgZXZlcnkgZW5naW5lLWZsYXZvcmVkIGNvbmNlcm46XG4gKiAgICAgICAgICAgICAtIHRoZSBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgYENhcHR1cmVIb29rcy53YXJuYFxuICogICAgICAgICAgICAgICBiaW5kaW5nICh0aGUgZGV2LXdhcm4gc2VhbSwgUkZDLTAwMSDCp1wiUmVzb2x1dGlvblwiKTtcbiAqICAgICAgICAgICAgIC0gcm91dGluZyBgRGVmZXJyZWREaXNwYXRjaGVyLm9uRXJyb3JgIGludG8gdGhlIGV4aXN0aW5nXG4gKiAgICAgICAgICAgICAgIHJlY29yZGVyIGVycm9yIGNoYW5uZWwgKGBvbkVycm9yYCBvbiBzaWJsaW5nIG9ic2VydmVycyk7XG4gKiAgICAgICAgICAgICAtIHRoZSBjYXB0dXJlIFRBUFMg4oCUIHN5bnRoZXRpYyByZWNvcmRlcnMgcGxhY2VkIG9uIHRoZVxuICogICAgICAgICAgICAgICBleGlzdGluZyBpbmxpbmUgZGlzcGF0Y2ggbGlzdHMgc28gdGhlIHRocmVlIGRpc3BhdGNoIHNpdGVzXG4gKiAgICAgICAgICAgICAgIChgU2NvcGVGYWNhZGUuX2ludm9rZUhvb2tgLCBgU2NvcGVGYWNhZGUuZW1pdEV2ZW50YCxcbiAqICAgICAgICAgICAgICAgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgKSBuZWVkIE5PIHBlci1zaXRlIHRpZXIgbG9naWM6IGFcbiAqICAgICAgICAgICAgICAgdGFwJ3MgaG9vayBib2R5IElTIGBkaXNwYXRjaGVyLmNhcHR1cmUoLi4uKWAsIGFuZCBiZWNhdXNlXG4gKiAgICAgICAgICAgICAgIHRoZSB0YXAgc2l0cyBpbiB0aGUgc2FtZSBsb29wIGFzIGlubGluZSByZWNvcmRlcnMgaXQgc2Vlc1xuICogICAgICAgICAgICAgICBleGFjdGx5IHRoZSBwb3N0LXJlZGFjdGlvbiBldmVudCBvYmplY3QgaW5saW5lIG9ic2VydmVyc1xuICogICAgICAgICAgICAgICBzZWUg4oCUIGNhcHR1cmUgY2FuIG5ldmVyIG9ic2VydmUgYSBwcmUtcmVkYWN0aW9uIHZhbHVlO1xuICogICAgICAgICAgICAgLSB0aGUgdGVybWluYWwgZmx1c2ggKEJsb2NrIDgpIHdpdGggaG9uZXN0IHN0cmFuZGluZ1xuICogICAgICAgICAgICAgICBhY2NvdW50aW5nLCBhbmQgdGhlIEJsb2NrIDkgc3RhdHMgc3VyZmFjZS5cbiAqXG4gKiBSb2xlOiAgICAgT25lIGluc3RhbmNlIHBlciBgRmxvd0NoYXJ0RXhlY3V0b3JgLCBjcmVhdGVkIExBWklMWSBvbiB0aGVcbiAqICAgICAgICAgICBmaXJzdCBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIGF0dGFjaCAoemVybyBhbGxvY2F0aW9uIHdoZW4gbm9ib2R5XG4gKiAgICAgICAgICAgb3B0cyBpbiDigJQgbWlycm9ycyB0aGUgZW1pdCBmYXN0LXBhdGggcHJlY2VkZW50KS4gSG9sZHMgdGhlIE9ORVxuICogICAgICAgICAgIGBEZWZlcnJlZERpc3BhdGNoZXJgIChvbmUgbWVyZ2VkIHF1ZXVlLCB0b3RhbCBvcmRlciBhY3Jvc3NcbiAqICAgICAgICAgICBjaGFubmVscykgcGx1cyB0aGUgcmVnaXN0cnkgb2YgZGVmZXJyZWQgcmVjb3JkZXJzLlxuICpcbiAqIERlbGl2ZXJ5OiBhIGRlZmVycmVkIHJlY29yZGVyJ3MgaG9va3MgYXJlIGludm9rZWQgdGhyb3VnaCB0aGUgU0FNRVxuICogYGludm9rZVJlY29yZGVySG9va2AgaGVscGVyIHRoZSBpbmxpbmUgdGllciB1c2VzIChSRkMtMDAxIMKnOSBtaXRpZ2F0aW9uKSDigJRcbiAqIG9uZSBiZWF0IGJlaGluZCwgd2l0aCBgZW52ZWxvcGUucGF5bG9hZGAgbWF0ZXJpYWxpemVkIHBlciB0aGUgY2FwdHVyZVxuICogcG9saWN5IChgJ2Nsb25lJ2AgZGVmYXVsdCBhdCB0aGlzIGF0dGFjaCB0aWVyIOKAlCBmdWxsIHN0cnVjdHVyYWwgY29weSxcbiAqIGV2ZW50LXNoYXBlIGNvbXBhdGlibGUgd2l0aCBpbmxpbmU7IGV4cGxpY2l0IGAnc3VtbWFyeSdgIOKAlCBib3VuZGVkLFxuICogcmVmZXJlbmNlLWZyZWU7IGAncmVmJ2Ag4oCUIHRoZSBsaXZlIGV2ZW50IG9iamVjdCwgZGV2LXdhcm5lZCkuIFRoZSBzdGFuZGFsb25lXG4gKiBxdWV1ZSByZXRhaW5zIGl0cyBgJ3N1bW1hcnknYCBkZWZhdWx0IChgb2JzZXJ2ZXItcXVldWUvbWVyZ2VkUXVldWUudHMgwrcgTWVyZ2VkUXVldWVgKS5cbiAqXG4gKiBDaGFubmVsIGZpbHRlcjogYSByZWdpc3RyYXRpb24gcmVtZW1iZXJzIHdoaWNoIGNoYW5uZWxzIHdvdWxkIGhhdmVcbiAqIHJlYWNoZWQgdGhlIHJlY29yZGVyIGlubGluZSAoc2NvcGUtbGlzdCByZWNvcmRlcnMgc2VlIGBzY29wZWAgKyBgZW1pdGBcbiAqIGVudmVsb3BlczsgZmxvdy1saXN0IHJlY29yZGVycyBzZWUgYGZsb3dgIGVudmVsb3BlcykgYW5kIHNraXBzIHRoZSByZXN0IOKAlFxuICogc2FtZSByZWFjaCBhcyB0aGUgaW5saW5lIHRpZXIsIG9uZSBiZWF0IGJlaGluZC5cbiAqL1xuXG5pbXBvcnQgeyBzdGFnZUlkT2YgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgeyBpbnZva2VSZWNvcmRlckhvb2sgfSBmcm9tICcuLi9jYXB0dXJlL2ludm9rZUhvb2suanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDYXB0dXJlQ2hhbm5lbCxcbiAgdHlwZSBDYXB0dXJlRW52ZWxvcGUsXG4gIHR5cGUgQ2FwdHVyZVBvbGljeSxcbiAgdHlwZSBEaXNwYXRjaGVyU3RhdHMsXG4gIHR5cGUgRHJhaW5SZXN1bHQsXG4gIHR5cGUgT3ZlcmZsb3dQb2xpY3ksXG4gIERlZmVycmVkRGlzcGF0Y2hlcixcbn0gZnJvbSAnLi4vb2JzZXJ2ZXItcXVldWUvaW5kZXguanMnO1xuaW1wb3J0IHsgZGVzY3JpYmVUaHJvd24sIGhvb2tzT24sIHJlY29yZGVyRmFpbHVyZUV2ZW50IH0gZnJvbSAnLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuXG4vKiogRGVsaXZlcnkgdGllciBmb3IgYW4gYXR0YWNoZWQgb2JzZXJ2ZXIgKFJGQy0wMDEpLiAqL1xuZXhwb3J0IHR5cGUgT2JzZXJ2ZXJEZWxpdmVyeSA9ICdpbmxpbmUnIHwgJ2RlZmVycmVkJztcblxuLyoqXG4gKiBPcHRpb25zIGJhZyBhY2NlcHRlZCBieSBldmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsLlxuICpcbiAqIGBkZWxpdmVyeTogJ2RlZmVycmVkJ2Agb3B0cyB0aGUgcmVjb3JkZXIgaW50byB0aGUgYm91bmRlZCBjYXB0dXJlIHF1ZXVlXG4gKiAoXCJvbmUgYmVhdCBiZWhpbmRcIik7IGFic2VudCAvIGAnaW5saW5lJ2Aga2VlcHMgdGhlIGhpc3RvcmljYWwgc3luY2hyb25vdXNcbiAqIGNhbGwg4oCUIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBwcmUtUkZDIHBhdGguXG4gKlxuICogVGhlIHJlbWFpbmluZyBmaWVsZHMgY29uZmlndXJlIHRoZSBleGVjdXRvcidzIE9ORSBzaGFyZWQgZGlzcGF0Y2hlciBhbmRcbiAqIGFyZSBhcHBsaWVkIHdoZW4gdGhlIEZJUlNUIGRlZmVycmVkIGF0dGFjaCBjcmVhdGVzIGl0OyBsYXRlciBhdHRhY2hlc1xuICogcGFzc2luZyBkaWZmZXJlbnQgdmFsdWVzIGdldCBhIGRldi1tb2RlIHdhcm5pbmcgYW5kIGtlZXAgdGhlIG9yaWdpbmFsXG4gKiBjb25maWd1cmF0aW9uIChvbmUgcXVldWUgcGVyIGV4ZWN1dG9yIOKAlCBwZXItcmVjb3JkZXIgcXVldWVzIHdvdWxkIGJyZWFrXG4gKiB0aGUgdG90YWwgY3Jvc3MtY2hhbm5lbCBvcmRlcikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNoUmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIGAnZGVmZXJyZWQnYCA9IGNhcHR1cmUg4oaSIHF1ZXVlIOKGkiBuZXh0LWNoZWNrcG9pbnQgZGVsaXZlcnkuIERlZmF1bHQgYCdpbmxpbmUnYC4gKi9cbiAgcmVhZG9ubHkgZGVsaXZlcnk/OiBPYnNlcnZlckRlbGl2ZXJ5O1xuICAvKipcbiAgICogUGF5bG9hZCBtYXRlcmlhbGl6YXRpb24gYXQgY2FwdHVyZSB0aW1lLiBEZWZhdWx0IGAnY2xvbmUnYCDigJQgeW91clxuICAgKiByZWNvcmRlcidzIGhvb2tzIHJlY2VpdmUgdGhlIFNBTUUgZXZlbnQgc2hhcGUgYXMgaW5saW5lIGRlbGl2ZXJ5XG4gICAqIChgc3RydWN0dXJlZENsb25lYGQ7IGBlLmtleWAvYGUudmFsdWVgL2BlLnJ1bnRpbWVTdGFnZUlkYCBhbGwgd29ya1xuICAgKiB1bmNoYW5nZWQpLCBzbyBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBpcyBhIGRyb3AtaW4gcG9ydC5cbiAgICogYCdzdW1tYXJ5J2Ag4oCUIGEgYm91bmRlZCB0eXBlL3NpemUvcHJldmlldyBkaWdlc3QgKGBQYXlsb2FkU3VtbWFyeWApXG4gICAqIGluc3RlYWQgb2YgdGhlIGV2ZW50IHNoYXBlOiBjaGVhcGVyIGNhcHR1cmUgZm9yIHRlbGVtZXRyeS1vbmx5XG4gICAqIGNvbnN1bWVycyB0aGF0IGRvbid0IHJlYWQgZG9tYWluIGZpZWxkcy4gYCdyZWYnYCDigJQgcGFzcy10aHJvdWdoIGJ5XG4gICAqIHJlZmVyZW5jZTsgdGhlIGNhbGxlciBhc3NlcnRzIGltbXV0YWJpbGl0eSAoZGV2LW1vZGUgd2FybnMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FwdHVyZT86IENhcHR1cmVQb2xpY3k7XG4gIC8qKiBRdWV1ZSBib3VuZCDigJQgZGVmYXVsdCAxMCAwMDAuICovXG4gIHJlYWRvbmx5IG1heFF1ZXVlPzogbnVtYmVyO1xuICAvKiogT3ZlcmZsb3cgcG9saWN5IGF0IGBtYXhRdWV1ZWAg4oCUIGRlZmF1bHQgYCdkcm9wLW9sZGVzdCdgLiAqL1xuICByZWFkb25seSBvdmVyZmxvdz86IE92ZXJmbG93UG9saWN5O1xuICAvKiogYCdzYW1wbGUnYCBvdmVyZmxvdyBvbmx5IOKAlCBhZG1pdCAxIGluIHRoaXMgbWFueSBzYXR1cmF0ZWQgYXJyaXZhbHMuICovXG4gIHJlYWRvbmx5IHNhbXBsZUV2ZXJ5PzogbnVtYmVyO1xuICAvKiogUGVyLWNoZWNrcG9pbnQgZmx1c2ggYnVkZ2V0LCBtcyAoQTEpIOKAlCBkZWZhdWx0IDI7IGBJbmZpbml0eWAgPSBmdWxsIGRyYWluLiAqL1xuICByZWFkb25seSBmbHVzaEJ1ZGdldE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBCbG9jayA5IG9ic2VydmFiaWxpdHkgc3VyZmFjZSDigJQgYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgLiBUaGUgQTRcbiAqIGRpc3BhdGNoZXIgc3RhdHMgcGx1cyB0aGUgdGVybWluYWwtZmx1c2ggc3RyYW5kaW5nIGNvdW50IGZyb20gQmxvY2sgOC5cbiAqIFByZXNlbnQgb24gYFJ1bnRpbWVTbmFwc2hvdGAgb25seSB3aGVuIGEgZGVmZXJyZWQgb2JzZXJ2ZXIgd2FzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9ic2VydmVyU3RhdHMgZXh0ZW5kcyBEaXNwYXRjaGVyU3RhdHMge1xuICAvKipcbiAgICogRW52ZWxvcGVzIHN0aWxsIHF1ZXVlZCB3aGVuIGEgdGVybWluYWwgZmx1c2ggaGl0IGl0cyBydW5hd2F5LWNhc2NhZGVcbiAgICogcm91bmQgY2FwIChCbG9jayA4KS4gYDBgIGluIGFueSBzYW5lIHJ1biDigJQgYSBub24temVybyB2YWx1ZSBtZWFucyBhXG4gICAqIGxpc3RlbmVyIGtlcHQgZW5xdWV1ZWluZyB3b3JrIGF0IGVuZC1vZi1ydW4gYW5kIGRlbGl2ZXJ5IHdhcyBjdXQgb2ZmXG4gICAqIChhbHNvIGRldi13YXJuZWQgYXQgdGhlIG1vbWVudCBpdCBoYXBwZW5lZCkuIE5ldmVyIHNpbGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRlcm1pbmFsU3RyYW5kZWQ6IG51bWJlcjtcbn1cblxuLyoqIFJlc3VsdCBzaGFwZSBvZiBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAg4oCUIHNlZSBgRHJhaW5SZXN1bHRgLiAqL1xuZXhwb3J0IHR5cGUgT2JzZXJ2ZXJEcmFpblJlc3VsdCA9IERyYWluUmVzdWx0O1xuXG4vKiogV2VsbC1rbm93biBpZHMgb2YgdGhlIHN5bnRoZXRpYyBjYXB0dXJlIHRhcHMgKGludGVybmFsLCBkb2N1bWVudGVkIGZvciBkZWJ1Z2dpbmcpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkVSUkVEX1NDT1BFX1RBUF9JRCA9ICdfX2RlZmVycmVkLXNjb3BlLXRhcF9fJztcbmV4cG9ydCBjb25zdCBERUZFUlJFRF9GTE9XX1RBUF9JRCA9ICdfX2RlZmVycmVkLWZsb3ctdGFwX18nO1xuXG4vKiogQ2hhbm5lbCByZWFjaCBvZiB0aGUgc2NvcGUtcmVjb3JkZXIgbGlzdCAoc2NvcGUgZXZlbnRzICsgZW1pdCBldmVudHMpLiAqL1xuY29uc3QgU0NPUEVfTElTVF9DSEFOTkVMUzogcmVhZG9ubHkgQ2FwdHVyZUNoYW5uZWxbXSA9IFsnc2NvcGUnLCAnZW1pdCddO1xuLyoqIENoYW5uZWwgcmVhY2ggb2YgdGhlIGZsb3ctcmVjb3JkZXIgbGlzdC4gKi9cbmNvbnN0IEZMT1dfTElTVF9DSEFOTkVMUzogcmVhZG9ubHkgQ2FwdHVyZUNoYW5uZWxbXSA9IFsnZmxvdyddO1xuXG4vKiogRGlzcGF0Y2hlci1sZXZlbCBvcHRpb25zIHNuYXBzaG90LCBrZXB0IGZvciBjb25mbGljdCBkZXRlY3Rpb24uICovXG5pbnRlcmZhY2UgQXBwbGllZERpc3BhdGNoZXJDb25maWcge1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZVBvbGljeTtcbiAgcmVhZG9ubHkgbWF4UXVldWU/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIHJlYWRvbmx5IHNhbXBsZUV2ZXJ5PzogbnVtYmVyO1xuICByZWFkb25seSBmbHVzaEJ1ZGdldE1zPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgRGVmZXJyZWRSZWdpc3RyYXRpb24ge1xuICByZWFkb25seSByZWNvcmRlcjogU2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcjtcbiAgLyoqIFdoaWNoIGVudmVsb3BlIGNoYW5uZWxzIHJlYWNoIHRoaXMgcmVjb3JkZXIgKGlubGluZS10aWVyIHBhcml0eSkuICovXG4gIHJlYWRvbmx5IGNoYW5uZWxzOiBTZXQ8Q2FwdHVyZUNoYW5uZWw+O1xufVxuXG5leHBvcnQgY2xhc3MgRGVmZXJyZWRPYnNlcnZlclRpZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BhdGNoZXI6IERlZmVycmVkRGlzcGF0Y2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyYXRpb25zID0gbmV3IE1hcDxzdHJpbmcsIERlZmVycmVkUmVnaXN0cmF0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcGxpZWRDb25maWc6IEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnO1xuICAvKiogRGVkdXAgbWVtb3J5IGZvciB0aGUgZGV2LXdhcm4gc2VhbSAob25lIHdhcm5pbmcgcGVyIHVuaXF1ZSBtZXNzYWdlKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3YXJuZWRNZXNzYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHRlcm1pbmFsU3RyYW5kZWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMpIHtcbiAgICB0aGlzLmFwcGxpZWRDb25maWcgPSB7XG4gICAgICAvLyBBdHRhY2gtc3VyZmFjZSBkZWZhdWx0IGlzICdjbG9uZScgKHJldmlldyBDUklUSUNBTC0yKTogYSByZWNvcmRlclxuICAgICAgLy8gcG9ydGVkIHdpdGggYHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfWAga2VlcHMgcmVjZWl2aW5nIHRoZSBTQU1FXG4gICAgICAvLyBldmVudCBzaGFwZSBhcyBpbmxpbmUgKGUua2V5L2UudmFsdWUvZS5ydW50aW1lU3RhZ2VJZCBhbGwgaW50YWN0KS5cbiAgICAgIC8vIFRoZSBtb2R1bGUtaW50ZXJuYWwgZW52ZWxvcGUgZGVmYXVsdCBzdGF5cyAnc3VtbWFyeScgZm9yIHJhdy1cbiAgICAgIC8vIGVudmVsb3BlIGNvbnN1bWVyczsgJ3N1bW1hcnknIGhlcmUgaXMgYW4gZXhwbGljaXQgdGVsZW1ldHJ5IGNob2ljZS5cbiAgICAgIGNhcHR1cmU6IG9wdGlvbnM/LmNhcHR1cmUgPz8gJ2Nsb25lJyxcbiAgICAgIG1heFF1ZXVlOiBvcHRpb25zPy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRpb25zPy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zPy5zYW1wbGVFdmVyeSxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdGlvbnM/LmZsdXNoQnVkZ2V0TXMsXG4gICAgfTtcbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGVmZXJyZWREaXNwYXRjaGVyKHtcbiAgICAgIG1heFF1ZXVlOiBvcHRpb25zPy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRpb25zPy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zPy5zYW1wbGVFdmVyeSxcbiAgICAgIGNhcHR1cmVQb2xpY3k6IG9wdGlvbnM/LmNhcHR1cmUgPz8gJ2Nsb25lJyxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdGlvbnM/LmZsdXNoQnVkZ2V0TXMsXG4gICAgICAvLyBUaGUgZGV2LXdhcm4gc2VhbSAoUkZDLTAwMSDCp1wiUmVzb2x1dGlvbjogdGhlIGRldi13YXJuIHNlYW1cIik6IHRoZVxuICAgICAgLy8gcHVyZSBtb2R1bGUgaW52b2tlcyBgd2FybmAgb24gZXZlcnkgJ3JlZicgY2FwdHVyZSBhbmQgZXZlcnkgJ2Nsb25lJ1xuICAgICAgLy8gZGVncmFkYXRpb247IHRoZSB0aWVyIGJpbmRzIGl0IHRvIHRoZSBjZW50cmFsIGlzRGV2TW9kZSgpIGZsYWcgYW5kXG4gICAgICAvLyBkZWR1cGVzIGJ5IG1lc3NhZ2Ugc28gYSBob3QgbG9vcCBjYW5ub3Qgc3BhbSB0aGUgY29uc29sZS5cbiAgICAgIGhvb2tzOiB7IHdhcm46IChtZXNzYWdlKSA9PiB0aGlzLmRldldhcm5EZWR1cGVkKG1lc3NhZ2UpIH0sXG4gICAgICAvLyBMaXN0ZW5lciBmYWlsdXJlcyAoc3luYyB0aHJvd3MgQU5EIGFzeW5jIHJlamVjdGlvbnMpIHJvdXRlIGludG8gdGhlXG4gICAgICAvLyBleGlzdGluZyByZWNvcmRlciBlcnJvciBjaGFubmVsIOKAlCBzZWUgcm91dGVMaXN0ZW5lckVycm9yLlxuICAgICAgb25FcnJvcjogKGVycm9yLCBjdHgpID0+IHRoaXMucm91dGVMaXN0ZW5lckVycm9yKGVycm9yLCBjdHgubGlzdGVuZXJJZCwgY3R4LmVudmVsb3BlLCBjdHgucGhhc2UpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlZ2lzdHJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHJlY29yZGVyIGZvciBkZWZlcnJlZCBkZWxpdmVyeSBvbiB0aGUgc2NvcGUtbGlzdCBjaGFubmVsc1xuICAgKiAoYHNjb3BlYCArIGBlbWl0YCkgYW5kL29yIHRoZSBmbG93IGNoYW5uZWwuIElkZW1wb3RlbnQgYnkgaWQg4oCUIHNhbWUgaWRcbiAgICogcmVwbGFjZXMgdGhlIHJlY29yZGVyIG9iamVjdDsgY2hhbm5lbCBsaXN0cyBNRVJHRSBhY3Jvc3MgY2FsbHMgKHNhbWUgYXNcbiAgICogdGhlIGlubGluZSB0aWVyLCB3aGVyZSBgYXR0YWNoU2NvcGVSZWNvcmRlcih4KWAgKyBgYXR0YWNoRmxvd1JlY29yZGVyKHgpYFxuICAgKiBsYW5kcyBgeGAgb24gYm90aCBsaXN0cykuIExhdGVyIGF0dGFjaGVzIHBhc3NpbmcgZGlzcGF0Y2hlci1sZXZlbFxuICAgKiBvcHRpb25zIHRoYXQgZGlmZmVyIGZyb20gdGhlIGZpcnN0IGF0dGFjaCdzIGNvbmZpZ3VyYXRpb24ga2VlcCB0aGVcbiAgICogb3JpZ2luYWwgY29uZmlnIGFuZCBkZXYtd2Fybi5cbiAgICovXG4gIHJlZ2lzdGVyKFxuICAgIHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyLFxuICAgIGxpc3RzOiB7IHNjb3BlPzogYm9vbGVhbjsgZmxvdz86IGJvb2xlYW4gfSxcbiAgICBvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLndhcm5PbkNvbmZpZ0NvbmZsaWN0KHJlY29yZGVyLmlkLCBvcHRpb25zKTtcbiAgICBjb25zdCBjaGFubmVscyA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQocmVjb3JkZXIuaWQpPy5jaGFubmVscyA/PyBuZXcgU2V0PENhcHR1cmVDaGFubmVsPigpO1xuICAgIGlmIChsaXN0cy5zY29wZSkgZm9yIChjb25zdCBjIG9mIFNDT1BFX0xJU1RfQ0hBTk5FTFMpIGNoYW5uZWxzLmFkZChjKTtcbiAgICBpZiAobGlzdHMuZmxvdykgZm9yIChjb25zdCBjIG9mIEZMT1dfTElTVF9DSEFOTkVMUykgY2hhbm5lbHMuYWRkKGMpO1xuICAgIHRoaXMucmVnaXN0cmF0aW9ucy5zZXQocmVjb3JkZXIuaWQsIHsgcmVjb3JkZXIsIGNoYW5uZWxzIH0pO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5hZGRMaXN0ZW5lcihyZWNvcmRlci5pZCwgKGVudmVsb3BlKSA9PiB7XG4gICAgICBjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHJlY29yZGVyLmlkKTtcbiAgICAgIGlmICghcmVnaXN0cmF0aW9uIHx8ICFyZWdpc3RyYXRpb24uY2hhbm5lbHMuaGFzKGVudmVsb3BlLmNoYW5uZWwpKSByZXR1cm47XG4gICAgICAvLyBTQU1FIGludm9rZSBoZWxwZXIgYXMgdGhlIGlubGluZSB0aWVyIChSRkMtMDAxIMKnOSBtaXRpZ2F0aW9uKSDigJQgYVxuICAgICAgLy8gcmV0dXJuZWQgUHJvbWlzZSBsYW5kcyBpbiB0aGUgZGlzcGF0Y2hlcidzIGluZmxpZ2h0IHNldC5cbiAgICAgIHJldHVybiBpbnZva2VSZWNvcmRlckhvb2socmVjb3JkZXIsIGVudmVsb3BlLm1ldGhvZCwgZW52ZWxvcGUucGF5bG9hZCkgYXMgdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBnaXZlbiBjaGFubmVsIGxpc3RzIGZyb20gYSByZWdpc3RyYXRpb24gKG1pcnJvcnMgdGhlIGlubGluZVxuICAgKiB0aWVyLCB3aGVyZSBgZGV0YWNoU2NvcGVSZWNvcmRlcmAgLyBgZGV0YWNoRmxvd1JlY29yZGVyYCBlYWNoIGNsZWFyIG9uZVxuICAgKiBsaXN0KS4gV2hlbiBubyBjaGFubmVscyByZW1haW4sIHRoZSBsaXN0ZW5lciBpcyBmdWxseSByZW1vdmVkLlxuICAgKi9cbiAgcmVtb3ZlRnJvbUxpc3RzKGlkOiBzdHJpbmcsIGxpc3RzOiB7IHNjb3BlPzogYm9vbGVhbjsgZmxvdz86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQoaWQpO1xuICAgIGlmICghcmVnaXN0cmF0aW9uKSByZXR1cm47XG4gICAgaWYgKGxpc3RzLnNjb3BlKSBmb3IgKGNvbnN0IGMgb2YgU0NPUEVfTElTVF9DSEFOTkVMUykgcmVnaXN0cmF0aW9uLmNoYW5uZWxzLmRlbGV0ZShjKTtcbiAgICBpZiAobGlzdHMuZmxvdykgZm9yIChjb25zdCBjIG9mIEZMT1dfTElTVF9DSEFOTkVMUykgcmVnaXN0cmF0aW9uLmNoYW5uZWxzLmRlbGV0ZShjKTtcbiAgICBpZiAocmVnaXN0cmF0aW9uLmNoYW5uZWxzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMucmVnaXN0cmF0aW9ucy5kZWxldGUoaWQpO1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUxpc3RlbmVyKGlkKTtcbiAgICB9XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIGBpZGAgaXMgcmVnaXN0ZXJlZCBmb3IgZGVmZXJyZWQgZGVsaXZlcnkgKGFueSBjaGFubmVsKS4gKi9cbiAgaGFzKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyYXRpb25zLmhhcyhpZCk7XG4gIH1cblxuICAvKiogRGVmZXJyZWQgcmVjb3JkZXJzIHdob3NlIHJlYWNoIGluY2x1ZGVzIHRoZSBzY29wZSBsaXN0IChzY29wZStlbWl0KS4gKi9cbiAgc2NvcGVMaXN0UmVjb3JkZXJzKCk6IFNjb3BlUmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnlDaGFubmVsKCdzY29wZScpIGFzIFNjb3BlUmVjb3JkZXJbXTtcbiAgfVxuXG4gIC8qKiBEZWZlcnJlZCByZWNvcmRlcnMgd2hvc2UgcmVhY2ggaW5jbHVkZXMgdGhlIGZsb3cgY2hhbm5lbC4gKi9cbiAgZmxvd0xpc3RSZWNvcmRlcnMoKTogRmxvd1JlY29yZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmJ5Q2hhbm5lbCgnZmxvdycpIGFzIEZsb3dSZWNvcmRlcltdO1xuICB9XG5cbiAgLyoqIFJlc2V0IGRlZmVycmVkIHJlY29yZGVycyBiZWZvcmUgYSBmcmVzaCBydW4gKHNhbWUgY29udHJhY3QgYXMgaW5saW5lKS4gKi9cbiAgY2xlYXJSZWNvcmRlcnMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB7IHJlY29yZGVyIH0gb2YgdGhpcy5yZWdpc3RyYXRpb25zLnZhbHVlcygpKSB7XG4gICAgICAocmVjb3JkZXIgYXMgeyBjbGVhcj86ICgpID0+IHZvaWQgfSkuY2xlYXI/LigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBDYXB0dXJlIHRhcHMgKEJsb2NrIDcpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgc3ludGhldGljIHNjb3BlLWNoYW5uZWwgdGFwIOKAlCBhIGBTY29wZVJlY29yZGVyYCBwbGFjZWQgb24gdGhlXG4gICAqIG5vcm1hbCBzY29wZS1yZWNvcmRlciBsaXN0IHdob3NlIGhvb2tzIGNhcHR1cmUgaW50byB0aGUgcXVldWUuIEJ1aWx0XG4gICAqIGZyZXNoIHBlciB0cmF2ZXJzZXIgc28gaXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgcmVnaXN0cmF0aW9ucy4gT25seVxuICAgKiBtZXRob2RzIHNvbWUgZGVmZXJyZWQgcmVjb3JkZXIgYWN0dWFsbHkgaW1wbGVtZW50cyBhcmUgcHJlc2VudCAobm9cbiAgICogd2FzdGVkIGNhcHR1cmVzKS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIG5vdGhpbmcgaXMgcmVnaXN0ZXJlZCBmb3JcbiAgICogdGhlIHNjb3BlIGxpc3QuXG4gICAqXG4gICAqIFJlZGFjdGlvbiBvcmRlcmluZzogdGhlIHRhcCBpcyBpbnZva2VkIGZyb20gdGhlIFNBTUUgbG9vcHMgYXMgaW5saW5lXG4gICAqIHJlY29yZGVycyAoYF9pbnZva2VIb29rYCAvIGBlbWl0RXZlbnRgKSwgd2hpY2ggcmVjZWl2ZSBldmVudHMgQUZURVIgdGhlXG4gICAqIHJlZGFjdGlvbiBkZWNpc2lvbiDigJQgc28gYSBjYXB0dXJlZCBwYXlsb2FkIGNhbiBuZXZlciBjb250YWluIGFcbiAgICogcHJlLXJlZGFjdGlvbiB2YWx1ZSB0aGUgaW5saW5lIHRpZXIgd291bGQgbm90IGhhdmUgc2Vlbi5cbiAgICovXG4gIGJ1aWxkU2NvcGVUYXAoKTogU2NvcGVSZWNvcmRlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkZXJzID0gdGhpcy5zY29wZUxpc3RSZWNvcmRlcnMoKTtcbiAgICBpZiAocmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogREVGRVJSRURfU0NPUEVfVEFQX0lEIH07XG4gICAgLy8gRGVyaXZlZCBmcm9tIHRoZSBob29rIHJlZ2lzdHJ5OiBldmVyeSBob29rIG9mIHRoZSBzY29wZSBjaGFubmVsIGFuZCBvZiB0aGUgZW1pdCBjaGFubmVsXG4gICAgLy8gKHdoaWNoIHJpZGVzIHRoZSBzY29wZSBsaXN0KSDigJQgYSBob29rIHRoZSByZWdpc3RyeSBnYWlucyBpcyB0YXBwZWQgd2l0aCBubyBlZGl0IGhlcmUuXG4gICAgZm9yIChjb25zdCBjaGFubmVsIG9mIFsnc2NvcGUnLCAnZW1pdCddIGFzIGNvbnN0KSB7XG4gICAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBob29rc09uKGNoYW5uZWwpKSB7XG4gICAgICAgIGlmICghdGhpcy5hbnlJbXBsZW1lbnRzKHJlY29yZGVycywgbWV0aG9kKSkgY29udGludWU7XG4gICAgICAgIHRhcFttZXRob2RdID0gKGV2ZW50OiB1bmtub3duKSA9PiB0aGlzLmNhcHR1cmVTY29wZUV2ZW50KGNoYW5uZWwsIG1ldGhvZCwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFwIGFzIHVua25vd24gYXMgU2NvcGVSZWNvcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgc3ludGhldGljIGZsb3ctY2hhbm5lbCB0YXAg4oCUIGEgYEZsb3dSZWNvcmRlcmAgYXBwZW5kZWQgdG8gdGhlXG4gICAqIGZsb3ctcmVjb3JkZXJzIGxpc3QgaGFuZGVkIHRvIHRoZSB0cmF2ZXJzZXIuIFNhbWUgY29udHJhY3QgYXNcbiAgICoge0BsaW5rIGJ1aWxkU2NvcGVUYXB9LlxuICAgKi9cbiAgYnVpbGRGbG93VGFwKCk6IEZsb3dSZWNvcmRlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkZXJzID0gdGhpcy5mbG93TGlzdFJlY29yZGVycygpO1xuICAgIGlmIChyZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBERUZFUlJFRF9GTE9XX1RBUF9JRCB9O1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGhvb2tzT24oJ2Zsb3cnKSkge1xuICAgICAgaWYgKCF0aGlzLmFueUltcGxlbWVudHMocmVjb3JkZXJzLCBtZXRob2QpKSBjb250aW51ZTtcbiAgICAgIHRhcFttZXRob2RdID0gKGV2ZW50OiB1bmtub3duKSA9PiB0aGlzLmNhcHR1cmVGbG93RXZlbnQobWV0aG9kLCBldmVudCk7XG4gICAgfVxuICAgIHJldHVybiB0YXAgYXMgdW5rbm93biBhcyBGbG93UmVjb3JkZXI7XG4gIH1cblxuICAvKipcbiAgICogRGlyZWN0IGNhcHR1cmUgZm9yIGV4ZWN1dG9yLXN5bnRoZXNpemVkIGV2ZW50cyB0aGF0IGJ5cGFzcyB0aGUgZGlzcGF0Y2hcbiAgICogc2l0ZXMgKGUuZy4gdGhlIHN5bnRoZXRpYyBgb25SZXN1bWVgIHRoZSBleGVjdXRvciBmaXJlcyBvbiByZXN1bWUpLlxuICAgKi9cbiAgY2FwdHVyZShjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbCwgbWV0aG9kOiBzdHJpbmcsIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHJ1bklkOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7IGNoYW5uZWwsIG1ldGhvZCwgcnVudGltZVN0YWdlSWQsIHJ1bklkLCBwYXlsb2FkIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFRlcm1pbmFsIGZsdXNoICsgZHJhaW4gKEJsb2NrIDgpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbm91c2x5IGRlbGl2ZXIgZXZlcnl0aGluZyBzdGlsbCBxdWV1ZWQg4oCUIGNhbGxlZCBieSB0aGUgZXhlY3V0b3JcbiAgICogYXQgdGhlIE9VVEVSTU9TVCBydW4gYm91bmRhcnkgKHJlc29sdmUsIHJlamVjdCwgcGF1c2UpLCBCRUZPUkUgYHJ1bigpYFxuICAgKiByZXR1cm5zIC8gcmV0aHJvd3MgLyB0aGUgY2hlY2twb2ludCBiZWNvbWVzIGF2YWlsYWJsZS4gSW5zcGVjdHNcbiAgICogYGZsdXNoU3luY2AncyBgcmVtYWluaW5nYCAocmV2aWV3ZXIgTjEpOiBgZmx1c2hTeW5jYCBhbHJlYWR5IGxvb3BzXG4gICAqIHNuYXBzaG90IHJvdW5kcyB1cCB0byBpdHMgcnVuYXdheS1jYXNjYWRlIGNhcCwgc28gYSBub24temVybyByZW1haW5kZXJcbiAgICogbWVhbnMgYSBwYXRob2xvZ2ljYWwgc2VsZi1lbnF1ZXVlaW5nIGxpc3RlbmVyIOKAlCBjb3VudGVkIGluXG4gICAqIGBvYnNlcnZlclN0YXRzLnRlcm1pbmFsU3RyYW5kZWRgIGFuZCBkZXYtd2FybmVkLCBuZXZlciBzaWxlbnQuXG4gICAqL1xuICB0ZXJtaW5hbEZsdXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgcmVtYWluaW5nIH0gPSB0aGlzLmRpc3BhdGNoZXIuZmx1c2hOb3coKTtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgdGhpcy50ZXJtaW5hbFN0cmFuZGVkICs9IHJlbWFpbmluZztcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRqc10gZGVmZXJyZWQgb2JzZXJ2ZXJzOiB0ZXJtaW5hbCBmbHVzaCBoaXQgdGhlIHJ1bmF3YXktY2FzY2FkZSBjYXAgd2l0aCAke3JlbWFpbmluZ30gYCArXG4gICAgICAgICAgICAnZXZlbnQocykgc3RpbGwgcXVldWVkIOKAlCBhIGxpc3RlbmVyIGtlcHQgZW5xdWV1ZWluZyBkdXJpbmcgdGhlIGZsdXNoLiBUaGUgc3RyYW5kZWQgY291bnQgaXMgJyArXG4gICAgICAgICAgICAnc3VyZmFjZWQgb24gc25hcHNob3Qub2JzZXJ2ZXJTdGF0cy50ZXJtaW5hbFN0cmFuZGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoIHRoZSBiYWNrbG9nLCB0aGVuIHNldHRsZSBhc3luYyBsaXN0ZW5lciBjb250aW51YXRpb25zIHVuZGVyIGFcbiAgICogZGVhZGxpbmUg4oCUIHRoZSBzZXJ2ZXJsZXNzIC8gZ3JhY2VmdWwtc2h1dGRvd24gcGF0dGVybiAoUkZDLTAwMSDCpzExKS5cbiAgICovXG4gIGRyYWluKG9wdHM/OiB7IHRpbWVvdXRNcz86IG51bWJlciB9KTogUHJvbWlzZTxPYnNlcnZlckRyYWluUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2hlci5kcmFpbihvcHRzKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTdGF0cyAoQmxvY2sgOSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFRoZSBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2AgcGF5bG9hZCDigJQgQTQgc3RhdHMgKyBCbG9jayA4IHN0cmFuZGluZy4gKi9cbiAgZ2V0U3RhdHMoKTogT2JzZXJ2ZXJTdGF0cyB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5kaXNwYXRjaGVyLmdldFN0YXRzKCksIHRlcm1pbmFsU3RyYW5kZWQ6IHRoaXMudGVybWluYWxTdHJhbmRlZCB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGJ5Q2hhbm5lbChjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbCk6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+IHtcbiAgICBjb25zdCBvdXQ6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+ID0gW107XG4gICAgZm9yIChjb25zdCB7IHJlY29yZGVyLCBjaGFubmVscyB9IG9mIHRoaXMucmVnaXN0cmF0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKGNoYW5uZWxzLmhhcyhjaGFubmVsKSkgb3V0LnB1c2gocmVjb3JkZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqIE5vcm1hbCBwcm9wZXJ0eSBsb29rdXAg4oCUIGludm9jYXRpb24gcGFyaXR5IHdpdGggdGhlIGlubGluZSB0aWVyLiAqL1xuICBwcml2YXRlIGFueUltcGxlbWVudHMocmVjb3JkZXJzOiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiwgbWV0aG9kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVjb3JkZXJzLnNvbWUoKHIpID0+IHR5cGVvZiAociBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttZXRob2RdID09PSAnZnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8qKiBTY29wZS9lbWl0IGV2ZW50cyBjYXJyeSB0aGVpciBvd24gaWRzIChgcnVudGltZVN0YWdlSWRgICsgYHBpcGVsaW5lSWRgKS4gKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU2NvcGVFdmVudChjaGFubmVsOiBDYXB0dXJlQ2hhbm5lbCwgbWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IGV2ZW50IGFzIHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7IHBpcGVsaW5lSWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7XG4gICAgICBjaGFubmVsLFxuICAgICAgbWV0aG9kLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGU/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgICAgcnVuSWQ6IGU/LnBpcGVsaW5lSWQgPz8gJycsXG4gICAgICBwYXlsb2FkOiBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGbG93IGV2ZW50cyBjYXJyeSBpZHMgb24gYHRyYXZlcnNhbENvbnRleHRgIChhYnNlbnQgb24gYSBmZXcgZXZlbnRzKS4gKi9cbiAgcHJpdmF0ZSBjYXB0dXJlRmxvd0V2ZW50KG1ldGhvZDogc3RyaW5nLCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IChldmVudCBhcyB7IHRyYXZlcnNhbENvbnRleHQ/OiB7IHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9IH0gfCB1bmRlZmluZWQpXG4gICAgICA/LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmNhcHR1cmUoe1xuICAgICAgY2hhbm5lbDogJ2Zsb3cnLFxuICAgICAgbWV0aG9kLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGN0eD8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgICBydW5JZDogY3R4Py5ydW5JZCA/PyAnJyxcbiAgICAgIHBheWxvYWQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdXRlIGEgZGVmZXJyZWQgbGlzdGVuZXIgZmFpbHVyZSBpbnRvIHRoZSBleGlzdGluZyByZWNvcmRlciBlcnJvclxuICAgKiBjaGFubmVsOiBldmVyeSByZWdpc3RlcmVkIHNjb3BlIG9ic2VydmVyIOKAlCB0aGUgZmFpbGluZyBvbmUgaW5jbHVkZWQsIGluXG4gICAqIHJlZ2lzdHJhdGlvbiBvcmRlciDigJQgcmVjZWl2ZXMgdGhlIHNjb3BlLXNoYXBlZCBgb25FcnJvcmAgZXZlbnQgdGhlIGlubGluZVxuICAgKiB0aWVyIGJ1aWxkcyAoYHJlY29yZGVyRmFpbHVyZUV2ZW50YCksIGFuZCBhIHRocm93IGZyb20gYG9uRXJyb3JgIGl0c2VsZlxuICAgKiBpcyBub3Qgcm91dGVkIGFnYWluOiB0aGUgY29udHJhY3QgdGhlIGlubGluZSB0aWVyIGhvbm9ycyB3aGVuIGEgcmVjb3JkZXJcbiAgICogdGhyb3dzIG1pZC1kaXNwYXRjaCAoOS4zOS4wIOKAlCBiZWZvcmUsIHRoZSBmYWlsaW5nIGxpc3RlbmVyIHdhcyBza2lwcGVkLFxuICAgKiBzbyBhIENvbXBvc2l0ZVJlY29yZGVyJ3Mgb3RoZXIgY2hpbGRyZW4gbmV2ZXIgaGVhcmQgYSBzaWJsaW5nJ3MgdGhyb3cpLlxuICAgKiBUaGUgZXJyb3Igc2luayBtdXN0IG5ldmVyIGJlY29tZSBhbiBlcnJvciBzb3VyY2U6IHNpbmsgdGhyb3dzIGFyZVxuICAgKiBzd2FsbG93ZWQgKGlzb2xhdGlvbiBpcyBhYnNvbHV0ZSkuXG4gICAqL1xuICBwcml2YXRlIHJvdXRlTGlzdGVuZXJFcnJvcihcbiAgICBlcnJvcjogdW5rbm93bixcbiAgICBsaXN0ZW5lcklkOiBzdHJpbmcsXG4gICAgZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZSxcbiAgICBwaGFzZTogJ3N5bmMnIHwgJ2FzeW5jJyxcbiAgKTogdm9pZCB7XG4gICAgLy8gSW5saW5lIHBhcml0eSAoOS4zOS4wKTogdGhlIGlubGluZSB0aWVyIGhhbmRzIGEgcmVjb3JkZXIncyB0aHJvdyB0byBFVkVSWSByZWNvcmRlciBvbiB0aGVcbiAgICAvLyBzY29wZSBsaXN0IOKAlCB0aGUgdGhyb3dlciBpbmNsdWRlZCwgc28gYSBDb21wb3NpdGVSZWNvcmRlcidzIG90aGVyIGNoaWxkcmVuIGhlYXIgaXQg4oCUIGFuZFxuICAgIC8vIGRyb3BzIGEgdGhyb3cgZnJvbSBgb25FcnJvcmAgaXRzZWxmLiBTYW1lIGhlcmUsIHdpdGggdGhlIHNhbWUgZXZlbnQgKGByZWNvcmRlckZhaWx1cmVFdmVudGApLlxuICAgIGlmIChlbnZlbG9wZS5tZXRob2QgIT09ICdvbkVycm9yJykgdGhpcy5kZWxpdmVyTGlzdGVuZXJFcnJvcihlcnJvciwgZW52ZWxvcGUpO1xuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtmb290cHJpbnRqc10gZGVmZXJyZWQgb2JzZXJ2ZXIgJyR7bGlzdGVuZXJJZH0nIGZhaWxlZCAoJHtwaGFzZX0pIGhhbmRsaW5nIGAgK1xuICAgICAgICAgIGAke2VudmVsb3BlLmNoYW5uZWx9LiR7ZW52ZWxvcGUubWV0aG9kfSAoc2VxICR7ZW52ZWxvcGUuc2VxfSk6ICR7ZGVzY3JpYmVUaHJvd24oZXJyb3IpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kIG9uZSBsaXN0ZW5lciBmYWlsdXJlIHRvIGV2ZXJ5IHNjb3BlIG9ic2VydmVyIGFzIGFuIGBvbkVycm9yYCDigJQgc2VlIHtAbGluayByb3V0ZUxpc3RlbmVyRXJyb3J9LiAqL1xuICBwcml2YXRlIGRlbGl2ZXJMaXN0ZW5lckVycm9yKGVycm9yOiB1bmtub3duLCBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JFdmVudCA9IHJlY29yZGVyRmFpbHVyZUV2ZW50KFxuICAgICAge1xuICAgICAgICBzdGFnZU5hbWU6ICcnLFxuICAgICAgICBzdGFnZUlkOiBzdGFnZUlkT2YoZW52ZWxvcGUucnVudGltZVN0YWdlSWQpLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogZW52ZWxvcGUucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IGVudmVsb3BlLnJ1bklkLFxuICAgICAgfSxcbiAgICAgIGVycm9yLFxuICAgICAgZW52ZWxvcGUubWV0aG9kLFxuICAgICk7XG4gICAgZm9yIChjb25zdCBbLCB7IHJlY29yZGVyLCBjaGFubmVscyB9XSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgIC8vIElubGluZS10aWVyIHBhcml0eSAocmV2aWV3IENSSVRJQ0FMLTEpOiB0aGUgc3ludGhlc2l6ZWQgZXZlbnQgaXNcbiAgICAgIC8vIHNjb3BlLXR5cGVkLCBzbyBpdCByZWFjaGVzIE9OTFkgcmVjb3JkZXJzIHJlZ2lzdGVyZWQgb24gdGhlIHNjb3BlXG4gICAgICAvLyBsaXN0cyDigJQgYSBmbG93LW9ubHkgcmVjb3JkZXIgbmV2ZXIgcmVjZWl2ZXMgc2NvcGUtY2hhbm5lbCBlcnJvcnNcbiAgICAgIC8vIGlubGluZSBhbmQgbXVzdCBub3QgaGVyZSBlaXRoZXIuXG4gICAgICBpZiAoIWNoYW5uZWxzLmhhcygnc2NvcGUnKSkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBpbnZva2VSZWNvcmRlckhvb2socmVjb3JkZXIsICdvbkVycm9yJywgZXJyb3JFdmVudCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU3dhbGxvdyDigJQgc2FtZSBydWxlIGFzIERlZmVycmVkRGlzcGF0Y2hlci5zYWZlT25FcnJvci5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogRGlzcGF0Y2hlci1sZXZlbCBvcHRpb25zIGFyZSBmaXJzdC1hdHRhY2gtd2luczsgZGlmZmVyaW5nIGxhdGVyIHZhbHVlcyBkZXYtd2Fybi4gKi9cbiAgcHJpdmF0ZSB3YXJuT25Db25maWdDb25mbGljdChyZWNvcmRlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybjtcbiAgICBjb25zdCBjb25mbGljdHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmVxdWVzdGVkOiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZyA9IHtcbiAgICAgIGNhcHR1cmU6IG9wdGlvbnMuY2FwdHVyZSxcbiAgICAgIG1heFF1ZXVlOiBvcHRpb25zLm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnMub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0aW9ucy5zYW1wbGVFdmVyeSxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdGlvbnMuZmx1c2hCdWRnZXRNcyxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlcXVlc3RlZCkgYXMgQXJyYXk8a2V5b2YgQXBwbGllZERpc3BhdGNoZXJDb25maWc+KSB7XG4gICAgICBpZiAocmVxdWVzdGVkW2tleV0gIT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0ZWRba2V5XSAhPT0gdGhpcy5hcHBsaWVkQ29uZmlnW2tleV0pIHtcbiAgICAgICAgY29uZmxpY3RzLnB1c2goU3RyaW5nKGtleSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmxpY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGV2V2FybkRlZHVwZWQoXG4gICAgICAgIGBbZm9vdHByaW50anNdIGF0dGFjaCAnJHtyZWNvcmRlcklkfSc6IHRoZSBleGVjdXRvcidzIGRlZmVycmVkLW9ic2VydmVyIHF1ZXVlIHdhcyBhbHJlYWR5IGAgK1xuICAgICAgICAgIGBjb25maWd1cmVkIGJ5IHRoZSBmaXJzdCBkZWZlcnJlZCBhdHRhY2gg4oCUIGlnbm9yaW5nIGRpZmZlcmluZyBvcHRpb24ocyk6ICR7Y29uZmxpY3RzLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgICAnT25lIGV4ZWN1dG9yIGhhcyBPTkUgbWVyZ2VkIHF1ZXVlOyBjb25maWd1cmUgaXQgb24gdGhlIGZpcnN0IGRlZmVycmVkIGF0dGFjaC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogYGlzRGV2TW9kZSgpYC1nYXRlZCwgZGVkdXBsaWNhdGVkIHdhcm5lciDigJQgdGhlIGJvdW5kIHdhcm4gc2VhbS4gKi9cbiAgcHJpdmF0ZSBkZXZXYXJuRGVkdXBlZChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpKSByZXR1cm47XG4gICAgaWYgKHRoaXMud2FybmVkTWVzc2FnZXMuaGFzKG1lc3NhZ2UpKSByZXR1cm47XG4gICAgdGhpcy53YXJuZWRNZXNzYWdlcy5hZGQobWVzc2FnZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gIH1cbn1cbiJdfQ==
|
|
367
|
+
/**
|
|
368
|
+
* The run's correlation the failed event carried, as captured — a scope or emit event's own `correlation`, a flow
|
|
369
|
+
* event's on its `traversalContext` — spread into the synthesized `onError` (10.1). Empty when it carried none.
|
|
370
|
+
*/
|
|
371
|
+
function correlationOf(payload) {
|
|
372
|
+
if (payload === null || typeof payload !== 'object')
|
|
373
|
+
return {};
|
|
374
|
+
const event = payload;
|
|
375
|
+
const correlation = event.correlation ?? event.traversalContext?.correlation;
|
|
376
|
+
return correlation !== null && typeof correlation === 'object' ? { correlation: correlation } : {};
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHOzs7QUFFSCx5Q0FBc0M7QUFHdEMsNERBQThEO0FBQzlELDhDQUEwQztBQUUxQyx5REFRb0M7QUFDcEMsbURBQXFGO0FBNkRyRix5RkFBeUY7QUFDNUUsUUFBQSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUNqRCxRQUFBLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELDZFQUE2RTtBQUM3RSxNQUFNLG1CQUFtQixHQUE4QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWlCL0QsTUFBYSxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxrRUFBa0U7WUFDbEUscUVBQXFFO1lBQ3JFLGdFQUFnRTtZQUNoRSxzRUFBc0U7WUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTztZQUNwQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7WUFDM0IsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1lBQzNCLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVztZQUNqQyxhQUFhLEVBQUUsT0FB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RSxPQUFPO1FBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQTNVRCxvREEyVUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGFBQWEsQ0FBQyxPQUFnQjtJQUNyQyxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9ELE1BQU0sS0FBSyxHQUFHLE9BQWtGLENBQUM7SUFDakcsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO0lBQzdFLE9BQU8sV0FBVyxLQUFLLElBQUksSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJ1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyDigJQgUkZDLTAwMSBCbG9ja3MgNuKAkzk6IHRoZSBlbmdpbmUgd2lyaW5nIG9mXG4gKiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgcGlwZWxpbmUuXG4gKlxuICogUGF0dGVybjogIFRoaW4gYWRhcHRlciBiZXR3ZWVuIHRoZSBleGVjdXRvcidzIHRocmVlIG9ic2VydmVyIGNoYW5uZWxzIGFuZFxuICogICAgICAgICAgIHRoZSBQVVJFIGBvYnNlcnZlci1xdWV1ZWAgbW9kdWxlLiBUaGUgcHVyZSBtb2R1bGUgc3RheXNcbiAqICAgICAgICAgICBlbmdpbmUtZnJlZSAoaXQgaW1wb3J0cyBub3RoaW5nIGZyb20gdGhlIGVuZ2luZSDigJQgdGhlIGVuZ2luZVxuICogICAgICAgICAgIGltcG9ydHMgSVQpOyB0aGlzIHRpZXIgb3ducyBldmVyeSBlbmdpbmUtZmxhdm9yZWQgY29uY2VybjpcbiAqICAgICAgICAgICAgIC0gdGhlIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCBgQ2FwdHVyZUhvb2tzLndhcm5gXG4gKiAgICAgICAgICAgICAgIGJpbmRpbmcgKHRoZSBkZXYtd2FybiBzZWFtLCBSRkMtMDAxIMKnXCJSZXNvbHV0aW9uXCIpO1xuICogICAgICAgICAgICAgLSByb3V0aW5nIGBEZWZlcnJlZERpc3BhdGNoZXIub25FcnJvcmAgaW50byB0aGUgZXhpc3RpbmdcbiAqICAgICAgICAgICAgICAgcmVjb3JkZXIgZXJyb3IgY2hhbm5lbCAoYG9uRXJyb3JgIG9uIHNpYmxpbmcgb2JzZXJ2ZXJzKTtcbiAqICAgICAgICAgICAgIC0gdGhlIGNhcHR1cmUgVEFQUyDigJQgc3ludGhldGljIHJlY29yZGVycyBwbGFjZWQgb24gdGhlXG4gKiAgICAgICAgICAgICAgIGV4aXN0aW5nIGlubGluZSBkaXNwYXRjaCBsaXN0cyBzbyB0aGUgdGhyZWUgZGlzcGF0Y2ggc2l0ZXNcbiAqICAgICAgICAgICAgICAgKGBTY29wZUZhY2FkZS5faW52b2tlSG9va2AsIGBTY29wZUZhY2FkZS5lbWl0RXZlbnRgLFxuICogICAgICAgICAgICAgICBgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmApIG5lZWQgTk8gcGVyLXNpdGUgdGllciBsb2dpYzogYVxuICogICAgICAgICAgICAgICB0YXAncyBob29rIGJvZHkgSVMgYGRpc3BhdGNoZXIuY2FwdHVyZSguLi4pYCwgYW5kIGJlY2F1c2VcbiAqICAgICAgICAgICAgICAgdGhlIHRhcCBzaXRzIGluIHRoZSBzYW1lIGxvb3AgYXMgaW5saW5lIHJlY29yZGVycyBpdCBzZWVzXG4gKiAgICAgICAgICAgICAgIGV4YWN0bHkgdGhlIHBvc3QtcmVkYWN0aW9uIGV2ZW50IG9iamVjdCBpbmxpbmUgb2JzZXJ2ZXJzXG4gKiAgICAgICAgICAgICAgIHNlZSDigJQgY2FwdHVyZSBjYW4gbmV2ZXIgb2JzZXJ2ZSBhIHByZS1yZWRhY3Rpb24gdmFsdWU7XG4gKiAgICAgICAgICAgICAtIHRoZSB0ZXJtaW5hbCBmbHVzaCAoQmxvY2sgOCkgd2l0aCBob25lc3Qgc3RyYW5kaW5nXG4gKiAgICAgICAgICAgICAgIGFjY291bnRpbmcsIGFuZCB0aGUgQmxvY2sgOSBzdGF0cyBzdXJmYWNlLlxuICpcbiAqIFJvbGU6ICAgICBPbmUgaW5zdGFuY2UgcGVyIGBGbG93Q2hhcnRFeGVjdXRvcmAsIGNyZWF0ZWQgTEFaSUxZIG9uIHRoZVxuICogICAgICAgICAgIGZpcnN0IGBkZWxpdmVyeTogJ2RlZmVycmVkJ2AgYXR0YWNoICh6ZXJvIGFsbG9jYXRpb24gd2hlbiBub2JvZHlcbiAqICAgICAgICAgICBvcHRzIGluIOKAlCBtaXJyb3JzIHRoZSBlbWl0IGZhc3QtcGF0aCBwcmVjZWRlbnQpLiBIb2xkcyB0aGUgT05FXG4gKiAgICAgICAgICAgYERlZmVycmVkRGlzcGF0Y2hlcmAgKG9uZSBtZXJnZWQgcXVldWUsIHRvdGFsIG9yZGVyIGFjcm9zc1xuICogICAgICAgICAgIGNoYW5uZWxzKSBwbHVzIHRoZSByZWdpc3RyeSBvZiBkZWZlcnJlZCByZWNvcmRlcnMuXG4gKlxuICogRGVsaXZlcnk6IGEgZGVmZXJyZWQgcmVjb3JkZXIncyBob29rcyBhcmUgaW52b2tlZCB0aHJvdWdoIHRoZSBTQU1FXG4gKiBgaW52b2tlUmVjb3JkZXJIb29rYCBoZWxwZXIgdGhlIGlubGluZSB0aWVyIHVzZXMgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlFxuICogb25lIGJlYXQgYmVoaW5kLCB3aXRoIGBlbnZlbG9wZS5wYXlsb2FkYCBtYXRlcmlhbGl6ZWQgcGVyIHRoZSBjYXB0dXJlXG4gKiBwb2xpY3kgKGAnY2xvbmUnYCBkZWZhdWx0IGF0IHRoaXMgYXR0YWNoIHRpZXIg4oCUIGZ1bGwgc3RydWN0dXJhbCBjb3B5LFxuICogZXZlbnQtc2hhcGUgY29tcGF0aWJsZSB3aXRoIGlubGluZTsgZXhwbGljaXQgYCdzdW1tYXJ5J2Ag4oCUIGJvdW5kZWQsXG4gKiByZWZlcmVuY2UtZnJlZTsgYCdyZWYnYCDigJQgdGhlIGxpdmUgZXZlbnQgb2JqZWN0LCBkZXYtd2FybmVkKS4gVGhlIHN0YW5kYWxvbmVcbiAqIHF1ZXVlIHJldGFpbnMgaXRzIGAnc3VtbWFyeSdgIGRlZmF1bHQgKGBvYnNlcnZlci1xdWV1ZS9tZXJnZWRRdWV1ZS50cyDCtyBNZXJnZWRRdWV1ZWApLlxuICpcbiAqIENoYW5uZWwgZmlsdGVyOiBhIHJlZ2lzdHJhdGlvbiByZW1lbWJlcnMgd2hpY2ggY2hhbm5lbHMgd291bGQgaGF2ZVxuICogcmVhY2hlZCB0aGUgcmVjb3JkZXIgaW5saW5lIChzY29wZS1saXN0IHJlY29yZGVycyBzZWUgYHNjb3BlYCArIGBlbWl0YFxuICogZW52ZWxvcGVzOyBmbG93LWxpc3QgcmVjb3JkZXJzIHNlZSBgZmxvd2AgZW52ZWxvcGVzKSBhbmQgc2tpcHMgdGhlIHJlc3Qg4oCUXG4gKiBzYW1lIHJlYWNoIGFzIHRoZSBpbmxpbmUgdGllciwgb25lIGJlYXQgYmVoaW5kLlxuICovXG5cbmltcG9ydCB7IHN0YWdlSWRPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgUnVuQ29ycmVsYXRpb24gfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4uL2NhcHR1cmUvaW52b2tlSG9vay5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhcHR1cmVDaGFubmVsLFxuICB0eXBlIENhcHR1cmVFbnZlbG9wZSxcbiAgdHlwZSBDYXB0dXJlUG9saWN5LFxuICB0eXBlIERpc3BhdGNoZXJTdGF0cyxcbiAgdHlwZSBEcmFpblJlc3VsdCxcbiAgdHlwZSBPdmVyZmxvd1BvbGljeSxcbiAgRGVmZXJyZWREaXNwYXRjaGVyLFxufSBmcm9tICcuLi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZXNjcmliZVRocm93biwgaG9va3NPbiwgcmVjb3JkZXJGYWlsdXJlRXZlbnQgfSBmcm9tICcuLi9yZWNvcmRlci9ob29rcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8qKiBEZWxpdmVyeSB0aWVyIGZvciBhbiBhdHRhY2hlZCBvYnNlcnZlciAoUkZDLTAwMSkuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRlbGl2ZXJ5ID0gJ2lubGluZScgfCAnZGVmZXJyZWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgYmFnIGFjY2VwdGVkIGJ5IGV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwuXG4gKlxuICogYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBvcHRzIHRoZSByZWNvcmRlciBpbnRvIHRoZSBib3VuZGVkIGNhcHR1cmUgcXVldWVcbiAqIChcIm9uZSBiZWF0IGJlaGluZFwiKTsgYWJzZW50IC8gYCdpbmxpbmUnYCBrZWVwcyB0aGUgaGlzdG9yaWNhbCBzeW5jaHJvbm91c1xuICogY2FsbCDigJQgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZS1SRkMgcGF0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBjb25maWd1cmUgdGhlIGV4ZWN1dG9yJ3MgT05FIHNoYXJlZCBkaXNwYXRjaGVyIGFuZFxuICogYXJlIGFwcGxpZWQgd2hlbiB0aGUgRklSU1QgZGVmZXJyZWQgYXR0YWNoIGNyZWF0ZXMgaXQ7IGxhdGVyIGF0dGFjaGVzXG4gKiBwYXNzaW5nIGRpZmZlcmVudCB2YWx1ZXMgZ2V0IGEgZGV2LW1vZGUgd2FybmluZyBhbmQga2VlcCB0aGUgb3JpZ2luYWxcbiAqIGNvbmZpZ3VyYXRpb24gKG9uZSBxdWV1ZSBwZXIgZXhlY3V0b3Ig4oCUIHBlci1yZWNvcmRlciBxdWV1ZXMgd291bGQgYnJlYWtcbiAqIHRoZSB0b3RhbCBjcm9zcy1jaGFubmVsIG9yZGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hSZWNvcmRlck9wdGlvbnMge1xuICAvKiogYCdkZWZlcnJlZCdgID0gY2FwdHVyZSDihpIgcXVldWUg4oaSIG5leHQtY2hlY2twb2ludCBkZWxpdmVyeS4gRGVmYXVsdCBgJ2lubGluZSdgLiAqL1xuICByZWFkb25seSBkZWxpdmVyeT86IE9ic2VydmVyRGVsaXZlcnk7XG4gIC8qKlxuICAgKiBQYXlsb2FkIG1hdGVyaWFsaXphdGlvbiBhdCBjYXB0dXJlIHRpbWUuIERlZmF1bHQgYCdjbG9uZSdgIOKAlCB5b3VyXG4gICAqIHJlY29yZGVyJ3MgaG9va3MgcmVjZWl2ZSB0aGUgU0FNRSBldmVudCBzaGFwZSBhcyBpbmxpbmUgZGVsaXZlcnlcbiAgICogKGBzdHJ1Y3R1cmVkQ2xvbmVgZDsgYGUua2V5YC9gZS52YWx1ZWAvYGUucnVudGltZVN0YWdlSWRgIGFsbCB3b3JrXG4gICAqIHVuY2hhbmdlZCksIHNvIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIGlzIGEgZHJvcC1pbiBwb3J0LlxuICAgKiBgJ3N1bW1hcnknYCDigJQgYSBib3VuZGVkIHR5cGUvc2l6ZS9wcmV2aWV3IGRpZ2VzdCAoYFBheWxvYWRTdW1tYXJ5YClcbiAgICogaW5zdGVhZCBvZiB0aGUgZXZlbnQgc2hhcGU6IGNoZWFwZXIgY2FwdHVyZSBmb3IgdGVsZW1ldHJ5LW9ubHlcbiAgICogY29uc3VtZXJzIHRoYXQgZG9uJ3QgcmVhZCBkb21haW4gZmllbGRzLiBgJ3JlZidgIOKAlCBwYXNzLXRocm91Z2ggYnlcbiAgICogcmVmZXJlbmNlOyB0aGUgY2FsbGVyIGFzc2VydHMgaW1tdXRhYmlsaXR5IChkZXYtbW9kZSB3YXJucykuXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZVBvbGljeTtcbiAgLyoqIFF1ZXVlIGJvdW5kIOKAlCBkZWZhdWx0IDEwIDAwMC4gKi9cbiAgcmVhZG9ubHkgbWF4UXVldWU/OiBudW1iZXI7XG4gIC8qKiBPdmVyZmxvdyBwb2xpY3kgYXQgYG1heFF1ZXVlYCDigJQgZGVmYXVsdCBgJ2Ryb3Atb2xkZXN0J2AuICovXG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIC8qKiBgJ3NhbXBsZSdgIG92ZXJmbG93IG9ubHkg4oCUIGFkbWl0IDEgaW4gdGhpcyBtYW55IHNhdHVyYXRlZCBhcnJpdmFscy4gKi9cbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIC8qKiBQZXItY2hlY2twb2ludCBmbHVzaCBidWRnZXQsIG1zIChBMSkg4oCUIGRlZmF1bHQgMjsgYEluZmluaXR5YCA9IGZ1bGwgZHJhaW4uICovXG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEJsb2NrIDkgb2JzZXJ2YWJpbGl0eSBzdXJmYWNlIOKAlCBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2AuIFRoZSBBNFxuICogZGlzcGF0Y2hlciBzdGF0cyBwbHVzIHRoZSB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQgZnJvbSBCbG9jayA4LlxuICogUHJlc2VudCBvbiBgUnVudGltZVNuYXBzaG90YCBvbmx5IHdoZW4gYSBkZWZlcnJlZCBvYnNlcnZlciB3YXMgYXR0YWNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2ZXJTdGF0cyBleHRlbmRzIERpc3BhdGNoZXJTdGF0cyB7XG4gIC8qKlxuICAgKiBFbnZlbG9wZXMgc3RpbGwgcXVldWVkIHdoZW4gYSB0ZXJtaW5hbCBmbHVzaCBoaXQgaXRzIHJ1bmF3YXktY2FzY2FkZVxuICAgKiByb3VuZCBjYXAgKEJsb2NrIDgpLiBgMGAgaW4gYW55IHNhbmUgcnVuIOKAlCBhIG5vbi16ZXJvIHZhbHVlIG1lYW5zIGFcbiAgICogbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIHdvcmsgYXQgZW5kLW9mLXJ1biBhbmQgZGVsaXZlcnkgd2FzIGN1dCBvZmZcbiAgICogKGFsc28gZGV2LXdhcm5lZCBhdCB0aGUgbW9tZW50IGl0IGhhcHBlbmVkKS4gTmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGVybWluYWxTdHJhbmRlZDogbnVtYmVyO1xufVxuXG4vKiogUmVzdWx0IHNoYXBlIG9mIGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCDigJQgc2VlIGBEcmFpblJlc3VsdGAuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRyYWluUmVzdWx0ID0gRHJhaW5SZXN1bHQ7XG5cbi8qKiBXZWxsLWtub3duIGlkcyBvZiB0aGUgc3ludGhldGljIGNhcHR1cmUgdGFwcyAoaW50ZXJuYWwsIGRvY3VtZW50ZWQgZm9yIGRlYnVnZ2luZykuICovXG5leHBvcnQgY29uc3QgREVGRVJSRURfU0NPUEVfVEFQX0lEID0gJ19fZGVmZXJyZWQtc2NvcGUtdGFwX18nO1xuZXhwb3J0IGNvbnN0IERFRkVSUkVEX0ZMT1dfVEFQX0lEID0gJ19fZGVmZXJyZWQtZmxvdy10YXBfXyc7XG5cbi8qKiBDaGFubmVsIHJlYWNoIG9mIHRoZSBzY29wZS1yZWNvcmRlciBsaXN0IChzY29wZSBldmVudHMgKyBlbWl0IGV2ZW50cykuICovXG5jb25zdCBTQ09QRV9MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydzY29wZScsICdlbWl0J107XG4vKiogQ2hhbm5lbCByZWFjaCBvZiB0aGUgZmxvdy1yZWNvcmRlciBsaXN0LiAqL1xuY29uc3QgRkxPV19MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydmbG93J107XG5cbi8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgc25hcHNob3QsIGtlcHQgZm9yIGNvbmZsaWN0IGRldGVjdGlvbi4gKi9cbmludGVyZmFjZSBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZyB7XG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlUG9saWN5O1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBEZWZlcnJlZFJlZ2lzdHJhdGlvbiB7XG4gIHJlYWRvbmx5IHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyO1xuICAvKiogV2hpY2ggZW52ZWxvcGUgY2hhbm5lbHMgcmVhY2ggdGhpcyByZWNvcmRlciAoaW5saW5lLXRpZXIgcGFyaXR5KS4gKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHM6IFNldDxDYXB0dXJlQ2hhbm5lbD47XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZE9ic2VydmVyVGllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGF0Y2hlcjogRGVmZXJyZWREaXNwYXRjaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGVmZXJyZWRSZWdpc3RyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGllZENvbmZpZzogQXBwbGllZERpc3BhdGNoZXJDb25maWc7XG4gIC8qKiBEZWR1cCBtZW1vcnkgZm9yIHRoZSBkZXYtd2FybiBzZWFtIChvbmUgd2FybmluZyBwZXIgdW5pcXVlIG1lc3NhZ2UpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHdhcm5lZE1lc3NhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgdGVybWluYWxTdHJhbmRlZCA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucykge1xuICAgIHRoaXMuYXBwbGllZENvbmZpZyA9IHtcbiAgICAgIC8vIEF0dGFjaC1zdXJmYWNlIGRlZmF1bHQgaXMgJ2Nsb25lJyAocmV2aWV3IENSSVRJQ0FMLTIpOiBhIHJlY29yZGVyXG4gICAgICAvLyBwb3J0ZWQgd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBrZWVwcyByZWNlaXZpbmcgdGhlIFNBTUVcbiAgICAgIC8vIGV2ZW50IHNoYXBlIGFzIGlubGluZSAoZS5rZXkvZS52YWx1ZS9lLnJ1bnRpbWVTdGFnZUlkIGFsbCBpbnRhY3QpLlxuICAgICAgLy8gVGhlIG1vZHVsZS1pbnRlcm5hbCBlbnZlbG9wZSBkZWZhdWx0IHN0YXlzICdzdW1tYXJ5JyBmb3IgcmF3LVxuICAgICAgLy8gZW52ZWxvcGUgY29uc3VtZXJzOyAnc3VtbWFyeScgaGVyZSBpcyBhbiBleHBsaWNpdCB0ZWxlbWV0cnkgY2hvaWNlLlxuICAgICAgY2FwdHVyZTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICB9O1xuICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBEZWZlcnJlZERpc3BhdGNoZXIoe1xuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgY2FwdHVyZVBvbGljeTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICAgIC8vIFRoZSBkZXYtd2FybiBzZWFtIChSRkMtMDAxIMKnXCJSZXNvbHV0aW9uOiB0aGUgZGV2LXdhcm4gc2VhbVwiKTogdGhlXG4gICAgICAvLyBwdXJlIG1vZHVsZSBpbnZva2VzIGB3YXJuYCBvbiBldmVyeSAncmVmJyBjYXB0dXJlIGFuZCBldmVyeSAnY2xvbmUnXG4gICAgICAvLyBkZWdyYWRhdGlvbjsgdGhlIHRpZXIgYmluZHMgaXQgdG8gdGhlIGNlbnRyYWwgaXNEZXZNb2RlKCkgZmxhZyBhbmRcbiAgICAgIC8vIGRlZHVwZXMgYnkgbWVzc2FnZSBzbyBhIGhvdCBsb29wIGNhbm5vdCBzcGFtIHRoZSBjb25zb2xlLlxuICAgICAgaG9va3M6IHsgd2FybjogKG1lc3NhZ2UpID0+IHRoaXMuZGV2V2FybkRlZHVwZWQobWVzc2FnZSkgfSxcbiAgICAgIC8vIExpc3RlbmVyIGZhaWx1cmVzIChzeW5jIHRocm93cyBBTkQgYXN5bmMgcmVqZWN0aW9ucykgcm91dGUgaW50byB0aGVcbiAgICAgIC8vIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yIGNoYW5uZWwg4oCUIHNlZSByb3V0ZUxpc3RlbmVyRXJyb3IuXG4gICAgICBvbkVycm9yOiAoZXJyb3IsIGN0eCkgPT4gdGhpcy5yb3V0ZUxpc3RlbmVyRXJyb3IoZXJyb3IsIGN0eC5saXN0ZW5lcklkLCBjdHguZW52ZWxvcGUsIGN0eC5waGFzZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVnaXN0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcmVjb3JkZXIgZm9yIGRlZmVycmVkIGRlbGl2ZXJ5IG9uIHRoZSBzY29wZS1saXN0IGNoYW5uZWxzXG4gICAqIChgc2NvcGVgICsgYGVtaXRgKSBhbmQvb3IgdGhlIGZsb3cgY2hhbm5lbC4gSWRlbXBvdGVudCBieSBpZCDigJQgc2FtZSBpZFxuICAgKiByZXBsYWNlcyB0aGUgcmVjb3JkZXIgb2JqZWN0OyBjaGFubmVsIGxpc3RzIE1FUkdFIGFjcm9zcyBjYWxscyAoc2FtZSBhc1xuICAgKiB0aGUgaW5saW5lIHRpZXIsIHdoZXJlIGBhdHRhY2hTY29wZVJlY29yZGVyKHgpYCArIGBhdHRhY2hGbG93UmVjb3JkZXIoeClgXG4gICAqIGxhbmRzIGB4YCBvbiBib3RoIGxpc3RzKS4gTGF0ZXIgYXR0YWNoZXMgcGFzc2luZyBkaXNwYXRjaGVyLWxldmVsXG4gICAqIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgZmlyc3QgYXR0YWNoJ3MgY29uZmlndXJhdGlvbiBrZWVwIHRoZVxuICAgKiBvcmlnaW5hbCBjb25maWcgYW5kIGRldi13YXJuLlxuICAgKi9cbiAgcmVnaXN0ZXIoXG4gICAgcmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIsXG4gICAgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9LFxuICAgIG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIHRoaXMud2Fybk9uQ29uZmlnQ29uZmxpY3QocmVjb3JkZXIuaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChyZWNvcmRlci5pZCk/LmNoYW5uZWxzID8/IG5ldyBTZXQ8Q2FwdHVyZUNoYW5uZWw+KCk7XG4gICAgaWYgKGxpc3RzLnNjb3BlKSBmb3IgKGNvbnN0IGMgb2YgU0NPUEVfTElTVF9DSEFOTkVMUykgY2hhbm5lbHMuYWRkKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSBjaGFubmVscy5hZGQoYyk7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25zLnNldChyZWNvcmRlci5pZCwgeyByZWNvcmRlciwgY2hhbm5lbHMgfSk7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmFkZExpc3RlbmVyKHJlY29yZGVyLmlkLCAoZW52ZWxvcGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQocmVjb3JkZXIuaWQpO1xuICAgICAgaWYgKCFyZWdpc3RyYXRpb24gfHwgIXJlZ2lzdHJhdGlvbi5jaGFubmVscy5oYXMoZW52ZWxvcGUuY2hhbm5lbCkpIHJldHVybjtcbiAgICAgIC8vIFNBTUUgaW52b2tlIGhlbHBlciBhcyB0aGUgaW5saW5lIHRpZXIgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlCBhXG4gICAgICAvLyByZXR1cm5lZCBQcm9taXNlIGxhbmRzIGluIHRoZSBkaXNwYXRjaGVyJ3MgaW5mbGlnaHQgc2V0LlxuICAgICAgcmV0dXJuIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgZW52ZWxvcGUubWV0aG9kLCBlbnZlbG9wZS5wYXlsb2FkKSBhcyB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNoYW5uZWwgbGlzdHMgZnJvbSBhIHJlZ2lzdHJhdGlvbiAobWlycm9ycyB0aGUgaW5saW5lXG4gICAqIHRpZXIsIHdoZXJlIGBkZXRhY2hTY29wZVJlY29yZGVyYCAvIGBkZXRhY2hGbG93UmVjb3JkZXJgIGVhY2ggY2xlYXIgb25lXG4gICAqIGxpc3QpLiBXaGVuIG5vIGNoYW5uZWxzIHJlbWFpbiwgdGhlIGxpc3RlbmVyIGlzIGZ1bGx5IHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVGcm9tTGlzdHMoaWQ6IHN0cmluZywgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChpZCk7XG4gICAgaWYgKCFyZWdpc3RyYXRpb24pIHJldHVybjtcbiAgICBpZiAobGlzdHMuc2NvcGUpIGZvciAoY29uc3QgYyBvZiBTQ09QRV9MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChyZWdpc3RyYXRpb24uY2hhbm5lbHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLmRlbGV0ZShpZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlTGlzdGVuZXIoaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gYGlkYCBpcyByZWdpc3RlcmVkIGZvciBkZWZlcnJlZCBkZWxpdmVyeSAoYW55IGNoYW5uZWwpLiAqL1xuICBoYXMoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuaGFzKGlkKTtcbiAgfVxuXG4gIC8qKiBEZWZlcnJlZCByZWNvcmRlcnMgd2hvc2UgcmVhY2ggaW5jbHVkZXMgdGhlIHNjb3BlIGxpc3QgKHNjb3BlK2VtaXQpLiAqL1xuICBzY29wZUxpc3RSZWNvcmRlcnMoKTogU2NvcGVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5ieUNoYW5uZWwoJ3Njb3BlJykgYXMgU2NvcGVSZWNvcmRlcltdO1xuICB9XG5cbiAgLyoqIERlZmVycmVkIHJlY29yZGVycyB3aG9zZSByZWFjaCBpbmNsdWRlcyB0aGUgZmxvdyBjaGFubmVsLiAqL1xuICBmbG93TGlzdFJlY29yZGVycygpOiBGbG93UmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnlDaGFubmVsKCdmbG93JykgYXMgRmxvd1JlY29yZGVyW107XG4gIH1cblxuICAvKiogUmVzZXQgZGVmZXJyZWQgcmVjb3JkZXJzIGJlZm9yZSBhIGZyZXNoIHJ1biAoc2FtZSBjb250cmFjdCBhcyBpbmxpbmUpLiAqL1xuICBjbGVhclJlY29yZGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIgfSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIChyZWNvcmRlciBhcyB7IGNsZWFyPzogKCkgPT4gdm9pZCB9KS5jbGVhcj8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIENhcHR1cmUgdGFwcyAoQmxvY2sgNykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgc2NvcGUtY2hhbm5lbCB0YXAg4oCUIGEgYFNjb3BlUmVjb3JkZXJgIHBsYWNlZCBvbiB0aGVcbiAgICogbm9ybWFsIHNjb3BlLXJlY29yZGVyIGxpc3Qgd2hvc2UgaG9va3MgY2FwdHVyZSBpbnRvIHRoZSBxdWV1ZS4gQnVpbHRcbiAgICogZnJlc2ggcGVyIHRyYXZlcnNlciBzbyBpdCByZWZsZWN0cyB0aGUgY3VycmVudCByZWdpc3RyYXRpb25zLiBPbmx5XG4gICAqIG1ldGhvZHMgc29tZSBkZWZlcnJlZCByZWNvcmRlciBhY3R1YWxseSBpbXBsZW1lbnRzIGFyZSBwcmVzZW50IChub1xuICAgKiB3YXN0ZWQgY2FwdHVyZXMpLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gbm90aGluZyBpcyByZWdpc3RlcmVkIGZvclxuICAgKiB0aGUgc2NvcGUgbGlzdC5cbiAgICpcbiAgICogUmVkYWN0aW9uIG9yZGVyaW5nOiB0aGUgdGFwIGlzIGludm9rZWQgZnJvbSB0aGUgU0FNRSBsb29wcyBhcyBpbmxpbmVcbiAgICogcmVjb3JkZXJzIChgX2ludm9rZUhvb2tgIC8gYGVtaXRFdmVudGApLCB3aGljaCByZWNlaXZlIGV2ZW50cyBBRlRFUiB0aGVcbiAgICogcmVkYWN0aW9uIGRlY2lzaW9uIOKAlCBzbyBhIGNhcHR1cmVkIHBheWxvYWQgY2FuIG5ldmVyIGNvbnRhaW4gYVxuICAgKiBwcmUtcmVkYWN0aW9uIHZhbHVlIHRoZSBpbmxpbmUgdGllciB3b3VsZCBub3QgaGF2ZSBzZWVuLlxuICAgKi9cbiAgYnVpbGRTY29wZVRhcCgpOiBTY29wZVJlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLnNjb3BlTGlzdFJlY29yZGVycygpO1xuICAgIGlmIChyZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBERUZFUlJFRF9TQ09QRV9UQVBfSUQgfTtcbiAgICAvLyBEZXJpdmVkIGZyb20gdGhlIGhvb2sgcmVnaXN0cnk6IGV2ZXJ5IGhvb2sgb2YgdGhlIHNjb3BlIGNoYW5uZWwgYW5kIG9mIHRoZSBlbWl0IGNoYW5uZWxcbiAgICAvLyAod2hpY2ggcmlkZXMgdGhlIHNjb3BlIGxpc3QpIOKAlCBhIGhvb2sgdGhlIHJlZ2lzdHJ5IGdhaW5zIGlzIHRhcHBlZCB3aXRoIG5vIGVkaXQgaGVyZS5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgWydzY29wZScsICdlbWl0J10gYXMgY29uc3QpIHtcbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGhvb2tzT24oY2hhbm5lbCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFueUltcGxlbWVudHMocmVjb3JkZXJzLCBtZXRob2QpKSBjb250aW51ZTtcbiAgICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZVNjb3BlRXZlbnQoY2hhbm5lbCwgbWV0aG9kLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXAgYXMgdW5rbm93biBhcyBTY29wZVJlY29yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgZmxvdy1jaGFubmVsIHRhcCDigJQgYSBgRmxvd1JlY29yZGVyYCBhcHBlbmRlZCB0byB0aGVcbiAgICogZmxvdy1yZWNvcmRlcnMgbGlzdCBoYW5kZWQgdG8gdGhlIHRyYXZlcnNlci4gU2FtZSBjb250cmFjdCBhc1xuICAgKiB7QGxpbmsgYnVpbGRTY29wZVRhcH0uXG4gICAqL1xuICBidWlsZEZsb3dUYXAoKTogRmxvd1JlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLmZsb3dMaXN0UmVjb3JkZXJzKCk7XG4gICAgaWYgKHJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IERFRkVSUkVEX0ZMT1dfVEFQX0lEIH07XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgaG9va3NPbignZmxvdycpKSB7XG4gICAgICBpZiAoIXRoaXMuYW55SW1wbGVtZW50cyhyZWNvcmRlcnMsIG1ldGhvZCkpIGNvbnRpbnVlO1xuICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZUZsb3dFdmVudChtZXRob2QsIGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcCBhcyB1bmtub3duIGFzIEZsb3dSZWNvcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3QgY2FwdHVyZSBmb3IgZXhlY3V0b3Itc3ludGhlc2l6ZWQgZXZlbnRzIHRoYXQgYnlwYXNzIHRoZSBkaXNwYXRjaFxuICAgKiBzaXRlcyAoZS5nLiB0aGUgc3ludGhldGljIGBvblJlc3VtZWAgdGhlIGV4ZWN1dG9yIGZpcmVzIG9uIHJlc3VtZSkuXG4gICAqL1xuICBjYXB0dXJlKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ6IHN0cmluZywgcGF5bG9hZDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHsgY2hhbm5lbCwgbWV0aG9kLCBydW50aW1lU3RhZ2VJZCwgcnVuSWQsIHBheWxvYWQgfSk7XG4gIH1cblxuICAvLyDilIDilIAgVGVybWluYWwgZmx1c2ggKyBkcmFpbiAoQmxvY2sgOCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzbHkgZGVsaXZlciBldmVyeXRoaW5nIHN0aWxsIHF1ZXVlZCDigJQgY2FsbGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiBhdCB0aGUgT1VURVJNT1NUIHJ1biBib3VuZGFyeSAocmVzb2x2ZSwgcmVqZWN0LCBwYXVzZSksIEJFRk9SRSBgcnVuKClgXG4gICAqIHJldHVybnMgLyByZXRocm93cyAvIHRoZSBjaGVja3BvaW50IGJlY29tZXMgYXZhaWxhYmxlLiBJbnNwZWN0c1xuICAgKiBgZmx1c2hTeW5jYCdzIGByZW1haW5pbmdgIChyZXZpZXdlciBOMSk6IGBmbHVzaFN5bmNgIGFscmVhZHkgbG9vcHNcbiAgICogc25hcHNob3Qgcm91bmRzIHVwIHRvIGl0cyBydW5hd2F5LWNhc2NhZGUgY2FwLCBzbyBhIG5vbi16ZXJvIHJlbWFpbmRlclxuICAgKiBtZWFucyBhIHBhdGhvbG9naWNhbCBzZWxmLWVucXVldWVpbmcgbGlzdGVuZXIg4oCUIGNvdW50ZWQgaW5cbiAgICogYG9ic2VydmVyU3RhdHMudGVybWluYWxTdHJhbmRlZGAgYW5kIGRldi13YXJuZWQsIG5ldmVyIHNpbGVudC5cbiAgICovXG4gIHRlcm1pbmFsRmx1c2goKTogdm9pZCB7XG4gICAgY29uc3QgeyByZW1haW5pbmcgfSA9IHRoaXMuZGlzcGF0Y2hlci5mbHVzaE5vdygpO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICB0aGlzLnRlcm1pbmFsU3RyYW5kZWQgKz0gcmVtYWluaW5nO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlcnM6IHRlcm1pbmFsIGZsdXNoIGhpdCB0aGUgcnVuYXdheS1jYXNjYWRlIGNhcCB3aXRoICR7cmVtYWluaW5nfSBgICtcbiAgICAgICAgICAgICdldmVudChzKSBzdGlsbCBxdWV1ZWQg4oCUIGEgbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIGR1cmluZyB0aGUgZmx1c2guIFRoZSBzdHJhbmRlZCBjb3VudCBpcyAnICtcbiAgICAgICAgICAgICdzdXJmYWNlZCBvbiBzbmFwc2hvdC5vYnNlcnZlclN0YXRzLnRlcm1pbmFsU3RyYW5kZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGJhY2tsb2csIHRoZW4gc2V0dGxlIGFzeW5jIGxpc3RlbmVyIGNvbnRpbnVhdGlvbnMgdW5kZXIgYVxuICAgKiBkZWFkbGluZSDigJQgdGhlIHNlcnZlcmxlc3MgLyBncmFjZWZ1bC1zaHV0ZG93biBwYXR0ZXJuIChSRkMtMDAxIMKnMTEpLlxuICAgKi9cbiAgZHJhaW4ob3B0cz86IHsgdGltZW91dE1zPzogbnVtYmVyIH0pOiBQcm9taXNlPE9ic2VydmVyRHJhaW5SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaGVyLmRyYWluKG9wdHMpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFN0YXRzIChCbG9jayA5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogVGhlIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYCBwYXlsb2FkIOKAlCBBNCBzdGF0cyArIEJsb2NrIDggc3RyYW5kaW5nLiAqL1xuICBnZXRTdGF0cygpOiBPYnNlcnZlclN0YXRzIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc3BhdGNoZXIuZ2V0U3RhdHMoKSwgdGVybWluYWxTdHJhbmRlZDogdGhpcy50ZXJtaW5hbFN0cmFuZGVkIH07XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYnlDaGFubmVsKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsKTogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4ge1xuICAgIGNvbnN0IG91dDogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIsIGNoYW5uZWxzIH0gb2YgdGhpcy5yZWdpc3RyYXRpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY2hhbm5lbHMuaGFzKGNoYW5uZWwpKSBvdXQucHVzaChyZWNvcmRlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogTm9ybWFsIHByb3BlcnR5IGxvb2t1cCDigJQgaW52b2NhdGlvbiBwYXJpdHkgd2l0aCB0aGUgaW5saW5lIHRpZXIuICovXG4gIHByaXZhdGUgYW55SW1wbGVtZW50cyhyZWNvcmRlcnM6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+LCBtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWNvcmRlcnMuc29tZSgocikgPT4gdHlwZW9mIChyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21ldGhvZF0gPT09ICdmdW5jdGlvbicpO1xuICB9XG5cbiAgLyoqIFNjb3BlL2VtaXQgZXZlbnRzIGNhcnJ5IHRoZWlyIG93biBpZHMgKGBydW50aW1lU3RhZ2VJZGAgKyBgcGlwZWxpbmVJZGApLiAqL1xuICBwcml2YXRlIGNhcHR1cmVTY29wZUV2ZW50KGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXZlbnQgYXMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZzsgcGlwZWxpbmVJZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHtcbiAgICAgIGNoYW5uZWwsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZT8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgICBydW5JZDogZT8ucGlwZWxpbmVJZCA/PyAnJyxcbiAgICAgIHBheWxvYWQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZsb3cgZXZlbnRzIGNhcnJ5IGlkcyBvbiBgdHJhdmVyc2FsQ29udGV4dGAgKGFic2VudCBvbiBhIGZldyBldmVudHMpLiAqL1xuICBwcml2YXRlIGNhcHR1cmVGbG93RXZlbnQobWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gKGV2ZW50IGFzIHsgdHJhdmVyc2FsQ29udGV4dD86IHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH0gfSB8IHVuZGVmaW5lZClcbiAgICAgID8udHJhdmVyc2FsQ29udGV4dDtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7XG4gICAgICBjaGFubmVsOiAnZmxvdycsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogY3R4Py5ydW50aW1lU3RhZ2VJZCA/PyAnJyxcbiAgICAgIHJ1bklkOiBjdHg/LnJ1bklkID8/ICcnLFxuICAgICAgcGF5bG9hZDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgYSBkZWZlcnJlZCBsaXN0ZW5lciBmYWlsdXJlIGludG8gdGhlIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yXG4gICAqIGNoYW5uZWw6IGV2ZXJ5IHJlZ2lzdGVyZWQgc2NvcGUgb2JzZXJ2ZXIg4oCUIHRoZSBmYWlsaW5nIG9uZSBpbmNsdWRlZCwgaW5cbiAgICogcmVnaXN0cmF0aW9uIG9yZGVyIOKAlCByZWNlaXZlcyB0aGUgc2NvcGUtc2hhcGVkIGBvbkVycm9yYCBldmVudCB0aGUgaW5saW5lXG4gICAqIHRpZXIgYnVpbGRzIChgcmVjb3JkZXJGYWlsdXJlRXZlbnRgKSwgYW5kIGEgdGhyb3cgZnJvbSBgb25FcnJvcmAgaXRzZWxmXG4gICAqIGlzIG5vdCByb3V0ZWQgYWdhaW46IHRoZSBjb250cmFjdCB0aGUgaW5saW5lIHRpZXIgaG9ub3JzIHdoZW4gYSByZWNvcmRlclxuICAgKiB0aHJvd3MgbWlkLWRpc3BhdGNoICg5LjM5LjAg4oCUIGJlZm9yZSwgdGhlIGZhaWxpbmcgbGlzdGVuZXIgd2FzIHNraXBwZWQsXG4gICAqIHNvIGEgQ29tcG9zaXRlUmVjb3JkZXIncyBvdGhlciBjaGlsZHJlbiBuZXZlciBoZWFyZCBhIHNpYmxpbmcncyB0aHJvdykuXG4gICAqIFRoZSBlcnJvciBzaW5rIG11c3QgbmV2ZXIgYmVjb21lIGFuIGVycm9yIHNvdXJjZTogc2luayB0aHJvd3MgYXJlXG4gICAqIHN3YWxsb3dlZCAoaXNvbGF0aW9uIGlzIGFic29sdXRlKS5cbiAgICovXG4gIHByaXZhdGUgcm91dGVMaXN0ZW5lckVycm9yKFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIGxpc3RlbmVySWQ6IHN0cmluZyxcbiAgICBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlLFxuICAgIHBoYXNlOiAnc3luYycgfCAnYXN5bmMnLFxuICApOiB2b2lkIHtcbiAgICAvLyBJbmxpbmUgcGFyaXR5ICg5LjM5LjApOiB0aGUgaW5saW5lIHRpZXIgaGFuZHMgYSByZWNvcmRlcidzIHRocm93IHRvIEVWRVJZIHJlY29yZGVyIG9uIHRoZVxuICAgIC8vIHNjb3BlIGxpc3Qg4oCUIHRoZSB0aHJvd2VyIGluY2x1ZGVkLCBzbyBhIENvbXBvc2l0ZVJlY29yZGVyJ3Mgb3RoZXIgY2hpbGRyZW4gaGVhciBpdCDigJQgYW5kXG4gICAgLy8gZHJvcHMgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGYuIFNhbWUgaGVyZSwgd2l0aCB0aGUgc2FtZSBldmVudCAoYHJlY29yZGVyRmFpbHVyZUV2ZW50YCkuXG4gICAgaWYgKGVudmVsb3BlLm1ldGhvZCAhPT0gJ29uRXJyb3InKSB0aGlzLmRlbGl2ZXJMaXN0ZW5lckVycm9yKGVycm9yLCBlbnZlbG9wZSk7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlciAnJHtsaXN0ZW5lcklkfScgZmFpbGVkICgke3BoYXNlfSkgaGFuZGxpbmcgYCArXG4gICAgICAgICAgYCR7ZW52ZWxvcGUuY2hhbm5lbH0uJHtlbnZlbG9wZS5tZXRob2R9IChzZXEgJHtlbnZlbG9wZS5zZXF9KTogJHtkZXNjcmliZVRocm93bihlcnJvcil9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmQgb25lIGxpc3RlbmVyIGZhaWx1cmUgdG8gZXZlcnkgc2NvcGUgb2JzZXJ2ZXIgYXMgYW4gYG9uRXJyb3JgIOKAlCBzZWUge0BsaW5rIHJvdXRlTGlzdGVuZXJFcnJvcn0uICovXG4gIHByaXZhdGUgZGVsaXZlckxpc3RlbmVyRXJyb3IoZXJyb3I6IHVua25vd24sIGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvckV2ZW50ID0gcmVjb3JkZXJGYWlsdXJlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIHN0YWdlTmFtZTogJycsXG4gICAgICAgIHN0YWdlSWQ6IHN0YWdlSWRPZihlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCksXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogZW52ZWxvcGUucnVuSWQsXG4gICAgICAgIC4uLmNvcnJlbGF0aW9uT2YoZW52ZWxvcGUucGF5bG9hZCksXG4gICAgICB9LFxuICAgICAgZXJyb3IsXG4gICAgICBlbnZlbG9wZS5tZXRob2QsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IFssIHsgcmVjb3JkZXIsIGNoYW5uZWxzIH1dIG9mIHRoaXMucmVnaXN0cmF0aW9ucykge1xuICAgICAgLy8gSW5saW5lLXRpZXIgcGFyaXR5IChyZXZpZXcgQ1JJVElDQUwtMSk6IHRoZSBzeW50aGVzaXplZCBldmVudCBpc1xuICAgICAgLy8gc2NvcGUtdHlwZWQsIHNvIGl0IHJlYWNoZXMgT05MWSByZWNvcmRlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgc2NvcGVcbiAgICAgIC8vIGxpc3RzIOKAlCBhIGZsb3ctb25seSByZWNvcmRlciBuZXZlciByZWNlaXZlcyBzY29wZS1jaGFubmVsIGVycm9yc1xuICAgICAgLy8gaW5saW5lIGFuZCBtdXN0IG5vdCBoZXJlIGVpdGhlci5cbiAgICAgIGlmICghY2hhbm5lbHMuaGFzKCdzY29wZScpKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgJ29uRXJyb3InLCBlcnJvckV2ZW50KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTd2FsbG93IOKAlCBzYW1lIHJ1bGUgYXMgRGVmZXJyZWREaXNwYXRjaGVyLnNhZmVPbkVycm9yLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgYXJlIGZpcnN0LWF0dGFjaC13aW5zOyBkaWZmZXJpbmcgbGF0ZXIgdmFsdWVzIGRldi13YXJuLiAqL1xuICBwcml2YXRlIHdhcm5PbkNvbmZpZ0NvbmZsaWN0KHJlY29yZGVySWQ6IHN0cmluZywgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZsaWN0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0ZWQ6IEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnID0ge1xuICAgICAgY2FwdHVyZTogb3B0aW9ucy5jYXB0dXJlLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnMubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zLnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucy5mbHVzaEJ1ZGdldE1zLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWVzdGVkKSBhcyBBcnJheTxrZXlvZiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZz4pIHtcbiAgICAgIGlmIChyZXF1ZXN0ZWRba2V5XSAhPT0gdW5kZWZpbmVkICYmIHJlcXVlc3RlZFtrZXldICE9PSB0aGlzLmFwcGxpZWRDb25maWdba2V5XSkge1xuICAgICAgICBjb25mbGljdHMucHVzaChTdHJpbmcoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25mbGljdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kZXZXYXJuRGVkdXBlZChcbiAgICAgICAgYFtmb290cHJpbnRqc10gYXR0YWNoICcke3JlY29yZGVySWR9JzogdGhlIGV4ZWN1dG9yJ3MgZGVmZXJyZWQtb2JzZXJ2ZXIgcXVldWUgd2FzIGFscmVhZHkgYCArXG4gICAgICAgICAgYGNvbmZpZ3VyZWQgYnkgdGhlIGZpcnN0IGRlZmVycmVkIGF0dGFjaCDigJQgaWdub3JpbmcgZGlmZmVyaW5nIG9wdGlvbihzKTogJHtjb25mbGljdHMuam9pbignLCAnKX0uIGAgK1xuICAgICAgICAgICdPbmUgZXhlY3V0b3IgaGFzIE9ORSBtZXJnZWQgcXVldWU7IGNvbmZpZ3VyZSBpdCBvbiB0aGUgZmlyc3QgZGVmZXJyZWQgYXR0YWNoLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgd2FybmVyIOKAlCB0aGUgYm91bmQgd2FybiBzZWFtLiAqL1xuICBwcml2YXRlIGRldldhcm5EZWR1cGVkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy53YXJuZWRNZXNzYWdlcy5oYXMobWVzc2FnZSkpIHJldHVybjtcbiAgICB0aGlzLndhcm5lZE1lc3NhZ2VzLmFkZChtZXNzYWdlKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBydW4ncyBjb3JyZWxhdGlvbiB0aGUgZmFpbGVkIGV2ZW50IGNhcnJpZWQsIGFzIGNhcHR1cmVkIOKAlCBhIHNjb3BlIG9yIGVtaXQgZXZlbnQncyBvd24gYGNvcnJlbGF0aW9uYCwgYSBmbG93XG4gKiBldmVudCdzIG9uIGl0cyBgdHJhdmVyc2FsQ29udGV4dGAg4oCUIHNwcmVhZCBpbnRvIHRoZSBzeW50aGVzaXplZCBgb25FcnJvcmAgKDEwLjEpLiBFbXB0eSB3aGVuIGl0IGNhcnJpZWQgbm9uZS5cbiAqL1xuZnVuY3Rpb24gY29ycmVsYXRpb25PZihwYXlsb2FkOiB1bmtub3duKTogeyBjb3JyZWxhdGlvbj86IFJ1bkNvcnJlbGF0aW9uIH0ge1xuICBpZiAocGF5bG9hZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gJ29iamVjdCcpIHJldHVybiB7fTtcbiAgY29uc3QgZXZlbnQgPSBwYXlsb2FkIGFzIHsgY29ycmVsYXRpb24/OiB1bmtub3duOyB0cmF2ZXJzYWxDb250ZXh0PzogeyBjb3JyZWxhdGlvbj86IHVua25vd24gfSB9O1xuICBjb25zdCBjb3JyZWxhdGlvbiA9IGV2ZW50LmNvcnJlbGF0aW9uID8/IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LmNvcnJlbGF0aW9uO1xuICByZXR1cm4gY29ycmVsYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIGNvcnJlbGF0aW9uID09PSAnb2JqZWN0JyA/IHsgY29ycmVsYXRpb246IGNvcnJlbGF0aW9uIGFzIFJ1bkNvcnJlbGF0aW9uIH0gOiB7fTtcbn1cbiJdfQ==
|