footprintjs 5.0.0 → 6.0.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.
Files changed (78) hide show
  1. package/CLAUDE.md +32 -8
  2. package/dist/advanced.js +2 -3
  3. package/dist/esm/advanced.js +2 -2
  4. package/dist/esm/index.js +1 -1
  5. package/dist/esm/lib/builder/FlowChartBuilder.js +364 -100
  6. package/dist/esm/lib/builder/index.js +1 -1
  7. package/dist/esm/lib/builder/structure/StructureRecorder.js +158 -0
  8. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +171 -0
  9. package/dist/esm/lib/builder/types.js +1 -1
  10. package/dist/esm/lib/engine/errors/errorInfo.js +4 -3
  11. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +11 -2
  12. package/dist/esm/lib/engine/handlers/DeciderHandler.js +5 -7
  13. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
  14. package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -7
  15. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +7 -1
  16. package/dist/esm/lib/engine/handlers/index.js +1 -3
  17. package/dist/esm/lib/engine/handlers/types.js +2 -2
  18. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
  19. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  20. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
  21. package/dist/esm/lib/engine/narrative/types.js +1 -1
  22. package/dist/esm/lib/engine/runtimeStageId.js +64 -2
  23. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +11 -54
  24. package/dist/esm/lib/engine/types.js +1 -1
  25. package/dist/esm/lib/engine/walkSubflowSpec.js +144 -0
  26. package/dist/esm/lib/runner/FlowChartExecutor.js +4 -17
  27. package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
  28. package/dist/esm/trace.js +3 -2
  29. package/dist/index.js +1 -1
  30. package/dist/lib/builder/FlowChartBuilder.js +364 -100
  31. package/dist/lib/builder/index.js +1 -1
  32. package/dist/lib/builder/structure/StructureRecorder.js +159 -0
  33. package/dist/lib/builder/structure/StructureRecorderDispatcher.js +175 -0
  34. package/dist/lib/builder/types.js +1 -1
  35. package/dist/lib/engine/errors/errorInfo.js +4 -3
  36. package/dist/lib/engine/handlers/ChildrenExecutor.js +11 -2
  37. package/dist/lib/engine/handlers/DeciderHandler.js +5 -7
  38. package/dist/lib/engine/handlers/RuntimeStructureManager.js +2 -2
  39. package/dist/lib/engine/handlers/SelectorHandler.js +9 -7
  40. package/dist/lib/engine/handlers/SubflowExecutor.js +7 -1
  41. package/dist/lib/engine/handlers/index.js +2 -5
  42. package/dist/lib/engine/handlers/types.js +2 -2
  43. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +12 -2
  44. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  45. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
  46. package/dist/lib/engine/narrative/types.js +1 -1
  47. package/dist/lib/engine/runtimeStageId.js +66 -3
  48. package/dist/lib/engine/traversal/FlowchartTraverser.js +11 -54
  49. package/dist/lib/engine/types.js +1 -1
  50. package/dist/lib/engine/walkSubflowSpec.js +148 -0
  51. package/dist/lib/runner/FlowChartExecutor.js +4 -17
  52. package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
  53. package/dist/trace.js +5 -2
  54. package/dist/types/advanced.d.ts +4 -4
  55. package/dist/types/index.d.ts +2 -0
  56. package/dist/types/lib/builder/FlowChartBuilder.d.ts +110 -14
  57. package/dist/types/lib/builder/index.d.ts +2 -1
  58. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +349 -0
  59. package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
  60. package/dist/types/lib/builder/types.d.ts +20 -6
  61. package/dist/types/lib/engine/errors/errorInfo.d.ts +3 -2
  62. package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +3 -3
  63. package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +1 -1
  64. package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -2
  65. package/dist/types/lib/engine/handlers/index.d.ts +1 -2
  66. package/dist/types/lib/engine/handlers/types.d.ts +2 -9
  67. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -2
  68. package/dist/types/lib/engine/narrative/types.d.ts +24 -2
  69. package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
  70. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -6
  71. package/dist/types/lib/engine/types.d.ts +0 -26
  72. package/dist/types/lib/engine/walkSubflowSpec.d.ts +95 -0
  73. package/dist/types/lib/runner/FlowChartExecutor.d.ts +4 -16
  74. package/dist/types/trace.d.ts +3 -1
  75. package/package.json +1 -1
  76. package/dist/esm/lib/engine/handlers/ExtractorRunner.js +0 -122
  77. package/dist/lib/engine/handlers/ExtractorRunner.js +0 -126
  78. package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +0 -41
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * handlers/types.ts — Shared callback types for all handler modules.
3
3
  *
4
- * Avoids duplicate definitions of ExecuteNodeFn / CallExtractorFn / etc.
4
+ * Avoids duplicate definitions of ExecuteNodeFn / RunStageFn / etc.
5
5
  * across ChildrenExecutor, DeciderHandler, ContinuationResolver, SubflowExecutor.
6
6
  * All types are callbacks that break circular dependencies with FlowchartTraverser.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGhhbmRsZXJzL3R5cGVzLnRzIOKAlCBTaGFyZWQgY2FsbGJhY2sgdHlwZXMgZm9yIGFsbCBoYW5kbGVyIG1vZHVsZXMuXG4gKlxuICogQXZvaWRzIGR1cGxpY2F0ZSBkZWZpbml0aW9ucyBvZiBFeGVjdXRlTm9kZUZuIC8gQ2FsbEV4dHJhY3RvckZuIC8gZXRjLlxuICogYWNyb3NzIENoaWxkcmVuRXhlY3V0b3IsIERlY2lkZXJIYW5kbGVyLCBDb250aW51YXRpb25SZXNvbHZlciwgU3ViZmxvd0V4ZWN1dG9yLlxuICogQWxsIHR5cGVzIGFyZSBjYWxsYmFja3MgdGhhdCBicmVhayBjaXJjdWxhciBkZXBlbmRlbmNpZXMgd2l0aCBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBUcmF2ZXJzZXIgYnJlYWsgZmxhZyDigJQgbXV0YWJsZSBzdHJ1Y3QgcGFzc2VkIHRocm91Z2ggdGhlIHRyYXZlcnNhbCByZWN1cnNpb24uXG4gKlxuICogYHNob3VsZEJyZWFrYCBmbGlwcyB3aGVuIGFueSBzdGFnZSBjYWxscyBgc2NvcGUuJGJyZWFrKClgLiBUaGUgdHJhdmVyc2VyXG4gKiBjaGVja3MgdGhpcyBiZWZvcmUgc2NoZWR1bGluZyB0aGUgbmV4dCBub2RlOyB3aGVuIHNldCwgdGhlIHN0YWNrIHVud2luZHNcbiAqIGNsZWFubHkgd2l0aG91dCBydW5uaW5nIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICpcbiAqIGByZWFzb25gIGlzIHRoZSBvcHRpb25hbCBzdHJpbmcgYXJndW1lbnQgcGFzc2VkIHRvIGAkYnJlYWsocmVhc29uKWAuIEl0XG4gKiB0cmF2ZWxzIGFsb25nc2lkZSBgc2hvdWxkQnJlYWtgIHNvIGRvd25zdHJlYW0gY29kZSAoRmxvd1JlY29yZGVyIG9uQnJlYWtcbiAqIGV2ZW50cywgc3ViZmxvdy1wcm9wYWdhdGlvbiB0byBwYXJlbnQgc2NvcGUpIGNhbiBzdXJmYWNlIHRoZSByZWFzb24uXG4gKlxuICogQWRkaW5nIGZpZWxkcyBoZXJlIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUg4oCUIGV4aXN0aW5nIGNhbGxlcnMgb25seSByZWFkXG4gKiBgc2hvdWxkQnJlYWtgLCBhbmQgYHJlYXNvbmAgaXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWtGbGFnIHtcbiAgc2hvdWxkQnJlYWs6IGJvb2xlYW47XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuLyoqIFJlY3Vyc2l2ZSBub2RlIGV4ZWN1dGlvbiDigJQgYXZvaWRzIGNpcmN1bGFyIGRlcCB3aXRoIEZsb3djaGFydFRyYXZlcnNlci4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dGVOb2RlRm48VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgYnJlYWtGbGFnOiBCcmVha0ZsYWcsXG4gIGJyYW5jaFBhdGg/OiBzdHJpbmcsXG4pID0+IFByb21pc2U8YW55PjtcblxuLyoqIFJ1biBhIHN0YWdlIGZ1bmN0aW9uIHdpdGggY29tbWl0ICsgZXh0cmFjdG9yLiAqL1xuZXhwb3J0IHR5cGUgUnVuU3RhZ2VGbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgc3RhZ2VGdW5jOiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgYnJlYWtGbjogKCkgPT4gdm9pZCxcbikgPT4gUHJvbWlzZTxUT3V0PjtcblxuLyoqIENhbGwgdGhlIHRyYXZlcnNhbCBleHRyYWN0b3IgYWZ0ZXIgc3RhZ2UgZXhlY3V0aW9uLiAqL1xuZXhwb3J0IHR5cGUgQ2FsbEV4dHJhY3RvckZuPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlUGF0aDogc3RyaW5nLFxuICBzdGFnZU91dHB1dD86IHVua25vd24sXG4gIGVycm9ySW5mbz86IHsgdHlwZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSxcbikgPT4gdm9pZDtcblxuLyoqIENvbXB1dGUgdGhlIHN0YWdlIHBhdGggc3RyaW5nIGZvciBleHRyYWN0b3IgYW5kIG5hcnJhdGl2ZS4gKi9cbmV4cG9ydCB0eXBlIEdldFN0YWdlUGF0aEZuPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICBicmFuY2hQYXRoPzogc3RyaW5nLFxuICBjb250ZXh0U3RhZ2VOYW1lPzogc3RyaW5nLFxuKSA9PiBzdHJpbmc7XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGhhbmRsZXJzL3R5cGVzLnRzIOKAlCBTaGFyZWQgY2FsbGJhY2sgdHlwZXMgZm9yIGFsbCBoYW5kbGVyIG1vZHVsZXMuXG4gKlxuICogQXZvaWRzIGR1cGxpY2F0ZSBkZWZpbml0aW9ucyBvZiBFeGVjdXRlTm9kZUZuIC8gUnVuU3RhZ2VGbiAvIGV0Yy5cbiAqIGFjcm9zcyBDaGlsZHJlbkV4ZWN1dG9yLCBEZWNpZGVySGFuZGxlciwgQ29udGludWF0aW9uUmVzb2x2ZXIsIFN1YmZsb3dFeGVjdXRvci5cbiAqIEFsbCB0eXBlcyBhcmUgY2FsbGJhY2tzIHRoYXQgYnJlYWsgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHdpdGggRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogVHJhdmVyc2VyIGJyZWFrIGZsYWcg4oCUIG11dGFibGUgc3RydWN0IHBhc3NlZCB0aHJvdWdoIHRoZSB0cmF2ZXJzYWwgcmVjdXJzaW9uLlxuICpcbiAqIGBzaG91bGRCcmVha2AgZmxpcHMgd2hlbiBhbnkgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhaygpYC4gVGhlIHRyYXZlcnNlclxuICogY2hlY2tzIHRoaXMgYmVmb3JlIHNjaGVkdWxpbmcgdGhlIG5leHQgbm9kZTsgd2hlbiBzZXQsIHRoZSBzdGFjayB1bndpbmRzXG4gKiBjbGVhbmx5IHdpdGhvdXQgcnVubmluZyBzdWJzZXF1ZW50IHN0YWdlcy5cbiAqXG4gKiBgcmVhc29uYCBpcyB0aGUgb3B0aW9uYWwgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZCB0byBgJGJyZWFrKHJlYXNvbilgLiBJdFxuICogdHJhdmVscyBhbG9uZ3NpZGUgYHNob3VsZEJyZWFrYCBzbyBkb3duc3RyZWFtIGNvZGUgKEZsb3dSZWNvcmRlciBvbkJyZWFrXG4gKiBldmVudHMsIHN1YmZsb3ctcHJvcGFnYXRpb24gdG8gcGFyZW50IHNjb3BlKSBjYW4gc3VyZmFjZSB0aGUgcmVhc29uLlxuICpcbiAqIEFkZGluZyBmaWVsZHMgaGVyZSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIOKAlCBleGlzdGluZyBjYWxsZXJzIG9ubHkgcmVhZFxuICogYHNob3VsZEJyZWFrYCwgYW5kIGByZWFzb25gIGlzIG9wdGlvbmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFrRmxhZyB7XG4gIHNob3VsZEJyZWFrOiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbi8qKiBSZWN1cnNpdmUgbm9kZSBleGVjdXRpb24g4oCUIGF2b2lkcyBjaXJjdWxhciBkZXAgd2l0aCBGbG93Y2hhcnRUcmF2ZXJzZXIuICovXG5leHBvcnQgdHlwZSBFeGVjdXRlTm9kZUZuPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIGJyZWFrRmxhZzogQnJlYWtGbGFnLFxuICBicmFuY2hQYXRoPzogc3RyaW5nLFxuKSA9PiBQcm9taXNlPGFueT47XG5cbi8qKiBSdW4gYSBzdGFnZSBmdW5jdGlvbiB3aXRoIGNvbW1pdC4gKi9cbmV4cG9ydCB0eXBlIFJ1blN0YWdlRm48VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gIHN0YWdlRnVuYzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIGJyZWFrRm46ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8VE91dD47XG4iXX0=
@@ -78,6 +78,11 @@ export class CombinedNarrativeRecorder extends SequenceRecorder {
78
78
  }
79
79
  // ── Flow channel (fires after stage execution) ────────────────────────
