footprintjs 10.0.1 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +61 -7
  3. package/README.md +136 -312
  4. package/dist/esm/index.d.ts +62 -2
  5. package/dist/esm/index.js +13 -6
  6. package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
  7. package/dist/esm/lib/attempt/anySignal.js +39 -0
  8. package/dist/esm/lib/attempt/call.d.ts +88 -0
  9. package/dist/esm/lib/attempt/call.js +129 -0
  10. package/dist/esm/lib/attempt/category.d.ts +37 -0
  11. package/dist/esm/lib/attempt/category.js +131 -0
  12. package/dist/esm/lib/attempt/correlation.d.ts +95 -0
  13. package/dist/esm/lib/attempt/correlation.js +178 -0
  14. package/dist/esm/lib/attempt/deadline.d.ts +44 -0
  15. package/dist/esm/lib/attempt/deadline.js +101 -0
  16. package/dist/esm/lib/attempt/decision.d.ts +52 -0
  17. package/dist/esm/lib/attempt/decision.js +134 -0
  18. package/dist/esm/lib/attempt/effect.d.ts +76 -0
  19. package/dist/esm/lib/attempt/effect.js +160 -0
  20. package/dist/esm/lib/attempt/errors.d.ts +41 -0
  21. package/dist/esm/lib/attempt/errors.js +44 -0
  22. package/dist/esm/lib/attempt/index.d.ts +18 -0
  23. package/dist/esm/lib/attempt/index.js +15 -0
  24. package/dist/esm/lib/attempt/name.d.ts +21 -0
  25. package/dist/esm/lib/attempt/name.js +43 -0
  26. package/dist/esm/lib/attempt/observed.d.ts +66 -0
  27. package/dist/esm/lib/attempt/observed.js +171 -0
  28. package/dist/esm/lib/attempt/policy.d.ts +45 -0
  29. package/dist/esm/lib/attempt/policy.js +83 -0
  30. package/dist/esm/lib/attempt/record.d.ts +11 -0
  31. package/dist/esm/lib/attempt/record.js +24 -0
  32. package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
  33. package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
  34. package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
  35. package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
  36. package/dist/esm/lib/attempt/runner.d.ts +157 -0
  37. package/dist/esm/lib/attempt/runner.js +523 -0
  38. package/dist/esm/lib/attempt/standalone.d.ts +47 -0
  39. package/dist/esm/lib/attempt/standalone.js +126 -0
  40. package/dist/esm/lib/attempt/types.d.ts +453 -0
  41. package/dist/esm/lib/attempt/types.js +16 -0
  42. package/dist/esm/lib/budget/index.d.ts +9 -0
  43. package/dist/esm/lib/budget/index.js +9 -0
  44. package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
  45. package/dist/esm/lib/budget/timeBudget.js +666 -0
  46. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
  47. package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
  48. package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
  49. package/dist/esm/lib/builder/retryLoop.js +283 -0
  50. package/dist/esm/lib/builder/types.d.ts +35 -1
  51. package/dist/esm/lib/builder/types.js +1 -1
  52. package/dist/esm/lib/decide/decide.js +2 -2
  53. package/dist/esm/lib/decide/index.d.ts +1 -1
  54. package/dist/esm/lib/decide/index.js +2 -2
  55. package/dist/esm/lib/decide/types.d.ts +3 -0
  56. package/dist/esm/lib/decide/types.js +1 -8
  57. package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
  58. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  59. package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
  60. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
  61. package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
  62. package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
  63. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
  64. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
  65. package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
  66. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
  67. package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
  68. package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
  69. package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
  70. package/dist/esm/lib/engine/handlers/stageError.js +23 -1
  71. package/dist/esm/lib/engine/index.d.ts +2 -2
  72. package/dist/esm/lib/engine/index.js +1 -1
  73. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  74. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
  75. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  76. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  77. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  78. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
  79. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  80. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  81. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  82. package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
  83. package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
  84. package/dist/esm/lib/engine/narrative/index.js +1 -1
  85. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  86. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  87. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  88. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  89. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
  90. package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
  91. package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
  92. package/dist/esm/lib/engine/narrative/types.js +1 -1
  93. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  94. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
  95. package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
  96. package/dist/esm/lib/engine/traversalContext.js +6 -3
  97. package/dist/esm/lib/engine/types.d.ts +52 -57
  98. package/dist/esm/lib/engine/types.js +1 -1
  99. package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
  100. package/dist/esm/lib/errors/terminalFailure.js +60 -0
  101. package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
  102. package/dist/esm/lib/filter/evaluator.js +135 -0
  103. package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
  104. package/dist/esm/lib/ids/idempotencyKey.js +24 -0
  105. package/dist/esm/lib/memory/StageContext.d.ts +123 -3
  106. package/dist/esm/lib/memory/StageContext.js +245 -4
  107. package/dist/esm/lib/memory/attention.d.ts +26 -0
  108. package/dist/esm/lib/memory/attention.js +171 -0
  109. package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
  110. package/dist/esm/lib/memory/borrowedMutation.js +14 -1
  111. package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
  112. package/dist/esm/lib/memory/frameTypes.js +3 -1
  113. package/dist/esm/lib/memory/redaction.d.ts +12 -0
  114. package/dist/esm/lib/memory/redaction.js +54 -5
  115. package/dist/esm/lib/pause/record.js +10 -1
  116. package/dist/esm/lib/pause/types.d.ts +19 -0
  117. package/dist/esm/lib/pause/types.js +17 -1
  118. package/dist/esm/lib/reactive/createTypedScope.js +3 -1
  119. package/dist/esm/lib/reactive/types.d.ts +36 -4
  120. package/dist/esm/lib/reactive/types.js +3 -1
  121. package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
  122. package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
  123. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
  124. package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
  125. package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
  126. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  127. package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
  128. package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
  129. package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
  130. package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
  131. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
  132. package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
  133. package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
  134. package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
  135. package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
  136. package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
  137. package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  138. package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
  139. package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
  140. package/dist/esm/lib/recorder/attemptOTel.js +107 -0
  141. package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
  142. package/dist/esm/lib/recorder/attemptSeries.js +103 -0
  143. package/dist/esm/lib/recorder/hooks.d.ts +9 -0
  144. package/dist/esm/lib/recorder/hooks.js +4 -1
  145. package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
  146. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
  147. package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
  148. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
  149. package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
  150. package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
  151. package/dist/esm/lib/runner/RunnableChart.js +5 -1
  152. package/dist/esm/lib/runner/attach.d.ts +2 -1
  153. package/dist/esm/lib/runner/attach.js +8 -2
  154. package/dist/esm/lib/runner/checkpoint.js +3 -1
  155. package/dist/esm/lib/runner/deadline.d.ts +42 -0
  156. package/dist/esm/lib/runner/deadline.js +90 -0
  157. package/dist/esm/lib/runner/index.d.ts +3 -1
  158. package/dist/esm/lib/runner/index.js +2 -1
  159. package/dist/esm/lib/runner/options.d.ts +17 -0
  160. package/dist/esm/lib/runner/options.js +3 -1
  161. package/dist/esm/lib/runner/recordSink.d.ts +128 -0
  162. package/dist/esm/lib/runner/recordSink.js +296 -0
  163. package/dist/esm/lib/runner/resume.d.ts +3 -0
  164. package/dist/esm/lib/runner/resume.js +22 -2
  165. package/dist/esm/lib/runner/snapshot.d.ts +2 -2
  166. package/dist/esm/lib/runner/snapshot.js +6 -2
  167. package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
  168. package/dist/esm/lib/scope/ScopeFacade.js +304 -7
  169. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  170. package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
  171. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  172. package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
  173. package/dist/esm/lib/scope/runtime.d.ts +3 -0
  174. package/dist/esm/lib/scope/runtime.js +1 -1
  175. package/dist/esm/lib/scope/types.d.ts +6 -0
  176. package/dist/esm/lib/scope/types.js +1 -1
  177. package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
  178. package/dist/esm/lib/sinks/fileSink.js +387 -0
  179. package/dist/esm/recorders.d.ts +8 -2
  180. package/dist/esm/recorders.js +7 -1
  181. package/dist/esm/sinks.d.ts +23 -0
  182. package/dist/esm/sinks.js +23 -0
  183. package/dist/esm/trace.d.ts +2 -2
  184. package/dist/esm/trace.js +1 -1
  185. package/dist/index.js +77 -60
  186. package/dist/lib/attempt/anySignal.js +43 -0
  187. package/dist/lib/attempt/call.js +134 -0
  188. package/dist/lib/attempt/category.js +136 -0
  189. package/dist/lib/attempt/correlation.js +186 -0
  190. package/dist/lib/attempt/deadline.js +112 -0
  191. package/dist/lib/attempt/decision.js +139 -0
  192. package/dist/lib/attempt/effect.js +174 -0
  193. package/dist/lib/attempt/errors.js +49 -0
  194. package/dist/lib/attempt/index.js +26 -0
  195. package/dist/lib/attempt/name.js +48 -0
  196. package/dist/lib/attempt/observed.js +177 -0
  197. package/dist/lib/attempt/policy.js +92 -0
  198. package/dist/lib/attempt/record.js +29 -0
  199. package/dist/lib/attempt/retryLoopContext.js +31 -0
  200. package/dist/lib/attempt/retryLoopTypes.js +3 -0
  201. package/dist/lib/attempt/runner.js +530 -0
  202. package/dist/lib/attempt/standalone.js +130 -0
  203. package/dist/lib/attempt/types.js +17 -0
  204. package/dist/lib/budget/index.js +17 -0
  205. package/dist/lib/budget/timeBudget.js +674 -0
  206. package/dist/lib/builder/FlowChartBuilder.js +199 -9
  207. package/dist/lib/builder/retryLoop.js +287 -0
  208. package/dist/lib/builder/types.js +1 -1
  209. package/dist/lib/decide/decide.js +2 -2
  210. package/dist/lib/decide/index.js +2 -2
  211. package/dist/lib/decide/types.js +1 -8
  212. package/dist/lib/engine/graph/StageNode.js +1 -1
  213. package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
  214. package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
  215. package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
  216. package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
  217. package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
  218. package/dist/lib/engine/handlers/StageRunner.js +36 -9
  219. package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
  220. package/dist/lib/engine/handlers/commitStage.js +24 -5
  221. package/dist/lib/engine/handlers/stageError.js +26 -2
  222. package/dist/lib/engine/index.js +1 -1
  223. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
  224. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  225. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
  226. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  227. package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
  228. package/dist/lib/engine/narrative/index.js +1 -1
  229. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  230. package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  231. package/dist/lib/engine/narrative/recorders/index.js +1 -1
  232. package/dist/lib/engine/narrative/types.js +1 -1
  233. package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
  234. package/dist/lib/engine/traversalContext.js +6 -3
  235. package/dist/lib/engine/types.js +1 -1
  236. package/dist/lib/errors/terminalFailure.js +64 -0
  237. package/dist/lib/filter/evaluator.js +139 -0
  238. package/dist/lib/ids/idempotencyKey.js +28 -0
  239. package/dist/lib/memory/StageContext.js +246 -5
  240. package/dist/lib/memory/attention.js +175 -0
  241. package/dist/lib/memory/borrowedMutation.js +16 -2
  242. package/dist/lib/memory/frameTypes.js +3 -1
  243. package/dist/lib/memory/redaction.js +54 -5
  244. package/dist/lib/pause/record.js +10 -1
  245. package/dist/lib/pause/types.js +17 -1
  246. package/dist/lib/reactive/createTypedScope.js +3 -1
  247. package/dist/lib/reactive/types.js +3 -1
  248. package/dist/lib/recorder/AttemptRecorder.js +417 -0
  249. package/dist/lib/recorder/ControlDepRecorder.js +50 -2
  250. package/dist/lib/recorder/EmitRecorder.js +1 -1
  251. package/dist/lib/recorder/InOutRecorder.js +75 -6
  252. package/dist/lib/recorder/QualityRecorder.js +87 -29
  253. package/dist/lib/recorder/TopologyRecorder.js +76 -2
  254. package/dist/lib/recorder/attemptMetricRows.js +209 -0
  255. package/dist/lib/recorder/attemptMetrics.js +174 -0
  256. package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
  257. package/dist/lib/recorder/attemptOTel.js +111 -0
  258. package/dist/lib/recorder/attemptSeries.js +113 -0
  259. package/dist/lib/recorder/hooks.js +4 -1
  260. package/dist/lib/runner/DeferredObserverTier.js +13 -1
  261. package/dist/lib/runner/ExecutionRuntime.js +57 -5
  262. package/dist/lib/runner/FlowChartExecutor.js +330 -101
  263. package/dist/lib/runner/RunnableChart.js +5 -1
  264. package/dist/lib/runner/attach.js +8 -2
  265. package/dist/lib/runner/checkpoint.js +3 -1
  266. package/dist/lib/runner/deadline.js +94 -0
  267. package/dist/lib/runner/index.js +4 -2
  268. package/dist/lib/runner/options.js +3 -1
  269. package/dist/lib/runner/recordSink.js +302 -0
  270. package/dist/lib/runner/resume.js +22 -2
  271. package/dist/lib/runner/snapshot.js +6 -2
  272. package/dist/lib/scope/ScopeFacade.js +303 -6
  273. package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
  274. package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
  275. package/dist/lib/scope/runtime.js +1 -1
  276. package/dist/lib/scope/types.js +1 -1
  277. package/dist/lib/sinks/fileSink.js +392 -0
  278. package/dist/recorders.js +10 -2
  279. package/dist/sinks.js +32 -0
  280. package/dist/trace.js +1 -1
  281. package/dist/types/index.d.ts +62 -2
  282. package/dist/types/lib/attempt/anySignal.d.ts +19 -0
  283. package/dist/types/lib/attempt/call.d.ts +88 -0
  284. package/dist/types/lib/attempt/category.d.ts +37 -0
  285. package/dist/types/lib/attempt/correlation.d.ts +95 -0
  286. package/dist/types/lib/attempt/deadline.d.ts +44 -0
  287. package/dist/types/lib/attempt/decision.d.ts +52 -0
  288. package/dist/types/lib/attempt/effect.d.ts +76 -0
  289. package/dist/types/lib/attempt/errors.d.ts +41 -0
  290. package/dist/types/lib/attempt/index.d.ts +18 -0
  291. package/dist/types/lib/attempt/name.d.ts +21 -0
  292. package/dist/types/lib/attempt/observed.d.ts +66 -0
  293. package/dist/types/lib/attempt/policy.d.ts +45 -0
  294. package/dist/types/lib/attempt/record.d.ts +11 -0
  295. package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
  296. package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
  297. package/dist/types/lib/attempt/runner.d.ts +157 -0
  298. package/dist/types/lib/attempt/standalone.d.ts +47 -0
  299. package/dist/types/lib/attempt/types.d.ts +453 -0
  300. package/dist/types/lib/budget/index.d.ts +9 -0
  301. package/dist/types/lib/budget/timeBudget.d.ts +136 -0
  302. package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
  303. package/dist/types/lib/builder/retryLoop.d.ts +56 -0
  304. package/dist/types/lib/builder/types.d.ts +35 -1
  305. package/dist/types/lib/decide/index.d.ts +1 -1
  306. package/dist/types/lib/decide/types.d.ts +3 -0
  307. package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
  308. package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
  309. package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
  310. package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
  311. package/dist/types/lib/engine/index.d.ts +2 -2
  312. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  313. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  314. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  315. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  316. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  317. package/dist/types/lib/engine/narrative/index.d.ts +2 -2
  318. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  319. package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  320. package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
  321. package/dist/types/lib/engine/narrative/types.d.ts +74 -5
  322. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  323. package/dist/types/lib/engine/traversalContext.d.ts +7 -2
  324. package/dist/types/lib/engine/types.d.ts +52 -57
  325. package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
  326. package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
  327. package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
  328. package/dist/types/lib/memory/StageContext.d.ts +123 -3
  329. package/dist/types/lib/memory/attention.d.ts +26 -0
  330. package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
  331. package/dist/types/lib/memory/frameTypes.d.ts +38 -0
  332. package/dist/types/lib/memory/redaction.d.ts +12 -0
  333. package/dist/types/lib/pause/types.d.ts +19 -0
  334. package/dist/types/lib/reactive/types.d.ts +36 -4
  335. package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
  336. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
  337. package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
  338. package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
  339. package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
  340. package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
  341. package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
  342. package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
  343. package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  344. package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
  345. package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
  346. package/dist/types/lib/recorder/hooks.d.ts +9 -0
  347. package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
  348. package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
  349. package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
  350. package/dist/types/lib/runner/attach.d.ts +2 -1
  351. package/dist/types/lib/runner/deadline.d.ts +42 -0
  352. package/dist/types/lib/runner/index.d.ts +3 -1
  353. package/dist/types/lib/runner/options.d.ts +17 -0
  354. package/dist/types/lib/runner/recordSink.d.ts +128 -0
  355. package/dist/types/lib/runner/resume.d.ts +3 -0
  356. package/dist/types/lib/runner/snapshot.d.ts +2 -2
  357. package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
  358. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  359. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  360. package/dist/types/lib/scope/runtime.d.ts +3 -0
  361. package/dist/types/lib/scope/types.d.ts +6 -0
  362. package/dist/types/lib/sinks/fileSink.d.ts +135 -0
  363. package/dist/types/recorders.d.ts +8 -2
  364. package/dist/types/sinks.d.ts +23 -0
  365. package/dist/types/trace.d.ts +2 -2
  366. package/package.json +20 -6
  367. package/dist/esm/lib/decide/evaluator.js +0 -130
  368. package/dist/lib/decide/evaluator.js +0 -134
