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
package/dist/lib/pause/record.js
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
*/
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.decodePendingPauses = exports.decodeCheckpoint = exports.decodePauseRecord = exports.upcastCheckpoint = exports.CHECKPOINT_VERSION = void 0;
|
|
37
|
+
const idempotencyKey_js_1 = require("../ids/idempotencyKey.js");
|
|
37
38
|
const types_js_1 = require("./types.js");
|
|
38
39
|
/** The checkpoint format this release writes (`FlowchartCheckpoint.checkpointVersion`). */
|
|
39
40
|
exports.CHECKPOINT_VERSION = 2;
|
|
@@ -94,6 +95,13 @@ function decodePauseRecord(raw, at = '') {
|
|
|
94
95
|
if (raw.pausedBy !== undefined && raw.pausedBy !== 'interrupt') {
|
|
95
96
|
refuse(`${field('pausedBy')} must be 'interrupt' when present`);
|
|
96
97
|
}
|
|
98
|
+
// A key the resume will SEND (P3): held to the one key rule, refused — never dropped (dropping would let the
|
|
99
|
+
// resume recompute a different key).
|
|
100
|
+
if (raw.idempotencyKey !== undefined) {
|
|
101
|
+
const problem = (0, idempotencyKey_js_1.idempotencyKeyProblem)(raw.idempotencyKey);
|
|
102
|
+
if (problem !== undefined)
|
|
103
|
+
refuse(`${field('idempotencyKey')} ${problem}`);
|
|
104
|
+
}
|
|
97
105
|
return {
|
|
98
106
|
pausedStageId: raw.pausedStageId,
|
|
99
107
|
subflowPath: subflowPath,
|
|
@@ -105,6 +113,7 @@ function decodePauseRecord(raw, at = '') {
|
|
|
105
113
|
...((0, types_js_1.isPausedExecution)(raw.pausedExecution) && {
|
|
106
114
|
pausedExecution: { runId: raw.pausedExecution.runId, runtimeStageId: raw.pausedExecution.runtimeStageId },
|
|
107
115
|
}),
|
|
116
|
+
...(raw.idempotencyKey !== undefined && { idempotencyKey: raw.idempotencyKey }),
|
|
108
117
|
};
|
|
109
118
|
}
|
|
110
119
|
exports.decodePauseRecord = decodePauseRecord;
|
|
@@ -173,4 +182,4 @@ exports.decodePendingPauses = decodePendingPauses;
|
|
|
173
182
|
function isCount(value) {
|
|
174
183
|
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
175
184
|
}
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRzs7O0FBR0gseUNBQStDO0FBRS9DLDJGQUEyRjtBQUM5RSxRQUFBLGtCQUFrQixHQUFHLENBQVUsQ0FBQztBQUU3QyxxR0FBcUc7QUFDckcsTUFBTSxpQkFBaUIsR0FBdUIsQ0FBQyxDQUFDLEVBQUUsMEJBQWtCLENBQUMsQ0FBQztBQWV0RSxtRUFBbUU7QUFDbkUsU0FBUyxNQUFNLENBQUMsSUFBWTtJQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsTUFBK0I7SUFDOUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3pDLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sQ0FDSixxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlDQUFpQztZQUM5RixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbURBQW1ELENBQ3hGLENBQUM7SUFDSixDQUFDO0lBQ0QsdUVBQXVFO0lBQ3ZFLE1BQU0sRUFDSixpQkFBaUIsRUFBRSxRQUFRLEVBQzNCLG1C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LE9BQU8sQ0FBQztRQUFFLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFIRCxrREFHQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWM7SUFDN0IsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHBhdXNlL3JlY29yZC50cyDigJQgdGhlIGNoZWNrcG9pbnQgQ09ERUMgKEY4LCA5LjM5LjApOiBvbmUgdmVyc2lvbiwgb25lXG4gKiB1cGNhc3Rlciwgb25lIHZhbGlkYXRvciwgb25lIG1lc3NhZ2Ugc2V0LlxuICpcbiAqIEEgY2hlY2twb2ludCBpcyBzdG9yZWQgZGF0YSDigJQgUmVkaXMsIFBvc3RncmVzLCBhIGZpbGUg4oCUIGFuZCBjb21lcyBiYWNrIHRvXG4gKiBgcmVzdW1lKClgIGZyb20gd2hpY2hldmVyIHJlbGVhc2Ugd3JvdGUgaXQuIFVudGlsIDkuMzguMCBpdCB3YXMgY2hlY2tlZCBpblxuICogVFdPIHBsYWNlcyB3aXRoIHR3byBtZXNzYWdlIHNldHM6IGBGbG93Q2hhcnRFeGVjdXRvciDCtyByZXN1bWVgIGNoZWNrZWQgdGhlXG4gKiBwYXVzZWQgcmVjb3JkJ3MgZmllbGRzLCBgUmVzdW1lRW50cnlgIGNoZWNrZWQgZWFjaCB3YWl0aW5nIHNpYmxpbmcnc1xuICogKGBwZW5kaW5nUGF1c2VzW25dYCkg4oCUIHRoZSBTQU1FIHJlY29yZCBzaGFwZSwgY2hlY2tlZCB0d2ljZSwgZGlmZmVyZW50bHlcbiAqICh0aGUgdG9wLWxldmVsIGBwYXVzZWRCeWAgYW5kIGBzdWJmbG93U3RhdGVzYCB3ZXJlIG5ldmVyIGNoZWNrZWQgYXQgYWxsKS5cbiAqIEJvdGggbm93IGNhbGwge0BsaW5rIGRlY29kZUNoZWNrcG9pbnR9OyBldmVyeSByZWNvcmQgaXMgY2hlY2tlZCBieVxuICoge0BsaW5rIGRlY29kZVBhdXNlUmVjb3JkfS5cbiAqXG4gKiBWRVJTSU9OSU5HLiBBIGNoZWNrcG9pbnQgd3JpdHRlbiBieSB0aGlzIHJlbGVhc2UgY2Fycmllc1xuICogYGNoZWNrcG9pbnRWZXJzaW9uOiAyYC4gRXZlcnkgb2xkZXIgb25lIGlzIHJlYWQgYnkgdGhlIE9ORSB1cGNhc3RlcixcbiAqIHtAbGluayB1cGNhc3RDaGVja3BvaW50fSwgYW5kIGV2ZXJ5IHN0ZXAgc28gZmFyIG9ubHkgRFJPUFMgZmllbGRzIOKAlCB3aGF0IGFcbiAqIGxhdGVyIGZvcm1hdCBhZGRlZCBpcyBvcHRpb25hbCBhbmQgcmVhZCBhcyBhYnNlbnQ6XG4gKlxuICogICAtIHZlcnNpb24gMCAobm8gYGNoZWNrcG9pbnRWZXJzaW9uYCwgYmVmb3JlIDkuMzkuMCkg4oaSIDE6IGRyb3BcbiAqICAgICBgY29udGludWF0aW9uU3RhZ2VJZGAsIGEgcmVjb3JkIG5vIHJlc3VtZSBoYXMgcmVhZCBzaW5jZSA5LjI4LjAgKHdoYXRcbiAqICAgICBydW5zIGFmdGVyIGEgcmVzdW1lIGNvbWVzIGZyb20gdGhlIGNoYXJ0KTtcbiAqICAgLSB2ZXJzaW9uIDEgKDkuMzkuMOKAkzkuNDMueCkg4oaSIDIgKHRoZSBMRUFOIGNoZWNrcG9pbnQpOiBkcm9wXG4gKiAgICAgYGV4ZWN1dGlvblRyZWVgIGFuZCBgc3ViZmxvd1Jlc3VsdHNgIOKAlCB0aGUgcnVuJ3Mgc2VydmVkIHJlY29yZCAodGhlXG4gKiAgICAgd2hvbGUgZXhlY3V0aW9uIHRyZWUsIHRoZSBmaW5pc2hlZCBzdWJmbG93cycgcmVzdWx0cyksIHdoaWNoIG5vIHJlc3VtZVxuICogICAgIGV2ZXIgcmVhZCBhbmQgd2hpY2ggZ3JldyB3aXRoIGV2ZXJ5IGZpbmlzaGVkIGl0ZXJhdGlvblxuICogICAgIChgcnVubmVyL2NoZWNrcG9pbnQudHNgKS5cbiAqXG4gKiBBIGRyb3BwZWQgZmllbGQgbmV2ZXIgc3Vydml2ZXMsIHdoYXRldmVyIHZlcnNpb24gY2xhaW1zIHRvIGNhcnJ5IGl0LiBBXG4gKiB2ZXJzaW9uIHRoaXMgcmVsZWFzZSBkb2VzIG5vdCBrbm93IGlzIHJlZnVzZWQsIG5ldmVyIGd1ZXNzZWQgYXQuXG4gKlxuICogQm9ycm93ZWQ6IExhbmdHcmFwaCdzIGNoZWNrcG9pbnQgYHZgIGZpZWxkOyBpby10cydzIGRlY29kZS1hdC10aGUtYm91bmRhcnlcbiAqIChvbmUgZGVjb2RlciB0dXJucyBgdW5rbm93bmAgaW50byB0aGUgdHlwZSwgb3IgcmVmdXNlcyB3aXRoIGEgcGF0aCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQZW5kaW5nUGF1c2UgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VkRXhlY3V0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBUaGUgY2hlY2twb2ludCBmb3JtYXQgdGhpcyByZWxlYXNlIHdyaXRlcyAoYEZsb3djaGFydENoZWNrcG9pbnQuY2hlY2twb2ludFZlcnNpb25gKS4gKi9cbmV4cG9ydCBjb25zdCBDSEVDS1BPSU5UX1ZFUlNJT04gPSAyIGFzIGNvbnN0O1xuXG4vKiogVGhlIGZvcm1hdHMgdGhpcyByZWxlYXNlIHJlYWRzOiB0aGUgY3VycmVudCBvbmUgYW5kIGV2ZXJ5IG9uZSBpdCB1cGNhc3RzIChhYnNlbnQgPSB2ZXJzaW9uIDApLiAqL1xuY29uc3QgUkVBREFCTEVfVkVSU0lPTlM6IHJlYWRvbmx5IHVua25vd25bXSA9IFsxLCBDSEVDS1BPSU5UX1ZFUlNJT05dO1xuXG4vKipcbiAqIEZpZWxkcyBvbmx5IGFuIE9MREVSIGNoZWNrcG9pbnQgY2FuIGNhcnJ5LCBlYWNoIGRyb3BwZWQgYnkgdGhlIGZvcm1hdCBuYW1lZFxuICogYmVzaWRlIGl0LiBUaGUgdXBjYXN0ZXIgcmVtb3ZlcyB0aGVtIGFuZCB0aGUgY3VycmVudCBzaGFwZSBuZXZlciBoYXMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDaGVja3BvaW50RmllbGRzIHtcbiAgLyoqIFZlcnNpb24gMCBvbmx5OiB0aGUgaW52b2tlcidzIGAubmV4dGAgaWQg4oCUIGEgcmVjb3JkIHNpbmNlIDkuMjguMCwgbmV2ZXIgcmVhZC4gRHJvcHBlZCBieSB2ZXJzaW9uIDEuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyAw4oCTMTogdGhlIHJ1bidzIGV4ZWN1dGlvbiB0cmVlIGF0IHRoZSBwYXVzZSDigJQgbmV2ZXIgcmVhZCBieSBhIHJlc3VtZS4gRHJvcHBlZCBieSB2ZXJzaW9uIDIuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU/OiB1bmtub3duO1xuICAvKiogVmVyc2lvbnMgMOKAkzE6IHRoZSBzdWJmbG93cyBmaW5pc2hlZCBiZWZvcmUgdGhlIHBhdXNlIOKAlCBuZXZlciByZWFkIGJ5IGEgcmVzdW1lLiBEcm9wcGVkIGJ5IHZlcnNpb24gMi4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFRoZSBvbmUgbWVzc2FnZSBzaGFwZTogYEludmFsaWQgY2hlY2twb2ludDogPHdoZXJlPiA8d2hhdD4uYCAqL1xuZnVuY3Rpb24gcmVmdXNlKHdoYXQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrcG9pbnQ6ICR7d2hhdH0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCcmluZyBhIHN0b3JlZCBjaGVja3BvaW50IG9mIEFOWSByZWxlYXNlIHRvIHRoZSBjdXJyZW50IHNoYXBlIOKAlCB0aGUgb25lXG4gKiB1cGNhc3Rlci4gVmVyc2lvbnMgMCAobm8gYGNoZWNrcG9pbnRWZXJzaW9uYCkgYW5kIDE6IGRyb3AgdGhlIGZpZWxkcyB0aGVpclxuICogc3VjY2Vzc29ycyBkcm9wcGVkICh7QGxpbmsgTGVnYWN5Q2hlY2twb2ludEZpZWxkc30pLCBzdGFtcCB0aGUgY3VycmVudFxuICogdmVyc2lvbiBhcyB0aGUgZmlyc3Qga2V5LiBUaGUgY3VycmVudCB2ZXJzaW9uOiBhcyBpcywgbWludXMgYW55IGRyb3BwZWRcbiAqIGZpZWxkIGl0IGNsYWltcyB0byBjYXJyeS4gQW55dGhpbmcgZWxzZTogcmVmdXNlZC4gUmV0dXJucyBhIG5ldyBvYmplY3Q7IHRoZVxuICogY2FsbGVyJ3MgaXMgbmV2ZXIgZWRpdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBjYXN0Q2hlY2twb2ludChzdG9yZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB2ZXJzaW9uID0gc3RvcmVkLmNoZWNrcG9pbnRWZXJzaW9uO1xuICBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmICFSRUFEQUJMRV9WRVJTSU9OUy5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgIHJlZnVzZShcbiAgICAgIGBjaGVja3BvaW50VmVyc2lvbiAke0pTT04uc3RyaW5naWZ5KHZlcnNpb24pID8/IFN0cmluZyh2ZXJzaW9uKX0gaXMgbm90IG9uZSB0aGlzIHJlbGVhc2UgcmVhZHMgYCArXG4gICAgICAgIGAoJHtSRUFEQUJMRV9WRVJTSU9OUy5qb2luKCcgb3IgJyl9LCBvciBub25lIGZvciBhIGNoZWNrcG9pbnQgd3JpdHRlbiBiZWZvcmUgOS4zOS4wKWAsXG4gICAgKTtcbiAgfVxuICAvLyBBIGRyb3BwZWQgZmllbGQgbmV2ZXIgc3Vydml2ZXMsIHdoYXRldmVyIHZlcnNpb24gY2xhaW1zIHRvIGNhcnJ5IGl0LlxuICBjb25zdCB7XG4gICAgY2hlY2twb2ludFZlcnNpb246IF92ZXJzaW9uLFxuICAgIGNvbnRpbnVhdGlvblN0YWdlSWQ6IF9pbnZva2VyTmV4dCxcbiAgICBleGVjdXRpb25UcmVlOiBfdHJlZSxcbiAgICBzdWJmbG93UmVzdWx0czogX2ZpbmlzaGVkU3ViZmxvd3MsXG4gICAgLi4uY3VycmVudFxuICB9ID0gc3RvcmVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgTGVnYWN5Q2hlY2twb2ludEZpZWxkcztcbiAgcmV0dXJuIHsgY2hlY2twb2ludFZlcnNpb246IENIRUNLUE9JTlRfVkVSU0lPTiwgLi4uY3VycmVudCB9O1xufVxuXG4vKipcbiAqIENoZWNrIE9ORSBwYXVzZSByZWNvcmQg4oCUIHRoZSBwYXVzZWQgc3RhZ2UncyBvd24gZmllbGRzIG9uIHRoZSBjaGVja3BvaW50LFxuICogb3IgYSB3YWl0aW5nIHNpYmxpbmcncyBgcGVuZGluZ1BhdXNlc1tuXWAg4oCUIGFuZCByZXR1cm4gaXQgYXMgYVxuICoge0BsaW5rIFBlbmRpbmdQYXVzZX0uIGBhdGAgbmFtZXMgd2hlcmUgdGhlIHJlY29yZCBzaXRzIChgJydgIGZvciB0aGVcbiAqIGNoZWNrcG9pbnQgaXRzZWxmLCBgJ3BlbmRpbmdQYXVzZXNbMF0nYCBmb3IgYSBzaWJsaW5nKSwgc28gYm90aCBzaXRlcyBzcGVha1xuICogdGhlIHNhbWUgc2VudGVuY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGF1c2VSZWNvcmQocmF3OiB1bmtub3duLCBhdCA9ICcnKTogUGVuZGluZ1BhdXNlIHtcbiAgY29uc3QgZmllbGQgPSAobmFtZTogc3RyaW5nKSA9PiAoYXQgPyBgJHthdH0uJHtuYW1lfWAgOiBuYW1lKTtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKHJhdykpIHJlZnVzZShgJHthdCB8fCAndGhlIGNoZWNrcG9pbnQnfSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICBpZiAodHlwZW9mIHJhdy5wYXVzZWRTdGFnZUlkICE9PSAnc3RyaW5nJyB8fCByYXcucGF1c2VkU3RhZ2VJZCA9PT0gJycpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3BhdXNlZFN0YWdlSWQnKX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxuICBjb25zdCBzdWJmbG93UGF0aCA9IHJhdy5zdWJmbG93UGF0aDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN1YmZsb3dQYXRoKSB8fCAhc3ViZmxvd1BhdGguZXZlcnkoKHMpID0+IHR5cGVvZiBzID09PSAnc3RyaW5nJykpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dQYXRoJyl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2ApO1xuICB9XG4gIGNvbnN0IHN0YXRlcyA9IHJhdy5zdWJmbG93U3RhdGVzO1xuICBpZiAoc3RhdGVzICE9PSB1bmRlZmluZWQgJiYgIWlzUGxhaW5SZWNvcmQoc3RhdGVzKSkgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93U3RhdGVzJyl9IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIC8vIEVhY2ggY2FwdHVyZSBzZWVkcyBhIHN1YmZsb3cncyBydW50aW1lIOKAlCBhIHBsYWluIG9iamVjdCwgbGlrZSBgc2hhcmVkU3RhdGVgLlxuICBmb3IgKGNvbnN0IFtzdWJmbG93SWQsIGNhcHR1cmVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YXRlcyA/PyB7fSkpIHtcbiAgICBpZiAoIWlzUGxhaW5SZWNvcmQoY2FwdHVyZSkpIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1N0YXRlcycpfVske0pTT04uc3RyaW5naWZ5KHN1YmZsb3dJZCl9XSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICB9XG4gIGlmIChyYXcucGF1c2VkQnkgIT09IHVuZGVmaW5lZCAmJiByYXcucGF1c2VkQnkgIT09ICdpbnRlcnJ1cHQnKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdwYXVzZWRCeScpfSBtdXN0IGJlICdpbnRlcnJ1cHQnIHdoZW4gcHJlc2VudGApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcGF1c2VkU3RhZ2VJZDogcmF3LnBhdXNlZFN0YWdlSWQgYXMgc3RyaW5nLFxuICAgIHN1YmZsb3dQYXRoOiBzdWJmbG93UGF0aCBhcyBzdHJpbmdbXSxcbiAgICBzdWJmbG93U3RhdGVzOiAoc3RhdGVzIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZCkgPz8ge30sXG4gICAgLi4uKHJhdy5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogcmF3LnBhdXNlRGF0YSB9KSxcbiAgICAuLi4ocmF3LnBhdXNlZEJ5ID09PSAnaW50ZXJydXB0JyAmJiB7IHBhdXNlZEJ5OiAnaW50ZXJydXB0JyBhcyBjb25zdCB9KSxcbiAgICAvLyBBIHJlY29yZCwgbmV2ZXIgYSBwbGFuIGlucHV0OiBrZXB0IG9ubHkgd2hlbiB3ZWxsLWZvcm1lZCAoYW4gb2xkZXIgb3JcbiAgICAvLyBoYW5kLWVkaXRlZCBlbnRyeSBzaW1wbHkgcmVzdW1lcyB3aXRob3V0IGEgbGluaykuXG4gICAgLi4uKGlzUGF1c2VkRXhlY3V0aW9uKHJhdy5wYXVzZWRFeGVjdXRpb24pICYmIHtcbiAgICAgIHBhdXNlZEV4ZWN1dGlvbjogeyBydW5JZDogcmF3LnBhdXNlZEV4ZWN1dGlvbi5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IHJhdy5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQgfSxcbiAgICB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUSEUgY2hlY2twb2ludCBkZWNvZGVyOiB1cGNhc3QsIHRoZW4gY2hlY2sg4oCUIHRoZSBjaGVja3BvaW50IGlzIGFuIG9iamVjdCxcbiAqIGl0cyBgc2hhcmVkU3RhdGVgIGEgcGxhaW4gb2JqZWN0LCBpdHMgb3duIHBhdXNlIHJlY29yZCB3ZWxsLWZvcm1lZCwgYW5kXG4gKiBldmVyeSBgcGVuZGluZ1BhdXNlc2AgZW50cnkgd2VsbC1mb3JtZWQgKGVhY2ggcmV0dXJuZWQgZGVjb2RlZCkuIFRocm93c1xuICogYEludmFsaWQgY2hlY2twb2ludDog4oCmYCBuYW1pbmcgdGhlIGZpcnN0IGZpZWxkIHRoYXQgaXMgbm90OyBuZXZlciBlZGl0c1xuICogdGhlIGNhbGxlcidzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUNoZWNrcG9pbnQoc3RvcmVkOiB1bmtub3duKTogRmxvd2NoYXJ0Q2hlY2twb2ludCB7XG4gIGlmICghaXNQbGFpblJlY29yZChzdG9yZWQpKSByZWZ1c2UoJ3RoZSBjaGVja3BvaW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIGNvbnN0IGNoZWNrcG9pbnQgPSB1cGNhc3RDaGVja3BvaW50KHN0b3JlZCk7XG4gIGlmICghaXNQbGFpblJlY29yZChjaGVja3BvaW50LnNoYXJlZFN0YXRlKSkgcmVmdXNlKCdzaGFyZWRTdGF0ZSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0Jyk7XG4gIGRlY29kZVBhdXNlUmVjb3JkKGNoZWNrcG9pbnQpO1xuICAvLyBBIHJlY29yZCwgbmV2ZXIgYSBwbGFuIGlucHV0IOKAlCB0aGUgU0FNRSBydWxlIGFzIGEgc2libGluZydzOiBhIG1hbGZvcm1lZFxuICAvLyBsaW5rIGlzIGRyb3BwZWQgKHRoZSByZXN1bWUgcnVucyB3aXRob3V0IGl0KSwgbmV2ZXIgdHJ1c3RlZC5cbiAgaWYgKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgJiYgIWlzUGF1c2VkRXhlY3V0aW9uKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uKSkge1xuICAgIGRlbGV0ZSBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbjtcbiAgfVxuICAvLyBUaGUgY291bnRlcnMgc2VlZCB0aGUgcmVzdW1lZCBydW4ncyBpZHMgYW5kIGxvb3AgYnVkZ2V0OiBhYnNlbnQgaXMgYW4gb2xkXG4gIC8vIGNoZWNrcG9pbnQgKHRoZSBjb3VudGVyIHJlc3RhcnRzKSwgcHJlc2VudCBtdXN0IGJlIHdlbGwtZm9ybWVkLlxuICBpZiAoY2hlY2twb2ludC5leGVjdXRpb25Db3VudCAhPT0gdW5kZWZpbmVkICYmICFpc0NvdW50KGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQpKSB7XG4gICAgcmVmdXNlKCdleGVjdXRpb25Db3VudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKTtcbiAgfVxuICBjb25zdCB2aXNpdHMgPSBjaGVja3BvaW50LnZpc2l0Q291bnRzO1xuICBpZiAodmlzaXRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKHZpc2l0cykgfHwgIU9iamVjdC52YWx1ZXModmlzaXRzKS5ldmVyeShpc0NvdW50KSkpIHtcbiAgICByZWZ1c2UoJ3Zpc2l0Q291bnRzIG11c3QgbWFwIHN0YWdlIGlkcyB0byBub24tbmVnYXRpdmUgaW50ZWdlcnMnKTtcbiAgfVxuICBpZiAoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzICE9PSB1bmRlZmluZWQpIGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyA9IGRlY29kZVBlbmRpbmdQYXVzZXMoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzKTtcbiAgLy8gVGhlIHJlZGFjdGlvbiBhIHBhdXNlIGNhcnJpZXMgKG5hbWVzIG9ubHkpIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUg4oCUIGEgbWFsZm9ybWVkIG9uZVxuICAvLyBpcyByZWZ1c2VkLCBuZXZlciBkcm9wcGVkOiBkcm9wcGluZyBpdCB3b3VsZCBzZXJ2ZSBpbiBwbGFpbiB3aGF0IHRoZSBydW4gaGFkIG1hc2tlZC5cbiAgaWYgKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MgIT09IHVuZGVmaW5lZCkgZGVjb2RlUmVkYWN0aW9uTWFya3MoY2hlY2twb2ludC5yZWRhY3Rpb25NYXJrcyk7XG4gIHJldHVybiBjaGVja3BvaW50IGFzIHVua25vd24gYXMgRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn1cblxuLyoqIGByZWRhY3Rpb25NYXJrc2A6IGBrZXlzYCBhbiBhcnJheSBvZiBzdHJpbmdzOyBgZmllbGRzYCwgd2hlbiBwcmVzZW50LCBrZXlzIOKGkiBhcnJheXMgb2Ygc3RyaW5ncy4gKi9cbmZ1bmN0aW9uIGRlY29kZVJlZGFjdGlvbk1hcmtzKG1hcmtzOiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghaXNQbGFpblJlY29yZChtYXJrcykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3MgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgaWYgKCFpc1N0cmluZ3MobWFya3Mua2V5cykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3Mua2V5cyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgY29uc3QgZmllbGRzID0gbWFya3MuZmllbGRzO1xuICBpZiAoZmllbGRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKGZpZWxkcykgfHwgIU9iamVjdC52YWx1ZXMoZmllbGRzKS5ldmVyeShpc1N0cmluZ3MpKSkge1xuICAgIHJlZnVzZSgncmVkYWN0aW9uTWFya3MuZmllbGRzIG11c3QgbWFwIGtleXMgdG8gYXJyYXlzIG9mIHN0cmluZ3MnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZ3ModmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIGBwZW5kaW5nUGF1c2VzYCAoc3RvcmVkLCB1bnRydXN0ZWQpIGFzIGRlY29kZWQgcmVjb3JkcyDigJQgdGhlIG9uZSBjaGVja1xuICogYGRlY29kZUNoZWNrcG9pbnRgIHJ1bnMsIGFuZCB0aGUgb25lIGBSZXN1bWVFbnRyeS5wbGFuYCBydW5zIG9uIHdoYXQgaXQgaXNcbiAqIGhhbmRlZCBkaXJlY3RseSwgc28gbmVpdGhlciBkb29yIHRha2VzIGFuIHVuY2hlY2tlZCBzaWJsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGVuZGluZ1BhdXNlcyhwZW5kaW5nOiB1bmtub3duKTogUGVuZGluZ1BhdXNlW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocGVuZGluZykpIHJlZnVzZSgncGVuZGluZ1BhdXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIHJldHVybiBwZW5kaW5nLm1hcCgocmF3OiB1bmtub3duLCBuKSA9PiBkZWNvZGVQYXVzZVJlY29yZChyYXcsIGBwZW5kaW5nUGF1c2VzWyR7bn1dYCkpO1xufVxuXG5mdW5jdGlvbiBpc0NvdW50KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG4iXX0=
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRzs7O0FBRUgsZ0VBQWlFO0FBRWpFLHlDQUErQztBQUUvQywyRkFBMkY7QUFDOUUsUUFBQSxrQkFBa0IsR0FBRyxDQUFVLENBQUM7QUFFN0MscUdBQXFHO0FBQ3JHLE1BQU0saUJBQWlCLEdBQXVCLENBQUMsQ0FBQyxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFldEUsbUVBQW1FO0FBQ25FLFNBQVMsTUFBTSxDQUFDLElBQVk7SUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE1BQStCO0lBQzlELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN6QyxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxNQUFNLENBQ0oscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUM7WUFDOUYsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1EQUFtRCxDQUN4RixDQUFDO0lBQ0osQ0FBQztJQUNELHVFQUF1RTtJQUN2RSxNQUFNLEVBQ0osaUJBQWlCLEVBQUUs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TUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZ0I7SUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQUUsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUhELGtEQUdDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDNUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGF1c2UvcmVjb3JkLnRzIOKAlCB0aGUgY2hlY2twb2ludCBDT0RFQyAoRjgsIDkuMzkuMCk6IG9uZSB2ZXJzaW9uLCBvbmVcbiAqIHVwY2FzdGVyLCBvbmUgdmFsaWRhdG9yLCBvbmUgbWVzc2FnZSBzZXQuXG4gKlxuICogQSBjaGVja3BvaW50IGlzIHN0b3JlZCBkYXRhIOKAlCBSZWRpcywgUG9zdGdyZXMsIGEgZmlsZSDigJQgYW5kIGNvbWVzIGJhY2sgdG9cbiAqIGByZXN1bWUoKWAgZnJvbSB3aGljaGV2ZXIgcmVsZWFzZSB3cm90ZSBpdC4gVW50aWwgOS4zOC4wIGl0IHdhcyBjaGVja2VkIGluXG4gKiBUV08gcGxhY2VzIHdpdGggdHdvIG1lc3NhZ2Ugc2V0czogYEZsb3dDaGFydEV4ZWN1dG9yIMK3IHJlc3VtZWAgY2hlY2tlZCB0aGVcbiAqIHBhdXNlZCByZWNvcmQncyBmaWVsZHMsIGBSZXN1bWVFbnRyeWAgY2hlY2tlZCBlYWNoIHdhaXRpbmcgc2libGluZydzXG4gKiAoYHBlbmRpbmdQYXVzZXNbbl1gKSDigJQgdGhlIFNBTUUgcmVjb3JkIHNoYXBlLCBjaGVja2VkIHR3aWNlLCBkaWZmZXJlbnRseVxuICogKHRoZSB0b3AtbGV2ZWwgYHBhdXNlZEJ5YCBhbmQgYHN1YmZsb3dTdGF0ZXNgIHdlcmUgbmV2ZXIgY2hlY2tlZCBhdCBhbGwpLlxuICogQm90aCBub3cgY2FsbCB7QGxpbmsgZGVjb2RlQ2hlY2twb2ludH07IGV2ZXJ5IHJlY29yZCBpcyBjaGVja2VkIGJ5XG4gKiB7QGxpbmsgZGVjb2RlUGF1c2VSZWNvcmR9LlxuICpcbiAqIFZFUlNJT05JTkcuIEEgY2hlY2twb2ludCB3cml0dGVuIGJ5IHRoaXMgcmVsZWFzZSBjYXJyaWVzXG4gKiBgY2hlY2twb2ludFZlcnNpb246IDJgLiBFdmVyeSBvbGRlciBvbmUgaXMgcmVhZCBieSB0aGUgT05FIHVwY2FzdGVyLFxuICoge0BsaW5rIHVwY2FzdENoZWNrcG9pbnR9LCBhbmQgZXZlcnkgc3RlcCBzbyBmYXIgb25seSBEUk9QUyBmaWVsZHMg4oCUIHdoYXQgYVxuICogbGF0ZXIgZm9ybWF0IGFkZGVkIGlzIG9wdGlvbmFsIGFuZCByZWFkIGFzIGFic2VudDpcbiAqXG4gKiAgIC0gdmVyc2lvbiAwIChubyBgY2hlY2twb2ludFZlcnNpb25gLCBiZWZvcmUgOS4zOS4wKSDihpIgMTogZHJvcFxuICogICAgIGBjb250aW51YXRpb25TdGFnZUlkYCwgYSByZWNvcmQgbm8gcmVzdW1lIGhhcyByZWFkIHNpbmNlIDkuMjguMCAod2hhdFxuICogICAgIHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnQpO1xuICogICAtIHZlcnNpb24gMSAoOS4zOS4w4oCTOS40My54KSDihpIgMiAodGhlIExFQU4gY2hlY2twb2ludCk6IGRyb3BcbiAqICAgICBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2Ag4oCUIHRoZSBydW4ncyBzZXJ2ZWQgcmVjb3JkICh0aGVcbiAqICAgICB3aG9sZSBleGVjdXRpb24gdHJlZSwgdGhlIGZpbmlzaGVkIHN1YmZsb3dzJyByZXN1bHRzKSwgd2hpY2ggbm8gcmVzdW1lXG4gKiAgICAgZXZlciByZWFkIGFuZCB3aGljaCBncmV3IHdpdGggZXZlcnkgZmluaXNoZWQgaXRlcmF0aW9uXG4gKiAgICAgKGBydW5uZXIvY2hlY2twb2ludC50c2ApLlxuICpcbiAqIEEgZHJvcHBlZCBmaWVsZCBuZXZlciBzdXJ2aXZlcywgd2hhdGV2ZXIgdmVyc2lvbiBjbGFpbXMgdG8gY2FycnkgaXQuIEFcbiAqIHZlcnNpb24gdGhpcyByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZCwgbmV2ZXIgZ3Vlc3NlZCBhdC5cbiAqXG4gKiBCb3Jyb3dlZDogTGFuZ0dyYXBoJ3MgY2hlY2twb2ludCBgdmAgZmllbGQ7IGlvLXRzJ3MgZGVjb2RlLWF0LXRoZS1ib3VuZGFyeVxuICogKG9uZSBkZWNvZGVyIHR1cm5zIGB1bmtub3duYCBpbnRvIHRoZSB0eXBlLCBvciByZWZ1c2VzIHdpdGggYSBwYXRoKS5cbiAqL1xuXG5pbXBvcnQgeyBpZGVtcG90ZW5jeUtleVByb2JsZW0gfSBmcm9tICcuLi9pZHMvaWRlbXBvdGVuY3lLZXkuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQZW5kaW5nUGF1c2UgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VkRXhlY3V0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBUaGUgY2hlY2twb2ludCBmb3JtYXQgdGhpcyByZWxlYXNlIHdyaXRlcyAoYEZsb3djaGFydENoZWNrcG9pbnQuY2hlY2twb2ludFZlcnNpb25gKS4gKi9cbmV4cG9ydCBjb25zdCBDSEVDS1BPSU5UX1ZFUlNJT04gPSAyIGFzIGNvbnN0O1xuXG4vKiogVGhlIGZvcm1hdHMgdGhpcyByZWxlYXNlIHJlYWRzOiB0aGUgY3VycmVudCBvbmUgYW5kIGV2ZXJ5IG9uZSBpdCB1cGNhc3RzIChhYnNlbnQgPSB2ZXJzaW9uIDApLiAqL1xuY29uc3QgUkVBREFCTEVfVkVSU0lPTlM6IHJlYWRvbmx5IHVua25vd25bXSA9IFsxLCBDSEVDS1BPSU5UX1ZFUlNJT05dO1xuXG4vKipcbiAqIEZpZWxkcyBvbmx5IGFuIE9MREVSIGNoZWNrcG9pbnQgY2FuIGNhcnJ5LCBlYWNoIGRyb3BwZWQgYnkgdGhlIGZvcm1hdCBuYW1lZFxuICogYmVzaWRlIGl0LiBUaGUgdXBjYXN0ZXIgcmVtb3ZlcyB0aGVtIGFuZCB0aGUgY3VycmVudCBzaGFwZSBuZXZlciBoYXMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDaGVja3BvaW50RmllbGRzIHtcbiAgLyoqIFZlcnNpb24gMCBvbmx5OiB0aGUgaW52b2tlcidzIGAubmV4dGAgaWQg4oCUIGEgcmVjb3JkIHNpbmNlIDkuMjguMCwgbmV2ZXIgcmVhZC4gRHJvcHBlZCBieSB2ZXJzaW9uIDEuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyAw4oCTMTogdGhlIHJ1bidzIGV4ZWN1dGlvbiB0cmVlIGF0IHRoZSBwYXVzZSDigJQgbmV2ZXIgcmVhZCBieSBhIHJlc3VtZS4gRHJvcHBlZCBieSB2ZXJzaW9uIDIuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU/OiB1bmtub3duO1xuICAvKiogVmVyc2lvbnMgMOKAkzE6IHRoZSBzdWJmbG93cyBmaW5pc2hlZCBiZWZvcmUgdGhlIHBhdXNlIOKAlCBuZXZlciByZWFkIGJ5IGEgcmVzdW1lLiBEcm9wcGVkIGJ5IHZlcnNpb24gMi4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFRoZSBvbmUgbWVzc2FnZSBzaGFwZTogYEludmFsaWQgY2hlY2twb2ludDogPHdoZXJlPiA8d2hhdD4uYCAqL1xuZnVuY3Rpb24gcmVmdXNlKHdoYXQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrcG9pbnQ6ICR7d2hhdH0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCcmluZyBhIHN0b3JlZCBjaGVja3BvaW50IG9mIEFOWSByZWxlYXNlIHRvIHRoZSBjdXJyZW50IHNoYXBlIOKAlCB0aGUgb25lXG4gKiB1cGNhc3Rlci4gVmVyc2lvbnMgMCAobm8gYGNoZWNrcG9pbnRWZXJzaW9uYCkgYW5kIDE6IGRyb3AgdGhlIGZpZWxkcyB0aGVpclxuICogc3VjY2Vzc29ycyBkcm9wcGVkICh7QGxpbmsgTGVnYWN5Q2hlY2twb2ludEZpZWxkc30pLCBzdGFtcCB0aGUgY3VycmVudFxuICogdmVyc2lvbiBhcyB0aGUgZmlyc3Qga2V5LiBUaGUgY3VycmVudCB2ZXJzaW9uOiBhcyBpcywgbWludXMgYW55IGRyb3BwZWRcbiAqIGZpZWxkIGl0IGNsYWltcyB0byBjYXJyeS4gQW55dGhpbmcgZWxzZTogcmVmdXNlZC4gUmV0dXJucyBhIG5ldyBvYmplY3Q7IHRoZVxuICogY2FsbGVyJ3MgaXMgbmV2ZXIgZWRpdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBjYXN0Q2hlY2twb2ludChzdG9yZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB2ZXJzaW9uID0gc3RvcmVkLmNoZWNrcG9pbnRWZXJzaW9uO1xuICBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmICFSRUFEQUJMRV9WRVJTSU9OUy5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgIHJlZnVzZShcbiAgICAgIGBjaGVja3BvaW50VmVyc2lvbiAke0pTT04uc3RyaW5naWZ5KHZlcnNpb24pID8/IFN0cmluZyh2ZXJzaW9uKX0gaXMgbm90IG9uZSB0aGlzIHJlbGVhc2UgcmVhZHMgYCArXG4gICAgICAgIGAoJHtSRUFEQUJMRV9WRVJTSU9OUy5qb2luKCcgb3IgJyl9LCBvciBub25lIGZvciBhIGNoZWNrcG9pbnQgd3JpdHRlbiBiZWZvcmUgOS4zOS4wKWAsXG4gICAgKTtcbiAgfVxuICAvLyBBIGRyb3BwZWQgZmllbGQgbmV2ZXIgc3Vydml2ZXMsIHdoYXRldmVyIHZlcnNpb24gY2xhaW1zIHRvIGNhcnJ5IGl0LlxuICBjb25zdCB7XG4gICAgY2hlY2twb2ludFZlcnNpb246IF92ZXJzaW9uLFxuICAgIGNvbnRpbnVhdGlvblN0YWdlSWQ6IF9pbnZva2VyTmV4dCxcbiAgICBleGVjdXRpb25UcmVlOiBfdHJlZSxcbiAgICBzdWJmbG93UmVzdWx0czogX2ZpbmlzaGVkU3ViZmxvd3MsXG4gICAgLi4uY3VycmVudFxuICB9ID0gc3RvcmVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgTGVnYWN5Q2hlY2twb2ludEZpZWxkcztcbiAgcmV0dXJuIHsgY2hlY2twb2ludFZlcnNpb246IENIRUNLUE9JTlRfVkVSU0lPTiwgLi4uY3VycmVudCB9O1xufVxuXG4vKipcbiAqIENoZWNrIE9ORSBwYXVzZSByZWNvcmQg4oCUIHRoZSBwYXVzZWQgc3RhZ2UncyBvd24gZmllbGRzIG9uIHRoZSBjaGVja3BvaW50LFxuICogb3IgYSB3YWl0aW5nIHNpYmxpbmcncyBgcGVuZGluZ1BhdXNlc1tuXWAg4oCUIGFuZCByZXR1cm4gaXQgYXMgYVxuICoge0BsaW5rIFBlbmRpbmdQYXVzZX0uIGBhdGAgbmFtZXMgd2hlcmUgdGhlIHJlY29yZCBzaXRzIChgJydgIGZvciB0aGVcbiAqIGNoZWNrcG9pbnQgaXRzZWxmLCBgJ3BlbmRpbmdQYXVzZXNbMF0nYCBmb3IgYSBzaWJsaW5nKSwgc28gYm90aCBzaXRlcyBzcGVha1xuICogdGhlIHNhbWUgc2VudGVuY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGF1c2VSZWNvcmQocmF3OiB1bmtub3duLCBhdCA9ICcnKTogUGVuZGluZ1BhdXNlIHtcbiAgY29uc3QgZmllbGQgPSAobmFtZTogc3RyaW5nKSA9PiAoYXQgPyBgJHthdH0uJHtuYW1lfWAgOiBuYW1lKTtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKHJhdykpIHJlZnVzZShgJHthdCB8fCAndGhlIGNoZWNrcG9pbnQnfSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICBpZiAodHlwZW9mIHJhdy5wYXVzZWRTdGFnZUlkICE9PSAnc3RyaW5nJyB8fCByYXcucGF1c2VkU3RhZ2VJZCA9PT0gJycpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3BhdXNlZFN0YWdlSWQnKX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxuICBjb25zdCBzdWJmbG93UGF0aCA9IHJhdy5zdWJmbG93UGF0aDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN1YmZsb3dQYXRoKSB8fCAhc3ViZmxvd1BhdGguZXZlcnkoKHMpID0+IHR5cGVvZiBzID09PSAnc3RyaW5nJykpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dQYXRoJyl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2ApO1xuICB9XG4gIGNvbnN0IHN0YXRlcyA9IHJhdy5zdWJmbG93U3RhdGVzO1xuICBpZiAoc3RhdGVzICE9PSB1bmRlZmluZWQgJiYgIWlzUGxhaW5SZWNvcmQoc3RhdGVzKSkgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93U3RhdGVzJyl9IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIC8vIEVhY2ggY2FwdHVyZSBzZWVkcyBhIHN1YmZsb3cncyBydW50aW1lIOKAlCBhIHBsYWluIG9iamVjdCwgbGlrZSBgc2hhcmVkU3RhdGVgLlxuICBmb3IgKGNvbnN0IFtzdWJmbG93SWQsIGNhcHR1cmVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YXRlcyA/PyB7fSkpIHtcbiAgICBpZiAoIWlzUGxhaW5SZWNvcmQoY2FwdHVyZSkpIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1N0YXRlcycpfVske0pTT04uc3RyaW5naWZ5KHN1YmZsb3dJZCl9XSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICB9XG4gIGlmIChyYXcucGF1c2VkQnkgIT09IHVuZGVmaW5lZCAmJiByYXcucGF1c2VkQnkgIT09ICdpbnRlcnJ1cHQnKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdwYXVzZWRCeScpfSBtdXN0IGJlICdpbnRlcnJ1cHQnIHdoZW4gcHJlc2VudGApO1xuICB9XG4gIC8vIEEga2V5IHRoZSByZXN1bWUgd2lsbCBTRU5EIChQMyk6IGhlbGQgdG8gdGhlIG9uZSBrZXkgcnVsZSwgcmVmdXNlZCDigJQgbmV2ZXIgZHJvcHBlZCAoZHJvcHBpbmcgd291bGQgbGV0IHRoZVxuICAvLyByZXN1bWUgcmVjb21wdXRlIGEgZGlmZmVyZW50IGtleSkuXG4gIGlmIChyYXcuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHByb2JsZW0gPSBpZGVtcG90ZW5jeUtleVByb2JsZW0ocmF3LmlkZW1wb3RlbmN5S2V5KTtcbiAgICBpZiAocHJvYmxlbSAhPT0gdW5kZWZpbmVkKSByZWZ1c2UoYCR7ZmllbGQoJ2lkZW1wb3RlbmN5S2V5Jyl9ICR7cHJvYmxlbX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdXNlZFN0YWdlSWQ6IHJhdy5wYXVzZWRTdGFnZUlkIGFzIHN0cmluZyxcbiAgICBzdWJmbG93UGF0aDogc3ViZmxvd1BhdGggYXMgc3RyaW5nW10sXG4gICAgc3ViZmxvd1N0YXRlczogKHN0YXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQpID8/IHt9LFxuICAgIC4uLihyYXcucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHJhdy5wYXVzZURhdGEgfSksXG4gICAgLi4uKHJhdy5wYXVzZWRCeSA9PT0gJ2ludGVycnVwdCcgJiYgeyBwYXVzZWRCeTogJ2ludGVycnVwdCcgYXMgY29uc3QgfSksXG4gICAgLy8gQSByZWNvcmQsIG5ldmVyIGEgcGxhbiBpbnB1dDoga2VwdCBvbmx5IHdoZW4gd2VsbC1mb3JtZWQgKGFuIG9sZGVyIG9yXG4gICAgLy8gaGFuZC1lZGl0ZWQgZW50cnkgc2ltcGx5IHJlc3VtZXMgd2l0aG91dCBhIGxpbmspLlxuICAgIC4uLihpc1BhdXNlZEV4ZWN1dGlvbihyYXcucGF1c2VkRXhlY3V0aW9uKSAmJiB7XG4gICAgICBwYXVzZWRFeGVjdXRpb246IHsgcnVuSWQ6IHJhdy5wYXVzZWRFeGVjdXRpb24ucnVuSWQsIHJ1bnRpbWVTdGFnZUlkOiByYXcucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkIH0sXG4gICAgfSksXG4gICAgLi4uKHJhdy5pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHJhdy5pZGVtcG90ZW5jeUtleSBhcyBzdHJpbmcgfSksXG4gIH07XG59XG5cbi8qKlxuICogVEhFIGNoZWNrcG9pbnQgZGVjb2RlcjogdXBjYXN0LCB0aGVuIGNoZWNrIOKAlCB0aGUgY2hlY2twb2ludCBpcyBhbiBvYmplY3QsXG4gKiBpdHMgYHNoYXJlZFN0YXRlYCBhIHBsYWluIG9iamVjdCwgaXRzIG93biBwYXVzZSByZWNvcmQgd2VsbC1mb3JtZWQsIGFuZFxuICogZXZlcnkgYHBlbmRpbmdQYXVzZXNgIGVudHJ5IHdlbGwtZm9ybWVkIChlYWNoIHJldHVybmVkIGRlY29kZWQpLiBUaHJvd3NcbiAqIGBJbnZhbGlkIGNoZWNrcG9pbnQ6IOKApmAgbmFtaW5nIHRoZSBmaXJzdCBmaWVsZCB0aGF0IGlzIG5vdDsgbmV2ZXIgZWRpdHNcbiAqIHRoZSBjYWxsZXIncyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVDaGVja3BvaW50KHN0b3JlZDogdW5rbm93bik6IEZsb3djaGFydENoZWNrcG9pbnQge1xuICBpZiAoIWlzUGxhaW5SZWNvcmQoc3RvcmVkKSkgcmVmdXNlKCd0aGUgY2hlY2twb2ludCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICBjb25zdCBjaGVja3BvaW50ID0gdXBjYXN0Q2hlY2twb2ludChzdG9yZWQpO1xuICBpZiAoIWlzUGxhaW5SZWNvcmQoY2hlY2twb2ludC5zaGFyZWRTdGF0ZSkpIHJlZnVzZSgnc2hhcmVkU3RhdGUgbXVzdCBiZSBhIHBsYWluIG9iamVjdCcpO1xuICBkZWNvZGVQYXVzZVJlY29yZChjaGVja3BvaW50KTtcbiAgLy8gQSByZWNvcmQsIG5ldmVyIGEgcGxhbiBpbnB1dCDigJQgdGhlIFNBTUUgcnVsZSBhcyBhIHNpYmxpbmcnczogYSBtYWxmb3JtZWRcbiAgLy8gbGluayBpcyBkcm9wcGVkICh0aGUgcmVzdW1lIHJ1bnMgd2l0aG91dCBpdCksIG5ldmVyIHRydXN0ZWQuXG4gIGlmIChjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbiAhPT0gdW5kZWZpbmVkICYmICFpc1BhdXNlZEV4ZWN1dGlvbihjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbikpIHtcbiAgICBkZWxldGUgY2hlY2twb2ludC5wYXVzZWRFeGVjdXRpb247XG4gIH1cbiAgLy8gVGhlIGNvdW50ZXJzIHNlZWQgdGhlIHJlc3VtZWQgcnVuJ3MgaWRzIGFuZCBsb29wIGJ1ZGdldDogYWJzZW50IGlzIGFuIG9sZFxuICAvLyBjaGVja3BvaW50ICh0aGUgY291bnRlciByZXN0YXJ0cyksIHByZXNlbnQgbXVzdCBiZSB3ZWxsLWZvcm1lZC5cbiAgaWYgKGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQgIT09IHVuZGVmaW5lZCAmJiAhaXNDb3VudChjaGVja3BvaW50LmV4ZWN1dGlvbkNvdW50KSkge1xuICAgIHJlZnVzZSgnZXhlY3V0aW9uQ291bnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cbiAgY29uc3QgdmlzaXRzID0gY2hlY2twb2ludC52aXNpdENvdW50cztcbiAgaWYgKHZpc2l0cyAhPT0gdW5kZWZpbmVkICYmICghaXNQbGFpblJlY29yZCh2aXNpdHMpIHx8ICFPYmplY3QudmFsdWVzKHZpc2l0cykuZXZlcnkoaXNDb3VudCkpKSB7XG4gICAgcmVmdXNlKCd2aXNpdENvdW50cyBtdXN0IG1hcCBzdGFnZSBpZHMgdG8gbm9uLW5lZ2F0aXZlIGludGVnZXJzJyk7XG4gIH1cbiAgaWYgKGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyAhPT0gdW5kZWZpbmVkKSBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXMgPSBkZWNvZGVQZW5kaW5nUGF1c2VzKGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyk7XG4gIC8vIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIChuYW1lcyBvbmx5KSBzZWVkcyB0aGUgcmVzdW1lZCBydW4ncyBydWxlIOKAlCBhIG1hbGZvcm1lZCBvbmVcbiAgLy8gaXMgcmVmdXNlZCwgbmV2ZXIgZHJvcHBlZDogZHJvcHBpbmcgaXQgd291bGQgc2VydmUgaW4gcGxhaW4gd2hhdCB0aGUgcnVuIGhhZCBtYXNrZWQuXG4gIGlmIChjaGVja3BvaW50LnJlZGFjdGlvbk1hcmtzICE9PSB1bmRlZmluZWQpIGRlY29kZVJlZGFjdGlvbk1hcmtzKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MpO1xuICByZXR1cm4gY2hlY2twb2ludCBhcyB1bmtub3duIGFzIEZsb3djaGFydENoZWNrcG9pbnQ7XG59XG5cbi8qKiBgcmVkYWN0aW9uTWFya3NgOiBga2V5c2AgYW4gYXJyYXkgb2Ygc3RyaW5nczsgYGZpZWxkc2AsIHdoZW4gcHJlc2VudCwga2V5cyDihpIgYXJyYXlzIG9mIHN0cmluZ3MuICovXG5mdW5jdGlvbiBkZWNvZGVSZWRhY3Rpb25NYXJrcyhtYXJrczogdW5rbm93bik6IHZvaWQge1xuICBpZiAoIWlzUGxhaW5SZWNvcmQobWFya3MpKSByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIGlmICghaXNTdHJpbmdzKG1hcmtzLmtleXMpKSByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzLmtleXMgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG4gIGNvbnN0IGZpZWxkcyA9IG1hcmtzLmZpZWxkcztcbiAgaWYgKGZpZWxkcyAhPT0gdW5kZWZpbmVkICYmICghaXNQbGFpblJlY29yZChmaWVsZHMpIHx8ICFPYmplY3QudmFsdWVzKGZpZWxkcykuZXZlcnkoaXNTdHJpbmdzKSkpIHtcbiAgICByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzLmZpZWxkcyBtdXN0IG1hcCBrZXlzIHRvIGFycmF5cyBvZiBzdHJpbmdzJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdHJpbmdzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn1cblxuLyoqXG4gKiBgcGVuZGluZ1BhdXNlc2AgKHN0b3JlZCwgdW50cnVzdGVkKSBhcyBkZWNvZGVkIHJlY29yZHMg4oCUIHRoZSBvbmUgY2hlY2tcbiAqIGBkZWNvZGVDaGVja3BvaW50YCBydW5zLCBhbmQgdGhlIG9uZSBgUmVzdW1lRW50cnkucGxhbmAgcnVucyBvbiB3aGF0IGl0IGlzXG4gKiBoYW5kZWQgZGlyZWN0bHksIHNvIG5laXRoZXIgZG9vciB0YWtlcyBhbiB1bmNoZWNrZWQgc2libGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBlbmRpbmdQYXVzZXMocGVuZGluZzogdW5rbm93bik6IFBlbmRpbmdQYXVzZVtdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBlbmRpbmcpKSByZWZ1c2UoJ3BlbmRpbmdQYXVzZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICByZXR1cm4gcGVuZGluZy5tYXAoKHJhdzogdW5rbm93biwgbikgPT4gZGVjb2RlUGF1c2VSZWNvcmQocmF3LCBgcGVuZGluZ1BhdXNlc1ske259XWApKTtcbn1cblxuZnVuY3Rpb24gaXNDb3VudCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwO1xufVxuIl19
|
package/dist/lib/pause/types.js
CHANGED
|
@@ -99,6 +99,8 @@ class PauseSignal extends Error {
|
|
|
99
99
|
* (`completeExecution`), or both carried over for a queued sibling.
|
|
100
100
|
*/
|
|
101
101
|
_pausedExecution;
|
|
102
|
+
/** The paused execution's idempotency key (P3) — a touching stage's, stamped once at the stage boundary. */
|
|
103
|
+
_idempotencyKey;
|
|
102
104
|
constructor(data, stageId, pausedBy) {
|
|
103
105
|
super('Execution paused');
|
|
104
106
|
this.name = 'PauseSignal';
|
|
@@ -129,6 +131,18 @@ class PauseSignal extends Error {
|
|
|
129
131
|
return;
|
|
130
132
|
this._pausedExecution = { runtimeStageId, ...(runId !== undefined && { runId }) };
|
|
131
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* The idempotency key the paused execution ran under (P3) — a touching stage's. It rides the checkpoint so the
|
|
136
|
+
* resume re-runs the stage (or its `resumeFn`) under the SAME key: the input its rule read does not cross a
|
|
137
|
+
* resume. First stamp wins.
|
|
138
|
+
*/
|
|
139
|
+
get idempotencyKey() {
|
|
140
|
+
return this._idempotencyKey;
|
|
141
|
+
}
|
|
142
|
+
stampIdempotencyKey(key) {
|
|
143
|
+
if (this._idempotencyKey === undefined && key !== undefined)
|
|
144
|
+
this._idempotencyKey = key;
|
|
145
|
+
}
|
|
132
146
|
/**
|
|
133
147
|
* Name the run for every pause on this signal that paused in it — this one
|
|
134
148
|
* and its queued siblings that do not already carry a run (a sibling raised
|
|
@@ -167,6 +181,7 @@ class PauseSignal extends Error {
|
|
|
167
181
|
...(pause.pausedBy && { pausedBy: pause.pausedBy }),
|
|
168
182
|
...(pause.pausedExecution &&
|
|
169
183
|
typeof pause.pausedExecution.runtimeStageId === 'string' && { pausedExecution: { ...pause.pausedExecution } }),
|
|
184
|
+
...(pause.idempotencyKey !== undefined && { idempotencyKey: pause.idempotencyKey }),
|
|
170
185
|
});
|
|
171
186
|
}
|
|
172
187
|
/**
|
|
@@ -190,6 +205,7 @@ class PauseSignal extends Error {
|
|
|
190
205
|
...(this.pauseData !== undefined && { pauseData: this.pauseData }),
|
|
191
206
|
...(this.pausedBy && { pausedBy: this.pausedBy }),
|
|
192
207
|
...(this._pausedExecution && { pausedExecution: { ...this._pausedExecution } }),
|
|
208
|
+
...(this._idempotencyKey !== undefined && { idempotencyKey: this._idempotencyKey }),
|
|
193
209
|
};
|
|
194
210
|
}
|
|
195
211
|
/** The stage that invoked the paused child (decider, selector, fork). */
|
|
@@ -251,4 +267,4 @@ function isPauseSignal(error) {
|
|
|
251
267
|
}
|
|
252
268
|
}
|
|
253
269
|
exports.isPauseSignal = isPauseSignal;
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7OztBQTRCSCw4RUFBOEU7QUFDOUUsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxNQUFNLENBQUMsR0FBRyxLQUF5RSxDQUFDO0lBQ3BGLE9BQU8sQ0FDTCxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxFQUFFLENBQ2xILENBQUM7QUFDSixDQUFDO0FBTEQsOENBS0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7OztPQVNHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssY0FBYyxHQUE0QyxFQUFFLENBQUM7SUFFckU7Ozs7Ozs7T0FPRztJQUNLLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBOEM7SUFFdEUsWUFBWSxJQUFhLEVBQUUsT0FBZSxFQUFFLFFBQXNCO1FBQ2hFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FB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RjtBQWxNRCxrQ0FrTUM7QUE2UUQsK0RBQStEO0FBRS9ELGdFQUFnRTtBQUNoRSxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFLLEtBQXFCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUM5RixDQUFDO0FBRkQsc0NBRUM7QUFFRCx3R0FBd0c7QUFDeEcsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUNMLEtBQUssWUFBWSxXQUFXO1lBQzVCLENBQUMsS0FBSyxZQUFZLEtBQUs7Z0JBQ3JCLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYTtnQkFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7Z0JBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBZkQsc0NBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhdXNlL1Jlc3VtZSDigJQgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93cy5cbiAqXG4gKiBBIHN0YWdlIHNpZ25hbHMgcGF1c2UgYnkgY2FsbGluZyBgc2NvcGUuJHBhdXNlKGRhdGEpYCB3aGljaCB0aHJvd3MgYSBQYXVzZVNpZ25hbC5cbiAqIFRoZSBzaWduYWwgYnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBGbG93Q2hhcnRFeGVjdXRvcixcbiAqIGVhY2ggbGV2ZWwgYWRkaW5nIGl0cyBzdWJmbG93IElEIHRvIHRoZSBwYXRoLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGNhcHR1cmVzIHdoYXQgYSByZXN1bWUgcmVhZHMsIGFuZCB0aGUgcGF1c2UncyBvd24gcmVjb3JkIOKAlFxuICogbmV2ZXIgdGhlIHJ1bidzIGhpc3RvcnkgKHRoYXQgaXMgYGdldFNuYXBzaG90KClgJ3MpOlxuICogICAtIHBhdXNlZFN0YWdlSWQgKyBzdWJmbG93UGF0aCAoKyBwYXVzZWRCeSk6IHRoZSBjdXJzb3JcbiAqICAgLSBzaGFyZWRTdGF0ZSArIHN1YmZsb3dTdGF0ZXM6IHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2Ug4oCUIHRoZSByb290J3MsIGFuZFxuICogICAgIGVhY2ggc3ViZmxvdydzIG9uIHRoZSBwYXVzZSBwYXRoXG4gKiAgIC0gZXhlY3V0aW9uQ291bnQgKyB2aXNpdENvdW50czogdGhlIGNvdW50ZXJzIHRoZSByZXN1bWVkIHJ1biBjb250aW51ZXNcbiAqICAgLSBwZW5kaW5nUGF1c2VzLCByZWRhY3Rpb25NYXJrczogd2FpdGluZyBzaWJsaW5ncywgcmVkYWN0aW9uIG5hbWVzXG4gKiAgIC0gcGF1c2VEYXRhLCBwYXVzZWRFeGVjdXRpb24sIGludm9rZXJTdGFnZUlkLCBwYXVzZWRBdDogdGhlIHJlY29yZFxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93IChhdCBhbnkgZGVwdGgg4oCUIG1vdW50ZWQgbGluZWFybHksIGFzIGFcbiAqIGRlY2lkZXIgb3Igc2VsZWN0b3IgYnJhbmNoLCBvciBhcyBhIGZvcmsgY2hpbGQpLCBsb29wLCBuZXN0ZWQgc3ViZmxvdyBpblxuICogbG9vcCwgYW5kIHNldmVyYWwgcGFyYWxsZWwgc2libGluZ3MgcGF1c2luZyBpbiBvbmUgZmFuLW91dCAoZWFjaCBhc2tzIGluXG4gKiB0dXJuIOKAlCBgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuXG4gKlxuICogTk9UIHJlc3VtYWJsZSB5ZXQ6IGEgcGF1c2UgaW5zaWRlIGEgTEFaWSBzdWJmbG93IChgYWRkTGF6eVN1YkZsb3dDaGFydCpgKSBvclxuICogaW5zaWRlIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGJyYW5jaC4gVGhlaXIgZ3JhcGhzIGFyZSByZXNvbHZlZCBhdCBydW4gdGltZVxuICogYW5kIGFyZSBub3QgaW4gdGhlIGNoYXJ0IGEgcmVzdW1lIHdhbGtzLCBzbyBgcmVzdW1lKClgIHJlZnVzZXMgdGhlXG4gKiBjaGVja3BvaW50IChcIm5vdCBmb3VuZFwiKSBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiBQaW5uZWQgaW5cbiAqIHRlc3QvbGliL3BhdXNlL3Jlc3VtZS1rbm93bi1saW1pdGF0aW9ucy50ZXN0LnRzLlxuICovXG5cbi8vIOKUgOKUgCBQYXVzZVNpZ25hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gKiBydW50aW1lU3RhZ2VJZCBpbiBpdC4gUmVjb3JkZWQgb24gdGhlIGNoZWNrcG9pbnQgKGFuZCBvbiBlYWNoIHF1ZXVlZFxuICogc2libGluZydzIHBlbmRpbmcgcmVjb3JkKSBzbyBhIHJlc3VtZSBjYW4gTElOSyB0byBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZWRFeGVjdXRpb24ge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIHRvIHRoZSByZXN1bWVkIHJ1biDigJQgTkFNRVMgb25seSwgbmV2ZXIgYSB2YWx1ZVxuICogKHRoZSBjaGVja3BvaW50IHN0YXlzIHJlYWwpOiB0aGUga2V5cyBtYXJrZWQgc2VjcmV0IGZvciB0aGUgcmVzdCBvZiB0aGUgcnVuXG4gKiAoYSBwZXItY2FsbCBgc2V0VmFsdWUoa2V5LCB2YWx1ZSwgdHJ1ZSlgLCBhIGtleSB0aGUgcG9saWN5IHJlZGFjdGVkIHdob2xlLCBhXG4gKiBzdWJmbG93IG1hcHBlcidzIHRhaW50KSBhbmQgdGhlIGZpZWxkcyBhIG1hcHBlciBoYW5kZWQgdG8gYSBuZXcga2V5LiBSZXN1bWVcbiAqIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUgd2l0aCB0aGVtLCBzbyBhIGNvcHkgbWFkZSBiZWZvcmUgdGhlIHBhdXNlIGlzXG4gKiBzdGlsbCBtYXNrZWQgYWZ0ZXIgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkYWN0aW9uTWFya3Mge1xuICByZWFkb25seSBrZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEtleSDihpIgdGhlIGZpZWxkIHBhdGhzIGEgbWFwcGVyIGhhbmRlZCBpdC4gQWJzZW50IHdoZW4gbm9uZS4gKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqIFRydWUgZm9yIGEgd2VsbC1mb3JtZWQge0BsaW5rIFBhdXNlZEV4ZWN1dGlvbn0gKHR3byBub24tZW1wdHkgc3RyaW5ncykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZWRFeGVjdXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZWRFeGVjdXRpb24ge1xuICBjb25zdCB2ID0gdmFsdWUgYXMgeyBydW5JZD86IHVua25vd247IHJ1bnRpbWVTdGFnZUlkPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdj8ucnVuSWQgPT09ICdzdHJpbmcnICYmIHYucnVuSWQgIT09ICcnICYmIHR5cGVvZiB2LnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB2LnJ1bnRpbWVTdGFnZUlkICE9PSAnJ1xuICApO1xufVxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZCDigJQgYCdpbnRlcnJ1cHQnYCB3aGVuIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgcGF5bG9hZClgLCBhYnNlbnQgZm9yIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmBcbiAgICogZXhlY3V0ZS9yZXN1bWUgcGF0aC4gU2V0IGF0IHRoZSBzdGFnZSBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGNhcnJpZWRcbiAgICogb250byB0aGUgY2hlY2twb2ludCwgYW5kIHJlYWQgYnkgYHJlc3VtZSgpYCB0byBwaWNrIHRoZSByZS1lbnRyeTogYW5cbiAgICogaW50ZXJydXB0ZWQgc3RhZ2UgcmUtcnVucyBpdHMgT1dOIGZ1bmN0aW9uIGZyb20gdGhlIHRvcCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMpLCBhIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLiAoVGhlXG4gICAqIGludm9rZXIncyBgLm5leHRgIGlkIHJvZGUgYmVzaWRlIGl0IHVudGlsIDkuMzkuMCBhc1xuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGA7IHdoYXQgcnVucyBhZnRlciBhIHJlc3VtZSBjb21lcyBmcm9tIHRoZSBjaGFydFxuICAgKiBzaW5jZSA5LjI4LjAsIHNvIGl0IGlzIG5vIGxvbmdlciBjYXJyaWVkLilcbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgdGhhdCBQQVJBTExFTCBTSUJMSU5HUyByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCBhcyB0aGlzIG9uZSxcbiAgICogd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApLiBSZWNvcmRlZCBieSBgQ2hpbGRyZW5FeGVjdXRvcmAgd2hlbiBtb3JlXG4gICAqIHRoYW4gb25lIGNoaWxkIG9mIGEgZm9yayAob3IgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBicmFuY2gpIHBhdXNlczogdGhlXG4gICAqIGZpcnN0IHBhdXNlIGlzIHRoZSBvbmUgdGhhdCBpcyBhc2tlZCwgdGhlIG90aGVycyByaWRlIGhlcmUgaW5zdGVhZCBvZlxuICAgKiBiZWluZyBkcm9wcGVkLiBFYWNoIHBhdGggaXMgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIHNpZ25hbCBjdXJyZW50bHkgaXNcbiAgICogYW5kIGdyb3dzIHdpdGggaXQg4oCUIGBwcmVwZW5kU3ViZmxvd2AgcHJlcGVuZHMgdG8gZXZlcnkgZW50cnkgdG9vLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1BhdXNlczogTXV0YWJsZVBlbmRpbmdQYXVzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFdISUNIIGV4ZWN1dGlvbiBwYXVzZWQg4oCUIGl0cyBydW50aW1lU3RhZ2VJZCBzdGFtcGVkIG9uY2UgYXQgdGhlIHN0YWdlXG4gICAqIGJvdW5kYXJ5IChgU3RhZ2VSdW5uZXJgKSwgaXRzIHJ1biBhZGRlZCB3aGVuIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0XG4gICAqIChgY29tcGxldGVFeGVjdXRpb25gKSwgb3IgYm90aCBjYXJyaWVkIG92ZXIgZm9yIGEgcXVldWVkIHNpYmxpbmcuXG4gICAqL1xuICBwcml2YXRlIF9wYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG5cbiAgY29uc3RydWN0b3IoZGF0YTogdW5rbm93biwgc3RhZ2VJZDogc3RyaW5nLCBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnKSB7XG4gICAgc3VwZXIoJ0V4ZWN1dGlvbiBwYXVzZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnUGF1c2VTaWduYWwnO1xuICAgIHRoaXMucGF1c2VEYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YWdlSWQgPSBzdGFnZUlkO1xuICAgIGlmIChwYXVzZWRCeSkgdGhpcy5wYXVzZWRCeSA9IHBhdXNlZEJ5O1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoID0gW107XG4gICAgLy8gUGF1c2VTaWduYWwgaXMgY29udHJvbCBmbG93LCBub3QgYSByZWFsIGVycm9yIOKAlCBzdGFjayB0cmFjZSBoYXMgbm8gZGlhZ25vc3RpYyB2YWx1ZS5cbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cblxuICBnZXQgc3ViZmxvd1BhdGgoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93UGF0aDtcbiAgfVxuXG4gIC8qKiBUaGUgcGF1c2VkIGV4ZWN1dGlvbiAoaXRzIHJ1biBhbmQgYFtwYXRoL11zdGFnZUlkI05gKSwgb25jZSBib3RoIGFyZSBrbm93bi4gKi9cbiAgZ2V0IHBhdXNlZEV4ZWN1dGlvbigpOiBQYXVzZWRFeGVjdXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9wYXVzZWRFeGVjdXRpb247XG4gICAgcmV0dXJuIGU/LnJ1bklkICE9PSB1bmRlZmluZWQgPyB7IHJ1bklkOiBlLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB3aGljaCBFWEVDVVRJT04gcGF1c2VkLiBGaXJzdCBzdGFtcCB3aW5zOiB0aGUgc2lnbmFsIGJ1YmJsZXNcbiAgICogdGhyb3VnaCBvdXRlciBib3VuZGFyaWVzIHRoYXQgbXVzdCBub3Qgb3ZlcndyaXRlIGl0LiBUaGUgc3RhZ2UgYm91bmRhcnlcbiAgICoga25vd3Mgb25seSB0aGUgcnVudGltZVN0YWdlSWQ7IGEgcXVldWVkIHNpYmxpbmcgcmFpc2VkIGFnYWluIG9uIHJlc3VtZVxuICAgKiBjYXJyaWVzIGJvdGggKGl0IHBhdXNlZCBpbiBhbiBFQVJMSUVSIHJ1bikuXG4gICAqL1xuICBzdGFtcEV4ZWN1dGlvbihydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBydW5JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wYXVzZWRFeGVjdXRpb24gIT09IHVuZGVmaW5lZCB8fCAhcnVudGltZVN0YWdlSWQpIHJldHVybjtcbiAgICB0aGlzLl9wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkLCAuLi4ocnVuSWQgIT09IHVuZGVmaW5lZCAmJiB7IHJ1bklkIH0pIH07XG4gIH1cblxuICAvKipcbiAgICogTmFtZSB0aGUgcnVuIGZvciBldmVyeSBwYXVzZSBvbiB0aGlzIHNpZ25hbCB0aGF0IHBhdXNlZCBpbiBpdCDigJQgdGhpcyBvbmVcbiAgICogYW5kIGl0cyBxdWV1ZWQgc2libGluZ3MgdGhhdCBkbyBub3QgYWxyZWFkeSBjYXJyeSBhIHJ1biAoYSBzaWJsaW5nIHJhaXNlZFxuICAgKiBhZ2FpbiBvbiByZXN1bWUga2VlcHMgdGhlIHJ1biBpdCBwYXVzZWQgaW4pLiBDYWxsZWQgb25jZSwgd2hlbiB0aGVcbiAgICogY2hlY2twb2ludCBpcyBidWlsdC5cbiAgICovXG4gIGNvbXBsZXRlRXhlY3V0aW9uKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICYmIHRoaXMuX3BhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPSBydW5JZDtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5fcGVuZGluZ1BhdXNlcykge1xuICAgICAgaWYgKHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uICYmIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uLnJ1bklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGVuZGluZy5wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkOiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCwgcnVuSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGVuZCBhIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGggKGNhbGxlZCBkdXJpbmcgYnViYmxlLXVwKS4gVGhlIHBlbmRpbmdcbiAgICogc2libGluZyBwYXVzZXMgcmlkZSB0aGUgc2FtZSBib3VuZGFyeSwgc28gdGhlaXIgcGF0aHMgZ3JvdyB3aXRoIGl0LlxuICAgKi9cbiAgcHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHBlbmRpbmcuc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgcGFyYWxsZWwgc2libGluZydzIHBhdXNlIGJlaGluZCB0aGlzIG9uZSAoaXRzIHBhdGggcmVsYXRpdmUgdG9cbiAgICogdGhpcyBzaWduYWwncyBjdXJyZW50IGxldmVsKS4gQ29waWVkIGluOiB0aGUgZW50cnkgaXMgb3duZWQgYnkgdGhlXG4gICAqIHNpZ25hbCBmcm9tIGhlcmUgb24uXG4gICAqL1xuICBhZGRQZW5kaW5nUGF1c2UocGF1c2U6IFBlbmRpbmdQYXVzZSk6IHZvaWQge1xuICAgIHRoaXMuX3BlbmRpbmdQYXVzZXMucHVzaCh7XG4gICAgICBwYXVzZWRTdGFnZUlkOiBwYXVzZS5wYXVzZWRTdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IFsuLi5wYXVzZS5zdWJmbG93UGF0aF0sXG4gICAgICBzdWJmbG93U3RhdGVzOiB7IC4uLnBhdXNlLnN1YmZsb3dTdGF0ZXMgfSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogcGF1c2UucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEJ5ICYmIHsgcGF1c2VkQnk6IHBhdXNlLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEV4ZWN1dGlvbiAmJlxuICAgICAgICB0eXBlb2YgcGF1c2UucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi5wYXVzZS5wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJhbGxlbCBzaWJsaW5ncycgcGF1c2VzIHdhaXRpbmcgYmVoaW5kIHRoaXMgb25lLCBpbiB0aGUgb3JkZXIgdGhleSB3aWxsXG4gICAqIGJlIGFza2VkLiBJbiBmbGlnaHQsIGEgc2libGluZyB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1biBjYXJyaWVzIG9ubHkgaXRzXG4gICAqIHJ1bnRpbWVTdGFnZUlkOyBgY29tcGxldGVFeGVjdXRpb25gIChhdCBjaGVja3BvaW50IGJ1aWxkKSBhZGRzIHRoZSBydW4uXG4gICAqL1xuICBnZXQgcGVuZGluZ1BhdXNlcygpOiByZWFkb25seSBQZW5kaW5nUGF1c2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdQYXVzZXMgYXMgcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwYXVzZSBhcyBhIHtAbGluayBQZW5kaW5nUGF1c2V9IOKAlCB3aGF0IGBDaGlsZHJlbkV4ZWN1dG9yYCBxdWV1ZXNcbiAgICogYmVoaW5kIGEgc2libGluZydzIHBhdXNlIHdoZW4gYm90aCBwYXVzZWQgaW4gb25lIGZhbi1vdXQuXG4gICAqL1xuICB0b1BlbmRpbmdQYXVzZSgpOiBQZW5kaW5nUGF1c2Uge1xuICAgIC8vIEluIGZsaWdodCAoc2VlIGBwZW5kaW5nUGF1c2VzYCk6IHRoZSBydW4gaXMgYWRkZWQgYXQgY2hlY2twb2ludCBidWlsZC5cbiAgICByZXR1cm4gPFBlbmRpbmdQYXVzZT57XG4gICAgICBwYXVzZWRTdGFnZUlkOiB0aGlzLnN0YWdlSWQsXG4gICAgICBzdWJmbG93UGF0aDogWy4uLnRoaXMuX3N1YmZsb3dQYXRoXSxcbiAgICAgIHN1YmZsb3dTdGF0ZXM6IHsgLi4udGhpcy5fc3ViZmxvd1N0YXRlcyB9LFxuICAgICAgLi4uKHRoaXMucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHRoaXMucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHRoaXMucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogdGhpcy5wYXVzZWRCeSB9KSxcbiAgICAgIC4uLih0aGlzLl9wYXVzZWRFeGVjdXRpb24gJiYgeyBwYXVzZWRFeGVjdXRpb246IHsgLi4udGhpcy5fcGF1c2VkRXhlY3V0aW9uIH0gfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBUaGUgc3RhZ2UgdGhhdCBpbnZva2VkIHRoZSBwYXVzZWQgY2hpbGQgKGRlY2lkZXIsIHNlbGVjdG9yLCBmb3JrKS4gKi9cbiAgZ2V0IGludm9rZXJTdGFnZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZXJTdGFnZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wIHRoZSBpbnZva2VyIGNvbnRleHQgZHVyaW5nIGJ1YmJsZS11cC5cbiAgICogQ2FsbGVkIGJ5IGRlY2lkZXIvc2VsZWN0b3IvZm9yayBoYW5kbGVycyB3aGVuIGNhdGNoaW5nIGEgY2hpbGQncyBQYXVzZVNpZ25hbC5cbiAgICogRmlyc3QgaW52b2tlciB3aW5zIChpbm5lcm1vc3QpIOKAlCBzdWJzZXF1ZW50IGNhbGxzIGFyZSBuby1vcHMuXG4gICAqL1xuICBzZXRJbnZva2VyKGludm9rZXJTdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ludm9rZXJTdGFnZUlkKSB0aGlzLl9pbnZva2VyU3RhZ2VJZCA9IGludm9rZXJTdGFnZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYSBzdWJmbG93J3MgaXNvbGF0ZWQgU2hhcmVkTWVtb3J5IGF0IHRoZSBtb21lbnQgaXRzXG4gICAqIHRyYXZlcnNhbCB0aHJldy4gQ2FsbGVkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIG9uY2UgcGVyIHN1YmZsb3dcbiAgICogYm91bmRhcnkgb24gdGhlIGJ1YmJsZS11cCBwYXRoLiBFYWNoIGNhcHR1cmUgaXMga2V5ZWQgYnkgdGhlXG4gICAqIHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAodGhlIHNhbWUgaWQgdXNlZCBpbiBgc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogSW5uZXJtb3N0LWZpcnN0OiBhIGRlZXAgYFNlcXVlbmNlKEFnZW50KC4uLikpYCBwYXVzZSBjYXB0dXJlcyB0aGVcbiAgICogYWdlbnQncyBzdWJmbG93IGZpcnN0LCB0aGVuIGl0cyBwYXJlbnQncywgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3RcbiAgICogbW91bnQuIFRoZSBmdWxsIG5lc3Qgc3Vydml2ZXMgaW50byBgY2hlY2twb2ludC5zdWJmbG93U3RhdGVzYC5cbiAgICovXG4gIGNhcHR1cmVTdWJmbG93U2NvcGUoc3ViZmxvd0lkOiBzdHJpbmcsIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIC8vIERlZmVuc2l2ZSBzaGFsbG93IGNsb25lIHNvIGxhdGVyIG11dGF0aW9ucyBvbiB0aGUgc291cmNlIGRvbid0XG4gICAgLy8gYmxlZWQgaW50byB0aGUgY2FwdHVyZWQgc25hcHNob3QuIERlZXAgY2xvbmluZyBpcyB0aGUgY29uc3VtZXInc1xuICAgIC8vIHJlc3BvbnNpYmlsaXR5ICh0aGUgcmVzdW1lIHRhcmdldCBtYXkgbm90IGV2ZW4gYmUgb24gdGhpc1xuICAgIC8vIHByb2Nlc3MpOyBTaGFyZWRNZW1vcnkgdmFsdWVzIGFyZSBjb252ZW50aW9uYWxseSBKU09OLWZyaWVuZGx5LlxuICAgIHRoaXMuX3N1YmZsb3dTdGF0ZXNbc3ViZmxvd0lkXSA9IHsgLi4uc3RhdGUgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlZCBzdWJmbG93IHNjb3BlcyAocmVhZC1vbmx5IHZpZXcpLiAqL1xuICBnZXQgc3ViZmxvd1N0YXRlcygpOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1N0YXRlcztcbiAgfVxufVxuXG4vLyDilIDilIAgUGVuZGluZ1BhdXNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEEgcGF1c2UgYSBQQVJBTExFTCBTSUJMSU5HIG9mIHRoZSBwYXVzZWQgc3RhZ2UgcmFpc2VkIGluIHRoZSBzYW1lIGZhbi1vdXQg4oCUXG4gKiB0d28gY2hpbGRyZW4gb2Ygb25lIGZvcmsgKG9yIHR3byBzZWxlY3RlZCBicmFuY2hlcyBvZiBvbmUgc2VsZWN0b3IpIHRoYXRcbiAqIGJvdGggcGF1c2VkICg5LjI4LjApLiBPbmx5IG9uZSBwYXVzZSBpcyBhc2tlZCBhdCBhIHRpbWU6IHRoZSBjaGVja3BvaW50J3NcbiAqIG93biAoYHBhdXNlZFN0YWdlSWRgKSwgdGhlbiBlYWNoIG9mIHRoZXNlIGluIHR1cm4sIHdpdGggdGhlIGZhbi1vdXQncyBqb2luXG4gKiBydW5uaW5nIG9ubHkgb25jZSBldmVyeSBjaGlsZCBpcyBkb25lLlxuICpcbiAqIEV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJhaXNlIHRoZSBzaWJsaW5nJ3MgcGF1c2UgYWdhaW4gbGF0ZXIgV0lUSE9VVCByZS1ydW5uaW5nXG4gKiB0aGUgc2libGluZzogaXRzIHN0YWdlLCBpdHMgcGF0aCwgaXRzIGNhcHR1cmVkIHN1YmZsb3cgc3RhdGUsIGl0cyBxdWVzdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQSBmb3JrIHdob3NlIHR3byBjaGlsZHJlbiBib3RoIGFzazogdGhlIGZpcnN0IGNoZWNrcG9pbnQgYXNrcyBjMSBhbmRcbiAqIC8vIGNhcnJpZXMgYzIncyBwYXVzZTsgcmVzdW1pbmcgaXQgZmluaXNoZXMgYzEsIHRoZW4gcGF1c2VzIHdpdGggYzInc1xuICogLy8gcXVlc3Rpb247IHJlc3VtaW5nIFRIQVQgZmluaXNoZXMgYzIgYW5kIHJ1bnMgdGhlIGpvaW4uXG4gKiBjb25zdCBjcCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKSE7XG4gKiBjcC5wYXVzZWRTdGFnZUlkOyAgICAgICAgICAgICAgICAgIC8vICdjMS9hc2snXG4gKiBjcC5wZW5kaW5nUGF1c2VzPy5bMF0ucGF1c2VkU3RhZ2VJZDsgLy8gJ2MyL2FzaydcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlbmRpbmdQYXVzZSB7XG4gIC8qKiBUaGUgc2libGluZydzIHBhdXNlZCBzdGFnZSAocGF0aC1wcmVmaXhlZCBpZCwgYXMgYHBhdXNlZFN0YWdlSWRgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBzaWJsaW5nJ3MgcGF1c2VkIHN0YWdlIChhcyBgc3ViZmxvd1BhdGhgKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIHNpYmxpbmcncyBvd24gc3ViZmxvdyBjYXB0dXJlcyDigJQgdGhlIHN1YmZsb3dzIG9uIElUUyBwYXRoIGJlbG93IHRoZVxuICAgKiBmYW4tb3V0LiBUaGUgc3ViZmxvd3MgYWJvdmUgdGhlIGZhbi1vdXQgYXJlIHNoYXJlZCB3aXRoIHRoZSBjaGVja3BvaW50J3NcbiAgICogb3duIHBhdXNlIGFuZCBhcmUgY2FwdHVyZWQgYWdhaW4gd2hlbiB0aGlzIHBhdXNlIGlzIHJhaXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgLyoqIFRoZSBzaWJsaW5nJ3MgcXVlc3Rpb24gKGFzIGBwYXVzZURhdGFgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcbiAgLyoqIEhvdyB0aGUgc2libGluZyBwYXVzZWQgKGFzIGBwYXVzZWRCeWApLiAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogV2hpY2ggZXhlY3V0aW9uIHRoZSBzaWJsaW5nIHBhdXNlZCBpbiAoYXMgYHBhdXNlZEV4ZWN1dGlvbmAsIDkuMzcuMCkg4oCUIGtlcHQgc28gaXRzIG93biByZXN1bWUgbGlua3MgdG8gaXQuICovXG4gIHJlYWRvbmx5IHBhdXNlZEV4ZWN1dGlvbj86IFBhdXNlZEV4ZWN1dGlvbjtcbn1cblxuLyoqIEEgcGVuZGluZyBwYXVzZSB3aG9zZSBwYXRoIHN0aWxsIGdyb3dzIGFzIGl0cyBzaWduYWwgYnViYmxlcyB1cCAoaW50ZXJuYWwpLiAqL1xuLyoqXG4gKiBUaGUgc2lnbmFsJ3Mgb3duIGNvcHkgb2YgYSBwZW5kaW5nIHBhdXNlLiBJdHMgYHBhdXNlZEV4ZWN1dGlvbmAgbWF5IHN0aWxsXG4gKiBsYWNrIHRoZSBydW4gKGEgc2libGluZyB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1bikgdW50aWwgYGNvbXBsZXRlRXhlY3V0aW9uYC5cbiAqL1xudHlwZSBNdXRhYmxlUGVuZGluZ1BhdXNlID0gT21pdDxQZW5kaW5nUGF1c2UsICdzdWJmbG93UGF0aCcgfCAncGF1c2VkRXhlY3V0aW9uJz4gJiB7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmdbXTtcbiAgcGF1c2VkRXhlY3V0aW9uPzogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9O1xufTtcblxuLy8g4pSA4pSAIFBhdXNlUmVzdWx0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybmVkIGJ5IGEgcGF1c2FibGUgc3RhZ2UncyBleGVjdXRlL3Jlc3VtZSBmdW5jdGlvbiB0byBzaWduYWwgcGF1c2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgIHJldHVybiB7IHBhdXNlOiB0cnVlLCBkYXRhOiB7IHF1ZXN0aW9uOiAnQXBwcm92ZSBvcmRlciAxMjM/JyB9IH07XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZVJlc3VsdCB7XG4gIHJlYWRvbmx5IHBhdXNlOiB0cnVlO1xuICAvKiogRGF0YSB0byBpbmNsdWRlIGluIHRoZSBjaGVja3BvaW50IOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgZGF0YT86IHVua25vd247XG59XG5cbi8vIOKUgOKUgCBGbG93Y2hhcnRDaGVja3BvaW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LFxuICogYW5kIG5vdGhpbmcgYSByZXN1bWUgbmV2ZXIgcmVhZHMuXG4gKlxuICogTEVBTiAoZm9ybWF0IDIpOiBpdHMgc2l6ZSBpcyB0aGUgU1RBVEUncywgbmV2ZXIgdGhlIHJ1bidzIGxlbmd0aC4gVGhlIGN1cnNvclxuICogaXMgYHBhdXNlZFN0YWdlSWRgICsgYHN1YmZsb3dQYXRoYDsgdGhlIHN0YXRlIGlzIGBzaGFyZWRTdGF0ZWAgcGx1cyB0aGVcbiAqIGNhcHR1cmVzIG9mIHRoZSBzdWJmbG93cyBvbiB0aGF0IHBhdGggKGBzdWJmbG93U3RhdGVzYCkuIFRoZSBydW4ncyBoaXN0b3J5IOKAlFxuICogdGhlIGV4ZWN1dGlvbiB0cmVlLCB0aGUgZmluaXNoZWQgc3ViZmxvd3MnIHJlc3VsdHMsIHRoZSBjb21taXQgbG9nIOKAlCBpcyBub3RcbiAqIGhlcmU6IHJlYWQgaXQgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgYmVmb3JlIGByZXN1bWUoKWAgKGZvcm1hdCAxXG4gKiBjYXJyaWVkIGBleGVjdXRpb25UcmVlYCBhbmQgYHN1YmZsb3dSZXN1bHRzYDsgbm8gcmVzdW1lIHJlYWQgdGhlbSkuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqXG4gICAqIFRoZSBjaGVja3BvaW50IEZPUk1BVDogYDJgLCB0aGUgbGVhbiBjaGVja3BvaW50IChgMWAgZnJvbSA5LjM5LjA7IGFic2VudFxuICAgKiBiZWZvcmUpLiBgcmVzdW1lKClgIHJlYWRzIGV2ZXJ5IG9sZGVyIG9uZSB0aHJvdWdoIHRoZSBvbmUgdXBjYXN0ZXJcbiAgICogKGBwYXVzZS9yZWNvcmQudHMgwrcgdXBjYXN0Q2hlY2twb2ludGApLCB3aGljaCBkcm9wcyB3aGF0IGxhdGVyIGZvcm1hdHNcbiAgICogZHJvcHBlZCDigJQgZm9ybWF0IDEncyBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2AsIHRoZSBsZWdhY3lcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgIOKAlCBub25lIG9mIHdoaWNoIGEgcmVzdW1lIGV2ZXIgcmVhZC4gQSB2ZXJzaW9uIHRoaXNcbiAgICogcmVsZWFzZSBkb2VzIG5vdCBrbm93IGlzIHJlZnVzZWQuXG4gICAqL1xuICByZWFkb25seSBjaGVja3BvaW50VmVyc2lvbj86IDI7XG5cbiAgLyoqIFNjb3BlIHN0YXRlIGF0IHRoZSBwYXVzZSBwb2ludCDigJQgYWxsIHNoYXJlZCBtZW1vcnkga2V5L3ZhbHVlcy4gKi9cbiAgcmVhZG9ubHkgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQuIFVzZWQgYnkgcmVzdW1lKCkgdG8gZmluZCB0aGUgbm9kZSBpbiB0aGUgZ3JhcGguICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdXNlZCBFWEVDVVRJT04gKDkuMzcuMCk6IHRoZSBydW4gdGhhdCBwYXVzZWQgYW5kIHRoZSBwYXVzZWQgc3RhZ2Unc1xuICAgKiBydW50aW1lU3RhZ2VJZCBpbiBpdCAodGhlIGlkIGl0cyBgb25QYXVzZWAgZXZlbnQgYW5kIGl0cyBjb21taXQgY2FycnkpLlxuICAgKiBSZWFkIGJ5IGByZXN1bWUoKWAgaW50byB0aGUgYG9uUmVzdW1lYCBldmVudCdzIGB0cmF2ZXJzYWxDb250ZXh0LnJlc3VtZWRGcm9tYFxuICAgKiBsaW5rIOKAlCBuZXZlciB1c2VkIHRvIHBsYW4gdGhlIHJlLWVudHJ5LiBBYnNlbnQgb24gYW4gb2xkZXIgY2hlY2twb2ludCxcbiAgICogd2hpY2ggdGhlbiByZXN1bWVzIHdpdGhvdXQgYSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkRXhlY3V0aW9uPzogUGF1c2VkRXhlY3V0aW9uO1xuXG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ3NmLXZhbGlkYXRpb24nXSkuXG4gICAqICBFbXB0eSBhcnJheSB3aGVuIHBhdXNlZCBhdCB0aGUgdG9wIGxldmVsLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG5cbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZC4gYCdpbnRlcnJ1cHQnYCBtZWFucyBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAgYW5kIGBwYXVzZURhdGFgIElTIHRoYXQgcGF5bG9hZDtcbiAgICogYWJzZW50IG1lYW5zIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmAgZXhlY3V0ZS9yZXN1bWUgcGF0aCAoZXZlcnlcbiAgICogY2hlY2twb2ludCB3cml0dGVuIGJlZm9yZSA5LjE0LjAgb21pdHMgaXQsIHdoaWNoIGlzIGV4YWN0bHkgcmlnaHQpLlxuICAgKlxuICAgKiBgcmVzdW1lKClgIHJlYWRzIHRoaXMgdG8gcGljayB0aGUgcmUtZW50cnksIGFuZCB0aGUgdHdvIGRpZmZlciBieSBsYXc6XG4gICAqIGFuIGludGVycnVwdGVkIHN0YWdlIFJFLVJVTlMgSVRTIE9XTiBGVU5DVElPTiBGUk9NIFRIRSBUT1AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljIOKAlCB0aGUgYW5zd2VyIGNvbWVzIGJhY2sgb3V0IG9mIHRoZSBgaW50ZXJydXB0KClgIGNhbGwpLCB3aGlsZSBhXG4gICAqIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIHNlcGFyYXRlIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogb24gdGhlIHBhdGggZnJvbSB0aGlzIG1hcCDigJQgT05DRSwgb24gaXRzIGZpcnN0IGVudHJ5LCBpbiBwbGFjZSBvZiB0aGVcbiAgICogaW5wdXRNYXBwZXIncyB2YWx1ZXMgKHRoZSBtYXBwZXIgc3RpbGwgcnVucywgZm9yIHRoZSBzdGFnZXMnIHJlYWQtb25seVxuICAgKiBhcmdzKSDigJQgc28gcmVzdW1lIGhhbmRsZXJzIHNlZSBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EXG4gICAqIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLiBPbmx5IHRoZSBzdWJmbG93cyBPTiBgc3ViZmxvd1BhdGhgIHJlYWQgaXQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgZXhlY3V0aW9uIGNvdW50ZXIgYXQgdGhlIG1vbWVudCBvZiBwYXVzZSDigJQgdGhlIG51bWJlciBvZiBzdGFnZXNcbiAgICogZXhlY3V0ZWQgc28gZmFyIHRoaXMgcnVuLiBSZXN1bWUgc2VlZHMgaXQgc28gcG9zdC1yZXN1bWUgYHJ1bnRpbWVTdGFnZUlkYHNcbiAgICogKGBzdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCkga2VlcCBjbGltYmluZyBhbmQgbmV2ZXIgY29sbGlkZSB3aXRoIHByZS1wYXVzZVxuICAgKiBvbmVzLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZSBldmVudC1jb3JyZWxhdGlvbiBtb2RlbCByZXN0cyBvbi5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGEgY2hlY2twb2ludCBwZXJzaXN0ZWQgYmVmb3JlIHRoaXNcbiAgICogZmllbGQgZXhpc3RlZCAob2xkZXIgUmVkaXMvUG9zdGdyZXMgcm93cykgc3RpbGwgdmFsaWRhdGVzIGFuZCByZXN1bWVzIHdpdGhcbiAgICogdGhlIHByZXZpb3VzIChjb3VudGVyLXJlc3RhcnRpbmcpIGJlaGF2aW9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlci1gc3RhZ2VJZGAgbG9vcCB2aXNpdCBjb3VudHMgYXQgdGhlIG1vbWVudCBvZiBwYXVzZS4gUmVzdW1lIHNlZWRzIHRoZW1cbiAgICogc28gYFRyYXZlcnNhbENvbnRleHQubG9vcEl0ZXJhdGlvbmAgc3RheXMgY29udGludW91cyBhY3Jvc3MgdGhlIHBhdXNlIChhXG4gICAqIG1pZC1sb29wIHJlc3VtZSBrZWVwcyBjb3VudGluZyB1cCwgbm90IHJlc3RhcnRpbmcgYXQgMCkgYW5kIHRoZVxuICAgKiBDb250aW51YXRpb25SZXNvbHZlciBpdGVyYXRpb24gYnVkZ2V0IGlzIG5vdCBzaWxlbnRseSByZWZpbGxlZC5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIHRoZSBzYW1lIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgcmVhc29uIGFzIGBleGVjdXRpb25Db3VudGAuXG4gICAqL1xuICByZWFkb25seSB2aXNpdENvdW50cz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgcmFpc2VkIGJ5IFBBUkFMTEVMIFNJQkxJTkdTIG9mIHRoZSBwYXVzZWQgc3RhZ2UgaW4gdGhlIHNhbWVcbiAgICogZmFuLW91dCwgd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApIOKAlCBzZWUge0BsaW5rIFBlbmRpbmdQYXVzZX0uIEFic2VudFxuICAgKiB3aGVuIG9ubHkgb25lIGNoaWxkIHBhdXNlZCAoZXZlcnkgY2hlY2twb2ludCBiZWZvcmUgOS4yOC4wIG9taXRzIGl0LCBhbmRcbiAgICogcmVzdW1lcyBleGFjdGx5IGFzIGJlZm9yZSkuIFJlc3VtaW5nIHRoaXMgY2hlY2twb2ludCBmaW5pc2hlcyB0aGUgcGF1c2VkXG4gICAqIHN0YWdlJ3MgY2hpbGQsIHRoZW4gcGF1c2VzIGFnYWluIHdpdGggdGhlIGZpcnN0IG9mIHRoZXNlOyB0aGUgZmFuLW91dCdzXG4gICAqIGpvaW4gcnVucyBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRhY3Rpb24gbWFya3Mgb2YgdGhlIHBhdXNlZCBydW4g4oCUIE5BTUVTIG9ubHkgKHNlZVxuICAgKiB7QGxpbmsgUmVkYWN0aW9uTWFya3N9KS4gQWJzZW50IHdoZW4gdGhlIHJ1biBtYXJrZWQgbm90aGluZyAobm8gcG9saWN5XG4gICAqIGFuZCBubyBwZXItY2FsbCBtYXJrLCBvciBhbiBvbGRlciBjaGVja3BvaW50KTogdGhlIHJlc3VtZWQgcnVuIHRoZW4gc3RhcnRzXG4gICAqIGZyb20gaXRzIHBvbGljeSBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbk1hcmtzPzogUmVkYWN0aW9uTWFya3M7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBSZXR1cm4gYW55IG5vbi12b2lkIHZhbHVlIHRvIHBhdXNlICh0aGF0IHZhbHVlXG4gKiBiZWNvbWVzIHRoZSBjaGVja3BvaW50J3MgYHBhdXNlRGF0YWApOyByZXR1cm4gdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKiBgcmVzdW1lYCBydW5zIHdoZW4gdGhlIGZsb3djaGFydCBpcyByZXN1bWVkLiBJdCByZWNlaXZlcyB0aGUgcmVzdW1lIGlucHV0LlxuICpcbiAqIEJvdGggcGhhc2VzIHJlY2VpdmUgdGhlIHNhbWUgc2NvcGUuIEFmdGVyIGV4ZWN1dGUgcGF1c2VzLCB0aGUgc2NvcGUgc3RhdGVcbiAqIGlzIHByZXNlcnZlZCBpbiB0aGUgY2hlY2twb2ludC4gT24gcmVzdW1lLCB0aGUgc2NvcGUgaXMgcmVzdG9yZWQgYmVmb3JlXG4gKiBjYWxsaW5nIHJlc3VtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLmFkZFBhdXNhYmxlRnVuY3Rpb24oJ0FwcHJvdmVPcmRlcicsIHtcbiAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICAgIHNjb3BlLmFtb3VudCA9IDI5OTtcbiAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgJCR7c2NvcGUuYW1vdW50fSByZWZ1bmQ/YCB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICAvLyBUb3RhbDogYSBQcm94eSB3aG9zZSBgZ2V0UHJvdG90eXBlT2ZgIHRyYXAgdGhyb3dzIChvciBhIHJldm9rZWQgUHJveHkpXG4gIC8vIGlzIG5vdCBhIHNpZ25hbCDigJQgdGhlIGVuZ2luZSdzIGNhdGNoIGJsb2NrcyBhc2sgdGhpcyBmaXJzdCwgYW5kIG11c3RcbiAgLy8gbm90IHRyYWRlIHRoZSBzdGFnZSdzIHRocm93biB2YWx1ZSBmb3IgdGhlIHRyYXAncyBlcnJvci5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCB8fFxuICAgICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdwYXVzZURhdGEnKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdzdGFnZUlkJykpXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7OztBQTRCSCw4RUFBOEU7QUFDOUUsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxNQUFNLENBQUMsR0FBRyxLQUF5RSxDQUFDO0lBQ3BGLE9BQU8sQ0FDTCxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxFQUFFLENBQ2xILENBQUM7QUFDSixDQUFDO0FBTEQsOENBS0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7OztPQVNHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssY0FBYyxHQUE0QyxFQUFFLENBQUM7SUFFckU7Ozs7Ozs7T0FPRztJQUNLLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBOEM7SUFFdEUsNEdBQTRHO0lBQ3BHLGVBQWUsQ0FBVTtJQUVqQyxZQUFZLElBQWEsRUFBRSxPQUFlLEVBQUUsUUFBc0I7UUFDaEUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFB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Q0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBZkQsc0NBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhdXNlL1Jlc3VtZSDigJQgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93cy5cbiAqXG4gKiBBIHN0YWdlIHNpZ25hbHMgcGF1c2UgYnkgY2FsbGluZyBgc2NvcGUuJHBhdXNlKGRhdGEpYCB3aGljaCB0aHJvd3MgYSBQYXVzZVNpZ25hbC5cbiAqIFRoZSBzaWduYWwgYnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBGbG93Q2hhcnRFeGVjdXRvcixcbiAqIGVhY2ggbGV2ZWwgYWRkaW5nIGl0cyBzdWJmbG93IElEIHRvIHRoZSBwYXRoLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGNhcHR1cmVzIHdoYXQgYSByZXN1bWUgcmVhZHMsIGFuZCB0aGUgcGF1c2UncyBvd24gcmVjb3JkIOKAlFxuICogbmV2ZXIgdGhlIHJ1bidzIGhpc3RvcnkgKHRoYXQgaXMgYGdldFNuYXBzaG90KClgJ3MpOlxuICogICAtIHBhdXNlZFN0YWdlSWQgKyBzdWJmbG93UGF0aCAoKyBwYXVzZWRCeSk6IHRoZSBjdXJzb3JcbiAqICAgLSBzaGFyZWRTdGF0ZSArIHN1YmZsb3dTdGF0ZXM6IHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2Ug4oCUIHRoZSByb290J3MsIGFuZFxuICogICAgIGVhY2ggc3ViZmxvdydzIG9uIHRoZSBwYXVzZSBwYXRoXG4gKiAgIC0gZXhlY3V0aW9uQ291bnQgKyB2aXNpdENvdW50czogdGhlIGNvdW50ZXJzIHRoZSByZXN1bWVkIHJ1biBjb250aW51ZXNcbiAqICAgLSBwZW5kaW5nUGF1c2VzLCByZWRhY3Rpb25NYXJrczogd2FpdGluZyBzaWJsaW5ncywgcmVkYWN0aW9uIG5hbWVzXG4gKiAgIC0gcGF1c2VEYXRhLCBwYXVzZWRFeGVjdXRpb24sIGludm9rZXJTdGFnZUlkLCBwYXVzZWRBdDogdGhlIHJlY29yZFxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93IChhdCBhbnkgZGVwdGgg4oCUIG1vdW50ZWQgbGluZWFybHksIGFzIGFcbiAqIGRlY2lkZXIgb3Igc2VsZWN0b3IgYnJhbmNoLCBvciBhcyBhIGZvcmsgY2hpbGQpLCBsb29wLCBuZXN0ZWQgc3ViZmxvdyBpblxuICogbG9vcCwgYW5kIHNldmVyYWwgcGFyYWxsZWwgc2libGluZ3MgcGF1c2luZyBpbiBvbmUgZmFuLW91dCAoZWFjaCBhc2tzIGluXG4gKiB0dXJuIOKAlCBgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuXG4gKlxuICogTk9UIHJlc3VtYWJsZSB5ZXQ6IGEgcGF1c2UgaW5zaWRlIGEgTEFaWSBzdWJmbG93IChgYWRkTGF6eVN1YkZsb3dDaGFydCpgKSBvclxuICogaW5zaWRlIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGJyYW5jaC4gVGhlaXIgZ3JhcGhzIGFyZSByZXNvbHZlZCBhdCBydW4gdGltZVxuICogYW5kIGFyZSBub3QgaW4gdGhlIGNoYXJ0IGEgcmVzdW1lIHdhbGtzLCBzbyBgcmVzdW1lKClgIHJlZnVzZXMgdGhlXG4gKiBjaGVja3BvaW50IChcIm5vdCBmb3VuZFwiKSBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiBQaW5uZWQgaW5cbiAqIHRlc3QvbGliL3BhdXNlL3Jlc3VtZS1rbm93bi1saW1pdGF0aW9ucy50ZXN0LnRzLlxuICovXG5cbi8vIOKUgOKUgCBQYXVzZVNpZ25hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gKiBydW50aW1lU3RhZ2VJZCBpbiBpdC4gUmVjb3JkZWQgb24gdGhlIGNoZWNrcG9pbnQgKGFuZCBvbiBlYWNoIHF1ZXVlZFxuICogc2libGluZydzIHBlbmRpbmcgcmVjb3JkKSBzbyBhIHJlc3VtZSBjYW4gTElOSyB0byBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZWRFeGVjdXRpb24ge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIHRvIHRoZSByZXN1bWVkIHJ1biDigJQgTkFNRVMgb25seSwgbmV2ZXIgYSB2YWx1ZVxuICogKHRoZSBjaGVja3BvaW50IHN0YXlzIHJlYWwpOiB0aGUga2V5cyBtYXJrZWQgc2VjcmV0IGZvciB0aGUgcmVzdCBvZiB0aGUgcnVuXG4gKiAoYSBwZXItY2FsbCBgc2V0VmFsdWUoa2V5LCB2YWx1ZSwgdHJ1ZSlgLCBhIGtleSB0aGUgcG9saWN5IHJlZGFjdGVkIHdob2xlLCBhXG4gKiBzdWJmbG93IG1hcHBlcidzIHRhaW50KSBhbmQgdGhlIGZpZWxkcyBhIG1hcHBlciBoYW5kZWQgdG8gYSBuZXcga2V5LiBSZXN1bWVcbiAqIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUgd2l0aCB0aGVtLCBzbyBhIGNvcHkgbWFkZSBiZWZvcmUgdGhlIHBhdXNlIGlzXG4gKiBzdGlsbCBtYXNrZWQgYWZ0ZXIgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkYWN0aW9uTWFya3Mge1xuICByZWFkb25seSBrZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEtleSDihpIgdGhlIGZpZWxkIHBhdGhzIGEgbWFwcGVyIGhhbmRlZCBpdC4gQWJzZW50IHdoZW4gbm9uZS4gKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqIFRydWUgZm9yIGEgd2VsbC1mb3JtZWQge0BsaW5rIFBhdXNlZEV4ZWN1dGlvbn0gKHR3byBub24tZW1wdHkgc3RyaW5ncykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZWRFeGVjdXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZWRFeGVjdXRpb24ge1xuICBjb25zdCB2ID0gdmFsdWUgYXMgeyBydW5JZD86IHVua25vd247IHJ1bnRpbWVTdGFnZUlkPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdj8ucnVuSWQgPT09ICdzdHJpbmcnICYmIHYucnVuSWQgIT09ICcnICYmIHR5cGVvZiB2LnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB2LnJ1bnRpbWVTdGFnZUlkICE9PSAnJ1xuICApO1xufVxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZCDigJQgYCdpbnRlcnJ1cHQnYCB3aGVuIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgcGF5bG9hZClgLCBhYnNlbnQgZm9yIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmBcbiAgICogZXhlY3V0ZS9yZXN1bWUgcGF0aC4gU2V0IGF0IHRoZSBzdGFnZSBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGNhcnJpZWRcbiAgICogb250byB0aGUgY2hlY2twb2ludCwgYW5kIHJlYWQgYnkgYHJlc3VtZSgpYCB0byBwaWNrIHRoZSByZS1lbnRyeTogYW5cbiAgICogaW50ZXJydXB0ZWQgc3RhZ2UgcmUtcnVucyBpdHMgT1dOIGZ1bmN0aW9uIGZyb20gdGhlIHRvcCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMpLCBhIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLiAoVGhlXG4gICAqIGludm9rZXIncyBgLm5leHRgIGlkIHJvZGUgYmVzaWRlIGl0IHVudGlsIDkuMzkuMCBhc1xuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGA7IHdoYXQgcnVucyBhZnRlciBhIHJlc3VtZSBjb21lcyBmcm9tIHRoZSBjaGFydFxuICAgKiBzaW5jZSA5LjI4LjAsIHNvIGl0IGlzIG5vIGxvbmdlciBjYXJyaWVkLilcbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgdGhhdCBQQVJBTExFTCBTSUJMSU5HUyByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCBhcyB0aGlzIG9uZSxcbiAgICogd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApLiBSZWNvcmRlZCBieSBgQ2hpbGRyZW5FeGVjdXRvcmAgd2hlbiBtb3JlXG4gICAqIHRoYW4gb25lIGNoaWxkIG9mIGEgZm9yayAob3IgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBicmFuY2gpIHBhdXNlczogdGhlXG4gICAqIGZpcnN0IHBhdXNlIGlzIHRoZSBvbmUgdGhhdCBpcyBhc2tlZCwgdGhlIG90aGVycyByaWRlIGhlcmUgaW5zdGVhZCBvZlxuICAgKiBiZWluZyBkcm9wcGVkLiBFYWNoIHBhdGggaXMgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIHNpZ25hbCBjdXJyZW50bHkgaXNcbiAgICogYW5kIGdyb3dzIHdpdGggaXQg4oCUIGBwcmVwZW5kU3ViZmxvd2AgcHJlcGVuZHMgdG8gZXZlcnkgZW50cnkgdG9vLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1BhdXNlczogTXV0YWJsZVBlbmRpbmdQYXVzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFdISUNIIGV4ZWN1dGlvbiBwYXVzZWQg4oCUIGl0cyBydW50aW1lU3RhZ2VJZCBzdGFtcGVkIG9uY2UgYXQgdGhlIHN0YWdlXG4gICAqIGJvdW5kYXJ5IChgU3RhZ2VSdW5uZXJgKSwgaXRzIHJ1biBhZGRlZCB3aGVuIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0XG4gICAqIChgY29tcGxldGVFeGVjdXRpb25gKSwgb3IgYm90aCBjYXJyaWVkIG92ZXIgZm9yIGEgcXVldWVkIHNpYmxpbmcuXG4gICAqL1xuICBwcml2YXRlIF9wYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG5cbiAgLyoqIFRoZSBwYXVzZWQgZXhlY3V0aW9uJ3MgaWRlbXBvdGVuY3kga2V5IChQMykg4oCUIGEgdG91Y2hpbmcgc3RhZ2Uncywgc3RhbXBlZCBvbmNlIGF0IHRoZSBzdGFnZSBib3VuZGFyeS4gKi9cbiAgcHJpdmF0ZSBfaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogdW5rbm93biwgc3RhZ2VJZDogc3RyaW5nLCBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnKSB7XG4gICAgc3VwZXIoJ0V4ZWN1dGlvbiBwYXVzZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnUGF1c2VTaWduYWwnO1xuICAgIHRoaXMucGF1c2VEYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YWdlSWQgPSBzdGFnZUlkO1xuICAgIGlmIChwYXVzZWRCeSkgdGhpcy5wYXVzZWRCeSA9IHBhdXNlZEJ5O1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoID0gW107XG4gICAgLy8gUGF1c2VTaWduYWwgaXMgY29udHJvbCBmbG93LCBub3QgYSByZWFsIGVycm9yIOKAlCBzdGFjayB0cmFjZSBoYXMgbm8gZGlhZ25vc3RpYyB2YWx1ZS5cbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cblxuICBnZXQgc3ViZmxvd1BhdGgoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93UGF0aDtcbiAgfVxuXG4gIC8qKiBUaGUgcGF1c2VkIGV4ZWN1dGlvbiAoaXRzIHJ1biBhbmQgYFtwYXRoL11zdGFnZUlkI05gKSwgb25jZSBib3RoIGFyZSBrbm93bi4gKi9cbiAgZ2V0IHBhdXNlZEV4ZWN1dGlvbigpOiBQYXVzZWRFeGVjdXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9wYXVzZWRFeGVjdXRpb247XG4gICAgcmV0dXJuIGU/LnJ1bklkICE9PSB1bmRlZmluZWQgPyB7IHJ1bklkOiBlLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB3aGljaCBFWEVDVVRJT04gcGF1c2VkLiBGaXJzdCBzdGFtcCB3aW5zOiB0aGUgc2lnbmFsIGJ1YmJsZXNcbiAgICogdGhyb3VnaCBvdXRlciBib3VuZGFyaWVzIHRoYXQgbXVzdCBub3Qgb3ZlcndyaXRlIGl0LiBUaGUgc3RhZ2UgYm91bmRhcnlcbiAgICoga25vd3Mgb25seSB0aGUgcnVudGltZVN0YWdlSWQ7IGEgcXVldWVkIHNpYmxpbmcgcmFpc2VkIGFnYWluIG9uIHJlc3VtZVxuICAgKiBjYXJyaWVzIGJvdGggKGl0IHBhdXNlZCBpbiBhbiBFQVJMSUVSIHJ1bikuXG4gICAqL1xuICBzdGFtcEV4ZWN1dGlvbihydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBydW5JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wYXVzZWRFeGVjdXRpb24gIT09IHVuZGVmaW5lZCB8fCAhcnVudGltZVN0YWdlSWQpIHJldHVybjtcbiAgICB0aGlzLl9wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkLCAuLi4ocnVuSWQgIT09IHVuZGVmaW5lZCAmJiB7IHJ1bklkIH0pIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlkZW1wb3RlbmN5IGtleSB0aGUgcGF1c2VkIGV4ZWN1dGlvbiByYW4gdW5kZXIgKFAzKSDigJQgYSB0b3VjaGluZyBzdGFnZSdzLiBJdCByaWRlcyB0aGUgY2hlY2twb2ludCBzbyB0aGVcbiAgICogcmVzdW1lIHJlLXJ1bnMgdGhlIHN0YWdlIChvciBpdHMgYHJlc3VtZUZuYCkgdW5kZXIgdGhlIFNBTUUga2V5OiB0aGUgaW5wdXQgaXRzIHJ1bGUgcmVhZCBkb2VzIG5vdCBjcm9zcyBhXG4gICAqIHJlc3VtZS4gRmlyc3Qgc3RhbXAgd2lucy5cbiAgICovXG4gIGdldCBpZGVtcG90ZW5jeUtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pZGVtcG90ZW5jeUtleTtcbiAgfVxuXG4gIHN0YW1wSWRlbXBvdGVuY3lLZXkoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faWRlbXBvdGVuY3lLZXkgPT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IHVuZGVmaW5lZCkgdGhpcy5faWRlbXBvdGVuY3lLZXkgPSBrZXk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZSB0aGUgcnVuIGZvciBldmVyeSBwYXVzZSBvbiB0aGlzIHNpZ25hbCB0aGF0IHBhdXNlZCBpbiBpdCDigJQgdGhpcyBvbmVcbiAgICogYW5kIGl0cyBxdWV1ZWQgc2libGluZ3MgdGhhdCBkbyBub3QgYWxyZWFkeSBjYXJyeSBhIHJ1biAoYSBzaWJsaW5nIHJhaXNlZFxuICAgKiBhZ2FpbiBvbiByZXN1bWUga2VlcHMgdGhlIHJ1biBpdCBwYXVzZWQgaW4pLiBDYWxsZWQgb25jZSwgd2hlbiB0aGVcbiAgICogY2hlY2twb2ludCBpcyBidWlsdC5cbiAgICovXG4gIGNvbXBsZXRlRXhlY3V0aW9uKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICYmIHRoaXMuX3BhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPSBydW5JZDtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5fcGVuZGluZ1BhdXNlcykge1xuICAgICAgaWYgKHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uICYmIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uLnJ1bklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGVuZGluZy5wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkOiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCwgcnVuSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGVuZCBhIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGggKGNhbGxlZCBkdXJpbmcgYnViYmxlLXVwKS4gVGhlIHBlbmRpbmdcbiAgICogc2libGluZyBwYXVzZXMgcmlkZSB0aGUgc2FtZSBib3VuZGFyeSwgc28gdGhlaXIgcGF0aHMgZ3JvdyB3aXRoIGl0LlxuICAgKi9cbiAgcHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHBlbmRpbmcuc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgcGFyYWxsZWwgc2libGluZydzIHBhdXNlIGJlaGluZCB0aGlzIG9uZSAoaXRzIHBhdGggcmVsYXRpdmUgdG9cbiAgICogdGhpcyBzaWduYWwncyBjdXJyZW50IGxldmVsKS4gQ29waWVkIGluOiB0aGUgZW50cnkgaXMgb3duZWQgYnkgdGhlXG4gICAqIHNpZ25hbCBmcm9tIGhlcmUgb24uXG4gICAqL1xuICBhZGRQZW5kaW5nUGF1c2UocGF1c2U6IFBlbmRpbmdQYXVzZSk6IHZvaWQge1xuICAgIHRoaXMuX3BlbmRpbmdQYXVzZXMucHVzaCh7XG4gICAgICBwYXVzZWRTdGFnZUlkOiBwYXVzZS5wYXVzZWRTdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IFsuLi5wYXVzZS5zdWJmbG93UGF0aF0sXG4gICAgICBzdWJmbG93U3RhdGVzOiB7IC4uLnBhdXNlLnN1YmZsb3dTdGF0ZXMgfSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogcGF1c2UucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEJ5ICYmIHsgcGF1c2VkQnk6IHBhdXNlLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEV4ZWN1dGlvbiAmJlxuICAgICAgICB0eXBlb2YgcGF1c2UucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi5wYXVzZS5wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICAgIC4uLihwYXVzZS5pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHBhdXNlLmlkZW1wb3RlbmN5S2V5IH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBiZWhpbmQgdGhpcyBvbmUsIGluIHRoZSBvcmRlciB0aGV5IHdpbGxcbiAgICogYmUgYXNrZWQuIEluIGZsaWdodCwgYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuIGNhcnJpZXMgb25seSBpdHNcbiAgICogcnVudGltZVN0YWdlSWQ7IGBjb21wbGV0ZUV4ZWN1dGlvbmAgKGF0IGNoZWNrcG9pbnQgYnVpbGQpIGFkZHMgdGhlIHJ1bi5cbiAgICovXG4gIGdldCBwZW5kaW5nUGF1c2VzKCk6IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BhdXNlcyBhcyByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHBhdXNlIGFzIGEge0BsaW5rIFBlbmRpbmdQYXVzZX0g4oCUIHdoYXQgYENoaWxkcmVuRXhlY3V0b3JgIHF1ZXVlc1xuICAgKiBiZWhpbmQgYSBzaWJsaW5nJ3MgcGF1c2Ugd2hlbiBib3RoIHBhdXNlZCBpbiBvbmUgZmFuLW91dC5cbiAgICovXG4gIHRvUGVuZGluZ1BhdXNlKCk6IFBlbmRpbmdQYXVzZSB7XG4gICAgLy8gSW4gZmxpZ2h0IChzZWUgYHBlbmRpbmdQYXVzZXNgKTogdGhlIHJ1biBpcyBhZGRlZCBhdCBjaGVja3BvaW50IGJ1aWxkLlxuICAgIHJldHVybiA8UGVuZGluZ1BhdXNlPntcbiAgICAgIHBhdXNlZFN0YWdlSWQ6IHRoaXMuc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4udGhpcy5fc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi50aGlzLl9zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4odGhpcy5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogdGhpcy5wYXVzZURhdGEgfSksXG4gICAgICAuLi4odGhpcy5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiB0aGlzLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi50aGlzLl9wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICAgIC4uLih0aGlzLl9pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHRoaXMuX2lkZW1wb3RlbmN5S2V5IH0pLFxuICAgIH07XG4gIH1cblxuICAvKiogVGhlIHN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuICovXG4gIGdldCBpbnZva2VyU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCB0aGUgaW52b2tlciBjb250ZXh0IGR1cmluZyBidWJibGUtdXAuXG4gICAqIENhbGxlZCBieSBkZWNpZGVyL3NlbGVjdG9yL2ZvcmsgaGFuZGxlcnMgd2hlbiBjYXRjaGluZyBhIGNoaWxkJ3MgUGF1c2VTaWduYWwuXG4gICAqIEZpcnN0IGludm9rZXIgd2lucyAoaW5uZXJtb3N0KSDigJQgc3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgc2V0SW52b2tlcihpbnZva2VyU3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnZva2VyU3RhZ2VJZCkgdGhpcy5faW52b2tlclN0YWdlSWQgPSBpbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgc3ViZmxvdydzIGlzb2xhdGVkIFNoYXJlZE1lbW9yeSBhdCB0aGUgbW9tZW50IGl0c1xuICAgKiB0cmF2ZXJzYWwgdGhyZXcuIENhbGxlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCBvbmNlIHBlciBzdWJmbG93XG4gICAqIGJvdW5kYXJ5IG9uIHRoZSBidWJibGUtdXAgcGF0aC4gRWFjaCBjYXB0dXJlIGlzIGtleWVkIGJ5IHRoZVxuICAgKiBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKHRoZSBzYW1lIGlkIHVzZWQgaW4gYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIElubmVybW9zdC1maXJzdDogYSBkZWVwIGBTZXF1ZW5jZShBZ2VudCguLi4pKWAgcGF1c2UgY2FwdHVyZXMgdGhlXG4gICAqIGFnZW50J3Mgc3ViZmxvdyBmaXJzdCwgdGhlbiBpdHMgcGFyZW50J3MsIGFsbCB0aGUgd2F5IHRvIHRoZSByb290XG4gICAqIG1vdW50LiBUaGUgZnVsbCBuZXN0IHN1cnZpdmVzIGludG8gYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AuXG4gICAqL1xuICBjYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZDogc3RyaW5nLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBEZWZlbnNpdmUgc2hhbGxvdyBjbG9uZSBzbyBsYXRlciBtdXRhdGlvbnMgb24gdGhlIHNvdXJjZSBkb24ndFxuICAgIC8vIGJsZWVkIGludG8gdGhlIGNhcHR1cmVkIHNuYXBzaG90LiBEZWVwIGNsb25pbmcgaXMgdGhlIGNvbnN1bWVyJ3NcbiAgICAvLyByZXNwb25zaWJpbGl0eSAodGhlIHJlc3VtZSB0YXJnZXQgbWF5IG5vdCBldmVuIGJlIG9uIHRoaXNcbiAgICAvLyBwcm9jZXNzKTsgU2hhcmVkTWVtb3J5IHZhbHVlcyBhcmUgY29udmVudGlvbmFsbHkgSlNPTi1mcmllbmRseS5cbiAgICB0aGlzLl9zdWJmbG93U3RhdGVzW3N1YmZsb3dJZF0gPSB7IC4uLnN0YXRlIH07XG4gIH1cblxuICAvKiogQ2FwdHVyZWQgc3ViZmxvdyBzY29wZXMgKHJlYWQtb25seSB2aWV3KS4gKi9cbiAgZ2V0IHN1YmZsb3dTdGF0ZXMoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dTdGF0ZXM7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFBlbmRpbmdQYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHBhdXNlIGEgUEFSQUxMRUwgU0lCTElORyBvZiB0aGUgcGF1c2VkIHN0YWdlIHJhaXNlZCBpbiB0aGUgc2FtZSBmYW4tb3V0IOKAlFxuICogdHdvIGNoaWxkcmVuIG9mIG9uZSBmb3JrIChvciB0d28gc2VsZWN0ZWQgYnJhbmNoZXMgb2Ygb25lIHNlbGVjdG9yKSB0aGF0XG4gKiBib3RoIHBhdXNlZCAoOS4yOC4wKS4gT25seSBvbmUgcGF1c2UgaXMgYXNrZWQgYXQgYSB0aW1lOiB0aGUgY2hlY2twb2ludCdzXG4gKiBvd24gKGBwYXVzZWRTdGFnZUlkYCksIHRoZW4gZWFjaCBvZiB0aGVzZSBpbiB0dXJuLCB3aXRoIHRoZSBmYW4tb3V0J3Mgam9pblxuICogcnVubmluZyBvbmx5IG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAqXG4gKiBFdmVyeXRoaW5nIG5lZWRlZCB0byByYWlzZSB0aGUgc2libGluZydzIHBhdXNlIGFnYWluIGxhdGVyIFdJVEhPVVQgcmUtcnVubmluZ1xuICogdGhlIHNpYmxpbmc6IGl0cyBzdGFnZSwgaXRzIHBhdGgsIGl0cyBjYXB0dXJlZCBzdWJmbG93IHN0YXRlLCBpdHMgcXVlc3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEEgZm9yayB3aG9zZSB0d28gY2hpbGRyZW4gYm90aCBhc2s6IHRoZSBmaXJzdCBjaGVja3BvaW50IGFza3MgYzEgYW5kXG4gKiAvLyBjYXJyaWVzIGMyJ3MgcGF1c2U7IHJlc3VtaW5nIGl0IGZpbmlzaGVzIGMxLCB0aGVuIHBhdXNlcyB3aXRoIGMyJ3NcbiAqIC8vIHF1ZXN0aW9uOyByZXN1bWluZyBUSEFUIGZpbmlzaGVzIGMyIGFuZCBydW5zIHRoZSBqb2luLlxuICogY29uc3QgY3AgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCkhO1xuICogY3AucGF1c2VkU3RhZ2VJZDsgICAgICAgICAgICAgICAgICAvLyAnYzEvYXNrJ1xuICogY3AucGVuZGluZ1BhdXNlcz8uWzBdLnBhdXNlZFN0YWdlSWQ7IC8vICdjMi9hc2snXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKHBhdGgtcHJlZml4ZWQgaWQsIGFzIGBwYXVzZWRTdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgc2libGluZydzIHBhdXNlZCBzdGFnZSAoYXMgYHN1YmZsb3dQYXRoYCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBzaWJsaW5nJ3Mgb3duIHN1YmZsb3cgY2FwdHVyZXMg4oCUIHRoZSBzdWJmbG93cyBvbiBJVFMgcGF0aCBiZWxvdyB0aGVcbiAgICogZmFuLW91dC4gVGhlIHN1YmZsb3dzIGFib3ZlIHRoZSBmYW4tb3V0IGFyZSBzaGFyZWQgd2l0aCB0aGUgY2hlY2twb2ludCdzXG4gICAqIG93biBwYXVzZSBhbmQgYXJlIGNhcHR1cmVkIGFnYWluIHdoZW4gdGhpcyBwYXVzZSBpcyByYWlzZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc2libGluZydzIHF1ZXN0aW9uIChhcyBgcGF1c2VEYXRhYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG4gIC8qKiBIb3cgdGhlIHNpYmxpbmcgcGF1c2VkIChhcyBgcGF1c2VkQnlgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFdoaWNoIGV4ZWN1dGlvbiB0aGUgc2libGluZyBwYXVzZWQgaW4gKGFzIGBwYXVzZWRFeGVjdXRpb25gLCA5LjM3LjApIOKAlCBrZXB0IHNvIGl0cyBvd24gcmVzdW1lIGxpbmtzIHRvIGl0LiAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG4gIC8qKiBUaGUgaWRlbXBvdGVuY3kga2V5IHRoZSBzaWJsaW5nJ3MgZXhlY3V0aW9uIHJhbiB1bmRlciAoYXMgYGlkZW1wb3RlbmN5S2V5YCwgMTAuMSkuICovXG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xufVxuXG4vKiogQSBwZW5kaW5nIHBhdXNlIHdob3NlIHBhdGggc3RpbGwgZ3Jvd3MgYXMgaXRzIHNpZ25hbCBidWJibGVzIHVwIChpbnRlcm5hbCkuICovXG4vKipcbiAqIFRoZSBzaWduYWwncyBvd24gY29weSBvZiBhIHBlbmRpbmcgcGF1c2UuIEl0cyBgcGF1c2VkRXhlY3V0aW9uYCBtYXkgc3RpbGxcbiAqIGxhY2sgdGhlIHJ1biAoYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuKSB1bnRpbCBgY29tcGxldGVFeGVjdXRpb25gLlxuICovXG50eXBlIE11dGFibGVQZW5kaW5nUGF1c2UgPSBPbWl0PFBlbmRpbmdQYXVzZSwgJ3N1YmZsb3dQYXRoJyB8ICdwYXVzZWRFeGVjdXRpb24nPiAmIHtcbiAgc3ViZmxvd1BhdGg6IHN0cmluZ1tdO1xuICBwYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG59O1xuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQsXG4gKiBhbmQgbm90aGluZyBhIHJlc3VtZSBuZXZlciByZWFkcy5cbiAqXG4gKiBMRUFOIChmb3JtYXQgMik6IGl0cyBzaXplIGlzIHRoZSBTVEFURSdzLCBuZXZlciB0aGUgcnVuJ3MgbGVuZ3RoLiBUaGUgY3Vyc29yXG4gKiBpcyBgcGF1c2VkU3RhZ2VJZGAgKyBgc3ViZmxvd1BhdGhgOyB0aGUgc3RhdGUgaXMgYHNoYXJlZFN0YXRlYCBwbHVzIHRoZVxuICogY2FwdHVyZXMgb2YgdGhlIHN1YmZsb3dzIG9uIHRoYXQgcGF0aCAoYHN1YmZsb3dTdGF0ZXNgKS4gVGhlIHJ1bidzIGhpc3Rvcnkg4oCUXG4gKiB0aGUgZXhlY3V0aW9uIHRyZWUsIHRoZSBmaW5pc2hlZCBzdWJmbG93cycgcmVzdWx0cywgdGhlIGNvbW1pdCBsb2cg4oCUIGlzIG5vdFxuICogaGVyZTogcmVhZCBpdCBmcm9tIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYCBiZWZvcmUgYHJlc3VtZSgpYCAoZm9ybWF0IDFcbiAqIGNhcnJpZWQgYGV4ZWN1dGlvblRyZWVgIGFuZCBgc3ViZmxvd1Jlc3VsdHNgOyBubyByZXN1bWUgcmVhZCB0aGVtKS5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3djaGFydENoZWNrcG9pbnQge1xuICAvKipcbiAgICogVGhlIGNoZWNrcG9pbnQgRk9STUFUOiBgMmAsIHRoZSBsZWFuIGNoZWNrcG9pbnQgKGAxYCBmcm9tIDkuMzkuMDsgYWJzZW50XG4gICAqIGJlZm9yZSkuIGByZXN1bWUoKWAgcmVhZHMgZXZlcnkgb2xkZXIgb25lIHRocm91Z2ggdGhlIG9uZSB1cGNhc3RlclxuICAgKiAoYHBhdXNlL3JlY29yZC50cyDCtyB1cGNhc3RDaGVja3BvaW50YCksIHdoaWNoIGRyb3BzIHdoYXQgbGF0ZXIgZm9ybWF0c1xuICAgKiBkcm9wcGVkIOKAlCBmb3JtYXQgMSdzIGBleGVjdXRpb25UcmVlYCBhbmQgYHN1YmZsb3dSZXN1bHRzYCwgdGhlIGxlZ2FjeVxuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGAg4oCUIG5vbmUgb2Ygd2hpY2ggYSByZXN1bWUgZXZlciByZWFkLiBBIHZlcnNpb24gdGhpc1xuICAgKiByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrcG9pbnRWZXJzaW9uPzogMjtcblxuICAvKiogU2NvcGUgc3RhdGUgYXQgdGhlIHBhdXNlIHBvaW50IOKAlCBhbGwgc2hhcmVkIG1lbW9yeSBrZXkvdmFsdWVzLiAqL1xuICByZWFkb25seSBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IHBhdXNlZC4gVXNlZCBieSByZXN1bWUoKSB0byBmaW5kIHRoZSBub2RlIGluIHRoZSBncmFwaC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkU3RhZ2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gICAqIHJ1bnRpbWVTdGFnZUlkIGluIGl0ICh0aGUgaWQgaXRzIGBvblBhdXNlYCBldmVudCBhbmQgaXRzIGNvbW1pdCBjYXJyeSkuXG4gICAqIFJlYWQgYnkgYHJlc3VtZSgpYCBpbnRvIHRoZSBgb25SZXN1bWVgIGV2ZW50J3MgYHRyYXZlcnNhbENvbnRleHQucmVzdW1lZEZyb21gXG4gICAqIGxpbmsg4oCUIG5ldmVyIHVzZWQgdG8gcGxhbiB0aGUgcmUtZW50cnkuIEFic2VudCBvbiBhbiBvbGRlciBjaGVja3BvaW50LFxuICAgKiB3aGljaCB0aGVuIHJlc3VtZXMgd2l0aG91dCBhIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVtcG90ZW5jeSBrZXkgdGhlIHBhdXNlZCBleGVjdXRpb24gcmFuIHVuZGVyICgxMC4xKSDigJQgcHJlc2VudCBvbmx5IHdoZW4gdGhlIHBhdXNlZCBzdGFnZSBgdG91Y2hlc2AgYW5cbiAgICogb3V0c2lkZSBzeXN0ZW0gd2l0aCBhIGtleSBydWxlLiBgcmVzdW1lKClgIHJlLXJ1bnMgdGhlIHN0YWdlIChvciBydW5zIGl0cyBgcmVzdW1lRm5gKSB1bmRlciBUSElTIGtleSwgbmV2ZXIgYVxuICAgKiByZWNvbXB1dGVkIG9uZTogdGhlIGlucHV0IHRoZSBydWxlIHJlYWQgZG9lcyBub3QgY3Jvc3MgYSByZXN1bWUsIGFuZCBhIGRpZmZlcmVudCBrZXkgb24gdGhlIHJlLXJ1biB3b3VsZCBtYWtlXG4gICAqIHRoZSBvdXRzaWRlIHN5c3RlbSBhcHBseSB0aGUgZWZmZWN0IHR3aWNlLiBBIHJlYWwgdmFsdWUsIGxpa2UgYHNoYXJlZFN0YXRlYCDigJQgbm8gcmVkYWN0aW9uIHBvbGljeSB0b3VjaGVzIHRoZVxuICAgKiBjaGVja3BvaW50LiBBIG1hbGZvcm1lZCBvbmUgaXMgcmVmdXNlZCBhdCBgcmVzdW1lKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnc2YtdmFsaWRhdGlvbiddKS5cbiAgICogIEVtcHR5IGFycmF5IHdoZW4gcGF1c2VkIGF0IHRoZSB0b3AgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcblxuICAvKipcbiAgICogSE9XIHRoZSBwYXVzZSB3YXMgcmFpc2VkLiBgJ2ludGVycnVwdCdgIG1lYW5zIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgeyByZWFzb24sIGV4cGVjdHM/IH0pYCBhbmQgYHBhdXNlRGF0YWAgSVMgdGhhdCBwYXlsb2FkO1xuICAgKiBhYnNlbnQgbWVhbnMgdGhlIGBhZGRQYXVzYWJsZUZ1bmN0aW9uYCBleGVjdXRlL3Jlc3VtZSBwYXRoIChldmVyeVxuICAgKiBjaGVja3BvaW50IHdyaXR0ZW4gYmVmb3JlIDkuMTQuMCBvbWl0cyBpdCwgd2hpY2ggaXMgZXhhY3RseSByaWdodCkuXG4gICAqXG4gICAqIGByZXN1bWUoKWAgcmVhZHMgdGhpcyB0byBwaWNrIHRoZSByZS1lbnRyeSwgYW5kIHRoZSB0d28gZGlmZmVyIGJ5IGxhdzpcbiAgICogYW4gaW50ZXJydXB0ZWQgc3RhZ2UgUkUtUlVOUyBJVFMgT1dOIEZVTkNUSU9OIEZST00gVEhFIFRPUCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMg4oCUIHRoZSBhbnN3ZXIgY29tZXMgYmFjayBvdXQgb2YgdGhlIGBpbnRlcnJ1cHQoKWAgY2FsbCksIHdoaWxlIGFcbiAgICogcGF1c2FibGUgc3RhZ2UgcnVucyBpdHMgc2VwYXJhdGUgYHJlc3VtZUZuYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgc2NvcGUgY2FwdHVyZSDigJQgb25lIGVudHJ5IHBlciBzdWJmbG93IGJvdW5kYXJ5IG9uIHRoZSBwYXRoXG4gICAqIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAobWF0Y2hlc1xuICAgKiBgc3ViZmxvd1BhdGhgIGVudHJpZXMpLiBFYWNoIHZhbHVlIGlzIHRoZSBzdWJmbG93J3MgcHJlLXBhdXNlXG4gICAqIHNoYXJlZCBzdGF0ZS5cbiAgICpcbiAgICogQWx3YXlzIHByZXNlbnQgKGVtcHR5IGB7fWAgZm9yIHJvb3QtbGV2ZWwgcGF1c2VzIHdoZXJlIG5vIHN1YmZsb3dzXG4gICAqIHdlcmUgZW50ZXJlZCkuIE9uIHJlc3VtZSwgYFN1YmZsb3dFeGVjdXRvcmAgc2VlZHMgZWFjaCBuZXN0ZWQgcnVudGltZVxuICAgKiBvbiB0aGUgcGF0aCBmcm9tIHRoaXMgbWFwIOKAlCBPTkNFLCBvbiBpdHMgZmlyc3QgZW50cnksIGluIHBsYWNlIG9mIHRoZVxuICAgKiBpbnB1dE1hcHBlcidzIHZhbHVlcyAodGhlIG1hcHBlciBzdGlsbCBydW5zLCBmb3IgdGhlIHN0YWdlcycgcmVhZC1vbmx5XG4gICAqIGFyZ3MpIOKAlCBzbyByZXN1bWUgaGFuZGxlcnMgc2VlIHByZS1wYXVzZSBzY29wZSBhY3Jvc3Mgc2FtZS1leGVjdXRvciBBTkRcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdGFydHMuIE9ubHkgdGhlIHN1YmZsb3dzIE9OIGBzdWJmbG93UGF0aGAgcmVhZCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuICAvKipcbiAgICogVGhlIHNoYXJlZCBleGVjdXRpb24gY291bnRlciBhdCB0aGUgbW9tZW50IG9mIHBhdXNlIOKAlCB0aGUgbnVtYmVyIG9mIHN0YWdlc1xuICAgKiBleGVjdXRlZCBzbyBmYXIgdGhpcyBydW4uIFJlc3VtZSBzZWVkcyBpdCBzbyBwb3N0LXJlc3VtZSBgcnVudGltZVN0YWdlSWRgc1xuICAgKiAoYHN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgKSBrZWVwIGNsaW1iaW5nIGFuZCBuZXZlciBjb2xsaWRlIHdpdGggcHJlLXBhdXNlXG4gICAqIG9uZXMsIHdoaWNoIGlzIHdoYXQgdGhlIHdob2xlIGV2ZW50LWNvcnJlbGF0aW9uIG1vZGVsIHJlc3RzIG9uLlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogYSBjaGVja3BvaW50IHBlcnNpc3RlZCBiZWZvcmUgdGhpc1xuICAgKiBmaWVsZCBleGlzdGVkIChvbGRlciBSZWRpcy9Qb3N0Z3JlcyByb3dzKSBzdGlsbCB2YWxpZGF0ZXMgYW5kIHJlc3VtZXMgd2l0aFxuICAgKiB0aGUgcHJldmlvdXMgKGNvdW50ZXItcmVzdGFydGluZykgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Db3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogUGVyLWBzdGFnZUlkYCBsb29wIHZpc2l0IGNvdW50cyBhdCB0aGUgbW9tZW50IG9mIHBhdXNlLiBSZXN1bWUgc2VlZHMgdGhlbVxuICAgKiBzbyBgVHJhdmVyc2FsQ29udGV4dC5sb29wSXRlcmF0aW9uYCBzdGF5cyBjb250aW51b3VzIGFjcm9zcyB0aGUgcGF1c2UgKGFcbiAgICogbWlkLWxvb3AgcmVzdW1lIGtlZXBzIGNvdW50aW5nIHVwLCBub3QgcmVzdGFydGluZyBhdCAwKSBhbmQgdGhlXG4gICAqIENvbnRpbnVhdGlvblJlc29sdmVyIGl0ZXJhdGlvbiBidWRnZXQgaXMgbm90IHNpbGVudGx5IHJlZmlsbGVkLlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgdGhlIHNhbWUgYmFja3dhcmQtY29tcGF0aWJpbGl0eSByZWFzb24gYXMgYGV4ZWN1dGlvbkNvdW50YC5cbiAgICovXG4gIHJlYWRvbmx5IHZpc2l0Q291bnRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgbnVtYmVyPj47XG5cbiAgLyoqIFN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuIEFic2VudCBmb3IgbGluZWFyIHBhdXNlcy4gKi9cbiAgcmVhZG9ubHkgaW52b2tlclN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdXNlcyByYWlzZWQgYnkgUEFSQUxMRUwgU0lCTElOR1Mgb2YgdGhlIHBhdXNlZCBzdGFnZSBpbiB0aGUgc2FtZVxuICAgKiBmYW4tb3V0LCB3YWl0aW5nIHRoZWlyIHR1cm4gKDkuMjguMCkg4oCUIHNlZSB7QGxpbmsgUGVuZGluZ1BhdXNlfS4gQWJzZW50XG4gICAqIHdoZW4gb25seSBvbmUgY2hpbGQgcGF1c2VkIChldmVyeSBjaGVja3BvaW50IGJlZm9yZSA5LjI4LjAgb21pdHMgaXQsIGFuZFxuICAgKiByZXN1bWVzIGV4YWN0bHkgYXMgYmVmb3JlKS4gUmVzdW1pbmcgdGhpcyBjaGVja3BvaW50IGZpbmlzaGVzIHRoZSBwYXVzZWRcbiAgICogc3RhZ2UncyBjaGlsZCwgdGhlbiBwYXVzZXMgYWdhaW4gd2l0aCB0aGUgZmlyc3Qgb2YgdGhlc2U7IHRoZSBmYW4tb3V0J3NcbiAgICogam9pbiBydW5zIG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHBlbmRpbmdQYXVzZXM/OiByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcblxuICAvKipcbiAgICogVGhlIHJlZGFjdGlvbiBtYXJrcyBvZiB0aGUgcGF1c2VkIHJ1biDigJQgTkFNRVMgb25seSAoc2VlXG4gICAqIHtAbGluayBSZWRhY3Rpb25NYXJrc30pLiBBYnNlbnQgd2hlbiB0aGUgcnVuIG1hcmtlZCBub3RoaW5nIChubyBwb2xpY3lcbiAgICogYW5kIG5vIHBlci1jYWxsIG1hcmssIG9yIGFuIG9sZGVyIGNoZWNrcG9pbnQpOiB0aGUgcmVzdW1lZCBydW4gdGhlbiBzdGFydHNcbiAgICogZnJvbSBpdHMgcG9saWN5IGFsb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkYWN0aW9uTWFya3M/OiBSZWRhY3Rpb25NYXJrcztcblxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhdXNlIG9jY3VycmVkLiAqL1xuICByZWFkb25seSBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUGF1c2FibGVIYW5kbGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEhhbmRsZXIgZm9yIGEgcGF1c2FibGUgc3RhZ2Ug4oCUIGhhcyB0d28gcGhhc2VzOiBleGVjdXRlIGFuZCByZXN1bWUuXG4gKlxuICogYGV4ZWN1dGVgIHJ1bnMgdGhlIGZpcnN0IHRpbWUuIFJldHVybiBhbnkgbm9uLXZvaWQgdmFsdWUgdG8gcGF1c2UgKHRoYXQgdmFsdWVcbiAqIGJlY29tZXMgdGhlIGNoZWNrcG9pbnQncyBgcGF1c2VEYXRhYCk7IHJldHVybiB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqIGByZXN1bWVgIHJ1bnMgd2hlbiB0aGUgZmxvd2NoYXJ0IGlzIHJlc3VtZWQuIEl0IHJlY2VpdmVzIHRoZSByZXN1bWUgaW5wdXQuXG4gKlxuICogQm90aCBwaGFzZXMgcmVjZWl2ZSB0aGUgc2FtZSBzY29wZS4gQWZ0ZXIgZXhlY3V0ZSBwYXVzZXMsIHRoZSBzY29wZSBzdGF0ZVxuICogaXMgcHJlc2VydmVkIGluIHRoZSBjaGVja3BvaW50LiBPbiByZXN1bWUsIHRoZSBzY29wZSBpcyByZXN0b3JlZCBiZWZvcmVcbiAqIGNhbGxpbmcgcmVzdW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAuYWRkUGF1c2FibGVGdW5jdGlvbignQXBwcm92ZU9yZGVyJywge1xuICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgICAgc2NvcGUuYW1vdW50ID0gMjk5O1xuICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSAkJHtzY29wZS5hbW91bnR9IHJlZnVuZD9gIH07XG4gKiAgIH0sXG4gKiAgIHJlc3VtZTogYXN5bmMgKHNjb3BlLCBpbnB1dCkgPT4ge1xuICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gKiAgICAgc2NvcGUuYXBwcm92ZXIgPSBpbnB1dC5hcHByb3ZlcjtcbiAqICAgfSxcbiAqIH0sICdhcHByb3ZlLW9yZGVyJywgJ01hbmFnZXIgYXBwcm92YWwgZ2F0ZScpXG4gKlxuICogLy8gTGF0ZXIg4oCUIHJlc3VtZSB3aXRoIGh1bWFuJ3MgYW5zd2VyXG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSwgYXBwcm92ZXI6ICdKYW5lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNhYmxlSGFuZGxlcjxUU2NvcGUgPSBhbnksIFRJbnB1dCA9IHVua25vd24sIFRQYXVzZURhdGEgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBGaXJzdC1ydW4gcGhhc2UuIFJldHVybiBkYXRhIHRvIHBhdXNlLCBvciB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAgICpcbiAgICogQW55IG5vbi12b2lkIHJldHVybiB2YWx1ZSBiZWNvbWVzIHRoZSBgcGF1c2VEYXRhYCBpbiB0aGUgY2hlY2twb2ludC5cbiAgICogVGhlIGNvbnN1bWVyIGRlZmluZXMgdGhlIGBUUGF1c2VEYXRhYCB0eXBlIOKAlCB0aGUgRkUgdXNlcyBpdCB0byByZW5kZXJcbiAgICogdGhlIHJpZ2h0IFVJIChmb3JtIGZpZWxkcywgYXBwcm92YWwgYnV0dG9ucywgZXRjLikuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVFBhdXNlRGF0YSA9IHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfVxuICAgKiBjb25zdCBoYW5kbGVyOiBQYXVzYWJsZUhhbmRsZXI8TXlTdGF0ZSwgeyBhcHByb3ZlZDogYm9vbGVhbiB9LCB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH0+ID0ge1xuICAgKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICAgKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlIG9yZGVyICR7c2NvcGUub3JkZXJJZH0/YCwgcmlza0xldmVsOiAnaGlnaCcgfTtcbiAgICogICB9LFxuICAgKiAgIHJlc3VtZTogYXN5bmMgKHNjb3BlLCBpbnB1dCkgPT4ge1xuICAgKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAgICogICB9LFxuICAgKiB9O1xuICAgKiBgYGBcbiAgICovXG4gIGV4ZWN1dGU6IChzY29wZTogVFNjb3BlKSA9PiBQcm9taXNlPFRQYXVzZURhdGEgfCB2b2lkPiB8IFRQYXVzZURhdGEgfCB2b2lkO1xuICAvKipcbiAgICogUmVzdW1lIHBoYXNlLiBDYWxsZWQgd2l0aCB0aGUgcmVzdW1lIGlucHV0IHdoZW4gZXhlY3V0aW9uIGNvbnRpbnVlcy5cbiAgICpcbiAgICogVGhlIHNjb3BlIGlzIHJlc3RvcmVkIGZyb20gdGhlIGNoZWNrcG9pbnQncyBgc2hhcmVkU3RhdGVgLiBXcml0ZXMgZHVyaW5nXG4gICAqIGByZXN1bWVgIGFyZSBjb21taXR0ZWQgYW5kIHZpc2libGUgdG8gc3Vic2VxdWVudCBzdGFnZXMuXG4gICAqL1xuICByZXN1bWU6IChzY29wZTogVFNjb3BlLCBpbnB1dDogVElucHV0KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuLy8g4pSA4pSAIFR5cGUgZ3VhcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgUGF1c2VSZXN1bHQgKHN0YWdlIHdhbnRzIHRvIHBhdXNlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlUmVzdWx0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF1c2VSZXN1bHQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAodmFsdWUgYXMgUGF1c2VSZXN1bHQpLnBhdXNlID09PSB0cnVlO1xufVxuXG4vKiogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgYSBQYXVzZVNpZ25hbC4gVXNlcyBpbnN0YW5jZW9mICsgbmFtZSBicmFuZCBmYWxsYmFjayBmb3IgY3Jvc3MtcmVhbG0gc2FmZXR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VTaWduYWwoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBQYXVzZVNpZ25hbCB7XG4gIC8vIFRvdGFsOiBhIFByb3h5IHdob3NlIGBnZXRQcm90b3R5cGVPZmAgdHJhcCB0aHJvd3MgKG9yIGEgcmV2b2tlZCBQcm94eSlcbiAgLy8gaXMgbm90IGEgc2lnbmFsIOKAlCB0aGUgZW5naW5lJ3MgY2F0Y2ggYmxvY2tzIGFzayB0aGlzIGZpcnN0LCBhbmQgbXVzdFxuICAvLyBub3QgdHJhZGUgdGhlIHN0YWdlJ3MgdGhyb3duIHZhbHVlIGZvciB0aGUgdHJhcCdzIGVycm9yLlxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIFBhdXNlU2lnbmFsIHx8XG4gICAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICBlcnJvci5uYW1lID09PSAnUGF1c2VTaWduYWwnICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3BhdXNlRGF0YScpICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3N0YWdlSWQnKSlcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -43,6 +43,8 @@ const METHOD_ROUTES = {
|
|
|
43
43
|
},
|
|
44
44
|
$getArgs: (t) => t.getArgs.bind(t),
|
|
45
45
|
$getEnv: (t) => t.getEnv.bind(t),
|
|
46
|
+
$attempt: (t) => t.getAttempt.bind(t),
|
|
47
|
+
$call: (t) => t.call.bind(t),
|
|
46
48
|
$debug: (t) => t.addDebugInfo.bind(t),
|
|
47
49
|
$log: (t) => t.addDebugMessage.bind(t),
|
|
48
50
|
$error: (t) => t.addErrorInfo.bind(t),
|
|
@@ -303,4 +305,4 @@ function createTypedScope(target, options) {
|
|
|
303
305
|
});
|
|
304
306
|
}
|
|
305
307
|
exports.createTypedScope = createTypedScope;
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILDJDQUF5RDtBQUV6RCxvREFBMkQ7QUFDM0QsaURBQXFEO0FBQ3JELG1EQUErQztBQUMvQyw2Q0FBNkQ7QUFDN0QsK0NBQXdHO0FBRXhHLHlDQUFnRDtBQUNoRCxtREFBMkY7QUFNM0YsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLGlFQUFpRTtJQUNqRSxpREFBaUQ7SUFDakQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsWUFBc0IsRUFBRSxXQUFvQixFQUFFLEVBQUUsQ0FDOUYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7SUFDbEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsV0FBb0IsRUFBRSxFQUFFLENBQ3BFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUEsMEJBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdkQsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxD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LE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RixPQUFPLDZCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsSUFBSTtZQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSw2QkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsK0JBQStCO1lBQy9HLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdDQUF3QztRQUMzRyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFBLGlDQUFvQixFQUFDLEtBQUssRUFBRTtRQUNqQyxNQUFNO1FBQ04sa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNmLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBeENELDRDQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZSAtLSBDb3JlIFByb3h5IGZhY3RvcnkgZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogV3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlczpcbiAqIC0gVHlwZWQgcHJvcGVydHkgYWNjZXNzOiBzY29wZS5jcmVkaXRUaWVyIChyZWFkKSwgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAod3JpdGUpXG4gKiAtIERlZXAgd3JpdGUgaW50ZXJjZXB0aW9uOiBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCdcbiAqIC0gQXJyYXkgbXV0YXRpb24gaW50ZXJjZXB0aW9uOiBzY29wZS5pdGVtcy5wdXNoKCduZXcnKVxuICogLSAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzOiAkZ2V0VmFsdWUsICRzZXRWYWx1ZSwgJHJlYWQsICRnZXRBcmdzLCBldGMuXG4gKlxuICogUmVhZCBzZW1hbnRpY3M6IHRvcC1sZXZlbCBnZXQgY2FsbHMgZ2V0VmFsdWUoKSAoZmlyZXMgb25SZWFkIE9OQ0UpLlxuICogICBOZXN0ZWQgZ2V0IHRyYXBzIG5hdmlnYXRlIGluLW1lbW9yeSAtLSBubyBhZGRpdGlvbmFsIG9uUmVhZC5cbiAqXG4gKiBXcml0ZSBzZW1hbnRpY3M6IHRvcC1sZXZlbCBzZXQgY2FsbHMgc2V0VmFsdWUoKS4gTmVzdGVkIHNldCBjYWxsc1xuICogICB1cGRhdGVWYWx1ZSgpIHdpdGggYSBwYXJ0aWFsIG9iamVjdCBidWlsdCBmcm9tIHRoZSBhY2N1bXVsYXRlZCBwYXRoLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBsb2Rhc2hHZXQgfSBmcm9tICdmb290dHJhY2UvcGF0aHMnO1xuXG5pbXBvcnQgeyByZWdpc3RlclNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyByZW1lbWJlckhhbmRsZSwgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4vaGFuZGxlcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCByb290S2V5U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gIC8vIEEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0IGlzIGEgdmFsdWUgaXQgYWNjZXB0cyBiYWNrIChoYW5kbGVzLnRzKTpcbiAgLy8gYCRzZXRWYWx1ZSgnY29weScsIHNjb3BlLmN1c3RvbWVyKWAgc3RvcmVzIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGhhbmRsZSxcbiAgLy8gbm90IGEgUHJveHkgdGhlIGNvbW1pdCBjb3VsZCBuZXZlciBjbG9uZS4gVGhlIHNldCB0cmFwIGRvZXMgdGhlIHNhbWUgZm9yXG4gIC8vIGBzY29wZS5jb3B5ID0gc2NvcGUuY3VzdG9tZXJgOyB0aGVzZSBhcmUgdGhlIGV4cGxpY2l0IGRvb3JzLiBBXG4gIC8vIGhhbmRsZS1mcmVlIHZhbHVlIHBhc3NlcyB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAgJHNldFZhbHVlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKSxcbiAgJHVwZGF0ZTogKHQpID0+IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PlxuICAgIHQudXBkYXRlVmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSwgZGVzY3JpcHRpb24pLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheS4gVGhlIHN0YWdlIG1heVxuICAgIC8vIGhhdmUgcHVzaGVkIGhhbmRsZXMgaW50byB0aGUgY2xvbmUgKGBhcnIucHVzaChzY29wZS50ZW1wbGF0ZSlgKSDigJQgdGhleVxuICAgIC8vIGFyZSB2YWx1ZXMgYnkgdGhlIHRpbWUgdGhlIGFycmF5IGlzIHN0YWdlZCAoaGFuZGxlcy50cykuXG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXMoY2xvbmUpKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAvLyBEZXRhY2ggKFQ0KSDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydHMuIERlbGVnYXRlcyB0byBTY29wZUZhY2FkZVxuICAvLyB3aGljaCBtaW50ZWQgcmVmSWRzIGZyb20gcnVudGltZVN0YWdlSWQuXG4gICRkZXRhY2hBbmRKb2luTGF0ZXI6ICh0KSA9PiB0LmRldGFjaEFuZEpvaW5MYXRlci5iaW5kKHQpLFxuICAkZGV0YWNoQW5kRm9yZ2V0OiAodCkgPT4gdC5kZXRhY2hBbmRGb3JnZXQuYmluZCh0KSxcbiAgJHRvUmF3OiAodCkgPT4gKCkgPT4gdCxcbn07XG5cbi8vIC0tIEd1YXJkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCB0byBwcmV2ZW50IFByb3h5IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIFByb21pc2UsXG4vLyBicmVha2luZyBpbnN0YW5jZW9mIGNoZWNrcywgb3IgY29uZnVzaW5nIHRlc3QgbWF0Y2hlcnMuXG5cbmNvbnN0IEdVQVJEX1BST1BTOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiA9IHtcbiAgdGhlbjogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IFByb21pc2UgZGV0ZWN0aW9uXG4gIGFzeW1tZXRyaWNNYXRjaDogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IHZpdGVzdC9qZXN0IG1hdGNoZXIgY29uZnVzaW9uXG4gIGNvbnN0cnVjdG9yOiBPYmplY3QsIC8vIHNhZmUgcHJvdG90eXBlXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnVHlwZWRTY29wZScsXG59O1xuXG4vLyAtLSBTaWxlbnQgZXhpc3RlbmNlIGNoZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRG9lcyB0aGlzIGtleSBleGlzdCBpbiBzdGF0ZSwgYW5zd2VyZWQgd2l0aCBOTyB0cmFja2luZyBzaWRlIGVmZmVjdCBhdCBhbGw/XG4gKlxuICogYGdldFN0YXRlS2V5cygpYCBpcyB0aGUgb25seSBpbnNwZWN0aW9uIGEgU2NvcGVGYWNhZGUgYW5zd2VycyB3aXRob3V0IHJvdXRpbmdcbiAqIHRocm91Z2ggdGhlIHRyYWNrZWQgcmVhZCBwYXRoLiBgaGFzS2V5KClgIGRlbGliZXJhdGVseSBET0VTIHJvdXRlIHRocm91Z2ggaXQ6XG4gKiBgJ2snIGluIHNjb3BlYCBpcyBhIHJlYWwgcXVlc3Rpb24gYWJvdXQgc3RhdGUgdGhhdCBhIHN0YWdlIGNhbiBicmFuY2ggb24sIHNvXG4gKiBpdCByZWdpc3RlcnMgYXMgYSByZWFkIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGlzIHByb2JlIG11c3Qgbm90IHVzZSBpdC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHRhcmdldCBvZmZlcnMgbm8gc2lsZW50IGFuc3dlcjsgY2FsbGVycyBtdXN0XG4gKiB0aGVuIGNob29zZSBkZWxpYmVyYXRlbHkgcmF0aGVyIHRoYW4gYXNzdW1lLlxuICovXG5mdW5jdGlvbiBzaWxlbnRseUtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xufVxuXG4vLyAtLSBNdXRhYmxlIHN0YXRlIHBlciBwcm94eSBpbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBSZWFjdGl2ZVN0YXRlIHtcbiAgYnJlYWtGbj86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBUaGUgdG9wLWxldmVsIGtleSdzIGNoaWxkIHByb3h5LCB2YWxpZGF0ZWQgYnkgcmF3IGlkZW50aXR5IChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk7IGEgc2luayBkcm9wcyB0aGUga2V5IG9uIHdyaXRlLiAqL1xuICBjaGlsZENhY2hlOiBNZW1iZXJDYWNoZTtcbn1cblxuLy8gLS0gTmVzdGVkIGNoaWxkIHByb3hpZXMgKGZvciBkZWVwIHdyaXRlIGludGVyY2VwdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBCb3RoIGZhY3RvcmllcyBhcmUgT1JDSEVTVFJBVE9SUyAoOS4yMy4xKTogcmVhZHMgYXJlIGBsaXZlVmlldy50c2AsIHdyaXRlc1xuLy8gYXJlIGB3cml0ZVRyYXBzLnRzYCBvdmVyIGEgYHJvb3RLZXlTaW5rYCwgYW5kIHRoZSBPTkUgdGhpbmcgZWFjaCBkZWNpZGVzXG4vLyBpdHNlbGYgaXMgd2hhdCBhIGNoaWxkIG1lbWJlciBiZWNvbWVzIOKAlCB0aGUgY3ljbGUgcG9saWN5LiBFYWNoIGhvbGRzIGl0c1xuLy8gb3duIHBlci1tZW1iZXIgcHJveHkgY2FjaGUgKDkuMjMuMiwgYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApLlxuLy9cbi8vIEN5Y2xlIHNhZmV0eTogYW4gaW1tdXRhYmxlIFNldDxvYmplY3Q+IG9mIGFuY2VzdG9yIG9iamVjdHMgaXMgcGFzc2VkIGRvd25cbi8vIGVhY2ggYWNjZXNzIGNoYWluLiBFYWNoIGJyYW5jaCBnZXRzIGl0cyBvd24gY29weSAobmV3IFNldChwYXJlbnQpKSBzb1xuLy8gc2NvcGUueC5mcmllbmQgYW5kIHNjb3BlLnguY293b3JrZXIgZG9uJ3QgcG9sbHV0ZSBlYWNoIG90aGVyJ3MgdHJhY2tpbmcuXG4vLyBXaGVuIGEgY2hpbGQgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgYW5jZXN0b3Igc2V0LCB3ZSd2ZSBoaXQgYSBjeWNsZS5cbi8vIEF0IHRoZSBjeWNsZSBicmVhazogcmV0dXJuIGEgdGVybWluYWwgcHJveHkgdGhhdCB0cmFja3Mgd3JpdGVzIChzZXQgdHJhcFxuLy8gc3RpbGwgYnVpbGRzIHBhdGggKyBjb21taXRzIHRocm91Z2ggdGhlIHNpbmspIGJ1dCBkb2Vzbid0IHJlY3Vyc2UgcmVhZHNcbi8vIGZ1cnRoZXIuIFRoZSB0ZXJtaW5hbCBjaGFpbiBzaGFyZXMgT05FIG11dGFibGUgYHZpc2l0ZWRgIHNldDogYSB2YWx1ZSBzZWVuXG4vLyBhbnl3aGVyZSBwYXN0IHRoZSBjeWNsZSBlZGdlIGlzIGhhbmRlZCBiYWNrIHJhdy5cblxuZnVuY3Rpb24gY3JlYXRlVGVybWluYWxQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgcGFzdCB0aGUgY3ljbGUgZWRnZSBzdGlsbCBnZXRzIGNvcHktb24td3JpdGUgaW50ZXJjZXB0aW9uIOKAlFxuICAgIC8vIGl0IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgcm9vdCBrZXksIHRoZSBzYW1lIGxhdyBhcyB0aGUgbmVzdGVkIHByb3h5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAodmlzaXRlZC5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCB2aXNpdGVkKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmVzdGVkUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIC8vIFJlYWRzIGFyZSBMSVZFICg5LjIyLjApOiBhIGhlbGQgcHJveHkgcmVhZHMgaXRzIG93biB3cml0ZXMsIGAneCcgaW4gb2BcbiAgLy8gYW5kIGBPYmplY3Qua2V5cyhvKWAgc2VlIHRoZW0sIGFuZCBgby5iID0gby5hICogMTBgIHVzZXMgdGhlIG5ldyBgYWAuXG4gIC8vIFRoZSBjYXB0dXJlZCBvYmplY3QgYW5zd2VycyBvbmx5IHdoZW4gdGhlIHBhdGggaXMgZ29uZSDigJQgc2VlIGxpdmVWaWV3LnRzLlxuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgUk9PVCBLRVkgKHJlYWN0aXZlL1JFQURNRS5tZCwgbGF3IDMpXG4gICAgLy8g4oCUIHRoZSBzaW5rJ3MgdmVyYiwgd2hhdGV2ZXIgZGVwdGggdGhlIGFycmF5IHNpdHMgYXQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoKTtcbiAgICByZXR1cm4gY3JlYXRlTmVzdGVkUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIG5ldyBTZXQoYW5jZXN0b3JzKS5hZGQodmFsdWUgYXMgb2JqZWN0KSk7XG4gIH07XG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkob2JqLCB7XG4gICAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCBjaGlsZCwgbWVtYmVycyksXG4gICAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICAgIH0pLFxuICAgIGxpdmUsXG4gICk7XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBsZWF2ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBgcmVzZXJ2ZWRSZWFkYCBhbnN3ZXJlZCBub3RoaW5nOiB0aGUgbmFtZSBpcyBhIHN0YXRlIGtleSBhbmQgbXVzdCBiZSByZWFkICh0cmFja2VkKSBmcm9tIHRoZSB0YXJnZXQuICovXG5jb25zdCBTVEFURV9LRVk6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ3N0YXRlLWtleScpO1xuXG4vKipcbiAqIFdIWTogdGhlIG5hbWVzIHRoZSBzY29wZSBhbnN3ZXJzIElUU0VMRiDigJQgc3ltYm9scywgdGhlIGd1YXJkIHByb3BlcnRpZXMsXG4gKiBOb2RlJ3MgaW5zcGVjdCBob29rLCB0aGUgYCRgLW1ldGhvZHMgYW5kIHRoZSBKU09OIHByb2JlIOKAlCBtdXN0IG5ldmVyIGJlY29tZVxuICogdHJhY2tlZCByZWFkczsgZXZlcnl0aGluZyBlbHNlIChhIGxpZmVjeWNsZS1sb29raW5nIG5hbWUgc3VjaCBhc1xuICogYG5vdGlmeVN0YWdlU3RhcnRgIGluY2x1ZGVkKSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLiBUaGVcbiAqIGVuZ2luZSByZWFjaGVzIHRoZSBmYWNhZGUgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBydW50aW1lIHBvcnQsIG5ldmVyIHRocm91Z2hcbiAqIGEgbmFtZSBvbiB0aGlzIHByb3h5LlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gcmVzZXJ2ZWRSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHJldHVybiAoKSA9PiB0YXJnZXQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gTUVUSE9EX1JPVVRFU1twcm9wXT8uKHRhcmdldCwgc3RhdGUpO1xuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHZhbHVlIEFTIEFTU0lHTkVEIChhIGhhbmRsZSBiZWNvbWVzIHdoYXQgaXQgc3RhbmRzIGZvciwgYGhhbmRsZXMudHNgOyB0aGUgYnVmZmVyIGRldGFjaGVzIGF0XG4gKiAgY29tbWl0IOKAlCB0aGUgc2FtZSBsYXcgYXMgYCRzZXRWYWx1ZWAsIDkuMjQuMCkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gIHN0YXRlLmNoaWxkQ2FjaGUuZGVsZXRlKGtleSk7XG59XG5cbi8qKiBEb2VzIHRoZSBrZXkgZXhpc3Qg4oCUIGFuc3dlcmVkIHdpdGhvdXQgYSB0cmFja2VkIHJlYWQgd2hlcmV2ZXIgdGhlIHRhcmdldCBjYW47IGBnZXRWYWx1ZWAgaXMgdGhlIGxhc3QgcmVzb3J0LiAqL1xuZnVuY3Rpb24ga25vd25LZXkodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHRhcmdldC5oYXNLZXkpIHJldHVybiB0YXJnZXQuaGFzS2V5KGtleSk7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGtleSk7XG4gIHJldHVybiB0YXJnZXQuZ2V0VmFsdWUoa2V5KSAhPT0gdW5kZWZpbmVkOyAvLyBmYWxsYmFjazogZmlyZXMgb25SZWFkIChhY2NlcHRhYmxlIGRlZ3JhZGF0aW9uKVxufVxuXG4vKiogRXZlcnkgc3RhdGUga2V5IOKAlCBzaWxlbnRseSB3aGVyZSB0aGUgdGFyZ2V0IGNhbiwgZWxzZSBmcm9tIGEgd2hvbGUtc3RhdGUgcmVhZC4gKi9cbmZ1bmN0aW9uIHN0YXRlS2V5cyh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0KTogc3RyaW5nW10ge1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKTtcbiAgY29uc3Qgc25hcHNob3QgPSB0YXJnZXQuZ2V0VmFsdWUoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNuYXBzaG90ICYmIHR5cGVvZiBzbmFwc2hvdCA9PT0gJ29iamVjdCcgPyBPYmplY3Qua2V5cyhzbmFwc2hvdCkgOiBbXTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIHByb3h5ICh0aGUgbWFpbiBUeXBlZFNjb3BlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUeXBlZFNjb3BlPFQ+IHByb3h5IHdyYXBwaW5nIGEgUmVhY3RpdmVUYXJnZXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB1bmRlcmx5aW5nIHNjb3BlIChTY29wZUZhY2FkZSBvciBhbnkgUmVhY3RpdmVUYXJnZXQpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJyZWFrUGlwZWxpbmUgaW5qZWN0aW9uKVxuICogQHJldHVybnMgQSBQcm94eSB3aXRoIHR5cGVkIHByb3BlcnR5IGFjY2VzcyBhbmQgJC1wcmVmaXhlZCBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlZFNjb3BlPFQgZXh0ZW5kcyBvYmplY3Q+KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdGlvbnM/OiBSZWFjdGl2ZU9wdGlvbnMpOiBUeXBlZFNjb3BlPFQ+IHtcbiAgY29uc3Qgc3RhdGU6IFJlYWN0aXZlU3RhdGUgPSB7IGJyZWFrRm46IG9wdGlvbnM/LmJyZWFrUGlwZWxpbmUsIGNoaWxkQ2FjaGU6IG5ldyBNZW1iZXJDYWNoZSgpIH07XG4gIC8vIEJpbmQgdGhlIHNpbGVudCByZWFkIG9uY2Ug4oCUIHRoZSBuZXN0ZWQvYXJyYXkgcHJveGllcyByZXNvbHZlIHRoZWlyIGxpdmUgdmlldyB0aHJvdWdoIGl0LlxuICBjb25zdCByZWFkU2lsZW50ID0gKHRhcmdldC5nZXRWYWx1ZVNpbGVudCA/PyB0YXJnZXQuZ2V0VmFsdWUpLmJpbmQodGFyZ2V0KTtcblxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSByZXNlcnZlZFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiByZWdpc3RlclNjb3BlUnVudGltZShwcm94eSwge1xuICAgIHRhcmdldCxcbiAgICBoYW5kbGVzQXNzaWdubWVudHM6IHRydWUsXG4gICAgc2V0QnJlYWs6IChmbikgPT4ge1xuICAgICAgc3RhdGUuYnJlYWtGbiA9IGZuO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILDJDQUF5RDtBQUV6RCxvREFBMkQ7QUFDM0QsaURBQXFEO0FBQ3JELG1EQUErQztBQUMvQyw2Q0FBNkQ7QUFDN0QsK0NBQXdHO0FBRXhHLHlDQUFnRDtBQUNoRCxtREFBMkY7QUFNM0YsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLGlFQUFpRTtJQUNqRSxpREFBaUQ7SUFDakQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsWUFBc0IsRUFBRSxXQUFvQixFQUFFLEVBQUUsQ0FDOUYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7SUFDbEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsV0FBb0IsRUFBRSxFQUFFLENBQ3BFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUEsMEJBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdkQsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxPQUFPLElBQUEsaUJBQVMsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sRUFB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ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZSAtLSBDb3JlIFByb3h5IGZhY3RvcnkgZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogV3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlczpcbiAqIC0gVHlwZWQgcHJvcGVydHkgYWNjZXNzOiBzY29wZS5jcmVkaXRUaWVyIChyZWFkKSwgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAod3JpdGUpXG4gKiAtIERlZXAgd3JpdGUgaW50ZXJjZXB0aW9uOiBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCdcbiAqIC0gQXJyYXkgbXV0YXRpb24gaW50ZXJjZXB0aW9uOiBzY29wZS5pdGVtcy5wdXNoKCduZXcnKVxuICogLSAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzOiAkZ2V0VmFsdWUsICRzZXRWYWx1ZSwgJHJlYWQsICRnZXRBcmdzLCBldGMuXG4gKlxuICogUmVhZCBzZW1hbnRpY3M6IHRvcC1sZXZlbCBnZXQgY2FsbHMgZ2V0VmFsdWUoKSAoZmlyZXMgb25SZWFkIE9OQ0UpLlxuICogICBOZXN0ZWQgZ2V0IHRyYXBzIG5hdmlnYXRlIGluLW1lbW9yeSAtLSBubyBhZGRpdGlvbmFsIG9uUmVhZC5cbiAqXG4gKiBXcml0ZSBzZW1hbnRpY3M6IHRvcC1sZXZlbCBzZXQgY2FsbHMgc2V0VmFsdWUoKS4gTmVzdGVkIHNldCBjYWxsc1xuICogICB1cGRhdGVWYWx1ZSgpIHdpdGggYSBwYXJ0aWFsIG9iamVjdCBidWlsdCBmcm9tIHRoZSBhY2N1bXVsYXRlZCBwYXRoLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBsb2Rhc2hHZXQgfSBmcm9tICdmb290dHJhY2UvcGF0aHMnO1xuXG5pbXBvcnQgeyByZWdpc3RlclNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyByZW1lbWJlckhhbmRsZSwgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4vaGFuZGxlcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCByb290S2V5U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gIC8vIEEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0IGlzIGEgdmFsdWUgaXQgYWNjZXB0cyBiYWNrIChoYW5kbGVzLnRzKTpcbiAgLy8gYCRzZXRWYWx1ZSgnY29weScsIHNjb3BlLmN1c3RvbWVyKWAgc3RvcmVzIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGhhbmRsZSxcbiAgLy8gbm90IGEgUHJveHkgdGhlIGNvbW1pdCBjb3VsZCBuZXZlciBjbG9uZS4gVGhlIHNldCB0cmFwIGRvZXMgdGhlIHNhbWUgZm9yXG4gIC8vIGBzY29wZS5jb3B5ID0gc2NvcGUuY3VzdG9tZXJgOyB0aGVzZSBhcmUgdGhlIGV4cGxpY2l0IGRvb3JzLiBBXG4gIC8vIGhhbmRsZS1mcmVlIHZhbHVlIHBhc3NlcyB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAgJHNldFZhbHVlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKSxcbiAgJHVwZGF0ZTogKHQpID0+IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PlxuICAgIHQudXBkYXRlVmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSwgZGVzY3JpcHRpb24pLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkYXR0ZW1wdDogKHQpID0+IHQuZ2V0QXR0ZW1wdC5iaW5kKHQpLFxuICAkY2FsbDogKHQpID0+IHQuY2FsbC5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheS4gVGhlIHN0YWdlIG1heVxuICAgIC8vIGhhdmUgcHVzaGVkIGhhbmRsZXMgaW50byB0aGUgY2xvbmUgKGBhcnIucHVzaChzY29wZS50ZW1wbGF0ZSlgKSDigJQgdGhleVxuICAgIC8vIGFyZSB2YWx1ZXMgYnkgdGhlIHRpbWUgdGhlIGFycmF5IGlzIHN0YWdlZCAoaGFuZGxlcy50cykuXG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXMoY2xvbmUpKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAvLyBEZXRhY2ggKFQ0KSDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydHMuIERlbGVnYXRlcyB0byBTY29wZUZhY2FkZVxuICAvLyB3aGljaCBtaW50ZWQgcmVmSWRzIGZyb20gcnVudGltZVN0YWdlSWQuXG4gICRkZXRhY2hBbmRKb2luTGF0ZXI6ICh0KSA9PiB0LmRldGFjaEFuZEpvaW5MYXRlci5iaW5kKHQpLFxuICAkZGV0YWNoQW5kRm9yZ2V0OiAodCkgPT4gdC5kZXRhY2hBbmRGb3JnZXQuYmluZCh0KSxcbiAgJHRvUmF3OiAodCkgPT4gKCkgPT4gdCxcbn07XG5cbi8vIC0tIEd1YXJkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCB0byBwcmV2ZW50IFByb3h5IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIFByb21pc2UsXG4vLyBicmVha2luZyBpbnN0YW5jZW9mIGNoZWNrcywgb3IgY29uZnVzaW5nIHRlc3QgbWF0Y2hlcnMuXG5cbmNvbnN0IEdVQVJEX1BST1BTOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiA9IHtcbiAgdGhlbjogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IFByb21pc2UgZGV0ZWN0aW9uXG4gIGFzeW1tZXRyaWNNYXRjaDogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IHZpdGVzdC9qZXN0IG1hdGNoZXIgY29uZnVzaW9uXG4gIGNvbnN0cnVjdG9yOiBPYmplY3QsIC8vIHNhZmUgcHJvdG90eXBlXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnVHlwZWRTY29wZScsXG59O1xuXG4vLyAtLSBTaWxlbnQgZXhpc3RlbmNlIGNoZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRG9lcyB0aGlzIGtleSBleGlzdCBpbiBzdGF0ZSwgYW5zd2VyZWQgd2l0aCBOTyB0cmFja2luZyBzaWRlIGVmZmVjdCBhdCBhbGw/XG4gKlxuICogYGdldFN0YXRlS2V5cygpYCBpcyB0aGUgb25seSBpbnNwZWN0aW9uIGEgU2NvcGVGYWNhZGUgYW5zd2VycyB3aXRob3V0IHJvdXRpbmdcbiAqIHRocm91Z2ggdGhlIHRyYWNrZWQgcmVhZCBwYXRoLiBgaGFzS2V5KClgIGRlbGliZXJhdGVseSBET0VTIHJvdXRlIHRocm91Z2ggaXQ6XG4gKiBgJ2snIGluIHNjb3BlYCBpcyBhIHJlYWwgcXVlc3Rpb24gYWJvdXQgc3RhdGUgdGhhdCBhIHN0YWdlIGNhbiBicmFuY2ggb24sIHNvXG4gKiBpdCByZWdpc3RlcnMgYXMgYSByZWFkIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGlzIHByb2JlIG11c3Qgbm90IHVzZSBpdC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHRhcmdldCBvZmZlcnMgbm8gc2lsZW50IGFuc3dlcjsgY2FsbGVycyBtdXN0XG4gKiB0aGVuIGNob29zZSBkZWxpYmVyYXRlbHkgcmF0aGVyIHRoYW4gYXNzdW1lLlxuICovXG5mdW5jdGlvbiBzaWxlbnRseUtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xufVxuXG4vLyAtLSBNdXRhYmxlIHN0YXRlIHBlciBwcm94eSBpbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBSZWFjdGl2ZVN0YXRlIHtcbiAgYnJlYWtGbj86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBUaGUgdG9wLWxldmVsIGtleSdzIGNoaWxkIHByb3h5LCB2YWxpZGF0ZWQgYnkgcmF3IGlkZW50aXR5IChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk7IGEgc2luayBkcm9wcyB0aGUga2V5IG9uIHdyaXRlLiAqL1xuICBjaGlsZENhY2hlOiBNZW1iZXJDYWNoZTtcbn1cblxuLy8gLS0gTmVzdGVkIGNoaWxkIHByb3hpZXMgKGZvciBkZWVwIHdyaXRlIGludGVyY2VwdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBCb3RoIGZhY3RvcmllcyBhcmUgT1JDSEVTVFJBVE9SUyAoOS4yMy4xKTogcmVhZHMgYXJlIGBsaXZlVmlldy50c2AsIHdyaXRlc1xuLy8gYXJlIGB3cml0ZVRyYXBzLnRzYCBvdmVyIGEgYHJvb3RLZXlTaW5rYCwgYW5kIHRoZSBPTkUgdGhpbmcgZWFjaCBkZWNpZGVzXG4vLyBpdHNlbGYgaXMgd2hhdCBhIGNoaWxkIG1lbWJlciBiZWNvbWVzIOKAlCB0aGUgY3ljbGUgcG9saWN5LiBFYWNoIGhvbGRzIGl0c1xuLy8gb3duIHBlci1tZW1iZXIgcHJveHkgY2FjaGUgKDkuMjMuMiwgYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApLlxuLy9cbi8vIEN5Y2xlIHNhZmV0eTogYW4gaW1tdXRhYmxlIFNldDxvYmplY3Q+IG9mIGFuY2VzdG9yIG9iamVjdHMgaXMgcGFzc2VkIGRvd25cbi8vIGVhY2ggYWNjZXNzIGNoYWluLiBFYWNoIGJyYW5jaCBnZXRzIGl0cyBvd24gY29weSAobmV3IFNldChwYXJlbnQpKSBzb1xuLy8gc2NvcGUueC5mcmllbmQgYW5kIHNjb3BlLnguY293b3JrZXIgZG9uJ3QgcG9sbHV0ZSBlYWNoIG90aGVyJ3MgdHJhY2tpbmcuXG4vLyBXaGVuIGEgY2hpbGQgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgYW5jZXN0b3Igc2V0LCB3ZSd2ZSBoaXQgYSBjeWNsZS5cbi8vIEF0IHRoZSBjeWNsZSBicmVhazogcmV0dXJuIGEgdGVybWluYWwgcHJveHkgdGhhdCB0cmFja3Mgd3JpdGVzIChzZXQgdHJhcFxuLy8gc3RpbGwgYnVpbGRzIHBhdGggKyBjb21taXRzIHRocm91Z2ggdGhlIHNpbmspIGJ1dCBkb2Vzbid0IHJlY3Vyc2UgcmVhZHNcbi8vIGZ1cnRoZXIuIFRoZSB0ZXJtaW5hbCBjaGFpbiBzaGFyZXMgT05FIG11dGFibGUgYHZpc2l0ZWRgIHNldDogYSB2YWx1ZSBzZWVuXG4vLyBhbnl3aGVyZSBwYXN0IHRoZSBjeWNsZSBlZGdlIGlzIGhhbmRlZCBiYWNrIHJhdy5cblxuZnVuY3Rpb24gY3JlYXRlVGVybWluYWxQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgcGFzdCB0aGUgY3ljbGUgZWRnZSBzdGlsbCBnZXRzIGNvcHktb24td3JpdGUgaW50ZXJjZXB0aW9uIOKAlFxuICAgIC8vIGl0IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgcm9vdCBrZXksIHRoZSBzYW1lIGxhdyBhcyB0aGUgbmVzdGVkIHByb3h5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAodmlzaXRlZC5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCB2aXNpdGVkKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmVzdGVkUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIC8vIFJlYWRzIGFyZSBMSVZFICg5LjIyLjApOiBhIGhlbGQgcHJveHkgcmVhZHMgaXRzIG93biB3cml0ZXMsIGAneCcgaW4gb2BcbiAgLy8gYW5kIGBPYmplY3Qua2V5cyhvKWAgc2VlIHRoZW0sIGFuZCBgby5iID0gby5hICogMTBgIHVzZXMgdGhlIG5ldyBgYWAuXG4gIC8vIFRoZSBjYXB0dXJlZCBvYmplY3QgYW5zd2VycyBvbmx5IHdoZW4gdGhlIHBhdGggaXMgZ29uZSDigJQgc2VlIGxpdmVWaWV3LnRzLlxuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgUk9PVCBLRVkgKHJlYWN0aXZlL1JFQURNRS5tZCwgbGF3IDMpXG4gICAgLy8g4oCUIHRoZSBzaW5rJ3MgdmVyYiwgd2hhdGV2ZXIgZGVwdGggdGhlIGFycmF5IHNpdHMgYXQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoKTtcbiAgICByZXR1cm4gY3JlYXRlTmVzdGVkUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIG5ldyBTZXQoYW5jZXN0b3JzKS5hZGQodmFsdWUgYXMgb2JqZWN0KSk7XG4gIH07XG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkob2JqLCB7XG4gICAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCBjaGlsZCwgbWVtYmVycyksXG4gICAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICAgIH0pLFxuICAgIGxpdmUsXG4gICk7XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBsZWF2ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBgcmVzZXJ2ZWRSZWFkYCBhbnN3ZXJlZCBub3RoaW5nOiB0aGUgbmFtZSBpcyBhIHN0YXRlIGtleSBhbmQgbXVzdCBiZSByZWFkICh0cmFja2VkKSBmcm9tIHRoZSB0YXJnZXQuICovXG5jb25zdCBTVEFURV9LRVk6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ3N0YXRlLWtleScpO1xuXG4vKipcbiAqIFdIWTogdGhlIG5hbWVzIHRoZSBzY29wZSBhbnN3ZXJzIElUU0VMRiDigJQgc3ltYm9scywgdGhlIGd1YXJkIHByb3BlcnRpZXMsXG4gKiBOb2RlJ3MgaW5zcGVjdCBob29rLCB0aGUgYCRgLW1ldGhvZHMgYW5kIHRoZSBKU09OIHByb2JlIOKAlCBtdXN0IG5ldmVyIGJlY29tZVxuICogdHJhY2tlZCByZWFkczsgZXZlcnl0aGluZyBlbHNlIChhIGxpZmVjeWNsZS1sb29raW5nIG5hbWUgc3VjaCBhc1xuICogYG5vdGlmeVN0YWdlU3RhcnRgIGluY2x1ZGVkKSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLiBUaGVcbiAqIGVuZ2luZSByZWFjaGVzIHRoZSBmYWNhZGUgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBydW50aW1lIHBvcnQsIG5ldmVyIHRocm91Z2hcbiAqIGEgbmFtZSBvbiB0aGlzIHByb3h5LlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gcmVzZXJ2ZWRSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHJldHVybiAoKSA9PiB0YXJnZXQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gTUVUSE9EX1JPVVRFU1twcm9wXT8uKHRhcmdldCwgc3RhdGUpO1xuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHZhbHVlIEFTIEFTU0lHTkVEIChhIGhhbmRsZSBiZWNvbWVzIHdoYXQgaXQgc3RhbmRzIGZvciwgYGhhbmRsZXMudHNgOyB0aGUgYnVmZmVyIGRldGFjaGVzIGF0XG4gKiAgY29tbWl0IOKAlCB0aGUgc2FtZSBsYXcgYXMgYCRzZXRWYWx1ZWAsIDkuMjQuMCkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gIHN0YXRlLmNoaWxkQ2FjaGUuZGVsZXRlKGtleSk7XG59XG5cbi8qKiBEb2VzIHRoZSBrZXkgZXhpc3Qg4oCUIGFuc3dlcmVkIHdpdGhvdXQgYSB0cmFja2VkIHJlYWQgd2hlcmV2ZXIgdGhlIHRhcmdldCBjYW47IGBnZXRWYWx1ZWAgaXMgdGhlIGxhc3QgcmVzb3J0LiAqL1xuZnVuY3Rpb24ga25vd25LZXkodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHRhcmdldC5oYXNLZXkpIHJldHVybiB0YXJnZXQuaGFzS2V5KGtleSk7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGtleSk7XG4gIHJldHVybiB0YXJnZXQuZ2V0VmFsdWUoa2V5KSAhPT0gdW5kZWZpbmVkOyAvLyBmYWxsYmFjazogZmlyZXMgb25SZWFkIChhY2NlcHRhYmxlIGRlZ3JhZGF0aW9uKVxufVxuXG4vKiogRXZlcnkgc3RhdGUga2V5IOKAlCBzaWxlbnRseSB3aGVyZSB0aGUgdGFyZ2V0IGNhbiwgZWxzZSBmcm9tIGEgd2hvbGUtc3RhdGUgcmVhZC4gKi9cbmZ1bmN0aW9uIHN0YXRlS2V5cyh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0KTogc3RyaW5nW10ge1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKTtcbiAgY29uc3Qgc25hcHNob3QgPSB0YXJnZXQuZ2V0VmFsdWUoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNuYXBzaG90ICYmIHR5cGVvZiBzbmFwc2hvdCA9PT0gJ29iamVjdCcgPyBPYmplY3Qua2V5cyhzbmFwc2hvdCkgOiBbXTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIHByb3h5ICh0aGUgbWFpbiBUeXBlZFNjb3BlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUeXBlZFNjb3BlPFQ+IHByb3h5IHdyYXBwaW5nIGEgUmVhY3RpdmVUYXJnZXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB1bmRlcmx5aW5nIHNjb3BlIChTY29wZUZhY2FkZSBvciBhbnkgUmVhY3RpdmVUYXJnZXQpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJyZWFrUGlwZWxpbmUgaW5qZWN0aW9uKVxuICogQHJldHVybnMgQSBQcm94eSB3aXRoIHR5cGVkIHByb3BlcnR5IGFjY2VzcyBhbmQgJC1wcmVmaXhlZCBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlZFNjb3BlPFQgZXh0ZW5kcyBvYmplY3Q+KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdGlvbnM/OiBSZWFjdGl2ZU9wdGlvbnMpOiBUeXBlZFNjb3BlPFQ+IHtcbiAgY29uc3Qgc3RhdGU6IFJlYWN0aXZlU3RhdGUgPSB7IGJyZWFrRm46IG9wdGlvbnM/LmJyZWFrUGlwZWxpbmUsIGNoaWxkQ2FjaGU6IG5ldyBNZW1iZXJDYWNoZSgpIH07XG4gIC8vIEJpbmQgdGhlIHNpbGVudCByZWFkIG9uY2Ug4oCUIHRoZSBuZXN0ZWQvYXJyYXkgcHJveGllcyByZXNvbHZlIHRoZWlyIGxpdmUgdmlldyB0aHJvdWdoIGl0LlxuICBjb25zdCByZWFkU2lsZW50ID0gKHRhcmdldC5nZXRWYWx1ZVNpbGVudCA/PyB0YXJnZXQuZ2V0VmFsdWUpLmJpbmQodGFyZ2V0KTtcblxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSByZXNlcnZlZFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiByZWdpc3RlclNjb3BlUnVudGltZShwcm94eSwge1xuICAgIHRhcmdldCxcbiAgICBoYW5kbGVzQXNzaWdubWVudHM6IHRydWUsXG4gICAgc2V0QnJlYWs6IChmbikgPT4ge1xuICAgICAgc3RhdGUuYnJlYWtGbiA9IGZuO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
|