80
80
  onStageExecuted(event) {
81
+ // Non-linear kinds get their narrative entries (and ops flush)
82
+ // from `onDecision` / `onFork` / `onSelected` / `onSubflowEntry`.
83
+ // Skip them here so each stage has exactly one narrative entry.
84
+ if (event.stageType !== 'linear')
85
+ return;
81
86
  const stageId = event.traversalContext?.stageId;
82
87
  const runtimeStageId = event.traversalContext?.runtimeStageId;
83
88
  const sfKey = event.traversalContext?.subflowId ?? '';
@@ -110,7 +115,12 @@ export class CombinedNarrativeRecorder extends SequenceRecorder {
110
115
  onDecision(event) {
111
116
  const stageId = event.traversalContext?.stageId;
112
117
  const runtimeStageId = event.traversalContext?.runtimeStageId;
113
- // Emit the decider stage entry (deciders don't fire onStageExecuted)
118
+ // Emit the decider stage entry.
119
+ // Proposal #003 also fires `onStageExecuted(stageType: 'decider')`
120
+ // AFTER this event, but CombinedNarrativeRecorder gates that
121
+ // handler to LINEAR-only so this stays the single emission site
122
+ // for the decider's stage entry + ops flush. Keeps narrative
123
+ // output byte-stable across the v6 transition.
114
124
  const sfKey = event.traversalContext?.subflowId ?? '';
115
125
  const stageNum = this.incrementStageCounter(sfKey);
116
126
  const isFirst = this.consumeFirstStageFlag(sfKey);
@@ -665,4 +675,4 @@ export class CombinedNarrativeRecorder extends SequenceRecorder {
665
675
  return `[Error]: ${text}`;
666
676
  }
667
677
  }
668
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQXNEekUsbUZBQW1GO0FBRW5GOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGdCQUF3QztJQUM1RSxFQUFFLENBQVM7SUFFcEI7Ozs7O09BS0c7SUFDSyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDckQsc0RBQXNEO0lBQzlDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNsRCx5REFBeUQ7SUFDakQsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ3JELDRFQUE0RTtJQUNwRSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUU3QyxrQkFBa0IsQ0FBVTtJQUM1QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFTO0lBQ3ZCLFdBQVcsQ0FBNkM7SUFDeEQsUUFBUSxDQUFxQjtJQUVyQyxZQUFZLE9BQTREO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLG9CQUFvQixDQUFDO1FBQzlDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLGFBQWEsSUFBSSxJ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QyxLQUFLLGtDQUFrQyxLQUFLLEdBQUcsQ0FBQztJQUN0RyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsR0FBeUI7UUFDcEQsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE9BQU8sZUFBZSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUM3RyxDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBc0I7UUFDOUMsT0FBTyxHQUFHLENBQUMsV0FBVztZQUNwQixDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxXQUFXLFNBQVM7WUFDdkQsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsWUFBWSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUM7SUFDeEQsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQXVCO1FBQ2hELE9BQU8sd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQztJQUNsRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBdUI7UUFDaEQsSUFBSSxJQUFJLEdBQUcsd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQ3BFLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLHVCQUF1QixHQUFHLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciDigJQgSW5saW5lIG5hcnJhdGl2ZSBidWlsZGVyIHRoYXQgbWVyZ2VzIGZsb3cgKyBkYXRhIGR1cmluZyB0cmF2ZXJzYWwuXG4gKlxuICogRXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPENvbWJpbmVkTmFycmF0aXZlRW50cnk+IGZvciBkdWFsLWluZGV4ZWQgc3RvcmFnZSAob3JkZXJlZCBzZXF1ZW5jZVxuICogKyBPKDEpIHBlci1zdGVwIGxvb2t1cCBieSBydW50aW1lU3RhZ2VJZCkuIEltcGxlbWVudHMgYENvbWJpbmVkUmVjb3JkZXJgIOKAlCB0aGUgbGlicmFyeSdzXG4gKiBmaXJzdC1jbGFzcyBhYnN0cmFjdGlvbiBmb3Igb2JzZXJ2ZXJzIHRoYXQgc3BhbiBib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93IHN0cmVhbXMuXG4gKlxuICogRXZlbnQgb3JkZXJpbmcgZ3VhcmFudGVlcyB0aGlzIHdvcmtzOlxuICogICAxLiBTY29wZSBldmVudHMgKG9uUmVhZCwgb25Xcml0ZSkgZmlyZSBEVVJJTkcgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDIuIEZsb3cgZXZlbnRzIChvblN0YWdlRXhlY3V0ZWQsIG9uRGVjaXNpb24pIGZpcmUgQUZURVIgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDMuIEJvdGggY2FycnkgdGhlIHNhbWUgYHN0YWdlTmFtZWAg4oCUIG5vIG1hdGNoaW5nIGFtYmlndWl0eVxuICpcbiAqIFNvIHdlIGJ1ZmZlciBzY29wZSBvcHMgcGVyLXN0YWdlLCB0aGVuIHdoZW4gdGhlIGZsb3cgZXZlbnQgYXJyaXZlcyxcbiAqIGVtaXQgdGhlIHN0YWdlIGVudHJ5ICsgZmx1c2ggdGhlIGJ1ZmZlcmVkIG9wcyBpbiBvbmUgcGFzcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuLi8uLi9yZWNvcmRlci9Db21iaW5lZFJlY29yZGVyLmpzJztcbmltcG9ydCB7IGlzRmxvd0V2ZW50IH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRFdmVudCB9IGZyb20gJy4uLy4uL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBTZXF1ZW5jZVJlY29yZGVyIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBzdW1tYXJpemVWYWx1ZSB9IGZyb20gJy4uLy4uL3Njb3BlL3JlY29yZGVycy9zdW1tYXJpemVWYWx1ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFBhdXNlRXZlbnQsIFJlYWRFdmVudCwgUmVzdW1lRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi8uLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEJyZWFrUmVuZGVyQ29udGV4dCxcbiAgQ29tYmluZWROYXJyYXRpdmVFbnRyeSxcbiAgRGVjaXNpb25SZW5kZXJDb250ZXh0LFxuICBFbWl0UmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIE5hcnJhdGl2ZVJlbmRlcmVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dQYXVzZUV2ZW50LFxuICBGbG93UmVzdW1lRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEJ1ZmZlcmVkT3Age1xuICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnIHwgJ2VtaXQnO1xuICAvKiogRm9yIHJlYWQvd3JpdGU6IHNjb3BlIGtleS4gRm9yIGVtaXQ6IHRoZSBldmVudCBuYW1lLiAqL1xuICBrZXk6IHN0cmluZztcbiAgcmF3VmFsdWU6IHVua25vd247XG4gIG9wZXJhdGlvbj86ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJztcbiAgc3RlcE51bWJlcjogbnVtYmVyO1xuICAvKiogT25seSBzZXQgZm9yIHR5cGU9J2VtaXQnIOKAlCBjYXJyaWVzIHRoZSBmdWxsIEVtaXRFdmVudCBmb3IgcmVuZGVyaW5nLiAqL1xuICBlbWl0RXZlbnQ/OiBFbWl0RXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgbWF4VmFsdWVMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBDdXN0b20gdmFsdWUgZm9ybWF0dGVyLiBDYWxsZWQgYXQgcmVuZGVyIHRpbWUgKGZsdXNoT3BzKSwgbm90IGNhcHR1cmUgdGltZS5cbiAgICogIFJlY2VpdmVzIHRoZSByYXcgdmFsdWUgYW5kIG1heFZhbHVlTGVuZ3RoLiBEZWZhdWx0cyB0byBzdW1tYXJpemVWYWx1ZSgpLiAqL1xuICBmb3JtYXRWYWx1ZT86ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpID0+IHN0cmluZztcbiAgLyoqIFBsdWdnYWJsZSByZW5kZXJlciBmb3IgY3VzdG9taXppbmcgbmFycmF0aXZlIG91dHB1dC4gVW5pbXBsZW1lbnRlZCBtZXRob2RzXG4gICAqICBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgRW5nbGlzaCByZW5kZXJlci4gU2VlIE5hcnJhdGl2ZVJlbmRlcmVyIGRvY3MuICovXG4gIHJlbmRlcmVyPzogTmFycmF0aXZlUmVuZGVyZXI7XG59XG5cbi8vIOKUgOKUgCBTY29wZVJlY29yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEltcGxlbWVudHMgYENvbWJpbmVkUmVjb3JkZXJgIOKAlCB0aGUgbGlicmFyeSdzIGZpcnN0LWNsYXNzIGFic3RyYWN0aW9uIGZvclxuICogb2JzZXJ2ZXJzIHRoYXQgc3BhbiBib3RoIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgKSBhbmQgY29udHJvbC1mbG93XG4gKiAoYEZsb3dSZWNvcmRlcmApIHN0cmVhbXMuIE9uZSBgaWRgLCByb3V0ZWQgdG8gYm90aCBjaGFubmVscyB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKC4uLilgIChvciBlcXVpdmFsZW50bHkgdmlhXG4gKiBgZXhlY3V0b3IuZW5hYmxlTmFycmF0aXZlKC4uLilgIHdoaWNoIGF1dG8tY3JlYXRlcyBhbiBpbnN0YW5jZSkuXG4gKlxuICogRm9yIHNoYXJlZC1tZXRob2QtbmFtZSBldmVudHMgKGBvbkVycm9yYCwgYG9uUGF1c2VgLCBgb25SZXN1bWVgKSB0aGVcbiAqIGhhbmRsZXIgYWNjZXB0cyB0aGUgdW5pb24gcGF5bG9hZCB0eXBlOyB3ZSBkaXNjcmltaW5hdGUgdmlhIGBpc0Zsb3dFdmVudGAuXG4gKiBTY29wZSB2YXJpYW50cyBvZiB0aGVzZSBldmVudHMgYXJlIGRlbGliZXJhdGVseSBpZ25vcmVkIGhlcmUg4oCUIHRoZVxuICogbmFycmF0aXZlIG9ubHkgc3VyZmFjZXMgY29udHJvbC1mbG93IGxpZmVjeWNsZSBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGV4dGVuZHMgU2VxdWVuY2VSZWNvcmRlcjxDb21iaW5lZE5hcnJhdGl2ZUVudHJ5PiBpbXBsZW1lbnRzIENvbWJpbmVkUmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZW5kaW5nIHNjb3BlIG9wcyBrZXllZCBieSBydW50aW1lU3RhZ2VJZC4gRmx1c2hlZCBpbiBvblN0YWdlRXhlY3V0ZWQvb25EZWNpc2lvbi5cbiAgICpcbiAgICogS2V5aW5nIGJ5IHJ1bnRpbWVTdGFnZUlkIChub3Qgc3RhZ2VOYW1lKSBlbnN1cmVzIGNvcnJlY3RuZXNzIHdoZW4gcGFyYWxsZWwgZm9ya1xuICAgKiBicmFuY2hlcyBjb250YWluIHN0YWdlcyB3aXRoIHRoZSBzYW1lIG5hbWUg4oCUIGVhY2ggZXhlY3V0aW9uIHN0ZXAgaGFzIGEgdW5pcXVlIElELlxuICAgKi9cbiAgcHJpdmF0ZSBwZW5kaW5nT3BzID0gbmV3IE1hcDxzdHJpbmcsIEJ1ZmZlcmVkT3BbXT4oKTtcbiAgLyoqIFBlci1zdWJmbG93IHN0YWdlIGNvdW50ZXJzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgc3RhZ2VDb3VudGVycyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIC8qKiBQZXItc3ViZmxvdyBmaXJzdC1zdGFnZSBmbGFncy4gS2V5ICcnID0gcm9vdCBmbG93LiAqL1xuICBwcml2YXRlIGZpcnN0U3RhZ2VGbGFncyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAvKiogVmlzaXQgY291bnQgcGVyIHN0YWdlSWQg4oCUIGRldGVjdHMgbG9vcCBpdGVyYXRpb25zIChjb3VudCA+IDEgPSBsb29wKS4gKi9cbiAgcHJpdmF0ZSBzdGFnZVZpc2l0Q291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGluY2x1ZGVTdGVwTnVtYmVyczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpbmNsdWRlVmFsdWVzOiBib29sZWFuO1xuICBwcml2YXRlIG1heFZhbHVlTGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgZm9ybWF0VmFsdWU6ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpID0+IHN0cmluZztcbiAgcHJpdmF0ZSByZW5kZXJlcj86IE5hcnJhdGl2ZVJlbmRlcmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyAmIHsgaWQ/OiBzdHJpbmcgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/ICdjb21iaW5lZC1uYXJyYXRpdmUnO1xuICAgIHRoaXMuaW5jbHVkZVN0ZXBOdW1iZXJzID0gb3B0aW9ucz8uaW5jbHVkZVN0ZXBOdW1iZXJzID8/IHRydWU7XG4gICAgdGhpcy5pbmNsdWRlVmFsdWVzID0gb3B0aW9ucz8uaW5jbHVkZVZhbHVlcyA/PyB0cnVlO1xuICAgIHRoaXMubWF4VmFsdWVMZW5ndGggPSBvcHRpb25zPy5tYXhWYWx1ZUxlbmd0aCA/PyA4MDtcbiAgICB0aGlzLmZvcm1hdFZhbHVlID0gb3B0aW9ucz8uZm9ybWF0VmFsdWUgPz8gc3VtbWFyaXplVmFsdWU7XG4gICAgdGhpcy5yZW5kZXJlciA9IG9wdGlvbnM/LnJlbmRlcmVyO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNjb3BlIGNoYW5uZWwgKGZpcmVzIGZpcnN0LCBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmICghZXZlbnQua2V5KSByZXR1cm47XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5ydW50aW1lU3RhZ2VJZCwge1xuICAgICAgdHlwZTogJ3JlYWQnLFxuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICByYXdWYWx1ZTogZXZlbnQudmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5ydW50aW1lU3RhZ2VJZCwge1xuICAgICAgdHlwZTogJ3dyaXRlJyxcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgcmF3VmFsdWU6IGV2ZW50LnZhbHVlLFxuICAgICAgb3BlcmF0aW9uOiBldmVudC5vcGVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgRmxvdyBjaGFubmVsIChmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG5cbiAgICAvLyBUcmFjayB2aXNpdCBjb3VudCBwZXIgc3RhZ2VJZCB0byBkZXRlY3QgbG9vcCBpdGVyYXRpb25zXG4gICAgY29uc3QgdmlzaXRLZXkgPSBzdGFnZUlkID8/IGV2ZW50LnN0YWdlTmFtZTtcbiAgICBjb25zdCB2aXNpdENvdW50ID0gKHRoaXMuc3RhZ2VWaXNpdENvdW50cy5nZXQodmlzaXRLZXkpID8/IDApICsgMTtcbiAgICB0aGlzLnN0YWdlVmlzaXRDb3VudHMuc2V0KHZpc2l0S2V5LCB2aXNpdENvdW50KTtcblxuICAgIGNvbnN0IGN0eDogU3RhZ2VSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZU51bWJlcjogc3RhZ2VOdW0sXG4gICAgICBpc0ZpcnN0LFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgbG9vcEl0ZXJhdGlvbjogdmlzaXRDb3VudCA+IDEgPyB2aXNpdENvdW50IC0gMSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTdGFnZT8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU3RhZ2UoY3R4KTtcblxuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKHJ1bnRpbWVTdGFnZUlkLCBzZklkLCBzdGFnZUlkLCBldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuXG4gICAgLy8gRW1pdCB0aGUgZGVjaWRlciBzdGFnZSBlbnRyeSAoZGVjaWRlcnMgZG9uJ3QgZmlyZSBvblN0YWdlRXhlY3V0ZWQpXG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgPz8gJyc7XG4gICAgY29uc3Qgc3RhZ2VOdW0gPSB0aGlzLmluY3JlbWVudFN0YWdlQ291bnRlcihzZktleSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHNmS2V5KTtcblxuICAgIGNvbnN0IHN0YWdlQ3R4OiBTdGFnZVJlbmRlckNvbnRleHQgPSB7XG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZU51bWJlcjogc3RhZ2VOdW0sXG4gICAgICBpc0ZpcnN0LFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgIH07XG4gICAgY29uc3Qgc3RhZ2VUZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyU3RhZ2U/LihzdGFnZUN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU3RhZ2Uoc3RhZ2VDdHgpO1xuXG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICB0ZXh0OiBzdGFnZVRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuZGVjaWRlcixcbiAgICAgIHN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMocnVudGltZVN0YWdlSWQsIGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCwgc3RhZ2VJZCwgZXZlbnQuZGVjaWRlcik7XG5cbiAgICAvLyBFbWl0IHRoZSBjb25kaXRpb24gZW50cnkgYXMgYSBuZXN0ZWQgc3ViLWl0ZW0gKGRlcHRoIDEpIG9mIHRoZSBzdGFnZSBhYm92ZS5cbiAgICBjb25zdCBkZWNpc2lvbkN0eDogRGVjaXNpb25SZW5kZXJDb250ZXh0ID0ge1xuICAgICAgZGVjaWRlcjogZXZlbnQuZGVjaWRlcixcbiAgICAgIGNob3NlbjogZXZlbnQuY2hvc2VuLFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgcmF0aW9uYWxlOiBldmVudC5yYXRpb25hbGUsXG4gICAgICBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UsXG4gICAgfTtcbiAgICBjb25zdCBjb25kaXRpb25UZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyRGVjaXNpb24/LihkZWNpc2lvbkN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyRGVjaXNpb24oZGVjaXNpb25DdHgpO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnY29uZGl0aW9uJyxcbiAgICAgIHRleHQ6IGNvbmRpdGlvblRleHQsXG4gICAgICBkZXB0aDogMSxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuZGVjaWRlcixcbiAgICAgIHN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25OZXh0KCk6IHZvaWQge1xuICAgIC8vIE5vLW9wLiBvblN0YWdlRXhlY3V0ZWQgYWxyZWFkeSBoYXMgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgbmV4dCBzdGFnZS5cbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eDogRm9ya1JlbmRlckNvbnRleHQgPSB7IGNoaWxkcmVuOiBldmVudC5jaGlsZHJlbiB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJGb3JrPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJGb3JrKGN0eCk7XG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdmb3JrJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4OiBTZWxlY3RlZFJlbmRlckNvbnRleHQgPSB7XG4gICAgICBzZWxlY3RlZDogZXZlbnQuc2VsZWN0ZWQsXG4gICAgICB0b3RhbDogZXZlbnQudG90YWwsXG4gICAgICBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UsXG4gICAgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyU2VsZWN0ZWQ/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlclNlbGVjdGVkKGN0eCk7XG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdzZWxlY3RvcicsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQuc3ViZmxvd0lkID8/ICcnO1xuICAgIHRoaXMuc3RhZ2VDb3VudGVycy5kZWxldGUoc2ZLZXkpO1xuICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLmRlbGV0ZShzZktleSk7XG5cbiAgICBjb25zdCBjdHg6IFN1YmZsb3dSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgIGRpcmVjdGlvbjogJ2VudHJ5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICAgIG1hcHBlZElucHV0OiBldmVudC5tYXBwZWRJbnB1dCxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTdWJmbG93Py4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTdWJmbG93KGN0eCk7XG4gICAgY29uc3QgcmlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQ7XG4gICAgY29uc3Qgc2lkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZDtcbiAgICBjb25zdCBzZklkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnc3ViZmxvdycsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBzdGFnZUlkOiBzaWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogcmlkLFxuICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgICAgZGlyZWN0aW9uOiAnZW50cnknLFxuICAgIH0pO1xuICAgIC8vIEVtaXQgcGVyLWtleSBzdGVwIGVudHJpZXMgZm9yIG1hcHBlZCBpbnB1dHMuXG4gICAgLy9cbiAgICAvLyBSb3V0ZSBFQUNIIGtleSB0aHJvdWdoIHRoZSBjb25zdW1lcidzIGByZW5kZXJlci5yZW5kZXJPcGAgaG9vayBiZWZvcmVcbiAgICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGhhcmRjb2RlZCBgSW5wdXQ6ICR7a2V5fSA9ICR7dmFsdWVTdW1tYXJ5fWBcbiAgICAvLyB0ZW1wbGF0ZS4gV2l0aG91dCB0aGlzIHJvdXRpbmcsIGEgY29uc3VtZXIgdGhhdCBwcm92aWRlZCBhXG4gICAgLy8gZG9tYWluLWF3YXJlIGByZW5kZXJlci5yZW5kZXJPcGAgKHRvIHJlbmRlciBlLmcuIGBwYXJzZWRSZXNwb25zZWBcbiAgICAvLyBvYmplY3RzIHNlbWFudGljYWxseSkgd291bGQgc2VlIGJlYXV0aWZ1bCBvdXRwdXQgZm9yIHNjb3BlIHdyaXRlc1xuICAgIC8vIGJ1dCBnZXQgdGhlIGdlbmVyaWMga2V5LWxpc3QgZmFsbGJhY2sgZm9yIHN1YmZsb3cgaW5wdXRzIOKAlCB0aGVcbiAgICAvLyBsaWJyYXJ5J3MgXCJjb21iaW5lZCBuYXJyYXRpdmVcIiBwcm9taXNlIChvbmUgcmVuZGVyZXIgY29udHJvbHMgdGhlXG4gICAgLy8gd2hvbGUgbmFycmF0aXZlKSB3b3VsZCBzaWxlbnRseSBicmVhay4gV2UgaG9ub3VyIGl0IGhlcmUuXG4gICAgLy9cbiAgICAvLyBUaGUgT3BSZW5kZXJDb250ZXh0IGlzIGJ1aWx0IHdpdGggYHR5cGU6ICd3cml0ZSdgIGJlY2F1c2Ugc2VtYW50aWNhbGx5XG4gICAgLy8gdGhlIHN1YmZsb3cncyBpbml0aWFsIHNjb3BlIElTIGJlaW5nIHdyaXR0ZW4gdmlhIHRoZSBwYXJlbnQnc1xuICAgIC8vIGlucHV0TWFwcGVyLiBgb3BlcmF0aW9uOiAnc2V0J2AgbGlrZXdpc2Ug4oCUIHRoaXMgaXMgdGhlIHN1YmZsb3cnc1xuICAgIC8vIGZpcnN0IHNpZ2h0IG9mIHRoZSBrZXkuXG4gICAgLy9cbiAgICAvLyBWYWx1ZXMgc2hvd24gd2hlbiBpbmNsdWRlVmFsdWVzPXRydWUg4oCUIGNvbnN1bWVyIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIHJlZGFjdGlvbiBwb2xpY3kgb24gdGhlIHBhcmVudCBzY29wZSAocmVkYWN0ZWQga2V5cyBwcm9kdWNlXG4gICAgLy8gJ1tSRURBQ1RFRF0nIHZpYSBTY29wZUZhY2FkZSkuXG4gICAgaWYgKGV2ZW50Lm1hcHBlZElucHV0ICYmIE9iamVjdC5rZXlzKGV2ZW50Lm1hcHBlZElucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgc3RlcE51bWJlciA9IDA7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudC5tYXBwZWRJbnB1dCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVTdW1tYXJ5ID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSwgdGhpcy5tYXhWYWx1ZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IG9wQ3R4OiBPcFJlbmRlckNvbnRleHQgPSB7XG4gICAgICAgICAgdHlwZTogJ3dyaXRlJyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcmF3VmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlU3VtbWFyeSxcbiAgICAgICAgICBvcGVyYXRpb246ICdzZXQnLFxuICAgICAgICAgIHN0ZXBOdW1iZXI6ICsrc3RlcE51bWJlcixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiB0aGUgY29uc3VtZXIgc3VwcGxpZWQgYHJlbmRlcmVyLnJlbmRlck9wYCwgdXNlIGl0cyByZXR1cm4gdmFsdWU6XG4gICAgICAgIC8vICAgLSBzdHJpbmcg4oaSIHVzZSBhcyB0aGUgbmFycmF0aXZlIGxpbmVcbiAgICAgICAgLy8gICAtIG51bGwgICDihpIgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGUgdGhpcyBlbnRyeSAoc2FtZSBzZW1hbnRpY3MgYXNcbiAgICAgICAgLy8gICAgICAgICAgICAgIGBmbHVzaE9wc2AgYWJvdmUgYXQgbGluZSB+NTQwKVxuICAgICAgICAvLyAgIC0gdW5kZWZpbmVkIOKGkiByZW5kZXJlciBkb2VzIG5vdCBoYW5kbGUgdGhpcyBvcCDihpIgZmFsbCB0aHJvdWdoXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB0byB0aGUgaGFyZGNvZGVkIHRlbXBsYXRlXG4gICAgICAgIC8vIElmIG5vIHJlbmRlcmVyIGF0IGFsbCwgdXNlIHRoZSBoYXJkY29kZWQgdGVtcGxhdGUuXG4gICAgICAgIGxldCB0ZXh0OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJlcj8ucmVuZGVyT3ApIHtcbiAgICAgICAgICBjb25zdCBjdXN0b21UZXh0ID0gdGhpcy5yZW5kZXJlci5yZW5kZXJPcChvcEN0eCk7XG4gICAgICAgICAgaWYgKGN1c3RvbVRleHQgPT09IG51bGwpIGNvbnRpbnVlOyAvLyBleGNsdWRlZCBvbiBwdXJwb3NlXG4gICAgICAgICAgdGV4dCA9XG4gICAgICAgICAgICBjdXN0b21UZXh0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBjdXN0b21UZXh0XG4gICAgICAgICAgICAgIDogdGhpcy5pbmNsdWRlVmFsdWVzXG4gICAgICAgICAgICAgID8gYElucHV0OiAke2tleX0gPSAke3ZhbHVlU3VtbWFyeX1gXG4gICAgICAgICAgICAgIDogYElucHV0OiAke2tleX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSB0aGlzLmluY2x1ZGVWYWx1ZXMgPyBgSW5wdXQ6ICR7a2V5fSA9ICR7dmFsdWVTdW1tYXJ5fWAgOiBgSW5wdXQ6ICR7a2V5fWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXQoe1xuICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICB0ZXh0LFxuICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgIHN0YWdlTmFtZTogZXZlbnQubmFtZSxcbiAgICAgICAgICBzdGFnZUlkOiBzaWQsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQ6IHJpZCxcbiAgICAgICAgICBzdWJmbG93SWQ6IHNmSWQsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHJhd1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHNpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICAvLyBOT1RFOiBvdXRwdXQgc3RhdGUgaXMgTk9UIGVtaXR0ZWQgYXMgc3RlcCBlbnRyaWVzIGJlY2F1c2UgaXQgbWF5IGNvbnRhaW5cbiAgICAvLyB1bnJlZGFjdGVkIHZhbHVlcyBmcm9tIHRoZSBzdWJmbG93J3MgaW50ZXJuYWwgc2NvcGUuIFRoZSBzdWJmbG93IGV4aXRcbiAgICAvLyBoZWFkZXIgaXMgc3VmZmljaWVudCDigJQgZHJpbGwgaW50byB0aGUgc3ViZmxvdyBmb3IgZGV0YWlscy5cbiAgICBjb25zdCBjdHg6IFN1YmZsb3dSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgIGRpcmVjdGlvbjogJ2V4aXQnLFxuICAgICAgb3V0cHV0U3RhdGU6IGV2ZW50Lm91dHB1dFN0YXRlLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclN1YmZsb3c/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlclN1YmZsb3coY3R4KTtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ3N1YmZsb3cnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5uYW1lLFxuICAgICAgc3RhZ2VJZDogc2lkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHJpZCxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICAgIGRpcmVjdGlvbjogJ2V4aXQnLFxuICAgIH0pO1xuICB9XG5cbiAgb25Mb29wKGV2ZW50OiBGbG93TG9vcEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4OiBMb29wUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0LFxuICAgICAgaXRlcmF0aW9uOiBldmVudC5pdGVyYXRpb24sXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyTG9vcD8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyTG9vcChjdHgpO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnbG9vcCcsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eDogQnJlYWtSZW5kZXJDb250ZXh0ID0geyBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJCcmVhaz8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyQnJlYWsoY3R4KTtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ2JyZWFrJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25QYXVzZShldmVudDogUGF1c2VFdmVudCB8IEZsb3dQYXVzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gQm90aCBjaGFubmVscyBmaXJlIG9uUGF1c2Ugd2l0aCBkaWZmZXJlbnQgcGF5bG9hZCBzaGFwZXMuIE5hcnJhdGl2ZSBvbmx5XG4gICAgLy8gc3VyZmFjZXMgdGhlIGNvbnRyb2wtZmxvdyB2YXJpYW50ICh3aGljaCBoYXMgc3RhZ2VOYW1lL3N0YWdlSWQpLiBEYXRhXG4gICAgLy8gY2hhbm5lbCdzIFBhdXNlRXZlbnQgaXMgaWdub3JlZCB0byBhdm9pZCBkdXBsaWNhdGUgZW50cmllcy5cbiAgICBpZiAoIWlzRmxvd0V2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgIGlmICghZXZlbnQuc3RhZ2VOYW1lIHx8ICFldmVudC5zdGFnZUlkKSByZXR1cm47XG4gICAgY29uc3QgdGV4dCA9IGBFeGVjdXRpb24gcGF1c2VkIGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfS5gO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAncGF1c2UnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkID8/IGV2ZW50LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uUmVzdW1lKGV2ZW50OiBSZXN1bWVFdmVudCB8IEZsb3dSZXN1bWVFdmVudCk6IHZvaWQge1xuICAgIC8vIFNhbWUgaXNGbG93RXZlbnQgZGlzY3JpbWluYW50IGFzIG9uUGF1c2Ug4oCUIGlnbm9yZSBzY29wZSBSZXN1bWVFdmVudC5cbiAgICBpZiAoIWlzRmxvd0V2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgIGlmICghZXZlbnQuc3RhZ2VOYW1lIHx8ICFldmVudC5zdGFnZUlkKSByZXR1cm47XG4gICAgY29uc3Qgc3VmZml4ID0gZXZlbnQuaGFzSW5wdXQgPyAnIHdpdGggaW5wdXQuJyA6ICcuJztcbiAgICBjb25zdCB0ZXh0ID0gYEV4ZWN1dGlvbiByZXN1bWVkIGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfSR7c3VmZml4fWA7XG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdyZXN1bWUnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkID8/IGV2ZW50LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXJyb3IoZXZlbnQ6IEVycm9yRXZlbnQgfCBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIC8vIE5hcnJhdGl2ZSBvbmx5IHN1cmZhY2VzIHRoZSBjb250cm9sLWZsb3cgdmFyaWFudCBvZiBlcnJvcnMgKGhhc1xuICAgIC8vIHN0YWdlTmFtZSArIG1lc3NhZ2UpLiBTY29wZS1sZXZlbCBFcnJvckV2ZW50IGlzIGNhcHR1cmVkIGVsc2V3aGVyZS5cbiAgICBpZiAoIWlzRmxvd0V2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgZXZlbnQubWVzc2FnZSAhPT0gJ3N0cmluZycpIHJldHVybjtcblxuICAgIGxldCB2YWxpZGF0aW9uSXNzdWVzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGV2ZW50LnN0cnVjdHVyZWRFcnJvcj8uaXNzdWVzPy5sZW5ndGgpIHtcbiAgICAgIHZhbGlkYXRpb25Jc3N1ZXMgPSBldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGlzc3VlLnBhdGguam9pbignLicpIDogJyhyb290KSc7XG4gICAgICAgICAgcmV0dXJuIGAke3BhdGh9OiAke2lzc3VlLm1lc3NhZ2V9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsgJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4OiBFcnJvclJlbmRlckNvbnRleHQgPSB7XG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIG1lc3NhZ2U6IGV2ZW50Lm1lc3NhZ2UsXG4gICAgICB2YWxpZGF0aW9uSXNzdWVzLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckVycm9yPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJFcnJvcihjdHgpO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgRW1pdCBjaGFubmVsIChQaGFzZSAzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVjZWl2ZSBhIGNvbnN1bWVyLWVtaXR0ZWQgZXZlbnQgZnJvbSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgLlxuICAgKlxuICAgKiBCdWZmZXJlZCBhbG9uZ3NpZGUgYG9uUmVhZGAvYG9uV3JpdGVgIHBlci1zdGFnZSBzbyB0aGF0IHRoZSBmaW5hbFxuICAgKiBuYXJyYXRpdmUgcHJlc2VydmVzIG9yZGVyaW5nOlxuICAgKlxuICAgKiAgIDEuIHN0YWdlIGhlYWRlciAoZW1pdHRlZCBieSBgb25TdGFnZUV4ZWN1dGVkYCAvIGBvbkRlY2lzaW9uYClcbiAgICogICAyLiBidWZmZXJlZCBvcHMgZm9yIHRoYXQgc3RhZ2Ug4oCUIGluIGNhbGwgb3JkZXIg4oCUIGZsdXNoZWQgcmlnaHQgYWZ0ZXJcbiAgICpcbiAgICogV2l0aG91dCBidWZmZXJpbmcsIGVtaXQgZXZlbnRzIHdvdWxkIGZpcmUgQkVGT1JFIHRoZSBzdGFnZSBoZWFkZXJcbiAgICogKHdoaWNoIG9ubHkgbGFuZHMgYXQgYG9uU3RhZ2VFeGVjdXRlZGApLCBwcm9kdWNpbmcgb3V0LW9mLW9yZGVyXG4gICAqIG5hcnJhdGl2ZSBlbnRyaWVzLiBGbHVzaCBoYXBwZW5zIGluIGBmbHVzaE9wc2Agd2hpY2ggcm91dGVzIGBlbWl0YC1cbiAgICogdHlwZWQgYnVmZmVyZWQgb3BzIHRocm91Z2ggYHJlbmRlckVtaXRgIGluc3RlYWQgb2YgYHJlbmRlck9wYC5cbiAgICovXG4gIG9uRW1pdChldmVudDogRW1pdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5ydW50aW1lU3RhZ2VJZCwge1xuICAgICAgdHlwZTogJ2VtaXQnLFxuICAgICAga2V5OiBldmVudC5uYW1lLFxuICAgICAgcmF3VmFsdWU6IGV2ZW50LnBheWxvYWQsXG4gICAgICBlbWl0RXZlbnQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRW1pdChjdHg6IEVtaXRSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFtlbWl0XSAke2N0eC5uYW1lfTogJHtjdHgucGF5bG9hZFN1bW1hcnl9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBPdXRwdXQgKG5hcnJhdGl2ZS1zcGVjaWZpYykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJldHVybnMgZW50cmllcyBncm91cGVkIGJ5IHN1YmZsb3dJZCBmb3Igc3RydWN0dXJlZCBhY2Nlc3MuXG4gICAqIFJvb3QtbGV2ZWwgZW50cmllcyBoYXZlIHN1YmZsb3dJZCA9IHVuZGVmaW5lZC5cbiAgICovXG4gIGdldEVudHJpZXNCeVN1YmZsb3coKTogUmVjb3JkPHN0cmluZywgQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5W10+ID0geyAnJzogW10gfTtcbiAgICB0aGlzLmZvckVhY2hFbnRyeSgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGVudHJ5LnN1YmZsb3dJZCA/PyAnJztcbiAgICAgIGlmICghcmVzdWx0W2tleV0pIHJlc3VsdFtrZXldID0gW107XG4gICAgICByZXN1bHRba2V5XS5wdXNoKGVudHJ5KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIENsZWFycyBhbGwgc3RhdGUuIENhbGxlZCBhdXRvbWF0aWNhbGx5IGJlZm9yZSBlYWNoIHJ1bi4gKi9cbiAgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgc3VwZXIuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdPcHMuY2xlYXIoKTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5jbGVhcigpO1xuICAgIHRoaXMuc3RhZ2VWaXNpdENvdW50cy5jbGVhcigpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGluY3JlbWVudFN0YWdlQ291bnRlcihzdWJmbG93S2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnN0YWdlQ291bnRlcnMuZ2V0KHN1YmZsb3dLZXkpID8/IDA7XG4gICAgY29uc3QgbmV4dCA9IGN1cnJlbnQgKyAxO1xuICAgIHRoaXMuc3RhZ2VDb3VudGVycy5zZXQoc3ViZmxvd0tleSwgbmV4dCk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzdWJmbG93S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZmlyc3RTdGFnZUZsYWdzLmhhcyhzdWJmbG93S2V5KSkge1xuICAgICAgdGhpcy5maXJzdFN0YWdlRmxhZ3Muc2V0KHN1YmZsb3dLZXksIGZhbHNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGJ1ZmZlck9wKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIG9wOiBPbWl0PEJ1ZmZlcmVkT3AsICdzdGVwTnVtYmVyJz4pOiB2b2lkIHtcbiAgICBsZXQgb3BzID0gdGhpcy5wZW5kaW5nT3BzLmdldChydW50aW1lU3RhZ2VJZCk7XG4gICAgaWYgKCFvcHMpIHtcbiAgICAgIG9wcyA9IFtdO1xuICAgICAgdGhpcy5wZW5kaW5nT3BzLnNldChydW50aW1lU3RhZ2VJZCwgb3BzKTtcbiAgICB9XG4gICAgb3BzLnB1c2goeyAuLi5vcCwgc3RlcE51bWJlcjogb3BzLmxlbmd0aCArIDEgfSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoT3BzKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN1YmZsb3dJZD86IHN0cmluZywgc3RhZ2VJZD86IHN0cmluZywgc3RhZ2VOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHJ1bnRpbWVTdGFnZUlkID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCBvcHMgPSB0aGlzLnBlbmRpbmdPcHMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICBpZiAoIW9wcyB8fCBvcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xuICAgICAgLy8g4pSA4pSAIEVtaXQgZXZlbnRzIHRha2UgYSBkaWZmZXJlbnQgcmVuZGVyIHBhdGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICAvL1xuICAgICAgLy8gRW1pdCBldmVudHMgYXJlIGJ1ZmZlcmVkIGFsb25nc2lkZSByZWFkcy93cml0ZXMgKHNvIHRoZXkgYXBwZWFyXG4gICAgICAvLyB1bmRlciB0aGVpciBvd25pbmcgc3RhZ2UncyBoZWFkZXIgaW4gbmFycmF0aXZlIG9yZGVyLCBub3QgaW5saW5lXG4gICAgICAvLyBhdCBjYWxsIHRpbWUpLiBBdCBmbHVzaCwgdGhleSByb3V0ZSB0aHJvdWdoIGByZW5kZXJFbWl0YCBpbnN0ZWFkXG4gICAgICAvLyBvZiBgcmVuZGVyT3BgIOKAlCBjb25zdW1lcnMgd2FudGluZyBjdXN0b20gZW1pdCByZW5kZXJpbmcgaW1wbGVtZW50XG4gICAgICAvLyB0aGUgZGVkaWNhdGVkIGhvb2suIFVuaGFuZGxlZCAvIG1pc3NpbmcgcmVuZGVyZXIgZmFsbHMgYmFjayB0b1xuICAgICAgLy8gdGhlIHNhbWUgY29tcGFjdCBgW2VtaXRdIG5hbWU6IHBheWxvYWRTdW1tYXJ5YCBkZWZhdWx0IHVzZWQgYnlcbiAgICAgIC8vIHRoZSBwcmUtYnVmZmVyaW5nIG9uRW1pdCBwYXRoLlxuICAgICAgaWYgKG9wLnR5cGUgPT09ICdlbWl0JyAmJiBvcC5lbWl0RXZlbnQpIHtcbiAgICAgICAgY29uc3QgZSA9IG9wLmVtaXRFdmVudDtcbiAgICAgICAgY29uc3QgcGF5bG9hZFN1bW1hcnkgPSB0aGlzLmZvcm1hdFZhbHVlKGUucGF5bG9hZCwgdGhpcy5tYXhWYWx1ZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGVtaXRDdHg6IEVtaXRSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgICAgIG5hbWU6IGUubmFtZSxcbiAgICAgICAgICBwYXlsb2FkOiBlLnBheWxvYWQsXG4gICAgICAgICAgc3RhZ2VOYW1lOiBlLnN0YWdlTmFtZSxcbiAgICAgICAgICBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgICBzdWJmbG93UGF0aDogZS5zdWJmbG93UGF0aCxcbiAgICAgICAgICBwaXBlbGluZUlkOiBlLnBpcGVsaW5lSWQsXG4gICAgICAgICAgdGltZXN0YW1wOiBlLnRpbWVzdGFtcCxcbiAgICAgICAgICBwYXlsb2FkU3VtbWFyeSxcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGVtaXRUZXh0OiBzdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLnJlbmRlcmVyPy5yZW5kZXJFbWl0KSB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tID0gdGhpcy5yZW5kZXJlci5yZW5kZXJFbWl0KGVtaXRDdHgpO1xuICAgICAgICAgIGlmIChjdXN0b20gPT09IG51bGwpIGNvbnRpbnVlOyAvLyBkZWxpYmVyYXRlbHkgZXhjbHVkZWRcbiAgICAgICAgICBlbWl0VGV4dCA9IGN1c3RvbSAhPT0gdW5kZWZpbmVkID8gY3VzdG9tIDogdGhpcy5kZWZhdWx0UmVuZGVyRW1pdChlbWl0Q3R4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbWl0VGV4dCA9IHRoaXMuZGVmYXVsdFJlbmRlckVtaXQoZW1pdEN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KHtcbiAgICAgICAgICB0eXBlOiAnZW1pdCcsXG4gICAgICAgICAgdGV4dDogZW1pdFRleHQsXG4gICAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICAgIHN0YWdlSWQsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCBvcC50eXBlIGlzIG5hcnJvd2VkIHRvICdyZWFkJyB8ICd3cml0ZScgKGVtaXQgYnJhbmNoXG4gICAgICAvLyBhYm92ZSB1c2VzIGBjb250aW51ZWApLiBUeXBlU2NyaXB0IGNhbid0IGZvbGxvdyB0aGF0IG5hcnJvd2luZ1xuICAgICAgLy8gdGhyb3VnaCB0aGUgY29udGludWUsIHNvIHdlIGFzc2VydCBhdCByZW5kZXIgdGltZS5cbiAgICAgIGNvbnN0IG9wVHlwZSA9IG9wLnR5cGUgYXMgJ3JlYWQnIHwgJ3dyaXRlJztcbiAgICAgIGNvbnN0IHZhbHVlU3VtbWFyeSA9IHRoaXMuZm9ybWF0VmFsdWUob3AucmF3VmFsdWUsIHRoaXMubWF4VmFsdWVMZW5ndGgpO1xuICAgICAgY29uc3Qgb3BDdHg6IE9wUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgdHlwZTogb3BUeXBlLFxuICAgICAgICBrZXk6IG9wLmtleSxcbiAgICAgICAgcmF3VmFsdWU6IG9wLnJhd1ZhbHVlLFxuICAgICAgICB2YWx1ZVN1bW1hcnksXG4gICAgICAgIG9wZXJhdGlvbjogb3Aub3BlcmF0aW9uLFxuICAgICAgICBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlck9wID8gdGhpcy5yZW5kZXJlci5yZW5kZXJPcChvcEN0eCkgOiB0aGlzLmRlZmF1bHRSZW5kZXJPcChvcEN0eCk7XG5cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICB0aGlzLmVtaXQoe1xuICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgIHRleHQsXG4gICAgICAgIGRlcHRoOiAxLFxuICAgICAgICBzdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBzdGVwTnVtYmVyOiBvcC5zdGVwTnVtYmVyLFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIGtleTogb3Aua2V5LFxuICAgICAgICByYXdWYWx1ZTogb3AucmF3VmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdPcHMuZGVsZXRlKHJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBEZWZhdWx0IHJlbmRlcmVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJTdGFnZShjdHg6IFN0YWdlUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgbGV0IGlubmVyOiBzdHJpbmc7XG4gICAgaWYgKGN0eC5pc0ZpcnN0KSB7XG4gICAgICBpbm5lciA9IGN0eC5kZXNjcmlwdGlvbiA/IGBUaGUgcHJvY2VzcyBiZWdhbjogJHtjdHguZGVzY3JpcHRpb259LmAgOiBgVGhlIHByb2Nlc3MgYmVnYW4gd2l0aCAke2N0eC5zdGFnZU5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChjdHgubG9vcEl0ZXJhdGlvbiAmJiBjdHgubG9vcEl0ZXJhdGlvbiA+IDApIHtcbiAgICAgIGlubmVyID0gY3R4LmRlc2NyaXB0aW9uXG4gICAgICAgID8gYExvb3BlZCBiYWNrOiAke2N0eC5kZXNjcmlwdGlvbn0gKHBhc3MgJHtjdHgubG9vcEl0ZXJhdGlvbn0pLmBcbiAgICAgICAgOiBgTG9vcGVkIGJhY2sgdG8gJHtjdHguc3RhZ2VOYW1lfSAocGFzcyAke2N0eC5sb29wSXRlcmF0aW9ufSkuYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5uZXIgPSBjdHguZGVzY3JpcHRpb24gPyBgTmV4dCBzdGVwOiAke2N0eC5kZXNjcmlwdGlvbn0uYCA6IGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2N0eC5zdGFnZU5hbWV9LmA7XG4gICAgfVxuICAgIHJldHVybiBgU3RhZ2UgJHtjdHguc3RhZ2VOdW1iZXJ9OiAke2lubmVyfWA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJPcChjdHg6IE9wUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RlcFByZWZpeCA9IHRoaXMuaW5jbHVkZVN0ZXBOdW1iZXJzID8gYFN0ZXAgJHtjdHguc3RlcE51bWJlcn06IGAgOiAnJztcbiAgICBpZiAoY3R4LnR5cGUgPT09ICdyZWFkJykge1xuICAgICAgcmV0dXJuIHRoaXMuaW5jbHVkZVZhbHVlcyAmJiBjdHgudmFsdWVTdW1tYXJ5XG4gICAgICAgID8gYCR7c3RlcFByZWZpeH1SZWFkICR7Y3R4LmtleX0gPSAke2N0eC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICA6IGAke3N0ZXBQcmVmaXh9UmVhZCAke2N0eC5rZXl9YDtcbiAgICB9XG4gICAgaWYgKGN0eC5vcGVyYXRpb24gPT09ICdkZWxldGUnKSB7XG4gICAgICByZXR1cm4gYCR7c3RlcFByZWZpeH1EZWxldGUgJHtjdHgua2V5fWA7XG4gICAgfVxuICAgIGlmIChjdHgub3BlcmF0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgcmV0dXJuIHRoaXMuaW5jbHVkZVZhbHVlc1xuICAgICAgICA/IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7Y3R4LmtleX0gPSAke2N0eC52YWx1ZVN1bW1hcnl9YFxuICAgICAgICA6IGAke3N0ZXBQcmVmaXh9VXBkYXRlICR7Y3R4LmtleX1gO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbmNsdWRlVmFsdWVzID8gYCR7c3RlcFByZWZpeH1Xcml0ZSAke2N0eC5rZXl9ID0gJHtjdHgudmFsdWVTdW1tYXJ5fWAgOiBgJHtzdGVwUHJlZml4fVdyaXRlICR7Y3R4LmtleX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRGVjaXNpb24oY3R4OiBEZWNpc2lvblJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJyYW5jaE5hbWUgPSBjdHguY2hvc2VuO1xuICAgIGxldCBjb25kaXRpb25UZXh0OiBzdHJpbmc7XG4gICAgaWYgKGN0eC5ldmlkZW5jZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IGV2aWRlbmNlID0gY3R4LmV2aWRlbmNlIGFzIGFueTtcbiAgICAgIGNvbnN0IG1hdGNoZWRSdWxlID0gZXZpZGVuY2UucnVsZXM/LmZpbmQoKHI6IGFueSkgPT4gci5tYXRjaGVkKTtcbiAgICAgIGlmIChtYXRjaGVkUnVsZSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IG1hdGNoZWRSdWxlLmxhYmVsID8gYCBcIiR7bWF0Y2hlZFJ1bGUubGFiZWx9XCJgIDogJyc7XG4gICAgICAgIGlmIChtYXRjaGVkUnVsZS50eXBlID09PSAnZmlsdGVyJykge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hlZFJ1bGUuY29uZGl0aW9ucy5tYXAoXG4gICAgICAgICAgICAoYzogYW55KSA9PlxuICAgICAgICAgICAgICBgJHtjLmtleX0gJHtjLmFjdHVhbFN1bW1hcnl9ICR7Yy5vcH0gJHtKU09OLnN0cmluZ2lmeShjLnRocmVzaG9sZCl9ICR7Yy5yZXN1bHQgPyAnXFx1MjcxMycgOiAnXFx1MjcxNyd9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbmRpdGlvblRleHQgPSBgSXQgZXZhbHVhdGVkIFJ1bGUgJHttYXRjaGVkUnVsZS5ydWxlSW5kZXh9JHtsYWJlbH06ICR7cGFydHMuam9pbihcbiAgICAgICAgICAgICcsICcsXG4gICAgICAgICAgKX0sIGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBtYXRjaGVkUnVsZS5pbnB1dHMubWFwKChpOiBhbnkpID0+IGAke2kua2V5fT0ke2kudmFsdWVTdW1tYXJ5fWApO1xuICAgICAgICAgIGNvbmRpdGlvblRleHQgPSBgSXQgZXhhbWluZWQke2xhYmVsfTogJHtwYXJ0cy5qb2luKCcsICcpfSwgYW5kIGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3JlZENvdW50ID0gZXZpZGVuY2UucnVsZXM/LmZpbHRlcigocjogYW55KSA9PiByLm1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCkubGVuZ3RoID8/IDA7XG4gICAgICAgIGNvbnN0IGVycm9yTm90ZSA9IGVycm9yZWRDb3VudCA+IDAgPyBgICgke2Vycm9yZWRDb3VudH0gcnVsZSR7ZXJyb3JlZENvdW50ID4gMSA/ICdzJyA6ICcnfSB0aHJldyBlcnJvcnMpYCA6ICcnO1xuICAgICAgICBjb25kaXRpb25UZXh0ID0gYE5vIHJ1bGVzIG1hdGNoZWQke2Vycm9yTm90ZX0sIGZlbGwgYmFjayB0byBkZWZhdWx0OiAke2JyYW5jaE5hbWV9LmA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjdHguZGVzY3JpcHRpb24gJiYgY3R4LnJhdGlvbmFsZSkge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCAke2N0eC5kZXNjcmlwdGlvbn06ICR7Y3R4LnJhdGlvbmFsZX0sIHNvIGl0IGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2UgaWYgKGN0eC5kZXNjcmlwdGlvbikge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBJdCAke2N0eC5kZXNjcmlwdGlvbn0gYW5kIGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2UgaWYgKGN0eC5yYXRpb25hbGUpIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgQSBkZWNpc2lvbiB3YXMgbWFkZTogJHtjdHgucmF0aW9uYWxlfSwgc28gdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZGl0aW9uVGV4dCA9IGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgICB9XG4gICAgcmV0dXJuIGBbQ29uZGl0aW9uXTogJHtjb25kaXRpb25UZXh0fWA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJGb3JrKGN0eDogRm9ya1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gY3R4LmNoaWxkcmVuLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGBbUGFyYWxsZWxdOiBGb3JraW5nIGludG8gJHtjdHguY2hpbGRyZW4ubGVuZ3RofSBwYXJhbGxlbCBwYXRoczogJHtuYW1lc30uYDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlclNlbGVjdGVkKGN0eDogU2VsZWN0ZWRSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBpZiAoY3R4LmV2aWRlbmNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgZXZpZGVuY2UgPSBjdHguZXZpZGVuY2UgYXMgYW55O1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IGV2aWRlbmNlLnJ1bGVzPy5maWx0ZXIoKHI6IGFueSkgPT4gci5tYXRjaGVkKSA/PyBbXTtcbiAgICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hlZC5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHIubGFiZWwgPyBgIFwiJHtyLmxhYmVsfVwiYCA6ICcnO1xuICAgICAgICBpZiAoci50eXBlID09PSAnZmlsdGVyJykge1xuICAgICAgICAgIGNvbnN0IGNvbmRzID0gci5jb25kaXRpb25zXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAoYzogYW55KSA9PlxuICAgICAgICAgICAgICAgIGAke2Mua2V5fSAke2MuYWN0dWFsU3VtbWFyeX0gJHtjLm9wfSAke0pTT04uc3RyaW5naWZ5KGMudGhyZXNob2xkKX0gJHtjLnJlc3VsdCA/ICdcXHUyNzEzJyA6ICdcXHUyNzE3J31gLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICAgICAgcmV0dXJuIGAke3IuYnJhbmNofSR7bGFiZWx9ICgke2NvbmRzfSlgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IHIuaW5wdXRzLm1hcCgoaTogYW55KSA9PiBgJHtpLmtleX09JHtpLnZhbHVlU3VtbWFyeX1gKS5qb2luKCcsICcpO1xuICAgICAgICByZXR1cm4gYCR7ci5icmFuY2h9JHtsYWJlbH0gKCR7aW5wdXRzfSlgO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYFtTZWxlY3RlZF06ICR7Y3R4LnNlbGVjdGVkLmxlbmd0aH0gb2YgJHtjdHgudG90YWx9IHBhdGhzIHNlbGVjdGVkOiAke3BhcnRzLmpvaW4oJzsgJyl9LmA7XG4gICAgfVxuICAgIGNvbnN0IG5hbWVzID0gY3R4LnNlbGVjdGVkLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGBbU2VsZWN0ZWRdOiAke2N0eC5zZWxlY3RlZC5sZW5ndGh9IG9mICR7Y3R4LnRvdGFsfSBwYXRocyBzZWxlY3RlZCBmb3IgZXhlY3V0aW9uOiAke25hbWVzfS5gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyU3ViZmxvdyhjdHg6IFN1YmZsb3dSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gJ2V4aXQnKSB7XG4gICAgICByZXR1cm4gYEV4aXRpbmcgdGhlICR7Y3R4Lm5hbWV9IHN1YmZsb3cuYDtcbiAgICB9XG4gICAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvbiA/IGBFbnRlcmluZyAke2N0eC5uYW1lfTogJHtjdHguZGVzY3JpcHRpb259LmAgOiBgRW50ZXJpbmcgdGhlICR7Y3R4Lm5hbWV9IHN1YmZsb3cuYDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckxvb3AoY3R4OiBMb29wUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvblxuICAgICAgPyBgT24gcGFzcyAke2N0eC5pdGVyYXRpb259OiAke2N0eC5kZXNjcmlwdGlvbn0gYWdhaW4uYFxuICAgICAgOiBgT24gcGFzcyAke2N0eC5pdGVyYXRpb259IHRocm91Z2ggJHtjdHgudGFyZ2V0fS5gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyQnJlYWsoY3R4OiBCcmVha1JlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRXhlY3V0aW9uIHN0b3BwZWQgYXQgJHtjdHguc3RhZ2VOYW1lfS5gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRXJyb3IoY3R4OiBFcnJvclJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGxldCB0ZXh0ID0gYEFuIGVycm9yIG9jY3VycmVkIGF0ICR7Y3R4LnN0YWdlTmFtZX06ICR7Y3R4Lm1lc3NhZ2V9LmA7XG4gICAgaWYgKGN0eC52YWxpZGF0aW9uSXNzdWVzKSB7XG4gICAgICB0ZXh0ICs9IGAgVmFsaWRhdGlvbiBpc3N1ZXM6ICR7Y3R4LnZhbGlkYXRpb25Jc3N1ZXN9LmA7XG4gICAgfVxuICAgIHJldHVybiBgW0Vycm9yXTogJHt0ZXh0fWA7XG4gIH1cbn1cbiJdfQ==
678
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQXNEekUsbUZBQW1GO0FBRW5GOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGdCQUF3QztJQUM1RSxFQUFFLENBQVM7SUFFcEI7Ozs7O09BS0c7SUFDSyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDckQsc0RBQXNEO0lBQzlDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNsRCx5REFBeUQ7SUFDakQsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ3JELDRFQUE0RTtJQUNwRSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUU3QyxrQkFBa0IsQ0FBVTtJQUM1QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFTO0lBQ3ZCLFdBQVcsQ0FBNkM7SUFDeEQsUUFBUSxDQUFxQjtJQUVyQyxZQUFZLE9BQTREO1FBQ3RFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLG9CQUFvQixDQUFDO1FBQzlDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLGFBQWEsSUFBSSxJ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QztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxZQUFZLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciDigJQgSW5saW5lIG5hcnJhdGl2ZSBidWlsZGVyIHRoYXQgbWVyZ2VzIGZsb3cgKyBkYXRhIGR1cmluZyB0cmF2ZXJzYWwuXG4gKlxuICogRXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPENvbWJpbmVkTmFycmF0aXZlRW50cnk+IGZvciBkdWFsLWluZGV4ZWQgc3RvcmFnZSAob3JkZXJlZCBzZXF1ZW5jZVxuICogKyBPKDEpIHBlci1zdGVwIGxvb2t1cCBieSBydW50aW1lU3RhZ2VJZCkuIEltcGxlbWVudHMgYENvbWJpbmVkUmVjb3JkZXJgIOKAlCB0aGUgbGlicmFyeSdzXG4gKiBmaXJzdC1jbGFzcyBhYnN0cmFjdGlvbiBmb3Igb2JzZXJ2ZXJzIHRoYXQgc3BhbiBib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93IHN0cmVhbXMuXG4gKlxuICogRXZlbnQgb3JkZXJpbmcgZ3VhcmFudGVlcyB0aGlzIHdvcmtzOlxuICogICAxLiBTY29wZSBldmVudHMgKG9uUmVhZCwgb25Xcml0ZSkgZmlyZSBEVVJJTkcgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDIuIEZsb3cgZXZlbnRzIChvblN0YWdlRXhlY3V0ZWQsIG9uRGVjaXNpb24pIGZpcmUgQUZURVIgc3RhZ2UgZXhlY3V0aW9uXG4gKiAgIDMuIEJvdGggY2FycnkgdGhlIHNhbWUgYHN0YWdlTmFtZWAg4oCUIG5vIG1hdGNoaW5nIGFtYmlndWl0eVxuICpcbiAqIFNvIHdlIGJ1ZmZlciBzY29wZSBvcHMgcGVyLXN0YWdlLCB0aGVuIHdoZW4gdGhlIGZsb3cgZXZlbnQgYXJyaXZlcyxcbiAqIGVtaXQgdGhlIHN0YWdlIGVudHJ5ICsgZmx1c2ggdGhlIGJ1ZmZlcmVkIG9wcyBpbiBvbmUgcGFzcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuLi8uLi9yZWNvcmRlci9Db21iaW5lZFJlY29yZGVyLmpzJztcbmltcG9ydCB7IGlzRmxvd0V2ZW50IH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRFdmVudCB9IGZyb20gJy4uLy4uL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBTZXF1ZW5jZVJlY29yZGVyIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBzdW1tYXJpemVWYWx1ZSB9IGZyb20gJy4uLy4uL3Njb3BlL3JlY29yZGVycy9zdW1tYXJpemVWYWx1ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFBhdXNlRXZlbnQsIFJlYWRFdmVudCwgUmVzdW1lRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi8uLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEJyZWFrUmVuZGVyQ29udGV4dCxcbiAgQ29tYmluZWROYXJyYXRpdmVFbnRyeSxcbiAgRGVjaXNpb25SZW5kZXJDb250ZXh0LFxuICBFbWl0UmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIE5hcnJhdGl2ZVJlbmRlcmVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dQYXVzZUV2ZW50LFxuICBGbG93UmVzdW1lRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEJ1ZmZlcmVkT3Age1xuICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnIHwgJ2VtaXQnO1xuICAvKiogRm9yIHJlYWQvd3JpdGU6IHNjb3BlIGtleS4gRm9yIGVtaXQ6IHRoZSBldmVudCBuYW1lLiAqL1xuICBrZXk6IHN0cmluZztcbiAgcmF3VmFsdWU6IHVua25vd247XG4gIG9wZXJhdGlvbj86ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJztcbiAgc3RlcE51bWJlcjogbnVtYmVyO1xuICAvKiogT25seSBzZXQgZm9yIHR5cGU9J2VtaXQnIOKAlCBjYXJyaWVzIHRoZSBmdWxsIEVtaXRFdmVudCBmb3IgcmVuZGVyaW5nLiAqL1xuICBlbWl0RXZlbnQ/OiBFbWl0RXZlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMge1xuICBpbmNsdWRlU3RlcE51bWJlcnM/OiBib29sZWFuO1xuICBpbmNsdWRlVmFsdWVzPzogYm9vbGVhbjtcbiAgbWF4VmFsdWVMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBDdXN0b20gdmFsdWUgZm9ybWF0dGVyLiBDYWxsZWQgYXQgcmVuZGVyIHRpbWUgKGZsdXNoT3BzKSwgbm90IGNhcHR1cmUgdGltZS5cbiAgICogIFJlY2VpdmVzIHRoZSByYXcgdmFsdWUgYW5kIG1heFZhbHVlTGVuZ3RoLiBEZWZhdWx0cyB0byBzdW1tYXJpemVWYWx1ZSgpLiAqL1xuICBmb3JtYXRWYWx1ZT86ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpID0+IHN0cmluZztcbiAgLyoqIFBsdWdnYWJsZSByZW5kZXJlciBmb3IgY3VzdG9taXppbmcgbmFycmF0aXZlIG91dHB1dC4gVW5pbXBsZW1lbnRlZCBtZXRob2RzXG4gICAqICBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgRW5nbGlzaCByZW5kZXJlci4gU2VlIE5hcnJhdGl2ZVJlbmRlcmVyIGRvY3MuICovXG4gIHJlbmRlcmVyPzogTmFycmF0aXZlUmVuZGVyZXI7XG59XG5cbi8vIOKUgOKUgCBTY29wZVJlY29yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEltcGxlbWVudHMgYENvbWJpbmVkUmVjb3JkZXJgIOKAlCB0aGUgbGlicmFyeSdzIGZpcnN0LWNsYXNzIGFic3RyYWN0aW9uIGZvclxuICogb2JzZXJ2ZXJzIHRoYXQgc3BhbiBib3RoIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgKSBhbmQgY29udHJvbC1mbG93XG4gKiAoYEZsb3dSZWNvcmRlcmApIHN0cmVhbXMuIE9uZSBgaWRgLCByb3V0ZWQgdG8gYm90aCBjaGFubmVscyB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKC4uLilgIChvciBlcXVpdmFsZW50bHkgdmlhXG4gKiBgZXhlY3V0b3IuZW5hYmxlTmFycmF0aXZlKC4uLilgIHdoaWNoIGF1dG8tY3JlYXRlcyBhbiBpbnN0YW5jZSkuXG4gKlxuICogRm9yIHNoYXJlZC1tZXRob2QtbmFtZSBldmVudHMgKGBvbkVycm9yYCwgYG9uUGF1c2VgLCBgb25SZXN1bWVgKSB0aGVcbiAqIGhhbmRsZXIgYWNjZXB0cyB0aGUgdW5pb24gcGF5bG9hZCB0eXBlOyB3ZSBkaXNjcmltaW5hdGUgdmlhIGBpc0Zsb3dFdmVudGAuXG4gKiBTY29wZSB2YXJpYW50cyBvZiB0aGVzZSBldmVudHMgYXJlIGRlbGliZXJhdGVseSBpZ25vcmVkIGhlcmUg4oCUIHRoZVxuICogbmFycmF0aXZlIG9ubHkgc3VyZmFjZXMgY29udHJvbC1mbG93IGxpZmVjeWNsZSBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIGV4dGVuZHMgU2VxdWVuY2VSZWNvcmRlcjxDb21iaW5lZE5hcnJhdGl2ZUVudHJ5PiBpbXBsZW1lbnRzIENvbWJpbmVkUmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZW5kaW5nIHNjb3BlIG9wcyBrZXllZCBieSBydW50aW1lU3RhZ2VJZC4gRmx1c2hlZCBpbiBvblN0YWdlRXhlY3V0ZWQvb25EZWNpc2lvbi5cbiAgICpcbiAgICogS2V5aW5nIGJ5IHJ1bnRpbWVTdGFnZUlkIChub3Qgc3RhZ2VOYW1lKSBlbnN1cmVzIGNvcnJlY3RuZXNzIHdoZW4gcGFyYWxsZWwgZm9ya1xuICAgKiBicmFuY2hlcyBjb250YWluIHN0YWdlcyB3aXRoIHRoZSBzYW1lIG5hbWUg4oCUIGVhY2ggZXhlY3V0aW9uIHN0ZXAgaGFzIGEgdW5pcXVlIElELlxuICAgKi9cbiAgcHJpdmF0ZSBwZW5kaW5nT3BzID0gbmV3IE1hcDxzdHJpbmcsIEJ1ZmZlcmVkT3BbXT4oKTtcbiAgLyoqIFBlci1zdWJmbG93IHN0YWdlIGNvdW50ZXJzLiBLZXkgJycgPSByb290IGZsb3cuICovXG4gIHByaXZhdGUgc3RhZ2VDb3VudGVycyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIC8qKiBQZXItc3ViZmxvdyBmaXJzdC1zdGFnZSBmbGFncy4gS2V5ICcnID0gcm9vdCBmbG93LiAqL1xuICBwcml2YXRlIGZpcnN0U3RhZ2VGbGFncyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAvKiogVmlzaXQgY291bnQgcGVyIHN0YWdlSWQg4oCUIGRldGVjdHMgbG9vcCBpdGVyYXRpb25zIChjb3VudCA+IDEgPSBsb29wKS4gKi9cbiAgcHJpdmF0ZSBzdGFnZVZpc2l0Q291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGluY2x1ZGVTdGVwTnVtYmVyczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBpbmNsdWRlVmFsdWVzOiBib29sZWFuO1xuICBwcml2YXRlIG1heFZhbHVlTGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgZm9ybWF0VmFsdWU6ICh2YWx1ZTogdW5rbm93biwgbWF4TGVuOiBudW1iZXIpID0+IHN0cmluZztcbiAgcHJpdmF0ZSByZW5kZXJlcj86IE5hcnJhdGl2ZVJlbmRlcmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyAmIHsgaWQ/OiBzdHJpbmcgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/ICdjb21iaW5lZC1uYXJyYXRpdmUnO1xuICAgIHRoaXMuaW5jbHVkZVN0ZXBOdW1iZXJzID0gb3B0aW9ucz8uaW5jbHVkZVN0ZXBOdW1iZXJzID8/IHRydWU7XG4gICAgdGhpcy5pbmNsdWRlVmFsdWVzID0gb3B0aW9ucz8uaW5jbHVkZVZhbHVlcyA/PyB0cnVlO1xuICAgIHRoaXMubWF4VmFsdWVMZW5ndGggPSBvcHRpb25zPy5tYXhWYWx1ZUxlbmd0aCA/PyA4MDtcbiAgICB0aGlzLmZvcm1hdFZhbHVlID0gb3B0aW9ucz8uZm9ybWF0VmFsdWUgPz8gc3VtbWFyaXplVmFsdWU7XG4gICAgdGhpcy5yZW5kZXJlciA9IG9wdGlvbnM/LnJlbmRlcmVyO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNjb3BlIGNoYW5uZWwgKGZpcmVzIGZpcnN0LCBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmICghZXZlbnQua2V5KSByZXR1cm47XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5ydW50aW1lU3RhZ2VJZCwge1xuICAgICAgdHlwZTogJ3JlYWQnLFxuICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICByYXdWYWx1ZTogZXZlbnQudmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXJPcChldmVudC5ydW50aW1lU3RhZ2VJZCwge1xuICAgICAgdHlwZTogJ3dyaXRlJyxcbiAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgcmF3VmFsdWU6IGV2ZW50LnZhbHVlLFxuICAgICAgb3BlcmF0aW9uOiBldmVudC5vcGVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgRmxvdyBjaGFubmVsIChmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBOb24tbGluZWFyIGtpbmRzIGdldCB0aGVpciBuYXJyYXRpdmUgZW50cmllcyAoYW5kIG9wcyBmbHVzaClcbiAgICAvLyBmcm9tIGBvbkRlY2lzaW9uYCAvIGBvbkZvcmtgIC8gYG9uU2VsZWN0ZWRgIC8gYG9uU3ViZmxvd0VudHJ5YC5cbiAgICAvLyBTa2lwIHRoZW0gaGVyZSBzbyBlYWNoIHN0YWdlIGhhcyBleGFjdGx5IG9uZSBuYXJyYXRpdmUgZW50cnkuXG4gICAgaWYgKGV2ZW50LnN0YWdlVHlwZSAhPT0gJ2xpbmVhcicpIHJldHVybjtcblxuICAgIGNvbnN0IHN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkO1xuICAgIGNvbnN0IHJ1bnRpbWVTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQ7XG4gICAgY29uc3Qgc2ZLZXkgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQgPz8gJyc7XG4gICAgY29uc3Qgc3RhZ2VOdW0gPSB0aGlzLmluY3JlbWVudFN0YWdlQ291bnRlcihzZktleSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY29uc3VtZUZpcnN0U3RhZ2VGbGFnKHNmS2V5KTtcblxuICAgIC8vIFRyYWNrIHZpc2l0IGNvdW50IHBlciBzdGFnZUlkIHRvIGRldGVjdCBsb29wIGl0ZXJhdGlvbnNcbiAgICBjb25zdCB2aXNpdEtleSA9IHN0YWdlSWQgPz8gZXZlbnQuc3RhZ2VOYW1lO1xuICAgIGNvbnN0IHZpc2l0Q291bnQgPSAodGhpcy5zdGFnZVZpc2l0Q291bnRzLmdldCh2aXNpdEtleSkgPz8gMCkgKyAxO1xuICAgIHRoaXMuc3RhZ2VWaXNpdENvdW50cy5zZXQodmlzaXRLZXksIHZpc2l0Q291bnQpO1xuXG4gICAgY29uc3QgY3R4OiBTdGFnZVJlbmRlckNvbnRleHQgPSB7XG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlTnVtYmVyOiBzdGFnZU51bSxcbiAgICAgIGlzRmlyc3QsXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICBsb29wSXRlcmF0aW9uOiB2aXNpdENvdW50ID4gMSA/IHZpc2l0Q291bnQgLSAxIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclN0YWdlPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTdGFnZShjdHgpO1xuXG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgIH0pO1xuICAgIHRoaXMuZmx1c2hPcHMocnVudGltZVN0YWdlSWQsIHNmSWQsIHN0YWdlSWQsIGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkO1xuICAgIGNvbnN0IHJ1bnRpbWVTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQ7XG5cbiAgICAvLyBFbWl0IHRoZSBkZWNpZGVyIHN0YWdlIGVudHJ5LlxuICAgIC8vIFByb3Bvc2FsICMwMDMgYWxzbyBmaXJlcyBgb25TdGFnZUV4ZWN1dGVkKHN0YWdlVHlwZTogJ2RlY2lkZXInKWBcbiAgICAvLyBBRlRFUiB0aGlzIGV2ZW50LCBidXQgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciBnYXRlcyB0aGF0XG4gICAgLy8gaGFuZGxlciB0byBMSU5FQVItb25seSBzbyB0aGlzIHN0YXlzIHRoZSBzaW5nbGUgZW1pc3Npb24gc2l0ZVxuICAgIC8vIGZvciB0aGUgZGVjaWRlcidzIHN0YWdlIGVudHJ5ICsgb3BzIGZsdXNoLiBLZWVwcyBuYXJyYXRpdmVcbiAgICAvLyBvdXRwdXQgYnl0ZS1zdGFibGUgYWNyb3NzIHRoZSB2NiB0cmFuc2l0aW9uLlxuICAgIGNvbnN0IHNmS2V5ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkID8/ICcnO1xuICAgIGNvbnN0IHN0YWdlTnVtID0gdGhpcy5pbmNyZW1lbnRTdGFnZUNvdW50ZXIoc2ZLZXkpO1xuICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmNvbnN1bWVGaXJzdFN0YWdlRmxhZyhzZktleSk7XG5cbiAgICBjb25zdCBzdGFnZUN0eDogU3RhZ2VSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc3RhZ2VOYW1lOiBldmVudC5kZWNpZGVyLFxuICAgICAgc3RhZ2VOdW1iZXI6IHN0YWdlTnVtLFxuICAgICAgaXNGaXJzdCxcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICB9O1xuICAgIGNvbnN0IHN0YWdlVGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclN0YWdlPy4oc3RhZ2VDdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlclN0YWdlKHN0YWdlQ3R4KTtcblxuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgdGV4dDogc3RhZ2VUZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgICB0aGlzLmZsdXNoT3BzKHJ1bnRpbWVTdGFnZUlkLCBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsIHN0YWdlSWQsIGV2ZW50LmRlY2lkZXIpO1xuXG4gICAgLy8gRW1pdCB0aGUgY29uZGl0aW9uIGVudHJ5IGFzIGEgbmVzdGVkIHN1Yi1pdGVtIChkZXB0aCAxKSBvZiB0aGUgc3RhZ2UgYWJvdmUuXG4gICAgY29uc3QgZGVjaXNpb25DdHg6IERlY2lzaW9uUmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIGRlY2lkZXI6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBjaG9zZW46IGV2ZW50LmNob3NlbixcbiAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICAgIHJhdGlvbmFsZTogZXZlbnQucmF0aW9uYWxlLFxuICAgICAgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlLFxuICAgIH07XG4gICAgY29uc3QgY29uZGl0aW9uVGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckRlY2lzaW9uPy4oZGVjaXNpb25DdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckRlY2lzaW9uKGRlY2lzaW9uQ3R4KTtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ2NvbmRpdGlvbicsXG4gICAgICB0ZXh0OiBjb25kaXRpb25UZXh0LFxuICAgICAgZGVwdGg6IDEsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LmRlY2lkZXIsXG4gICAgICBzdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTmV4dCgpOiB2b2lkIHtcbiAgICAvLyBOby1vcC4gb25TdGFnZUV4ZWN1dGVkIGFscmVhZHkgaGFzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG5leHQgc3RhZ2UuXG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHg6IEZvcmtSZW5kZXJDb250ZXh0ID0geyBjaGlsZHJlbjogZXZlbnQuY2hpbGRyZW4gfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyRm9yaz8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyRm9yayhjdHgpO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnZm9yaycsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdGVkKGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eDogU2VsZWN0ZWRSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc2VsZWN0ZWQ6IGV2ZW50LnNlbGVjdGVkLFxuICAgICAgdG90YWw6IGV2ZW50LnRvdGFsLFxuICAgICAgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlclNlbGVjdGVkPy4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTZWxlY3RlZChjdHgpO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAnc2VsZWN0b3InLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzZktleSA9IGV2ZW50LnN1YmZsb3dJZCA/PyAnJztcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuZGVsZXRlKHNmS2V5KTtcbiAgICB0aGlzLmZpcnN0U3RhZ2VGbGFncy5kZWxldGUoc2ZLZXkpO1xuXG4gICAgY29uc3QgY3R4OiBTdWJmbG93UmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIG5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBkaXJlY3Rpb246ICdlbnRyeScsXG4gICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgICBtYXBwZWRJbnB1dDogZXZlbnQubWFwcGVkSW5wdXQsXG4gICAgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyU3ViZmxvdz8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyU3ViZmxvdyhjdHgpO1xuICAgIGNvbnN0IHJpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHNpZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQ7XG4gICAgY29uc3Qgc2ZJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZDtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ3N1YmZsb3cnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VOYW1lOiBldmVudC5uYW1lLFxuICAgICAgc3RhZ2VJZDogc2lkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHJpZCxcbiAgICAgIHN1YmZsb3dJZDogc2ZJZCxcbiAgICAgIGRpcmVjdGlvbjogJ2VudHJ5JyxcbiAgICB9KTtcbiAgICAvLyBFbWl0IHBlci1rZXkgc3RlcCBlbnRyaWVzIGZvciBtYXBwZWQgaW5wdXRzLlxuICAgIC8vXG4gICAgLy8gUm91dGUgRUFDSCBrZXkgdGhyb3VnaCB0aGUgY29uc3VtZXIncyBgcmVuZGVyZXIucmVuZGVyT3BgIGhvb2sgYmVmb3JlXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBoYXJkY29kZWQgYElucHV0OiAke2tleX0gPSAke3ZhbHVlU3VtbWFyeX1gXG4gICAgLy8gdGVtcGxhdGUuIFdpdGhvdXQgdGhpcyByb3V0aW5nLCBhIGNvbnN1bWVyIHRoYXQgcHJvdmlkZWQgYVxuICAgIC8vIGRvbWFpbi1hd2FyZSBgcmVuZGVyZXIucmVuZGVyT3BgICh0byByZW5kZXIgZS5nLiBgcGFyc2VkUmVzcG9uc2VgXG4gICAgLy8gb2JqZWN0cyBzZW1hbnRpY2FsbHkpIHdvdWxkIHNlZSBiZWF1dGlmdWwgb3V0cHV0IGZvciBzY29wZSB3cml0ZXNcbiAgICAvLyBidXQgZ2V0IHRoZSBnZW5lcmljIGtleS1saXN0IGZhbGxiYWNrIGZvciBzdWJmbG93IGlucHV0cyDigJQgdGhlXG4gICAgLy8gbGlicmFyeSdzIFwiY29tYmluZWQgbmFycmF0aXZlXCIgcHJvbWlzZSAob25lIHJlbmRlcmVyIGNvbnRyb2xzIHRoZVxuICAgIC8vIHdob2xlIG5hcnJhdGl2ZSkgd291bGQgc2lsZW50bHkgYnJlYWsuIFdlIGhvbm91ciBpdCBoZXJlLlxuICAgIC8vXG4gICAgLy8gVGhlIE9wUmVuZGVyQ29udGV4dCBpcyBidWlsdCB3aXRoIGB0eXBlOiAnd3JpdGUnYCBiZWNhdXNlIHNlbWFudGljYWxseVxuICAgIC8vIHRoZSBzdWJmbG93J3MgaW5pdGlhbCBzY29wZSBJUyBiZWluZyB3cml0dGVuIHZpYSB0aGUgcGFyZW50J3NcbiAgICAvLyBpbnB1dE1hcHBlci4gYG9wZXJhdGlvbjogJ3NldCdgIGxpa2V3aXNlIOKAlCB0aGlzIGlzIHRoZSBzdWJmbG93J3NcbiAgICAvLyBmaXJzdCBzaWdodCBvZiB0aGUga2V5LlxuICAgIC8vXG4gICAgLy8gVmFsdWVzIHNob3duIHdoZW4gaW5jbHVkZVZhbHVlcz10cnVlIOKAlCBjb25zdW1lciByZXNwb25zaWJsZSBmb3JcbiAgICAvLyByZWRhY3Rpb24gcG9saWN5IG9uIHRoZSBwYXJlbnQgc2NvcGUgKHJlZGFjdGVkIGtleXMgcHJvZHVjZVxuICAgIC8vICdbUkVEQUNURURdJyB2aWEgU2NvcGVGYWNhZGUpLlxuICAgIGlmIChldmVudC5tYXBwZWRJbnB1dCAmJiBPYmplY3Qua2V5cyhldmVudC5tYXBwZWRJbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHN0ZXBOdW1iZXIgPSAwO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnQubWFwcGVkSW5wdXQpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3VtbWFyeSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUsIHRoaXMubWF4VmFsdWVMZW5ndGgpO1xuICAgICAgICBjb25zdCBvcEN0eDogT3BSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgICAgIHR5cGU6ICd3cml0ZScsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHJhd1ZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB2YWx1ZVN1bW1hcnksXG4gICAgICAgICAgb3BlcmF0aW9uOiAnc2V0JyxcbiAgICAgICAgICBzdGVwTnVtYmVyOiArK3N0ZXBOdW1iZXIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgdGhlIGNvbnN1bWVyIHN1cHBsaWVkIGByZW5kZXJlci5yZW5kZXJPcGAsIHVzZSBpdHMgcmV0dXJuIHZhbHVlOlxuICAgICAgICAvLyAgIC0gc3RyaW5nIOKGkiB1c2UgYXMgdGhlIG5hcnJhdGl2ZSBsaW5lXG4gICAgICAgIC8vICAgLSBudWxsICAg4oaSIGRlbGliZXJhdGVseSBleGNsdWRlIHRoaXMgZW50cnkgKHNhbWUgc2VtYW50aWNzIGFzXG4gICAgICAgIC8vICAgICAgICAgICAgICBgZmx1c2hPcHNgIGFib3ZlIGF0IGxpbmUgfjU0MClcbiAgICAgICAgLy8gICAtIHVuZGVmaW5lZCDihpIgcmVuZGVyZXIgZG9lcyBub3QgaGFuZGxlIHRoaXMgb3Ag4oaSIGZhbGwgdGhyb3VnaFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgdG8gdGhlIGhhcmRjb2RlZCB0ZW1wbGF0ZVxuICAgICAgICAvLyBJZiBubyByZW5kZXJlciBhdCBhbGwsIHVzZSB0aGUgaGFyZGNvZGVkIHRlbXBsYXRlLlxuICAgICAgICBsZXQgdGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgaWYgKHRoaXMucmVuZGVyZXI/LnJlbmRlck9wKSB7XG4gICAgICAgICAgY29uc3QgY3VzdG9tVGV4dCA9IHRoaXMucmVuZGVyZXIucmVuZGVyT3Aob3BDdHgpO1xuICAgICAgICAgIGlmIChjdXN0b21UZXh0ID09PSBudWxsKSBjb250aW51ZTsgLy8gZXhjbHVkZWQgb24gcHVycG9zZVxuICAgICAgICAgIHRleHQgPVxuICAgICAgICAgICAgY3VzdG9tVGV4dCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gY3VzdG9tVGV4dFxuICAgICAgICAgICAgICA6IHRoaXMuaW5jbHVkZVZhbHVlc1xuICAgICAgICAgICAgICA/IGBJbnB1dDogJHtrZXl9ID0gJHt2YWx1ZVN1bW1hcnl9YFxuICAgICAgICAgICAgICA6IGBJbnB1dDogJHtrZXl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gdGhpcy5pbmNsdWRlVmFsdWVzID8gYElucHV0OiAke2tleX0gPSAke3ZhbHVlU3VtbWFyeX1gIDogYElucHV0OiAke2tleX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0KHtcbiAgICAgICAgICB0eXBlOiAnc3RlcCcsXG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgICBzdGFnZU5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICAgICAgc3RhZ2VJZDogc2lkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkOiByaWQsXG4gICAgICAgICAgc3ViZmxvd0lkOiBzZklkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICByYXdWYWx1ZTogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByaWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBzaWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdGFnZUlkO1xuICAgIGNvbnN0IHNmSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQ7XG4gICAgLy8gTk9URTogb3V0cHV0IHN0YXRlIGlzIE5PVCBlbWl0dGVkIGFzIHN0ZXAgZW50cmllcyBiZWNhdXNlIGl0IG1heSBjb250YWluXG4gICAgLy8gdW5yZWRhY3RlZCB2YWx1ZXMgZnJvbSB0aGUgc3ViZmxvdydzIGludGVybmFsIHNjb3BlLiBUaGUgc3ViZmxvdyBleGl0XG4gICAgLy8gaGVhZGVyIGlzIHN1ZmZpY2llbnQg4oCUIGRyaWxsIGludG8gdGhlIHN1YmZsb3cgZm9yIGRldGFpbHMuXG4gICAgY29uc3QgY3R4OiBTdWJmbG93UmVuZGVyQ29udGV4dCA9IHtcbiAgICAgIG5hbWU6IGV2ZW50Lm5hbWUsXG4gICAgICBkaXJlY3Rpb246ICdleGl0JyxcbiAgICAgIG91dHB1dFN0YXRlOiBldmVudC5vdXRwdXRTdGF0ZSxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJTdWJmbG93Py4oY3R4KSA/PyB0aGlzLmRlZmF1bHRSZW5kZXJTdWJmbG93KGN0eCk7XG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdzdWJmbG93JyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQubmFtZSxcbiAgICAgIHN0YWdlSWQ6IHNpZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiByaWQsXG4gICAgICBzdWJmbG93SWQ6IHNmSWQsXG4gICAgICBkaXJlY3Rpb246ICdleGl0JyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eDogTG9vcFJlbmRlckNvbnRleHQgPSB7XG4gICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldCxcbiAgICAgIGl0ZXJhdGlvbjogZXZlbnQuaXRlcmF0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLFxuICAgIH07XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXI/LnJlbmRlckxvb3A/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckxvb3AoY3R4KTtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgdGV4dCxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHg6IEJyZWFrUmVuZGVyQ29udGV4dCA9IHsgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUgfTtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5yZW5kZXJlcj8ucmVuZGVyQnJlYWs/LihjdHgpID8/IHRoaXMuZGVmYXVsdFJlbmRlckJyZWFrKGN0eCk7XG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIHR5cGU6ICdicmVhaycsXG4gICAgICB0ZXh0LFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gICAgICBzdWJmbG93SWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnN1YmZsb3dJZCxcbiAgICB9KTtcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IFBhdXNlRXZlbnQgfCBGbG93UGF1c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIEJvdGggY2hhbm5lbHMgZmlyZSBvblBhdXNlIHdpdGggZGlmZmVyZW50IHBheWxvYWQgc2hhcGVzLiBOYXJyYXRpdmUgb25seVxuICAgIC8vIHN1cmZhY2VzIHRoZSBjb250cm9sLWZsb3cgdmFyaWFudCAod2hpY2ggaGFzIHN0YWdlTmFtZS9zdGFnZUlkKS4gRGF0YVxuICAgIC8vIGNoYW5uZWwncyBQYXVzZUV2ZW50IGlzIGlnbm9yZWQgdG8gYXZvaWQgZHVwbGljYXRlIGVudHJpZXMuXG4gICAgaWYgKCFpc0Zsb3dFdmVudChldmVudCkpIHJldHVybjtcbiAgICBpZiAoIWV2ZW50LnN0YWdlTmFtZSB8fCAhZXZlbnQuc3RhZ2VJZCkgcmV0dXJuO1xuICAgIGNvbnN0IHRleHQgPSBgRXhlY3V0aW9uIHBhdXNlZCBhdCAke2V2ZW50LnN0YWdlTmFtZX0uYDtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ3BhdXNlJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCA/PyBldmVudC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvblJlc3VtZShldmVudDogUmVzdW1lRXZlbnQgfCBGbG93UmVzdW1lRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBTYW1lIGlzRmxvd0V2ZW50IGRpc2NyaW1pbmFudCBhcyBvblBhdXNlIOKAlCBpZ25vcmUgc2NvcGUgUmVzdW1lRXZlbnQuXG4gICAgaWYgKCFpc0Zsb3dFdmVudChldmVudCkpIHJldHVybjtcbiAgICBpZiAoIWV2ZW50LnN0YWdlTmFtZSB8fCAhZXZlbnQuc3RhZ2VJZCkgcmV0dXJuO1xuICAgIGNvbnN0IHN1ZmZpeCA9IGV2ZW50Lmhhc0lucHV0ID8gJyB3aXRoIGlucHV0LicgOiAnLic7XG4gICAgY29uc3QgdGV4dCA9IGBFeGVjdXRpb24gcmVzdW1lZCBhdCAke2V2ZW50LnN0YWdlTmFtZX0ke3N1ZmZpeH1gO1xuICAgIHRoaXMuZW1pdCh7XG4gICAgICB0eXBlOiAncmVzdW1lJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCA/PyBldmVudC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd0lkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5zdWJmbG93SWQsXG4gICAgfSk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBFcnJvckV2ZW50IHwgRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBOYXJyYXRpdmUgb25seSBzdXJmYWNlcyB0aGUgY29udHJvbC1mbG93IHZhcmlhbnQgb2YgZXJyb3JzIChoYXNcbiAgICAvLyBzdGFnZU5hbWUgKyBtZXNzYWdlKS4gU2NvcGUtbGV2ZWwgRXJyb3JFdmVudCBpcyBjYXB0dXJlZCBlbHNld2hlcmUuXG4gICAgaWYgKCFpc0Zsb3dFdmVudChldmVudCkpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIGV2ZW50Lm1lc3NhZ2UgIT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgICBsZXQgdmFsaWRhdGlvbklzc3Vlczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChldmVudC5zdHJ1Y3R1cmVkRXJyb3I/Lmlzc3Vlcz8ubGVuZ3RoKSB7XG4gICAgICB2YWxpZGF0aW9uSXNzdWVzID0gZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlc1xuICAgICAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgICAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCc7ICcpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eDogRXJyb3JSZW5kZXJDb250ZXh0ID0ge1xuICAgICAgc3RhZ2VOYW1lOiBldmVudC5zdGFnZU5hbWUsXG4gICAgICBtZXNzYWdlOiBldmVudC5tZXNzYWdlLFxuICAgICAgdmFsaWRhdGlvbklzc3VlcyxcbiAgICB9O1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJFcnJvcj8uKGN0eCkgPz8gdGhpcy5kZWZhdWx0UmVuZGVyRXJyb3IoY3R4KTtcbiAgICB0aGlzLmVtaXQoe1xuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHRleHQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uc3ViZmxvd0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlY2VpdmUgYSBjb25zdW1lci1lbWl0dGVkIGV2ZW50IGZyb20gYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYC5cbiAgICpcbiAgICogQnVmZmVyZWQgYWxvbmdzaWRlIGBvblJlYWRgL2BvbldyaXRlYCBwZXItc3RhZ2Ugc28gdGhhdCB0aGUgZmluYWxcbiAgICogbmFycmF0aXZlIHByZXNlcnZlcyBvcmRlcmluZzpcbiAgICpcbiAgICogICAxLiBzdGFnZSBoZWFkZXIgKGVtaXR0ZWQgYnkgYG9uU3RhZ2VFeGVjdXRlZGAgLyBgb25EZWNpc2lvbmApXG4gICAqICAgMi4gYnVmZmVyZWQgb3BzIGZvciB0aGF0IHN0YWdlIOKAlCBpbiBjYWxsIG9yZGVyIOKAlCBmbHVzaGVkIHJpZ2h0IGFmdGVyXG4gICAqXG4gICAqIFdpdGhvdXQgYnVmZmVyaW5nLCBlbWl0IGV2ZW50cyB3b3VsZCBmaXJlIEJFRk9SRSB0aGUgc3RhZ2UgaGVhZGVyXG4gICAqICh3aGljaCBvbmx5IGxhbmRzIGF0IGBvblN0YWdlRXhlY3V0ZWRgKSwgcHJvZHVjaW5nIG91dC1vZi1vcmRlclxuICAgKiBuYXJyYXRpdmUgZW50cmllcy4gRmx1c2ggaGFwcGVucyBpbiBgZmx1c2hPcHNgIHdoaWNoIHJvdXRlcyBgZW1pdGAtXG4gICAqIHR5cGVkIGJ1ZmZlcmVkIG9wcyB0aHJvdWdoIGByZW5kZXJFbWl0YCBpbnN0ZWFkIG9mIGByZW5kZXJPcGAuXG4gICAqL1xuICBvbkVtaXQoZXZlbnQ6IEVtaXRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyT3AoZXZlbnQucnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHR5cGU6ICdlbWl0JyxcbiAgICAgIGtleTogZXZlbnQubmFtZSxcbiAgICAgIHJhd1ZhbHVlOiBldmVudC5wYXlsb2FkLFxuICAgICAgZW1pdEV2ZW50OiBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckVtaXQoY3R4OiBFbWl0UmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbZW1pdF0gJHtjdHgubmFtZX06ICR7Y3R4LnBheWxvYWRTdW1tYXJ5fWA7XG4gIH1cblxuICAvLyDilIDilIAgT3V0cHV0IChuYXJyYXRpdmUtc3BlY2lmaWMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGVudHJpZXMgZ3JvdXBlZCBieSBzdWJmbG93SWQgZm9yIHN0cnVjdHVyZWQgYWNjZXNzLlxuICAgKiBSb290LWxldmVsIGVudHJpZXMgaGF2ZSBzdWJmbG93SWQgPSB1bmRlZmluZWQuXG4gICAqL1xuICBnZXRFbnRyaWVzQnlTdWJmbG93KCk6IFJlY29yZDxzdHJpbmcsIENvbWJpbmVkTmFycmF0aXZlRW50cnlbXT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQ29tYmluZWROYXJyYXRpdmVFbnRyeVtdPiA9IHsgJyc6IFtdIH07XG4gICAgdGhpcy5mb3JFYWNoRW50cnkoKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBlbnRyeS5zdWJmbG93SWQgPz8gJyc7XG4gICAgICBpZiAoIXJlc3VsdFtrZXldKSByZXN1bHRba2V5XSA9IFtdO1xuICAgICAgcmVzdWx0W2tleV0ucHVzaChlbnRyeSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWxsIHN0YXRlLiBDYWxsZWQgYXV0b21hdGljYWxseSBiZWZvcmUgZWFjaCBydW4uICovXG4gIG92ZXJyaWRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgdGhpcy5wZW5kaW5nT3BzLmNsZWFyKCk7XG4gICAgdGhpcy5zdGFnZUNvdW50ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5maXJzdFN0YWdlRmxhZ3MuY2xlYXIoKTtcbiAgICB0aGlzLnN0YWdlVmlzaXRDb3VudHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YXRlIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnRTdGFnZUNvdW50ZXIoc3ViZmxvd0tleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGFnZUNvdW50ZXJzLmdldChzdWJmbG93S2V5KSA/PyAwO1xuICAgIGNvbnN0IG5leHQgPSBjdXJyZW50ICsgMTtcbiAgICB0aGlzLnN0YWdlQ291bnRlcnMuc2V0KHN1YmZsb3dLZXksIG5leHQpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lRmlyc3RTdGFnZUZsYWcoc3ViZmxvd0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0U3RhZ2VGbGFncy5oYXMoc3ViZmxvd0tleSkpIHtcbiAgICAgIHRoaXMuZmlyc3RTdGFnZUZsYWdzLnNldChzdWJmbG93S2V5LCBmYWxzZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWZmZXJPcChydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBvcDogT21pdDxCdWZmZXJlZE9wLCAnc3RlcE51bWJlcic+KTogdm9pZCB7XG4gICAgbGV0IG9wcyA9IHRoaXMucGVuZGluZ09wcy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIGlmICghb3BzKSB7XG4gICAgICBvcHMgPSBbXTtcbiAgICAgIHRoaXMucGVuZGluZ09wcy5zZXQocnVudGltZVN0YWdlSWQsIG9wcyk7XG4gICAgfVxuICAgIG9wcy5wdXNoKHsgLi4ub3AsIHN0ZXBOdW1iZXI6IG9wcy5sZW5ndGggKyAxIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaE9wcyhydW50aW1lU3RhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdWJmbG93SWQ/OiBzdHJpbmcsIHN0YWdlSWQ/OiBzdHJpbmcsIHN0YWdlTmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChydW50aW1lU3RhZ2VJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3Qgb3BzID0gdGhpcy5wZW5kaW5nT3BzLmdldChydW50aW1lU3RhZ2VJZCk7XG4gICAgaWYgKCFvcHMgfHwgb3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiBvcHMpIHtcbiAgICAgIC8vIOKUgOKUgCBFbWl0IGV2ZW50cyB0YWtlIGEgZGlmZmVyZW50IHJlbmRlciBwYXRoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgLy9cbiAgICAgIC8vIEVtaXQgZXZlbnRzIGFyZSBidWZmZXJlZCBhbG9uZ3NpZGUgcmVhZHMvd3JpdGVzIChzbyB0aGV5IGFwcGVhclxuICAgICAgLy8gdW5kZXIgdGhlaXIgb3duaW5nIHN0YWdlJ3MgaGVhZGVyIGluIG5hcnJhdGl2ZSBvcmRlciwgbm90IGlubGluZVxuICAgICAgLy8gYXQgY2FsbCB0aW1lKS4gQXQgZmx1c2gsIHRoZXkgcm91dGUgdGhyb3VnaCBgcmVuZGVyRW1pdGAgaW5zdGVhZFxuICAgICAgLy8gb2YgYHJlbmRlck9wYCDigJQgY29uc3VtZXJzIHdhbnRpbmcgY3VzdG9tIGVtaXQgcmVuZGVyaW5nIGltcGxlbWVudFxuICAgICAgLy8gdGhlIGRlZGljYXRlZCBob29rLiBVbmhhbmRsZWQgLyBtaXNzaW5nIHJlbmRlcmVyIGZhbGxzIGJhY2sgdG9cbiAgICAgIC8vIHRoZSBzYW1lIGNvbXBhY3QgYFtlbWl0XSBuYW1lOiBwYXlsb2FkU3VtbWFyeWAgZGVmYXVsdCB1c2VkIGJ5XG4gICAgICAvLyB0aGUgcHJlLWJ1ZmZlcmluZyBvbkVtaXQgcGF0aC5cbiAgICAgIGlmIChvcC50eXBlID09PSAnZW1pdCcgJiYgb3AuZW1pdEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGUgPSBvcC5lbWl0RXZlbnQ7XG4gICAgICAgIGNvbnN0IHBheWxvYWRTdW1tYXJ5ID0gdGhpcy5mb3JtYXRWYWx1ZShlLnBheWxvYWQsIHRoaXMubWF4VmFsdWVMZW5ndGgpO1xuICAgICAgICBjb25zdCBlbWl0Q3R4OiBFbWl0UmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICBuYW1lOiBlLm5hbWUsXG4gICAgICAgICAgcGF5bG9hZDogZS5wYXlsb2FkLFxuICAgICAgICAgIHN0YWdlTmFtZTogZS5zdGFnZU5hbWUsXG4gICAgICAgICAgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgc3ViZmxvd1BhdGg6IGUuc3ViZmxvd1BhdGgsXG4gICAgICAgICAgcGlwZWxpbmVJZDogZS5waXBlbGluZUlkLFxuICAgICAgICAgIHRpbWVzdGFtcDogZS50aW1lc3RhbXAsXG4gICAgICAgICAgcGF5bG9hZFN1bW1hcnksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBlbWl0VGV4dDogc3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJlcj8ucmVuZGVyRW1pdCkge1xuICAgICAgICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMucmVuZGVyZXIucmVuZGVyRW1pdChlbWl0Q3R4KTtcbiAgICAgICAgICBpZiAoY3VzdG9tID09PSBudWxsKSBjb250aW51ZTsgLy8gZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkXG4gICAgICAgICAgZW1pdFRleHQgPSBjdXN0b20gIT09IHVuZGVmaW5lZCA/IGN1c3RvbSA6IHRoaXMuZGVmYXVsdFJlbmRlckVtaXQoZW1pdEN0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW1pdFRleHQgPSB0aGlzLmRlZmF1bHRSZW5kZXJFbWl0KGVtaXRDdHgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdCh7XG4gICAgICAgICAgdHlwZTogJ2VtaXQnLFxuICAgICAgICAgIHRleHQ6IGVtaXRUZXh0LFxuICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgIHN0YWdlTmFtZSxcbiAgICAgICAgICBzdGFnZUlkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHN0ZXBOdW1iZXI6IG9wLnN0ZXBOdW1iZXIsXG4gICAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgb3AudHlwZSBpcyBuYXJyb3dlZCB0byAncmVhZCcgfCAnd3JpdGUnIChlbWl0IGJyYW5jaFxuICAgICAgLy8gYWJvdmUgdXNlcyBgY29udGludWVgKS4gVHlwZVNjcmlwdCBjYW4ndCBmb2xsb3cgdGhhdCBuYXJyb3dpbmdcbiAgICAgIC8vIHRocm91Z2ggdGhlIGNvbnRpbnVlLCBzbyB3ZSBhc3NlcnQgYXQgcmVuZGVyIHRpbWUuXG4gICAgICBjb25zdCBvcFR5cGUgPSBvcC50eXBlIGFzICdyZWFkJyB8ICd3cml0ZSc7XG4gICAgICBjb25zdCB2YWx1ZVN1bW1hcnkgPSB0aGlzLmZvcm1hdFZhbHVlKG9wLnJhd1ZhbHVlLCB0aGlzLm1heFZhbHVlTGVuZ3RoKTtcbiAgICAgIGNvbnN0IG9wQ3R4OiBPcFJlbmRlckNvbnRleHQgPSB7XG4gICAgICAgIHR5cGU6IG9wVHlwZSxcbiAgICAgICAga2V5OiBvcC5rZXksXG4gICAgICAgIHJhd1ZhbHVlOiBvcC5yYXdWYWx1ZSxcbiAgICAgICAgdmFsdWVTdW1tYXJ5LFxuICAgICAgICBvcGVyYXRpb246IG9wLm9wZXJhdGlvbixcbiAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyPy5yZW5kZXJPcCA/IHRoaXMucmVuZGVyZXIucmVuZGVyT3Aob3BDdHgpIDogdGhpcy5kZWZhdWx0UmVuZGVyT3Aob3BDdHgpO1xuXG4gICAgICBpZiAodGV4dCA9PSBudWxsKSBjb250aW51ZTtcblxuICAgICAgdGhpcy5lbWl0KHtcbiAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICB0ZXh0LFxuICAgICAgICBkZXB0aDogMSxcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgc3RlcE51bWJlcjogb3Auc3RlcE51bWJlcixcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICBrZXk6IG9wLmtleSxcbiAgICAgICAgcmF3VmFsdWU6IG9wLnJhd1ZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nT3BzLmRlbGV0ZShydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvLyDilIDilIAgRGVmYXVsdCByZW5kZXJlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyU3RhZ2UoY3R4OiBTdGFnZVJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGxldCBpbm5lcjogc3RyaW5nO1xuICAgIGlmIChjdHguaXNGaXJzdCkge1xuICAgICAgaW5uZXIgPSBjdHguZGVzY3JpcHRpb24gPyBgVGhlIHByb2Nlc3MgYmVnYW46ICR7Y3R4LmRlc2NyaXB0aW9ufS5gIDogYFRoZSBwcm9jZXNzIGJlZ2FuIHdpdGggJHtjdHguc3RhZ2VOYW1lfS5gO1xuICAgIH0gZWxzZSBpZiAoY3R4Lmxvb3BJdGVyYXRpb24gJiYgY3R4Lmxvb3BJdGVyYXRpb24gPiAwKSB7XG4gICAgICBpbm5lciA9IGN0eC5kZXNjcmlwdGlvblxuICAgICAgICA/IGBMb29wZWQgYmFjazogJHtjdHguZGVzY3JpcHRpb259IChwYXNzICR7Y3R4Lmxvb3BJdGVyYXRpb259KS5gXG4gICAgICAgIDogYExvb3BlZCBiYWNrIHRvICR7Y3R4LnN0YWdlTmFtZX0gKHBhc3MgJHtjdHgubG9vcEl0ZXJhdGlvbn0pLmA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubmVyID0gY3R4LmRlc2NyaXB0aW9uID8gYE5leHQgc3RlcDogJHtjdHguZGVzY3JpcHRpb259LmAgOiBgTmV4dCwgaXQgbW92ZWQgb24gdG8gJHtjdHguc3RhZ2VOYW1lfS5gO1xuICAgIH1cbiAgICByZXR1cm4gYFN0YWdlICR7Y3R4LnN0YWdlTnVtYmVyfTogJHtpbm5lcn1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyT3AoY3R4OiBPcFJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0ZXBQcmVmaXggPSB0aGlzLmluY2x1ZGVTdGVwTnVtYmVycyA/IGBTdGVwICR7Y3R4LnN0ZXBOdW1iZXJ9OiBgIDogJyc7XG4gICAgaWYgKGN0eC50eXBlID09PSAncmVhZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmluY2x1ZGVWYWx1ZXMgJiYgY3R4LnZhbHVlU3VtbWFyeVxuICAgICAgICA/IGAke3N0ZXBQcmVmaXh9UmVhZCAke2N0eC5rZXl9ID0gJHtjdHgudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgOiBgJHtzdGVwUHJlZml4fVJlYWQgJHtjdHgua2V5fWA7XG4gICAgfVxuICAgIGlmIChjdHgub3BlcmF0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgcmV0dXJuIGAke3N0ZXBQcmVmaXh9RGVsZXRlICR7Y3R4LmtleX1gO1xuICAgIH1cbiAgICBpZiAoY3R4Lm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIHJldHVybiB0aGlzLmluY2x1ZGVWYWx1ZXNcbiAgICAgICAgPyBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke2N0eC5rZXl9ID0gJHtjdHgudmFsdWVTdW1tYXJ5fWBcbiAgICAgICAgOiBgJHtzdGVwUHJlZml4fVVwZGF0ZSAke2N0eC5rZXl9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5jbHVkZVZhbHVlcyA/IGAke3N0ZXBQcmVmaXh9V3JpdGUgJHtjdHgua2V5fSA9ICR7Y3R4LnZhbHVlU3VtbWFyeX1gIDogYCR7c3RlcFByZWZpeH1Xcml0ZSAke2N0eC5rZXl9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckRlY2lzaW9uKGN0eDogRGVjaXNpb25SZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBjb25zdCBicmFuY2hOYW1lID0gY3R4LmNob3NlbjtcbiAgICBsZXQgY29uZGl0aW9uVGV4dDogc3RyaW5nO1xuICAgIGlmIChjdHguZXZpZGVuY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCBldmlkZW5jZSA9IGN0eC5ldmlkZW5jZSBhcyBhbnk7XG4gICAgICBjb25zdCBtYXRjaGVkUnVsZSA9IGV2aWRlbmNlLnJ1bGVzPy5maW5kKChyOiBhbnkpID0+IHIubWF0Y2hlZCk7XG4gICAgICBpZiAobWF0Y2hlZFJ1bGUpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBtYXRjaGVkUnVsZS5sYWJlbCA/IGAgXCIke21hdGNoZWRSdWxlLmxhYmVsfVwiYCA6ICcnO1xuICAgICAgICBpZiAobWF0Y2hlZFJ1bGUudHlwZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IG1hdGNoZWRSdWxlLmNvbmRpdGlvbnMubWFwKFxuICAgICAgICAgICAgKGM6IGFueSkgPT5cbiAgICAgICAgICAgICAgYCR7Yy5rZXl9ICR7Yy5hY3R1YWxTdW1tYXJ5fSAke2Mub3B9ICR7SlNPTi5zdHJpbmdpZnkoYy50aHJlc2hvbGQpfSAke2MucmVzdWx0ID8gJ1xcdTI3MTMnIDogJ1xcdTI3MTcnfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25kaXRpb25UZXh0ID0gYEl0IGV2YWx1YXRlZCBSdWxlICR7bWF0Y2hlZFJ1bGUucnVsZUluZGV4fSR7bGFiZWx9OiAke3BhcnRzLmpvaW4oXG4gICAgICAgICAgICAnLCAnLFxuICAgICAgICAgICl9LCBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hlZFJ1bGUuaW5wdXRzLm1hcCgoaTogYW55KSA9PiBgJHtpLmtleX09JHtpLnZhbHVlU3VtbWFyeX1gKTtcbiAgICAgICAgICBjb25kaXRpb25UZXh0ID0gYEl0IGV4YW1pbmVkJHtsYWJlbH06ICR7cGFydHMuam9pbignLCAnKX0sIGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yZWRDb3VudCA9IGV2aWRlbmNlLnJ1bGVzPy5maWx0ZXIoKHI6IGFueSkgPT4gci5tYXRjaEVycm9yICE9PSB1bmRlZmluZWQpLmxlbmd0aCA/PyAwO1xuICAgICAgICBjb25zdCBlcnJvck5vdGUgPSBlcnJvcmVkQ291bnQgPiAwID8gYCAoJHtlcnJvcmVkQ291bnR9IHJ1bGUke2Vycm9yZWRDb3VudCA+IDEgPyAncycgOiAnJ30gdGhyZXcgZXJyb3JzKWAgOiAnJztcbiAgICAgICAgY29uZGl0aW9uVGV4dCA9IGBObyBydWxlcyBtYXRjaGVkJHtlcnJvck5vdGV9LCBmZWxsIGJhY2sgdG8gZGVmYXVsdDogJHticmFuY2hOYW1lfS5gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3R4LmRlc2NyaXB0aW9uICYmIGN0eC5yYXRpb25hbGUpIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgSXQgJHtjdHguZGVzY3JpcHRpb259OiAke2N0eC5yYXRpb25hbGV9LCBzbyBpdCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChjdHguZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgSXQgJHtjdHguZGVzY3JpcHRpb259IGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIGlmIChjdHgucmF0aW9uYWxlKSB7XG4gICAgICBjb25kaXRpb25UZXh0ID0gYEEgZGVjaXNpb24gd2FzIG1hZGU6ICR7Y3R4LnJhdGlvbmFsZX0sIHNvIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmRpdGlvblRleHQgPSBgQSBkZWNpc2lvbiB3YXMgbWFkZSwgYW5kIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmA7XG4gICAgfVxuICAgIHJldHVybiBgW0NvbmRpdGlvbl06ICR7Y29uZGl0aW9uVGV4dH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0UmVuZGVyRm9yayhjdHg6IEZvcmtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IGN0eC5jaGlsZHJlbi5qb2luKCcsICcpO1xuICAgIHJldHVybiBgW1BhcmFsbGVsXTogRm9ya2luZyBpbnRvICR7Y3R4LmNoaWxkcmVuLmxlbmd0aH0gcGFyYWxsZWwgcGF0aHM6ICR7bmFtZXN9LmA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJTZWxlY3RlZChjdHg6IFNlbGVjdGVkUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgaWYgKGN0eC5ldmlkZW5jZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IGV2aWRlbmNlID0gY3R4LmV2aWRlbmNlIGFzIGFueTtcbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBldmlkZW5jZS5ydWxlcz8uZmlsdGVyKChyOiBhbnkpID0+IHIubWF0Y2hlZCkgPz8gW107XG4gICAgICBjb25zdCBwYXJ0cyA9IG1hdGNoZWQubWFwKChyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSByLmxhYmVsID8gYCBcIiR7ci5sYWJlbH1cImAgOiAnJztcbiAgICAgICAgaWYgKHIudHlwZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgICBjb25zdCBjb25kcyA9IHIuY29uZGl0aW9uc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGM6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBgJHtjLmtleX0gJHtjLmFjdHVhbFN1bW1hcnl9ICR7Yy5vcH0gJHtKU09OLnN0cmluZ2lmeShjLnRocmVzaG9sZCl9ICR7Yy5yZXN1bHQgPyAnXFx1MjcxMycgOiAnXFx1MjcxNyd9YCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgICAgIHJldHVybiBgJHtyLmJyYW5jaH0ke2xhYmVsfSAoJHtjb25kc30pYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dHMgPSByLmlucHV0cy5tYXAoKGk6IGFueSkgPT4gYCR7aS5rZXl9PSR7aS52YWx1ZVN1bW1hcnl9YCkuam9pbignLCAnKTtcbiAgICAgICAgcmV0dXJuIGAke3IuYnJhbmNofSR7bGFiZWx9ICgke2lucHV0c30pYDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGBbU2VsZWN0ZWRdOiAke2N0eC5zZWxlY3RlZC5sZW5ndGh9IG9mICR7Y3R4LnRvdGFsfSBwYXRocyBzZWxlY3RlZDogJHtwYXJ0cy5qb2luKCc7ICcpfS5gO1xuICAgIH1cbiAgICBjb25zdCBuYW1lcyA9IGN0eC5zZWxlY3RlZC5qb2luKCcsICcpO1xuICAgIHJldHVybiBgW1NlbGVjdGVkXTogJHtjdHguc2VsZWN0ZWQubGVuZ3RofSBvZiAke2N0eC50b3RhbH0gcGF0aHMgc2VsZWN0ZWQgZm9yIGV4ZWN1dGlvbjogJHtuYW1lc30uYDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlclN1YmZsb3coY3R4OiBTdWJmbG93UmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09ICdleGl0Jykge1xuICAgICAgcmV0dXJuIGBFeGl0aW5nIHRoZSAke2N0eC5uYW1lfSBzdWJmbG93LmA7XG4gICAgfVxuICAgIHJldHVybiBjdHguZGVzY3JpcHRpb24gPyBgRW50ZXJpbmcgJHtjdHgubmFtZX06ICR7Y3R4LmRlc2NyaXB0aW9ufS5gIDogYEVudGVyaW5nIHRoZSAke2N0eC5uYW1lfSBzdWJmbG93LmA7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRSZW5kZXJMb29wKGN0eDogTG9vcFJlbmRlckNvbnRleHQpOiBzdHJpbmcge1xuICAgIHJldHVybiBjdHguZGVzY3JpcHRpb25cbiAgICAgID8gYE9uIHBhc3MgJHtjdHguaXRlcmF0aW9ufTogJHtjdHguZGVzY3JpcHRpb259IGFnYWluLmBcbiAgICAgIDogYE9uIHBhc3MgJHtjdHguaXRlcmF0aW9ufSB0aHJvdWdoICR7Y3R4LnRhcmdldH0uYDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckJyZWFrKGN0eDogQnJlYWtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEV4ZWN1dGlvbiBzdG9wcGVkIGF0ICR7Y3R4LnN0YWdlTmFtZX0uYDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFJlbmRlckVycm9yKGN0eDogRXJyb3JSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgICBsZXQgdGV4dCA9IGBBbiBlcnJvciBvY2N1cnJlZCBhdCAke2N0eC5zdGFnZU5hbWV9OiAke2N0eC5tZXNzYWdlfS5gO1xuICAgIGlmIChjdHgudmFsaWRhdGlvbklzc3Vlcykge1xuICAgICAgdGV4dCArPSBgIFZhbGlkYXRpb24gaXNzdWVzOiAke2N0eC52YWxpZGF0aW9uSXNzdWVzfS5gO1xuICAgIH1cbiAgICByZXR1cm4gYFtFcnJvcl06ICR7dGV4dH1gO1xuICB9XG59XG4iXX0=
@@ -30,10 +30,10 @@ export class FlowRecorderDispatcher {
30
30
  return this.recorders.find((r) => r.id === id);
31
31
  }
32
32
  // ── IControlFlowNarrative implementation ──────────────────────────────────
33
- onStageExecuted(stageName, description, traversalContext) {
33
+ onStageExecuted(stageName, description, traversalContext, stageType) {
34
34
  if (this.recorders.length === 0)
35
35
  return;
36
- const event = { stageName, description, traversalContext };
36
+ const event = { stageName, description, traversalContext, stageType };
37
37
  for (const r of this.recorders) {
38
38
  try {
39
39
  r.onStageExecuted?.(event);
@@ -263,4 +263,4 @@ export class FlowRecorderDispatcher {
263
263
  return narrative?.getSentences() ?? [];
264
264
  }
265
265
  }
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJMUQsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLFFBQXNCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsaUJBQWlCO1FBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsZUFBZSxDQUF3QyxFQUFVO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCw2RUFBNkU7SUFFN0UsZUFBZSxDQUFDLFNBQWlCLEVBQUUsV0FBb0IsRUFBRSxnQkFBbUM7UUFDMUYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0s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LEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBd0IsV0FBVyxDQUFDLENBQUM7UUFDM0UsT0FBTyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmxvd1JlY29yZGVyRGlzcGF0Y2hlciDigJQgRmFucyBvdXQgY29udHJvbCBmbG93IGV2ZW50cyB0byBOIGF0dGFjaGVkIEZsb3dSZWNvcmRlcnMuXG4gKlxuICogSW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgc28gaXQgY2FuIHJlcGxhY2UgdGhlIHNpbmdsZVxuICogQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgaW4gdGhlIHRyYXZlcnNlcidzIEhhbmRsZXJEZXBzLlxuICpcbiAqIERlc2lnbiBtaXJyb3JzIFNjb3BlRmFjYWRlLl9pbnZva2VIb29rOiBpdGVyYXRlIHJlY29yZGVycywgY2FsbCBvcHRpb25hbFxuICogaG9va3MsIHN3YWxsb3cgZXJyb3JzIHNvIGEgZmFpbGluZyByZWNvcmRlciBuZXZlciBicmVha3MgZXhlY3V0aW9uLlxuICpcbiAqIFdoZW4gbm8gcmVjb3JkZXJzIGFyZSBhdHRhY2hlZCwgZXZlcnkgbWV0aG9kIGlzIGEgZmFzdCBuby1vcCAoZW1wdHkgYXJyYXkgY2hlY2spLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSwgU2VsZWN0aW9uRXZpZGVuY2UgfSBmcm9tICcuLi8uLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHsgZXh0cmFjdEVycm9ySW5mbyB9IGZyb20gJy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL05hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dCcmVha0V2ZW50LCBGbG93UmVjb3JkZXIsIElDb250cm9sRmxvd05hcnJhdGl2ZSwgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgRmxvd1JlY29yZGVyRGlzcGF0Y2hlciBpbXBsZW1lbnRzIElDb250cm9sRmxvd05hcnJhdGl2ZSB7XG4gIHByaXZhdGUgcmVjb3JkZXJzOiBGbG93UmVjb3JkZXJbXSA9IFtdO1xuXG4gIC8qKiBBdHRhY2ggYSBGbG93UmVjb3JkZXIuIER1cGxpY2F0ZSBJRHMgYXJlIGFsbG93ZWQgKHNhbWUgYXMgc2NvcGUgU2NvcGVSZWNvcmRlcikuICovXG4gIGF0dGFjaChyZWNvcmRlcjogRmxvd1JlY29yZGVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICAvKiogRGV0YWNoIGFsbCBGbG93UmVjb3JkZXJzIHdpdGggdGhlIGdpdmVuIElELiAqL1xuICBkZXRhY2goaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzID0gdGhpcy5yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5IG9mIGF0dGFjaGVkIHJlY29yZGVycy4gKi9cbiAgZ2V0U2NvcGVSZWNvcmRlcnMoKTogRmxvd1JlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yZWNvcmRlcnNdO1xuICB9XG5cbiAgLyoqIEZpbmQgYSByZWNvcmRlciBieSBJRC4gVXNlZnVsIGZvciByZXRyaWV2aW5nIGJ1aWx0LWluIHJlY29yZGVycyBsaWtlIE5hcnJhdGl2ZUZsb3dSZWNvcmRlci4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBGbG93UmVjb3JkZXIgPSBGbG93UmVjb3JkZXI+KGlkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRlcnMuZmluZCgocikgPT4gci5pZCA9PT0gaWQpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIAgSUNvbnRyb2xGbG93TmFycmF0aXZlIGltcGxlbWVudGF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChzdGFnZU5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VFeGVjdXRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvblN0YWdlRXhlY3V0ZWQ6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uTmV4dChmcm9tU3RhZ2U6IHN0cmluZywgdG9TdGFnZTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IGZyb206IGZyb21TdGFnZSwgdG86IHRvU3RhZ2UsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uTmV4dD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25OZXh0OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRlY2lzaW9uKFxuICAgIGRlY2lkZXJOYW1lOiBzdHJpbmcsXG4gICAgY2hvc2VuQnJhbmNoOiBzdHJpbmcsXG4gICAgcmF0aW9uYWxlPzogc3RyaW5nLFxuICAgIGRlY2lkZXJEZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBldmlkZW5jZT86IERlY2lzaW9uRXZpZGVuY2UsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRlY2lkZXI6IGRlY2lkZXJOYW1lLFxuICAgICAgY2hvc2VuOiBjaG9zZW5CcmFuY2gsXG4gICAgICByYXRpb25hbGUsXG4gICAgICBkZXNjcmlwdGlvbjogZGVjaWRlckRlc2NyaXB0aW9uLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGV2aWRlbmNlLFxuICAgIH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRGVjaXNpb24/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25EZWNpc2lvbjogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Gb3JrKHBhcmVudFN0YWdlOiBzdHJpbmcsIGNoaWxkTmFtZXM6IHN0cmluZ1tdLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGFyZW50OiBwYXJlbnRTdGFnZSwgY2hpbGRyZW46IGNoaWxkTmFtZXMsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25Gb3JrPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvbkZvcms6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0ZWQoXG4gICAgcGFyZW50U3RhZ2U6IHN0cmluZyxcbiAgICBzZWxlY3RlZE5hbWVzOiBzdHJpbmdbXSxcbiAgICB0b3RhbENvdW50OiBudW1iZXIsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgZXZpZGVuY2U/OiBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBwYXJlbnQ6IHBhcmVudFN0YWdlLCBzZWxlY3RlZDogc2VsZWN0ZWROYW1lcywgdG90YWw6IHRvdGFsQ291bnQsIHRyYXZlcnNhbENvbnRleHQsIGV2aWRlbmNlIH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU2VsZWN0ZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25TZWxlY3RlZDogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TdWJmbG93RW50cnkoXG4gICAgc3ViZmxvd05hbWU6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ/OiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgbWFwcGVkSW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBuYW1lOiBzdWJmbG93TmFtZSwgc3ViZmxvd0lkLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCwgbWFwcGVkSW5wdXQgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdWJmbG93RW50cnk/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25TdWJmbG93RW50cnk6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoXG4gICAgc3ViZmxvd05hbWU6IHN0cmluZyxcbiAgICBzdWJmbG93SWQ/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgb3V0cHV0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBuYW1lOiBzdWJmbG93TmFtZSwgc3ViZmxvd0lkLCB0cmF2ZXJzYWxDb250ZXh0LCBvdXRwdXRTdGF0ZSB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN1YmZsb3dFeGl0Py4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uU3ViZmxvd0V4aXQ6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoc3ViZmxvd0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHNwZWNTdHJ1Y3R1cmU/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdWJmbG93SWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBzcGVjU3RydWN0dXJlIH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3ViZmxvd1JlZ2lzdGVyZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25TdWJmbG93UmVnaXN0ZXJlZDogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Mb29wKHRhcmdldFN0YWdlOiBzdHJpbmcsIGl0ZXJhdGlvbjogbnVtYmVyLCBkZXNjcmlwdGlvbj86IHN0cmluZywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHRhcmdldDogdGFyZ2V0U3RhZ2UsIGl0ZXJhdGlvbiwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25Mb29wPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvbkxvb3A6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQnJlYWsoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICAgIHByb3BhZ2F0ZWRGcm9tU3ViZmxvdz86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50OiBGbG93QnJlYWtFdmVudCA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIC4uLih0cmF2ZXJzYWxDb250ZXh0ICYmIHsgdHJhdmVyc2FsQ29udGV4dCB9KSxcbiAgICAgIC4uLihyZWFzb24gIT09IHVuZGVmaW5lZCAmJiB7IHJlYXNvbiB9KSxcbiAgICAgIC4uLihwcm9wYWdhdGVkRnJvbVN1YmZsb3cgIT09IHVuZGVmaW5lZCAmJiB7IHByb3BhZ2F0ZWRGcm9tU3ViZmxvdyB9KSxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkJyZWFrPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uQnJlYWs6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3Ioc3RhZ2VOYW1lOiBzdHJpbmcsIGVycm9yTWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3Qgc3RydWN0dXJlZEVycm9yID0gZXh0cmFjdEVycm9ySW5mbyhlcnJvcik7XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgbWVzc2FnZTogZXJyb3JNZXNzYWdlLCBzdHJ1Y3R1cmVkRXJyb3IsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25FcnJvcj8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvbkVycm9yOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblBhdXNlKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBwYXVzZURhdGE6IHVua25vd24sXG4gICAgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgc3RhZ2VJZCwgcGF1c2VEYXRhLCBzdWJmbG93UGF0aCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblBhdXNlPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uUGF1c2U6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVzdW1lKHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZUlkOiBzdHJpbmcsIGhhc0lucHV0OiBib29sZWFuLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgc3RhZ2VOYW1lLCBzdGFnZUlkLCBoYXNJbnB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblJlc3VtZT8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvblJlc3VtZTogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SdW5TdGFydChpbnB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IGlucHV0LCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uUnVuU3RhcnQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25SdW5TdGFydDogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SdW5FbmQob3V0cHV0OiB1bmtub3duLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGF5bG9hZDogb3V0cHV0LCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uUnVuRW5kPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uUnVuRW5kOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzZW50ZW5jZXMgZnJvbSBhbiBhdHRhY2hlZCBOYXJyYXRpdmVGbG93UmVjb3JkZXIgKGxvb2tlZCB1cCBieSBJRCkuXG4gICAqIENhbGxlcnMgdGhhdCBuZWVkIHNlbnRlbmNlcyBzaG91bGQgYXR0YWNoIGEgTmFycmF0aXZlRmxvd1JlY29yZGVyIHdpdGggaWQgJ25hcnJhdGl2ZSdcbiAgICogYW5kIHJldHJpZXZlIGl0IGRpcmVjdGx5IHZpYSBnZXRSZWNvcmRlckJ5SWQoKSBpZiB0aGV5IG5lZWQgdHlwZWQgYWNjZXNzLlxuICAgKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBuYXJyYXRpdmUgPSB0aGlzLmdldFJlY29yZGVyQnlJZDxOYXJyYXRpdmVGbG93UmVjb3JkZXI+KCduYXJyYXRpdmUnKTtcbiAgICByZXR1cm4gbmFycmF0aXZlPy5nZXRTZW50ZW5jZXMoKSA/PyBbXTtcbiAgfVxufVxuIl19
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFHSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFXMUQsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLFFBQXNCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsaUJBQWlCO1FBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsZUFBZSxDQUF3QyxFQUFVO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCw2RUFBNkU7SUFFN0UsZUFBZSxDQUNiLFNBQWlCLEVBQ2pCLFdBQStCLEVBQy9CLGdCQUE4QyxFQUM5QyxTQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyxT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O0lBQ0gsWUFBWTtRQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQXdCLFdBQVcsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIg4oCUIEZhbnMgb3V0IGNvbnRyb2wgZmxvdyBldmVudHMgdG8gTiBhdHRhY2hlZCBGbG93UmVjb3JkZXJzLlxuICpcbiAqIEltcGxlbWVudHMgSUNvbnRyb2xGbG93TmFycmF0aXZlIHNvIGl0IGNhbiByZXBsYWNlIHRoZSBzaW5nbGVcbiAqIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGluIHRoZSB0cmF2ZXJzZXIncyBIYW5kbGVyRGVwcy5cbiAqXG4gKiBEZXNpZ24gbWlycm9ycyBTY29wZUZhY2FkZS5faW52b2tlSG9vazogaXRlcmF0ZSByZWNvcmRlcnMsIGNhbGwgb3B0aW9uYWxcbiAqIGhvb2tzLCBzd2FsbG93IGVycm9ycyBzbyBhIGZhaWxpbmcgcmVjb3JkZXIgbmV2ZXIgYnJlYWtzIGV4ZWN1dGlvbi5cbiAqXG4gKiBXaGVuIG5vIHJlY29yZGVycyBhcmUgYXR0YWNoZWQsIGV2ZXJ5IG1ldGhvZCBpcyBhIGZhc3Qgbm8tb3AgKGVtcHR5IGFycmF5IGNoZWNrKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UsIFNlbGVjdGlvbkV2aWRlbmNlIH0gZnJvbSAnLi4vLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uLy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB7IGV4dHJhY3RFcnJvckluZm8gfSBmcm9tICcuLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcbmltcG9ydCB0eXBlIHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9OYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U3RhZ2VFdmVudCxcbiAgSUNvbnRyb2xGbG93TmFycmF0aXZlLFxuICBTdGFnZVR5cGUsXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgRmxvd1JlY29yZGVyRGlzcGF0Y2hlciBpbXBsZW1lbnRzIElDb250cm9sRmxvd05hcnJhdGl2ZSB7XG4gIHByaXZhdGUgcmVjb3JkZXJzOiBGbG93UmVjb3JkZXJbXSA9IFtdO1xuXG4gIC8qKiBBdHRhY2ggYSBGbG93UmVjb3JkZXIuIER1cGxpY2F0ZSBJRHMgYXJlIGFsbG93ZWQgKHNhbWUgYXMgc2NvcGUgU2NvcGVSZWNvcmRlcikuICovXG4gIGF0dGFjaChyZWNvcmRlcjogRmxvd1JlY29yZGVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICAvKiogRGV0YWNoIGFsbCBGbG93UmVjb3JkZXJzIHdpdGggdGhlIGdpdmVuIElELiAqL1xuICBkZXRhY2goaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzID0gdGhpcy5yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5IG9mIGF0dGFjaGVkIHJlY29yZGVycy4gKi9cbiAgZ2V0U2NvcGVSZWNvcmRlcnMoKTogRmxvd1JlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yZWNvcmRlcnNdO1xuICB9XG5cbiAgLyoqIEZpbmQgYSByZWNvcmRlciBieSBJRC4gVXNlZnVsIGZvciByZXRyaWV2aW5nIGJ1aWx0LWluIHJlY29yZGVycyBsaWtlIE5hcnJhdGl2ZUZsb3dSZWNvcmRlci4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBGbG93UmVjb3JkZXIgPSBGbG93UmVjb3JkZXI+KGlkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRlcnMuZmluZCgocikgPT4gci5pZCA9PT0gaWQpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIAgSUNvbnRyb2xGbG93TmFycmF0aXZlIGltcGxlbWVudGF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHRyYXZlcnNhbENvbnRleHQ6IFRyYXZlcnNhbENvbnRleHQgfCB1bmRlZmluZWQsXG4gICAgc3RhZ2VUeXBlOiBTdGFnZVR5cGUsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1N0YWdlRXZlbnQgPSB7IHN0YWdlTmFtZSwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQsIHN0YWdlVHlwZSB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN0YWdlRXhlY3V0ZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25TdGFnZUV4ZWN1dGVkOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbk5leHQoZnJvbVN0YWdlOiBzdHJpbmcsIHRvU3RhZ2U6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBmcm9tOiBmcm9tU3RhZ2UsIHRvOiB0b1N0YWdlLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbk5leHQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uTmV4dDogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EZWNpc2lvbihcbiAgICBkZWNpZGVyTmFtZTogc3RyaW5nLFxuICAgIGNob3NlbkJyYW5jaDogc3RyaW5nLFxuICAgIHJhdGlvbmFsZT86IHN0cmluZyxcbiAgICBkZWNpZGVyRGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkZWNpZGVyOiBkZWNpZGVyTmFtZSxcbiAgICAgIGNob3NlbjogY2hvc2VuQnJhbmNoLFxuICAgICAgcmF0aW9uYWxlLFxuICAgICAgZGVzY3JpcHRpb246IGRlY2lkZXJEZXNjcmlwdGlvbixcbiAgICAgIHRyYXZlcnNhbENvbnRleHQsXG4gICAgICBldmlkZW5jZSxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkRlY2lzaW9uPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uRGVjaXNpb246ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRm9yayhwYXJlbnRTdGFnZTogc3RyaW5nLCBjaGlsZE5hbWVzOiBzdHJpbmdbXSwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBhcmVudDogcGFyZW50U3RhZ2UsIGNoaWxkcmVuOiBjaGlsZE5hbWVzLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRm9yaz8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25Gb3JrOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNlbGVjdGVkKFxuICAgIHBhcmVudFN0YWdlOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWROYW1lczogc3RyaW5nW10sXG4gICAgdG90YWxDb3VudDogbnVtYmVyLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGV2aWRlbmNlPzogU2VsZWN0aW9uRXZpZGVuY2UsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGFyZW50OiBwYXJlbnRTdGFnZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkTmFtZXMsIHRvdGFsOiB0b3RhbENvdW50LCB0cmF2ZXJzYWxDb250ZXh0LCBldmlkZW5jZSB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblNlbGVjdGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uU2VsZWN0ZWQ6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KFxuICAgIHN1YmZsb3dOYW1lOiBzdHJpbmcsXG4gICAgc3ViZmxvd0lkPzogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIG1hcHBlZElucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgbmFtZTogc3ViZmxvd05hbWUsIHN1YmZsb3dJZCwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQsIG1hcHBlZElucHV0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3ViZmxvd0VudHJ5Py4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uU3ViZmxvd0VudHJ5OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KFxuICAgIHN1YmZsb3dOYW1lOiBzdHJpbmcsXG4gICAgc3ViZmxvd0lkPzogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIG91dHB1dFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgbmFtZTogc3ViZmxvd05hbWUsIHN1YmZsb3dJZCwgdHJhdmVyc2FsQ29udGV4dCwgb3V0cHV0U3RhdGUgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdWJmbG93RXhpdD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvblN1YmZsb3dFeGl0OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblN1YmZsb3dSZWdpc3RlcmVkKHN1YmZsb3dJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBzcGVjU3RydWN0dXJlPzogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgc3ViZmxvd0lkLCBuYW1lLCBkZXNjcmlwdGlvbiwgc3BlY1N0cnVjdHVyZSB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN1YmZsb3dSZWdpc3RlcmVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uU3ViZmxvd1JlZ2lzdGVyZWQ6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uTG9vcCh0YXJnZXRTdGFnZTogc3RyaW5nLCBpdGVyYXRpb246IG51bWJlciwgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyB0YXJnZXQ6IHRhcmdldFN0YWdlLCBpdGVyYXRpb24sIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uTG9vcD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25Mb29wOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJyZWFrKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgICBwcm9wYWdhdGVkRnJvbVN1YmZsb3c/OiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd0JyZWFrRXZlbnQgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICAuLi4odHJhdmVyc2FsQ29udGV4dCAmJiB7IHRyYXZlcnNhbENvbnRleHQgfSksXG4gICAgICAuLi4ocmVhc29uICE9PSB1bmRlZmluZWQgJiYgeyByZWFzb24gfSksXG4gICAgICAuLi4ocHJvcGFnYXRlZEZyb21TdWJmbG93ICE9PSB1bmRlZmluZWQgJiYgeyBwcm9wYWdhdGVkRnJvbVN1YmZsb3cgfSksXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25CcmVhaz8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvbkJyZWFrOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkVycm9yKHN0YWdlTmFtZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0cnVjdHVyZWRFcnJvciA9IGV4dHJhY3RFcnJvckluZm8oZXJyb3IpO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSwgc3RydWN0dXJlZEVycm9yLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRXJyb3I/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25FcnJvcjogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25QYXVzZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgcGF1c2VEYXRhOiB1bmtub3duLFxuICAgIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIHN0YWdlSWQsIHBhdXNlRGF0YSwgc3ViZmxvd1BhdGgsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25QYXVzZT8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvblBhdXNlOiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlc3VtZShzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VJZDogc3RyaW5nLCBoYXNJbnB1dDogYm9vbGVhbiwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgc3RhZ2VJZCwgaGFzSW5wdXQsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25SZXN1bWU/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gRmxvd1JlY29yZGVyRGlzcGF0Y2hlcjogcmVjb3JkZXIgXCIke3IuaWR9XCIgdGhyZXcgaW4gb25SZXN1bWU6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUnVuU3RhcnQoaW5wdXQ6IHVua25vd24sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBwYXlsb2FkOiBpbnB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblJ1blN0YXJ0Py4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSlcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIEZsb3dSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyLmlkfVwiIHRocmV3IGluIG9uUnVuU3RhcnQ6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUnVuRW5kKG91dHB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IG91dHB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblJ1bkVuZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBGbG93UmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7ci5pZH1cIiB0aHJldyBpbiBvblJ1bkVuZDogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc2VudGVuY2VzIGZyb20gYW4gYXR0YWNoZWQgTmFycmF0aXZlRmxvd1JlY29yZGVyIChsb29rZWQgdXAgYnkgSUQpLlxuICAgKiBDYWxsZXJzIHRoYXQgbmVlZCBzZW50ZW5jZXMgc2hvdWxkIGF0dGFjaCBhIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB3aXRoIGlkICduYXJyYXRpdmUnXG4gICAqIGFuZCByZXRyaWV2ZSBpdCBkaXJlY3RseSB2aWEgZ2V0UmVjb3JkZXJCeUlkKCkgaWYgdGhleSBuZWVkIHR5cGVkIGFjY2Vzcy5cbiAgICovXG4gIGdldFNlbnRlbmNlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbmFycmF0aXZlID0gdGhpcy5nZXRSZWNvcmRlckJ5SWQ8TmFycmF0aXZlRmxvd1JlY29yZGVyPignbmFycmF0aXZlJyk7XG4gICAgcmV0dXJuIG5hcnJhdGl2ZT8uZ2V0U2VudGVuY2VzKCkgPz8gW107XG4gIH1cbn1cbiJdfQ==
@@ -17,6 +17,13 @@ export class NarrativeFlowRecorder {
17
17
  this.id = id ?? 'narrative';
18
18
  }
19
19
  onStageExecuted(event) {
20
+ // Only LINEAR stages produce a "moved on to X" narrative line.
21
+ // Decider / fork / selector / subflow-mount stages have their
22
+ // own dedicated narrative lines from onDecision / onFork /
23
+ // onSelected / onSubflowEntry — emitting from here too would
24
+ // double up the narrative.
25
+ if (event.stageType !== 'linear')
26
+ return;
20
27
  if (event.description) {
21
28
  this.sentences.push(`Next step: ${event.description}.`);
22
29
  }
@@ -120,4 +127,4 @@ export class NarrativeFlowRecorder {
120
127
  this.stageNames = [];
121
128
  }
122
129
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL05hcnJhdGl2ZUZsb3dSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFpQkgsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixFQUFFLENBQVM7SUFDWixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLHlFQUF5RTtJQUNqRSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUVoRCxZQUFZLEVBQVc7UUFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBb0I7UUFDekIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0Qs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QztpQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZCxRQUFRLElBQUksdUJBQXVCLFlBQVksR0FBRyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBc0I7UUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxZQUFZO1FBQ1YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFycmF0aXZlRmxvd1JlY29yZGVyIOKAlCBEZWZhdWx0IEZsb3dSZWNvcmRlciB0aGF0IGdlbmVyYXRlcyBwbGFpbi1FbmdsaXNoIG5hcnJhdGl2ZS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBGbG93UmVjb3JkZXIgZXF1aXZhbGVudCBvZiBDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci5cbiAqIFByb2R1Y2VzIHRoZSBzYW1lIHNlbnRlbmNlcywgc2FtZSBmb3JtYXQsIHNhbWUgYmVoYXZpb3Ig4oCUIGJ1dCBhcyBhXG4gKiBwbHVnZ2FibGUgRmxvd1JlY29yZGVyIHRoYXQgY2FuIGJlIHN3YXBwZWQsIGV4dGVuZGVkLCBvciBjb21wb3NlZC5cbiAqXG4gKiBDb25zdW1lcnMgd2hvIHdhbnQgZGlmZmVyZW50IG5hcnJhdGl2ZSBiZWhhdmlvciAod2luZG93ZWQgbG9vcHMsIGFkYXB0aXZlXG4gKiBzdW1tYXJpemF0aW9uLCBldGMuKSBjYW4gcmVwbGFjZSB0aGlzIHdpdGggYSBkaWZmZXJlbnQgRmxvd1JlY29yZGVyLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1BhdXNlRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1Jlc3VtZUV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgTmFycmF0aXZlRmxvd1JlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZW50ZW5jZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBQYXJhbGxlbCBhcnJheTogdGhlIGFjdHVhbCBzdGFnZSBuYW1lIHRoYXQgcHJvZHVjZWQgZWFjaCBzZW50ZW5jZS4gKi9cbiAgcHJpdmF0ZSBzdGFnZU5hbWVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoaWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQgPz8gJ25hcnJhdGl2ZSc7XG4gIH1cblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBOZXh0IHN0ZXA6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2V2ZW50LnN0YWdlTmFtZX0uYCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvbk5leHQoZXZlbnQ6IEZsb3dOZXh0RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE5leHQgc3RlcDogJHtldmVudC5kZXNjcmlwdGlvbn0uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7ZXZlbnQudG99LmApO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC50byk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJyYW5jaE5hbWUgPSBldmVudC5jaG9zZW47XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uICYmIGV2ZW50LnJhdGlvbmFsZSkge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgSXQgJHtldmVudC5kZXNjcmlwdGlvbn06ICR7ZXZlbnQucmF0aW9uYWxlfSwgc28gaXQgY2hvc2UgJHticmFuY2hOYW1lfS5gKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBJdCAke2V2ZW50LmRlc2NyaXB0aW9ufSBhbmQgY2hvc2UgJHticmFuY2hOYW1lfS5gKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnJhdGlvbmFsZSkge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgQSBkZWNpc2lvbiB3YXMgbWFkZTogJHtldmVudC5yYXRpb25hbGV9LCBzbyB0aGUgcGF0aCB0YWtlbiB3YXMgJHticmFuY2hOYW1lfS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgQSBkZWNpc2lvbiB3YXMgbWFkZSwgYW5kIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmApO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5kZWNpZGVyKTtcbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVzID0gZXZlbnQuY2hpbGRyZW4uam9pbignLCAnKTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBGb3JraW5nIGludG8gJHtldmVudC5jaGlsZHJlbi5sZW5ndGh9IHBhcmFsbGVsIHBhdGhzOiAke25hbWVzfS5gKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lcyA9IGV2ZW50LnNlbGVjdGVkLmpvaW4oJywgJyk7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgJHtldmVudC5zZWxlY3RlZC5sZW5ndGh9IG9mICR7ZXZlbnQudG90YWx9IHBhdGhzIHdlcmUgc2VsZWN0ZWQ6ICR7bmFtZXN9LmApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKHVuZGVmaW5lZCk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdzogJHtldmVudC5kZXNjcmlwdGlvbn0uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEVudGVyaW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50Lm5hbWUpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEV4aXRpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5uYW1lKTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgT24gcGFzcyAke2V2ZW50Lml0ZXJhdGlvbn06ICR7ZXZlbnQuZGVzY3JpcHRpb259IGFnYWluLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBPbiBwYXNzICR7ZXZlbnQuaXRlcmF0aW9ufSB0aHJvdWdoICR7ZXZlbnQudGFyZ2V0fS5gKTtcbiAgICB9XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQudGFyZ2V0KTtcbiAgfVxuXG4gIG9uQnJlYWsoZXZlbnQ6IEZsb3dCcmVha0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRXhlY3V0aW9uIHN0b3BwZWQgYXQgJHtldmVudC5zdGFnZU5hbWV9LmApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGxldCBzZW50ZW5jZSA9IGBBbiBlcnJvciBvY2N1cnJlZCBhdCAke2V2ZW50LnN0YWdlTmFtZX06ICR7ZXZlbnQubWVzc2FnZX0uYDtcblxuICAgIC8vIEVucmljaCB3aXRoIGZpZWxkLWxldmVsIGlzc3VlcyB3aGVuIGF2YWlsYWJsZVxuICAgIGlmIChldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzICYmIGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXNzdWVEZXRhaWxzID0gZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlc1xuICAgICAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6ICcocm9vdCknO1xuICAgICAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCc7ICcpO1xuICAgICAgc2VudGVuY2UgKz0gYCBWYWxpZGF0aW9uIGlzc3VlczogJHtpc3N1ZURldGFpbHN9LmA7XG4gICAgfVxuXG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChzZW50ZW5jZSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IEZsb3dQYXVzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRXhlY3V0aW9uIHBhdXNlZCBhdCAke2V2ZW50LnN0YWdlTmFtZX0uYCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uUmVzdW1lKGV2ZW50OiBGbG93UmVzdW1lRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdWZmaXggPSBldmVudC5oYXNJbnB1dCA/ICcgd2l0aCBpbnB1dC4nIDogJy4nO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEV4ZWN1dGlvbiByZXN1bWVkIGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfSR7c3VmZml4fWApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5IG9mIGFjY3VtdWxhdGVkIHNlbnRlbmNlcy4gKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2VudGVuY2VzXTtcbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWNjdW11bGF0ZWQgc2VudGVuY2VzLiBVc2VmdWwgZm9yIHJldXNlIGFjcm9zcyBydW5zLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcyA9IFtdO1xuICAgIHRoaXMuc3RhZ2VOYW1lcyA9IFtdO1xuICB9XG59XG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL05hcnJhdGl2ZUZsb3dSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFpQkgsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixFQUFFLENBQVM7SUFDWixTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLHlFQUF5RTtJQUNqRSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUVoRCxZQUFZLEVBQVc7UUFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsK0RBQStEO1FBQy9ELDhEQUE4RDtRQUM5RCwyREFBMkQ7UUFDM0QsNkRBQTZEO1FBQzdELDJCQUEyQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUTtZQUFFLE9BQU87UUFDekMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBb0I7UUFDekIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FB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RUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFycmF0aXZlRmxvd1JlY29yZGVyIOKAlCBEZWZhdWx0IEZsb3dSZWNvcmRlciB0aGF0IGdlbmVyYXRlcyBwbGFpbi1FbmdsaXNoIG5hcnJhdGl2ZS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBGbG93UmVjb3JkZXIgZXF1aXZhbGVudCBvZiBDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci5cbiAqIFByb2R1Y2VzIHRoZSBzYW1lIHNlbnRlbmNlcywgc2FtZSBmb3JtYXQsIHNhbWUgYmVoYXZpb3Ig4oCUIGJ1dCBhcyBhXG4gKiBwbHVnZ2FibGUgRmxvd1JlY29yZGVyIHRoYXQgY2FuIGJlIHN3YXBwZWQsIGV4dGVuZGVkLCBvciBjb21wb3NlZC5cbiAqXG4gKiBDb25zdW1lcnMgd2hvIHdhbnQgZGlmZmVyZW50IG5hcnJhdGl2ZSBiZWhhdmlvciAod2luZG93ZWQgbG9vcHMsIGFkYXB0aXZlXG4gKiBzdW1tYXJpemF0aW9uLCBldGMuKSBjYW4gcmVwbGFjZSB0aGlzIHdpdGggYSBkaWZmZXJlbnQgRmxvd1JlY29yZGVyLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1BhdXNlRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1Jlc3VtZUV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgTmFycmF0aXZlRmxvd1JlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZW50ZW5jZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBQYXJhbGxlbCBhcnJheTogdGhlIGFjdHVhbCBzdGFnZSBuYW1lIHRoYXQgcHJvZHVjZWQgZWFjaCBzZW50ZW5jZS4gKi9cbiAgcHJpdmF0ZSBzdGFnZU5hbWVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoaWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQgPz8gJ25hcnJhdGl2ZSc7XG4gIH1cblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBMSU5FQVIgc3RhZ2VzIHByb2R1Y2UgYSBcIm1vdmVkIG9uIHRvIFhcIiBuYXJyYXRpdmUgbGluZS5cbiAgICAvLyBEZWNpZGVyIC8gZm9yayAvIHNlbGVjdG9yIC8gc3ViZmxvdy1tb3VudCBzdGFnZXMgaGF2ZSB0aGVpclxuICAgIC8vIG93biBkZWRpY2F0ZWQgbmFycmF0aXZlIGxpbmVzIGZyb20gb25EZWNpc2lvbiAvIG9uRm9yayAvXG4gICAgLy8gb25TZWxlY3RlZCAvIG9uU3ViZmxvd0VudHJ5IOKAlCBlbWl0dGluZyBmcm9tIGhlcmUgdG9vIHdvdWxkXG4gICAgLy8gZG91YmxlIHVwIHRoZSBuYXJyYXRpdmUuXG4gICAgaWYgKGV2ZW50LnN0YWdlVHlwZSAhPT0gJ2xpbmVhcicpIHJldHVybjtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE5leHQgc3RlcDogJHtldmVudC5kZXNjcmlwdGlvbn0uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7ZXZlbnQuc3RhZ2VOYW1lfS5gKTtcbiAgICB9XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uTmV4dChldmVudDogRmxvd05leHRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgTmV4dCBzdGVwOiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgTmV4dCwgaXQgbW92ZWQgb24gdG8gJHtldmVudC50b30uYCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnRvKTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IGV2ZW50LmNob3NlbjtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24gJiYgZXZlbnQucmF0aW9uYWxlKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBJdCAke2V2ZW50LmRlc2NyaXB0aW9ufTogJHtldmVudC5yYXRpb25hbGV9LCBzbyBpdCBjaG9zZSAke2JyYW5jaE5hbWV9LmApO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEl0ICR7ZXZlbnQuZGVzY3JpcHRpb259IGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmApO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQucmF0aW9uYWxlKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBBIGRlY2lzaW9uIHdhcyBtYWRlOiAke2V2ZW50LnJhdGlvbmFsZX0sIHNvIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LmRlY2lkZXIpO1xuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZXMgPSBldmVudC5jaGlsZHJlbi5qb2luKCcsICcpO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEZvcmtpbmcgaW50byAke2V2ZW50LmNoaWxkcmVuLmxlbmd0aH0gcGFyYWxsZWwgcGF0aHM6ICR7bmFtZXN9LmApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKHVuZGVmaW5lZCk7XG4gIH1cblxuICBvblNlbGVjdGVkKGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVzID0gZXZlbnQuc2VsZWN0ZWQuam9pbignLCAnKTtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGAke2V2ZW50LnNlbGVjdGVkLmxlbmd0aH0gb2YgJHtldmVudC50b3RhbH0gcGF0aHMgd2VyZSBzZWxlY3RlZDogJHtuYW1lc30uYCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2godW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFbnRlcmluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93OiAke2V2ZW50LmRlc2NyaXB0aW9ufS5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRW50ZXJpbmcgdGhlICR7ZXZlbnQubmFtZX0gc3ViZmxvdy5gKTtcbiAgICB9XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQubmFtZSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRXhpdGluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93LmApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50Lm5hbWUpO1xuICB9XG5cbiAgb25Mb29wKGV2ZW50OiBGbG93TG9vcEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBPbiBwYXNzICR7ZXZlbnQuaXRlcmF0aW9ufTogJHtldmVudC5kZXNjcmlwdGlvbn0gYWdhaW4uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYE9uIHBhc3MgJHtldmVudC5pdGVyYXRpb259IHRocm91Z2ggJHtldmVudC50YXJnZXR9LmApO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC50YXJnZXQpO1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFeGVjdXRpb24gc3RvcHBlZCBhdCAke2V2ZW50LnN0YWdlTmFtZX0uYCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uRXJyb3IoZXZlbnQ6IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgbGV0IHNlbnRlbmNlID0gYEFuIGVycm9yIG9jY3VycmVkIGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfTogJHtldmVudC5tZXNzYWdlfS5gO1xuXG4gICAgLy8gRW5yaWNoIHdpdGggZmllbGQtbGV2ZWwgaXNzdWVzIHdoZW4gYXZhaWxhYmxlXG4gICAgaWYgKGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMgJiYgZXZlbnQuc3RydWN0dXJlZEVycm9yLmlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc3N1ZURldGFpbHMgPSBldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGlzc3VlLnBhdGguam9pbignLicpIDogJyhyb290KSc7XG4gICAgICAgICAgcmV0dXJuIGAke3BhdGh9OiAke2lzc3VlLm1lc3NhZ2V9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsgJyk7XG4gICAgICBzZW50ZW5jZSArPSBgIFZhbGlkYXRpb24gaXNzdWVzOiAke2lzc3VlRGV0YWlsc30uYDtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHNlbnRlbmNlKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25QYXVzZShldmVudDogRmxvd1BhdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFeGVjdXRpb24gcGF1c2VkIGF0ICR7ZXZlbnQuc3RhZ2VOYW1lfS5gKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25SZXN1bWUoZXZlbnQ6IEZsb3dSZXN1bWVFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN1ZmZpeCA9IGV2ZW50Lmhhc0lucHV0ID8gJyB3aXRoIGlucHV0LicgOiAnLic7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChgRXhlY3V0aW9uIHJlc3VtZWQgYXQgJHtldmVudC5zdGFnZU5hbWV9JHtzdWZmaXh9YCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgZGVmZW5zaXZlIGNvcHkgb2YgYWNjdW11bGF0ZWQgc2VudGVuY2VzLiAqL1xuICBnZXRTZW50ZW5jZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5zZW50ZW5jZXNdO1xuICB9XG5cbiAgLyoqIENsZWFycyBhY2N1bXVsYXRlZCBzZW50ZW5jZXMuIFVzZWZ1bCBmb3IgcmV1c2UgYWNyb3NzIHJ1bnMuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzID0gW107XG4gICAgdGhpcy5zdGFnZU5hbWVzID0gW107XG4gIH1cbn1cbiJdfQ==