@@ -113,6 +113,19 @@ class FlowRecorderDispatcher {
113
113
  const event = { stageName, message: errorMessage, structuredError, traversalContext, channel: 'flow' };
114
114
  (0, hooks_js_1.fire)(this.recorders, 'onError', event, FLOW_FAILURE);
115
115
  }
116
+ onAttempt(stageName, stageId, record, structuredError, traversalContext) {
117
+ if (this.recorders.length === 0)
118
+ return;
119
+ const event = {
120
+ stageName,
121
+ stageId,
122
+ record,
123
+ ...(structuredError !== undefined && { structuredError }),
124
+ traversalContext,
125
+ channel: 'flow',
126
+ };
127
+ (0, hooks_js_1.fire)(this.recorders, 'onAttempt', event, FLOW_FAILURE);
128
+ }
116
129
  onStageRetry(stageName, stageId, attempt, maxAttempts, delayMs, structuredError, traversalContext) {
117
130
  if (this.recorders.length === 0)
118
131
  return;
@@ -166,10 +179,14 @@ class FlowRecorderDispatcher {
166
179
  const event = { payload: output, traversalContext };
167
180
  (0, hooks_js_1.fire)(this.recorders, 'onRunEnd', event, FLOW_FAILURE);
168
181
  }
169
- onRunFailed(error, traversalContext) {
182
+ onRunFailed(error, traversalContext, failure) {
170
183
  if (this.recorders.length === 0)
171
184
  return;
172
185
  const event = { structuredError: error, traversalContext };
186
+ // Keep the new safe projection intact across recorder fan-out, without
187
+ // changing the established mutability of the other event fields.
188
+ if (failure)
189
+ Object.defineProperty(event, 'failure', { value: failure, enumerable: true });
173
190
  (0, hooks_js_1.fire)(this.recorders, 'onRunFailed', event, FLOW_FAILURE);
174
191
  }
175
192
  /**
@@ -183,4 +200,4 @@ class FlowRecorderDispatcher {
183
200
  }
184
201
  }
185
202
  exports.FlowRecorderDispatcher = FlowRecorderDispatcher;
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBSUgsc0RBQThEO0FBYTlELG1HQUFtRztBQUNuRyxNQUFNLFlBQVksR0FBRyxJQUFBLHdCQUFhLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUU3RCxNQUFhLHNCQUFzQjtJQUN6QixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLFFBQXNCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsaUJBQWlCO1FBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsZUFBZSxDQUF3QyxFQUFVO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCw2RUFBNkU7SUFFN0UsZUFBZSxDQUNiLFNBQWlCLEVBQ2pCLFdBQStCLEVBQy9CLGdCQUE4QyxFQUM5QyxTQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFB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QUFPLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBck9ELHdEQXFPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmxvd1JlY29yZGVyRGlzcGF0Y2hlciDigJQgRmFucyBvdXQgY29udHJvbCBmbG93IGV2ZW50cyB0byBOIGF0dGFjaGVkIEZsb3dSZWNvcmRlcnMuXG4gKlxuICogSW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgc28gaXQgY2FuIHJlcGxhY2UgdGhlIHNpbmdsZVxuICogQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgaW4gdGhlIHRyYXZlcnNlcidzIEhhbmRsZXJEZXBzLlxuICpcbiAqIEV2ZXJ5IGV2ZW50IGdvZXMgdGhyb3VnaCBgcmVjb3JkZXIvaG9va3MudHMgwrcgZmlyZWAgKHRoZSBvbmUgcGVyLXJlY29yZGVyIGxvb3ApOiBhIGZhaWxpbmdcbiAqIHJlY29yZGVyIGlzIHdhcm5lZCBhYm91dCBpbiBkZXYgbW9kZSBhbmQgbmV2ZXIgYnJlYWtzIGV4ZWN1dGlvbiDigJQgZXZlbiB3aGVuIHdoYXQgaXQgdGhyZXdcbiAqIGNhbm5vdCBiZSB0dXJuZWQgaW50byBhIHN0cmluZy5cbiAqXG4gKiBXaGVuIG5vIHJlY29yZGVycyBhcmUgYXR0YWNoZWQsIGV2ZXJ5IG1ldGhvZCBpcyBhIGZhc3Qgbm8tb3AgKGVtcHR5IGFycmF5IGNoZWNrKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UsIFNlbGVjdGlvbkV2aWRlbmNlIH0gZnJvbSAnLi4vLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4uLy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHsgZmlyZSwgd2FybkluRGV2TW9kZSB9IGZyb20gJy4uLy4uL3JlY29yZGVyL2hvb2tzLmpzJztcbmltcG9ydCB0eXBlIHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9OYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1Rocm90dGxlZEV2ZW50LFxuICBJQ29udHJvbEZsb3dOYXJyYXRpdmUsXG4gIFN0YWdlVHlwZSxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBUaGUgZmxvdyBjaGFubmVsJ3MgaXNvbGF0aW9uOiBhIHRocm93aW5nIHJlY29yZGVyIGlzIHdhcm5lZCBhYm91dCBpbiBkZXYgbW9kZSwgdGhlbiBza2lwcGVkLiAqL1xuY29uc3QgRkxPV19GQUlMVVJFID0gd2FybkluRGV2TW9kZSgnRmxvd1JlY29yZGVyRGlzcGF0Y2hlcicpO1xuXG5leHBvcnQgY2xhc3MgRmxvd1JlY29yZGVyRGlzcGF0Y2hlciBpbXBsZW1lbnRzIElDb250cm9sRmxvd05hcnJhdGl2ZSB7XG4gIHByaXZhdGUgcmVjb3JkZXJzOiBGbG93UmVjb3JkZXJbXSA9IFtdO1xuXG4gIC8qKiBBdHRhY2ggYSBGbG93UmVjb3JkZXIuIER1cGxpY2F0ZSBJRHMgYXJlIGFsbG93ZWQgKHNhbWUgYXMgc2NvcGUgU2NvcGVSZWNvcmRlcikuICovXG4gIGF0dGFjaChyZWNvcmRlcjogRmxvd1JlY29yZGVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICAvKiogRGV0YWNoIGFsbCBGbG93UmVjb3JkZXJzIHdpdGggdGhlIGdpdmVuIElELiAqL1xuICBkZXRhY2goaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzID0gdGhpcy5yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5IG9mIGF0dGFjaGVkIHJlY29yZGVycy4gKi9cbiAgZ2V0U2NvcGVSZWNvcmRlcnMoKTogRmxvd1JlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yZWNvcmRlcnNdO1xuICB9XG5cbiAgLyoqIEZpbmQgYSByZWNvcmRlciBieSBJRC4gVXNlZnVsIGZvciByZXRyaWV2aW5nIGJ1aWx0LWluIHJlY29yZGVycyBsaWtlIE5hcnJhdGl2ZUZsb3dSZWNvcmRlci4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBGbG93UmVjb3JkZXIgPSBGbG93UmVjb3JkZXI+KGlkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRlcnMuZmluZCgocikgPT4gci5pZCA9PT0gaWQpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIAgSUNvbnRyb2xGbG93TmFycmF0aXZlIGltcGxlbWVudGF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3RhZ2VFeGVjdXRlZChcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHRyYXZlcnNhbENvbnRleHQ6IFRyYXZlcnNhbENvbnRleHQgfCB1bmRlZmluZWQsXG4gICAgc3RhZ2VUeXBlOiBTdGFnZVR5cGUsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1N0YWdlRXZlbnQgPSB7IHN0YWdlTmFtZSwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQsIHN0YWdlVHlwZSB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN0YWdlRXhlY3V0ZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uTmV4dChmcm9tU3RhZ2U6IHN0cmluZywgdG9TdGFnZTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IGZyb206IGZyb21TdGFnZSwgdG86IHRvU3RhZ2UsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uTmV4dCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25EZWNpc2lvbihcbiAgICBkZWNpZGVyTmFtZTogc3RyaW5nLFxuICAgIGNob3NlbkJyYW5jaDogc3RyaW5nLFxuICAgIHJhdGlvbmFsZT86IHN0cmluZyxcbiAgICBkZWNpZGVyRGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkZWNpZGVyOiBkZWNpZGVyTmFtZSxcbiAgICAgIGNob3NlbjogY2hvc2VuQnJhbmNoLFxuICAgICAgcmF0aW9uYWxlLFxuICAgICAgZGVzY3JpcHRpb246IGRlY2lkZXJEZXNjcmlwdGlvbixcbiAgICAgIHRyYXZlcnNhbENvbnRleHQsXG4gICAgICBldmlkZW5jZSxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbkRlY2lzaW9uJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkZvcmsocGFyZW50U3RhZ2U6IHN0cmluZywgY2hpbGROYW1lczogc3RyaW5nW10sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBwYXJlbnQ6IHBhcmVudFN0YWdlLCBjaGlsZHJlbjogY2hpbGROYW1lcywgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbkZvcmsnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoXG4gICAgcGFyZW50U3RhZ2U6IHN0cmluZyxcbiAgICBzZWxlY3RlZE5hbWVzOiBzdHJpbmdbXSxcbiAgICB0b3RhbENvdW50OiBudW1iZXIsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICAgZXZpZGVuY2U/OiBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBwYXJlbnQ6IHBhcmVudFN0YWdlLCBzZWxlY3RlZDogc2VsZWN0ZWROYW1lcywgdG90YWw6IHRvdGFsQ291bnQsIHRyYXZlcnNhbENvbnRleHQsIGV2aWRlbmNlIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU2VsZWN0ZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KFxuICAgIHN1YmZsb3dOYW1lOiBzdHJpbmcsXG4gICAgc3ViZmxvd0lkPzogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIG1hcHBlZElucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgbmFtZTogc3ViZmxvd05hbWUsIHN1YmZsb3dJZCwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQsIG1hcHBlZElucHV0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU3ViZmxvd0VudHJ5JywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KFxuICAgIHN1YmZsb3dOYW1lOiBzdHJpbmcsXG4gICAgc3ViZmxvd0lkPzogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIG91dHB1dFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgbmFtZTogc3ViZmxvd05hbWUsIHN1YmZsb3dJZCwgdHJhdmVyc2FsQ29udGV4dCwgb3V0cHV0U3RhdGUgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TdWJmbG93RXhpdCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdWJmbG93UmVnaXN0ZXJlZChzdWJmbG93SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZywgc3BlY1N0cnVjdHVyZT86IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN1YmZsb3dJZCwgbmFtZSwgZGVzY3JpcHRpb24sIHNwZWNTdHJ1Y3R1cmUgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TdWJmbG93UmVnaXN0ZXJlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25Mb29wKHRhcmdldFN0YWdlOiBzdHJpbmcsIGl0ZXJhdGlvbjogbnVtYmVyLCBkZXNjcmlwdGlvbj86IHN0cmluZywgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHRhcmdldDogdGFyZ2V0U3RhZ2UsIGl0ZXJhdGlvbiwgZGVzY3JpcHRpb24sIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25Mb29wJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkJyZWFrKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgICBwcm9wYWdhdGVkRnJvbVN1YmZsb3c/OiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd0JyZWFrRXZlbnQgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICAuLi4odHJhdmVyc2FsQ29udGV4dCAmJiB7IHRyYXZlcnNhbENvbnRleHQgfSksXG4gICAgICAuLi4ocmVhc29uICE9PSB1bmRlZmluZWQgJiYgeyByZWFzb24gfSksXG4gICAgICAuLi4ocHJvcGFnYXRlZEZyb21TdWJmbG93ICE9PSB1bmRlZmluZWQgJiYgeyBwcm9wYWdhdGVkRnJvbVN1YmZsb3cgfSksXG4gICAgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25CcmVhaycsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25FcnJvcihcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgc3RhZ2VOYW1lLCBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsIHN0cnVjdHVyZWRFcnJvciwgdHJhdmVyc2FsQ29udGV4dCwgY2hhbm5lbDogJ2Zsb3cnIGFzIGNvbnN0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uRXJyb3InLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uU3RhZ2VSZXRyeShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgYXR0ZW1wdDogbnVtYmVyLFxuICAgIG1heEF0dGVtcHRzOiBudW1iZXIsXG4gICAgZGVsYXlNczogbnVtYmVyLFxuICAgIHN0cnVjdHVyZWRFcnJvcjogU3RydWN0dXJlZEVycm9ySW5mbyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50OiBGbG93U3RhZ2VSZXRyeUV2ZW50ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIGF0dGVtcHQsXG4gICAgICBtYXhBdHRlbXB0cyxcbiAgICAgIGRlbGF5TXMsXG4gICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmVkRXJyb3IubWVzc2FnZSxcbiAgICAgIHN0cnVjdHVyZWRFcnJvcixcbiAgICAgIHRyYXZlcnNhbENvbnRleHQsXG4gICAgICBjaGFubmVsOiAnZmxvdycgYXMgY29uc3QsXG4gICAgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TdGFnZVJldHJ5JywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblRocm90dGxlZChcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dUaHJvdHRsZWRFdmVudCA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQsXG4gICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmVkRXJyb3IubWVzc2FnZSxcbiAgICAgIHN0cnVjdHVyZWRFcnJvcixcbiAgICAgIHRyYXZlcnNhbENvbnRleHQsXG4gICAgICBjaGFubmVsOiAnZmxvdycgYXMgY29uc3QsXG4gICAgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25UaHJvdHRsZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uUGF1c2UoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2VJZDogc3RyaW5nLFxuICAgIHBhdXNlRGF0YTogdW5rbm93bixcbiAgICBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgc3RhZ2VOYW1lLCBzdGFnZUlkLCBwYXVzZURhdGEsIHN1YmZsb3dQYXRoLCB0cmF2ZXJzYWxDb250ZXh0LCBjaGFubmVsOiAnZmxvdycgYXMgY29uc3QgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25QYXVzZScsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SZXN1bWUoc3RhZ2VOYW1lOiBzdHJpbmcsIHN0YWdlSWQ6IHN0cmluZywgaGFzSW5wdXQ6IGJvb2xlYW4sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIHN0YWdlSWQsIGhhc0lucHV0LCB0cmF2ZXJzYWxDb250ZXh0LCBjaGFubmVsOiAnZmxvdycgYXMgY29uc3QgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25SZXN1bWUnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uUnVuU3RhcnQoaW5wdXQ6IHVua25vd24sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBwYXlsb2FkOiBpbnB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJ1blN0YXJ0JywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblJ1bkVuZChvdXRwdXQ6IHVua25vd24sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBwYXlsb2FkOiBvdXRwdXQsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25SdW5FbmQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uUnVuRmFpbGVkKGVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgc3RydWN0dXJlZEVycm9yOiBlcnJvciwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJ1bkZhaWxlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc2VudGVuY2VzIGZyb20gYW4gYXR0YWNoZWQgTmFycmF0aXZlRmxvd1JlY29yZGVyIChsb29rZWQgdXAgYnkgSUQpLlxuICAgKiBDYWxsZXJzIHRoYXQgbmVlZCBzZW50ZW5jZXMgc2hvdWxkIGF0dGFjaCBhIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB3aXRoIGlkICduYXJyYXRpdmUnXG4gICAqIGFuZCByZXRyaWV2ZSBpdCBkaXJlY3RseSB2aWEgZ2V0UmVjb3JkZXJCeUlkKCkgaWYgdGhleSBuZWVkIHR5cGVkIGFjY2Vzcy5cbiAgICovXG4gIGdldFNlbnRlbmNlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbmFycmF0aXZlID0gdGhpcy5nZXRSZWNvcmRlckJ5SWQ8TmFycmF0aXZlRmxvd1JlY29yZGVyPignbmFycmF0aXZlJyk7XG4gICAgcmV0dXJuIG5hcnJhdGl2ZT8uZ2V0U2VudGVuY2VzKCkgPz8gW107XG4gIH1cbn1cbiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd1JlY29yZGVyRGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL25hcnJhdGl2ZS9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBTUgsc0RBQThEO0FBZTlELG1HQUFtRztBQUNuRyxNQUFNLFlBQVksR0FBRyxJQUFBLHdCQUFhLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUU3RCxNQUFhLHNCQUFzQjtJQUN6QixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLFFBQXNCO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsaUJBQWlCO1FBQ2YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsZUFBZSxDQUF3QyxFQUFVO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCw2RUFBNkU7SUFFN0UsZUFBZSxDQUNiLFNBQWlCLEVBQ2pCLFdBQStCLEVBQy9CLGdCQUE4QyxFQUM5QyxTQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFB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RSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUEwQixFQUFFLGdCQUFtQyxFQUFFLE9BQWdDO1FBQzNHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsTUFBTSxLQUFLLEdBQXVCLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9FLHVFQUF1RTtRQUN2RSxpRUFBaUU7UUFDakUsSUFBSSxPQUFPO1lBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRixJQUFBLGVBQUksRUFBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZO1FBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBd0IsV0FBVyxDQUFDLENBQUM7UUFDM0UsT0FBTyxTQUFTLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pDLENBQUM7Q0FDRjtBQTNQRCx3REEyUEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIg4oCUIEZhbnMgb3V0IGNvbnRyb2wgZmxvdyBldmVudHMgdG8gTiBhdHRhY2hlZCBGbG93UmVjb3JkZXJzLlxuICpcbiAqIEltcGxlbWVudHMgSUNvbnRyb2xGbG93TmFycmF0aXZlIHNvIGl0IGNhbiByZXBsYWNlIHRoZSBzaW5nbGVcbiAqIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yIGluIHRoZSB0cmF2ZXJzZXIncyBIYW5kbGVyRGVwcy5cbiAqXG4gKiBFdmVyeSBldmVudCBnb2VzIHRocm91Z2ggYHJlY29yZGVyL2hvb2tzLnRzIMK3IGZpcmVgICh0aGUgb25lIHBlci1yZWNvcmRlciBsb29wKTogYSBmYWlsaW5nXG4gKiByZWNvcmRlciBpcyB3YXJuZWQgYWJvdXQgaW4gZGV2IG1vZGUgYW5kIG5ldmVyIGJyZWFrcyBleGVjdXRpb24g4oCUIGV2ZW4gd2hlbiB3aGF0IGl0IHRocmV3XG4gKiBjYW5ub3QgYmUgdHVybmVkIGludG8gYSBzdHJpbmcuXG4gKlxuICogV2hlbiBubyByZWNvcmRlcnMgYXJlIGF0dGFjaGVkLCBldmVyeSBtZXRob2QgaXMgYSBmYXN0IG5vLW9wIChlbXB0eSBhcnJheSBjaGVjaykuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkIH0gZnJvbSAnLi4vLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UsIFNlbGVjdGlvbkV2aWRlbmNlIH0gZnJvbSAnLi4vLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlZEVycm9ySW5mbyB9IGZyb20gJy4uLy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBUZXJtaW5hbEZhaWx1cmVDb250ZXh0IH0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlcm1pbmFsRmFpbHVyZS5qcyc7XG5pbXBvcnQgeyBmaXJlLCB3YXJuSW5EZXZNb2RlIH0gZnJvbSAnLi4vLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXJyYXRpdmVGbG93UmVjb3JkZXIgfSBmcm9tICcuL05hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5GYWlsZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgSUNvbnRyb2xGbG93TmFycmF0aXZlLFxuICBTdGFnZVR5cGUsXG4gIFRyYXZlcnNhbENvbnRleHQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogVGhlIGZsb3cgY2hhbm5lbCdzIGlzb2xhdGlvbjogYSB0aHJvd2luZyByZWNvcmRlciBpcyB3YXJuZWQgYWJvdXQgaW4gZGV2IG1vZGUsIHRoZW4gc2tpcHBlZC4gKi9cbmNvbnN0IEZMT1dfRkFJTFVSRSA9IHdhcm5JbkRldk1vZGUoJ0Zsb3dSZWNvcmRlckRpc3BhdGNoZXInKTtcblxuZXhwb3J0IGNsYXNzIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIgaW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUge1xuICBwcml2YXRlIHJlY29yZGVyczogRmxvd1JlY29yZGVyW10gPSBbXTtcblxuICAvKiogQXR0YWNoIGEgRmxvd1JlY29yZGVyLiBEdXBsaWNhdGUgSURzIGFyZSBhbGxvd2VkIChzYW1lIGFzIHNjb3BlIFNjb3BlUmVjb3JkZXIpLiAqL1xuICBhdHRhY2gocmVjb3JkZXI6IEZsb3dSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBhbGwgRmxvd1JlY29yZGVycyB3aXRoIHRoZSBnaXZlbiBJRC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBkZWZlbnNpdmUgY29weSBvZiBhdHRhY2hlZCByZWNvcmRlcnMuICovXG4gIGdldFNjb3BlUmVjb3JkZXJzKCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIGEgcmVjb3JkZXIgYnkgSUQuIFVzZWZ1bCBmb3IgcmV0cmlldmluZyBidWlsdC1pbiByZWNvcmRlcnMgbGlrZSBOYXJyYXRpdmVGbG93UmVjb3JkZXIuICovXG4gIGdldFJlY29yZGVyQnlJZDxUIGV4dGVuZHMgRmxvd1JlY29yZGVyID0gRmxvd1JlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSAIElDb250cm9sRmxvd05hcnJhdGl2ZSBpbXBsZW1lbnRhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblN0YWdlRXhlY3V0ZWQoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0IHwgdW5kZWZpbmVkLFxuICAgIHN0YWdlVHlwZTogU3RhZ2VUeXBlLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dTdGFnZUV2ZW50ID0geyBzdGFnZU5hbWUsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0LCBzdGFnZVR5cGUgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25TdGFnZUV4ZWN1dGVkJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbk5leHQoZnJvbVN0YWdlOiBzdHJpbmcsIHRvU3RhZ2U6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBmcm9tOiBmcm9tU3RhZ2UsIHRvOiB0b1N0YWdlLCBkZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbk5leHQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uRGVjaXNpb24oXG4gICAgZGVjaWRlck5hbWU6IHN0cmluZyxcbiAgICBjaG9zZW5CcmFuY2g6IHN0cmluZyxcbiAgICByYXRpb25hbGU/OiBzdHJpbmcsXG4gICAgZGVjaWRlckRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGV2aWRlbmNlPzogRGVjaXNpb25FdmlkZW5jZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGVjaWRlcjogZGVjaWRlck5hbWUsXG4gICAgICBjaG9zZW46IGNob3NlbkJyYW5jaCxcbiAgICAgIHJhdGlvbmFsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWNpZGVyRGVzY3JpcHRpb24sXG4gICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgZXZpZGVuY2UsXG4gICAgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25EZWNpc2lvbicsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25Gb3JrKHBhcmVudFN0YWdlOiBzdHJpbmcsIGNoaWxkTmFtZXM6IHN0cmluZ1tdLCB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGFyZW50OiBwYXJlbnRTdGFnZSwgY2hpbGRyZW46IGNoaWxkTmFtZXMsIHRyYXZlcnNhbENvbnRleHQgfTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25Gb3JrJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblNlbGVjdGVkKFxuICAgIHBhcmVudFN0YWdlOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWROYW1lczogc3RyaW5nW10sXG4gICAgdG90YWxDb3VudDogbnVtYmVyLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICAgIGV2aWRlbmNlPzogU2VsZWN0aW9uRXZpZGVuY2UsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudCA9IHsgcGFyZW50OiBwYXJlbnRTdGFnZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkTmFtZXMsIHRvdGFsOiB0b3RhbENvdW50LCB0cmF2ZXJzYWxDb250ZXh0LCBldmlkZW5jZSB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblNlbGVjdGVkJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShcbiAgICBzdWJmbG93TmFtZTogc3RyaW5nLFxuICAgIHN1YmZsb3dJZD86IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBtYXBwZWRJbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IG5hbWU6IHN1YmZsb3dOYW1lLCBzdWJmbG93SWQsIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0LCBtYXBwZWRJbnB1dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN1YmZsb3dFbnRyeScsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChcbiAgICBzdWJmbG93TmFtZTogc3RyaW5nLFxuICAgIHN1YmZsb3dJZD86IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICBvdXRwdXRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IG5hbWU6IHN1YmZsb3dOYW1lLCBzdWJmbG93SWQsIHRyYXZlcnNhbENvbnRleHQsIG91dHB1dFN0YXRlIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU3ViZmxvd0V4aXQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoc3ViZmxvd0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHNwZWNTdHJ1Y3R1cmU/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdWJmbG93SWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBzcGVjU3RydWN0dXJlIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uU3ViZmxvd1JlZ2lzdGVyZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uTG9vcCh0YXJnZXRTdGFnZTogc3RyaW5nLCBpdGVyYXRpb246IG51bWJlciwgZGVzY3JpcHRpb24/OiBzdHJpbmcsIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyB0YXJnZXQ6IHRhcmdldFN0YWdlLCBpdGVyYXRpb24sIGRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uTG9vcCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25CcmVhayhcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICAgcHJvcGFnYXRlZEZyb21TdWJmbG93Pzogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dCcmVha0V2ZW50ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgLi4uKHRyYXZlcnNhbENvbnRleHQgJiYgeyB0cmF2ZXJzYWxDb250ZXh0IH0pLFxuICAgICAgLi4uKHJlYXNvbiAhPT0gdW5kZWZpbmVkICYmIHsgcmVhc29uIH0pLFxuICAgICAgLi4uKHByb3BhZ2F0ZWRGcm9tU3ViZmxvdyAhPT0gdW5kZWZpbmVkICYmIHsgcHJvcGFnYXRlZEZyb21TdWJmbG93IH0pLFxuICAgIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uQnJlYWsnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uRXJyb3IoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgbWVzc2FnZTogZXJyb3JNZXNzYWdlLCBzdHJ1Y3R1cmVkRXJyb3IsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvbkVycm9yJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvbkF0dGVtcHQoXG4gICAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2VJZDogc3RyaW5nLFxuICAgIHJlY29yZDogQXR0ZW1wdFJlY29yZCxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8gfCB1bmRlZmluZWQsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd0F0dGVtcHRFdmVudCA9IHtcbiAgICAgIHN0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQsXG4gICAgICByZWNvcmQsXG4gICAgICAuLi4oc3RydWN0dXJlZEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBzdHJ1Y3R1cmVkRXJyb3IgfSksXG4gICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgY2hhbm5lbDogJ2Zsb3cnIGFzIGNvbnN0LFxuICAgIH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uQXR0ZW1wdCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25TdGFnZVJldHJ5KFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBhdHRlbXB0OiBudW1iZXIsXG4gICAgbWF4QXR0ZW1wdHM6IG51bWJlcixcbiAgICBkZWxheU1zOiBudW1iZXIsXG4gICAgc3RydWN0dXJlZEVycm9yOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQ6IEZsb3dTdGFnZVJldHJ5RXZlbnQgPSB7XG4gICAgICBzdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkLFxuICAgICAgYXR0ZW1wdCxcbiAgICAgIG1heEF0dGVtcHRzLFxuICAgICAgZGVsYXlNcyxcbiAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyZWRFcnJvci5tZXNzYWdlLFxuICAgICAgc3RydWN0dXJlZEVycm9yLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblN0YWdlUmV0cnknLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uVGhyb3R0bGVkKFxuICAgIHN0YWdlTmFtZTogc3RyaW5nLFxuICAgIHN0YWdlSWQ6IHN0cmluZyxcbiAgICBzdHJ1Y3R1cmVkRXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1Rocm90dGxlZEV2ZW50ID0ge1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZCxcbiAgICAgIG1lc3NhZ2U6IHN0cnVjdHVyZWRFcnJvci5tZXNzYWdlLFxuICAgICAgc3RydWN0dXJlZEVycm9yLFxuICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCxcbiAgICB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblRocm90dGxlZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25QYXVzZShcbiAgICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZUlkOiBzdHJpbmcsXG4gICAgcGF1c2VEYXRhOiB1bmtub3duLFxuICAgIHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0cmF2ZXJzYWxDb250ZXh0PzogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGV2ZW50ID0geyBzdGFnZU5hbWUsIHN0YWdlSWQsIHBhdXNlRGF0YSwgc3ViZmxvd1BhdGgsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblBhdXNlJywgZXZlbnQsIEZMT1dfRkFJTFVSRSk7XG4gIH1cblxuICBvblJlc3VtZShzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VJZDogc3RyaW5nLCBoYXNJbnB1dDogYm9vbGVhbiwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHN0YWdlTmFtZSwgc3RhZ2VJZCwgaGFzSW5wdXQsIHRyYXZlcnNhbENvbnRleHQsIGNoYW5uZWw6ICdmbG93JyBhcyBjb25zdCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJlc3VtZScsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SdW5TdGFydChpbnB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IGlucHV0LCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgZmlyZSh0aGlzLnJlY29yZGVycywgJ29uUnVuU3RhcnQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIG9uUnVuRW5kKG91dHB1dDogdW5rbm93biwgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZXZlbnQgPSB7IHBheWxvYWQ6IG91dHB1dCwgdHJhdmVyc2FsQ29udGV4dCB9O1xuICAgIGZpcmUodGhpcy5yZWNvcmRlcnMsICdvblJ1bkVuZCcsIGV2ZW50LCBGTE9XX0ZBSUxVUkUpO1xuICB9XG5cbiAgb25SdW5GYWlsZWQoZXJyb3I6IFN0cnVjdHVyZWRFcnJvckluZm8sIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LCBmYWlsdXJlPzogVGVybWluYWxGYWlsdXJlQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBldmVudDogRmxvd1J1bkZhaWxlZEV2ZW50ID0geyBzdHJ1Y3R1cmVkRXJyb3I6IGVycm9yLCB0cmF2ZXJzYWxDb250ZXh0IH07XG4gICAgLy8gS2VlcCB0aGUgbmV3IHNhZmUgcHJvamVjdGlvbiBpbnRhY3QgYWNyb3NzIHJlY29yZGVyIGZhbi1vdXQsIHdpdGhvdXRcbiAgICAvLyBjaGFuZ2luZyB0aGUgZXN0YWJsaXNoZWQgbXV0YWJpbGl0eSBvZiB0aGUgb3RoZXIgZXZlbnQgZmllbGRzLlxuICAgIGlmIChmYWlsdXJlKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICdmYWlsdXJlJywgeyB2YWx1ZTogZmFpbHVyZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcbiAgICBmaXJlKHRoaXMucmVjb3JkZXJzLCAnb25SdW5GYWlsZWQnLCBldmVudCwgRkxPV19GQUlMVVJFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHNlbnRlbmNlcyBmcm9tIGFuIGF0dGFjaGVkIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciAobG9va2VkIHVwIGJ5IElEKS5cbiAgICogQ2FsbGVycyB0aGF0IG5lZWQgc2VudGVuY2VzIHNob3VsZCBhdHRhY2ggYSBOYXJyYXRpdmVGbG93UmVjb3JkZXIgd2l0aCBpZCAnbmFycmF0aXZlJ1xuICAgKiBhbmQgcmV0cmlldmUgaXQgZGlyZWN0bHkgdmlhIGdldFJlY29yZGVyQnlJZCgpIGlmIHRoZXkgbmVlZCB0eXBlZCBhY2Nlc3MuXG4gICAqL1xuICBnZXRTZW50ZW5jZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5hcnJhdGl2ZSA9IHRoaXMuZ2V0UmVjb3JkZXJCeUlkPE5hcnJhdGl2ZUZsb3dSZWNvcmRlcj4oJ25hcnJhdGl2ZScpO1xuICAgIHJldHVybiBuYXJyYXRpdmU/LmdldFNlbnRlbmNlcygpID8/IFtdO1xuICB9XG59XG4iXX0=
@@ -23,10 +23,19 @@ class NarrativeFlowRecorder {
23
23
  * `onStageExecuted` for that stage stays silent — an arrival is told ONCE.
24
24
  */
25
25
  announcedArrival;
26
+ /**
27
+ * A retried stage's attempt sentences, by `runtimeStageId`, held until the stage's own outcome is known. A
28
+ * stage that FAILED tells its attempts beneath its error sentence — where the combined narrative puts them
29
+ * (`CombinedNarrativeRecorder · flushAttempts`), so the two built-in narratives tell a failure in one order,
30
+ * the stop reason last. A stage that completed (or paused) tells them where they always stood: before the
31
+ * sentence its completion adds.
32
+ */
33
+ heldAttempts = new Map();
26
34
  constructor(id) {
27
35
  this.id = id ?? 'narrative';
28
36
  }
29
37
  onStageExecuted(event) {
38
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
30
39
  const announced = this.announcedArrival;
31
40
  this.announcedArrival = undefined;
32
41
  // Only LINEAR stages produce a "moved on to X" narrative line.
@@ -47,14 +56,17 @@ class NarrativeFlowRecorder {
47
56
  // Keep this event silent, as CombinedNarrativeRecorder · onNext does.
48
57
  }
49
58
  onDecision(event) {
59
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
50
60
  this.sentences.push((0, sentences_js_1.decisionSentence)(event));
51
61
  this.stageNames.push(event.decider);
52
62
  }
53
63
  onFork(event) {
64
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
54
65
  this.sentences.push((0, sentences_js_1.forkSentence)(event));
55
66
  this.stageNames.push(undefined);
56
67
  }
57
68
  onSelected(event) {
69
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
58
70
  const names = event.selected.join(', ');
59
71
  this.sentences.push(`${event.selected.length} of ${event.total} paths were selected: ${names}.`);
60
72
  this.stageNames.push(undefined);
@@ -89,14 +101,33 @@ class NarrativeFlowRecorder {
89
101
  }
90
102
  this.sentences.push(sentence);
91
103
  this.stageNames.push(event.stageName);
104
+ // A failed stage's attempts go beneath its error sentence, the stop reason last.
105
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
92
106
  }
93
- onStageRetry(event) {
94
- const wait = event.delayMs > 0 ? ` after waiting ${event.delayMs}ms` : '';
95
- this.sentences.push(`Attempt ${event.attempt} of ${event.maxAttempts} at ${event.stageName} failed ` +
96
- `(${event.message}), so it tried again${wait}.`);
97
- this.stageNames.push(event.stageName);
107
+ /**
108
+ * One sentence per attempt of a retried stage (10.1) — its outcome, duration, cause and decision. It replaces
109
+ * the 9.15 retry sentence (`onStageRetry` is no longer narrated here): the attempt line already says
110
+ * "retrying", and says it for the attempt that stopped the series too. Held until the stage's outcome is
111
+ * known ({@link heldAttempts}); an event with no `runtimeStageId` has nothing to hold it by, so it is told now.
112
+ */
113
+ onAttempt(event) {
114
+ if (!(0, sentences_js_1.isAttemptTold)(event.record))
115
+ return;
116
+ const sentence = (0, sentences_js_1.attemptSentence)(event.stageName, event.record);
117
+ const runtimeStageId = event.traversalContext?.runtimeStageId;
118
+ if (runtimeStageId === undefined) {
119
+ this.sentences.push(sentence);
120
+ this.stageNames.push(event.stageName);
121
+ return;
122
+ }
123
+ const held = this.heldAttempts.get(runtimeStageId);
124
+ if (held)
125
+ held.push({ sentence, stageName: event.stageName });
126
+ else
127
+ this.heldAttempts.set(runtimeStageId, [{ sentence, stageName: event.stageName }]);
98
128
  }
99
129
  onPause(event) {
130
+ this.releaseAttempts(event.traversalContext?.runtimeStageId);
100
131
  this.sentences.push((0, sentences_js_1.pauseSentence)(event));
101
132
  this.stageNames.push(event.stageName);
102
133
  }
@@ -105,16 +136,37 @@ class NarrativeFlowRecorder {
105
136
  this.stageNames.push(event.stageName);
106
137
  this.announcedArrival = event.stageName;
107
138
  }
108
- /** Returns a defensive copy of accumulated sentences. */
139
+ /**
140
+ * Returns a defensive copy of accumulated sentences. Attempt sentences still held — read mid-stage, before the
141
+ * stage's outcome — come last, so nothing the run did is ever missing from the copy.
142
+ */
109
143
  getSentences() {
110
- return [...this.sentences];
144
+ const held = [];
145
+ for (const series of this.heldAttempts.values())
146
+ for (const { sentence } of series)
147
+ held.push(sentence);
148
+ return [...this.sentences, ...held];
111
149
  }
112
150
  /** Clears accumulated sentences. Useful for reuse across runs. */
113
151
  clear() {
114
152
  this.sentences = [];
115
153
  this.stageNames = [];
116
154
  this.announcedArrival = undefined;
155
+ this.heldAttempts.clear();
156
+ }
157
+ /** Tell the held attempt sentences of `runtimeStageId`, in order, and stop holding them. */
158
+ releaseAttempts(runtimeStageId) {
159
+ if (runtimeStageId === undefined)
160
+ return;
161
+ const held = this.heldAttempts.get(runtimeStageId);
162
+ if (!held)
163
+ return;
164
+ this.heldAttempts.delete(runtimeStageId);
165
+ for (const { sentence, stageName } of held) {
166
+ this.sentences.push(sentence);
167
+ this.stageNames.push(stageName);
168
+ }
117
169
  }
118
170
  }
119
171
  exports.NarrativeFlowRecorder = NarrativeFlowRecorder;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL05hcnJhdGl2ZUZsb3dSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7QUFFSCw0REFXbUM7QUFpQm5DLE1BQWEscUJBQXFCO0lBQ3ZCLEVBQUUsQ0FBUztJQUNaLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFDakMseUVBQXlFO0lBQ2pFLFVBQVUsR0FBMkIsRUFBRSxDQUFDO0lBQ2hEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBcUI7SUFFN0MsWUFBWSxFQUFXO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLFdBQVcsQ0FBQztJQUM5QixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXFCO1FBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLCtEQUErRDtRQUMvRCw4REFBOEQ7UUFDOUQsMkRBQTJEO1FBQzNELDZEQUE2RDtRQUM3RCwyQkFBMkI7UUFDM0IsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ3pDLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFBLGdDQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBcUI7UUFDMUIsb0VBQW9FO1FBQ3BFLHlFQUF5RTtRQUN6RSxzRUFBc0U7SUFDeEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF3QjtRQUNq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LENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUF4SEQsc0RBd0hDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOYXJyYXRpdmVGbG93UmVjb3JkZXIg4oCUIERlZmF1bHQgRmxvd1JlY29yZGVyIHRoYXQgZ2VuZXJhdGVzIHBsYWluLUVuZ2xpc2ggbmFycmF0aXZlLlxuICpcbiAqIFRoaXMgaXMgdGhlIEZsb3dSZWNvcmRlciBlcXVpdmFsZW50IG9mIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLlxuICogUHJvZHVjZXMgdGhlIHNhbWUgc2VudGVuY2VzLCBzYW1lIGZvcm1hdCwgc2FtZSBiZWhhdmlvciDigJQgYnV0IGFzIGFcbiAqIHBsdWdnYWJsZSBGbG93UmVjb3JkZXIgdGhhdCBjYW4gYmUgc3dhcHBlZCwgZXh0ZW5kZWQsIG9yIGNvbXBvc2VkLlxuICpcbiAqIENvbnN1bWVycyB3aG8gd2FudCBkaWZmZXJlbnQgbmFycmF0aXZlIGJlaGF2aW9yICh3aW5kb3dlZCBsb29wcywgYWRhcHRpdmVcbiAqIHN1bW1hcml6YXRpb24sIGV0Yy4pIGNhbiByZXBsYWNlIHRoaXMgd2l0aCBhIGRpZmZlcmVudCBGbG93UmVjb3JkZXIuXG4gKi9cblxuaW1wb3J0IHtcbiAgYnJlYWtTZW50ZW5jZSxcbiAgZGVjaXNpb25TZW50ZW5jZSxcbiAgZXJyb3JTZW50ZW5jZSxcbiAgZm9ya1NlbnRlbmNlLFxuICBsb29wU2VudGVuY2UsXG4gIG5leHRTdGFnZVNlbnRlbmNlLFxuICBwYXVzZVNlbnRlbmNlLFxuICByZXN1bWVTZW50ZW5jZSxcbiAgdmFsaWRhdGlvbkRldGFpbHMsXG4gIHZhbGlkYXRpb25TZW50ZW5jZSxcbn0gZnJvbSAnLi9mb3JtYXR0aW5nL3NlbnRlbmNlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dQYXVzZUV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSZXN1bWVFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3RhZ2VSZXRyeUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIE5hcnJhdGl2ZUZsb3dSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgc2VudGVuY2VzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogUGFyYWxsZWwgYXJyYXk6IHRoZSBhY3R1YWwgc3RhZ2UgbmFtZSB0aGF0IHByb2R1Y2VkIGVhY2ggc2VudGVuY2UuICovXG4gIHByaXZhdGUgc3RhZ2VOYW1lczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtdO1xuICAvKipcbiAgICogVGhlIHN0YWdlIHdob3NlIGFycml2YWwgYG9uTG9vcGAgLyBgb25SZXN1bWVgIGp1c3QgbmFycmF0ZWQuIEl0cyBjb21wbGV0aW9uXG4gICAqIGxpbmUgd291bGQgcmVwZWF0IHRoYXQgYXJyaXZhbCAoXCJOZXh0LCBpdCBtb3ZlZCBvbiB0byBYLlwiKSwgc28gdGhlIG5leHRcbiAgICogYG9uU3RhZ2VFeGVjdXRlZGAgZm9yIHRoYXQgc3RhZ2Ugc3RheXMgc2lsZW50IOKAlCBhbiBhcnJpdmFsIGlzIHRvbGQgT05DRS5cbiAgICovXG4gIHByaXZhdGUgYW5ub3VuY2VkQXJyaXZhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGlkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5pZCA9IGlkID8/ICduYXJyYXRpdmUnO1xuICB9XG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGFubm91bmNlZCA9IHRoaXMuYW5ub3VuY2VkQXJyaXZhbDtcbiAgICB0aGlzLmFubm91bmNlZEFycml2YWwgPSB1bmRlZmluZWQ7XG4gICAgLy8gT25seSBMSU5FQVIgc3RhZ2VzIHByb2R1Y2UgYSBcIm1vdmVkIG9uIHRvIFhcIiBuYXJyYXRpdmUgbGluZS5cbiAgICAvLyBEZWNpZGVyIC8gZm9yayAvIHNlbGVjdG9yIC8gc3ViZmxvdy1tb3VudCBzdGFnZXMgaGF2ZSB0aGVpclxuICAgIC8vIG93biBkZWRpY2F0ZWQgbmFycmF0aXZlIGxpbmVzIGZyb20gb25EZWNpc2lvbiAvIG9uRm9yayAvXG4gICAgLy8gb25TZWxlY3RlZCAvIG9uU3ViZmxvd0VudHJ5IOKAlCBlbWl0dGluZyBmcm9tIGhlcmUgdG9vIHdvdWxkXG4gICAgLy8gZG91YmxlIHVwIHRoZSBuYXJyYXRpdmUuXG4gICAgaWYgKGV2ZW50LnN0YWdlVHlwZSAhPT0gJ2xpbmVhcicpIHJldHVybjtcbiAgICBpZiAoYW5ub3VuY2VkID09PSBldmVudC5zdGFnZU5hbWUpIHJldHVybjtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKG5leHRTdGFnZVNlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uTmV4dChfZXZlbnQ6IEZsb3dOZXh0RXZlbnQpOiB2b2lkIHtcbiAgICAvLyBBbiBlZGdlIGFubm91bmNlcyBhIGRlc3RpbmF0aW9uLCBub3QgaXRzIGNvbXBsZXRpb24uIExpbmVhciBzdGFnZVxuICAgIC8vIHNlbnRlbmNlcyBiZWxvbmcgdG8gb25TdGFnZUV4ZWN1dGVkOyBvdGhlciBraW5kcyBoYXZlIGRlZGljYXRlZCBob29rcy5cbiAgICAvLyBLZWVwIHRoaXMgZXZlbnQgc2lsZW50LCBhcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIMK3IG9uTmV4dCBkb2VzLlxuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGRlY2lzaW9uU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5kZWNpZGVyKTtcbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goZm9ya1NlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2godW5kZWZpbmVkKTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmFtZXMgPSBldmVudC5zZWxlY3RlZC5qb2luKCcsICcpO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYCR7ZXZlbnQuc2VsZWN0ZWQubGVuZ3RofSBvZiAke2V2ZW50LnRvdGFsfSBwYXRocyB3ZXJlIHNlbGVjdGVkOiAke25hbWVzfS5gKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEVudGVyaW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3c6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFbnRlcmluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93LmApO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5uYW1lKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFeGl0aW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQubmFtZSk7XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGxvb3BTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnRhcmdldCk7XG4gICAgdGhpcy5hbm5vdW5jZWRBcnJpdmFsID0gZXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGJyZWFrU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25FcnJvcihldmVudDogRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgc2VudGVuY2UgPSBlcnJvclNlbnRlbmNlKGV2ZW50KTtcblxuICAgIC8vIEVucmljaCB3aXRoIGZpZWxkLWxldmVsIGlzc3VlcyB3aGVuIGF2YWlsYWJsZVxuICAgIGlmIChldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzICYmIGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgc2VudGVuY2UgKz0gdmFsaWRhdGlvblNlbnRlbmNlKHZhbGlkYXRpb25EZXRhaWxzKGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHNlbnRlbmNlKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25TdGFnZVJldHJ5KGV2ZW50OiBGbG93U3RhZ2VSZXRyeUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgd2FpdCA9IGV2ZW50LmRlbGF5TXMgPiAwID8gYCBhZnRlciB3YWl0aW5nICR7ZXZlbnQuZGVsYXlNc31tc2AgOiAnJztcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKFxuICAgICAgYEF0dGVtcHQgJHtldmVudC5hdHRlbXB0fSBvZiAke2V2ZW50Lm1heEF0dGVtcHRzfSBhdCAke2V2ZW50LnN0YWdlTmFtZX0gZmFpbGVkIGAgK1xuICAgICAgICBgKCR7ZXZlbnQubWVzc2FnZX0pLCBzbyBpdCB0cmllZCBhZ2FpbiR7d2FpdH0uYCxcbiAgICApO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvblBhdXNlKGV2ZW50OiBGbG93UGF1c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2gocGF1c2VTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvblJlc3VtZShldmVudDogRmxvd1Jlc3VtZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChyZXN1bWVTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gICAgdGhpcy5hbm5vdW5jZWRBcnJpdmFsID0gZXZlbnQuc3RhZ2VOYW1lO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBkZWZlbnNpdmUgY29weSBvZiBhY2N1bXVsYXRlZCBzZW50ZW5jZXMuICovXG4gIGdldFNlbnRlbmNlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnNlbnRlbmNlc107XG4gIH1cblxuICAvKiogQ2xlYXJzIGFjY3VtdWxhdGVkIHNlbnRlbmNlcy4gVXNlZnVsIGZvciByZXVzZSBhY3Jvc3MgcnVucy4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMgPSBbXTtcbiAgICB0aGlzLnN0YWdlTmFtZXMgPSBbXTtcbiAgICB0aGlzLmFubm91bmNlZEFycml2YWwgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL05hcnJhdGl2ZUZsb3dSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7OztHQVNHOzs7QUFFSCw0REFhbUM7QUFpQm5DLE1BQWEscUJBQXFCO0lBQ3ZCLEVBQUUsQ0FBUztJQUNaLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFDakMseUVBQXlFO0lBQ2pFLFVBQVUsR0FBMkIsRUFBRSxDQUFDO0lBQ2hEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBcUI7SUFDN0M7Ozs7OztPQU1HO0lBQ2MsWUFBWSxHQUFHLElBQUksR0FBRyxFQUEwRCxDQUFDO0lBRWxHLFlBQVksRUFBVztRQUNyQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxXQUFXLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFxQjtRQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQywrREFBK0Q7UUFDL0QsOERBQThEO1FBQzlELDJEQUEyRDtRQUMzRCw2REFBNkQ7UUFDN0QsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxRQUFRO1lBQUUsT0FBTztRQUN6QyxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUMsU0FBUztZQUFFLE9BQU87UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBQSxnQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENB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RCxrRUFBa0U7SUFDbEUsS0FBSztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsNEZBQTRGO0lBQ3BGLGVBQWUsQ0FBQyxjQUFrQztRQUN4RCxJQUFJLGNBQWMsS0FBSyxTQUFTO1lBQUUsT0FBTztRQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFwS0Qsc0RBb0tDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOYXJyYXRpdmVGbG93UmVjb3JkZXIg4oCUIERlZmF1bHQgRmxvd1JlY29yZGVyIHRoYXQgZ2VuZXJhdGVzIHBsYWluLUVuZ2xpc2ggbmFycmF0aXZlLlxuICpcbiAqIFRoaXMgaXMgdGhlIEZsb3dSZWNvcmRlciBlcXVpdmFsZW50IG9mIENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLlxuICogUHJvZHVjZXMgdGhlIHNhbWUgc2VudGVuY2VzLCBzYW1lIGZvcm1hdCwgc2FtZSBiZWhhdmlvciDigJQgYnV0IGFzIGFcbiAqIHBsdWdnYWJsZSBGbG93UmVjb3JkZXIgdGhhdCBjYW4gYmUgc3dhcHBlZCwgZXh0ZW5kZWQsIG9yIGNvbXBvc2VkLlxuICpcbiAqIENvbnN1bWVycyB3aG8gd2FudCBkaWZmZXJlbnQgbmFycmF0aXZlIGJlaGF2aW9yICh3aW5kb3dlZCBsb29wcywgYWRhcHRpdmVcbiAqIHN1bW1hcml6YXRpb24sIGV0Yy4pIGNhbiByZXBsYWNlIHRoaXMgd2l0aCBhIGRpZmZlcmVudCBGbG93UmVjb3JkZXIuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXR0ZW1wdFNlbnRlbmNlLFxuICBicmVha1NlbnRlbmNlLFxuICBkZWNpc2lvblNlbnRlbmNlLFxuICBlcnJvclNlbnRlbmNlLFxuICBmb3JrU2VudGVuY2UsXG4gIGlzQXR0ZW1wdFRvbGQsXG4gIGxvb3BTZW50ZW5jZSxcbiAgbmV4dFN0YWdlU2VudGVuY2UsXG4gIHBhdXNlU2VudGVuY2UsXG4gIHJlc3VtZVNlbnRlbmNlLFxuICB2YWxpZGF0aW9uRGV0YWlscyxcbiAgdmFsaWRhdGlvblNlbnRlbmNlLFxufSBmcm9tICcuL2Zvcm1hdHRpbmcvc2VudGVuY2VzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmxvd0F0dGVtcHRFdmVudCxcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1BhdXNlRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1Jlc3VtZUV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgTmFycmF0aXZlRmxvd1JlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZW50ZW5jZXM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBQYXJhbGxlbCBhcnJheTogdGhlIGFjdHVhbCBzdGFnZSBuYW1lIHRoYXQgcHJvZHVjZWQgZWFjaCBzZW50ZW5jZS4gKi9cbiAgcHJpdmF0ZSBzdGFnZU5hbWVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdID0gW107XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2Ugd2hvc2UgYXJyaXZhbCBgb25Mb29wYCAvIGBvblJlc3VtZWAganVzdCBuYXJyYXRlZC4gSXRzIGNvbXBsZXRpb25cbiAgICogbGluZSB3b3VsZCByZXBlYXQgdGhhdCBhcnJpdmFsIChcIk5leHQsIGl0IG1vdmVkIG9uIHRvIFguXCIpLCBzbyB0aGUgbmV4dFxuICAgKiBgb25TdGFnZUV4ZWN1dGVkYCBmb3IgdGhhdCBzdGFnZSBzdGF5cyBzaWxlbnQg4oCUIGFuIGFycml2YWwgaXMgdG9sZCBPTkNFLlxuICAgKi9cbiAgcHJpdmF0ZSBhbm5vdW5jZWRBcnJpdmFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBIHJldHJpZWQgc3RhZ2UncyBhdHRlbXB0IHNlbnRlbmNlcywgYnkgYHJ1bnRpbWVTdGFnZUlkYCwgaGVsZCB1bnRpbCB0aGUgc3RhZ2UncyBvd24gb3V0Y29tZSBpcyBrbm93bi4gQVxuICAgKiBzdGFnZSB0aGF0IEZBSUxFRCB0ZWxscyBpdHMgYXR0ZW1wdHMgYmVuZWF0aCBpdHMgZXJyb3Igc2VudGVuY2Ug4oCUIHdoZXJlIHRoZSBjb21iaW5lZCBuYXJyYXRpdmUgcHV0cyB0aGVtXG4gICAqIChgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlciDCtyBmbHVzaEF0dGVtcHRzYCksIHNvIHRoZSB0d28gYnVpbHQtaW4gbmFycmF0aXZlcyB0ZWxsIGEgZmFpbHVyZSBpbiBvbmUgb3JkZXIsXG4gICAqIHRoZSBzdG9wIHJlYXNvbiBsYXN0LiBBIHN0YWdlIHRoYXQgY29tcGxldGVkIChvciBwYXVzZWQpIHRlbGxzIHRoZW0gd2hlcmUgdGhleSBhbHdheXMgc3Rvb2Q6IGJlZm9yZSB0aGVcbiAgICogc2VudGVuY2UgaXRzIGNvbXBsZXRpb24gYWRkcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVsZEF0dGVtcHRzID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PHsgc2VudGVuY2U6IHN0cmluZzsgc3RhZ2VOYW1lOiBzdHJpbmcgfT4+KCk7XG5cbiAgY29uc3RydWN0b3IoaWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlkID0gaWQgPz8gJ25hcnJhdGl2ZSc7XG4gIH1cblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZWxlYXNlQXR0ZW1wdHMoZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQpO1xuICAgIGNvbnN0IGFubm91bmNlZCA9IHRoaXMuYW5ub3VuY2VkQXJyaXZhbDtcbiAgICB0aGlzLmFubm91bmNlZEFycml2YWwgPSB1bmRlZmluZWQ7XG4gICAgLy8gT25seSBMSU5FQVIgc3RhZ2VzIHByb2R1Y2UgYSBcIm1vdmVkIG9uIHRvIFhcIiBuYXJyYXRpdmUgbGluZS5cbiAgICAvLyBEZWNpZGVyIC8gZm9yayAvIHNlbGVjdG9yIC8gc3ViZmxvdy1tb3VudCBzdGFnZXMgaGF2ZSB0aGVpclxuICAgIC8vIG93biBkZWRpY2F0ZWQgbmFycmF0aXZlIGxpbmVzIGZyb20gb25EZWNpc2lvbiAvIG9uRm9yayAvXG4gICAgLy8gb25TZWxlY3RlZCAvIG9uU3ViZmxvd0VudHJ5IOKAlCBlbWl0dGluZyBmcm9tIGhlcmUgdG9vIHdvdWxkXG4gICAgLy8gZG91YmxlIHVwIHRoZSBuYXJyYXRpdmUuXG4gICAgaWYgKGV2ZW50LnN0YWdlVHlwZSAhPT0gJ2xpbmVhcicpIHJldHVybjtcbiAgICBpZiAoYW5ub3VuY2VkID09PSBldmVudC5zdGFnZU5hbWUpIHJldHVybjtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKG5leHRTdGFnZVNlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgfVxuXG4gIG9uTmV4dChfZXZlbnQ6IEZsb3dOZXh0RXZlbnQpOiB2b2lkIHtcbiAgICAvLyBBbiBlZGdlIGFubm91bmNlcyBhIGRlc3RpbmF0aW9uLCBub3QgaXRzIGNvbXBsZXRpb24uIExpbmVhciBzdGFnZVxuICAgIC8vIHNlbnRlbmNlcyBiZWxvbmcgdG8gb25TdGFnZUV4ZWN1dGVkOyBvdGhlciBraW5kcyBoYXZlIGRlZGljYXRlZCBob29rcy5cbiAgICAvLyBLZWVwIHRoaXMgZXZlbnQgc2lsZW50LCBhcyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIMK3IG9uTmV4dCBkb2VzLlxuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlbGVhc2VBdHRlbXB0cyhldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCk7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChkZWNpc2lvblNlbnRlbmNlKGV2ZW50KSk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuZGVjaWRlcik7XG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlbGVhc2VBdHRlbXB0cyhldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCk7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChmb3JrU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJlbGVhc2VBdHRlbXB0cyhldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBldmVudC5zZWxlY3RlZC5qb2luKCcsICcpO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYCR7ZXZlbnQuc2VsZWN0ZWQubGVuZ3RofSBvZiAke2V2ZW50LnRvdGFsfSBwYXRocyB3ZXJlIHNlbGVjdGVkOiAke25hbWVzfS5gKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaCh1bmRlZmluZWQpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goYEVudGVyaW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3c6ICR7ZXZlbnQuZGVzY3JpcHRpb259LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFbnRlcmluZyB0aGUgJHtldmVudC5uYW1lfSBzdWJmbG93LmApO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5uYW1lKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGBFeGl0aW5nIHRoZSAke2V2ZW50Lm5hbWV9IHN1YmZsb3cuYCk7XG4gICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQubmFtZSk7XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGxvb3BTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnRhcmdldCk7XG4gICAgdGhpcy5hbm5vdW5jZWRBcnJpdmFsID0gZXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgb25CcmVhayhldmVudDogRmxvd0JyZWFrRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKGJyZWFrU2VudGVuY2UoZXZlbnQpKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICB9XG5cbiAgb25FcnJvcihldmVudDogRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgc2VudGVuY2UgPSBlcnJvclNlbnRlbmNlKGV2ZW50KTtcblxuICAgIC8vIEVucmljaCB3aXRoIGZpZWxkLWxldmVsIGlzc3VlcyB3aGVuIGF2YWlsYWJsZVxuICAgIGlmIChldmVudC5zdHJ1Y3R1cmVkRXJyb3IuaXNzdWVzICYmIGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgc2VudGVuY2UgKz0gdmFsaWRhdGlvblNlbnRlbmNlKHZhbGlkYXRpb25EZXRhaWxzKGV2ZW50LnN0cnVjdHVyZWRFcnJvci5pc3N1ZXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHNlbnRlbmNlKTtcbiAgICB0aGlzLnN0YWdlTmFtZXMucHVzaChldmVudC5zdGFnZU5hbWUpO1xuICAgIC8vIEEgZmFpbGVkIHN0YWdlJ3MgYXR0ZW1wdHMgZ28gYmVuZWF0aCBpdHMgZXJyb3Igc2VudGVuY2UsIHRoZSBzdG9wIHJlYXNvbiBsYXN0LlxuICAgIHRoaXMucmVsZWFzZUF0dGVtcHRzKGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmUgc2VudGVuY2UgcGVyIGF0dGVtcHQgb2YgYSByZXRyaWVkIHN0YWdlICgxMC4xKSDigJQgaXRzIG91dGNvbWUsIGR1cmF0aW9uLCBjYXVzZSBhbmQgZGVjaXNpb24uIEl0IHJlcGxhY2VzXG4gICAqIHRoZSA5LjE1IHJldHJ5IHNlbnRlbmNlIChgb25TdGFnZVJldHJ5YCBpcyBubyBsb25nZXIgbmFycmF0ZWQgaGVyZSk6IHRoZSBhdHRlbXB0IGxpbmUgYWxyZWFkeSBzYXlzXG4gICAqIFwicmV0cnlpbmdcIiwgYW5kIHNheXMgaXQgZm9yIHRoZSBhdHRlbXB0IHRoYXQgc3RvcHBlZCB0aGUgc2VyaWVzIHRvby4gSGVsZCB1bnRpbCB0aGUgc3RhZ2UncyBvdXRjb21lIGlzXG4gICAqIGtub3duICh7QGxpbmsgaGVsZEF0dGVtcHRzfSk7IGFuIGV2ZW50IHdpdGggbm8gYHJ1bnRpbWVTdGFnZUlkYCBoYXMgbm90aGluZyB0byBob2xkIGl0IGJ5LCBzbyBpdCBpcyB0b2xkIG5vdy5cbiAgICovXG4gIG9uQXR0ZW1wdChldmVudDogRmxvd0F0dGVtcHRFdmVudCk6IHZvaWQge1xuICAgIGlmICghaXNBdHRlbXB0VG9sZChldmVudC5yZWNvcmQpKSByZXR1cm47XG4gICAgY29uc3Qgc2VudGVuY2UgPSBhdHRlbXB0U2VudGVuY2UoZXZlbnQuc3RhZ2VOYW1lLCBldmVudC5yZWNvcmQpO1xuICAgIGNvbnN0IHJ1bnRpbWVTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKHJ1bnRpbWVTdGFnZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VudGVuY2VzLnB1c2goc2VudGVuY2UpO1xuICAgICAgdGhpcy5zdGFnZU5hbWVzLnB1c2goZXZlbnQuc3RhZ2VOYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGVsZCA9IHRoaXMuaGVsZEF0dGVtcHRzLmdldChydW50aW1lU3RhZ2VJZCk7XG4gICAgaWYgKGhlbGQpIGhlbGQucHVzaCh7IHNlbnRlbmNlLCBzdGFnZU5hbWU6IGV2ZW50LnN0YWdlTmFtZSB9KTtcbiAgICBlbHNlIHRoaXMuaGVsZEF0dGVtcHRzLnNldChydW50aW1lU3RhZ2VJZCwgW3sgc2VudGVuY2UsIHN0YWdlTmFtZTogZXZlbnQuc3RhZ2VOYW1lIH1dKTtcbiAgfVxuXG4gIG9uUGF1c2UoZXZlbnQ6IEZsb3dQYXVzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZWxlYXNlQXR0ZW1wdHMoZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQpO1xuICAgIHRoaXMuc2VudGVuY2VzLnB1c2gocGF1c2VTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gIH1cblxuICBvblJlc3VtZShldmVudDogRmxvd1Jlc3VtZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMucHVzaChyZXN1bWVTZW50ZW5jZShldmVudCkpO1xuICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKGV2ZW50LnN0YWdlTmFtZSk7XG4gICAgdGhpcy5hbm5vdW5jZWRBcnJpdmFsID0gZXZlbnQuc3RhZ2VOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkZWZlbnNpdmUgY29weSBvZiBhY2N1bXVsYXRlZCBzZW50ZW5jZXMuIEF0dGVtcHQgc2VudGVuY2VzIHN0aWxsIGhlbGQg4oCUIHJlYWQgbWlkLXN0YWdlLCBiZWZvcmUgdGhlXG4gICAqIHN0YWdlJ3Mgb3V0Y29tZSDigJQgY29tZSBsYXN0LCBzbyBub3RoaW5nIHRoZSBydW4gZGlkIGlzIGV2ZXIgbWlzc2luZyBmcm9tIHRoZSBjb3B5LlxuICAgKi9cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBoZWxkOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgc2VyaWVzIG9mIHRoaXMuaGVsZEF0dGVtcHRzLnZhbHVlcygpKSBmb3IgKGNvbnN0IHsgc2VudGVuY2UgfSBvZiBzZXJpZXMpIGhlbGQucHVzaChzZW50ZW5jZSk7XG4gICAgcmV0dXJuIFsuLi50aGlzLnNlbnRlbmNlcywgLi4uaGVsZF07XG4gIH1cblxuICAvKiogQ2xlYXJzIGFjY3VtdWxhdGVkIHNlbnRlbmNlcy4gVXNlZnVsIGZvciByZXVzZSBhY3Jvc3MgcnVucy4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZW50ZW5jZXMgPSBbXTtcbiAgICB0aGlzLnN0YWdlTmFtZXMgPSBbXTtcbiAgICB0aGlzLmFubm91bmNlZEFycml2YWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWxkQXR0ZW1wdHMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBUZWxsIHRoZSBoZWxkIGF0dGVtcHQgc2VudGVuY2VzIG9mIGBydW50aW1lU3RhZ2VJZGAsIGluIG9yZGVyLCBhbmQgc3RvcCBob2xkaW5nIHRoZW0uICovXG4gIHByaXZhdGUgcmVsZWFzZUF0dGVtcHRzKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAocnVudGltZVN0YWdlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGNvbnN0IGhlbGQgPSB0aGlzLmhlbGRBdHRlbXB0cy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIGlmICghaGVsZCkgcmV0dXJuO1xuICAgIHRoaXMuaGVsZEF0dGVtcHRzLmRlbGV0ZShydW50aW1lU3RhZ2VJZCk7XG4gICAgZm9yIChjb25zdCB7IHNlbnRlbmNlLCBzdGFnZU5hbWUgfSBvZiBoZWxkKSB7XG4gICAgICB0aGlzLnNlbnRlbmNlcy5wdXNoKHNlbnRlbmNlKTtcbiAgICAgIHRoaXMuc3RhZ2VOYW1lcy5wdXNoKHN0YWdlTmFtZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -21,6 +21,7 @@ class NullControlFlowNarrativeGenerator {
21
21
  onLoop() { }
22
22
  onBreak() { }
23
23
  onError() { }
24
+ onAttempt() { }
24
25
  onStageRetry() { }
25
26
  onPause() { }
26
27
  onResume() { }
@@ -32,4 +33,4 @@ class NullControlFlowNarrativeGenerator {
32
33
  }
33
34
  }
34
35
  exports.NullControlFlowNarrativeGenerator = NullControlFlowNarrativeGenerator;
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFJSCx5REFBeUQ7QUFDekQsTUFBYSxpQ0FBaUM7SUFDNUMsZUFBZSxLQUFVLENBQUM7SUFDMUIsTUFBTSxLQUFVLENBQUM7SUFDakIsVUFBVSxLQUFVLENBQUM7SUFDckIsTUFBTSxLQUFVLENBQUM7SUFDakIsVUFBVSxLQUFVLENBQUM7SUFDckIsY0FBYyxLQUFVLENBQUM7SUFDekIsYUFBYSxLQUFVLENBQUM7SUFDeEIsbUJBQW1CLEtBQVUsQ0FBQztJQUM5QixNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPLEtBQVUsQ0FBQztJQUNsQixPQUFPLEtBQVUsQ0FBQztJQUNsQixZQUFZLEtBQVUsQ0FBQztJQUN2QixPQUFPLEtBQVUsQ0FBQztJQUNsQixRQUFRLEtBQVUsQ0FBQztJQUNuQixVQUFVLEtBQVUsQ0FBQztJQUNyQixRQUFRLEtBQVUsQ0FBQztJQUNuQixXQUFXLEtBQVUsQ0FBQztJQUN0QixZQUFZO1FBQ1YsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUFyQkQsOEVBcUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3Ig4oCUIFplcm8tY29zdCBuby1vcCAoTnVsbCBPYmplY3QgcGF0dGVybikuXG4gKlxuICogV2hlbiBuYXJyYXRpdmUgaXMgZGlzYWJsZWQsIGhhbmRsZXJzIGNhbGwgdGhpcyB1bmNvbmRpdGlvbmFsbHkuXG4gKiBBbGwgbWV0aG9kcyBhcmUgZW1wdHkgYm9kaWVzIOKAlCB6ZXJvIGFsbG9jYXRpb24sIHplcm8gc3RyaW5nIGZvcm1hdHRpbmcuXG4gKiBnZXRTZW50ZW5jZXMoKSByZXR1cm5zIGEgYmFyZSBbXSBsaXRlcmFsIHRvIGF2b2lkIGV2ZW4gYSBzaW5nbGUgYXJyYXkgYWxsb2NhdGlvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbmV4cG9ydCBjbGFzcyBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgaW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUge1xuICBvblN0YWdlRXhlY3V0ZWQoKTogdm9pZCB7fVxuICBvbk5leHQoKTogdm9pZCB7fVxuICBvbkRlY2lzaW9uKCk6IHZvaWQge31cbiAgb25Gb3JrKCk6IHZvaWQge31cbiAgb25TZWxlY3RlZCgpOiB2b2lkIHt9XG4gIG9uU3ViZmxvd0VudHJ5KCk6IHZvaWQge31cbiAgb25TdWJmbG93RXhpdCgpOiB2b2lkIHt9XG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoKTogdm9pZCB7fVxuICBvbkxvb3AoKTogdm9pZCB7fVxuICBvbkJyZWFrKCk6IHZvaWQge31cbiAgb25FcnJvcigpOiB2b2lkIHt9XG4gIG9uU3RhZ2VSZXRyeSgpOiB2b2lkIHt9XG4gIG9uUGF1c2UoKTogdm9pZCB7fVxuICBvblJlc3VtZSgpOiB2b2lkIHt9XG4gIG9uUnVuU3RhcnQoKTogdm9pZCB7fVxuICBvblJ1bkVuZCgpOiB2b2lkIHt9XG4gIG9uUnVuRmFpbGVkKCk6IHZvaWQge31cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFJSCx5REFBeUQ7QUFDekQsTUFBYSxpQ0FBaUM7SUFDNUMsZUFBZSxLQUFVLENBQUM7SUFDMUIsTUFBTSxLQUFVLENBQUM7SUFDakIsVUFBVSxLQUFVLENBQUM7SUFDckIsTUFBTSxLQUFVLENBQUM7SUFDakIsVUFBVSxLQUFVLENBQUM7SUFDckIsY0FBYyxLQUFVLENBQUM7SUFDekIsYUFBYSxLQUFVLENBQUM7SUFDeEIsbUJBQW1CLEtBQVUsQ0FBQztJQUM5QixNQUFNLEtBQVUsQ0FBQztJQUNqQixPQUFPLEtBQVUsQ0FBQztJQUNsQixPQUFPLEtBQVUsQ0FBQztJQUNsQixTQUFTLEtBQVUsQ0FBQztJQUNwQixZQUFZLEtBQVUsQ0FBQztJQUN2QixPQUFPLEtBQVUsQ0FBQztJQUNsQixRQUFRLEtBQVUsQ0FBQztJQUNuQixVQUFVLEtBQVUsQ0FBQztJQUNyQixRQUFRLEtBQVUsQ0FBQztJQUNuQixXQUFXLEtBQVUsQ0FBQztJQUN0QixZQUFZO1FBQ1YsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUF0QkQsOEVBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3Ig4oCUIFplcm8tY29zdCBuby1vcCAoTnVsbCBPYmplY3QgcGF0dGVybikuXG4gKlxuICogV2hlbiBuYXJyYXRpdmUgaXMgZGlzYWJsZWQsIGhhbmRsZXJzIGNhbGwgdGhpcyB1bmNvbmRpdGlvbmFsbHkuXG4gKiBBbGwgbWV0aG9kcyBhcmUgZW1wdHkgYm9kaWVzIOKAlCB6ZXJvIGFsbG9jYXRpb24sIHplcm8gc3RyaW5nIGZvcm1hdHRpbmcuXG4gKiBnZXRTZW50ZW5jZXMoKSByZXR1cm5zIGEgYmFyZSBbXSBsaXRlcmFsIHRvIGF2b2lkIGV2ZW4gYSBzaW5nbGUgYXJyYXkgYWxsb2NhdGlvbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbmV4cG9ydCBjbGFzcyBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgaW1wbGVtZW50cyBJQ29udHJvbEZsb3dOYXJyYXRpdmUge1xuICBvblN0YWdlRXhlY3V0ZWQoKTogdm9pZCB7fVxuICBvbk5leHQoKTogdm9pZCB7fVxuICBvbkRlY2lzaW9uKCk6IHZvaWQge31cbiAgb25Gb3JrKCk6IHZvaWQge31cbiAgb25TZWxlY3RlZCgpOiB2b2lkIHt9XG4gIG9uU3ViZmxvd0VudHJ5KCk6IHZvaWQge31cbiAgb25TdWJmbG93RXhpdCgpOiB2b2lkIHt9XG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoKTogdm9pZCB7fVxuICBvbkxvb3AoKTogdm9pZCB7fVxuICBvbkJyZWFrKCk6IHZvaWQge31cbiAgb25FcnJvcigpOiB2b2lkIHt9XG4gIG9uQXR0ZW1wdCgpOiB2b2lkIHt9XG4gIG9uU3RhZ2VSZXRyeSgpOiB2b2lkIHt9XG4gIG9uUGF1c2UoKTogdm9pZCB7fVxuICBvblJlc3VtZSgpOiB2b2lkIHt9XG4gIG9uUnVuU3RhcnQoKTogdm9pZCB7fVxuICBvblJ1bkVuZCgpOiB2b2lkIHt9XG4gIG9uUnVuRmFpbGVkKCk6IHZvaWQge31cbiAgZ2V0U2VudGVuY2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validationSentence = exports.errorSentence = exports.validationDetails = exports.resumeSentence = exports.pauseSentence = exports.breakSentence = exports.loopSentence = exports.forkSentence = exports.decisionSentence = exports.nextStageSentence = void 0;
3
+ exports.formatDuration = exports.attemptSentence = exports.isAttemptTold = exports.validationSentence = exports.errorSentence = exports.validationDetails = exports.resumeSentence = exports.pauseSentence = exports.breakSentence = exports.loopSentence = exports.forkSentence = exports.decisionSentence = exports.nextStageSentence = void 0;
4
4
  function nextStageSentence(ctx) {
5
5
  return ctx.description ? `Next step: ${ctx.description}.` : `Next, it moved on to ${ctx.stageName}.`;
6
6
  }
@@ -60,4 +60,133 @@ function validationSentence(details) {
60
60
  return ` Validation issues: ${details}.`;
61
61
  }
62
62
  exports.validationSentence = validationSentence;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGVuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL2Zvcm1hdHRpbmcvc2VudGVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlBLFNBQWdCLGlCQUFpQixDQUFDLEdBQTBEO0lBQzFGLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLENBQUMsU0FBUyxHQUFHLENBQUM7QUFDdkcsQ0FBQztBQUZELDhDQUVDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLGdCQUFnQixDQUFDLEdBQXdFO0lBQ3ZHLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDOUIsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsU0FBUyxpQkFBaUIsVUFBVSxHQUFHLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFdBQVc7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsY0FBYyxVQUFVLEdBQUcsQ0FBQztJQUM3RSxJQUFJLEdBQUcsQ0FBQyxTQUFTO1FBQUUsT0FBTyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsMkJBQTJCLFVBQVUsR0FBRyxDQUFDO0lBQ3hHLE9BQU8sK0NBQStDLFVBQVUsR0FBRyxDQUFDO0FBQ3RFLENBQUM7QUFSRCw0Q0FRQztBQUVELFNBQWdCLFlBQVksQ0FBQyxHQUFzQjtJQUNqRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxPQUFPLGdCQUFnQixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sb0JBQW9CLEtBQUssR0FBRyxDQUFDO0FBQ3pFLENBQUM7QUFIRCxvQ0FHQztBQUVELFNBQWdCLFlBQVksQ0FBQyxHQUFzQjtJQUNqRCxPQUFPLEdBQUcsQ0FBQyxXQUFXO1FBQ3BCLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxTQUFTLEtBQUssR0FBRyxDQUFDLFdBQVcsU0FBUztRQUN2RCxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsU0FBUyxZQUFZLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUN4RCxDQUFDO0FBSkQsb0NBSUM7QUFFRCxTQUFnQixhQUFhLENBQUMsR0FBdUI7SUFDbkQsT0FBTyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxHQUEwQztJQUN0RSxPQUFPLHVCQUF1QixHQUFHLENBQUMsU0FBUyxHQUFHLENBQUM7QUFDakQsQ0FBQztBQUZELHNDQUVDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLEdBQW9EO0lBQ2pGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ25ELE9BQU8sd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUhELHdDQUdDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsTUFBa0M7SUFDbEUsT0FBTyxNQUFNO1NBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDYixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDckUsT0FBTyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFQRCw4Q0FPQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxHQUFzRDtJQUNsRixPQUFPLHdCQUF3QixHQUFHLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQztBQUNsRSxDQUFDO0FBRkQsc0NBRUM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBZ0Isa0JBQWtCLENBQUMsT0FBZTtJQUNoRCxPQUFPLHVCQUF1QixPQUFPLEdBQUcsQ0FBQztBQUMzQyxDQUFDO0FBRkQsZ0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU2hhcmVkIEVuZ2xpc2ggc2VudGVuY2UgYm9kaWVzLCB3aXRoIG5vIGV2ZW50IGNhcHR1cmUgb3IgcmVjb3JkZXIgc3RhdGUuICovXG5pbXBvcnQgdHlwZSB7IFZhbGlkYXRpb25Jc3N1ZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIFN0YWdlUmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi4vbmFycmF0aXZlVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVzdW1lRXZlbnQgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0U3RhZ2VTZW50ZW5jZShjdHg6IFBpY2s8U3RhZ2VSZW5kZXJDb250ZXh0LCAnc3RhZ2VOYW1lJyB8ICdkZXNjcmlwdGlvbic+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvbiA/IGBOZXh0IHN0ZXA6ICR7Y3R4LmRlc2NyaXB0aW9ufS5gIDogYE5leHQsIGl0IG1vdmVkIG9uIHRvICR7Y3R4LnN0YWdlTmFtZX0uYDtcbn1cblxuLyoqIEV2aWRlbmNlIHRha2VzIHByZWNlZGVuY2UgYXQgdGhlIENvbWJpbmVkIHJlY29yZGVyOyB0aGlzIGlzIG9ubHkgaXRzIGZhbGxiYWNrLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2lzaW9uU2VudGVuY2UoY3R4OiBQaWNrPERlY2lzaW9uUmVuZGVyQ29udGV4dCwgJ2Nob3NlbicgfCAnZGVzY3JpcHRpb24nIHwgJ3JhdGlvbmFsZSc+KTogc3RyaW5nIHtcbiAgY29uc3QgYnJhbmNoTmFtZSA9IGN0eC5jaG9zZW47XG4gIGlmIChjdHguZGVzY3JpcHRpb24gJiYgY3R4LnJhdGlvbmFsZSkge1xuICAgIHJldHVybiBgSXQgJHtjdHguZGVzY3JpcHRpb259OiAke2N0eC5yYXRpb25hbGV9LCBzbyBpdCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gIH1cbiAgaWYgKGN0eC5kZXNjcmlwdGlvbikgcmV0dXJuIGBJdCAke2N0eC5kZXNjcmlwdGlvbn0gYW5kIGNob3NlICR7YnJhbmNoTmFtZX0uYDtcbiAgaWYgKGN0eC5yYXRpb25hbGUpIHJldHVybiBgQSBkZWNpc2lvbiB3YXMgbWFkZTogJHtjdHgucmF0aW9uYWxlfSwgc28gdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbiAgcmV0dXJuIGBBIGRlY2lzaW9uIHdhcyBtYWRlLCBhbmQgdGhlIHBhdGggdGFrZW4gd2FzICR7YnJhbmNoTmFtZX0uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcmtTZW50ZW5jZShjdHg6IEZvcmtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZXMgPSBjdHguY2hpbGRyZW4uam9pbignLCAnKTtcbiAgcmV0dXJuIGBGb3JraW5nIGludG8gJHtjdHguY2hpbGRyZW4ubGVuZ3RofSBwYXJhbGxlbCBwYXRoczogJHtuYW1lc30uYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb3BTZW50ZW5jZShjdHg6IExvb3BSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGN0eC5kZXNjcmlwdGlvblxuICAgID8gYE9uIHBhc3MgJHtjdHguaXRlcmF0aW9ufTogJHtjdHguZGVzY3JpcHRpb259IGFnYWluLmBcbiAgICA6IGBPbiBwYXNzICR7Y3R4Lml0ZXJhdGlvbn0gdGhyb3VnaCAke2N0eC50YXJnZXR9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmVha1NlbnRlbmNlKGN0eDogQnJlYWtSZW5kZXJDb250ZXh0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGBFeGVjdXRpb24gc3RvcHBlZCBhdCAke2N0eC5zdGFnZU5hbWV9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXVzZVNlbnRlbmNlKGN0eDogUGljazxCcmVha1JlbmRlckNvbnRleHQsICdzdGFnZU5hbWUnPik6IHN0cmluZyB7XG4gIHJldHVybiBgRXhlY3V0aW9uIHBhdXNlZCBhdCAke2N0eC5zdGFnZU5hbWV9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVTZW50ZW5jZShjdHg6IFBpY2s8Rmxvd1Jlc3VtZUV2ZW50LCAnc3RhZ2VOYW1lJyB8ICdoYXNJbnB1dCc+KTogc3RyaW5nIHtcbiAgY29uc3Qgc3VmZml4ID0gY3R4Lmhhc0lucHV0ID8gJyB3aXRoIGlucHV0LicgOiAnLic7XG4gIHJldHVybiBgRXhlY3V0aW9uIHJlc3VtZWQgYXQgJHtjdHguc3RhZ2VOYW1lfSR7c3VmZml4fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0aW9uRGV0YWlscyhpc3N1ZXM6IHJlYWRvbmx5IFZhbGlkYXRpb25Jc3N1ZVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzc3Vlc1xuICAgIC5tYXAoKGlzc3VlKSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gaXNzdWUucGF0aC5sZW5ndGggPiAwID8gaXNzdWUucGF0aC5qb2luKCcuJykgOiAnKHJvb3QpJztcbiAgICAgIHJldHVybiBgJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gICAgfSlcbiAgICAuam9pbignOyAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVycm9yU2VudGVuY2UoY3R4OiBQaWNrPEVycm9yUmVuZGVyQ29udGV4dCwgJ3N0YWdlTmFtZScgfCAnbWVzc2FnZSc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIGBBbiBlcnJvciBvY2N1cnJlZCBhdCAke2N0eC5zdGFnZU5hbWV9OiAke2N0eC5tZXNzYWdlfS5gO1xufVxuXG4vKiogQ2FsbGVycyByZXRhaW4gdGhlaXIgZGlzdGluY3QgcnVsZXMgZm9yIHdoZXRoZXIgdG8gZGlzcGxheSBlbXB0eSBkZXRhaWxzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb25TZW50ZW5jZShkZXRhaWxzOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCBWYWxpZGF0aW9uIGlzc3VlczogJHtkZXRhaWxzfS5gO1xufVxuIl19
63
+ /**
64
+ * Whether the narrative tells an attempt (P1b). A STAGE series of ONE attempt — a stage run on the attempt runner
65
+ * only because of a `timeoutMs` or the run's deadline — that succeeded or paused says nothing the stage's own line
66
+ * does not, so it is not told (its record is still on the tree and the hook). Every other attempt is — every call
67
+ * and every observed attempt too (P2): the stage's own line never mentions them.
68
+ */
69
+ function isAttemptTold(record) {
70
+ return record.kind !== 'stage' || record.of !== 1 || (record.outcome !== 'ok' && record.outcome !== 'paused');
71
+ }
72
+ exports.isAttemptTold = isAttemptTold;
73
+ /**
74
+ * One attempt of a retried stage, as one sentence (10.1): its outcome and duration, the cause of a failure
75
+ * (`category: message`, the category left out when it is `unknown`), and the decision — the wait before a retry,
76
+ * or why the series stopped. The error is the record's SERVED message, so a redacted error reads redacted here.
77
+ * Under a run deadline the decision also says the time left (P1b).
78
+ *
79
+ * Attempt 1 of 3 at Fetch rate failed in 812ms (rate-limited: 429), retrying in 4s.
80
+ * Attempt 3 of 3 at Fetch rate succeeded in 31ms.
81
+ * Attempt 1 of 4 at Charge card failed in 120ms (permanent: card declined); stopped: retryOn declined.
82
+ * Attempt 2 of 3 at Fetch rate timed out after 40s, retrying in 2s (70s left).
83
+ * Attempt 2 of 4 at Charge card timed out after 20s; stopped: no time left (300ms left, next wait 2s).
84
+ */
85
+ function attemptSentence(stageName, record) {
86
+ if (record.kind === 'call')
87
+ return callSentence(record);
88
+ if (record.kind === 'observed')
89
+ return observedSentence(record);
90
+ const ceiling = record.of !== undefined ? ` of ${record.of}` : '';
91
+ return `Attempt ${record.attempt}${ceiling} at ${stageName} ${attemptOutcome(record)}${effectClause(record)}${attemptDecision(record)}.`;
92
+ }
93
+ exports.attemptSentence = attemptSentence;
94
+ /**
95
+ * One attempt of a call a stage made (`scope.$call`, P2), by its target — a single call (`attempts: 1`) says only
96
+ * how it went, since "attempt 1 of 1" and "no attempts left" add nothing:
97
+ *
98
+ * Call inventory.lookup succeeded in 12ms.
99
+ * Call stripe.quotes.create, attempt 1 of 3, failed in 812ms (rate-limited: 429), retrying in 4s.
100
+ */
101
+ function callSentence(record) {
102
+ const target = record.target ?? 'call';
103
+ if (record.of === 1) {
104
+ const decision = record.reason === 'exhausted' ? '' : attemptDecision(record);
105
+ return `Call ${target} ${attemptOutcome(record)}${effectClause(record)}${decision}.`;
106
+ }
107
+ const ceiling = record.of !== undefined ? ` of ${record.of}` : '';
108
+ return `Call ${target}, attempt ${record.attempt}${ceiling}, ${attemptOutcome(record)}${effectClause(record)}${attemptDecision(record)}.`;
109
+ }
110
+ /**
111
+ * One attempt an outside system ran on its own, as its adapter reported it (`observed()`, P2). No decision clause:
112
+ * the system decided what followed, not the library.
113
+ *
114
+ * Observed: the stripe SDK made attempt 2 of 3, failed in 600ms (server: busy).
115
+ */
116
+ function observedSentence(record) {
117
+ const who = record.source === undefined || record.source === 'sdk'
118
+ ? `the ${record.target ?? 'outside'} SDK`
119
+ : `${record.target ?? 'outside'} (${record.source})`;
120
+ const ceiling = record.of !== undefined ? ` of ${record.of}` : '';
121
+ return `Observed: ${who} made attempt ${record.attempt}${ceiling}, ${attemptOutcome(record)}.`;
122
+ }
123
+ function attemptOutcome(record) {
124
+ const took = formatDuration(record.durationMs);
125
+ switch (record.outcome) {
126
+ case 'ok':
127
+ return `succeeded in ${took}`;
128
+ case 'timeout':
129
+ return `timed out after ${took}`;
130
+ case 'paused':
131
+ return `paused after ${took}`;
132
+ case 'aborted':
133
+ return `was aborted after ${took}${record.error ? ` (${record.error.message})` : ''}`;
134
+ default:
135
+ return `failed in ${took}${attemptCause(record)}`;
136
+ }
137
+ }
138
+ /**
139
+ * A touching attempt whose effect is unknown says so (P3) — the outcome alone ("failed", "timed out") would read as
140
+ * "nothing happened", and nothing may be retried blindly on that reading. `applied` and `none` add nothing the
141
+ * outcome does not say. Absent on a target that touches nothing (byte identity).
142
+ *
143
+ * Attempt 2 of 2 at Charge card timed out after 20s, effect on stripe unknown; stopped: no attempts left.
144
+ */
145
+ function effectClause(record) {
146
+ return record.effect === 'unknown' && record.system !== undefined ? `, effect on ${record.system} unknown` : '';
147
+ }
148
+ function attemptCause(record) {
149
+ if (!record.error)
150
+ return '';
151
+ const category = record.category && record.category !== 'unknown' ? `${record.category}: ` : '';
152
+ return ` (${category}${record.error.message})`;
153
+ }
154
+ function attemptDecision(record) {
155
+ if (record.next === 'retry') {
156
+ const left = record.timeLeftMs !== undefined ? ` (${formatDuration(Math.max(0, record.timeLeftMs))} left)` : '';
157
+ return (record.delayMs ? `, retrying in ${formatDuration(record.delayMs)}` : ', retrying immediately') + left;
158
+ }
159
+ if (record.next === 'done')
160
+ return '';
161
+ switch (record.reason) {
162
+ case 'exhausted':
163
+ return '; stopped: no attempts left';
164
+ case 'declined':
165
+ // A throwing predicate is "do not retry" too — but it is a broken predicate, not a verdict.
166
+ return record.retryOnThrew ? '; stopped: retryOn threw' : '; stopped: retryOn declined';
167
+ case 'no-time-left': {
168
+ const facts = [
169
+ ...(record.timeLeftMs !== undefined ? [`${formatDuration(Math.max(0, record.timeLeftMs))} left`] : []),
170
+ ...(record.delayMs !== undefined ? [`next wait ${formatDuration(record.delayMs)}`] : []),
171
+ ];
172
+ return `; stopped: no time left${facts.length > 0 ? ` (${facts.join(', ')})` : ''}`;
173
+ }
174
+ case 'aborted':
175
+ // An attempt that threw the abort's own reason already says it ("was aborted"); an attempt that failed on
176
+ // its own while the run aborted says its failure, then why the series stopped.
177
+ return record.outcome === 'aborted' ? '' : '; stopped: the run was aborted';
178
+ case 'paused':
179
+ // The outcome already says it.
180
+ return '';
181
+ default:
182
+ return `; stopped: ${record.reason}`;
183
+ }
184
+ }
185
+ /** A duration as the narrative says it: whole milliseconds under a second, seconds (one decimal at most) above. */
186
+ function formatDuration(ms) {
187
+ if (ms < 1_000)
188
+ return `${Math.round(ms)}ms`;
189
+ return `${Number((ms / 1_000).toFixed(1))}s`;
190
+ }
191
+ exports.formatDuration = formatDuration;
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGVuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvbmFycmF0aXZlL2Zvcm1hdHRpbmcvc2VudGVuY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWFBLFNBQWdCLGlCQUFpQixDQUFDLEdBQTBEO0lBQzFGLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLENBQUMsU0FBUyxHQUFHLENBQUM7QUFDdkcsQ0FBQztBQUZELDhDQUVDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLGdCQUFnQixDQUFDLEdBQXdFO0lBQ3ZHLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDOUIsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsU0FBUyxpQkFBaUIsVUFBVSxHQUFHLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLFdBQVc7UUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDLFdBQVcsY0FBYyxVQUFVLEdBQUcsQ0FBQztJQUM3RSxJQUFJLEdBQUcsQ0FBQyxTQUFTO1FBQUUsT0FBTyx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsMkJBQTJCLFVBQVUsR0FBRyxDQUFDO0lBQ3hHLE9BQU8sK0NBQStDLFVBQVUsR0FBRyxDQUFDO0FBQ3RFLENBQUM7QUFSRCw0Q0FRQztBQUVELFNBQWdCLFlBQVksQ0FBQyxHQUFzQjtJQUNqRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxPQUFPLGdCQUFnQixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sb0JBQW9CLEtBQUss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InNvdXJjZXNDb250ZW50IjpbIi8qKiBTaGFyZWQgRW5nbGlzaCBzZW50ZW5jZSBib2RpZXMsIHdpdGggbm8gZXZlbnQgY2FwdHVyZSBvciByZWNvcmRlciBzdGF0ZS4gKi9cbmltcG9ydCB0eXBlIHsgQXR0ZW1wdFJlY29yZCB9IGZyb20gJy4uLy4uLy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBWYWxpZGF0aW9uSXNzdWUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBTdGFnZVJlbmRlckNvbnRleHQsXG59IGZyb20gJy4uL25hcnJhdGl2ZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1Jlc3VtZUV2ZW50IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFN0YWdlU2VudGVuY2UoY3R4OiBQaWNrPFN0YWdlUmVuZGVyQ29udGV4dCwgJ3N0YWdlTmFtZScgfCAnZGVzY3JpcHRpb24nPik6IHN0cmluZyB7XG4gIHJldHVybiBjdHguZGVzY3JpcHRpb24gPyBgTmV4dCBzdGVwOiAke2N0eC5kZXNjcmlwdGlvbn0uYCA6IGBOZXh0LCBpdCBtb3ZlZCBvbiB0byAke2N0eC5zdGFnZU5hbWV9LmA7XG59XG5cbi8qKiBFdmlkZW5jZSB0YWtlcyBwcmVjZWRlbmNlIGF0IHRoZSBDb21iaW5lZCByZWNvcmRlcjsgdGhpcyBpcyBvbmx5IGl0cyBmYWxsYmFjay4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNpc2lvblNlbnRlbmNlKGN0eDogUGljazxEZWNpc2lvblJlbmRlckNvbnRleHQsICdjaG9zZW4nIHwgJ2Rlc2NyaXB0aW9uJyB8ICdyYXRpb25hbGUnPik6IHN0cmluZyB7XG4gIGNvbnN0IGJyYW5jaE5hbWUgPSBjdHguY2hvc2VuO1xuICBpZiAoY3R4LmRlc2NyaXB0aW9uICYmIGN0eC5yYXRpb25hbGUpIHtcbiAgICByZXR1cm4gYEl0ICR7Y3R4LmRlc2NyaXB0aW9ufTogJHtjdHgucmF0aW9uYWxlfSwgc28gaXQgY2hvc2UgJHticmFuY2hOYW1lfS5gO1xuICB9XG4gIGlmIChjdHguZGVzY3JpcHRpb24pIHJldHVybiBgSXQgJHtjdHguZGVzY3JpcHRpb259IGFuZCBjaG9zZSAke2JyYW5jaE5hbWV9LmA7XG4gIGlmIChjdHgucmF0aW9uYWxlKSByZXR1cm4gYEEgZGVjaXNpb24gd2FzIG1hZGU6ICR7Y3R4LnJhdGlvbmFsZX0sIHNvIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmA7XG4gIHJldHVybiBgQSBkZWNpc2lvbiB3YXMgbWFkZSwgYW5kIHRoZSBwYXRoIHRha2VuIHdhcyAke2JyYW5jaE5hbWV9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JrU2VudGVuY2UoY3R4OiBGb3JrUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IG5hbWVzID0gY3R4LmNoaWxkcmVuLmpvaW4oJywgJyk7XG4gIHJldHVybiBgRm9ya2luZyBpbnRvICR7Y3R4LmNoaWxkcmVuLmxlbmd0aH0gcGFyYWxsZWwgcGF0aHM6ICR7bmFtZXN9LmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb29wU2VudGVuY2UoY3R4OiBMb29wUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gIHJldHVybiBjdHguZGVzY3JpcHRpb25cbiAgICA/IGBPbiBwYXNzICR7Y3R4Lml0ZXJhdGlvbn06ICR7Y3R4LmRlc2NyaXB0aW9ufSBhZ2Fpbi5gXG4gICAgOiBgT24gcGFzcyAke2N0eC5pdGVyYXRpb259IHRocm91Z2ggJHtjdHgudGFyZ2V0fS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJlYWtTZW50ZW5jZShjdHg6IEJyZWFrUmVuZGVyQ29udGV4dCk6IHN0cmluZyB7XG4gIHJldHVybiBgRXhlY3V0aW9uIHN0b3BwZWQgYXQgJHtjdHguc3RhZ2VOYW1lfS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF1c2VTZW50ZW5jZShjdHg6IFBpY2s8QnJlYWtSZW5kZXJDb250ZXh0LCAnc3RhZ2VOYW1lJz4pOiBzdHJpbmcge1xuICByZXR1cm4gYEV4ZWN1dGlvbiBwYXVzZWQgYXQgJHtjdHguc3RhZ2VOYW1lfS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdW1lU2VudGVuY2UoY3R4OiBQaWNrPEZsb3dSZXN1bWVFdmVudCwgJ3N0YWdlTmFtZScgfCAnaGFzSW5wdXQnPik6IHN0cmluZyB7XG4gIGNvbnN0IHN1ZmZpeCA9IGN0eC5oYXNJbnB1dCA/ICcgd2l0aCBpbnB1dC4nIDogJy4nO1xuICByZXR1cm4gYEV4ZWN1dGlvbiByZXN1bWVkIGF0ICR7Y3R4LnN0YWdlTmFtZX0ke3N1ZmZpeH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGlvbkRldGFpbHMoaXNzdWVzOiByZWFkb25seSBWYWxpZGF0aW9uSXNzdWVbXSk6IHN0cmluZyB7XG4gIHJldHVybiBpc3N1ZXNcbiAgICAubWFwKChpc3N1ZSkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGlzc3VlLnBhdGguam9pbignLicpIDogJyhyb290KSc7XG4gICAgICByZXR1cm4gYCR7cGF0aH06ICR7aXNzdWUubWVzc2FnZX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJzsgJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvclNlbnRlbmNlKGN0eDogUGljazxFcnJvclJlbmRlckNvbnRleHQsICdzdGFnZU5hbWUnIHwgJ21lc3NhZ2UnPik6IHN0cmluZyB7XG4gIHJldHVybiBgQW4gZXJyb3Igb2NjdXJyZWQgYXQgJHtjdHguc3RhZ2VOYW1lfTogJHtjdHgubWVzc2FnZX0uYDtcbn1cblxuLyoqIENhbGxlcnMgcmV0YWluIHRoZWlyIGRpc3RpbmN0IHJ1bGVzIGZvciB3aGV0aGVyIHRvIGRpc3BsYXkgZW1wdHkgZGV0YWlscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0aW9uU2VudGVuY2UoZGV0YWlsczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAgVmFsaWRhdGlvbiBpc3N1ZXM6ICR7ZGV0YWlsc30uYDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBuYXJyYXRpdmUgdGVsbHMgYW4gYXR0ZW1wdCAoUDFiKS4gQSBTVEFHRSBzZXJpZXMgb2YgT05FIGF0dGVtcHQg4oCUIGEgc3RhZ2UgcnVuIG9uIHRoZSBhdHRlbXB0IHJ1bm5lclxuICogb25seSBiZWNhdXNlIG9mIGEgYHRpbWVvdXRNc2Agb3IgdGhlIHJ1bidzIGRlYWRsaW5lIOKAlCB0aGF0IHN1Y2NlZWRlZCBvciBwYXVzZWQgc2F5cyBub3RoaW5nIHRoZSBzdGFnZSdzIG93biBsaW5lXG4gKiBkb2VzIG5vdCwgc28gaXQgaXMgbm90IHRvbGQgKGl0cyByZWNvcmQgaXMgc3RpbGwgb24gdGhlIHRyZWUgYW5kIHRoZSBob29rKS4gRXZlcnkgb3RoZXIgYXR0ZW1wdCBpcyDigJQgZXZlcnkgY2FsbFxuICogYW5kIGV2ZXJ5IG9ic2VydmVkIGF0dGVtcHQgdG9vIChQMik6IHRoZSBzdGFnZSdzIG93biBsaW5lIG5ldmVyIG1lbnRpb25zIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0F0dGVtcHRUb2xkKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVjb3JkLmtpbmQgIT09ICdzdGFnZScgfHwgcmVjb3JkLm9mICE9PSAxIHx8IChyZWNvcmQub3V0Y29tZSAhPT0gJ29rJyAmJiByZWNvcmQub3V0Y29tZSAhPT0gJ3BhdXNlZCcpO1xufVxuXG4vKipcbiAqIE9uZSBhdHRlbXB0IG9mIGEgcmV0cmllZCBzdGFnZSwgYXMgb25lIHNlbnRlbmNlICgxMC4xKTogaXRzIG91dGNvbWUgYW5kIGR1cmF0aW9uLCB0aGUgY2F1c2Ugb2YgYSBmYWlsdXJlXG4gKiAoYGNhdGVnb3J5OiBtZXNzYWdlYCwgdGhlIGNhdGVnb3J5IGxlZnQgb3V0IHdoZW4gaXQgaXMgYHVua25vd25gKSwgYW5kIHRoZSBkZWNpc2lvbiDigJQgdGhlIHdhaXQgYmVmb3JlIGEgcmV0cnksXG4gKiBvciB3aHkgdGhlIHNlcmllcyBzdG9wcGVkLiBUaGUgZXJyb3IgaXMgdGhlIHJlY29yZCdzIFNFUlZFRCBtZXNzYWdlLCBzbyBhIHJlZGFjdGVkIGVycm9yIHJlYWRzIHJlZGFjdGVkIGhlcmUuXG4gKiBVbmRlciBhIHJ1biBkZWFkbGluZSB0aGUgZGVjaXNpb24gYWxzbyBzYXlzIHRoZSB0aW1lIGxlZnQgKFAxYikuXG4gKlxuICogICBBdHRlbXB0IDEgb2YgMyBhdCBGZXRjaCByYXRlIGZhaWxlZCBpbiA4MTJtcyAocmF0ZS1saW1pdGVkOiA0MjkpLCByZXRyeWluZyBpbiA0cy5cbiAqICAgQXR0ZW1wdCAzIG9mIDMgYXQgRmV0Y2ggcmF0ZSBzdWNjZWVkZWQgaW4gMzFtcy5cbiAqICAgQXR0ZW1wdCAxIG9mIDQgYXQgQ2hhcmdlIGNhcmQgZmFpbGVkIGluIDEyMG1zIChwZXJtYW5lbnQ6IGNhcmQgZGVjbGluZWQpOyBzdG9wcGVkOiByZXRyeU9uIGRlY2xpbmVkLlxuICogICBBdHRlbXB0IDIgb2YgMyBhdCBGZXRjaCByYXRlIHRpbWVkIG91dCBhZnRlciA0MHMsIHJldHJ5aW5nIGluIDJzICg3MHMgbGVmdCkuXG4gKiAgIEF0dGVtcHQgMiBvZiA0IGF0IENoYXJnZSBjYXJkIHRpbWVkIG91dCBhZnRlciAyMHM7IHN0b3BwZWQ6IG5vIHRpbWUgbGVmdCAoMzAwbXMgbGVmdCwgbmV4dCB3YWl0IDJzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGVtcHRTZW50ZW5jZShzdGFnZU5hbWU6IHN0cmluZywgcmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogc3RyaW5nIHtcbiAgaWYgKHJlY29yZC5raW5kID09PSAnY2FsbCcpIHJldHVybiBjYWxsU2VudGVuY2UocmVjb3JkKTtcbiAgaWYgKHJlY29yZC5raW5kID09PSAnb2JzZXJ2ZWQnKSByZXR1cm4gb2JzZXJ2ZWRTZW50ZW5jZShyZWNvcmQpO1xuICBjb25zdCBjZWlsaW5nID0gcmVjb3JkLm9mICE9PSB1bmRlZmluZWQgPyBgIG9mICR7cmVjb3JkLm9mfWAgOiAnJztcbiAgcmV0dXJuIGBBdHRlbXB0ICR7cmVjb3JkLmF0dGVtcHR9JHtjZWlsaW5nfSBhdCAke3N0YWdlTmFtZX0gJHthdHRlbXB0T3V0Y29tZShyZWNvcmQpfSR7ZWZmZWN0Q2xhdXNlKFxuICAgIHJlY29yZCxcbiAgKX0ke2F0dGVtcHREZWNpc2lvbihyZWNvcmQpfS5gO1xufVxuXG4vKipcbiAqIE9uZSBhdHRlbXB0IG9mIGEgY2FsbCBhIHN0YWdlIG1hZGUgKGBzY29wZS4kY2FsbGAsIFAyKSwgYnkgaXRzIHRhcmdldCDigJQgYSBzaW5nbGUgY2FsbCAoYGF0dGVtcHRzOiAxYCkgc2F5cyBvbmx5XG4gKiBob3cgaXQgd2VudCwgc2luY2UgXCJhdHRlbXB0IDEgb2YgMVwiIGFuZCBcIm5vIGF0dGVtcHRzIGxlZnRcIiBhZGQgbm90aGluZzpcbiAqXG4gKiAgIENhbGwgaW52ZW50b3J5Lmxvb2t1cCBzdWNjZWVkZWQgaW4gMTJtcy5cbiAqICAgQ2FsbCBzdHJpcGUucXVvdGVzLmNyZWF0ZSwgYXR0ZW1wdCAxIG9mIDMsIGZhaWxlZCBpbiA4MTJtcyAocmF0ZS1saW1pdGVkOiA0MjkpLCByZXRyeWluZyBpbiA0cy5cbiAqL1xuZnVuY3Rpb24gY2FsbFNlbnRlbmNlKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IHN0cmluZyB7XG4gIGNvbnN0IHRhcmdldCA9IHJlY29yZC50YXJnZXQgPz8gJ2NhbGwnO1xuICBpZiAocmVjb3JkLm9mID09PSAxKSB7XG4gICAgY29uc3QgZGVjaXNpb24gPSByZWNvcmQucmVhc29uID09PSAnZXhoYXVzdGVkJyA/ICcnIDogYXR0ZW1wdERlY2lzaW9uKHJlY29yZCk7XG4gICAgcmV0dXJuIGBDYWxsICR7dGFyZ2V0fSAke2F0dGVtcHRPdXRjb21lKHJlY29yZCl9JHtlZmZlY3RDbGF1c2UocmVjb3JkKX0ke2RlY2lzaW9ufS5gO1xuICB9XG4gIGNvbnN0IGNlaWxpbmcgPSByZWNvcmQub2YgIT09IHVuZGVmaW5lZCA/IGAgb2YgJHtyZWNvcmQub2Z9YCA6ICcnO1xuICByZXR1cm4gYENhbGwgJHt0YXJnZXR9LCBhdHRlbXB0ICR7cmVjb3JkLmF0dGVtcHR9JHtjZWlsaW5nfSwgJHthdHRlbXB0T3V0Y29tZShyZWNvcmQpfSR7ZWZmZWN0Q2xhdXNlKFxuICAgIHJlY29yZCxcbiAgKX0ke2F0dGVtcHREZWNpc2lvbihyZWNvcmQpfS5gO1xufVxuXG4vKipcbiAqIE9uZSBhdHRlbXB0IGFuIG91dHNpZGUgc3lzdGVtIHJhbiBvbiBpdHMgb3duLCBhcyBpdHMgYWRhcHRlciByZXBvcnRlZCBpdCAoYG9ic2VydmVkKClgLCBQMikuIE5vIGRlY2lzaW9uIGNsYXVzZTpcbiAqIHRoZSBzeXN0ZW0gZGVjaWRlZCB3aGF0IGZvbGxvd2VkLCBub3QgdGhlIGxpYnJhcnkuXG4gKlxuICogICBPYnNlcnZlZDogdGhlIHN0cmlwZSBTREsgbWFkZSBhdHRlbXB0IDIgb2YgMywgZmFpbGVkIGluIDYwMG1zIChzZXJ2ZXI6IGJ1c3kpLlxuICovXG5mdW5jdGlvbiBvYnNlcnZlZFNlbnRlbmNlKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IHN0cmluZyB7XG4gIGNvbnN0IHdobyA9XG4gICAgcmVjb3JkLnNvdXJjZSA9PT0gdW5kZWZpbmVkIHx8IHJlY29yZC5zb3VyY2UgPT09ICdzZGsnXG4gICAgICA/IGB0aGUgJHtyZWNvcmQudGFyZ2V0ID8/ICdvdXRzaWRlJ30gU0RLYFxuICAgICAgOiBgJHtyZWNvcmQudGFyZ2V0ID8/ICdvdXRzaWRlJ30gKCR7cmVjb3JkLnNvdXJjZX0pYDtcbiAgY29uc3QgY2VpbGluZyA9IHJlY29yZC5vZiAhPT0gdW5kZWZpbmVkID8gYCBvZiAke3JlY29yZC5vZn1gIDogJyc7XG4gIHJldHVybiBgT2JzZXJ2ZWQ6ICR7d2hvfSBtYWRlIGF0dGVtcHQgJHtyZWNvcmQuYXR0ZW1wdH0ke2NlaWxpbmd9LCAke2F0dGVtcHRPdXRjb21lKHJlY29yZCl9LmA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRPdXRjb21lKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IHN0cmluZyB7XG4gIGNvbnN0IHRvb2sgPSBmb3JtYXREdXJhdGlvbihyZWNvcmQuZHVyYXRpb25Ncyk7XG4gIHN3aXRjaCAocmVjb3JkLm91dGNvbWUpIHtcbiAgICBjYXNlICdvayc6XG4gICAgICByZXR1cm4gYHN1Y2NlZWRlZCBpbiAke3Rvb2t9YDtcbiAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgIHJldHVybiBgdGltZWQgb3V0IGFmdGVyICR7dG9va31gO1xuICAgIGNhc2UgJ3BhdXNlZCc6XG4gICAgICByZXR1cm4gYHBhdXNlZCBhZnRlciAke3Rvb2t9YDtcbiAgICBjYXNlICdhYm9ydGVkJzpcbiAgICAgIHJldHVybiBgd2FzIGFib3J0ZWQgYWZ0ZXIgJHt0b29rfSR7cmVjb3JkLmVycm9yID8gYCAoJHtyZWNvcmQuZXJyb3IubWVzc2FnZX0pYCA6ICcnfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgZmFpbGVkIGluICR7dG9va30ke2F0dGVtcHRDYXVzZShyZWNvcmQpfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHRvdWNoaW5nIGF0dGVtcHQgd2hvc2UgZWZmZWN0IGlzIHVua25vd24gc2F5cyBzbyAoUDMpIOKAlCB0aGUgb3V0Y29tZSBhbG9uZSAoXCJmYWlsZWRcIiwgXCJ0aW1lZCBvdXRcIikgd291bGQgcmVhZCBhc1xuICogXCJub3RoaW5nIGhhcHBlbmVkXCIsIGFuZCBub3RoaW5nIG1heSBiZSByZXRyaWVkIGJsaW5kbHkgb24gdGhhdCByZWFkaW5nLiBgYXBwbGllZGAgYW5kIGBub25lYCBhZGQgbm90aGluZyB0aGVcbiAqIG91dGNvbWUgZG9lcyBub3Qgc2F5LiBBYnNlbnQgb24gYSB0YXJnZXQgdGhhdCB0b3VjaGVzIG5vdGhpbmcgKGJ5dGUgaWRlbnRpdHkpLlxuICpcbiAqICAgQXR0ZW1wdCAyIG9mIDIgYXQgQ2hhcmdlIGNhcmQgdGltZWQgb3V0IGFmdGVyIDIwcywgZWZmZWN0IG9uIHN0cmlwZSB1bmtub3duOyBzdG9wcGVkOiBubyBhdHRlbXB0cyBsZWZ0LlxuICovXG5mdW5jdGlvbiBlZmZlY3RDbGF1c2UocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlY29yZC5lZmZlY3QgPT09ICd1bmtub3duJyAmJiByZWNvcmQuc3lzdGVtICE9PSB1bmRlZmluZWQgPyBgLCBlZmZlY3Qgb24gJHtyZWNvcmQuc3lzdGVtfSB1bmtub3duYCA6ICcnO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0Q2F1c2UocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogc3RyaW5nIHtcbiAgaWYgKCFyZWNvcmQuZXJyb3IpIHJldHVybiAnJztcbiAgY29uc3QgY2F0ZWdvcnkgPSByZWNvcmQuY2F0ZWdvcnkgJiYgcmVjb3JkLmNhdGVnb3J5ICE9PSAndW5rbm93bicgPyBgJHtyZWNvcmQuY2F0ZWdvcnl9OiBgIDogJyc7XG4gIHJldHVybiBgICgke2NhdGVnb3J5fSR7cmVjb3JkLmVycm9yLm1lc3NhZ2V9KWA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHREZWNpc2lvbihyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBzdHJpbmcge1xuICBpZiAocmVjb3JkLm5leHQgPT09ICdyZXRyeScpIHtcbiAgICBjb25zdCBsZWZ0ID0gcmVjb3JkLnRpbWVMZWZ0TXMgIT09IHVuZGVmaW5lZCA/IGAgKCR7Zm9ybWF0RHVyYXRpb24oTWF0aC5tYXgoMCwgcmVjb3JkLnRpbWVMZWZ0TXMpKX0gbGVmdClgIDogJyc7XG4gICAgcmV0dXJuIChyZWNvcmQuZGVsYXlNcyA/IGAsIHJldHJ5aW5nIGluICR7Zm9ybWF0RHVyYXRpb24ocmVjb3JkLmRlbGF5TXMpfWAgOiAnLCByZXRyeWluZyBpbW1lZGlhdGVseScpICsgbGVmdDtcbiAgfVxuICBpZiAocmVjb3JkLm5leHQgPT09ICdkb25lJykgcmV0dXJuICcnO1xuICBzd2l0Y2ggKHJlY29yZC5yZWFzb24pIHtcbiAgICBjYXNlICdleGhhdXN0ZWQnOlxuICAgICAgcmV0dXJuICc7IHN0b3BwZWQ6IG5vIGF0dGVtcHRzIGxlZnQnO1xuICAgIGNhc2UgJ2RlY2xpbmVkJzpcbiAgICAgIC8vIEEgdGhyb3dpbmcgcHJlZGljYXRlIGlzIFwiZG8gbm90IHJldHJ5XCIgdG9vIOKAlCBidXQgaXQgaXMgYSBicm9rZW4gcHJlZGljYXRlLCBub3QgYSB2ZXJkaWN0LlxuICAgICAgcmV0dXJuIHJlY29yZC5yZXRyeU9uVGhyZXcgPyAnOyBzdG9wcGVkOiByZXRyeU9uIHRocmV3JyA6ICc7IHN0b3BwZWQ6IHJldHJ5T24gZGVjbGluZWQnO1xuICAgIGNhc2UgJ25vLXRpbWUtbGVmdCc6IHtcbiAgICAgIGNvbnN0IGZhY3RzID0gW1xuICAgICAgICAuLi4ocmVjb3JkLnRpbWVMZWZ0TXMgIT09IHVuZGVmaW5lZCA/IFtgJHtmb3JtYXREdXJhdGlvbihNYXRoLm1heCgwLCByZWNvcmQudGltZUxlZnRNcykpfSBsZWZ0YF0gOiBbXSksXG4gICAgICAgIC4uLihyZWNvcmQuZGVsYXlNcyAhPT0gdW5kZWZpbmVkID8gW2BuZXh0IHdhaXQgJHtmb3JtYXREdXJhdGlvbihyZWNvcmQuZGVsYXlNcyl9YF0gOiBbXSksXG4gICAgICBdO1xuICAgICAgcmV0dXJuIGA7IHN0b3BwZWQ6IG5vIHRpbWUgbGVmdCR7ZmFjdHMubGVuZ3RoID4gMCA/IGAgKCR7ZmFjdHMuam9pbignLCAnKX0pYCA6ICcnfWA7XG4gICAgfVxuICAgIGNhc2UgJ2Fib3J0ZWQnOlxuICAgICAgLy8gQW4gYXR0ZW1wdCB0aGF0IHRocmV3IHRoZSBhYm9ydCdzIG93biByZWFzb24gYWxyZWFkeSBzYXlzIGl0IChcIndhcyBhYm9ydGVkXCIpOyBhbiBhdHRlbXB0IHRoYXQgZmFpbGVkIG9uXG4gICAgICAvLyBpdHMgb3duIHdoaWxlIHRoZSBydW4gYWJvcnRlZCBzYXlzIGl0cyBmYWlsdXJlLCB0aGVuIHdoeSB0aGUgc2VyaWVzIHN0b3BwZWQuXG4gICAgICByZXR1cm4gcmVjb3JkLm91dGNvbWUgPT09ICdhYm9ydGVkJyA/ICcnIDogJzsgc3RvcHBlZDogdGhlIHJ1biB3YXMgYWJvcnRlZCc7XG4gICAgY2FzZSAncGF1c2VkJzpcbiAgICAgIC8vIFRoZSBvdXRjb21lIGFscmVhZHkgc2F5cyBpdC5cbiAgICAgIHJldHVybiAnJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGA7IHN0b3BwZWQ6ICR7cmVjb3JkLnJlYXNvbn1gO1xuICB9XG59XG5cbi8qKiBBIGR1cmF0aW9uIGFzIHRoZSBuYXJyYXRpdmUgc2F5cyBpdDogd2hvbGUgbWlsbGlzZWNvbmRzIHVuZGVyIGEgc2Vjb25kLCBzZWNvbmRzIChvbmUgZGVjaW1hbCBhdCBtb3N0KSBhYm92ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihtczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKG1zIDwgMV8wMDApIHJldHVybiBgJHtNYXRoLnJvdW5kKG1zKX1tc2A7XG4gIHJldHVybiBgJHtOdW1iZXIoKG1zIC8gMV8wMDApLnRvRml4ZWQoMSkpfXNgO1xufVxuIl19
@@ -25,4 +25,4 @@ var SilentNarrativeFlowRecorder_js_1 = require("./recorders/SilentNarrativeFlowR
25
25
  Object.defineProperty(exports, "SilentNarrativeFlowRecorder", { enumerable: true, get: function () { return SilentNarrativeFlowRecorder_js_1.SilentNarrativeFlowRecorder; } });
26
26
  var WindowedNarrativeFlowRecorder_js_1 = require("./recorders/WindowedNarrativeFlowRecorder.js");
27
27
  Object.defineProperty(exports, "WindowedNarrativeFlowRecorder", { enumerable: true, get: function () { return WindowedNarrativeFlowRecorder_js_1.WindowedNarrativeFlowRecorder; } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0VBQTJFO0FBQWxFLHlJQUFBLHlCQUF5QixPQUFBO0FBZ0JsQywrRkFBMkY7QUFBbEYseUpBQUEsaUNBQWlDLE9BQUE7QUFHMUMsc0JBQXNCO0FBQ3RCLHlFQUFxRTtBQUE1RCxtSUFBQSxzQkFBc0IsT0FBQTtBQUMvQix1RUFBbUU7QUFBMUQsaUlBQUEscUJBQXFCLE9BQUE7QUFnQjlCLCtFQUErRTtBQUMvRSxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUE7QUFDdEMsbUdBQStGO0FBQXRGLG1KQUFBLDhCQUE4QixPQUFBO0FBQ3ZDLHVHQUFtRztBQUExRix1SkFBQSxnQ0FBZ0MsT0FBQTtBQUN6Qyx1RkFBbUY7QUFBMUUsdUlBQUEsd0JBQXdCLE9BQUE7QUFDakMsaUdBQTZGO0FBQXBGLGlKQUFBLDZCQUE2QixPQUFBO0FBQ3RDLDZGQUF5RjtBQUFoRiw2SUFBQSwyQkFBMkIsT0FBQTtBQUNwQyxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LFxuICBDb21iaW5lZE5hcnJhdGl2ZU9wdGlvbnMsXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRW1pdFJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBOYXJyYXRpdmVGb3JtYXR0ZXIsXG4gIE9wUmVuZGVyQ29udGV4dCxcbiAgU2VsZWN0ZWRSZW5kZXJDb250ZXh0LFxuICBTdGFnZVJlbmRlckNvbnRleHQsXG4gIFN1YmZsb3dSZW5kZXJDb250ZXh0LFxufSBmcm9tICcuL25hcnJhdGl2ZVR5cGVzLmpzJztcbmV4cG9ydCB7IE51bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvciB9IGZyb20gJy4vTnVsbENvbnRyb2xGbG93TmFycmF0aXZlR2VuZXJhdG9yLmpzJztcbmV4cG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEZsb3dSZWNvcmRlciBzeXN0ZW1cbmV4cG9ydCB7IEZsb3dSZWNvcmRlckRpc3BhdGNoZXIgfSBmcm9tICcuL0Zsb3dSZWNvcmRlckRpc3BhdGNoZXIuanMnO1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9OYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBCdWlsdC1pbiBGbG93UmVjb3JkZXIgc3RyYXRlZ2llcyAodHJlZS1zaGFrZWFibGUg4oCUIG9ubHkgaW1wb3J0ZWQgY29kZSBzaGlwcylcbmV4cG9ydCB7IEFkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFByb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvUHJvZ3Jlc3NpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvU2VwYXJhdGVOYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9yZWNvcmRlcnMvV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9uYXJyYXRpdmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0VBQTJFO0FBQWxFLHlJQUFBLHlCQUF5QixPQUFBO0FBaUJsQywrRkFBMkY7QUFBbEYseUpBQUEsaUNBQWlDLE9BQUE7QUFHMUMsc0JBQXNCO0FBQ3RCLHlFQUFxRTtBQUE1RCxtSUFBQSxzQkFBc0IsT0FBQTtBQUMvQix1RUFBbUU7QUFBMUQsaUlBQUEscUJBQXFCLE9BQUE7QUFpQjlCLCtFQUErRTtBQUMvRSxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUE7QUFDdEMsbUdBQStGO0FBQXRGLG1KQUFBLDhCQUE4QixPQUFBO0FBQ3ZDLHVHQUFtRztBQUExRix1SkFBQSxnQ0FBZ0MsT0FBQTtBQUN6Qyx1RkFBbUY7QUFBMUUsdUlBQUEsd0JBQXdCLE9BQUE7QUFDakMsaUdBQTZGO0FBQXBGLGlKQUFBLDZCQUE2QixPQUFBO0FBQ3RDLDZGQUF5RjtBQUFoRiw2SUFBQSwyQkFBMkIsT0FBQTtBQUNwQyxpR0FBNkY7QUFBcEYsaUpBQUEsNkJBQTZCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXR0ZW1wdFJlbmRlckNvbnRleHQsXG4gIEJyZWFrUmVuZGVyQ29udGV4dCxcbiAgQ29tYmluZWROYXJyYXRpdmVFbnRyeSxcbiAgQ29tYmluZWROYXJyYXRpdmVPcHRpb25zLFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRSZW5kZXJDb250ZXh0LFxuICBFcnJvclJlbmRlckNvbnRleHQsXG4gIEZvcmtSZW5kZXJDb250ZXh0LFxuICBMb29wUmVuZGVyQ29udGV4dCxcbiAgTmFycmF0aXZlRm9ybWF0dGVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9uYXJyYXRpdmVUeXBlcy5qcyc7XG5leHBvcnQgeyBOdWxsQ29udHJvbEZsb3dOYXJyYXRpdmVHZW5lcmF0b3IgfSBmcm9tICcuL051bGxDb250cm9sRmxvd05hcnJhdGl2ZUdlbmVyYXRvci5qcyc7XG5leHBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBGbG93UmVjb3JkZXIgc3lzdGVtXG5leHBvcnQgeyBGbG93UmVjb3JkZXJEaXNwYXRjaGVyIH0gZnJvbSAnLi9GbG93UmVjb3JkZXJEaXNwYXRjaGVyLmpzJztcbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0F0dGVtcHRFdmVudCxcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93UnVuRXZlbnQsXG4gIEZsb3dSdW5GYWlsZWRFdmVudCxcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQnVpbHQtaW4gRmxvd1JlY29yZGVyIHN0cmF0ZWdpZXMgKHRyZWUtc2hha2VhYmxlIOKAlCBvbmx5IGltcG9ydGVkIGNvZGUgc2hpcHMpXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL0FkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IE1pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL01pbGVzdG9uZU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1Byb2dyZXNzaXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFJMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1JMRU5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1NlcGFyYXRlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmV4cG9ydCB7IFNpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1NpbGVudE5hcnJhdGl2ZUZsb3dSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vcmVjb3JkZXJzL1dpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbiJdfQ==