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
|
@@ -7,4 +7,4 @@ export { RLENarrativeFlowRecorder } from './RLENarrativeFlowRecorder.js';
|
|
|
7
7
|
export { SeparateNarrativeFlowRecorder } from './SeparateNarrativeFlowRecorder.js';
|
|
8
8
|
export { SilentNarrativeFlowRecorder } from './SilentNarrativeFlowRecorder.js';
|
|
9
9
|
export { WindowedNarrativeFlowRecorder } from './WindowedNarrativeFlowRecorder.js';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEF0dGVtcHRSb3csIE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL01hbmlmZXN0Rmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9NYW5pZmVzdEZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL01pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9STEVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL1NlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9XaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG4iXX0=
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
+
import type { AttemptRecord, RunCorrelation } from '../../attempt/types.js';
|
|
9
10
|
import type { DecisionEvidence, SelectionEvidence } from '../../decide/types.js';
|
|
10
11
|
import type { StructuredErrorInfo } from '../../errors/errorInfo.js';
|
|
12
|
+
import type { TerminalFailureContext } from '../../errors/terminalFailure.js';
|
|
11
13
|
/**
|
|
12
14
|
*
|
|
13
15
|
* Uses Null Object pattern: NullControlFlowNarrativeGenerator satisfies this
|
|
@@ -63,11 +65,28 @@ export interface IControlFlowNarrative {
|
|
|
63
65
|
* `RedactionRule.retainStageError` (the diagnostic policy applied once), elsewhere `extractErrorInfo`.
|
|
64
66
|
*/
|
|
65
67
|
onError(stageName: string, errorMessage: string, structuredError: StructuredErrorInfo, traversalContext?: TraversalContext): void;
|
|
68
|
+
/**
|
|
69
|
+
* Called at the END of every attempt (10.1) — every outcome, with the
|
|
70
|
+
* attempt's {@link AttemptRecord} (timing, outcome, category, the
|
|
71
|
+
* retry-or-stop decision): a stage's own (`record.kind === 'stage'`, under a
|
|
72
|
+
* retry policy, a `timeoutMs` or a run deadline), and the calls it makes
|
|
73
|
+
* (`'call'`, `scope.$call`) and outside attempts it reports (`'observed'`)
|
|
74
|
+
* during the stage (P2). A stage attempt fires before `onStageRetry` when it
|
|
75
|
+
* is retried, and before `onError` / `onStageExecuted` for the last.
|
|
76
|
+
* `structuredError` is the attempt's served error (`raw` included unless the
|
|
77
|
+
* policy masked it; never for an observed attempt); absent for a success or
|
|
78
|
+
* a pause.
|
|
79
|
+
*
|
|
80
|
+
* Event arithmetic: one per attempt — for a stage, the number of attempts it
|
|
81
|
+
* made plus one per call or observed attempt (filter on `record.kind`).
|
|
82
|
+
*/
|
|
83
|
+
onAttempt(stageName: string, stageId: string, record: AttemptRecord, structuredError: StructuredErrorInfo | undefined, traversalContext?: TraversalContext): void;
|
|
66
84
|
/**
|
|
67
85
|
* Called when an attempt at a stage with a declared `retry` policy failed
|
|
68
|
-
* AND another attempt will run. Fires after
|
|
69
|
-
* writes are discarded and BEFORE the backoff wait, so a
|
|
70
|
-
* "retrying in 500 ms" when the decision is made, not
|
|
86
|
+
* AND another attempt will run. Fires after that attempt's `onAttempt`,
|
|
87
|
+
* after its staged writes are discarded and BEFORE the backoff wait, so a
|
|
88
|
+
* live monitor learns "retrying in 500 ms" when the decision is made, not
|
|
89
|
+
* after the wait.
|
|
71
90
|
*
|
|
72
91
|
* Event arithmetic: an exhausted policy fires `attempts - 1` of these and
|
|
73
92
|
* then one `onError`; a `retryOn` that declines fires ZERO of these and one
|
|
@@ -113,7 +132,7 @@ export interface IControlFlowNarrative {
|
|
|
113
132
|
* error, so it does not fire this. Subflow-traversers do NOT fire it;
|
|
114
133
|
* their errors propagate to the parent and surface at the top level.
|
|
115
134
|
*/
|
|
116
|
-
onRunFailed(error: StructuredErrorInfo, traversalContext?: TraversalContext): void;
|
|
135
|
+
onRunFailed(error: StructuredErrorInfo, traversalContext?: TraversalContext, failure?: TerminalFailureContext): void;
|
|
117
136
|
/** Returns accumulated narrative sentences in execution order. */
|
|
118
137
|
getSentences(): string[];
|
|
119
138
|
}
|
|
@@ -193,6 +212,12 @@ export interface TraversalContext {
|
|
|
193
212
|
* checkpoint predates 9.37.0 (it did not record the paused execution).
|
|
194
213
|
*/
|
|
195
214
|
readonly resumedFrom?: ResumeLink;
|
|
215
|
+
/**
|
|
216
|
+
* The run's correlation (10.1) — `env.traceparent`, or `env.traceId` + `env.operationId`, resolved once per
|
|
217
|
+
* leg. The SAME frozen object, by reference, on every stamp of the leg (subflows included) and on
|
|
218
|
+
* `getSnapshot().correlation`. Absent — no key — when the env gives none.
|
|
219
|
+
*/
|
|
220
|
+
readonly correlation?: RunCorrelation;
|
|
196
221
|
}
|
|
197
222
|
/**
|
|
198
223
|
* The paused execution a resume continues — `TraversalContext.resumedFrom`.
|
|
@@ -339,6 +364,39 @@ export interface FlowThrottledEvent {
|
|
|
339
364
|
/** Explicit channel discriminant — see {@link FlowErrorEvent.channel}. */
|
|
340
365
|
channel?: 'flow';
|
|
341
366
|
}
|
|
367
|
+
/**
|
|
368
|
+
* Event passed to FlowRecorder.onAttempt — one attempt, at its end (10.1): a
|
|
369
|
+
* stage's own under its retry policy, a `timeoutMs` or a run deadline
|
|
370
|
+
* (`record.kind === 'stage'`), or — during the stage — a call it made
|
|
371
|
+
* (`'call'`, `scope.$call`) or an outside attempt it reported (`'observed'`,
|
|
372
|
+
* P2). `stageName` / `stageId` / `traversalContext` are the stage's in every
|
|
373
|
+
* case; filter on `record.kind` to count one kind.
|
|
374
|
+
*
|
|
375
|
+
* WHY this event exists: `onStageRetry` says "attempt N failed, retrying" and
|
|
376
|
+
* nothing else — not how long a try took, not why the series stopped, and
|
|
377
|
+
* nothing at all when `retryOn` declined. Every attempt is an
|
|
378
|
+
* {@link AttemptRecord} instead, whatever its outcome, with the decision that
|
|
379
|
+
* followed it in the shape `decide()` records — the same records the stage's
|
|
380
|
+
* execution-tree node keeps (`StageSnapshot.attempts`).
|
|
381
|
+
*
|
|
382
|
+
* Fires once per attempt, before `onStageRetry` (when the attempt is retried)
|
|
383
|
+
* and before `onError` / `onStageExecuted` (for the last). The record is
|
|
384
|
+
* frozen and survives `structuredClone`; `structuredError` is the served error
|
|
385
|
+
* with `raw`, as on {@link FlowStageRetryEvent} — except for an observed
|
|
386
|
+
* attempt, whose error the library never threw (`raw` is undefined).
|
|
387
|
+
*/
|
|
388
|
+
export interface FlowAttemptEvent {
|
|
389
|
+
stageName: string;
|
|
390
|
+
/** Stable stage identifier from the builder (matches spec node id). */
|
|
391
|
+
stageId: string;
|
|
392
|
+
/** The attempt: timing, outcome, category, decision, and the served error without `raw`. */
|
|
393
|
+
record: AttemptRecord;
|
|
394
|
+
/** The attempt's served error with `raw` — absent for a success or a pause. */
|
|
395
|
+
structuredError?: StructuredErrorInfo;
|
|
396
|
+
traversalContext?: TraversalContext;
|
|
397
|
+
/** Explicit channel discriminant — see {@link FlowErrorEvent.channel}. */
|
|
398
|
+
channel?: 'flow';
|
|
399
|
+
}
|
|
342
400
|
/**
|
|
343
401
|
* Event passed to FlowRecorder.onStageRetry — one failed attempt at a stage
|
|
344
402
|
* that carries a declared {@link import('../types.js').RetryPolicy}, and which
|
|
@@ -352,7 +410,9 @@ export interface FlowThrottledEvent {
|
|
|
352
410
|
* Fires only for attempts followed by another attempt. The final failure takes
|
|
353
411
|
* the ordinary error path (`onError`), so the two never double-report the same
|
|
354
412
|
* failure: an exhausted `attempts: 3` policy emits 2 retry events + 1 error
|
|
355
|
-
* event; a `retryOn` that declines emits 0 retry events + 1 error event.
|
|
413
|
+
* event; a `retryOn` that declines emits 0 retry events + 1 error event. Each
|
|
414
|
+
* attempt — retried or not — also fires {@link FlowAttemptEvent} first (10.1),
|
|
415
|
+
* which is where a declined stop is recorded (`reason: 'declined'`).
|
|
356
416
|
*/
|
|
357
417
|
export interface FlowStageRetryEvent {
|
|
358
418
|
stageName: string;
|
|
@@ -428,6 +488,8 @@ export interface FlowRunFailedEvent {
|
|
|
428
488
|
/** Structured details of the error that terminated the run. */
|
|
429
489
|
structuredError: StructuredErrorInfo;
|
|
430
490
|
traversalContext?: TraversalContext;
|
|
491
|
+
/** Native terminal ownership, independent of served error details. Absent on legacy manually emitted events. */
|
|
492
|
+
readonly failure?: TerminalFailureContext;
|
|
431
493
|
}
|
|
432
494
|
/**
|
|
433
495
|
* FlowRecorder — Pluggable observer for control flow events.
|
|
@@ -461,6 +523,13 @@ export interface FlowRecorder {
|
|
|
461
523
|
onLoop?(event: FlowLoopEvent): void;
|
|
462
524
|
onBreak?(event: FlowBreakEvent): void;
|
|
463
525
|
onError?(event: FlowErrorEvent): void;
|
|
526
|
+
/**
|
|
527
|
+
* Called at the end of EVERY attempt — a stage's own, and the calls and
|
|
528
|
+
* observed attempts it makes during the stage (filter on `record.kind`) —
|
|
529
|
+
* with its record and the decision that followed (10.1). See
|
|
530
|
+
* {@link FlowAttemptEvent}.
|
|
531
|
+
*/
|
|
532
|
+
onAttempt?(event: FlowAttemptEvent): void;
|
|
464
533
|
/**
|
|
465
534
|
* Called once per failed attempt that WILL be retried, for stages carrying a
|
|
466
535
|
* declared `retry` policy. The final failure arrives via `onError` instead,
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
9
|
export {};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSUNvbnRyb2xGbG93TmFycmF0aXZlIOKAlCBJbnRlcmZhY2UgZm9yIGNvbnRyb2wgZmxvdyBuYXJyYXRpdmUgZ2VuZXJhdGlvbi5cbiAqXG4gKiBDYXB0dXJlcyBGTE9XIGV2ZW50cyBkdXJpbmcgdHJhdmVyc2FsOiBkZWNpc2lvbnMsIGZvcmtzLCBsb29wcywgc3ViZmxvd3MuXG4gKiBDb21wbGVtZW50YXJ5IHRvIHNjb3BlL3JlY29yZGVycy9OYXJyYXRpdmVSZWNvcmRlciB3aGljaCBjYXB0dXJlcyBEQVRBIGV2ZW50cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uLy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuLi8uLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcblxuLyoqXG4gKlxuICogVXNlcyBOdWxsIE9iamVjdCBwYXR0ZXJuOiBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3Igc2F0aXNmaWVzIHRoaXNcbiAqIGludGVyZmFjZSB3aXRoIGVtcHR5IG1ldGhvZHMgZm9yIHplcm8tY29zdCBkaXNhYmxlZCBwYXRoLlxuICovXG5cbi8qKlxuICogVGhlIGtpbmQgb2Ygc3RhZ2UgdGhhdCBjb21wbGV0ZWQuIExldHMgY29uc3VtZXJzIHJvdXRlIHVuaWZvcm1cbiAqIFwiZGlkIHRoaXMgc3RhZ2UgZXhlY3V0ZVwiIGhhbmRsaW5nIHdpdGhvdXQgYSBzaWRlLXRhYmxlIGxvb2t1cCBpbnRvXG4gKiB0aGUgY2hhcnQgc3BlYy4gUmVxdWlyZWQgb24gZXZlcnkgYG9uU3RhZ2VFeGVjdXRlZGAgZXZlbnQgc2luY2VcbiAqIHByb3Bvc2FsICMwMDMgdW5pZmllZCB0aGUgZXZlbnQgdG8gZmlyZSBmb3IgQUxMIHN0YWdlIGtpbmRzLlxuICovXG5leHBvcnQgdHlwZSBTdGFnZVR5cGUgPSAnbGluZWFyJyB8ICdkZWNpZGVyJyB8ICdmb3JrJyB8ICdzZWxlY3RvcicgfCAnc3ViZmxvdy1tb3VudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRyb2xGbG93TmFycmF0aXZlIHtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgc3RhZ2UgY29tcGxldGVzIGl0cyBtYWluIHdvcmsuIEZpcmVzIGZvciBBTEwgc3RhZ2VcbiAgICoga2luZHMgKGAnbGluZWFyJ2AsIGAnZGVjaWRlcidgLCBgJ2ZvcmsnYCwgYCdzZWxlY3RvcidgLCBgJ3N1YmZsb3ctbW91bnQnYClcbiAgICogQUZURVIgdGhlIGNvcnJlc3BvbmRpbmcgc3BlY2lhbGl6ZWQgZXZlbnQgKGBvbkRlY2lzaW9uYCwgYG9uRm9ya2AsXG4gICAqIGBvblNlbGVjdGVkYCwgYG9uU3ViZmxvd0VudHJ5YCkuIEZvciBsaW5lYXIgc3RhZ2VzLCBmaXJlcyBhZnRlclxuICAgKiB0aGUgc3RhZ2UgZnVuY3Rpb24gcmV0dXJucy5cbiAgICpcbiAgICogQ29uc3VtZXJzIHRyYWNraW5nIFwiZGlkIHRoaXMgc3RhZ2UgcnVuP1wiIHVzZSB0aGlzIGV2ZW50IHVuaWZvcm1seVxuICAgKiBhbmQgc3dpdGNoIG9uIGBzdGFnZVR5cGVgIGZvciBraW5kLXNwZWNpZmljIHdvcmsuXG4gICAqL1xuICBvblN0YWdlRXhlY3V0ZWQoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0IHwgdW5kZWZpbmVkLFxuICAgIHN0YWdlVHlwZTogU3RhZ2VUeXBlLFxuICApOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgb24gbGluZWFyIGNvbnRpbnVhdGlvbiBmcm9tIG9uZSBzdGFnZSB0byB0aGUgbmV4dC4gKi9cbiAgb25OZXh0KGZyb21TdGFnZTogc3RyaW5nLCB0b1N0YWdlOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGEgZGVjaWRlciBzZWxlY3RzIGEgYnJhbmNoLiBNb3N0IHZhbHVhYmxlIGZvciBMTE0gY29udGV4dC4gKi9cbiAgb25EZWNpc2lvbihcbiAgICBkZWNpZGVyTmFtZTogc3RyaW5nLFxuICAgIGNob3NlbkJyYW5jaDogc3RyaW5nLFxuICAgIHJhdGlvbmFsZT86IHN0cmluZyxcbiAgICBkZWNpZGVyRGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlLFxuICApOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGZvcmsgZXhlY3V0ZXMgYWxsIGNoaWxkcmVuIGluIHBhcmFsbGVsLiAqL1xuICBvbkZvcmsocGFyZW50U3RhZ2U6IHN0cmluZywgY2hpbGROYW1lczogc3RyaW5nW10sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gYSBzZWxlY3RvciBwaWNrcyBhIHN1YnNldCBvZiBjaGlsZHJlbi4gKi9cbiAgb25TZWxlY3RlZChcbiAgICBwYXJlbnRTdGFnZTogc3RyaW5nLFxuICAgIHNlbGVjdGVkTmFtZXM6IHN0cmluZ1tdLFxuICAgIHRvdGFsQ291bnQ6IG51bWJlcixcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBldmlkZW5jZT86IFNlbGVjdGlvbkV2aWRlbmNlLFxuICApOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBlbnRlcmluZyBhIHN1YmZsb3cgKG5lc3RlZCBjb250ZXh0IGJvdW5kYXJ5KS4gKi9cbiAgb25TdWJmbG93RW50cnkoXG4gICAgc3ViZmxvd05hbWU6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ/OiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgbWFwcGVkSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gZXhpdGluZyBhIHN1YmZsb3cuICovXG4gIG9uU3ViZmxvd0V4aXQoXG4gICAgc3ViZmxvd05hbWU6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgb3V0cHV0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gYSBkeW5hbWljIHN1YmZsb3cgaXMgcmVnaXN0ZXJlZCBkdXJpbmcgdHJhdmVyc2FsLiAqL1xuICBvblN1YmZsb3dSZWdpc3RlcmVkKHN1YmZsb3dJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBzcGVjU3RydWN0dXJlPzogdW5rbm93bik6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCBvbiBsb29wIGl0ZXJhdGlvbiAoYmFjay1lZGdlIHRyYXZlcnNhbCkuICovXG4gIG9uTG9vcCh0YXJnZXRTdGFnZTogc3RyaW5nLCBpdGVyYXRpb246IG51bWJlciwgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBzdGFnZSB0cmlnZ2VycyBicmVhayAoZWFybHkgdGVybWluYXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gT3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLlxuICAgKiBAcGFyYW0gcHJvcGFnYXRlZEZyb21TdWJmbG93IC0gV2hlbiBzZXQsIHRoaXMgYnJlYWsgd2FzIHJhaXNlZCBvbiB0aGVcbiAgICogICBwYXJlbnQgYmVjYXVzZSBhbiBpbm5lciBzdWJmbG93ICh0aGlzIGlkKSBicm9rZSB3aXRoIGBwcm9wYWdhdGVCcmVha2BcbiAgICogICBlbmFibGVkLiBVc2VkIGJ5IHJlY29yZGVycyB0byBkaXN0aW5ndWlzaCBvcmlnaW5hdGluZyB2cyBwcm9wYWdhdGVkXG4gICAqICAgYnJlYWtzIGFuZCByZW5kZXIgdGhlbSBhY2NvcmRpbmdseS5cbiAgICovXG4gIG9uQnJlYWsoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICAgIHByb3BhZ2F0ZWRGcm9tU3ViZmxvdz86IHN0cmluZyxcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBzdGFnZSB0aHJvd3MgYW4gZXJyb3IsIHdpdGggaXRzIFNFUlZFRCBmb3JtOiBmb3IgYSBzdGFnZSdzIG93biBmYWlsdXJlIHRoYXQgaXNcbiAgICogYFJlZGFjdGlvblJ1bGUucmV0YWluU3RhZ2VFcnJvcmAgKHRoZSBkaWFnbm9zdGljIHBvbGljeSBhcHBsaWVkIG9uY2UpLCBlbHNld2hlcmUgYGV4dHJhY3RFcnJvckluZm9gLlxuICAgKi9cbiAgb25FcnJvcihcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGFuIGF0dGVtcHQgYXQgYSBzdGFnZSB3aXRoIGEgZGVjbGFyZWQgYHJldHJ5YCBwb2xpY3kgZmFpbGVkXG4gICAqIEFORCBhbm90aGVyIGF0dGVtcHQgd2lsbCBydW4uIEZpcmVzIGFmdGVyIHRoZSBmYWlsZWQgYXR0ZW1wdCdzIHN0YWdlZFxuICAgKiB3cml0ZXMgYXJlIGRpc2NhcmRlZCBhbmQgQkVGT1JFIHRoZSBiYWNrb2ZmIHdhaXQsIHNvIGEgbGl2ZSBtb25pdG9yIGxlYXJuc1xuICAgKiBcInJldHJ5aW5nIGluIDUwMCBtc1wiIHdoZW4gdGhlIGRlY2lzaW9uIGlzIG1hZGUsIG5vdCBhZnRlciB0aGUgd2FpdC5cbiAgICpcbiAgICogRXZlbnQgYXJpdGhtZXRpYzogYW4gZXhoYXVzdGVkIHBvbGljeSBmaXJlcyBgYXR0ZW1wdHMgLSAxYCBvZiB0aGVzZSBhbmRcbiAgICogdGhlbiBvbmUgYG9uRXJyb3JgOyBhIGByZXRyeU9uYCB0aGF0IGRlY2xpbmVzIGZpcmVzIFpFUk8gb2YgdGhlc2UgYW5kIG9uZVxuICAgKiBgb25FcnJvcmAuIFRoZSBmaW5hbCBhdHRlbXB0IG5ldmVyIGZpcmVzIHRoaXMgZXZlbnQuXG4gICAqL1xuICBvblN0YWdlUmV0cnkoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2VJZDogc3RyaW5nLFxuICAgIGF0dGVtcHQ6IG51bWJlcixcbiAgICBtYXhBdHRlbXB0czogbnVtYmVyLFxuICAgIGRlbGF5TXM6IG51bWJlcixcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgZm9yayBjaGlsZCBmYWlsZWQgYW5kIHRoZSBydW4ncyBgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcmBcbiAgICogY2xhc3NpZmllZCBpdHMgZXJyb3IgYXMgdGhyb3R0bGluZyAoOS4zOS4wKS4gVGhlIGNoaWxkJ3MgZmFpbHVyZSB0YWtlc1xuICAgKiBpdHMgb3JkaW5hcnkgcGF0aCB0b287IHRoaXMgb25seSBuYW1lcyBpdCBhcyB0aHJvdHRsaW5nLlxuICAgKi9cbiAgb25UaHJvdHRsZWQ/KFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGEgcGF1c2FibGUgc3RhZ2UgcGF1c2VzIGV4ZWN1dGlvbi4gKi9cbiAgb25QYXVzZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgcGF1c2VEYXRhOiB1bmtub3duLFxuICAgIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gYSBwYXVzZWQgc3RhZ2UgaXMgcmVzdW1lZC4gKi9cbiAgb25SZXN1bWUoc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlSWQ6IHN0cmluZywgaGFzSW5wdXQ6IGJvb2xlYW4sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgLCBCRUZPUkUgdGhlIGZpcnN0IHN0YWdlIGV4ZWN1dGVzLlxuICAgKiBgaW5wdXRgIGlzIHRoZSByZXRhaW5lZCBmb3JtIG9mIGBydW4oe2lucHV0fSlgIGFmdGVyIHNjaGVtYSB2YWxpZGF0aW9uO1xuICAgKiB0aGUgcnVuJ3Mga2V5L3BhdGggcmVkYWN0aW9uIGFwcGxpZXMgYmVmb3JlIGRpc3BhdGNoLiBTZWUge0BsaW5rIEZsb3dSdW5FdmVudH0uXG4gICAqIFN1YmZsb3ctdHJhdmVyc2VycyBkbyBOT1QgZmlyZSB0aGlzIGV2ZW50IOKAlCB0aGV5IGZpcmUgYG9uU3ViZmxvd0VudHJ5YC5cbiAgICovXG4gIG9uUnVuU3RhcnQoaW5wdXQ6IHVua25vd24sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgLCBBRlRFUiB0aGUgbGFzdCBzdGFnZSBjb21taXRzLlxuICAgKiBgb3V0cHV0YCBpcyB0aGUgcmV0YWluZWQgZm9ybSBvZiB0aGUgY2hhcnQncyByZXR1cm4uIE5PVCBmaXJlZCBvbiBwYXVzZSAodGhlIHJ1blxuICAgKiBkaWRuJ3QgZW5kOyBpdCBzdXNwZW5kZWQpIG9yIG9uIHVuY2F1Z2h0IGVycm9yLiBTdWJmbG93LXRyYXZlcnNlcnMgZG9cbiAgICogTk9UIGZpcmUgdGhpcyBldmVudCDigJQgdGhleSBmaXJlIGBvblN1YmZsb3dFeGl0YC5cbiAgICovXG4gIG9uUnVuRW5kKG91dHB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSBwZXIgdG9wLWxldmVsIGBleGVjdXRvci5ydW4oKWAgd2hlbiB0cmF2ZXJzYWwgdGhyb3dzIGFcbiAgICogTk9OLXBhdXNlIGVycm9yLCBCRUZPUkUgdGhlIGV4Y2VwdGlvbiBwcm9wYWdhdGVzIHRvIGBydW4oKWAncyBjYWxsZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFRFUk1JTkFMIGNvdW50ZXJwYXJ0IHRvIGBvblJ1bkVuZGAg4oCUIGl0IGNsb3NlcyB0aGUgcnVuXG4gICAqIGJvdW5kYXJ5IHN5bW1ldHJpY2FsbHkgc28gZXZlcnkgYG9uUnVuU3RhcnRgIGlzIGZvbGxvd2VkIGJ5IGV4YWN0bHlcbiAgICogb25lIG9mIGBvblJ1bkVuZGAgKGNsZWFuKSBvciBgb25SdW5GYWlsZWRgIChlcnJvcikuIFdpdGhvdXQgaXQsIGFcbiAgICogbGl2ZSBtb25pdG9yIHNlZXMgYG9uUnVuU3RhcnRgIHRoZW4gc2lsZW5jZSBvbiBhIGZhaWxlZCBydW4gYW5kIGNhbid0XG4gICAqIHRlbGwgXCJzdGlsbCBydW5uaW5nXCIgZnJvbSBcImNyYXNoZWQuXCJcbiAgICpcbiAgICogRXJyb3JzIFNUSUxMIHRocm93IOKAlCB0aGlzIGlzIHRoZSBvYnNlcnZhYmxlIHRlcm1pbmFsIHNpZ25hbCwgbm90IGFcbiAgICogcmVjb3ZlcnkgbWVjaGFuaXNtIChubyByb3V0aW5nLCBubyBlcnJvci1zdWJmbG93KS4gUGF1c2UgaXMgTk9UIGFuXG4gICAqIGVycm9yLCBzbyBpdCBkb2VzIG5vdCBmaXJlIHRoaXMuIFN1YmZsb3ctdHJhdmVyc2VycyBkbyBOT1QgZmlyZSBpdDtcbiAgICogdGhlaXIgZXJyb3JzIHByb3BhZ2F0ZSB0byB0aGUgcGFyZW50IGFuZCBzdXJmYWNlIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqL1xuICBvblJ1bkZhaWxlZChlcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkO1xuXG4gIC8qKiBSZXR1cm5zIGFjY3VtdWxhdGVkIG5hcnJhdGl2ZSBzZW50ZW5jZXMgaW4gZXhlY3V0aW9uIG9yZGVyLiAqL1xuICBnZXRTZW50ZW5jZXMoKTogc3RyaW5nW107XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYXZlcnNhbENvbnRleHQg4oCUIHJlYWQtb25seSBleGVjdXRpb24gY29udGV4dCBmcm9tIHRoZSB0cmF2ZXJzZXIuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVHJhdmVyc2FsIGNvbnRleHQgYXR0YWNoZWQgdG8gZXZlcnkgRmxvd1JlY29yZGVyIGV2ZW50LlxuICogQ3JlYXRlZCBieSB0aGUgdHJhdmVyc2VyIGR1cmluZyBERlMsIHBhc3NlZCB0byByZWNvcmRlcnMgYXMgcmVhZC1vbmx5IGRhdGEuXG4gKiBFbmFibGVzIHJlY29yZGVycyB0byBidWlsZCB0cmVlcywgZ3JvdXAgYnkgc3ViZmxvdywgYW5kIGNvcnJlbGF0ZSBldmVudHNcbiAqIHdpdGhvdXQgbWFpbnRhaW5pbmcgdGhlaXIgb3duIHN0YWNrcyBvciBwb3N0LXByb2Nlc3NpbmcuXG4gKlxuICogTGlrZSBPcGVuVGVsZW1ldHJ5J3Mgc3BhbiBjb250ZXh0OiBzdGFnZUlkICsgcGFyZW50U3RhZ2VJZCBmb3JtIGEgdHJlZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmF2ZXJzYWxDb250ZXh0IHtcbiAgLyoqXG4gICAqIFBlci1gZXhlY3V0b3IucnVuKClgIGlkZW50aWZpZXIuIEdlbmVyYXRlZCBvbmNlIGF0IHRoZSBzdGFydCBvZiBldmVyeVxuICAgKiBgcnVuKClgIChhbmQgYWdhaW4gb24gYHJlc3VtZSgpYCk7IHNoYXJlZCBieSBldmVyeSBldmVudCBvZiB0aGF0IHJ1bjtcbiAgICogZGlmZmVycyBhY3Jvc3MgY29uc2VjdXRpdmUgcnVucyBvZiB0aGUgc2FtZSBleGVjdXRvci5cbiAgICpcbiAgICogRm9ybWF0OiBgJHtEYXRlLm5vdygpfS0ke2NvdW50ZXJ9YCDigJQgc29ydGFibGUgbGV4aWNvZ3JhcGhpY2FsbHkgKD09XG4gICAqIGNocm9ub2xvZ2ljYWxseSBmb3IgcnVucyA+IDFtcyBhcGFydCkuIFByb2Nlc3MtbG9jYWwg4oCUIGZvciBjcm9zcy1cbiAgICogcHJvY2VzcyBjb3JyZWxhdGlvbiB1c2UgYGdldEVudigpLnRyYWNlSWRgIChjb25zdW1lci1zdXBwbGllZCkuXG4gICAqXG4gICAqIFJlY29yZGVycyB0aGF0IGFjY3VtdWxhdGUgc3RhdGUgYWNyb3NzIHJ1bnMgKGZvcmsgYm9va2tlZXBpbmcsXG4gICAqIHNpYmxpbmctaGFuZG9mZiBzdGF0ZSwgZXRjLikgZGV0ZWN0IFwibmV3IHJ1blwiIHZpYVxuICAgKiBgZXZlbnQudHJhdmVyc2FsQ29udGV4dC5ydW5JZCAhPT0gdGhpcy5sYXN0UnVuSWRgIGFuZCByZXNldFxuICAgKiB0cmFuc2llbnQgYm9va2tlZXBpbmcuIFJlY29yZGVycyB0aGF0IGRvbid0IGNhcmUgYWJvdXQgc2NvcGluZ1xuICAgKiBpZ25vcmUgdGhlIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIGZyb20gdGhlIGJ1aWxkZXIgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleC5cbiAgICogIENvdW50ZXIgcmVzZXRzIHBlciBleGVjdXRvciDigJQgY29tYmluZSB3aXRoIGBydW5JZGAgZm9yIGdsb2JhbGx5IHVuaXF1ZSBzdGVwIGtleXMuICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFBhcmVudCBzdGFnZSBJRCDigJQgd2FsayB1cCB0byByZWNvbnN0cnVjdCB0aGUgdHJlZS4gVW5kZWZpbmVkIGF0IHJvb3QuICovXG4gIHJlYWRvbmx5IHBhcmVudFN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IEVYRUNVVElPTiBzdGVwJ3MgcnVudGltZVN0YWdlSWQg4oCUIHRoZSBydW50aW1lIHR3aW4gb2ZcbiAgICogYHBhcmVudFN0YWdlSWRgIChSRkMtMDAzIEQxKS4gV2FsayB1cCB0byByZWNvbnN0cnVjdCB0aGUgcnVudGltZVxuICAgKiBhbmNlc3RvciBjaGFpbjsgbG9vcCByZS1lbnRyaWVzIHN0YXkgdW5hbWJpZ3VvdXMgYmVjYXVzZSBydW50aW1lIGlkc1xuICAgKiAoYHN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgKSBkaWZmZXIgcGVyIGl0ZXJhdGlvbiBldmVuIHdoZW4gc3RhZ2UgaWRzXG4gICAqIHJlcGVhdC4gQ3Jvc3NlcyBzdWJmbG93IGJvdW5kYXJpZXM6IHRoZSBmaXJzdCBzdGFnZSBpbnNpZGUgYSBzdWJmbG93XG4gICAqIHBvaW50cyBhdCB0aGUgTU9VTlQgc3RhZ2UncyBydW50aW1lU3RhZ2VJZCBpbiB0aGUgcGFyZW50IHRyYXZlcnNlci5cbiAgICogVW5kZWZpbmVkIG9ubHkgYXQgdGhlIGZpcnN0IHN0YWdlIG9mIHRoZSB0b3AtbGV2ZWwgY2hhcnQuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRSdW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgSUQgd2hlbiBpbnNpZGUgYSBzdWJmbG93LiBVbmRlZmluZWQgYXQgcm9vdCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKiogRnVsbCBzdWJmbG93IHBhdGggZm9yIG5lc3RlZCBzdWJmbG93cyAoZS5nLiwgXCJzZi1vdXRlci9zZi1pbm5lclwiKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdWJmbG93IG5lc3RpbmcgZGVwdGggb2YgdGhlIHN0YWdlJ3MgQUREUkVTUzogaG93IG1hbnkgc3ViZmxvdyBzZWdtZW50cyBpdHNcbiAgICogYHJ1bnRpbWVTdGFnZUlkYCBjYXJyaWVzICgwID0gdG9wIGxldmVsLCAxID0gaW5zaWRlIGEgc3ViZmxvdyBvciBhXG4gICAqIGBwYXJhbGxlbEZvckVhY2hgIGJyYW5jaCwgMiA9IGEgc3ViZmxvdyBpbnNpZGUgdGhhdCwg4oCmKS4gT25lIG1lYW5pbmcgb25cbiAgICogZXZlcnkgc3RhbXAg4oCUIHN0YWdlIGV2ZW50cywgdGhlIHJ1bi1ib3VuZGFyeSByb290ICgwKSBhbmQgYG9uUmVzdW1lYFxuICAgKiAoOS4zNy4wOyB1bnRpbCA5LjM2LjAgc3RhZ2UgZXZlbnRzIHN0YW1wZWQgdGhlIHBhcmVudC1jaGFpbiBsZW5ndGggb2YgdGhlXG4gICAqIHN0YWdlJ3MgY29udGV4dCBpbnN0ZWFkKS5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgbWFueSB0aW1lcyB0aGlzIHN0YWdlIGhhcyBleGVjdXRlZCBCRUZPUkUgaW4gdGhpcyBydW4g4oCUIHRoZSBsb29wXG4gICAqIGl0ZXJhdGlvbiBjb3VudCB3aGVuIGEgbm9kZSBpcyByZXZpc2l0ZWQgKGUuZy4gdmlhIGBsb29wVG9gKS4gQWJzZW50IG9uIHRoZVxuICAgKiBmaXJzdCBleGVjdXRpb247IGAxYCBvbiB0aGUgZmlyc3QgbG9vcC1iYWNrLCBgMmAgb24gdGhlIG5leHQsIOKApiAoaS5lLlxuICAgKiBgdmlzaXRDb3VudCAtIDFgKS4gUnVuLXNjb3BlZCAocmVzZXRzIGVhY2ggYHJ1bigpYC9gcmVzdW1lKClgKSBhbmQgbW9ub3RvbmljXG4gICAqIGFjcm9zcyBzdWJmbG93IHJlLW1vdW50cy4gUG9wdWxhdGVkIGZvciBldmVyeSBzdGFnZSBraW5kLiBNaXJyb3JzIHRoZVxuICAgKiBuYXJyYXRpdmUgcmVjb3JkZXIncyBcInBhc3MgTlwiIGNvdW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbG9vcEl0ZXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIEZvcmsgYnJhbmNoIElEIHdoZW4gaW5zaWRlIGEgcGFyYWxsZWwgb3IgZGVjaWRlciBicmFuY2guICovXG4gIHJlYWRvbmx5IGZvcmtCcmFuY2g/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPbiB0aGUgYG9uUmVzdW1lYCBldmVudCBvbmx5ICg5LjM3LjApOiB0aGUgUEFVU0VEIGV4ZWN1dGlvbiB0aGlzIHJlc3VtZWRcbiAgICogcnVuIGNvbnRpbnVlcyDigJQgYSBsaW5rIGluIHRoZSBPcGVuVGVsZW1ldHJ5IHNlbnNlLCBub3QgYSBwYXJlbnQuIEEgcmVzdW1lXG4gICAqIGlzIGEgbmV3IGBydW5JZGAsIHNvIHRoZSBwYXVzZWQgYChydW5JZCwgcnVudGltZVN0YWdlSWQpYCBjYW5ub3QgYmUgYVxuICAgKiBwYXJlbnQgb2YgYW55dGhpbmcgaW4gaXQ7IGl0IGlzIG5hbWVkIGhlcmUgaW5zdGVhZC4gQWJzZW50IHdoZW4gdGhlXG4gICAqIGNoZWNrcG9pbnQgcHJlZGF0ZXMgOS4zNy4wIChpdCBkaWQgbm90IHJlY29yZCB0aGUgcGF1c2VkIGV4ZWN1dGlvbikuXG4gICAqL1xuICByZWFkb25seSByZXN1bWVkRnJvbT86IFJlc3VtZUxpbms7XG59XG5cbi8qKlxuICogVGhlIHBhdXNlZCBleGVjdXRpb24gYSByZXN1bWUgY29udGludWVzIOKAlCBgVHJhdmVyc2FsQ29udGV4dC5yZXN1bWVkRnJvbWAuXG4gKiBCb3RoIGlkcyBhcmUgdGhlIFBBVVNFRCBydW4nczogYHJ1bklkYCBpcyB0aGF0IHJ1bidzLCBgcnVudGltZVN0YWdlSWRgIHRoZVxuICogZXhlY3V0aW9uIG9mIHRoZSBzdGFnZSB0aGF0IHBhdXNlZCAoYXMgaXRzIGBvblBhdXNlYCBldmVudCBzdGFtcGVkIGl0KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN1bWVMaW5rIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRmxvd1JlY29yZGVyIOKAlCBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnRyb2wgZmxvdyBldmVudHMuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uU3RhZ2VFeGVjdXRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1N0YWdlRXZlbnQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUcmF2ZXJzYWwgY29udGV4dCBmcm9tIHRoZSBlbmdpbmUg4oCUIHJlYWQtb25seSwgc2V0IGJ5IHRyYXZlcnNlci4gKi9cbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKlxuICAgKiBXaGljaCBraW5kIG9mIHN0YWdlIGNvbXBsZXRlZC4gVGhlIGVuZ2luZSBmaXJlcyBgb25TdGFnZUV4ZWN1dGVkYFxuICAgKiB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHN0YWdlIGtpbmQgKHByb3Bvc2FsICMwMDMpOyBjb25zdW1lcnMgcm91dGUgYnlcbiAgICogYHN0YWdlVHlwZWAgd2l0aG91dCBhIGNoYXJ0LXNwZWMgbG9va3VwLlxuICAgKi9cbiAgc3RhZ2VUeXBlOiBTdGFnZVR5cGU7XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uTmV4dC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd05leHRFdmVudCB7XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vbkRlY2lzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93RGVjaXNpb25FdmVudCB7XG4gIGRlY2lkZXI6IHN0cmluZztcbiAgY2hvc2VuOiBzdHJpbmc7XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xuICAvKiogU3RydWN0dXJlZCBkZWNpc2lvbiBldmlkZW5jZSBmcm9tIGRlY2lkZSgpIGhlbHBlci4gKi9cbiAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlO1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vbkZvcmsuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dGb3JrRXZlbnQge1xuICBwYXJlbnQ6IHN0cmluZztcbiAgY2hpbGRyZW46IHN0cmluZ1tdO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25TZWxlY3RlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1NlbGVjdGVkRXZlbnQge1xuICBwYXJlbnQ6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IHN0cmluZ1tdO1xuICB0b3RhbDogbnVtYmVyO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIFN0cnVjdHVyZWQgc2VsZWN0aW9uIGV2aWRlbmNlIGZyb20gc2VsZWN0KCkgaGVscGVyLiAqL1xuICBldmlkZW5jZT86IFNlbGVjdGlvbkV2aWRlbmNlO1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vblN1YmZsb3cuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dTdWJmbG93RXZlbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHVzZSB0aGlzIHRvIGxvb2sgdXAgdGhlIGZ1bGwgc3BlYyB2aWEgdGhlIG1hbmlmZXN0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKiBCdWlsZC10aW1lIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdWJmbG93IGRvZXMuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIE1hcHBlZCBpbnB1dCB2YWx1ZXMgc2VudCBJTlRPIHRoZSBzdWJmbG93IChmcm9tIGlucHV0TWFwcGVyL2lucHV0S2V5cykuIFByZXNlbnQgb24gZW50cnkgZXZlbnRzLiAqL1xuICBtYXBwZWRJbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU3ViZmxvdyBzaGFyZWQgc3RhdGUgYXQgZXhpdC4gUHJlc2VudCBvbiBleGl0IGV2ZW50cy4gKi9cbiAgb3V0cHV0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25TdWJmbG93UmVnaXN0ZXJlZCAoZHluYW1pYyBzdWJmbG93IGF0dGFjaG1lbnQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIuICovXG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogQnVpbGQtdGltZSBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBGdWxsIHNwZWMgc3RydWN0dXJlICh3aGVuIGF2YWlsYWJsZSBmcm9tIGJ1aWxkVGltZVN0cnVjdHVyZSkuICovXG4gIHNwZWNTdHJ1Y3R1cmU/OiB1bmtub3duO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25Mb29wLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TG9vcEV2ZW50IHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIGl0ZXJhdGlvbjogbnVtYmVyO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uQnJlYWsuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dCcmVha0V2ZW50IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xuICAvKipcbiAgICogT3B0aW9uYWwgZnJlZS1mb3JtIHJlYXNvbiBzdXBwbGllZCBieSBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLiBBYnNlbnRcbiAgICogd2hlbiB0aGUgc3RhZ2UgaW52b2tlZCBgJGJyZWFrKClgIHdpdGhvdXQgYW4gYXJndW1lbnQuIFByb3BhZ2F0ZXMgd2hlblxuICAgKiBhIHN1YmZsb3cgaXMgbW91bnRlZCB3aXRoIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAg4oCUIHRoZSBvdXRlciBicmVha1xuICAgKiBldmVudCBjYXJyaWVzIHRoZSBpbm5lciBicmVhaydzIHJlYXNvbiB0b28uXG4gICAqL1xuICByZWFzb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoaXMgYnJlYWsgZXZlbnQgd2FzIHJhaXNlZCBvbiB0aGUgUEFSRU5UIGJlY2F1c2UgYW4gaW5uZXJcbiAgICogc3ViZmxvdydzIGJyZWFrIHByb3BhZ2F0ZWQgdXAgKHZpYSBgU3ViZmxvd01vdW50T3B0aW9ucy5wcm9wYWdhdGVCcmVha2ApLlxuICAgKiBUaGUgb3JpZ2luYXRpbmcgaW5uZXIgYnJlYWsgZmlyZXMgaXRzIG93biBgb25CcmVha2AgZXZlbnQgc2VwYXJhdGVseVxuICAgKiDigJQgdGhpcyBmbGFnIGxldHMgcmVjb3JkZXJzIGRpc3Rpbmd1aXNoIHRoZSB0d28uXG4gICAqL1xuICBwcm9wYWdhdGVkRnJvbVN1YmZsb3c/OiBzdHJpbmc7XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uRXJyb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dFcnJvckV2ZW50IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIFN0cnVjdHVyZWQgZXJyb3IgZGV0YWlscyDigJQgcHJlc2VydmVzIGZpZWxkLWxldmVsIGlzc3VlcywgZXJyb3IgY29kZXMsIGV0Yy4gKi9cbiAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqXG4gICAqIEV4cGxpY2l0IGNoYW5uZWwgZGlzY3JpbWluYW50IOKAlCBgJ2Zsb3cnYCBvbiBldmVyeSBlbmdpbmUtZGlzcGF0Y2hlZFxuICAgKiBldmVudC4gYGlzRmxvd0V2ZW50KClgIGNoZWNrcyBpdCBmaXJzdCAoYmFja2xvZyBCMyk7IG9wdGlvbmFsIHNvXG4gICAqIGNvbnN1bWVyLWZhYnJpY2F0ZWQgZXZlbnRzICh0ZXN0cywgcmVwbGF5cykgcmVtYWluIHR5cGUtdmFsaWQgYW5kIGZhbGxcbiAgICogYmFjayB0byB0aGUgbGVnYWN5IHBpcGVsaW5lSWQtYWJzZW5jZSBoZXVyaXN0aWMuXG4gICAqL1xuICBjaGFubmVsPzogJ2Zsb3cnO1xufVxuXG4vKipcbiAqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25UaHJvdHRsZWQg4oCUIGEgZm9yayBjaGlsZCBmYWlsZWQgYW5kIHRoZVxuICogZXhlY3V0b3IncyBgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcmAgc2FpZCBpdHMgZXJyb3IgaXMgdGhyb3R0bGluZyAoOS4zOS4wKS5cbiAqXG4gKiBXSFkgYW4gZXZlbnQ6IHRoZSBjaGVja2VyIHVzZWQgdG8gd3JpdGUgYG1vbml0b3IuaXNUaHJvdHRsZWRgIGludG8gdGhlXG4gKiBjaGlsZCdzIGZyYW1lIEFGVEVSIHRoZSBjaGlsZCdzIGxhc3QgY29tbWl0LCBzbyB0aGUgZmxhZyBsYW5kZWQgbm93aGVyZSDigJRcbiAqIG5vdCBpbiBzdGF0ZSwgbm90IGluIHRoZSBsb2cuIFRocm90dGxpbmcgaXMgdGVsZW1ldHJ5LCBzbyBpdCB0cmF2ZWxzIHRoZVxuICogd2F5IHRlbGVtZXRyeSBkb2VzOiBhcyBhbiBldmVudCBhIHJlY29yZGVyIGNhbiBjb3VudCwgYWxlcnQgb24sIG9yIGJhY2sgb2ZmXG4gKiBmcm9tLiBUaGUgY2hpbGQncyBmYWlsdXJlIHN0aWxsIHRha2VzIGl0cyBvcmRpbmFyeSBwYXRoICh0aGUgZmFuLW91dFxuICogcmVjb3JkcyBpdCBhcyBgeyBpc0Vycm9yOiB0cnVlIH1gKTsgdGhpcyBldmVudCBvbmx5IGNsYXNzaWZpZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1Rocm90dGxlZEV2ZW50IHtcbiAgLyoqIFRoZSBmb3JrIGNoaWxkIHdob3NlIGVycm9yIHdhcyBjbGFzc2lmaWVkIGFzIHRocm90dGxpbmcuICovXG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgb2YgdGhhdCBjaGlsZCAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlIG9mIHRoZSBjaGlsZCdzIGVycm9yLiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBTdHJ1Y3R1cmVkIGRldGFpbHMgb2YgdGhlIGNoaWxkJ3MgZXJyb3IuICovXG4gIHN0cnVjdHVyZWRFcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbztcbiAgLyoqIFRoZSBGT1JLJ3Mgc3RhbXAg4oCUIHRoZSBmYW4tb3V0IGlzIHdoZXJlIHRoZSBjbGFzc2lmaWNhdGlvbiBpcyBtYWRlLiAqL1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIEV4cGxpY2l0IGNoYW5uZWwgZGlzY3JpbWluYW50IOKAlCBzZWUge0BsaW5rIEZsb3dFcnJvckV2ZW50LmNoYW5uZWx9LiAqL1xuICBjaGFubmVsPzogJ2Zsb3cnO1xufVxuXG4vKipcbiAqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25TdGFnZVJldHJ5IOKAlCBvbmUgZmFpbGVkIGF0dGVtcHQgYXQgYSBzdGFnZVxuICogdGhhdCBjYXJyaWVzIGEgZGVjbGFyZWQge0BsaW5rIGltcG9ydCgnLi4vdHlwZXMuanMnKS5SZXRyeVBvbGljeX0sIGFuZCB3aGljaFxuICogV0lMTCBiZSBhdHRlbXB0ZWQgYWdhaW4uXG4gKlxuICogV0hZIHRoaXMgZXZlbnQgZXhpc3RzOiBhIHJldHJ5IGhhbmQtcm9sbGVkIGluc2lkZSBhIHN0YWdlIGZ1bmN0aW9uIGxlYXZlcyBub1xuICogbWFyayBvbiB0aGUgdHJhY2UgYXQgYWxsLiBUaGlzIGV2ZW50IGlzIHdoYXQgbWFrZXMgYSBkZWNsYXJlZCByZXRyeSBwYXJ0IG9mXG4gKiB0aGUgcmVjb3JkIOKAlCB3aGljaCBhdHRlbXB0IGZhaWxlZCwgd2h5LCBob3cgbG9uZyB0aGUgZW5naW5lIHdhaXRlZCwgYW5kIGhvd1xuICogbWFueSBhdHRlbXB0cyB0aGUgcG9saWN5IGFsbG93cy5cbiAqXG4gKiBGaXJlcyBvbmx5IGZvciBhdHRlbXB0cyBmb2xsb3dlZCBieSBhbm90aGVyIGF0dGVtcHQuIFRoZSBmaW5hbCBmYWlsdXJlIHRha2VzXG4gKiB0aGUgb3JkaW5hcnkgZXJyb3IgcGF0aCAoYG9uRXJyb3JgKSwgc28gdGhlIHR3byBuZXZlciBkb3VibGUtcmVwb3J0IHRoZSBzYW1lXG4gKiBmYWlsdXJlOiBhbiBleGhhdXN0ZWQgYGF0dGVtcHRzOiAzYCBwb2xpY3kgZW1pdHMgMiByZXRyeSBldmVudHMgKyAxIGVycm9yXG4gKiBldmVudDsgYSBgcmV0cnlPbmAgdGhhdCBkZWNsaW5lcyBlbWl0cyAwIHJldHJ5IGV2ZW50cyArIDEgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1N0YWdlUmV0cnlFdmVudCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgZnJvbSB0aGUgYnVpbGRlciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBhdHRlbXB0IGp1c3QgRkFJTEVELCAxLWJhc2VkLiAqL1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBhdHRlbXB0cyB0aGUgcG9saWN5IGFsbG93cywgaW5jbHVkaW5nIHRoZSBmaXJzdC4gKi9cbiAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgLyoqIE1pbGxpc2Vjb25kcyB0aGUgZW5naW5lIHdpbGwgd2FpdCBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC4gYDBgID0gaW1tZWRpYXRlLiAqL1xuICBkZWxheU1zOiBudW1iZXI7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlIOKAlCB0aGUgc2FtZSBzdHJpbmcgYG9uRXJyb3JgIHdvdWxkIGNhcnJ5LiAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBTdHJ1Y3R1cmVkIGRldGFpbHMgb2YgdGhlIGVycm9yIHRoYXQgZW5kZWQgdGhpcyBhdHRlbXB0LiAqL1xuICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm87XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xuICAvKiogRXhwbGljaXQgY2hhbm5lbCBkaXNjcmltaW5hbnQg4oCUIHNlZSB7QGxpbmsgRmxvd0Vycm9yRXZlbnQuY2hhbm5lbH0uICovXG4gIGNoYW5uZWw/OiAnZmxvdyc7XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uUGF1c2UuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dQYXVzZUV2ZW50IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIERhdGEgZnJvbSB0aGUgcGF1c2Ugc2lnbmFsIChxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YSkuICovXG4gIHBhdXNlRGF0YT86IHVua25vd247XG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHBhdXNlZCBzdGFnZS4gRW1wdHkgYXQgcm9vdCBsZXZlbC4gKi9cbiAgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIEV4cGxpY2l0IGNoYW5uZWwgZGlzY3JpbWluYW50IOKAlCBzZWUge0BsaW5rIEZsb3dFcnJvckV2ZW50LmNoYW5uZWx9LiAqL1xuICBjaGFubmVsPzogJ2Zsb3cnO1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vblJlc3VtZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1Jlc3VtZUV2ZW50IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgcmVzdW1lIGlucHV0IHdhcyBwcm92aWRlZC4gKi9cbiAgaGFzSW5wdXQ6IGJvb2xlYW47XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xuICAvKiogRXhwbGljaXQgY2hhbm5lbCBkaXNjcmltaW5hbnQg4oCUIHNlZSB7QGxpbmsgRmxvd0Vycm9yRXZlbnQuY2hhbm5lbH0uICovXG4gIGNoYW5uZWw/OiAnZmxvdyc7XG59XG5cbi8qKlxuICogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vblJ1blN0YXJ0IC8gb25SdW5FbmQuXG4gKlxuICogQnJhY2tldHMgdGhlIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgIGNhbGwuIFN1YmZsb3dzIGhhdmUgdGhlaXIgb3duXG4gKiBwYWlyIChgb25TdWJmbG93RW50cnlgIC8gYG9uU3ViZmxvd0V4aXRgKTsgdGhlIHJ1biBwYWlyIGlzIHRoZSBPVVRFUk1PU1RcbiAqIGJvdW5kYXJ5LCBzbyBjb25zdW1lcnMgYnVpbGRpbmcgXCJldmVyeSBzdGVwIGhhcyBhbiBpbi9vdXRcIiB2aWV3cyBjYW5cbiAqIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsLlxuICpcbiAqICAgLSBgb25SdW5TdGFydGAgcGF5bG9hZCDihpIgdGhlIGlucHV0IHBhc3NlZCB0byBgcnVuKHtpbnB1dH0pYFxuICogICAtIGBvblJ1bkVuZGAgICBwYXlsb2FkIOKGkiB0aGUgY2hhcnQncyByZXR1cm4gdmFsdWVcbiAqXG4gKiBCb3RoIGFyZSByZXRhaW5lZCBhdCBydW50aW1lIGJlZm9yZSBkaXNwYXRjaC9kZWZlcnJlZCBjYXB0dXJlIHVzaW5nIHRoZVxuICogcnVuJ3MgUmVkYWN0aW9uUnVsZSAoYHJldGFpbkJvdW5kYXJ5YCk6IG93biBzdHJpbmcga2V5cyBhdCBldmVyeSBkZXB0aCAoYnlcbiAqIG5hbWUgb3IgZG90dGVkIHBhdGgpIGFuZCBleHBsaWNpdCBuZXN0ZWQgZmllbGRzLiBTY2FsYXJzIHBhc3MgdGhyb3VnaDsgZm9ya1xuICogY2hpbGQtSUQgZW52ZWxvcGVzIG5lZWQgZXhwbGljaXQgcGF0aHMgc3VjaCBhcyBmaWVsZHM6IHsgY2hpbGRJZDogWydyZXN1bHQuc2VjcmV0J10gfS5cbiAqIFZhbHVlcyBhcmUgbm90IHNjYW5uZWQuIExpdmUgZXhlY3V0aW9uIGlucHV0cyBhbmQgcmV0dXJuIHZhbHVlcyBzdGF5IHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93UnVuRXZlbnQge1xuICAvKiogUmV0YWluZWQgaW5wdXQgYWZ0ZXIgdmFsaWRhdGlvbiAoYG9uUnVuU3RhcnRgKSBvciByZXRhaW5lZCBjaGFydCByZXR1cm5cbiAgICogIChgb25SdW5FbmRgKSwgdW5kZXIgdGhlIGtleS9wYXRoIGNvbnRyYWN0IGFib3ZlLiBVbmRlZmluZWQgaWYgbmVpdGhlci4gKi9cbiAgcGF5bG9hZD86IHVua25vd247XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xufVxuXG4vKipcbiAqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25SdW5GYWlsZWQg4oCUIHRoZSBURVJNSU5BTCBmYWlsdXJlIGJvdW5kYXJ5XG4gKiBmb3IgYSB0b3AtbGV2ZWwgcnVuLiBNaXJyb3Igb2YgYG9uUnVuRW5kYCBmb3IgdGhlIGVycm9yIHBhdGg6IGl0IGZpcmVzXG4gKiBvbmNlLCBkdXJpbmcgdHJhdmVyc2FsLCB3aGVuIHRoZSBydW4gdGhyb3dzIGEgbm9uLXBhdXNlIGVycm9yLCBiZWZvcmVcbiAqIHRoZSBleGNlcHRpb24gcHJvcGFnYXRlcy4gQ2FycmllcyB0aGUgc3RydWN0dXJlZCBlcnJvciAoZmllbGQtbGV2ZWxcbiAqIGlzc3VlcywgY29kZXMpIHJhdGhlciB0aGFuIGEgZmxhdHRlbmVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93UnVuRmFpbGVkRXZlbnQge1xuICAvKiogU3RydWN0dXJlZCBkZXRhaWxzIG9mIHRoZSBlcnJvciB0aGF0IHRlcm1pbmF0ZWQgdGhlIHJ1bi4gKi9cbiAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbn1cblxuLyoqXG4gKiBGbG93UmVjb3JkZXIg4oCUIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgY29udHJvbCBmbG93IGV2ZW50cy5cbiAqXG4gKiBNaXJyb3JzIHRoZSBzY29wZS1sZXZlbCBTY29wZVJlY29yZGVyIHBhdHRlcm4gZm9yIHRoZSBlbmdpbmUgbGF5ZXIuXG4gKiBBbGwgbWV0aG9kcyBhcmUgb3B0aW9uYWwg4oCUIGltcGxlbWVudCBvbmx5IHRoZSBob29rcyB5b3UgbmVlZC5cbiAqIFJlY29yZGVycyBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGluIGF0dGFjaG1lbnQgb3JkZXIuXG4gKiBJZiBhIHJlY29yZGVyIHRocm93cywgdGhlIGVycm9yIGlzIGNhdWdodCBhbmQgc3dhbGxvd2VkOyBleGVjdXRpb24gY29udGludWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBtZXRyaWNzUmVjb3JkZXI6IEZsb3dSZWNvcmRlciA9IHtcbiAqICAgaWQ6ICdtZXRyaWNzJyxcbiAqICAgb25Mb29wOiAoZXZlbnQpID0+IHJlY29yZE1ldHJpYygnbG9vcC5pdGVyYXRpb24nLCBldmVudC5pdGVyYXRpb24pLFxuICogICBvbkRlY2lzaW9uOiAoZXZlbnQpID0+IHJlY29yZE1ldHJpYygnZGVjaXNpb24nLCBldmVudC5jaG9zZW4pLFxuICogfTtcbiAqIGV4ZWN1dG9yLmF0dGFjaEZsb3dSZWNvcmRlcihtZXRyaWNzUmVjb3JkZXIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgb25TdGFnZUV4ZWN1dGVkPyhldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkO1xuICBvbk5leHQ/KGV2ZW50OiBGbG93TmV4dEV2ZW50KTogdm9pZDtcbiAgb25EZWNpc2lvbj8oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZDtcbiAgb25Gb3JrPyhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQ7XG4gIG9uU2VsZWN0ZWQ/KGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd0VudHJ5PyhldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd0V4aXQ/KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIGEgZHluYW1pYyBzdWJmbG93IGlzIHJlZ2lzdGVyZWQgZHVyaW5nIHRyYXZlcnNhbC4gKi9cbiAgb25TdWJmbG93UmVnaXN0ZXJlZD8oZXZlbnQ6IEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50KTogdm9pZDtcbiAgb25Mb29wPyhldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQ7XG4gIG9uQnJlYWs/KGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQ7XG4gIG9uRXJyb3I/KGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSBwZXIgZmFpbGVkIGF0dGVtcHQgdGhhdCBXSUxMIGJlIHJldHJpZWQsIGZvciBzdGFnZXMgY2FycnlpbmcgYVxuICAgKiBkZWNsYXJlZCBgcmV0cnlgIHBvbGljeS4gVGhlIGZpbmFsIGZhaWx1cmUgYXJyaXZlcyB2aWEgYG9uRXJyb3JgIGluc3RlYWQsXG4gICAqIHNvIGEgc3RhZ2UgbmV2ZXIgcmVwb3J0cyB0aGUgc2FtZSBmYWlsdXJlIHR3aWNlLiBTZWVcbiAgICoge0BsaW5rIEZsb3dTdGFnZVJldHJ5RXZlbnR9IGZvciB0aGUgZXhhY3QgZXZlbnQgYXJpdGhtZXRpYy5cbiAgICovXG4gIG9uU3RhZ2VSZXRyeT8oZXZlbnQ6IEZsb3dTdGFnZVJldHJ5RXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBmb3JrIGNoaWxkJ3MgZXJyb3IgaXMgY2xhc3NpZmllZCBhcyB0aHJvdHRsaW5nIGJ5IHRoZVxuICAgKiBleGVjdXRvcidzIGB0aHJvdHRsaW5nRXJyb3JDaGVja2VyYCDigJQgc2VlIHtAbGluayBGbG93VGhyb3R0bGVkRXZlbnR9LlxuICAgKi9cbiAgb25UaHJvdHRsZWQ/KGV2ZW50OiBGbG93VGhyb3R0bGVkRXZlbnQpOiB2b2lkO1xuICBvblBhdXNlPyhldmVudDogRmxvd1BhdXNlRXZlbnQpOiB2b2lkO1xuICBvblJlc3VtZT8oZXZlbnQ6IEZsb3dSZXN1bWVFdmVudCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSBwZXIgdG9wLWxldmVsIGBleGVjdXRvci5ydW4oKWAgQkVGT1JFIHRyYXZlcnNhbCBiZWdpbnMuXG4gICAqIENhcnJpZXMgYGV2ZW50LnBheWxvYWQgPSBydW4oe2lucHV0fSlgLiBTdWJmbG93LXRyYXZlcnNlcnMgZG9uJ3QgZmlyZSBpdC5cbiAgICovXG4gIG9uUnVuU3RhcnQ/KGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgIEFGVEVSIHRyYXZlcnNhbCBjb21wbGV0ZXNcbiAgICogY2xlYW5seS4gQ2FycmllcyBgZXZlbnQucGF5bG9hZCA9IGNoYXJ0J3MgcmV0dXJuIHZhbHVlYC4gTk9UIGZpcmVkIG9uXG4gICAqIHBhdXNlICh0aGUgcnVuIGRpZG4ndCBlbmQpIG9yIHVuY2F1Z2h0IGVycm9yLlxuICAgKi9cbiAgb25SdW5FbmQ/KGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgIHdoZW4gdGhlIHJ1biB0aHJvd3MgYVxuICAgKiBub24tcGF1c2UgZXJyb3IsIEJFRk9SRSB0aGUgZXhjZXB0aW9uIHByb3BhZ2F0ZXMuIFRoZSBURVJNSU5BTFxuICAgKiBjb3VudGVycGFydCB0byBgb25SdW5FbmRgIOKAlCBsZXRzIGEgbW9uaXRvciBjbG9zZSB0aGUgcnVuIGJvdW5kYXJ5IG9uXG4gICAqIGZhaWx1cmUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuIE5PVCBmaXJlZCBvbiBwYXVzZS5cbiAgICovXG4gIG9uUnVuRmFpbGVkPyhldmVudDogRmxvd1J1bkZhaWxlZEV2ZW50KTogdm9pZDtcbiAgLyoqIENhbGxlZCBiZWZvcmUgZWFjaCBydW4gdG8gcmVzZXQgcGVyLXJ1biBzdGF0ZS4gSW1wbGVtZW50IGZvciBzdGF0ZWZ1bCByZWNvcmRlcnMuICovXG4gIGNsZWFyPygpOiB2b2lkO1xuICAvKiogT3B0aW9uYWw6IGV4cG9zZSBjb2xsZWN0ZWQgZGF0YSBmb3IgaW5jbHVzaW9uIGluIHNuYXBzaG90cy4gKi9cbiAgdG9TbmFwc2hvdD8oKTogaW1wb3J0KCcuLi8uLi9yZWNvcmRlci9zbmFwc2hvdC5qcycpLlJlY29yZGVyQnVuZGxlO1xufVxuIl19
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSUNvbnRyb2xGbG93TmFycmF0aXZlIOKAlCBJbnRlcmZhY2UgZm9yIGNvbnRyb2wgZmxvdyBuYXJyYXRpdmUgZ2VuZXJhdGlvbi5cbiAqXG4gKiBDYXB0dXJlcyBGTE9XIGV2ZW50cyBkdXJpbmcgdHJhdmVyc2FsOiBkZWNpc2lvbnMsIGZvcmtzLCBsb29wcywgc3ViZmxvd3MuXG4gKiBDb21wbGVtZW50YXJ5IHRvIHNjb3BlL3JlY29yZGVycy9OYXJyYXRpdmVSZWNvcmRlciB3aGljaCBjYXB0dXJlcyBEQVRBIGV2ZW50cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBSdW5Db3JyZWxhdGlvbiB9IGZyb20gJy4uLy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uLy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuLi8uLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcbmltcG9ydCB0eXBlIHsgVGVybWluYWxGYWlsdXJlQ29udGV4dCB9IGZyb20gJy4uLy4uL2Vycm9ycy90ZXJtaW5hbEZhaWx1cmUuanMnO1xuXG4vKipcbiAqXG4gKiBVc2VzIE51bGwgT2JqZWN0IHBhdHRlcm46IE51bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciBzYXRpc2ZpZXMgdGhpc1xuICogaW50ZXJmYWNlIHdpdGggZW1wdHkgbWV0aG9kcyBmb3IgemVyby1jb3N0IGRpc2FibGVkIHBhdGguXG4gKi9cblxuLyoqXG4gKiBUaGUga2luZCBvZiBzdGFnZSB0aGF0IGNvbXBsZXRlZC4gTGV0cyBjb25zdW1lcnMgcm91dGUgdW5pZm9ybVxuICogXCJkaWQgdGhpcyBzdGFnZSBleGVjdXRlXCIgaGFuZGxpbmcgd2l0aG91dCBhIHNpZGUtdGFibGUgbG9va3VwIGludG9cbiAqIHRoZSBjaGFydCBzcGVjLiBSZXF1aXJlZCBvbiBldmVyeSBgb25TdGFnZUV4ZWN1dGVkYCBldmVudCBzaW5jZVxuICogcHJvcG9zYWwgIzAwMyB1bmlmaWVkIHRoZSBldmVudCB0byBmaXJlIGZvciBBTEwgc3RhZ2Uga2luZHMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlVHlwZSA9ICdsaW5lYXInIHwgJ2RlY2lkZXInIHwgJ2ZvcmsnIHwgJ3NlbGVjdG9yJyB8ICdzdWJmbG93LW1vdW50JztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udHJvbEZsb3dOYXJyYXRpdmUge1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gYSBzdGFnZSBjb21wbGV0ZXMgaXRzIG1haW4gd29yay4gRmlyZXMgZm9yIEFMTCBzdGFnZVxuICAgKiBraW5kcyAoYCdsaW5lYXInYCwgYCdkZWNpZGVyJ2AsIGAnZm9yaydgLCBgJ3NlbGVjdG9yJ2AsIGAnc3ViZmxvdy1tb3VudCdgKVxuICAgKiBBRlRFUiB0aGUgY29ycmVzcG9uZGluZyBzcGVjaWFsaXplZCBldmVudCAoYG9uRGVjaXNpb25gLCBgb25Gb3JrYCxcbiAgICogYG9uU2VsZWN0ZWRgLCBgb25TdWJmbG93RW50cnlgKS4gRm9yIGxpbmVhciBzdGFnZXMsIGZpcmVzIGFmdGVyXG4gICAqIHRoZSBzdGFnZSBmdW5jdGlvbiByZXR1cm5zLlxuICAgKlxuICAgKiBDb25zdW1lcnMgdHJhY2tpbmcgXCJkaWQgdGhpcyBzdGFnZSBydW4/XCIgdXNlIHRoaXMgZXZlbnQgdW5pZm9ybWx5XG4gICAqIGFuZCBzd2l0Y2ggb24gYHN0YWdlVHlwZWAgZm9yIGtpbmQtc3BlY2lmaWMgd29yay5cbiAgICovXG4gIG9uU3RhZ2VFeGVjdXRlZChcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHRyYXZlcnNhbENvbnRleHQ6IFRyYXZlcnNhbENvbnRleHQgfCB1bmRlZmluZWQsXG4gICAgc3RhZ2VUeXBlOiBTdGFnZVR5cGUsXG4gICk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCBvbiBsaW5lYXIgY29udGludWF0aW9uIGZyb20gb25lIHN0YWdlIHRvIHRoZSBuZXh0LiAqL1xuICBvbk5leHQoZnJvbVN0YWdlOiBzdHJpbmcsIHRvU3RhZ2U6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gYSBkZWNpZGVyIHNlbGVjdHMgYSBicmFuY2guIE1vc3QgdmFsdWFibGUgZm9yIExMTSBjb250ZXh0LiAqL1xuICBvbkRlY2lzaW9uKFxuICAgIGRlY2lkZXJOYW1lOiBzdHJpbmcsXG4gICAgY2hvc2VuQnJhbmNoOiBzdHJpbmcsXG4gICAgcmF0aW9uYWxlPzogc3RyaW5nLFxuICAgIGRlY2lkZXJEZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBldmlkZW5jZT86IERlY2lzaW9uRXZpZGVuY2UsXG4gICk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGEgZm9yayBleGVjdXRlcyBhbGwgY2hpbGRyZW4gaW4gcGFyYWxsZWwuICovXG4gIG9uRm9yayhwYXJlbnRTdGFnZTogc3RyaW5nLCBjaGlsZE5hbWVzOiBzdHJpbmdbXSwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIHNlbGVjdG9yIHBpY2tzIGEgc3Vic2V0IG9mIGNoaWxkcmVuLiAqL1xuICBvblNlbGVjdGVkKFxuICAgIHBhcmVudFN0YWdlOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWROYW1lczogc3RyaW5nW10sXG4gICAgdG90YWxDb3VudDogbnVtYmVyLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGV2aWRlbmNlPzogU2VsZWN0aW9uRXZpZGVuY2UsXG4gICk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGVudGVyaW5nIGEgc3ViZmxvdyAobmVzdGVkIGNvbnRleHQgYm91bmRhcnkpLiAqL1xuICBvblN1YmZsb3dFbnRyeShcbiAgICBzdWJmbG93TmFtZTogc3RyaW5nLFxuICAgIHN1YmZsb3dJZD86IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBtYXBwZWRJbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBleGl0aW5nIGEgc3ViZmxvdy4gKi9cbiAgb25TdWJmbG93RXhpdChcbiAgICBzdWJmbG93TmFtZTogc3RyaW5nLFxuICAgIHN1YmZsb3dJZD86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBvdXRwdXRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkO1xuXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGR5bmFtaWMgc3ViZmxvdyBpcyByZWdpc3RlcmVkIGR1cmluZyB0cmF2ZXJzYWwuICovXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoc3ViZmxvd0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHNwZWNTdHJ1Y3R1cmU/OiB1bmtub3duKTogdm9pZDtcblxuICAvKiogQ2FsbGVkIG9uIGxvb3AgaXRlcmF0aW9uIChiYWNrLWVkZ2UgdHJhdmVyc2FsKS4gKi9cbiAgb25Mb29wKHRhcmdldFN0YWdlOiBzdHJpbmcsIGl0ZXJhdGlvbjogbnVtYmVyLCBkZXNjcmlwdGlvbj86IHN0cmluZywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIHN0YWdlIHRyaWdnZXJzIGJyZWFrIChlYXJseSB0ZXJtaW5hdGlvbikuXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBPcHRpb25hbCBzdHJpbmcgcGFzc2VkIHRvIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIEBwYXJhbSBwcm9wYWdhdGVkRnJvbVN1YmZsb3cgLSBXaGVuIHNldCwgdGhpcyBicmVhayB3YXMgcmFpc2VkIG9uIHRoZVxuICAgKiAgIHBhcmVudCBiZWNhdXNlIGFuIGlubmVyIHN1YmZsb3cgKHRoaXMgaWQpIGJyb2tlIHdpdGggYHByb3BhZ2F0ZUJyZWFrYFxuICAgKiAgIGVuYWJsZWQuIFVzZWQgYnkgcmVjb3JkZXJzIHRvIGRpc3Rpbmd1aXNoIG9yaWdpbmF0aW5nIHZzIHByb3BhZ2F0ZWRcbiAgICogICBicmVha3MgYW5kIHJlbmRlciB0aGVtIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgb25CcmVhayhcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICAgcHJvcGFnYXRlZEZyb21TdWJmbG93Pzogc3RyaW5nLFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhIHN0YWdlIHRocm93cyBhbiBlcnJvciwgd2l0aCBpdHMgU0VSVkVEIGZvcm06IGZvciBhIHN0YWdlJ3Mgb3duIGZhaWx1cmUgdGhhdCBpc1xuICAgKiBgUmVkYWN0aW9uUnVsZS5yZXRhaW5TdGFnZUVycm9yYCAodGhlIGRpYWdub3N0aWMgcG9saWN5IGFwcGxpZWQgb25jZSksIGVsc2V3aGVyZSBgZXh0cmFjdEVycm9ySW5mb2AuXG4gICAqL1xuICBvbkVycm9yKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgIHN0cnVjdHVyZWRFcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIGF0IHRoZSBFTkQgb2YgZXZlcnkgYXR0ZW1wdCAoMTAuMSkg4oCUIGV2ZXJ5IG91dGNvbWUsIHdpdGggdGhlXG4gICAqIGF0dGVtcHQncyB7QGxpbmsgQXR0ZW1wdFJlY29yZH0gKHRpbWluZywgb3V0Y29tZSwgY2F0ZWdvcnksIHRoZVxuICAgKiByZXRyeS1vci1zdG9wIGRlY2lzaW9uKTogYSBzdGFnZSdzIG93biAoYHJlY29yZC5raW5kID09PSAnc3RhZ2UnYCwgdW5kZXIgYVxuICAgKiByZXRyeSBwb2xpY3ksIGEgYHRpbWVvdXRNc2Agb3IgYSBydW4gZGVhZGxpbmUpLCBhbmQgdGhlIGNhbGxzIGl0IG1ha2VzXG4gICAqIChgJ2NhbGwnYCwgYHNjb3BlLiRjYWxsYCkgYW5kIG91dHNpZGUgYXR0ZW1wdHMgaXQgcmVwb3J0cyAoYCdvYnNlcnZlZCdgKVxuICAgKiBkdXJpbmcgdGhlIHN0YWdlIChQMikuIEEgc3RhZ2UgYXR0ZW1wdCBmaXJlcyBiZWZvcmUgYG9uU3RhZ2VSZXRyeWAgd2hlbiBpdFxuICAgKiBpcyByZXRyaWVkLCBhbmQgYmVmb3JlIGBvbkVycm9yYCAvIGBvblN0YWdlRXhlY3V0ZWRgIGZvciB0aGUgbGFzdC5cbiAgICogYHN0cnVjdHVyZWRFcnJvcmAgaXMgdGhlIGF0dGVtcHQncyBzZXJ2ZWQgZXJyb3IgKGByYXdgIGluY2x1ZGVkIHVubGVzcyB0aGVcbiAgICogcG9saWN5IG1hc2tlZCBpdDsgbmV2ZXIgZm9yIGFuIG9ic2VydmVkIGF0dGVtcHQpOyBhYnNlbnQgZm9yIGEgc3VjY2VzcyBvclxuICAgKiBhIHBhdXNlLlxuICAgKlxuICAgKiBFdmVudCBhcml0aG1ldGljOiBvbmUgcGVyIGF0dGVtcHQg4oCUIGZvciBhIHN0YWdlLCB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIGl0XG4gICAqIG1hZGUgcGx1cyBvbmUgcGVyIGNhbGwgb3Igb2JzZXJ2ZWQgYXR0ZW1wdCAoZmlsdGVyIG9uIGByZWNvcmQua2luZGApLlxuICAgKi9cbiAgb25BdHRlbXB0KFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICByZWNvcmQ6IEF0dGVtcHRSZWNvcmQsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvIHwgdW5kZWZpbmVkLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBhbiBhdHRlbXB0IGF0IGEgc3RhZ2Ugd2l0aCBhIGRlY2xhcmVkIGByZXRyeWAgcG9saWN5IGZhaWxlZFxuICAgKiBBTkQgYW5vdGhlciBhdHRlbXB0IHdpbGwgcnVuLiBGaXJlcyBhZnRlciB0aGF0IGF0dGVtcHQncyBgb25BdHRlbXB0YCxcbiAgICogYWZ0ZXIgaXRzIHN0YWdlZCB3cml0ZXMgYXJlIGRpc2NhcmRlZCBhbmQgQkVGT1JFIHRoZSBiYWNrb2ZmIHdhaXQsIHNvIGFcbiAgICogbGl2ZSBtb25pdG9yIGxlYXJucyBcInJldHJ5aW5nIGluIDUwMCBtc1wiIHdoZW4gdGhlIGRlY2lzaW9uIGlzIG1hZGUsIG5vdFxuICAgKiBhZnRlciB0aGUgd2FpdC5cbiAgICpcbiAgICogRXZlbnQgYXJpdGhtZXRpYzogYW4gZXhoYXVzdGVkIHBvbGljeSBmaXJlcyBgYXR0ZW1wdHMgLSAxYCBvZiB0aGVzZSBhbmRcbiAgICogdGhlbiBvbmUgYG9uRXJyb3JgOyBhIGByZXRyeU9uYCB0aGF0IGRlY2xpbmVzIGZpcmVzIFpFUk8gb2YgdGhlc2UgYW5kIG9uZVxuICAgKiBgb25FcnJvcmAuIFRoZSBmaW5hbCBhdHRlbXB0IG5ldmVyIGZpcmVzIHRoaXMgZXZlbnQuXG4gICAqL1xuICBvblN0YWdlUmV0cnkoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2VJZDogc3RyaW5nLFxuICAgIGF0dGVtcHQ6IG51bWJlcixcbiAgICBtYXhBdHRlbXB0czogbnVtYmVyLFxuICAgIGRlbGF5TXM6IG51bWJlcixcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgZm9yayBjaGlsZCBmYWlsZWQgYW5kIHRoZSBydW4ncyBgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcmBcbiAgICogY2xhc3NpZmllZCBpdHMgZXJyb3IgYXMgdGhyb3R0bGluZyAoOS4zOS4wKS4gVGhlIGNoaWxkJ3MgZmFpbHVyZSB0YWtlc1xuICAgKiBpdHMgb3JkaW5hcnkgcGF0aCB0b287IHRoaXMgb25seSBuYW1lcyBpdCBhcyB0aHJvdHRsaW5nLlxuICAgKi9cbiAgb25UaHJvdHRsZWQ/KFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQ7XG5cbiAgLyoqIENhbGxlZCB3aGVuIGEgcGF1c2FibGUgc3RhZ2UgcGF1c2VzIGV4ZWN1dGlvbi4gKi9cbiAgb25QYXVzZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgcGF1c2VEYXRhOiB1bmtub3duLFxuICAgIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZDtcblxuICAvKiogQ2FsbGVkIHdoZW4gYSBwYXVzZWQgc3RhZ2UgaXMgcmVzdW1lZC4gKi9cbiAgb25SZXN1bWUoc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlSWQ6IHN0cmluZywgaGFzSW5wdXQ6IGJvb2xlYW4sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgLCBCRUZPUkUgdGhlIGZpcnN0IHN0YWdlIGV4ZWN1dGVzLlxuICAgKiBgaW5wdXRgIGlzIHRoZSByZXRhaW5lZCBmb3JtIG9mIGBydW4oe2lucHV0fSlgIGFmdGVyIHNjaGVtYSB2YWxpZGF0aW9uO1xuICAgKiB0aGUgcnVuJ3Mga2V5L3BhdGggcmVkYWN0aW9uIGFwcGxpZXMgYmVmb3JlIGRpc3BhdGNoLiBTZWUge0BsaW5rIEZsb3dSdW5FdmVudH0uXG4gICAqIFN1YmZsb3ctdHJhdmVyc2VycyBkbyBOT1QgZmlyZSB0aGlzIGV2ZW50IOKAlCB0aGV5IGZpcmUgYG9uU3ViZmxvd0VudHJ5YC5cbiAgICovXG4gIG9uUnVuU3RhcnQoaW5wdXQ6IHVua25vd24sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgLCBBRlRFUiB0aGUgbGFzdCBzdGFnZSBjb21taXRzLlxuICAgKiBgb3V0cHV0YCBpcyB0aGUgcmV0YWluZWQgZm9ybSBvZiB0aGUgY2hhcnQncyByZXR1cm4uIE5PVCBmaXJlZCBvbiBwYXVzZSAodGhlIHJ1blxuICAgKiBkaWRuJ3QgZW5kOyBpdCBzdXNwZW5kZWQpIG9yIG9uIHVuY2F1Z2h0IGVycm9yLiBTdWJmbG93LXRyYXZlcnNlcnMgZG9cbiAgICogTk9UIGZpcmUgdGhpcyBldmVudCDigJQgdGhleSBmaXJlIGBvblN1YmZsb3dFeGl0YC5cbiAgICovXG4gIG9uUnVuRW5kKG91dHB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb25jZSBwZXIgdG9wLWxldmVsIGBleGVjdXRvci5ydW4oKWAgd2hlbiB0cmF2ZXJzYWwgdGhyb3dzIGFcbiAgICogTk9OLXBhdXNlIGVycm9yLCBCRUZPUkUgdGhlIGV4Y2VwdGlvbiBwcm9wYWdhdGVzIHRvIGBydW4oKWAncyBjYWxsZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFRFUk1JTkFMIGNvdW50ZXJwYXJ0IHRvIGBvblJ1bkVuZGAg4oCUIGl0IGNsb3NlcyB0aGUgcnVuXG4gICAqIGJvdW5kYXJ5IHN5bW1ldHJpY2FsbHkgc28gZXZlcnkgYG9uUnVuU3RhcnRgIGlzIGZvbGxvd2VkIGJ5IGV4YWN0bHlcbiAgICogb25lIG9mIGBvblJ1bkVuZGAgKGNsZWFuKSBvciBgb25SdW5GYWlsZWRgIChlcnJvcikuIFdpdGhvdXQgaXQsIGFcbiAgICogbGl2ZSBtb25pdG9yIHNlZXMgYG9uUnVuU3RhcnRgIHRoZW4gc2lsZW5jZSBvbiBhIGZhaWxlZCBydW4gYW5kIGNhbid0XG4gICAqIHRlbGwgXCJzdGlsbCBydW5uaW5nXCIgZnJvbSBcImNyYXNoZWQuXCJcbiAgICpcbiAgICogRXJyb3JzIFNUSUxMIHRocm93IOKAlCB0aGlzIGlzIHRoZSBvYnNlcnZhYmxlIHRlcm1pbmFsIHNpZ25hbCwgbm90IGFcbiAgICogcmVjb3ZlcnkgbWVjaGFuaXNtIChubyByb3V0aW5nLCBubyBlcnJvci1zdWJmbG93KS4gUGF1c2UgaXMgTk9UIGFuXG4gICAqIGVycm9yLCBzbyBpdCBkb2VzIG5vdCBmaXJlIHRoaXMuIFN1YmZsb3ctdHJhdmVyc2VycyBkbyBOT1QgZmlyZSBpdDtcbiAgICogdGhlaXIgZXJyb3JzIHByb3BhZ2F0ZSB0byB0aGUgcGFyZW50IGFuZCBzdXJmYWNlIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqL1xuICBvblJ1bkZhaWxlZChlcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsIGZhaWx1cmU/OiBUZXJtaW5hbEZhaWx1cmVDb250ZXh0KTogdm9pZDtcblxuICAvKiogUmV0dXJucyBhY2N1bXVsYXRlZCBuYXJyYXRpdmUgc2VudGVuY2VzIGluIGV4ZWN1dGlvbiBvcmRlci4gKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUcmF2ZXJzYWxDb250ZXh0IOKAlCByZWFkLW9ubHkgZXhlY3V0aW9uIGNvbnRleHQgZnJvbSB0aGUgdHJhdmVyc2VyLlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRyYXZlcnNhbCBjb250ZXh0IGF0dGFjaGVkIHRvIGV2ZXJ5IEZsb3dSZWNvcmRlciBldmVudC5cbiAqIENyZWF0ZWQgYnkgdGhlIHRyYXZlcnNlciBkdXJpbmcgREZTLCBwYXNzZWQgdG8gcmVjb3JkZXJzIGFzIHJlYWQtb25seSBkYXRhLlxuICogRW5hYmxlcyByZWNvcmRlcnMgdG8gYnVpbGQgdHJlZXMsIGdyb3VwIGJ5IHN1YmZsb3csIGFuZCBjb3JyZWxhdGUgZXZlbnRzXG4gKiB3aXRob3V0IG1haW50YWluaW5nIHRoZWlyIG93biBzdGFja3Mgb3IgcG9zdC1wcm9jZXNzaW5nLlxuICpcbiAqIExpa2UgT3BlblRlbGVtZXRyeSdzIHNwYW4gY29udGV4dDogc3RhZ2VJZCArIHBhcmVudFN0YWdlSWQgZm9ybSBhIHRyZWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhdmVyc2FsQ29udGV4dCB7XG4gIC8qKlxuICAgKiBQZXItYGV4ZWN1dG9yLnJ1bigpYCBpZGVudGlmaWVyLiBHZW5lcmF0ZWQgb25jZSBhdCB0aGUgc3RhcnQgb2YgZXZlcnlcbiAgICogYHJ1bigpYCAoYW5kIGFnYWluIG9uIGByZXN1bWUoKWApOyBzaGFyZWQgYnkgZXZlcnkgZXZlbnQgb2YgdGhhdCBydW47XG4gICAqIGRpZmZlcnMgYWNyb3NzIGNvbnNlY3V0aXZlIHJ1bnMgb2YgdGhlIHNhbWUgZXhlY3V0b3IuXG4gICAqXG4gICAqIEZvcm1hdDogYCR7RGF0ZS5ub3coKX0tJHtjb3VudGVyfWAg4oCUIHNvcnRhYmxlIGxleGljb2dyYXBoaWNhbGx5ICg9PVxuICAgKiBjaHJvbm9sb2dpY2FsbHkgZm9yIHJ1bnMgPiAxbXMgYXBhcnQpLiBQcm9jZXNzLWxvY2FsIOKAlCBmb3IgY3Jvc3MtXG4gICAqIHByb2Nlc3MgY29ycmVsYXRpb24gdXNlIGBnZXRFbnYoKS50cmFjZUlkYCAoY29uc3VtZXItc3VwcGxpZWQpLlxuICAgKlxuICAgKiBSZWNvcmRlcnMgdGhhdCBhY2N1bXVsYXRlIHN0YXRlIGFjcm9zcyBydW5zIChmb3JrIGJvb2trZWVwaW5nLFxuICAgKiBzaWJsaW5nLWhhbmRvZmYgc3RhdGUsIGV0Yy4pIGRldGVjdCBcIm5ldyBydW5cIiB2aWFcbiAgICogYGV2ZW50LnRyYXZlcnNhbENvbnRleHQucnVuSWQgIT09IHRoaXMubGFzdFJ1bklkYCBhbmQgcmVzZXRcbiAgICogdHJhbnNpZW50IGJvb2trZWVwaW5nLiBSZWNvcmRlcnMgdGhhdCBkb24ndCBjYXJlIGFib3V0IHNjb3BpbmdcbiAgICogaWdub3JlIHRoZSBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgc3RhZ2UgaWRlbnRpZmllciBmcm9tIHRoZSBidWlsZGVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXguXG4gICAqICBDb3VudGVyIHJlc2V0cyBwZXIgZXhlY3V0b3Ig4oCUIGNvbWJpbmUgd2l0aCBgcnVuSWRgIGZvciBnbG9iYWxseSB1bmlxdWUgc3RlcCBrZXlzLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXJlbnQgc3RhZ2UgSUQg4oCUIHdhbGsgdXAgdG8gcmVjb25zdHJ1Y3QgdGhlIHRyZWUuIFVuZGVmaW5lZCBhdCByb290LiAqL1xuICByZWFkb25seSBwYXJlbnRTdGFnZUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhcmVudCBFWEVDVVRJT04gc3RlcCdzIHJ1bnRpbWVTdGFnZUlkIOKAlCB0aGUgcnVudGltZSB0d2luIG9mXG4gICAqIGBwYXJlbnRTdGFnZUlkYCAoUkZDLTAwMyBEMSkuIFdhbGsgdXAgdG8gcmVjb25zdHJ1Y3QgdGhlIHJ1bnRpbWVcbiAgICogYW5jZXN0b3IgY2hhaW47IGxvb3AgcmUtZW50cmllcyBzdGF5IHVuYW1iaWd1b3VzIGJlY2F1c2UgcnVudGltZSBpZHNcbiAgICogKGBzdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCkgZGlmZmVyIHBlciBpdGVyYXRpb24gZXZlbiB3aGVuIHN0YWdlIGlkc1xuICAgKiByZXBlYXQuIENyb3NzZXMgc3ViZmxvdyBib3VuZGFyaWVzOiB0aGUgZmlyc3Qgc3RhZ2UgaW5zaWRlIGEgc3ViZmxvd1xuICAgKiBwb2ludHMgYXQgdGhlIE1PVU5UIHN0YWdlJ3MgcnVudGltZVN0YWdlSWQgaW4gdGhlIHBhcmVudCB0cmF2ZXJzZXIuXG4gICAqIFVuZGVmaW5lZCBvbmx5IGF0IHRoZSBmaXJzdCBzdGFnZSBvZiB0aGUgdG9wLWxldmVsIGNoYXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBTdWJmbG93IElEIHdoZW4gaW5zaWRlIGEgc3ViZmxvdy4gVW5kZWZpbmVkIGF0IHJvb3QgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZD86IHN0cmluZztcbiAgLyoqIEZ1bGwgc3ViZmxvdyBwYXRoIGZvciBuZXN0ZWQgc3ViZmxvd3MgKGUuZy4sIFwic2Ytb3V0ZXIvc2YtaW5uZXJcIikuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogU3ViZmxvdyBuZXN0aW5nIGRlcHRoIG9mIHRoZSBzdGFnZSdzIEFERFJFU1M6IGhvdyBtYW55IHN1YmZsb3cgc2VnbWVudHMgaXRzXG4gICAqIGBydW50aW1lU3RhZ2VJZGAgY2FycmllcyAoMCA9IHRvcCBsZXZlbCwgMSA9IGluc2lkZSBhIHN1YmZsb3cgb3IgYVxuICAgKiBgcGFyYWxsZWxGb3JFYWNoYCBicmFuY2gsIDIgPSBhIHN1YmZsb3cgaW5zaWRlIHRoYXQsIOKApikuIE9uZSBtZWFuaW5nIG9uXG4gICAqIGV2ZXJ5IHN0YW1wIOKAlCBzdGFnZSBldmVudHMsIHRoZSBydW4tYm91bmRhcnkgcm9vdCAoMCkgYW5kIGBvblJlc3VtZWBcbiAgICogKDkuMzcuMDsgdW50aWwgOS4zNi4wIHN0YWdlIGV2ZW50cyBzdGFtcGVkIHRoZSBwYXJlbnQtY2hhaW4gbGVuZ3RoIG9mIHRoZVxuICAgKiBzdGFnZSdzIGNvbnRleHQgaW5zdGVhZCkuXG4gICAqL1xuICByZWFkb25seSBkZXB0aDogbnVtYmVyO1xuICAvKipcbiAgICogSG93IG1hbnkgdGltZXMgdGhpcyBzdGFnZSBoYXMgZXhlY3V0ZWQgQkVGT1JFIGluIHRoaXMgcnVuIOKAlCB0aGUgbG9vcFxuICAgKiBpdGVyYXRpb24gY291bnQgd2hlbiBhIG5vZGUgaXMgcmV2aXNpdGVkIChlLmcuIHZpYSBgbG9vcFRvYCkuIEFic2VudCBvbiB0aGVcbiAgICogZmlyc3QgZXhlY3V0aW9uOyBgMWAgb24gdGhlIGZpcnN0IGxvb3AtYmFjaywgYDJgIG9uIHRoZSBuZXh0LCDigKYgKGkuZS5cbiAgICogYHZpc2l0Q291bnQgLSAxYCkuIFJ1bi1zY29wZWQgKHJlc2V0cyBlYWNoIGBydW4oKWAvYHJlc3VtZSgpYCkgYW5kIG1vbm90b25pY1xuICAgKiBhY3Jvc3Mgc3ViZmxvdyByZS1tb3VudHMuIFBvcHVsYXRlZCBmb3IgZXZlcnkgc3RhZ2Uga2luZC4gTWlycm9ycyB0aGVcbiAgICogbmFycmF0aXZlIHJlY29yZGVyJ3MgXCJwYXNzIE5cIiBjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IGxvb3BJdGVyYXRpb24/OiBudW1iZXI7XG4gIC8qKiBGb3JrIGJyYW5jaCBJRCB3aGVuIGluc2lkZSBhIHBhcmFsbGVsIG9yIGRlY2lkZXIgYnJhbmNoLiAqL1xuICByZWFkb25seSBmb3JrQnJhbmNoPzogc3RyaW5nO1xuICAvKipcbiAgICogT24gdGhlIGBvblJlc3VtZWAgZXZlbnQgb25seSAoOS4zNy4wKTogdGhlIFBBVVNFRCBleGVjdXRpb24gdGhpcyByZXN1bWVkXG4gICAqIHJ1biBjb250aW51ZXMg4oCUIGEgbGluayBpbiB0aGUgT3BlblRlbGVtZXRyeSBzZW5zZSwgbm90IGEgcGFyZW50LiBBIHJlc3VtZVxuICAgKiBpcyBhIG5ldyBgcnVuSWRgLCBzbyB0aGUgcGF1c2VkIGAocnVuSWQsIHJ1bnRpbWVTdGFnZUlkKWAgY2Fubm90IGJlIGFcbiAgICogcGFyZW50IG9mIGFueXRoaW5nIGluIGl0OyBpdCBpcyBuYW1lZCBoZXJlIGluc3RlYWQuIEFic2VudCB3aGVuIHRoZVxuICAgKiBjaGVja3BvaW50IHByZWRhdGVzIDkuMzcuMCAoaXQgZGlkIG5vdCByZWNvcmQgdGhlIHBhdXNlZCBleGVjdXRpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdW1lZEZyb20/OiBSZXN1bWVMaW5rO1xuICAvKipcbiAgICogVGhlIHJ1bidzIGNvcnJlbGF0aW9uICgxMC4xKSDigJQgYGVudi50cmFjZXBhcmVudGAsIG9yIGBlbnYudHJhY2VJZGAgKyBgZW52Lm9wZXJhdGlvbklkYCwgcmVzb2x2ZWQgb25jZSBwZXJcbiAgICogbGVnLiBUaGUgU0FNRSBmcm96ZW4gb2JqZWN0LCBieSByZWZlcmVuY2UsIG9uIGV2ZXJ5IHN0YW1wIG9mIHRoZSBsZWcgKHN1YmZsb3dzIGluY2x1ZGVkKSBhbmQgb25cbiAgICogYGdldFNuYXBzaG90KCkuY29ycmVsYXRpb25gLiBBYnNlbnQg4oCUIG5vIGtleSDigJQgd2hlbiB0aGUgZW52IGdpdmVzIG5vbmUuXG4gICAqL1xuICByZWFkb25seSBjb3JyZWxhdGlvbj86IFJ1bkNvcnJlbGF0aW9uO1xufVxuXG4vKipcbiAqIFRoZSBwYXVzZWQgZXhlY3V0aW9uIGEgcmVzdW1lIGNvbnRpbnVlcyDigJQgYFRyYXZlcnNhbENvbnRleHQucmVzdW1lZEZyb21gLlxuICogQm90aCBpZHMgYXJlIHRoZSBQQVVTRUQgcnVuJ3M6IGBydW5JZGAgaXMgdGhhdCBydW4ncywgYHJ1bnRpbWVTdGFnZUlkYCB0aGVcbiAqIGV4ZWN1dGlvbiBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQgKGFzIGl0cyBgb25QYXVzZWAgZXZlbnQgc3RhbXBlZCBpdCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdW1lTGluayB7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZsb3dSZWNvcmRlciDigJQgUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBjb250cm9sIGZsb3cgZXZlbnRzLlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vblN0YWdlRXhlY3V0ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dTdGFnZUV2ZW50IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVHJhdmVyc2FsIGNvbnRleHQgZnJvbSB0aGUgZW5naW5lIOKAlCByZWFkLW9ubHksIHNldCBieSB0cmF2ZXJzZXIuICovXG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xuICAvKipcbiAgICogV2hpY2gga2luZCBvZiBzdGFnZSBjb21wbGV0ZWQuIFRoZSBlbmdpbmUgZmlyZXMgYG9uU3RhZ2VFeGVjdXRlZGBcbiAgICogdW5pZm9ybWx5IGZvciBldmVyeSBzdGFnZSBraW5kIChwcm9wb3NhbCAjMDAzKTsgY29uc3VtZXJzIHJvdXRlIGJ5XG4gICAqIGBzdGFnZVR5cGVgIHdpdGhvdXQgYSBjaGFydC1zcGVjIGxvb2t1cC5cbiAgICovXG4gIHN0YWdlVHlwZTogU3RhZ2VUeXBlO1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vbk5leHQuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dOZXh0RXZlbnQge1xuICBmcm9tOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25EZWNpc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0RlY2lzaW9uRXZlbnQge1xuICBkZWNpZGVyOiBzdHJpbmc7XG4gIGNob3Nlbjogc3RyaW5nO1xuICByYXRpb25hbGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIFN0cnVjdHVyZWQgZGVjaXNpb24gZXZpZGVuY2UgZnJvbSBkZWNpZGUoKSBoZWxwZXIuICovXG4gIGV2aWRlbmNlPzogRGVjaXNpb25FdmlkZW5jZTtcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25Gb3JrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Rm9ya0V2ZW50IHtcbiAgcGFyZW50OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBzdHJpbmdbXTtcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uU2VsZWN0ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dTZWxlY3RlZEV2ZW50IHtcbiAgcGFyZW50OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBzdHJpbmdbXTtcbiAgdG90YWw6IG51bWJlcjtcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKiBTdHJ1Y3R1cmVkIHNlbGVjdGlvbiBldmlkZW5jZSBmcm9tIHNlbGVjdCgpIGhlbHBlci4gKi9cbiAgZXZpZGVuY2U/OiBTZWxlY3Rpb25FdmlkZW5jZTtcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25TdWJmbG93LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93U3ViZmxvd0V2ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2UgdGhpcyB0byBsb29rIHVwIHRoZSBmdWxsIHNwZWMgdmlhIHRoZSBtYW5pZmVzdC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKiogQnVpbGQtdGltZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgc3ViZmxvdyBkb2VzLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKiBNYXBwZWQgaW5wdXQgdmFsdWVzIHNlbnQgSU5UTyB0aGUgc3ViZmxvdyAoZnJvbSBpbnB1dE1hcHBlci9pbnB1dEtleXMpLiBQcmVzZW50IG9uIGVudHJ5IGV2ZW50cy4gKi9cbiAgbWFwcGVkSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFN1YmZsb3cgc2hhcmVkIHN0YXRlIGF0IGV4aXQuIFByZXNlbnQgb24gZXhpdCBldmVudHMuICovXG4gIG91dHB1dFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uU3ViZmxvd1JlZ2lzdGVyZWQgKGR5bmFtaWMgc3ViZmxvdyBhdHRhY2htZW50KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyLiAqL1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogRnVsbCBzcGVjIHN0cnVjdHVyZSAod2hlbiBhdmFpbGFibGUgZnJvbSBidWlsZFRpbWVTdHJ1Y3R1cmUpLiAqL1xuICBzcGVjU3RydWN0dXJlPzogdW5rbm93bjtcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG59XG5cbi8qKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uTG9vcC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0xvb3BFdmVudCB7XG4gIHRhcmdldDogc3RyaW5nO1xuICBpdGVyYXRpb246IG51bWJlcjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vbkJyZWFrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93QnJlYWtFdmVudCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGZyZWUtZm9ybSByZWFzb24gc3VwcGxpZWQgYnkgYHNjb3BlLiRicmVhayhyZWFzb24pYC4gQWJzZW50XG4gICAqIHdoZW4gdGhlIHN0YWdlIGludm9rZWQgYCRicmVhaygpYCB3aXRob3V0IGFuIGFyZ3VtZW50LiBQcm9wYWdhdGVzIHdoZW5cbiAgICogYSBzdWJmbG93IGlzIG1vdW50ZWQgd2l0aCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIOKAlCB0aGUgb3V0ZXIgYnJlYWtcbiAgICogZXZlbnQgY2FycmllcyB0aGUgaW5uZXIgYnJlYWsncyByZWFzb24gdG9vLlxuICAgKi9cbiAgcmVhc29uPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGlzIGJyZWFrIGV2ZW50IHdhcyByYWlzZWQgb24gdGhlIFBBUkVOVCBiZWNhdXNlIGFuIGlubmVyXG4gICAqIHN1YmZsb3cncyBicmVhayBwcm9wYWdhdGVkIHVwICh2aWEgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgKS5cbiAgICogVGhlIG9yaWdpbmF0aW5nIGlubmVyIGJyZWFrIGZpcmVzIGl0cyBvd24gYG9uQnJlYWtgIGV2ZW50IHNlcGFyYXRlbHlcbiAgICog4oCUIHRoaXMgZmxhZyBsZXRzIHJlY29yZGVycyBkaXN0aW5ndWlzaCB0aGUgdHdvLlxuICAgKi9cbiAgcHJvcGFnYXRlZEZyb21TdWJmbG93Pzogc3RyaW5nO1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vbkVycm9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93RXJyb3JFdmVudCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBTdHJ1Y3R1cmVkIGVycm9yIGRldGFpbHMg4oCUIHByZXNlcnZlcyBmaWVsZC1sZXZlbCBpc3N1ZXMsIGVycm9yIGNvZGVzLCBldGMuICovXG4gIHN0cnVjdHVyZWRFcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbztcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBjaGFubmVsIGRpc2NyaW1pbmFudCDigJQgYCdmbG93J2Agb24gZXZlcnkgZW5naW5lLWRpc3BhdGNoZWRcbiAgICogZXZlbnQuIGBpc0Zsb3dFdmVudCgpYCBjaGVja3MgaXQgZmlyc3QgKGJhY2tsb2cgQjMpOyBvcHRpb25hbCBzb1xuICAgKiBjb25zdW1lci1mYWJyaWNhdGVkIGV2ZW50cyAodGVzdHMsIHJlcGxheXMpIHJlbWFpbiB0eXBlLXZhbGlkIGFuZCBmYWxsXG4gICAqIGJhY2sgdG8gdGhlIGxlZ2FjeSBwaXBlbGluZUlkLWFic2VuY2UgaGV1cmlzdGljLlxuICAgKi9cbiAgY2hhbm5lbD86ICdmbG93Jztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uVGhyb3R0bGVkIOKAlCBhIGZvcmsgY2hpbGQgZmFpbGVkIGFuZCB0aGVcbiAqIGV4ZWN1dG9yJ3MgYHRocm90dGxpbmdFcnJvckNoZWNrZXJgIHNhaWQgaXRzIGVycm9yIGlzIHRocm90dGxpbmcgKDkuMzkuMCkuXG4gKlxuICogV0hZIGFuIGV2ZW50OiB0aGUgY2hlY2tlciB1c2VkIHRvIHdyaXRlIGBtb25pdG9yLmlzVGhyb3R0bGVkYCBpbnRvIHRoZVxuICogY2hpbGQncyBmcmFtZSBBRlRFUiB0aGUgY2hpbGQncyBsYXN0IGNvbW1pdCwgc28gdGhlIGZsYWcgbGFuZGVkIG5vd2hlcmUg4oCUXG4gKiBub3QgaW4gc3RhdGUsIG5vdCBpbiB0aGUgbG9nLiBUaHJvdHRsaW5nIGlzIHRlbGVtZXRyeSwgc28gaXQgdHJhdmVscyB0aGVcbiAqIHdheSB0ZWxlbWV0cnkgZG9lczogYXMgYW4gZXZlbnQgYSByZWNvcmRlciBjYW4gY291bnQsIGFsZXJ0IG9uLCBvciBiYWNrIG9mZlxuICogZnJvbS4gVGhlIGNoaWxkJ3MgZmFpbHVyZSBzdGlsbCB0YWtlcyBpdHMgb3JkaW5hcnkgcGF0aCAodGhlIGZhbi1vdXRcbiAqIHJlY29yZHMgaXQgYXMgYHsgaXNFcnJvcjogdHJ1ZSB9YCk7IHRoaXMgZXZlbnQgb25seSBjbGFzc2lmaWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dUaHJvdHRsZWRFdmVudCB7XG4gIC8qKiBUaGUgZm9yayBjaGlsZCB3aG9zZSBlcnJvciB3YXMgY2xhc3NpZmllZCBhcyB0aHJvdHRsaW5nLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIG9mIHRoYXQgY2hpbGQgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gKi9cbiAgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZSBvZiB0aGUgY2hpbGQncyBlcnJvci4gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogU3RydWN0dXJlZCBkZXRhaWxzIG9mIHRoZSBjaGlsZCdzIGVycm9yLiAqL1xuICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm87XG4gIC8qKiBUaGUgRk9SSydzIHN0YW1wIOKAlCB0aGUgZmFuLW91dCBpcyB3aGVyZSB0aGUgY2xhc3NpZmljYXRpb24gaXMgbWFkZS4gKi9cbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKiBFeHBsaWNpdCBjaGFubmVsIGRpc2NyaW1pbmFudCDigJQgc2VlIHtAbGluayBGbG93RXJyb3JFdmVudC5jaGFubmVsfS4gKi9cbiAgY2hhbm5lbD86ICdmbG93Jztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uQXR0ZW1wdCDigJQgb25lIGF0dGVtcHQsIGF0IGl0cyBlbmQgKDEwLjEpOiBhXG4gKiBzdGFnZSdzIG93biB1bmRlciBpdHMgcmV0cnkgcG9saWN5LCBhIGB0aW1lb3V0TXNgIG9yIGEgcnVuIGRlYWRsaW5lXG4gKiAoYHJlY29yZC5raW5kID09PSAnc3RhZ2UnYCksIG9yIOKAlCBkdXJpbmcgdGhlIHN0YWdlIOKAlCBhIGNhbGwgaXQgbWFkZVxuICogKGAnY2FsbCdgLCBgc2NvcGUuJGNhbGxgKSBvciBhbiBvdXRzaWRlIGF0dGVtcHQgaXQgcmVwb3J0ZWQgKGAnb2JzZXJ2ZWQnYCxcbiAqIFAyKS4gYHN0YWdlTmFtZWAgLyBgc3RhZ2VJZGAgLyBgdHJhdmVyc2FsQ29udGV4dGAgYXJlIHRoZSBzdGFnZSdzIGluIGV2ZXJ5XG4gKiBjYXNlOyBmaWx0ZXIgb24gYHJlY29yZC5raW5kYCB0byBjb3VudCBvbmUga2luZC5cbiAqXG4gKiBXSFkgdGhpcyBldmVudCBleGlzdHM6IGBvblN0YWdlUmV0cnlgIHNheXMgXCJhdHRlbXB0IE4gZmFpbGVkLCByZXRyeWluZ1wiIGFuZFxuICogbm90aGluZyBlbHNlIOKAlCBub3QgaG93IGxvbmcgYSB0cnkgdG9vaywgbm90IHdoeSB0aGUgc2VyaWVzIHN0b3BwZWQsIGFuZFxuICogbm90aGluZyBhdCBhbGwgd2hlbiBgcmV0cnlPbmAgZGVjbGluZWQuIEV2ZXJ5IGF0dGVtcHQgaXMgYW5cbiAqIHtAbGluayBBdHRlbXB0UmVjb3JkfSBpbnN0ZWFkLCB3aGF0ZXZlciBpdHMgb3V0Y29tZSwgd2l0aCB0aGUgZGVjaXNpb24gdGhhdFxuICogZm9sbG93ZWQgaXQgaW4gdGhlIHNoYXBlIGBkZWNpZGUoKWAgcmVjb3JkcyDigJQgdGhlIHNhbWUgcmVjb3JkcyB0aGUgc3RhZ2Unc1xuICogZXhlY3V0aW9uLXRyZWUgbm9kZSBrZWVwcyAoYFN0YWdlU25hcHNob3QuYXR0ZW1wdHNgKS5cbiAqXG4gKiBGaXJlcyBvbmNlIHBlciBhdHRlbXB0LCBiZWZvcmUgYG9uU3RhZ2VSZXRyeWAgKHdoZW4gdGhlIGF0dGVtcHQgaXMgcmV0cmllZClcbiAqIGFuZCBiZWZvcmUgYG9uRXJyb3JgIC8gYG9uU3RhZ2VFeGVjdXRlZGAgKGZvciB0aGUgbGFzdCkuIFRoZSByZWNvcmQgaXNcbiAqIGZyb3plbiBhbmQgc3Vydml2ZXMgYHN0cnVjdHVyZWRDbG9uZWA7IGBzdHJ1Y3R1cmVkRXJyb3JgIGlzIHRoZSBzZXJ2ZWQgZXJyb3JcbiAqIHdpdGggYHJhd2AsIGFzIG9uIHtAbGluayBGbG93U3RhZ2VSZXRyeUV2ZW50fSDigJQgZXhjZXB0IGZvciBhbiBvYnNlcnZlZFxuICogYXR0ZW1wdCwgd2hvc2UgZXJyb3IgdGhlIGxpYnJhcnkgbmV2ZXIgdGhyZXcgKGByYXdgIGlzIHVuZGVmaW5lZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0F0dGVtcHRFdmVudCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgZnJvbSB0aGUgYnVpbGRlciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgYXR0ZW1wdDogdGltaW5nLCBvdXRjb21lLCBjYXRlZ29yeSwgZGVjaXNpb24sIGFuZCB0aGUgc2VydmVkIGVycm9yIHdpdGhvdXQgYHJhd2AuICovXG4gIHJlY29yZDogQXR0ZW1wdFJlY29yZDtcbiAgLyoqIFRoZSBhdHRlbXB0J3Mgc2VydmVkIGVycm9yIHdpdGggYHJhd2Ag4oCUIGFic2VudCBmb3IgYSBzdWNjZXNzIG9yIGEgcGF1c2UuICovXG4gIHN0cnVjdHVyZWRFcnJvcj86IFN0cnVjdHVyZWRFcnJvckluZm87XG4gIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0O1xuICAvKiogRXhwbGljaXQgY2hhbm5lbCBkaXNjcmltaW5hbnQg4oCUIHNlZSB7QGxpbmsgRmxvd0Vycm9yRXZlbnQuY2hhbm5lbH0uICovXG4gIGNoYW5uZWw/OiAnZmxvdyc7XG59XG5cbi8qKlxuICogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vblN0YWdlUmV0cnkg4oCUIG9uZSBmYWlsZWQgYXR0ZW1wdCBhdCBhIHN0YWdlXG4gKiB0aGF0IGNhcnJpZXMgYSBkZWNsYXJlZCB7QGxpbmsgaW1wb3J0KCcuLi90eXBlcy5qcycpLlJldHJ5UG9saWN5fSwgYW5kIHdoaWNoXG4gKiBXSUxMIGJlIGF0dGVtcHRlZCBhZ2Fpbi5cbiAqXG4gKiBXSFkgdGhpcyBldmVudCBleGlzdHM6IGEgcmV0cnkgaGFuZC1yb2xsZWQgaW5zaWRlIGEgc3RhZ2UgZnVuY3Rpb24gbGVhdmVzIG5vXG4gKiBtYXJrIG9uIHRoZSB0cmFjZSBhdCBhbGwuIFRoaXMgZXZlbnQgaXMgd2hhdCBtYWtlcyBhIGRlY2xhcmVkIHJldHJ5IHBhcnQgb2ZcbiAqIHRoZSByZWNvcmQg4oCUIHdoaWNoIGF0dGVtcHQgZmFpbGVkLCB3aHksIGhvdyBsb25nIHRoZSBlbmdpbmUgd2FpdGVkLCBhbmQgaG93XG4gKiBtYW55IGF0dGVtcHRzIHRoZSBwb2xpY3kgYWxsb3dzLlxuICpcbiAqIEZpcmVzIG9ubHkgZm9yIGF0dGVtcHRzIGZvbGxvd2VkIGJ5IGFub3RoZXIgYXR0ZW1wdC4gVGhlIGZpbmFsIGZhaWx1cmUgdGFrZXNcbiAqIHRoZSBvcmRpbmFyeSBlcnJvciBwYXRoIChgb25FcnJvcmApLCBzbyB0aGUgdHdvIG5ldmVyIGRvdWJsZS1yZXBvcnQgdGhlIHNhbWVcbiAqIGZhaWx1cmU6IGFuIGV4aGF1c3RlZCBgYXR0ZW1wdHM6IDNgIHBvbGljeSBlbWl0cyAyIHJldHJ5IGV2ZW50cyArIDEgZXJyb3JcbiAqIGV2ZW50OyBhIGByZXRyeU9uYCB0aGF0IGRlY2xpbmVzIGVtaXRzIDAgcmV0cnkgZXZlbnRzICsgMSBlcnJvciBldmVudC4gRWFjaFxuICogYXR0ZW1wdCDigJQgcmV0cmllZCBvciBub3Qg4oCUIGFsc28gZmlyZXMge0BsaW5rIEZsb3dBdHRlbXB0RXZlbnR9IGZpcnN0ICgxMC4xKSxcbiAqIHdoaWNoIGlzIHdoZXJlIGEgZGVjbGluZWQgc3RvcCBpcyByZWNvcmRlZCAoYHJlYXNvbjogJ2RlY2xpbmVkJ2ApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dTdGFnZVJldHJ5RXZlbnQge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIGZyb20gdGhlIGJ1aWxkZXIgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gKi9cbiAgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogV2hpY2ggYXR0ZW1wdCBqdXN0IEZBSUxFRCwgMS1iYXNlZC4gKi9cbiAgYXR0ZW1wdDogbnVtYmVyO1xuICAvKiogVG90YWwgYXR0ZW1wdHMgdGhlIHBvbGljeSBhbGxvd3MsIGluY2x1ZGluZyB0aGUgZmlyc3QuICovXG4gIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKiBNaWxsaXNlY29uZHMgdGhlIGVuZ2luZSB3aWxsIHdhaXQgYmVmb3JlIHRoZSBuZXh0IGF0dGVtcHQuIGAwYCA9IGltbWVkaWF0ZS4gKi9cbiAgZGVsYXlNczogbnVtYmVyO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbWVzc2FnZSDigJQgdGhlIHNhbWUgc3RyaW5nIGBvbkVycm9yYCB3b3VsZCBjYXJyeS4gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogU3RydWN0dXJlZCBkZXRhaWxzIG9mIHRoZSBlcnJvciB0aGF0IGVuZGVkIHRoaXMgYXR0ZW1wdC4gKi9cbiAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIEV4cGxpY2l0IGNoYW5uZWwgZGlzY3JpbWluYW50IOKAlCBzZWUge0BsaW5rIEZsb3dFcnJvckV2ZW50LmNoYW5uZWx9LiAqL1xuICBjaGFubmVsPzogJ2Zsb3cnO1xufVxuXG4vKiogRXZlbnQgcGFzc2VkIHRvIEZsb3dSZWNvcmRlci5vblBhdXNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93UGF1c2VFdmVudCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBEYXRhIGZyb20gdGhlIHBhdXNlIHNpZ25hbCAocXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEpLiAqL1xuICBwYXVzZURhdGE/OiB1bmtub3duO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEVtcHR5IGF0IHJvb3QgbGV2ZWwuICovXG4gIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKiBFeHBsaWNpdCBjaGFubmVsIGRpc2NyaW1pbmFudCDigJQgc2VlIHtAbGluayBGbG93RXJyb3JFdmVudC5jaGFubmVsfS4gKi9cbiAgY2hhbm5lbD86ICdmbG93Jztcbn1cblxuLyoqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25SZXN1bWUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dSZXN1bWVFdmVudCB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHJlc3VtZSBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIGhhc0lucHV0OiBib29sZWFuO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbiAgLyoqIEV4cGxpY2l0IGNoYW5uZWwgZGlzY3JpbWluYW50IOKAlCBzZWUge0BsaW5rIEZsb3dFcnJvckV2ZW50LmNoYW5uZWx9LiAqL1xuICBjaGFubmVsPzogJ2Zsb3cnO1xufVxuXG4vKipcbiAqIEV2ZW50IHBhc3NlZCB0byBGbG93UmVjb3JkZXIub25SdW5TdGFydCAvIG9uUnVuRW5kLlxuICpcbiAqIEJyYWNrZXRzIHRoZSB0b3AtbGV2ZWwgYGV4ZWN1dG9yLnJ1bigpYCBjYWxsLiBTdWJmbG93cyBoYXZlIHRoZWlyIG93blxuICogcGFpciAoYG9uU3ViZmxvd0VudHJ5YCAvIGBvblN1YmZsb3dFeGl0YCk7IHRoZSBydW4gcGFpciBpcyB0aGUgT1VURVJNT1NUXG4gKiBib3VuZGFyeSwgc28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW4gaW4vb3V0XCIgdmlld3MgY2FuXG4gKiBjbG9zZSB0aGUgY2hhaW4gYXQgdGhlIHRvcCBsZXZlbC5cbiAqXG4gKiAgIC0gYG9uUnVuU3RhcnRgIHBheWxvYWQg4oaSIHRoZSBpbnB1dCBwYXNzZWQgdG8gYHJ1bih7aW5wdXR9KWBcbiAqICAgLSBgb25SdW5FbmRgICAgcGF5bG9hZCDihpIgdGhlIGNoYXJ0J3MgcmV0dXJuIHZhbHVlXG4gKlxuICogQm90aCBhcmUgcmV0YWluZWQgYXQgcnVudGltZSBiZWZvcmUgZGlzcGF0Y2gvZGVmZXJyZWQgY2FwdHVyZSB1c2luZyB0aGVcbiAqIHJ1bidzIFJlZGFjdGlvblJ1bGUgKGByZXRhaW5Cb3VuZGFyeWApOiBvd24gc3RyaW5nIGtleXMgYXQgZXZlcnkgZGVwdGggKGJ5XG4gKiBuYW1lIG9yIGRvdHRlZCBwYXRoKSBhbmQgZXhwbGljaXQgbmVzdGVkIGZpZWxkcy4gU2NhbGFycyBwYXNzIHRocm91Z2g7IGZvcmtcbiAqIGNoaWxkLUlEIGVudmVsb3BlcyBuZWVkIGV4cGxpY2l0IHBhdGhzIHN1Y2ggYXMgZmllbGRzOiB7IGNoaWxkSWQ6IFsncmVzdWx0LnNlY3JldCddIH0uXG4gKiBWYWx1ZXMgYXJlIG5vdCBzY2FubmVkLiBMaXZlIGV4ZWN1dGlvbiBpbnB1dHMgYW5kIHJldHVybiB2YWx1ZXMgc3RheSB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1J1bkV2ZW50IHtcbiAgLyoqIFJldGFpbmVkIGlucHV0IGFmdGVyIHZhbGlkYXRpb24gKGBvblJ1blN0YXJ0YCkgb3IgcmV0YWluZWQgY2hhcnQgcmV0dXJuXG4gICAqICAoYG9uUnVuRW5kYCksIHVuZGVyIHRoZSBrZXkvcGF0aCBjb250cmFjdCBhYm92ZS4gVW5kZWZpbmVkIGlmIG5laXRoZXIuICovXG4gIHBheWxvYWQ/OiB1bmtub3duO1xuICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dDtcbn1cblxuLyoqXG4gKiBFdmVudCBwYXNzZWQgdG8gRmxvd1JlY29yZGVyLm9uUnVuRmFpbGVkIOKAlCB0aGUgVEVSTUlOQUwgZmFpbHVyZSBib3VuZGFyeVxuICogZm9yIGEgdG9wLWxldmVsIHJ1bi4gTWlycm9yIG9mIGBvblJ1bkVuZGAgZm9yIHRoZSBlcnJvciBwYXRoOiBpdCBmaXJlc1xuICogb25jZSwgZHVyaW5nIHRyYXZlcnNhbCwgd2hlbiB0aGUgcnVuIHRocm93cyBhIG5vbi1wYXVzZSBlcnJvciwgYmVmb3JlXG4gKiB0aGUgZXhjZXB0aW9uIHByb3BhZ2F0ZXMuIENhcnJpZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgKGZpZWxkLWxldmVsXG4gKiBpc3N1ZXMsIGNvZGVzKSByYXRoZXIgdGhhbiBhIGZsYXR0ZW5lZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd1J1bkZhaWxlZEV2ZW50IHtcbiAgLyoqIFN0cnVjdHVyZWQgZGV0YWlscyBvZiB0aGUgZXJyb3IgdGhhdCB0ZXJtaW5hdGVkIHRoZSBydW4uICovXG4gIHN0cnVjdHVyZWRFcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbztcbiAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQ7XG4gIC8qKiBOYXRpdmUgdGVybWluYWwgb3duZXJzaGlwLCBpbmRlcGVuZGVudCBvZiBzZXJ2ZWQgZXJyb3IgZGV0YWlscy4gQWJzZW50IG9uIGxlZ2FjeSBtYW51YWxseSBlbWl0dGVkIGV2ZW50cy4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZT86IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQ7XG59XG5cbi8qKlxuICogRmxvd1JlY29yZGVyIOKAlCBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnRyb2wgZmxvdyBldmVudHMuXG4gKlxuICogTWlycm9ycyB0aGUgc2NvcGUtbGV2ZWwgU2NvcGVSZWNvcmRlciBwYXR0ZXJuIGZvciB0aGUgZW5naW5lIGxheWVyLlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBSZWNvcmRlcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBpbiBhdHRhY2htZW50IG9yZGVyLlxuICogSWYgYSByZWNvcmRlciB0aHJvd3MsIHRoZSBlcnJvciBpcyBjYXVnaHQgYW5kIHN3YWxsb3dlZDsgZXhlY3V0aW9uIGNvbnRpbnVlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbWV0cmljc1JlY29yZGVyOiBGbG93UmVjb3JkZXIgPSB7XG4gKiAgIGlkOiAnbWV0cmljcycsXG4gKiAgIG9uTG9vcDogKGV2ZW50KSA9PiByZWNvcmRNZXRyaWMoJ2xvb3AuaXRlcmF0aW9uJywgZXZlbnQuaXRlcmF0aW9uKSxcbiAqICAgb25EZWNpc2lvbjogKGV2ZW50KSA9PiByZWNvcmRNZXRyaWMoJ2RlY2lzaW9uJywgZXZlbnQuY2hvc2VuKSxcbiAqIH07XG4gKiBleGVjdXRvci5hdHRhY2hGbG93UmVjb3JkZXIobWV0cmljc1JlY29yZGVyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIG9uU3RhZ2VFeGVjdXRlZD8oZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZDtcbiAgb25OZXh0PyhldmVudDogRmxvd05leHRFdmVudCk6IHZvaWQ7XG4gIG9uRGVjaXNpb24/KGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQ7XG4gIG9uRm9yaz8oZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkO1xuICBvblNlbGVjdGVkPyhldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkO1xuICBvblN1YmZsb3dFbnRyeT8oZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkO1xuICBvblN1YmZsb3dFeGl0PyhldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiBhIGR5bmFtaWMgc3ViZmxvdyBpcyByZWdpc3RlcmVkIGR1cmluZyB0cmF2ZXJzYWwuICovXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQ/KGV2ZW50OiBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCk6IHZvaWQ7XG4gIG9uTG9vcD8oZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkO1xuICBvbkJyZWFrPyhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkO1xuICBvbkVycm9yPyhldmVudDogRmxvd0Vycm9yRXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIGF0IHRoZSBlbmQgb2YgRVZFUlkgYXR0ZW1wdCDigJQgYSBzdGFnZSdzIG93biwgYW5kIHRoZSBjYWxscyBhbmRcbiAgICogb2JzZXJ2ZWQgYXR0ZW1wdHMgaXQgbWFrZXMgZHVyaW5nIHRoZSBzdGFnZSAoZmlsdGVyIG9uIGByZWNvcmQua2luZGApIOKAlFxuICAgKiB3aXRoIGl0cyByZWNvcmQgYW5kIHRoZSBkZWNpc2lvbiB0aGF0IGZvbGxvd2VkICgxMC4xKS4gU2VlXG4gICAqIHtAbGluayBGbG93QXR0ZW1wdEV2ZW50fS5cbiAgICovXG4gIG9uQXR0ZW1wdD8oZXZlbnQ6IEZsb3dBdHRlbXB0RXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIGZhaWxlZCBhdHRlbXB0IHRoYXQgV0lMTCBiZSByZXRyaWVkLCBmb3Igc3RhZ2VzIGNhcnJ5aW5nIGFcbiAgICogZGVjbGFyZWQgYHJldHJ5YCBwb2xpY3kuIFRoZSBmaW5hbCBmYWlsdXJlIGFycml2ZXMgdmlhIGBvbkVycm9yYCBpbnN0ZWFkLFxuICAgKiBzbyBhIHN0YWdlIG5ldmVyIHJlcG9ydHMgdGhlIHNhbWUgZmFpbHVyZSB0d2ljZS4gU2VlXG4gICAqIHtAbGluayBGbG93U3RhZ2VSZXRyeUV2ZW50fSBmb3IgdGhlIGV4YWN0IGV2ZW50IGFyaXRobWV0aWMuXG4gICAqL1xuICBvblN0YWdlUmV0cnk/KGV2ZW50OiBGbG93U3RhZ2VSZXRyeUV2ZW50KTogdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgZm9yayBjaGlsZCdzIGVycm9yIGlzIGNsYXNzaWZpZWQgYXMgdGhyb3R0bGluZyBieSB0aGVcbiAgICogZXhlY3V0b3IncyBgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcmAg4oCUIHNlZSB7QGxpbmsgRmxvd1Rocm90dGxlZEV2ZW50fS5cbiAgICovXG4gIG9uVGhyb3R0bGVkPyhldmVudDogRmxvd1Rocm90dGxlZEV2ZW50KTogdm9pZDtcbiAgb25QYXVzZT8oZXZlbnQ6IEZsb3dQYXVzZUV2ZW50KTogdm9pZDtcbiAgb25SZXN1bWU/KGV2ZW50OiBGbG93UmVzdW1lRXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGVkIG9uY2UgcGVyIHRvcC1sZXZlbCBgZXhlY3V0b3IucnVuKClgIEJFRk9SRSB0cmF2ZXJzYWwgYmVnaW5zLlxuICAgKiBDYXJyaWVzIGBldmVudC5wYXlsb2FkID0gcnVuKHtpbnB1dH0pYC4gU3ViZmxvdy10cmF2ZXJzZXJzIGRvbid0IGZpcmUgaXQuXG4gICAqL1xuICBvblJ1blN0YXJ0PyhldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHBlciB0b3AtbGV2ZWwgYGV4ZWN1dG9yLnJ1bigpYCBBRlRFUiB0cmF2ZXJzYWwgY29tcGxldGVzXG4gICAqIGNsZWFubHkuIENhcnJpZXMgYGV2ZW50LnBheWxvYWQgPSBjaGFydCdzIHJldHVybiB2YWx1ZWAuIE5PVCBmaXJlZCBvblxuICAgKiBwYXVzZSAodGhlIHJ1biBkaWRuJ3QgZW5kKSBvciB1bmNhdWdodCBlcnJvci5cbiAgICovXG4gIG9uUnVuRW5kPyhldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZDtcbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHBlciB0b3AtbGV2ZWwgYGV4ZWN1dG9yLnJ1bigpYCB3aGVuIHRoZSBydW4gdGhyb3dzIGFcbiAgICogbm9uLXBhdXNlIGVycm9yLCBCRUZPUkUgdGhlIGV4Y2VwdGlvbiBwcm9wYWdhdGVzLiBUaGUgVEVSTUlOQUxcbiAgICogY291bnRlcnBhcnQgdG8gYG9uUnVuRW5kYCDigJQgbGV0cyBhIG1vbml0b3IgY2xvc2UgdGhlIHJ1biBib3VuZGFyeSBvblxuICAgKiBmYWlsdXJlIGluc3RlYWQgb2Ygd2FpdGluZyBmb3JldmVyLiBOT1QgZmlyZWQgb24gcGF1c2UuXG4gICAqL1xuICBvblJ1bkZhaWxlZD8oZXZlbnQ6IEZsb3dSdW5GYWlsZWRFdmVudCk6IHZvaWQ7XG4gIC8qKiBDYWxsZWQgYmVmb3JlIGVhY2ggcnVuIHRvIHJlc2V0IHBlci1ydW4gc3RhdGUuIEltcGxlbWVudCBmb3Igc3RhdGVmdWwgcmVjb3JkZXJzLiAqL1xuICBjbGVhcj8oKTogdm9pZDtcbiAgLyoqIE9wdGlvbmFsOiBleHBvc2UgY29sbGVjdGVkIGRhdGEgZm9yIGluY2x1c2lvbiBpbiBzbmFwc2hvdHMuICovXG4gIHRvU25hcHNob3Q/KCk6IGltcG9ydCgnLi4vLi4vcmVjb3JkZXIvc25hcHNob3QuanMnKS5SZWNvcmRlckJ1bmRsZTtcbn1cbiJdfQ==
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* Break semantics: If a stage calls breakFn(), commit and STOP.
|
|
23
23
|
* Patch model: Stage writes into local patch; commitPatch() after return or throw.
|
|
24
24
|
*/
|
|
25
|
+
import type { RunCorrelation } from '../../attempt/types.js';
|
|
25
26
|
import type { ScopeProtectionMode } from '../../scope/protection/types.js';
|
|
26
27
|
import type { QueuedPause, ResumeEntry } from '../handlers/ResumeEntry.js';
|
|
27
28
|
import { FlowRecorderDispatcher } from '../narrative/FlowRecorderDispatcher.js';
|
|
@@ -128,6 +129,11 @@ export interface TraverserOptions<TOut = any, TScope = any> {
|
|
|
128
129
|
* needs it. See `runner/runId.ts`.
|
|
129
130
|
*/
|
|
130
131
|
runId: string;
|
|
132
|
+
/**
|
|
133
|
+
* The leg's correlation (10.1, `attempt/correlation.ts · resolveCorrelation`) — stamped onto every
|
|
134
|
+
* TraversalContext and the snapshot, inherited by subflow traversers BY REFERENCE. Absent when the env gave none.
|
|
135
|
+
*/
|
|
136
|
+
correlation?: RunCorrelation;
|
|
131
137
|
}
|
|
132
138
|
/**
|
|
133
139
|
* Traverser-local overlay entry for a node whose stage function returned a
|
|
@@ -173,6 +179,11 @@ export declare class FlowchartTraverser<TOut = any, TScope = any> {
|
|
|
173
179
|
private subflows;
|
|
174
180
|
private readonly logger;
|
|
175
181
|
private readonly signal?;
|
|
182
|
+
/**
|
|
183
|
+
* The run's deadline, epoch ms (`env.deadline`, stamped by the executor's `armRun`; a subflow inherits the env).
|
|
184
|
+
* Under one, EVERY stage runs on the attempt runner, so a lone stage the deadline cuts still leaves its attempt.
|
|
185
|
+
*/
|
|
186
|
+
private readonly deadline?;
|
|
176
187
|
private readonly parentSubflowId?;
|
|
177
188
|
/** RFC-003 D1: runtimeStageId of the subflow mount stage in the parent
|
|
178
189
|
* traverser. Fallback `parentRuntimeStageId` for stages whose context has
|
|
@@ -187,6 +198,8 @@ export declare class FlowchartTraverser<TOut = any, TScope = any> {
|
|
|
187
198
|
/** Per-`executor.run()` identifier. Stamped onto every TraversalContext.
|
|
188
199
|
* Inherited by subflow traversers so all events of one run share one runId. */
|
|
189
200
|
private readonly runId;
|
|
201
|
+
/** The leg's correlation — one frozen object, stamped on every TraversalContext; inherited by subflows. */
|
|
202
|
+
private readonly correlation?;
|
|
190
203
|
private readonly nodeResolver;
|
|
191
204
|
private readonly childrenExecutor;
|
|
192
205
|
private readonly subflowExecutor;
|
|
@@ -327,6 +340,7 @@ export declare class FlowchartTraverser<TOut = any, TScope = any> {
|
|
|
327
340
|
getSnapshot(options?: {
|
|
328
341
|
redact?: boolean;
|
|
329
342
|
}): {
|
|
343
|
+
correlation?: RunCorrelation | undefined;
|
|
330
344
|
runId: string;
|
|
331
345
|
sharedState: Record<string, unknown>;
|
|
332
346
|
executionTree: unknown;
|
|
@@ -383,29 +397,55 @@ export declare class FlowchartTraverser<TOut = any, TScope = any> {
|
|
|
383
397
|
* this method as `runStage`), and by extension fork children and
|
|
384
398
|
* subflow-internal stages, which re-enter Phase 3 in their own traverser.
|
|
385
399
|
*
|
|
386
|
-
* Which is exactly why
|
|
387
|
-
* else: one
|
|
388
|
-
* function to retry.
|
|
389
|
-
*
|
|
390
|
-
*
|
|
400
|
+
* Which is exactly why a declared `retry` policy is honoured HERE and
|
|
401
|
+
* nowhere else: one call gives `retry` to every stage kind that has a
|
|
402
|
+
* function to retry. The loop itself is the attempt runner's
|
|
403
|
+
* (`attempt/runner.ts · runAttempts`, 10.1 — one runner, one record); this
|
|
404
|
+
* method hands it the engine's half: one attempt (`StageRunner · run`, a
|
|
405
|
+
* fresh scope each time), the discard between attempts
|
|
406
|
+
* (`StageContext · discardStaged` — the runner cannot reach a frame), the
|
|
407
|
+
* served form of an attempt's error (`servedStageError`, the run's
|
|
408
|
+
* redaction rule), and where each record goes (the frame, for the
|
|
409
|
+
* execution tree; `onAttempt` and `onStageRetry`, for recorders).
|
|
391
410
|
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
411
|
+
* NOT `async`, on purpose — the microtask shape of a stage is part of what
|
|
412
|
+
* the engine keeps byte-identical (parallel siblings settle in the order
|
|
413
|
+
* they always did):
|
|
414
|
+
* - no policy (or `attempts: 1`, a declared-but-off policy): one call
|
|
415
|
+
* through an async frame ({@link runStageOnce}), exactly the pre-10.1
|
|
416
|
+
* shape — and no attempt is recorded;
|
|
417
|
+
* - a policy: the runner's own promise, whose one await per attempt is the
|
|
418
|
+
* same one await the 9.15 loop had.
|
|
394
419
|
*/
|
|
395
420
|
private executeStage;
|
|
396
421
|
/**
|
|
397
|
-
*
|
|
398
|
-
* `
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
*
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
private
|
|
406
|
-
/**
|
|
407
|
-
*
|
|
408
|
-
|
|
422
|
+
* A touching stage's side-effect target for THIS execution (P3, design §3.3). The law first — a chart edited
|
|
423
|
+
* after `build()` reaches the stage without the builder's refusal, so the stage asks `touchesProblem` itself (the
|
|
424
|
+
* last door). Then the key: the declared rule runs ONCE per execution, before attempt 1, handed the frozen input,
|
|
425
|
+
* the run id and this execution's id; its answer is admitted (`admitIdempotencyKey` — the format, never echoed) and
|
|
426
|
+
* served under the run's diagnostic rule as `{ idempotencyKey }` for the records. Throws on any refusal.
|
|
427
|
+
*/
|
|
428
|
+
private effectTarget;
|
|
429
|
+
/** One call of a stage with no retry policy, through an async frame — the pre-10.1 microtask shape. */
|
|
430
|
+
private runStageOnce;
|
|
431
|
+
/**
|
|
432
|
+
* The run-time door for nodes a stage RETURNS (its `next` chain, `children`
|
|
433
|
+
* and subflow ids) — the builder never saw them, so this applies the
|
|
434
|
+
* builder's refusals:
|
|
435
|
+
* - R5, ids: `ids/reservedIds.ts · refuseReservedId`, so "no user id
|
|
436
|
+
* carries a grammar delimiter" stays true by construction. Loop-ref stubs
|
|
437
|
+
* (they name an existing node) and the chart's own nodes (admitted at
|
|
438
|
+
* build; a prefixed id carries `/` on purpose) are not new ids and are
|
|
439
|
+
* skipped.
|
|
440
|
+
* - a declared `retry`: `attempt/policy.ts · retryPolicyProblem`, the rule
|
|
441
|
+
* `FlowChartBuilder · applyRetryPolicy` applies at build — `attempts`
|
|
442
|
+
* must be a whole number >= 1, never `NaN`, `Infinity` or `0`.
|
|
443
|
+
* - a declared `touches`: `attempt/effect.ts · touchesProblem`, the rule
|
|
444
|
+
* `FlowChartBuilder · applyTouches` applies at build — a node that
|
|
445
|
+
* touches an outside system and may retry must declare a key rule.
|
|
446
|
+
* A subflow definition's own tree is a built chart and is not walked.
|
|
447
|
+
*/
|
|
448
|
+
private admitDynamicNodes;
|
|
409
449
|
/**
|
|
410
450
|
* Trampoline driver — pre-order DFS traversal entry point.
|
|
411
451
|
*
|