footprintjs 9.48.2 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/AGENTS.md +12 -10
  2. package/CLAUDE.md +21 -23
  3. package/README.md +1 -1
  4. package/dist/advanced.js +71 -128
  5. package/dist/esm/advanced.d.ts +24 -58
  6. package/dist/esm/advanced.js +13 -51
  7. package/dist/esm/index.d.ts +5 -8
  8. package/dist/esm/index.js +3 -3
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/capture/index.d.ts +0 -1
  14. package/dist/esm/lib/capture/index.js +1 -2
  15. package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
  16. package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  17. package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
  18. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
  20. package/dist/esm/lib/engine/index.d.ts +1 -1
  21. package/dist/esm/lib/engine/index.js +1 -1
  22. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  24. package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
  25. package/dist/esm/lib/engine/narrative/index.js +1 -1
  26. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  27. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  29. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
  30. package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
  31. package/dist/esm/lib/engine/traversalContext.js +2 -2
  32. package/dist/esm/lib/engine/types.d.ts +2 -10
  33. package/dist/esm/lib/engine/types.js +1 -1
  34. package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
  35. package/dist/esm/lib/ids/reservedIds.js +2 -2
  36. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  37. package/dist/esm/lib/memory/StageContext.d.ts +2 -4
  38. package/dist/esm/lib/memory/StageContext.js +2 -2
  39. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  40. package/dist/esm/lib/memory/index.d.ts +6 -21
  41. package/dist/esm/lib/memory/index.js +4 -22
  42. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  43. package/dist/esm/lib/memory/redaction.js +2 -2
  44. package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
  45. package/dist/esm/lib/memory/runPolicy.js +1 -1
  46. package/dist/esm/lib/reactive/createTypedScope.js +2 -2
  47. package/dist/esm/lib/reactive/writeTraps.js +2 -2
  48. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
  49. package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
  50. package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
  51. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  52. package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
  53. package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
  54. package/dist/esm/lib/recorder/qualityTrace.js +2 -2
  55. package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
  56. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
  57. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
  58. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  59. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  60. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  61. package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
  62. package/dist/esm/lib/runner/resume.js +2 -2
  63. package/dist/esm/lib/runner/snapshot.js +3 -2
  64. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  65. package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
  66. package/dist/esm/recorders.d.ts +2 -3
  67. package/dist/esm/recorders.js +1 -1
  68. package/dist/esm/trace.d.ts +11 -57
  69. package/dist/esm/trace.js +10 -68
  70. package/dist/index.js +3 -3
  71. package/dist/lib/builder/FlowChartBuilder.js +5 -5
  72. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  73. package/dist/lib/capture/index.js +2 -4
  74. package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
  75. package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
  77. package/dist/lib/engine/index.js +1 -1
  78. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  79. package/dist/lib/engine/narrative/index.js +1 -1
  80. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  81. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
  82. package/dist/lib/engine/traversalContext.js +4 -4
  83. package/dist/lib/engine/types.js +1 -1
  84. package/dist/lib/engine/walkSubflowSpec.js +3 -3
  85. package/dist/lib/ids/reservedIds.js +5 -5
  86. package/dist/lib/memory/DiagnosticCollector.js +3 -3
  87. package/dist/lib/memory/StageContext.js +3 -3
  88. package/dist/lib/memory/borrowedMutation.js +3 -3
  89. package/dist/lib/memory/index.js +7 -42
  90. package/dist/lib/memory/redaction.js +3 -3
  91. package/dist/lib/memory/runPolicy.js +1 -1
  92. package/dist/lib/reactive/createTypedScope.js +3 -3
  93. package/dist/lib/reactive/writeTraps.js +4 -4
  94. package/dist/lib/recorder/ControlDepRecorder.js +3 -2
  95. package/dist/lib/recorder/EmitRecorder.js +1 -1
  96. package/dist/lib/recorder/InOutRecorder.js +3 -3
  97. package/dist/lib/recorder/qualityTrace.js +4 -4
  98. package/dist/lib/runner/DeferredObserverTier.js +3 -3
  99. package/dist/lib/runner/ExecutionRuntime.js +6 -9
  100. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  101. package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
  102. package/dist/lib/runner/resume.js +3 -3
  103. package/dist/lib/runner/snapshot.js +6 -5
  104. package/dist/lib/scope/ScopeFacade.js +3 -3
  105. package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
  106. package/dist/recorders.js +1 -1
  107. package/dist/trace.js +18 -120
  108. package/dist/types/advanced.d.ts +24 -58
  109. package/dist/types/index.d.ts +5 -8
  110. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
  111. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
  112. package/dist/types/lib/capture/index.d.ts +0 -1
  113. package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  114. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  115. package/dist/types/lib/engine/index.d.ts +1 -1
  116. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  117. package/dist/types/lib/engine/narrative/index.d.ts +1 -1
  118. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  119. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  120. package/dist/types/lib/engine/traversalContext.d.ts +1 -1
  121. package/dist/types/lib/engine/types.d.ts +2 -10
  122. package/dist/types/lib/memory/StageContext.d.ts +2 -4
  123. package/dist/types/lib/memory/index.d.ts +6 -21
  124. package/dist/types/lib/memory/redaction.d.ts +1 -1
  125. package/dist/types/lib/memory/runPolicy.d.ts +3 -2
  126. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
  127. package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
  128. package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
  129. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
  130. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  131. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  132. package/dist/types/recorders.d.ts +2 -3
  133. package/dist/types/trace.d.ts +11 -57
  134. package/package.json +6 -15
  135. package/dist/esm/lib/capture/freeze.d.ts +0 -91
  136. package/dist/esm/lib/capture/freeze.js +0 -314
  137. package/dist/esm/lib/capture/ownData.d.ts +0 -7
  138. package/dist/esm/lib/capture/ownData.js +0 -15
  139. package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
  140. package/dist/esm/lib/capture/valueKinds.js +0 -142
  141. package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
  142. package/dist/esm/lib/ids/runtimeStageId.js +0 -194
  143. package/dist/esm/lib/memory/EventLog.d.ts +0 -105
  144. package/dist/esm/lib/memory/EventLog.js +0 -148
  145. package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
  146. package/dist/esm/lib/memory/RecordFrame.js +0 -296
  147. package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
  148. package/dist/esm/lib/memory/SharedMemory.js +0 -88
  149. package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
  150. package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
  151. package/dist/esm/lib/memory/admission.d.ts +0 -81
  152. package/dist/esm/lib/memory/admission.js +0 -153
  153. package/dist/esm/lib/memory/backtrack.d.ts +0 -286
  154. package/dist/esm/lib/memory/backtrack.js +0 -457
  155. package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
  156. package/dist/esm/lib/memory/commitLogUtils.js +0 -384
  157. package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
  158. package/dist/esm/lib/memory/deltaEncoding.js +0 -122
  159. package/dist/esm/lib/memory/equality.d.ts +0 -93
  160. package/dist/esm/lib/memory/equality.js +0 -262
  161. package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
  162. package/dist/esm/lib/memory/eventPosition.js +0 -2
  163. package/dist/esm/lib/memory/honesty.d.ts +0 -93
  164. package/dist/esm/lib/memory/honesty.js +0 -92
  165. package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
  166. package/dist/esm/lib/memory/keyPaths.js +0 -227
  167. package/dist/esm/lib/memory/logModel.d.ts +0 -76
  168. package/dist/esm/lib/memory/logModel.js +0 -364
  169. package/dist/esm/lib/memory/merge.d.ts +0 -26
  170. package/dist/esm/lib/memory/merge.js +0 -60
  171. package/dist/esm/lib/memory/pathOps.d.ts +0 -115
  172. package/dist/esm/lib/memory/pathOps.js +0 -290
  173. package/dist/esm/lib/memory/paths.d.ts +0 -52
  174. package/dist/esm/lib/memory/paths.js +0 -57
  175. package/dist/esm/lib/memory/placeholders.d.ts +0 -39
  176. package/dist/esm/lib/memory/placeholders.js +0 -40
  177. package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
  178. package/dist/esm/lib/memory/recordCommit.js +0 -61
  179. package/dist/esm/lib/memory/scrub.d.ts +0 -53
  180. package/dist/esm/lib/memory/scrub.js +0 -74
  181. package/dist/esm/lib/memory/types.d.ts +0 -209
  182. package/dist/esm/lib/memory/types.js +0 -10
  183. package/dist/esm/lib/memory/utils.d.ts +0 -73
  184. package/dist/esm/lib/memory/utils.js +0 -159
  185. package/dist/esm/lib/memory/verbs.d.ts +0 -333
  186. package/dist/esm/lib/memory/verbs.js +0 -427
  187. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
  188. package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
  189. package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
  190. package/dist/esm/lib/scope/detectCircular.js +0 -14
  191. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
  192. package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
  193. package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
  194. package/dist/esm/lib/slice/elementProvenance.js +0 -190
  195. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
  196. package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
  197. package/dist/esm/lib/slice/index.d.ts +0 -25
  198. package/dist/esm/lib/slice/index.js +0 -25
  199. package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
  200. package/dist/esm/lib/slice/keyIndex.js +0 -293
  201. package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
  202. package/dist/esm/lib/slice/keyTimeline.js +0 -113
  203. package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
  204. package/dist/esm/lib/slice/keysReadSources.js +0 -95
  205. package/dist/esm/lib/slice/serialize.d.ts +0 -78
  206. package/dist/esm/lib/slice/serialize.js +0 -278
  207. package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
  208. package/dist/esm/lib/slice/sliceForKey.js +0 -88
  209. package/dist/esm/lib/slice/types.d.ts +0 -567
  210. package/dist/esm/lib/slice/types.js +0 -25
  211. package/dist/esm/lib/time-travel/axis.d.ts +0 -119
  212. package/dist/esm/lib/time-travel/axis.js +0 -179
  213. package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
  214. package/dist/esm/lib/time-travel/bundles.js +0 -136
  215. package/dist/esm/lib/time-travel/chain.d.ts +0 -93
  216. package/dist/esm/lib/time-travel/chain.js +0 -188
  217. package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
  218. package/dist/esm/lib/time-travel/commitStops.js +0 -202
  219. package/dist/esm/lib/time-travel/index.d.ts +0 -22
  220. package/dist/esm/lib/time-travel/index.js +0 -21
  221. package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
  222. package/dist/esm/lib/time-travel/stateAt.js +0 -153
  223. package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
  224. package/dist/esm/lib/time-travel/tagStops.js +0 -102
  225. package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
  226. package/dist/esm/lib/time-travel/timeTravel.js +0 -360
  227. package/dist/esm/lib/time-travel/types.d.ts +0 -470
  228. package/dist/esm/lib/time-travel/types.js +0 -23
  229. package/dist/esm/write.d.ts +0 -47
  230. package/dist/esm/write.js +0 -46
  231. package/dist/lib/capture/freeze.js +0 -320
  232. package/dist/lib/capture/ownData.js +0 -19
  233. package/dist/lib/capture/valueKinds.js +0 -146
  234. package/dist/lib/ids/runtimeStageId.js +0 -210
  235. package/dist/lib/memory/EventLog.js +0 -152
  236. package/dist/lib/memory/RecordFrame.js +0 -300
  237. package/dist/lib/memory/SharedMemory.js +0 -92
  238. package/dist/lib/memory/TransactionBuffer.js +0 -950
  239. package/dist/lib/memory/admission.js +0 -159
  240. package/dist/lib/memory/backtrack.js +0 -463
  241. package/dist/lib/memory/commitLogUtils.js +0 -399
  242. package/dist/lib/memory/deltaEncoding.js +0 -128
  243. package/dist/lib/memory/equality.js +0 -266
  244. package/dist/lib/memory/eventPosition.js +0 -3
  245. package/dist/lib/memory/honesty.js +0 -95
  246. package/dist/lib/memory/keyPaths.js +0 -243
  247. package/dist/lib/memory/logModel.js +0 -372
  248. package/dist/lib/memory/merge.js +0 -64
  249. package/dist/lib/memory/pathOps.js +0 -306
  250. package/dist/lib/memory/paths.js +0 -62
  251. package/dist/lib/memory/placeholders.js +0 -43
  252. package/dist/lib/memory/recordCommit.js +0 -65
  253. package/dist/lib/memory/scrub.js +0 -79
  254. package/dist/lib/memory/types.js +0 -11
  255. package/dist/lib/memory/utils.js +0 -178
  256. package/dist/lib/memory/verbs.js +0 -444
  257. package/dist/lib/recorder/CommitRangeIndex.js +0 -211
  258. package/dist/lib/scope/detectCircular.js +0 -21
  259. package/dist/lib/scope/recorders/summarizeValue.js +0 -10
  260. package/dist/lib/slice/elementProvenance.js +0 -195
  261. package/dist/lib/slice/forwardSliceForKey.js +0 -247
  262. package/dist/lib/slice/index.js +0 -42
  263. package/dist/lib/slice/keyIndex.js +0 -313
  264. package/dist/lib/slice/keyTimeline.js +0 -117
  265. package/dist/lib/slice/keysReadSources.js +0 -101
  266. package/dist/lib/slice/serialize.js +0 -286
  267. package/dist/lib/slice/sliceForKey.js +0 -93
  268. package/dist/lib/slice/types.js +0 -26
  269. package/dist/lib/time-travel/axis.js +0 -184
  270. package/dist/lib/time-travel/bundles.js +0 -144
  271. package/dist/lib/time-travel/chain.js +0 -193
  272. package/dist/lib/time-travel/commitStops.js +0 -206
  273. package/dist/lib/time-travel/index.js +0 -32
  274. package/dist/lib/time-travel/stateAt.js +0 -160
  275. package/dist/lib/time-travel/tagStops.js +0 -106
  276. package/dist/lib/time-travel/timeTravel.js +0 -364
  277. package/dist/lib/time-travel/types.js +0 -24
  278. package/dist/types/lib/capture/freeze.d.ts +0 -91
  279. package/dist/types/lib/capture/ownData.d.ts +0 -7
  280. package/dist/types/lib/capture/valueKinds.d.ts +0 -57
  281. package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
  282. package/dist/types/lib/memory/EventLog.d.ts +0 -105
  283. package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
  284. package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
  285. package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
  286. package/dist/types/lib/memory/admission.d.ts +0 -81
  287. package/dist/types/lib/memory/backtrack.d.ts +0 -286
  288. package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
  289. package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
  290. package/dist/types/lib/memory/equality.d.ts +0 -93
  291. package/dist/types/lib/memory/eventPosition.d.ts +0 -18
  292. package/dist/types/lib/memory/honesty.d.ts +0 -93
  293. package/dist/types/lib/memory/keyPaths.d.ts +0 -125
  294. package/dist/types/lib/memory/logModel.d.ts +0 -76
  295. package/dist/types/lib/memory/merge.d.ts +0 -26
  296. package/dist/types/lib/memory/pathOps.d.ts +0 -115
  297. package/dist/types/lib/memory/paths.d.ts +0 -52
  298. package/dist/types/lib/memory/placeholders.d.ts +0 -39
  299. package/dist/types/lib/memory/recordCommit.d.ts +0 -45
  300. package/dist/types/lib/memory/scrub.d.ts +0 -53
  301. package/dist/types/lib/memory/types.d.ts +0 -209
  302. package/dist/types/lib/memory/utils.d.ts +0 -73
  303. package/dist/types/lib/memory/verbs.d.ts +0 -333
  304. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
  305. package/dist/types/lib/scope/detectCircular.d.ts +0 -13
  306. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
  307. package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
  308. package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
  309. package/dist/types/lib/slice/index.d.ts +0 -25
  310. package/dist/types/lib/slice/keyIndex.d.ts +0 -137
  311. package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
  312. package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
  313. package/dist/types/lib/slice/serialize.d.ts +0 -78
  314. package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
  315. package/dist/types/lib/slice/types.d.ts +0 -567
  316. package/dist/types/lib/time-travel/axis.d.ts +0 -119
  317. package/dist/types/lib/time-travel/bundles.d.ts +0 -77
  318. package/dist/types/lib/time-travel/chain.d.ts +0 -93
  319. package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
  320. package/dist/types/lib/time-travel/index.d.ts +0 -22
  321. package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
  322. package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
  323. package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
  324. package/dist/types/lib/time-travel/types.d.ts +0 -470
  325. package/dist/types/write.d.ts +0 -47
  326. package/dist/write.js +0 -52
@@ -63,7 +63,7 @@
63
63
  * .filter((b) => b.subflowPath[1] === 'sf-agent'); // path[0] is the root
64
64
  * ```
65
65
  */
66
- import { pathSegments } from '../ids/runtimeStageId.js';
66
+ import { idPathSegments as pathSegments } from 'foottrace';
67
67
  import { SequenceStore } from './SequenceStore.js';
68
68
  /** Synthetic id for the top-level run's boundary pair. */
69
69
  export const ROOT_SUBFLOW_ID = '__root__';
@@ -222,4 +222,4 @@ function buildSubflowEntry(event, phase) {
222
222
  isRoot: false,
223
223
  };
224
224
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdFRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFNbkQsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUM7QUFFMUMsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQW1EbEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUFnQyxFQUFFO0lBQzlELE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUNmLEVBQUUsQ0FBUztJQUNwQix5RUFBeUU7SUFDeEQsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFjLENBQUM7SUFFekQsWUFBWSxVQUFnQyxFQUFFO1FBQzVDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxVQUFVLENBQUMsS0FBbUI7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1CO1FBQzFC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IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCBuYW1lZCB2YWx1ZXMgaGF2ZSBwYXNzZWQgdGhlIHJ1bidzIHJ1bGUuIFJvb3QgcnVuXG4gKiAgIHBheWxvYWRzIGFyZSB3YWxrZWQgYXQgZXZlcnkgZGVwdGggKGEgbmVzdGVkIGtleSBieSBpdHMgb3duIG5hbWUgb3JcbiAqICAgZG90dGVkIHBhdGgpIHBsdXMgZXhwbGljaXQgbmVzdGVkIGZpZWxkczsgc2NhbGFycyBwYXNzIHRocm91Z2gsIGFuZCBmb3JrXG4gKiAgIGNoaWxkLUlEIGVudmVsb3BlcyBuZWVkIGV4cGxpY2l0IHJlc3VsdCBwYXRocy4gVGhpcyBpcyBub3QgY29udGVudCBzY2FubmluZy4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0IG9yIHJlY29uc3RydWN0IHRoZSBydW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGluT3V0UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgaW5PdXQgPSBpbk91dFJlY29yZGVyKCk7XG4gKiBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKGluT3V0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bih7IGlucHV0IH0pO1xuICpcbiAqIGluT3V0LmdldFN0ZXBzKCk7ICAgICAgICAgICAgICAgICAgICAvLyBlbnRyeSBib3VuZGFyaWVzIOKAlCB0aW1lbGluZSBwcm9qZWN0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyeShydW50aW1lU3RhZ2VJZCk7ICAgLy8geyBlbnRyeSwgZXhpdCB9IHBhaXIgZm9yIG9uZSBleGVjdXRpb25cbiAqIGluT3V0LmdldEJvdW5kYXJpZXMoKTsgICAgICAgICAgICAgICAvLyBmbGF0IGxpc3QgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpXG4gKiBpbk91dC5nZXRSb290Qm91bmRhcnkoKTsgICAgICAgICAgICAgLy8geyBlbnRyeSwgZXhpdCB9IGZvciB0aGUgdG9wLWxldmVsIHJ1blxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRmlsdGVyaW5nIGJ5IHN1YmZsb3cgcGF0aFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYWdlbnRTdGVwcyA9IGluT3V0XG4gKiAgIC5nZXRTdGVwcygpXG4gKiAgIC5maWx0ZXIoKGIpID0+IGIuc3ViZmxvd1BhdGhbMV0gPT09ICdzZi1hZ2VudCcpOyAgLy8gcGF0aFswXSBpcyB0aGUgcm9vdFxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIsIEZsb3dSdW5FdmVudCwgRmxvd1N1YmZsb3dFdmVudCB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgcGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlU3RvcmUgfSBmcm9tICcuL1NlcXVlbmNlU3RvcmUuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFNjb3BlUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBpbm91dC1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYG5hcnJhdGl2ZSgpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UmVjb3JkZXIob3B0aW9uczogSW5PdXRSZWNvcmRlck9wdGlvbnMgPSB7fSk6IEluT3V0UmVjb3JkZXIge1xuICByZXR1cm4gbmV3IEluT3V0UmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIGBGbG93UmVjb3JkZXJgIGNoYXJ0LWJvdW5kYXJ5IGV2ZW50c1xuICogKHJ1biBzdGFydC9lbmQgKyBzdWJmbG93IGVudHJ5L2V4aXQpIGFuZCBwdXNoZXMgYEluT3V0RW50cnlgIHJlY29yZHMgdG9cbiAqIGl0cyBjb21wb3NlZCBgU2VxdWVuY2VTdG9yZWAgKENvbnZlbnRpb24gMSDigJQgb25lIHB1cnBvc2UgcGVyIHJlY29yZGVyKS5cbiAqXG4gKiBBdHRhY2ggdmlhIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHJlY29yZGVyKWAg4oCUIGZvb3RwcmludGpzXG4gKiBkZXRlY3RzIHRoZSBgRmxvd1JlY29yZGVyYCBtZXRob2Qgc2hhcGUgYW5kIHJvdXRlcyBldmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbk91dFJlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIDE6TiBvcmRlcmVkIHN0b3JhZ2Ugd2l0aCBwZXItc3RlcCBpbmRleCAoQ29udmVudGlvbiAxIOKAlCBjb21wb3NlZCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBuZXcgU2VxdWVuY2VTdG9yZTxJbk91dEVudHJ5PigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgaW5vdXQtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUnVuU3RhcnQoZXZlbnQ6IEZsb3dSdW5FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUucHVzaChidWlsZFJvb3RFbnRyeSgnZW50cnknLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblJ1bkVuZChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5wdXNoKGJ1aWxkUm9vdEVudHJ5KCdleGl0JywgZXZlbnQucGF5bG9hZCkpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZW50cnknKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuc3RvcmUucHVzaChlbnRyeSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSBidWlsZFN1YmZsb3dFbnRyeShldmVudCwgJ2V4aXQnKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuc3RvcmUucHVzaChlbnRyeSk7XG4gIH1cblxuICAvLyDilIDilIAgUXVlcnkgQVBJIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBleGVjdXRpb24gb3JkZXIgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpLiAqL1xuICBnZXRCb3VuZGFyaWVzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0QWxsKCk7XG4gIH1cblxuICAvKiogRW50cnkvZXhpdCBwYWlyIGZvciBvbmUgY2hhcnQgZXhlY3V0aW9uLlxuICAgKiAgUmV0dXJucyBgeyBlbnRyeSwgZXhpdCB9YCDigJQgYGV4aXRgIGlzIGB1bmRlZmluZWRgIGZvciBpbi1wcm9ncmVzcyAvIHBhdXNlZFxuICAgKiAgY2hhcnRzIG9yIGlmIGBydW50aW1lU3RhZ2VJZGAgaXMgdW5rbm93bi4gKi9cbiAgZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5zdG9yZS5nZXRCeUtleShydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5OiBlbnRyaWVzLmZpbmQoKGUpID0+IGUucGhhc2UgPT09ICdlbnRyeScpLFxuICAgICAgZXhpdDogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZXhpdCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogSnVzdCB0aGUgYGVudHJ5YC1waGFzZSBib3VuZGFyaWVzIOKAlCB0aGUgXCJzdGVwIGxpc3RcIiBwcm9qZWN0aW9uIGluXG4gICAqICBleGVjdXRpb24gb3JkZXIuIFRoaXMgaXMgdGhlIG5hdHVyYWwgdGltZWxpbmUgb2YgY2hhcnQgZXhlY3V0aW9uc1xuICAgKiAgZm9yIHNsaWRlciAvIHNjcnViYmluZyBVSXMuIFRoZSB0b3AtbGV2ZWwgcnVuJ3MgZW50cnkgaXMgdGhlIGZpcnN0XG4gICAqICBzdGVwIChkZXB0aCAwKS4gKi9cbiAgZ2V0U3RlcHMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICBjb25zdCBzdGVwczogSW5PdXRFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBiIG9mIHRoaXMuc3RvcmUuZ2V0QWxsKCkpIHtcbiAgICAgIGlmIChiLnBoYXNlID09PSAnZW50cnknKSBzdGVwcy5wdXNoKGIpO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICAvKiogTygxKSBsb29rdXA6IGFsbCBib3VuZGFyeSBlbnRyaWVzIChib3RoIHBoYXNlcykgZm9yIG9uZSBydW50aW1lU3RhZ2VJZC4gKi9cbiAgZ2V0RW50cmllc0ZvclN0ZXAocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0QnlLZXkocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIFByZS1idWlsdCBwZXItc3RlcCByYW5nZSBpbmRleCDigJQgTygxKSBsb29rdXBzIGZvciB0aW1lLXRyYXZlbCBzY3J1YmJpbmcuICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RW50cnlSYW5nZXMoKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmVzc2l2ZSByZXZlYWw6IGJvdW5kYXJpZXMgd2hvc2UgcnVudGltZVN0YWdlSWQgaXMgaW4gdGhlIHZpc2libGUgc2V0LiAqL1xuICBnZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzKTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgc3RvcmVkIGJvdW5kYXJpZXMg4oCUIGNhbGxlZCBieSB0aGUgZXhlY3V0b3IgYmVmb3JlIGVhY2ggcnVuKCkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBUaGUgcm9vdCBydW4ncyBlbnRyeS9leGl0IHBhaXIsIGlmIHRoZSBydW4gaGFzIHN0YXJ0ZWQuXG4gICAqICBDb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgd2FudCB0byBicmFja2V0IHRoZSB0aW1lbGluZSBieSB0aGVcbiAgICogIG91dGVybW9zdCBpbi9vdXQuICovXG4gIGdldFJvb3RCb3VuZGFyeSgpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRhcnkoUk9PVF9SVU5USU1FX1NUQUdFX0lEKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBidW5kbGUgZm9yIGluY2x1c2lvbiBpbiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAuICovXG4gIHRvU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdJbk91dCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoYXJ0IGluL291dCBzdHJlYW0g4oCUIGVudHJ5L2V4aXQgcGFpcnMgYXQgZXZlcnkgY2hhcnQgYm91bmRhcnkgKHJvb3QgKyBzdWJmbG93cyknLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0Qm91bmRhcmllcygpLFxuICAgIH07XG4gIH1cbn1cblxuLy8g4pSA4pSAIEludGVybmFsIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQnVpbGQgdGhlIHN5bnRoZXRpYyByb290IGVudHJ5L2V4aXQuIERlcHRoIGlzIGAwYCBhbmQgdGhlIHBhdGggaXNcbiAqIGBbUk9PVF9TVUJGTE9XX0lEXWAgc28gY29uc3VtZXJzIGdyb3VwaW5nIGJ5IHBhdGggc2VlIHRoZSByb290IGFzIGFcbiAqIHJlZ3VsYXIgdG9wLWxldmVsIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gYnVpbGRSb290RW50cnkocGhhc2U6IEluT3V0UGhhc2UsIHBheWxvYWQ6IHVua25vd24pOiBJbk91dEVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBydW50aW1lU3RhZ2VJZDogUk9PVF9SVU5USU1FX1NUQUdFX0lELFxuICAgIHN1YmZsb3dJZDogUk9PVF9TVUJGTE9XX0lELFxuICAgIGxvY2FsU3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgc3ViZmxvd05hbWU6ICdSdW4nLFxuICAgIHN1YmZsb3dQYXRoOiBbUk9PVF9TVUJGTE9XX0lEXSxcbiAgICBkZXB0aDogMCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN1YmZsb3cgYEluT3V0RW50cnlgIGZyb20gYSBgRmxvd1N1YmZsb3dFdmVudGAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBldmVudCBsYWNrcyBhIGBzdWJmbG93SWRgIChhbm9ueW1vdXMgL1xuICogbWFsZm9ybWVkIHN1YmZsb3cgZXZlbnRzIOKAlCBzYW1lIGRlZmVuc2l2ZSBwb2xpY3kgYXMgYFRvcG9sb2d5UmVjb3JkZXJgKS5cbiAqXG4gKiBQYXRoIGRlcml2YXRpb246IHRoZSBlbmdpbmUgZW1pdHMgYHN1YmZsb3dJZGAgYWxyZWFkeSBwcmVmaXhlZCB3aXRoIHRoZVxuICogZnVsbCBwYXRoIG9mIHBhcmVudCBzdWJmbG93cyAoZS5nLiBgJ3NmLW91dGVyL3NmLWlubmVyJ2ApLiBXZSBkZWNvbXBvc2VcbiAqIHRoYXQgaW50byBzZWdtZW50cyB0byBwb3B1bGF0ZSBgc3ViZmxvd1BhdGhgIGFuZCBjb21wdXRlIGBkZXB0aGAuXG4gKlxuICogU3ViZmxvd3MgbmVzdCBVTkRFUiB0aGUgc3ludGhldGljIHJvb3QgaW4gYHN1YmZsb3dQYXRoYCBzbyB0aGUgdHJlZSBpc1xuICogY29tcGxldGU6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYCBhbmQgZGVwdGggMS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQsIHBoYXNlOiBJbk91dFBoYXNlKTogSW5PdXRFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN1YmZsb3dJZCA9IGV2ZW50LnN1YmZsb3dJZDtcbiAgaWYgKCFzdWJmbG93SWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgcnVudGltZVN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoU2VnbWVudHMoc3ViZmxvd0lkKTtcbiAgY29uc3Qgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JPT1RfU1VCRkxPV19JRCwgLi4uc2VnbWVudHNdO1xuICBjb25zdCBkZXB0aCA9IHN1YmZsb3dQYXRoLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGxvY2FsU3ViZmxvd0lkID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPz8gc3ViZmxvd0lkO1xuICBjb25zdCBwYXlsb2FkID0gcGhhc2UgPT09ICdlbnRyeScgPyBldmVudC5tYXBwZWRJbnB1dCA6IGV2ZW50Lm91dHB1dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgc3ViZmxvd0lkLFxuICAgIGxvY2FsU3ViZmxvd0lkLFxuICAgIHN1YmZsb3dOYW1lOiBldmVudC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICBzdWJmbG93UGF0aCxcbiAgICBkZXB0aCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogZmFsc2UsXG4gIH07XG59XG4iXX0=
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdFRztBQUVILE9BQU8sRUFBRSxjQUFjLElBQUksWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU1uRCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztBQUUxQyxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDO0FBbURsRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQWdDLEVBQUU7SUFDOUQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2YsRUFBRSxDQUFTO0lBQ3BCLHlFQUF5RTtJQUN4RCxLQUFLLEdBQUcsSUFBSSxhQUFhLEVBQWMsQ0FBQztJQUV6RCxZQUFZLFVBQWdDLEVBQUU7UUFDNUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLFVBQVUsQ0FBQyxLQUFtQjtRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBbUI7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXVCO1FBQ25DLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLCtEQUErRDtJQUMvRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7b0RBRWdEO0lBQ2hELFdBQVcsQ0FBQyxjQUFzQjtRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDO1lBQy9DLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQztTQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7MEJBR3NCO0lBQ3RCLFFBQVE7UUFDTixNQUFNLEtBQUssR0FBaUIsRUFBRSxDQUFDO1FBQy9CLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLGNBQWMsQ0FBQyxVQUErQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOzs0QkFFd0I7SUFDeEIsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxpRUFBaUU7SUFDakUsVUFBVTtRQUNSLE9BQU87WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLFdBQVcsRUFBRSxrRkFBa0Y7WUFDL0Ysa0JBQWtCLEVBQUUsV0FBb0I7WUFDeEMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7U0FDM0IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELHlFQUF5RTtBQUV6RTs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBaUIsRUFBRSxPQUFnQjtJQUN6RCxPQUFPO1FBQ0wsY0FBYyxFQUFFLHFCQUFxQjtRQUNyQyxTQUFTLEVBQUUsZUFBZTtRQUMxQixjQUFjLEVBQUUsZUFBZTtRQUMvQixXQUFXLEVBQUUsS0FBSztRQUNsQixXQUFXLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDOUIsS0FBSyxFQUFFLENBQUM7UUFDUixLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxJQUFJO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQXVCLEVBQUUsS0FBaUI7SUFDbkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRWpDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxNQUFNLFdBQVcsR0FBc0IsQ0FBQyxlQUFlLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUN0RSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUUxRSxPQUFPO1FBQ0wsY0FBYztRQUNkLFNBQVM7UUFDVCxjQUFjO1FBQ2QsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ3ZCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztRQUM5QixXQUFXO1FBQ1gsS0FBSztRQUNMLEtBQUs7UUFDTCxPQUFPO1FBQ1AsTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5PdXRSZWNvcmRlciDigJQgY2FwdHVyZXMgZXZlcnkgY2hhcnQncyBpbnB1dC9vdXRwdXQgYXMgZW50cnkvZXhpdCBwYWlycy5cbiAqXG4gKiBUaGUgZ2FwIHRoaXMgZmlsbHM6XG4gKiAgIEV2ZXJ5IGNoYXJ0IGluIGZvb3RwcmludGpzIGhhcyB0d28gbmF0dXJhbCBkYXRhIGJvdW5kYXJpZXM6XG4gKiAgICAgLSB0aGUgKippbnB1dCoqIHRoYXQgZmxvd2VkIGluICh0b3AtbGV2ZWw6IGBydW4oe2lucHV0fSlgO1xuICogICAgICAgc3ViZmxvdzogYGlucHV0TWFwcGVyYCByZXN1bHQpXG4gKiAgICAgLSB0aGUgKipvdXRwdXQqKiB0aGF0IGZsb3dlZCBvdXQgKHRvcC1sZXZlbDogY2hhcnQgcmV0dXJuIHZhbHVlO1xuICogICAgICAgc3ViZmxvdzogc2hhcmVkIHN0YXRlIGF0IGV4aXQgLyBgb3V0cHV0TWFwcGVyYCByZXN1bHQpXG4gKlxuICogICBUb2dldGhlciB3aXRoIGBUb3BvbG9neVJlY29yZGVyYCAoY29tcG9zaXRpb24gc2hhcGUpIHRoaXMgaXMgdGhlXG4gKiAgIHVuaXZlcnNhbCBcInN0ZXBcIiBwcmltaXRpdmUgdGhhdCBkb3duc3RyZWFtIGxheWVycyBwcm9qZWN0IOKAlCBhIExlbnNcbiAqICAgU3RlcEdyYXBoLCBhIFRyYWNlIHZpZXcsIGN1c3RvbSBkYXNoYm9hcmRzLiBBbGwgYmluZCBieSBgcnVudGltZVN0YWdlSWRgLlxuICpcbiAqICAgVGhlIHJvb3QgY2hhcnQgaXMgdHJlYXRlZCBpZGVudGljYWxseSB0byBhbnkgc3ViZmxvdzogYW4gYGVudHJ5YFxuICogICBib3VuZGFyeSBvbiBgb25SdW5TdGFydGAgYW5kIGFuIGBleGl0YCBib3VuZGFyeSBvbiBgb25SdW5FbmRgLCB3aXRoXG4gKiAgIGBzdWJmbG93SWQ6ICdfX3Jvb3RfXydgLiBTbyBjb25zdW1lcnMgYnVpbGRpbmcgXCJldmVyeSBzdGVwIGhhcyBhblxuICogICBpbi9vdXQgYXJyb3dcIiB2aWV3cyBjYW4gY2xvc2UgdGhlIGNoYWluIGF0IHRoZSB0b3AgbGV2ZWwg4oCUIG5vXG4gKiAgIHNwZWNpYWwtY2FzZSByZW5kZXJpbmcgcmVxdWlyZWQuXG4gKlxuICogVHdvIGJvdW5kYXJ5IHBoYXNlcyBwZXIgY2hhcnQgZXhlY3V0aW9uOlxuICogICAxLiBgcGhhc2U6ICdlbnRyeSdgIOKAlCBwYXlsb2FkID0gdGhlIGlucHV0IGNyb3NzaW5nIHRoZSBib3VuZGFyeSBJTlxuICogICAyLiBgcGhhc2U6ICdleGl0J2AgIOKAlCBwYXlsb2FkID0gdGhlIG91dHB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgT1VUXG4gKlxuICogICBMb29wcyByZS1lbnRlcmluZyB0aGUgc2FtZSBzdWJmbG93IGdldCBkaXN0aW5jdCBgcnVudGltZVN0YWdlSWRgc1xuICogICBhdXRvbWF0aWNhbGx5IChwYXJlbnQgc3RhZ2UncyBleGVjdXRpb25JbmRleCBpbmNyZW1lbnRzIHBlciBpdGVyYXRpb24pLlxuICpcbiAqIFBhdXNlIHNlbWFudGljczpcbiAqICAgV2hlbiBhIHN0YWdlIHBhdXNlcyBpbnNpZGUgYSBzdWJmbG93LCB0aGUgZW5naW5lIHJlLXRocm93cyB0aGUgcGF1c2VcbiAqICAgc2lnbmFsIHdpdGhvdXQgZmlyaW5nIGBvblN1YmZsb3dFeGl0YCAob3IgYG9uUnVuRW5kYCkuIFRoZSBzdWJmbG93XG4gKiAgIGhhcyBhbiBgZW50cnlgIHdpdGggbm8gbWF0Y2hpbmcgYGV4aXRgIHVudGlsIHRoZSBydW4gcmVzdW1lcyBhbmRcbiAqICAgZXhpdHMgY2xlYW5seS4gQ29uc3VtZXJzIHNob3VsZCBoYW5kbGUgZW50cnktd2l0aG91dC1leGl0IGdyYWNlZnVsbHlcbiAqICAgKGl0IG1lYW5zIFwiaW4gcHJvZ3Jlc3NcIiBvciBcInBhdXNlZFwiKS4gVGhlIGBnZXRCb3VuZGFyeSgpYCBoZWxwZXJcbiAqICAgcmV0dXJucyBgeyBlbnRyeSwgZXhpdDogdW5kZWZpbmVkIH1gIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBSZWRhY3Rpb246XG4gKiAgIFBheWxvYWQgcmVkYWN0aW9uIGlzIHRoZSBlbmdpbmUncyByZXNwb25zaWJpbGl0eSAoYFJlZGFjdGlvblBvbGljeWApLlxuICogICBCeSB0aGUgdGltZSBwYXlsb2FkcyByZWFjaCB0aGlzIHJlY29yZGVyIHZpYSBgRmxvd1N1YmZsb3dFdmVudGAgb3JcbiAqICAgYEZsb3dSdW5FdmVudGAsIG5hbWVkIHZhbHVlcyBoYXZlIHBhc3NlZCB0aGUgcnVuJ3MgcnVsZS4gUm9vdCBydW5cbiAqICAgcGF5bG9hZHMgYXJlIHdhbGtlZCBhdCBldmVyeSBkZXB0aCAoYSBuZXN0ZWQga2V5IGJ5IGl0cyBvd24gbmFtZSBvclxuICogICBkb3R0ZWQgcGF0aCkgcGx1cyBleHBsaWNpdCBuZXN0ZWQgZmllbGRzOyBzY2FsYXJzIHBhc3MgdGhyb3VnaCwgYW5kIGZvcmtcbiAqICAgY2hpbGQtSUQgZW52ZWxvcGVzIG5lZWQgZXhwbGljaXQgcmVzdWx0IHBhdGhzLiBUaGlzIGlzIG5vdCBjb250ZW50IHNjYW5uaW5nLiBUaGUgcmVjb3JkZXJcbiAqICAgZG9lcyBub3QgKGFuZCBzaG91bGQgbm90KSByZS1yZWRhY3Qgb3IgcmVjb25zdHJ1Y3QgdGhlIHJ1bi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgaW5PdXRSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBjb25zdCBpbk91dCA9IGluT3V0UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoaW5PdXQpO1xuICogYXdhaXQgZXhlY3V0b3IucnVuKHsgaW5wdXQgfSk7XG4gKlxuICogaW5PdXQuZ2V0U3RlcHMoKTsgICAgICAgICAgICAgICAgICAgIC8vIGVudHJ5IGJvdW5kYXJpZXMg4oCUIHRpbWVsaW5lIHByb2plY3Rpb25cbiAqIGluT3V0LmdldEJvdW5kYXJ5KHJ1bnRpbWVTdGFnZUlkKTsgICAvLyB7IGVudHJ5LCBleGl0IH0gcGFpciBmb3Igb25lIGV4ZWN1dGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcmllcygpOyAgICAgICAgICAgICAgIC8vIGZsYXQgbGlzdCAoZW50cnkrZXhpdCBpbnRlcmxlYXZlZClcbiAqIGluT3V0LmdldFJvb3RCb3VuZGFyeSgpOyAgICAgICAgICAgICAvLyB7IGVudHJ5LCBleGl0IH0gZm9yIHRoZSB0b3AtbGV2ZWwgcnVuXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBGaWx0ZXJpbmcgYnkgc3ViZmxvdyBwYXRoXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhZ2VudFN0ZXBzID0gaW5PdXRcbiAqICAgLmdldFN0ZXBzKClcbiAqICAgLmZpbHRlcigoYikgPT4gYi5zdWJmbG93UGF0aFsxXSA9PT0gJ3NmLWFnZW50Jyk7ICAvLyBwYXRoWzBdIGlzIHRoZSByb290XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBpZFBhdGhTZWdtZW50cyBhcyBwYXRoU2VnbWVudHMgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciwgRmxvd1J1bkV2ZW50LCBGbG93U3ViZmxvd0V2ZW50IH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBTZXF1ZW5jZVN0b3JlIH0gZnJvbSAnLi9TZXF1ZW5jZVN0b3JlLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBJbk91dFBoYXNlID0gJ2VudHJ5JyB8ICdleGl0JztcblxuLyoqIFN5bnRoZXRpYyBpZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4ncyBib3VuZGFyeSBwYWlyLiAqL1xuZXhwb3J0IGNvbnN0IFJPT1RfU1VCRkxPV19JRCA9ICdfX3Jvb3RfXyc7XG5cbi8qKiBTeW50aGV0aWMgcnVudGltZVN0YWdlSWQgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9SVU5USU1FX1NUQUdFX0lEID0gJ19fcm9vdF9fIzAnO1xuXG4vKipcbiAqIE9uZSBoYWxmIG9mIGEgY2hhcnQgZXhlY3V0aW9uIGJvdW5kYXJ5LiBFbnRyeS9leGl0IHBhaXJzIHNoYXJlIGBydW50aW1lU3RhZ2VJZGAuXG4gKlxuICogTmFtaW5nIGZvbGxvd3MgdGhlIGVuZ2luZTogYHN1YmZsb3dJZGAgaXMgdGhlIHBhdGgtcHJlZml4ZWQgaWRlbnRpZmllciB0aGVcbiAqIGVuZ2luZSBlbWl0cyAoZS5nLiBgJ3NmLW91dGVyL3NmLWlubmVyJ2AgZm9yIG5lc3RlZCBzdWJmbG93cykuIEZvciB0aGVcbiAqIHRvcC1sZXZlbCBydW4sIGl0J3MgdGhlIHN5bnRoZXRpYyBgJ19fcm9vdF9fJ2AuIGBzdWJmbG93UGF0aGAgaXMgdGhlXG4gKiBkZWNvbXBvc2l0aW9uIGludG8gc2VnbWVudHMg4oCUIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYmVjYXVzZSBjb25zdW1lcnNcbiAqIG9mdGVuIHF1ZXJ5IC8gZ3JvdXAgYnkgdGhlIHBhdGggdHJlZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbk91dEVudHJ5IHtcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIOKAlCBzYW1lIHZhbHVlIGZvciB0aGUgZW50cnkvZXhpdCBwYWlyIG9mIG9uZSBleGVjdXRpb24uXG4gICAqICBUb3AtbGV2ZWwgcnVuIHVzZXMgdGhlIHN5bnRoZXRpYyBgUk9PVF9SVU5USU1FX1NUQUdFX0lEYC4gKi9cbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZGVudGlmaWVyIChtYXRjaGVzIHRoZSBlbmdpbmUncyBgRmxvd1N1YmZsb3dFdmVudC5zdWJmbG93SWRgKS5cbiAgICogIFRvcC1sZXZlbCDihpIgYCdfX3Jvb3RfXydgLiBTdWJmbG93IOKGkiBgJ3NmLW91dGVyJ2Agb3IgYCdzZi1vdXRlci9zZi1pbm5lcidgLiAqL1xuICByZWFkb25seSBzdWJmbG93SWQ6IHN0cmluZztcbiAgLyoqIExhc3Qgc2VnbWVudCBvZiBgc3ViZmxvd0lkYCDigJQgY29udmVuaWVuY2UgZm9yIGNvbnN1bWVycyB0aGF0IGdyb3VwIGJ5IGxlYWYgbmFtZS5cbiAgICogIFRvcC1sZXZlbCDihpIgYCdfX3Jvb3RfXydgLiAqL1xuICByZWFkb25seSBsb2NhbFN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGlzcGxheSBuYW1lIChmcm9tIHRoZSBidWlsZGVyOyBgJ1J1bidgIGZvciB0aGUgdG9wLWxldmVsIHJ1bikuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIC8qKiBCdWlsZC10aW1lIGRlc2NyaXB0aW9uIGZyb20gdGhlIHN1YmZsb3cncyByb290IHN0YWdlLlxuICAgKiAgQ2FycmllcyB0YXhvbm9teSBtYXJrZXJzIChlLmcuIGAnQWdlbnQ6IFJlQWN0IGxvb3AnYCkuIFVuZGVmaW5lZCBmb3Igcm9vdC4gKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBEZWNvbXBvc2l0aW9uIG9mIGBzdWJmbG93SWRgIGludG8gc2VnbWVudHMuIFRvcC1sZXZlbCDihpIgYFsnX19yb290X18nXWAuXG4gICAqICBTdWJmbG93cyBsaXZlIFVOREVSIHRoZSByb290OiBhIHRvcC1sZXZlbCBzdWJmbG93IGhhcyBwYXRoIGBbJ19fcm9vdF9fJywgJ3NmLXgnXWAuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIERlcHRoIGluIHRoZSBzdWJmbG93IHRyZWUuIFJvb3Qg4oaSIDAuIEZpcnN0LWxldmVsIHN1YmZsb3cg4oaSIDEuICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKiBXaGljaCBzaWRlIG9mIHRoZSBib3VuZGFyeSB0aGlzIGVudHJ5IHJlcHJlc2VudHMuICovXG4gIHJlYWRvbmx5IHBoYXNlOiBJbk91dFBoYXNlO1xuICAvKiogRGF0YSBjcm9zc2luZyB0aGUgYm91bmRhcnkuXG4gICAqICAtIGBwaGFzZTogJ2VudHJ5J2Ag4oaSIGBpbnB1dE1hcHBlcmAgcmVzdWx0IChzdWJmbG93KSBvciBgcnVuKHtpbnB1dH0pYCAocm9vdClcbiAgICogIC0gYHBoYXNlOiAnZXhpdCdgICDihpIgc3ViZmxvdyBzaGFyZWQgc3RhdGUgYXQgZXhpdCAoc3ViZmxvdykgb3IgY2hhcnQgcmV0dXJuIHZhbHVlIChyb290KVxuICAgKlxuICAgKiAgVW5kZWZpbmVkIHdoZW4gbm8gbWFwcGVyIC8gbm8gaW5wdXQgd2FzIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSBwYXlsb2FkPzogdW5rbm93bjtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIGVudHJ5IGNhbWUgZnJvbSB0aGUgdG9wLWxldmVsIHJ1biAoYG9uUnVuU3RhcnRgIC8gYG9uUnVuRW5kYClcbiAgICogIHJhdGhlciB0aGFuIGZyb20gYSBzdWJmbG93IChgb25TdWJmbG93RW50cnlgIC8gYG9uU3ViZmxvd0V4aXRgKS5cbiAgICogIExlbnMgdXNlcyB0aGlzIHRvIHJlbmRlciB0aGUgcm9vdCBwYWlyIGFzIGB1c2VyIOKGkiBydW4g4oaSIHVzZXJgIGluc3RlYWQgb2ZcbiAgICogIHRoZSByZWd1bGFyIHN1YmZsb3cgc2hhcGUuICovXG4gIHJlYWRvbmx5IGlzUm9vdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbk91dFJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBTY29wZVJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgaW5vdXQtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgdG9wb2xvZ3lSZWNvcmRlcigpYCAvIGBuYXJyYXRpdmUoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbk91dFJlY29yZGVyKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pOiBJbk91dFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBJbk91dFJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBgRmxvd1JlY29yZGVyYCBjaGFydC1ib3VuZGFyeSBldmVudHNcbiAqIChydW4gc3RhcnQvZW5kICsgc3ViZmxvdyBlbnRyeS9leGl0KSBhbmQgcHVzaGVzIGBJbk91dEVudHJ5YCByZWNvcmRzIHRvXG4gKiBpdHMgY29tcG9zZWQgYFNlcXVlbmNlU3RvcmVgIChDb252ZW50aW9uIDEg4oCUIG9uZSBwdXJwb3NlIHBlciByZWNvcmRlcikuXG4gKlxuICogQXR0YWNoIHZpYSBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIOKAlCBmb290cHJpbnRqc1xuICogZGV0ZWN0cyB0aGUgYEZsb3dSZWNvcmRlcmAgbWV0aG9kIHNoYXBlIGFuZCByb3V0ZXMgZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSW5PdXRSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKiAxOk4gb3JkZXJlZCBzdG9yYWdlIHdpdGggcGVyLXN0ZXAgaW5kZXggKENvbnZlbnRpb24gMSDigJQgY29tcG9zZWQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gbmV3IFNlcXVlbmNlU3RvcmU8SW5PdXRFbnRyeT4oKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk91dFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQgPz8gYGlub3V0LSR7KytfY291bnRlcn1gO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3dSZWNvcmRlciBob29rcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvblJ1blN0YXJ0KGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLnB1c2goYnVpbGRSb290RW50cnkoJ2VudHJ5JywgZXZlbnQucGF5bG9hZCkpO1xuICB9XG5cbiAgb25SdW5FbmQoZXZlbnQ6IEZsb3dSdW5FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUucHVzaChidWlsZFJvb3RFbnRyeSgnZXhpdCcsIGV2ZW50LnBheWxvYWQpKTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSBidWlsZFN1YmZsb3dFbnRyeShldmVudCwgJ2VudHJ5Jyk7XG4gICAgaWYgKGVudHJ5KSB0aGlzLnN0b3JlLnB1c2goZW50cnkpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5ID0gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQsICdleGl0Jyk7XG4gICAgaWYgKGVudHJ5KSB0aGlzLnN0b3JlLnB1c2goZW50cnkpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJ5IEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQWxsIGVudHJpZXMgaW4gZXhlY3V0aW9uIG9yZGVyIChlbnRyeStleGl0IGludGVybGVhdmVkKS4gKi9cbiAgZ2V0Qm91bmRhcmllcygpOiBJbk91dEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEFsbCgpO1xuICB9XG5cbiAgLyoqIEVudHJ5L2V4aXQgcGFpciBmb3Igb25lIGNoYXJ0IGV4ZWN1dGlvbi5cbiAgICogIFJldHVybnMgYHsgZW50cnksIGV4aXQgfWAg4oCUIGBleGl0YCBpcyBgdW5kZWZpbmVkYCBmb3IgaW4tcHJvZ3Jlc3MgLyBwYXVzZWRcbiAgICogIGNoYXJ0cyBvciBpZiBgcnVudGltZVN0YWdlSWRgIGlzIHVua25vd24uICovXG4gIGdldEJvdW5kYXJ5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMuc3RvcmUuZ2V0QnlLZXkocnVudGltZVN0YWdlSWQpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeTogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZW50cnknKSxcbiAgICAgIGV4aXQ6IGVudHJpZXMuZmluZCgoZSkgPT4gZS5waGFzZSA9PT0gJ2V4aXQnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEp1c3QgdGhlIGBlbnRyeWAtcGhhc2UgYm91bmRhcmllcyDigJQgdGhlIFwic3RlcCBsaXN0XCIgcHJvamVjdGlvbiBpblxuICAgKiAgZXhlY3V0aW9uIG9yZGVyLiBUaGlzIGlzIHRoZSBuYXR1cmFsIHRpbWVsaW5lIG9mIGNoYXJ0IGV4ZWN1dGlvbnNcbiAgICogIGZvciBzbGlkZXIgLyBzY3J1YmJpbmcgVUlzLiBUaGUgdG9wLWxldmVsIHJ1bidzIGVudHJ5IGlzIHRoZSBmaXJzdFxuICAgKiAgc3RlcCAoZGVwdGggMCkuICovXG4gIGdldFN0ZXBzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEluT3V0RW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYiBvZiB0aGlzLnN0b3JlLmdldEFsbCgpKSB7XG4gICAgICBpZiAoYi5waGFzZSA9PT0gJ2VudHJ5Jykgc3RlcHMucHVzaChiKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqIE8oMSkgbG9va3VwOiBhbGwgYm91bmRhcnkgZW50cmllcyAoYm90aCBwaGFzZXMpIGZvciBvbmUgcnVudGltZVN0YWdlSWQuICovXG4gIGdldEVudHJpZXNGb3JTdGVwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBJbk91dEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEJ5S2V5KHJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKiBQcmUtYnVpbHQgcGVyLXN0ZXAgcmFuZ2UgaW5kZXgg4oCUIE8oMSkgbG9va3VwcyBmb3IgdGltZS10cmF2ZWwgc2NydWJiaW5nLiAqL1xuICBnZXRFbnRyeVJhbmdlcygpOiBSZWFkb25seU1hcDxzdHJpbmcsIHsgcmVhZG9ubHkgZmlyc3RJZHg6IG51bWJlcjsgcmVhZG9ubHkgZW5kSWR4OiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEVudHJ5UmFuZ2VzKCk7XG4gIH1cblxuICAvKiogUHJvZ3Jlc3NpdmUgcmV2ZWFsOiBib3VuZGFyaWVzIHdob3NlIHJ1bnRpbWVTdGFnZUlkIGlzIGluIHRoZSB2aXNpYmxlIHNldC4gKi9cbiAgZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkczogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkcyk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHN0b3JlZCBib3VuZGFyaWVzIOKAlCBjYWxsZWQgYnkgdGhlIGV4ZWN1dG9yIGJlZm9yZSBlYWNoIHJ1bigpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmNsZWFyKCk7XG4gIH1cblxuICAvKiogVGhlIHJvb3QgcnVuJ3MgZW50cnkvZXhpdCBwYWlyLCBpZiB0aGUgcnVuIGhhcyBzdGFydGVkLlxuICAgKiAgQ29udmVuaWVuY2UgZm9yIGNvbnN1bWVycyB0aGF0IHdhbnQgdG8gYnJhY2tldCB0aGUgdGltZWxpbmUgYnkgdGhlXG4gICAqICBvdXRlcm1vc3QgaW4vb3V0LiAqL1xuICBnZXRSb290Qm91bmRhcnkoKTogeyBlbnRyeT86IEluT3V0RW50cnk7IGV4aXQ/OiBJbk91dEVudHJ5IH0ge1xuICAgIHJldHVybiB0aGlzLmdldEJvdW5kYXJ5KFJPT1RfUlVOVElNRV9TVEFHRV9JRCk7XG4gIH1cblxuICAvKiogU25hcHNob3QgYnVuZGxlIGZvciBpbmNsdXNpb24gaW4gYGV4ZWN1dG9yLmdldFNuYXBzaG90KClgLiAqL1xuICB0b1NuYXBzaG90KCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnSW5PdXQnLFxuICAgICAgZGVzY3JpcHRpb246ICdDaGFydCBpbi9vdXQgc3RyZWFtIOKAlCBlbnRyeS9leGl0IHBhaXJzIGF0IGV2ZXJ5IGNoYXJ0IGJvdW5kYXJ5IChyb290ICsgc3ViZmxvd3MpJyxcbiAgICAgIHByZWZlcnJlZE9wZXJhdGlvbjogJ3RyYW5zbGF0ZScgYXMgY29uc3QsXG4gICAgICBkYXRhOiB0aGlzLmdldEJvdW5kYXJpZXMoKSxcbiAgICB9O1xuICB9XG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgcm9vdCBlbnRyeS9leGl0LiBEZXB0aCBpcyBgMGAgYW5kIHRoZSBwYXRoIGlzXG4gKiBgW1JPT1RfU1VCRkxPV19JRF1gIHNvIGNvbnN1bWVycyBncm91cGluZyBieSBwYXRoIHNlZSB0aGUgcm9vdCBhcyBhXG4gKiByZWd1bGFyIHRvcC1sZXZlbCBjb250YWluZXIuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUm9vdEVudHJ5KHBoYXNlOiBJbk91dFBoYXNlLCBwYXlsb2FkOiB1bmtub3duKTogSW5PdXRFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgcnVudGltZVN0YWdlSWQ6IFJPT1RfUlVOVElNRV9TVEFHRV9JRCxcbiAgICBzdWJmbG93SWQ6IFJPT1RfU1VCRkxPV19JRCxcbiAgICBsb2NhbFN1YmZsb3dJZDogUk9PVF9TVUJGTE9XX0lELFxuICAgIHN1YmZsb3dOYW1lOiAnUnVuJyxcbiAgICBzdWJmbG93UGF0aDogW1JPT1RfU1VCRkxPV19JRF0sXG4gICAgZGVwdGg6IDAsXG4gICAgcGhhc2UsXG4gICAgcGF5bG9hZCxcbiAgICBpc1Jvb3Q6IHRydWUsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSBzdWJmbG93IGBJbk91dEVudHJ5YCBmcm9tIGEgYEZsb3dTdWJmbG93RXZlbnRgLlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgZXZlbnQgbGFja3MgYSBgc3ViZmxvd0lkYCAoYW5vbnltb3VzIC9cbiAqIG1hbGZvcm1lZCBzdWJmbG93IGV2ZW50cyDigJQgc2FtZSBkZWZlbnNpdmUgcG9saWN5IGFzIGBUb3BvbG9neVJlY29yZGVyYCkuXG4gKlxuICogUGF0aCBkZXJpdmF0aW9uOiB0aGUgZW5naW5lIGVtaXRzIGBzdWJmbG93SWRgIGFscmVhZHkgcHJlZml4ZWQgd2l0aCB0aGVcbiAqIGZ1bGwgcGF0aCBvZiBwYXJlbnQgc3ViZmxvd3MgKGUuZy4gYCdzZi1vdXRlci9zZi1pbm5lcidgKS4gV2UgZGVjb21wb3NlXG4gKiB0aGF0IGludG8gc2VnbWVudHMgdG8gcG9wdWxhdGUgYHN1YmZsb3dQYXRoYCBhbmQgY29tcHV0ZSBgZGVwdGhgLlxuICpcbiAqIFN1YmZsb3dzIG5lc3QgVU5ERVIgdGhlIHN5bnRoZXRpYyByb290IGluIGBzdWJmbG93UGF0aGAgc28gdGhlIHRyZWUgaXNcbiAqIGNvbXBsZXRlOiBhIHRvcC1sZXZlbCBzdWJmbG93IGhhcyBwYXRoIGBbJ19fcm9vdF9fJywgJ3NmLXgnXWAgYW5kIGRlcHRoIDEuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50LCBwaGFzZTogSW5PdXRQaGFzZSk6IEluT3V0RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzdWJmbG93SWQgPSBldmVudC5zdWJmbG93SWQ7XG4gIGlmICghc3ViZmxvd0lkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHJ1bnRpbWVTdGFnZUlkID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQgPz8gJyc7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aFNlZ21lbnRzKHN1YmZsb3dJZCk7XG4gIGNvbnN0IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSA9IFtST09UX1NVQkZMT1dfSUQsIC4uLnNlZ21lbnRzXTtcbiAgY29uc3QgZGVwdGggPSBzdWJmbG93UGF0aC5sZW5ndGggLSAxO1xuICBjb25zdCBsb2NhbFN1YmZsb3dJZCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdID8/IHN1YmZsb3dJZDtcbiAgY29uc3QgcGF5bG9hZCA9IHBoYXNlID09PSAnZW50cnknID8gZXZlbnQubWFwcGVkSW5wdXQgOiBldmVudC5vdXRwdXRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgIHN1YmZsb3dJZCxcbiAgICBsb2NhbFN1YmZsb3dJZCxcbiAgICBzdWJmbG93TmFtZTogZXZlbnQubmFtZSxcbiAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgc3ViZmxvd1BhdGgsXG4gICAgZGVwdGgsXG4gICAgcGhhc2UsXG4gICAgcGF5bG9hZCxcbiAgICBpc1Jvb3Q6IGZhbHNlLFxuICB9O1xufVxuIl19
@@ -13,7 +13,7 @@
13
13
  * Root cause: quality dropped at call-llm#5 (0.8 → 0.3, Δ0.5)
14
14
  * ```
15
15
  */
16
- import type { CommitBundle } from '../memory/types.js';
16
+ import type { CommitBundle } from 'foottrace';
17
17
  import type { QualityEntry } from './QualityRecorder.js';
18
18
  /** Minimal per-step quality lookup — satisfied by `QualityRecorder` (structural, decoupled). */
19
19
  export interface QualityLookup {
@@ -13,7 +13,7 @@
13
13
  * Root cause: quality dropped at call-llm#5 (0.8 → 0.3, Δ0.5)
14
14
  * ```
15
15
  */
16
- import { causalChain, flattenCausalDAG } from '../memory/backtrack.js';
16
+ import { causalChain, flattenCausalDAG } from 'foottrace';
17
17
  /**
18
18
  * Build a quality stack trace by decorating a causal chain with scores.
19
19
  *
@@ -88,4 +88,4 @@ export function formatQualityTrace(trace) {
88
88
  }
89
89
  return lines.join('\n');
90
90
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eVRyYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUErQnZFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixTQUF5QixFQUN6QixlQUE4QixFQUM5QixPQUFlLEVBQ2YsUUFBUSxHQUFHLEVBQUU7SUFFYixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUVqSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFtQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDaEQsTUFB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QUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEtBQUssQ0FBQyxJQUFJLENBQ1Isa0NBQWtDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRztZQUN2RSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNsRyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBxdWFsaXR5VHJhY2UoKSDigJQgUXVhbGl0eSBTdGFjayBUcmFjZSBidWlsdCBvbiBjYXVzYWxDaGFpbigpLlxuICpcbiAqIFRoaW4gbGF5ZXIgb3ZlciBgbWVtb3J5L2JhY2t0cmFjay5jYXVzYWxDaGFpbigpYCB0aGF0IGRlY29yYXRlc1xuICogZWFjaCBjYXVzYWwgbm9kZSB3aXRoIHF1YWxpdHkgc2NvcmVzIGZyb20gYSBRdWFsaXR5UmVjb3JkZXIuXG4gKlxuICogYGBgXG4gKiBRdWFsaXR5IFRyYWNlIChzY29yZTogMC4zIGF0IGNhbGwtbGxtIzUpOlxuICogICBhdCBjYWxsLWxsbSM1ICAgICBzY29yZT0wLjMgIOKGkCBxdWFsaXR5IGRyb3BwZWQgaGVyZVxuICogICBhdCBzeXN0ZW0tcHJvbXB0IzEgc2NvcmU9MC44ICDihpAgc3lzdGVtUHJvbXB0IHdhcyBnb29kXG4gKiAgIGF0IHNlZWQjMCAgICAgICAgICBzY29yZT0xLjAgIOKGkCBpbnB1dCB3YXMgY2xlYW5cbiAqXG4gKiBSb290IGNhdXNlOiBxdWFsaXR5IGRyb3BwZWQgYXQgY2FsbC1sbG0jNSAoMC44IOKGkiAwLjMsIM6UMC41KVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcgfSBmcm9tICcuLi9tZW1vcnkvYmFja3RyYWNrLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUXVhbGl0eUVudHJ5IH0gZnJvbSAnLi9RdWFsaXR5UmVjb3JkZXIuanMnO1xuXG4vKiogTWluaW1hbCBwZXItc3RlcCBxdWFsaXR5IGxvb2t1cCDigJQgc2F0aXNmaWVkIGJ5IGBRdWFsaXR5UmVjb3JkZXJgIChzdHJ1Y3R1cmFsLCBkZWNvdXBsZWQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5TG9va3VwIHtcbiAgZ2V0QnlLZXkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFF1YWxpdHlFbnRyeSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgc2luZ2xlIGZyYW1lIGluIHRoZSBxdWFsaXR5IHN0YWNrIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5RnJhbWUge1xuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc2NvcmU6IG51bWJlcjtcbiAgZmFjdG9yczogc3RyaW5nW107XG4gIGxpbmtlZEJ5OiBzdHJpbmc7XG4gIGRlcHRoOiBudW1iZXI7XG59XG5cbi8qKiBUaGUgZnVsbCBxdWFsaXR5IHN0YWNrIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5U3RhY2tUcmFjZSB7XG4gIHN0YXJ0SWQ6IHN0cmluZztcbiAgc3RhcnRTY29yZTogbnVtYmVyO1xuICBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdO1xuICByb290Q2F1c2U/OiB7XG4gICAgZnJhbWU6IFF1YWxpdHlGcmFtZTtcbiAgICBwcmV2aW91c0ZyYW1lOiBRdWFsaXR5RnJhbWU7XG4gICAgZHJvcDogbnVtYmVyO1xuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgcXVhbGl0eSBzdGFjayB0cmFjZSBieSBkZWNvcmF0aW5nIGEgY2F1c2FsIGNoYWluIHdpdGggc2NvcmVzLlxuICpcbiAqIEBwYXJhbSBjb21taXRMb2cgICAgICAgIEZyb20gZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5jb21taXRMb2dcbiAqIEBwYXJhbSBxdWFsaXR5UmVjb3JkZXIgIFF1YWxpdHlSZWNvcmRlciBhdHRhY2hlZCBkdXJpbmcgZXhlY3V0aW9uXG4gKiBAcGFyYW0gc3RhcnRJZCAgICAgICAgICBydW50aW1lU3RhZ2VJZCB0byBzdGFydCBmcm9tXG4gKiBAcGFyYW0gbWF4RGVwdGggICAgICAgICBNYXhpbXVtIGJhY2t0cmFja2luZyBkZXB0aCAoZGVmYXVsdDogMjApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWFsaXR5VHJhY2UoXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIHF1YWxpdHlSZWNvcmRlcjogUXVhbGl0eUxvb2t1cCxcbiAgc3RhcnRJZDogc3RyaW5nLFxuICBtYXhEZXB0aCA9IDIwLFxuKTogUXVhbGl0eVN0YWNrVHJhY2Uge1xuICBjb25zdCBzdGFydEVudHJ5ID0gcXVhbGl0eVJlY29yZGVyLmdldEJ5S2V5KHN0YXJ0SWQpO1xuICBpZiAoIXN0YXJ0RW50cnkpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiAtMSwgZnJhbWVzOiBbXSB9O1xuICB9XG5cbiAgLy8gVXNlIGNhdXNhbENoYWluIHRvIGJ1aWxkIHRoZSBEQUcsIHByb3ZpZGluZyBrZXlzUmVhZCBmcm9tIHRoZSBRdWFsaXR5UmVjb3JkZXJcbiAgY29uc3Qgcm9vdCA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgc3RhcnRJZCwgKGlkKSA9PiBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkoaWQpPy5rZXlzUmVhZCA/PyBbXSwgeyBtYXhEZXB0aCB9KTtcblxuICBpZiAoIXJvb3QpIHtcbiAgICByZXR1cm4geyBzdGFydElkLCBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLCBmcmFtZXM6IFtdIH07XG4gIH1cblxuICAvLyBGbGF0dGVuIERBRyB0byBCRlMtb3JkZXJlZCBmcmFtZXMsIGRlY29yYXRlIHdpdGggcXVhbGl0eSBzY29yZXNcbiAgY29uc3Qgbm9kZXMgPSBmbGF0dGVuQ2F1c2FsREFHKHJvb3QpO1xuICBjb25zdCBmcmFtZXM6IFF1YWxpdHlGcmFtZVtdID0gbm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkobm9kZS5ydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBub2RlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3RhZ2VOYW1lOiBub2RlLnN0YWdlTmFtZSxcbiAgICAgIHNjb3JlOiBlbnRyeT8uc2NvcmUgPz8gLTEsXG4gICAgICBmYWN0b3JzOiBlbnRyeT8uZmFjdG9ycyA/PyBbXSxcbiAgICAgIGxpbmtlZEJ5OiBub2RlLmxpbmtlZEJ5LFxuICAgICAgZGVwdGg6IG5vZGUuZGVwdGgsXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gRmluZCByb290IGNhdXNlOiBiaWdnZXN0IHF1YWxpdHkgZHJvcCBiZXR3ZWVuIGFkamFjZW50IGZyYW1lcyAoQkZTIG9yZGVyKVxuICBsZXQgcm9vdENhdXNlOiBRdWFsaXR5U3RhY2tUcmFjZVsncm9vdENhdXNlJ107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG4gICAgLy8gTG9vayBhdCBlYWNoIHBhcmVudCAoZnJhbWVzIGF0IGRlcHRoICsgMSlcbiAgICBmb3IgKGNvbnN0IHBhcmVudEZyYW1lIG9mIGZyYW1lcy5maWx0ZXIoKGYpID0+IGYuZGVwdGggPT09IGZyYW1lLmRlcHRoICsgMSkpIHtcbiAgICAgIGlmIChwYXJlbnRGcmFtZS5zY29yZSA8IDApIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZHJvcCA9IHBhcmVudEZyYW1lLnNjb3JlIC0gZnJhbWUuc2NvcmU7XG4gICAgICBpZiAoZHJvcCA+IDAgJiYgKCFyb290Q2F1c2UgfHwgZHJvcCA+IHJvb3RDYXVzZS5kcm9wKSkge1xuICAgICAgICByb290Q2F1c2UgPSB7IGZyYW1lLCBwcmV2aW91c0ZyYW1lOiBwYXJlbnRGcmFtZSwgZHJvcCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRJZCxcbiAgICBzdGFydFNjb3JlOiBzdGFydEVudHJ5LnNjb3JlLFxuICAgIGZyYW1lcyxcbiAgICByb290Q2F1c2UsXG4gIH07XG59XG5cbi8qKlxuICogRm9ybWF0IGEgUXVhbGl0eVN0YWNrVHJhY2UgYXMgaHVtYW4tcmVhZGFibGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1YWxpdHlUcmFjZSh0cmFjZTogUXVhbGl0eVN0YWNrVHJhY2UpOiBzdHJpbmcge1xuICBpZiAodHJhY2UuZnJhbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBgUXVhbGl0eSBUcmFjZTogbm8gZGF0YSBmb3IgJHt0cmFjZS5zdGFydElkfWA7XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbYFF1YWxpdHkgVHJhY2UgKHNjb3JlOiAke3RyYWNlLnN0YXJ0U2NvcmUudG9GaXhlZCgyKX0gYXQgJHt0cmFjZS5zdGFydElkfSk6YF07XG5cbiAgZm9yIChjb25zdCBmcmFtZSBvZiB0cmFjZS5mcmFtZXMpIHtcbiAgICBjb25zdCBzY29yZVN0ciA9IGZyYW1lLnNjb3JlID49IDAgPyBmcmFtZS5zY29yZS50b0ZpeGVkKDIpIDogJz8nO1xuICAgIGNvbnN0IGxpbmsgPSBmcmFtZS5saW5rZWRCeSA/IGAgKHZpYSAke2ZyYW1lLmxpbmtlZEJ5fSlgIDogJyc7XG4gICAgY29uc3QgZmFjdG9ycyA9IGZyYW1lLmZhY3RvcnMubGVuZ3RoID4gMCA/IGAg4oCUICR7ZnJhbWUuZmFjdG9ycy5qb2luKCcsICcpfWAgOiAnJztcbiAgICBsaW5lcy5wdXNoKGAgIGF0ICR7ZnJhbWUucnVudGltZVN0YWdlSWQucGFkRW5kKDMwKX0gc2NvcmU9JHtzY29yZVN0cn0ke2xpbmt9JHtmYWN0b3JzfWApO1xuICB9XG5cbiAgaWYgKHRyYWNlLnJvb3RDYXVzZSkge1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgUm9vdCBjYXVzZTogcXVhbGl0eSBkcm9wcGVkIGF0ICR7dHJhY2Uucm9vdENhdXNlLmZyYW1lLnJ1bnRpbWVTdGFnZUlkfSBgICtcbiAgICAgICAgYCgke3RyYWNlLnJvb3RDYXVzZS5wcmV2aW91c0ZyYW1lLnNjb3JlLnRvRml4ZWQoMil9IOKGkiAke3RyYWNlLnJvb3RDYXVzZS5mcmFtZS5zY29yZS50b0ZpeGVkKDIpfSwgYCArXG4gICAgICAgIGDOlCR7dHJhY2Uucm9vdENhdXNlLmRyb3AudG9GaXhlZCgyKX0pYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuIl19
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eVRyYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9xdWFsaXR5VHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFHSCxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBK0IxRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsU0FBeUIsRUFDekIsZUFBOEIsRUFDOUIsT0FBZSxFQUNmLFFBQVEsR0FBRyxFQUFFO0lBRWIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFakgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hELE1BQU0s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LENBQUM7SUFDM0YsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixLQUFLLENBQUMsSUFBSSxDQUNSLGtDQUFrQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUc7WUFDdkUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcXVhbGl0eVRyYWNlKCkg4oCUIFF1YWxpdHkgU3RhY2sgVHJhY2UgYnVpbHQgb24gY2F1c2FsQ2hhaW4oKS5cbiAqXG4gKiBUaGluIGxheWVyIG92ZXIgYG1lbW9yeS9iYWNrdHJhY2suY2F1c2FsQ2hhaW4oKWAgdGhhdCBkZWNvcmF0ZXNcbiAqIGVhY2ggY2F1c2FsIG5vZGUgd2l0aCBxdWFsaXR5IHNjb3JlcyBmcm9tIGEgUXVhbGl0eVJlY29yZGVyLlxuICpcbiAqIGBgYFxuICogUXVhbGl0eSBUcmFjZSAoc2NvcmU6IDAuMyBhdCBjYWxsLWxsbSM1KTpcbiAqICAgYXQgY2FsbC1sbG0jNSAgICAgc2NvcmU9MC4zICDihpAgcXVhbGl0eSBkcm9wcGVkIGhlcmVcbiAqICAgYXQgc3lzdGVtLXByb21wdCMxIHNjb3JlPTAuOCAg4oaQIHN5c3RlbVByb21wdCB3YXMgZ29vZFxuICogICBhdCBzZWVkIzAgICAgICAgICAgc2NvcmU9MS4wICDihpAgaW5wdXQgd2FzIGNsZWFuXG4gKlxuICogUm9vdCBjYXVzZTogcXVhbGl0eSBkcm9wcGVkIGF0IGNhbGwtbGxtIzUgKDAuOCDihpIgMC4zLCDOlDAuNSlcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IGNhdXNhbENoYWluLCBmbGF0dGVuQ2F1c2FsREFHIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBRdWFsaXR5RW50cnkgfSBmcm9tICcuL1F1YWxpdHlSZWNvcmRlci5qcyc7XG5cbi8qKiBNaW5pbWFsIHBlci1zdGVwIHF1YWxpdHkgbG9va3VwIOKAlCBzYXRpc2ZpZWQgYnkgYFF1YWxpdHlSZWNvcmRlcmAgKHN0cnVjdHVyYWwsIGRlY291cGxlZCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlMb29rdXAge1xuICBnZXRCeUtleShydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogUXVhbGl0eUVudHJ5IHwgdW5kZWZpbmVkO1xufVxuXG4vKiogQSBzaW5nbGUgZnJhbWUgaW4gdGhlIHF1YWxpdHkgc3RhY2sgdHJhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlGcmFtZSB7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzY29yZTogbnVtYmVyO1xuICBmYWN0b3JzOiBzdHJpbmdbXTtcbiAgbGlua2VkQnk6IHN0cmluZztcbiAgZGVwdGg6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBmdWxsIHF1YWxpdHkgc3RhY2sgdHJhY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlTdGFja1RyYWNlIHtcbiAgc3RhcnRJZDogc3RyaW5nO1xuICBzdGFydFNjb3JlOiBudW1iZXI7XG4gIGZyYW1lczogUXVhbGl0eUZyYW1lW107XG4gIHJvb3RDYXVzZT86IHtcbiAgICBmcmFtZTogUXVhbGl0eUZyYW1lO1xuICAgIHByZXZpb3VzRnJhbWU6IFF1YWxpdHlGcmFtZTtcbiAgICBkcm9wOiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSBxdWFsaXR5IHN0YWNrIHRyYWNlIGJ5IGRlY29yYXRpbmcgYSBjYXVzYWwgY2hhaW4gd2l0aCBzY29yZXMuXG4gKlxuICogQHBhcmFtIGNvbW1pdExvZyAgICAgICAgRnJvbSBleGVjdXRvci5nZXRTbmFwc2hvdCgpLmNvbW1pdExvZ1xuICogQHBhcmFtIHF1YWxpdHlSZWNvcmRlciAgUXVhbGl0eVJlY29yZGVyIGF0dGFjaGVkIGR1cmluZyBleGVjdXRpb25cbiAqIEBwYXJhbSBzdGFydElkICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkIHRvIHN0YXJ0IGZyb21cbiAqIEBwYXJhbSBtYXhEZXB0aCAgICAgICAgIE1heGltdW0gYmFja3RyYWNraW5nIGRlcHRoIChkZWZhdWx0OiAyMClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1YWxpdHlUcmFjZShcbiAgY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSxcbiAgcXVhbGl0eVJlY29yZGVyOiBRdWFsaXR5TG9va3VwLFxuICBzdGFydElkOiBzdHJpbmcsXG4gIG1heERlcHRoID0gMjAsXG4pOiBRdWFsaXR5U3RhY2tUcmFjZSB7XG4gIGNvbnN0IHN0YXJ0RW50cnkgPSBxdWFsaXR5UmVjb3JkZXIuZ2V0QnlLZXkoc3RhcnRJZCk7XG4gIGlmICghc3RhcnRFbnRyeSkge1xuICAgIHJldHVybiB7IHN0YXJ0SWQsIHN0YXJ0U2NvcmU6IC0xLCBmcmFtZXM6IFtdIH07XG4gIH1cblxuICAvLyBVc2UgY2F1c2FsQ2hhaW4gdG8gYnVpbGQgdGhlIERBRywgcHJvdmlkaW5nIGtleXNSZWFkIGZyb20gdGhlIFF1YWxpdHlSZWNvcmRlclxuICBjb25zdCByb290ID0gY2F1c2FsQ2hhaW4oY29tbWl0TG9nLCBzdGFydElkLCAoaWQpID0+IHF1YWxpdHlSZWNvcmRlci5nZXRCeUtleShpZCk/LmtleXNSZWFkID8/IFtdLCB7IG1heERlcHRoIH0pO1xuXG4gIGlmICghcm9vdCkge1xuICAgIHJldHVybiB7IHN0YXJ0SWQsIHN0YXJ0U2NvcmU6IHN0YXJ0RW50cnkuc2NvcmUsIGZyYW1lczogW10gfTtcbiAgfVxuXG4gIC8vIEZsYXR0ZW4gREFHIHRvIEJGUy1vcmRlcmVkIGZyYW1lcywgZGVjb3JhdGUgd2l0aCBxdWFsaXR5IHNjb3Jlc1xuICBjb25zdCBub2RlcyA9IGZsYXR0ZW5DYXVzYWxEQUcocm9vdCk7XG4gIGNvbnN0IGZyYW1lczogUXVhbGl0eUZyYW1lW10gPSBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IHF1YWxpdHlSZWNvcmRlci5nZXRCeUtleShub2RlLnJ1bnRpbWVTdGFnZUlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcnVudGltZVN0YWdlSWQ6IG5vZGUucnVudGltZVN0YWdlSWQsXG4gICAgICBzdGFnZU5hbWU6IG5vZGUuc3RhZ2VOYW1lLFxuICAgICAgc2NvcmU6IGVudHJ5Py5zY29yZSA/PyAtMSxcbiAgICAgIGZhY3RvcnM6IGVudHJ5Py5mYWN0b3JzID8/IFtdLFxuICAgICAgbGlua2VkQnk6IG5vZGUubGlua2VkQnksXG4gICAgICBkZXB0aDogbm9kZS5kZXB0aCxcbiAgICB9O1xuICB9KTtcblxuICAvLyBGaW5kIHJvb3QgY2F1c2U6IGJpZ2dlc3QgcXVhbGl0eSBkcm9wIGJldHdlZW4gYWRqYWNlbnQgZnJhbWVzIChCRlMgb3JkZXIpXG4gIGxldCByb290Q2F1c2U6IFF1YWxpdHlTdGFja1RyYWNlWydyb290Q2F1c2UnXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBmcmFtZSA9IGZyYW1lc1tpXTtcbiAgICAvLyBMb29rIGF0IGVhY2ggcGFyZW50IChmcmFtZXMgYXQgZGVwdGggKyAxKVxuICAgIGZvciAoY29uc3QgcGFyZW50RnJhbWUgb2YgZnJhbWVzLmZpbHRlcigoZikgPT4gZi5kZXB0aCA9PT0gZnJhbWUuZGVwdGggKyAxKSkge1xuICAgICAgaWYgKHBhcmVudEZyYW1lLnNjb3JlIDwgMCkgY29udGludWU7XG4gICAgICBjb25zdCBkcm9wID0gcGFyZW50RnJhbWUuc2NvcmUgLSBmcmFtZS5zY29yZTtcbiAgICAgIGlmIChkcm9wID4gMCAmJiAoIXJvb3RDYXVzZSB8fCBkcm9wID4gcm9vdENhdXNlLmRyb3ApKSB7XG4gICAgICAgIHJvb3RDYXVzZSA9IHsgZnJhbWUsIHByZXZpb3VzRnJhbWU6IHBhcmVudEZyYW1lLCBkcm9wIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydElkLFxuICAgIHN0YXJ0U2NvcmU6IHN0YXJ0RW50cnkuc2NvcmUsXG4gICAgZnJhbWVzLFxuICAgIHJvb3RDYXVzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBRdWFsaXR5U3RhY2tUcmFjZSBhcyBodW1hbi1yZWFkYWJsZSB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UXVhbGl0eVRyYWNlKHRyYWNlOiBRdWFsaXR5U3RhY2tUcmFjZSk6IHN0cmluZyB7XG4gIGlmICh0cmFjZS5mcmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGBRdWFsaXR5IFRyYWNlOiBubyBkYXRhIGZvciAke3RyYWNlLnN0YXJ0SWR9YDtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtgUXVhbGl0eSBUcmFjZSAoc2NvcmU6ICR7dHJhY2Uuc3RhcnRTY29yZS50b0ZpeGVkKDIpfSBhdCAke3RyYWNlLnN0YXJ0SWR9KTpgXTtcblxuICBmb3IgKGNvbnN0IGZyYW1lIG9mIHRyYWNlLmZyYW1lcykge1xuICAgIGNvbnN0IHNjb3JlU3RyID0gZnJhbWUuc2NvcmUgPj0gMCA/IGZyYW1lLnNjb3JlLnRvRml4ZWQoMikgOiAnPyc7XG4gICAgY29uc3QgbGluayA9IGZyYW1lLmxpbmtlZEJ5ID8gYCAodmlhICR7ZnJhbWUubGlua2VkQnl9KWAgOiAnJztcbiAgICBjb25zdCBmYWN0b3JzID0gZnJhbWUuZmFjdG9ycy5sZW5ndGggPiAwID8gYCDigJQgJHtmcmFtZS5mYWN0b3JzLmpvaW4oJywgJyl9YCA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgYXQgJHtmcmFtZS5ydW50aW1lU3RhZ2VJZC5wYWRFbmQoMzApfSBzY29yZT0ke3Njb3JlU3RyfSR7bGlua30ke2ZhY3RvcnN9YCk7XG4gIH1cblxuICBpZiAodHJhY2Uucm9vdENhdXNlKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGBSb290IGNhdXNlOiBxdWFsaXR5IGRyb3BwZWQgYXQgJHt0cmFjZS5yb290Q2F1c2UuZnJhbWUucnVudGltZVN0YWdlSWR9IGAgK1xuICAgICAgICBgKCR7dHJhY2Uucm9vdENhdXNlLnByZXZpb3VzRnJhbWUuc2NvcmUudG9GaXhlZCgyKX0g4oaSICR7dHJhY2Uucm9vdENhdXNlLmZyYW1lLnNjb3JlLnRvRml4ZWQoMil9LCBgICtcbiAgICAgICAgYM6UJHt0cmFjZS5yb290Q2F1c2UuZHJvcC50b0ZpeGVkKDIpfSlgLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG4iXX0=
@@ -40,9 +40,9 @@
40
40
  * envelopes; flow-list recorders see `flow` envelopes) and skips the rest —
41
41
  * same reach as the inline tier, one beat behind.
42
42
  */
43
+ import { stageIdOf } from 'foottrace';
43
44
  import { invokeRecorderHook } from '../capture/invokeHook.js';
44
45
  import { isDevMode } from '../devMode.js';
45
- import { stageIdOf } from '../ids/runtimeStageId.js';
46
46
  import { DeferredDispatcher, } from '../observer-queue/index.js';
47
47
  import { describeThrown, hooksOn, recorderFailureEvent } from '../recorder/hooks.js';
48
48
  /** Well-known ids of the synthetic capture taps (internal, documented for debugging). */
@@ -359,4 +359,4 @@ export class DeferredObserverTier {
359
359
  console.warn(message);
360
360
  }
361
361
  }
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBT0wsa0JBQWtCLEdBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQTZEckYseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixDQUFDO0FBQzlELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELDZFQUE2RTtBQUM3RSxNQUFNLG1CQUFtQixHQUE4QixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQWlCL0QsTUFBTSxPQUFPLG9CQUFvQjtJQUNkLFVBQVUsQ0FBcUI7SUFDL0IsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBQ3hELGFBQWEsQ0FBMEI7SUFDeEQsMkVBQTJFO0lBQzFELGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzVDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUU3QixZQUFZLE9BQStCO1FBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsb0VBQW9FO1lBQ3BF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YyxDQUFDLE9BQWU7UUFDcEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUFFLE9BQU87UUFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPO1FBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcnVubmVyL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLnRzIOKAlCBSRkMtMDAxIEJsb2NrcyA24oCTOTogdGhlIGVuZ2luZSB3aXJpbmcgb2ZcbiAqIHRoZSBkZWZlcnJlZC1vYnNlcnZlciBwaXBlbGluZS5cbiAqXG4gKiBQYXR0ZXJuOiAgVGhpbiBhZGFwdGVyIGJldHdlZW4gdGhlIGV4ZWN1dG9yJ3MgdGhyZWUgb2JzZXJ2ZXIgY2hhbm5lbHMgYW5kXG4gKiAgICAgICAgICAgdGhlIFBVUkUgYG9ic2VydmVyLXF1ZXVlYCBtb2R1bGUuIFRoZSBwdXJlIG1vZHVsZSBzdGF5c1xuICogICAgICAgICAgIGVuZ2luZS1mcmVlIChpdCBpbXBvcnRzIG5vdGhpbmcgZnJvbSB0aGUgZW5naW5lIOKAlCB0aGUgZW5naW5lXG4gKiAgICAgICAgICAgaW1wb3J0cyBJVCk7IHRoaXMgdGllciBvd25zIGV2ZXJ5IGVuZ2luZS1mbGF2b3JlZCBjb25jZXJuOlxuICogICAgICAgICAgICAgLSB0aGUgYGlzRGV2TW9kZSgpYC1nYXRlZCwgZGVkdXBsaWNhdGVkIGBDYXB0dXJlSG9va3Mud2FybmBcbiAqICAgICAgICAgICAgICAgYmluZGluZyAodGhlIGRldi13YXJuIHNlYW0sIFJGQy0wMDEgwqdcIlJlc29sdXRpb25cIik7XG4gKiAgICAgICAgICAgICAtIHJvdXRpbmcgYERlZmVycmVkRGlzcGF0Y2hlci5vbkVycm9yYCBpbnRvIHRoZSBleGlzdGluZ1xuICogICAgICAgICAgICAgICByZWNvcmRlciBlcnJvciBjaGFubmVsIChgb25FcnJvcmAgb24gc2libGluZyBvYnNlcnZlcnMpO1xuICogICAgICAgICAgICAgLSB0aGUgY2FwdHVyZSBUQVBTIOKAlCBzeW50aGV0aWMgcmVjb3JkZXJzIHBsYWNlZCBvbiB0aGVcbiAqICAgICAgICAgICAgICAgZXhpc3RpbmcgaW5saW5lIGRpc3BhdGNoIGxpc3RzIHNvIHRoZSB0aHJlZSBkaXNwYXRjaCBzaXRlc1xuICogICAgICAgICAgICAgICAoYFNjb3BlRmFjYWRlLl9pbnZva2VIb29rYCwgYFNjb3BlRmFjYWRlLmVtaXRFdmVudGAsXG4gKiAgICAgICAgICAgICAgIGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCkgbmVlZCBOTyBwZXItc2l0ZSB0aWVyIGxvZ2ljOiBhXG4gKiAgICAgICAgICAgICAgIHRhcCdzIGhvb2sgYm9keSBJUyBgZGlzcGF0Y2hlci5jYXB0dXJlKC4uLilgLCBhbmQgYmVjYXVzZVxuICogICAgICAgICAgICAgICB0aGUgdGFwIHNpdHMgaW4gdGhlIHNhbWUgbG9vcCBhcyBpbmxpbmUgcmVjb3JkZXJzIGl0IHNlZXNcbiAqICAgICAgICAgICAgICAgZXhhY3RseSB0aGUgcG9zdC1yZWRhY3Rpb24gZXZlbnQgb2JqZWN0IGlubGluZSBvYnNlcnZlcnNcbiAqICAgICAgICAgICAgICAgc2VlIOKAlCBjYXB0dXJlIGNhbiBuZXZlciBvYnNlcnZlIGEgcHJlLXJlZGFjdGlvbiB2YWx1ZTtcbiAqICAgICAgICAgICAgIC0gdGhlIHRlcm1pbmFsIGZsdXNoIChCbG9jayA4KSB3aXRoIGhvbmVzdCBzdHJhbmRpbmdcbiAqICAgICAgICAgICAgICAgYWNjb3VudGluZywgYW5kIHRoZSBCbG9jayA5IHN0YXRzIHN1cmZhY2UuXG4gKlxuICogUm9sZTogICAgIE9uZSBpbnN0YW5jZSBwZXIgYEZsb3dDaGFydEV4ZWN1dG9yYCwgY3JlYXRlZCBMQVpJTFkgb24gdGhlXG4gKiAgICAgICAgICAgZmlyc3QgYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBhdHRhY2ggKHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vYm9keVxuICogICAgICAgICAgIG9wdHMgaW4g4oCUIG1pcnJvcnMgdGhlIGVtaXQgZmFzdC1wYXRoIHByZWNlZGVudCkuIEhvbGRzIHRoZSBPTkVcbiAqICAgICAgICAgICBgRGVmZXJyZWREaXNwYXRjaGVyYCAob25lIG1lcmdlZCBxdWV1ZSwgdG90YWwgb3JkZXIgYWNyb3NzXG4gKiAgICAgICAgICAgY2hhbm5lbHMpIHBsdXMgdGhlIHJlZ2lzdHJ5IG9mIGRlZmVycmVkIHJlY29yZGVycy5cbiAqXG4gKiBEZWxpdmVyeTogYSBkZWZlcnJlZCByZWNvcmRlcidzIGhvb2tzIGFyZSBpbnZva2VkIHRocm91Z2ggdGhlIFNBTUVcbiAqIGBpbnZva2VSZWNvcmRlckhvb2tgIGhlbHBlciB0aGUgaW5saW5lIHRpZXIgdXNlcyAoUkZDLTAwMSDCpzkgbWl0aWdhdGlvbikg4oCUXG4gKiBvbmUgYmVhdCBiZWhpbmQsIHdpdGggYGVudmVsb3BlLnBheWxvYWRgIG1hdGVyaWFsaXplZCBwZXIgdGhlIGNhcHR1cmVcbiAqIHBvbGljeSAoYCdjbG9uZSdgIGRlZmF1bHQgYXQgdGhpcyBhdHRhY2ggdGllciDigJQgZnVsbCBzdHJ1Y3R1cmFsIGNvcHksXG4gKiBldmVudC1zaGFwZSBjb21wYXRpYmxlIHdpdGggaW5saW5lOyBleHBsaWNpdCBgJ3N1bW1hcnknYCDigJQgYm91bmRlZCxcbiAqIHJlZmVyZW5jZS1mcmVlOyBgJ3JlZidgIOKAlCB0aGUgbGl2ZSBldmVudCBvYmplY3QsIGRldi13YXJuZWQpLiBUaGUgc3RhbmRhbG9uZVxuICogcXVldWUgcmV0YWlucyBpdHMgYCdzdW1tYXJ5J2AgZGVmYXVsdCAoYG9ic2VydmVyLXF1ZXVlL21lcmdlZFF1ZXVlLnRzIMK3IE1lcmdlZFF1ZXVlYCkuXG4gKlxuICogQ2hhbm5lbCBmaWx0ZXI6IGEgcmVnaXN0cmF0aW9uIHJlbWVtYmVycyB3aGljaCBjaGFubmVscyB3b3VsZCBoYXZlXG4gKiByZWFjaGVkIHRoZSByZWNvcmRlciBpbmxpbmUgKHNjb3BlLWxpc3QgcmVjb3JkZXJzIHNlZSBgc2NvcGVgICsgYGVtaXRgXG4gKiBlbnZlbG9wZXM7IGZsb3ctbGlzdCByZWNvcmRlcnMgc2VlIGBmbG93YCBlbnZlbG9wZXMpIGFuZCBza2lwcyB0aGUgcmVzdCDigJRcbiAqIHNhbWUgcmVhY2ggYXMgdGhlIGlubGluZSB0aWVyLCBvbmUgYmVhdCBiZWhpbmQuXG4gKi9cblxuaW1wb3J0IHsgaW52b2tlUmVjb3JkZXJIb29rIH0gZnJvbSAnLi4vY2FwdHVyZS9pbnZva2VIb29rLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IHN0YWdlSWRPZiB9IGZyb20gJy4uL2lkcy9ydW50aW1lU3RhZ2VJZC5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhcHR1cmVDaGFubmVsLFxuICB0eXBlIENhcHR1cmVFbnZlbG9wZSxcbiAgdHlwZSBDYXB0dXJlUG9saWN5LFxuICB0eXBlIERpc3BhdGNoZXJTdGF0cyxcbiAgdHlwZSBEcmFpblJlc3VsdCxcbiAgdHlwZSBPdmVyZmxvd1BvbGljeSxcbiAgRGVmZXJyZWREaXNwYXRjaGVyLFxufSBmcm9tICcuLi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZXNjcmliZVRocm93biwgaG9va3NPbiwgcmVjb3JkZXJGYWlsdXJlRXZlbnQgfSBmcm9tICcuLi9yZWNvcmRlci9ob29rcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8qKiBEZWxpdmVyeSB0aWVyIGZvciBhbiBhdHRhY2hlZCBvYnNlcnZlciAoUkZDLTAwMSkuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRlbGl2ZXJ5ID0gJ2lubGluZScgfCAnZGVmZXJyZWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgYmFnIGFjY2VwdGVkIGJ5IGV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwuXG4gKlxuICogYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBvcHRzIHRoZSByZWNvcmRlciBpbnRvIHRoZSBib3VuZGVkIGNhcHR1cmUgcXVldWVcbiAqIChcIm9uZSBiZWF0IGJlaGluZFwiKTsgYWJzZW50IC8gYCdpbmxpbmUnYCBrZWVwcyB0aGUgaGlzdG9yaWNhbCBzeW5jaHJvbm91c1xuICogY2FsbCDigJQgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZS1SRkMgcGF0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBjb25maWd1cmUgdGhlIGV4ZWN1dG9yJ3MgT05FIHNoYXJlZCBkaXNwYXRjaGVyIGFuZFxuICogYXJlIGFwcGxpZWQgd2hlbiB0aGUgRklSU1QgZGVmZXJyZWQgYXR0YWNoIGNyZWF0ZXMgaXQ7IGxhdGVyIGF0dGFjaGVzXG4gKiBwYXNzaW5nIGRpZmZlcmVudCB2YWx1ZXMgZ2V0IGEgZGV2LW1vZGUgd2FybmluZyBhbmQga2VlcCB0aGUgb3JpZ2luYWxcbiAqIGNvbmZpZ3VyYXRpb24gKG9uZSBxdWV1ZSBwZXIgZXhlY3V0b3Ig4oCUIHBlci1yZWNvcmRlciBxdWV1ZXMgd291bGQgYnJlYWtcbiAqIHRoZSB0b3RhbCBjcm9zcy1jaGFubmVsIG9yZGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hSZWNvcmRlck9wdGlvbnMge1xuICAvKiogYCdkZWZlcnJlZCdgID0gY2FwdHVyZSDihpIgcXVldWUg4oaSIG5leHQtY2hlY2twb2ludCBkZWxpdmVyeS4gRGVmYXVsdCBgJ2lubGluZSdgLiAqL1xuICByZWFkb25seSBkZWxpdmVyeT86IE9ic2VydmVyRGVsaXZlcnk7XG4gIC8qKlxuICAgKiBQYXlsb2FkIG1hdGVyaWFsaXphdGlvbiBhdCBjYXB0dXJlIHRpbWUuIERlZmF1bHQgYCdjbG9uZSdgIOKAlCB5b3VyXG4gICAqIHJlY29yZGVyJ3MgaG9va3MgcmVjZWl2ZSB0aGUgU0FNRSBldmVudCBzaGFwZSBhcyBpbmxpbmUgZGVsaXZlcnlcbiAgICogKGBzdHJ1Y3R1cmVkQ2xvbmVgZDsgYGUua2V5YC9gZS52YWx1ZWAvYGUucnVudGltZVN0YWdlSWRgIGFsbCB3b3JrXG4gICAqIHVuY2hhbmdlZCksIHNvIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIGlzIGEgZHJvcC1pbiBwb3J0LlxuICAgKiBgJ3N1bW1hcnknYCDigJQgYSBib3VuZGVkIHR5cGUvc2l6ZS9wcmV2aWV3IGRpZ2VzdCAoYFBheWxvYWRTdW1tYXJ5YClcbiAgICogaW5zdGVhZCBvZiB0aGUgZXZlbnQgc2hhcGU6IGNoZWFwZXIgY2FwdHVyZSBmb3IgdGVsZW1ldHJ5LW9ubHlcbiAgICogY29uc3VtZXJzIHRoYXQgZG9uJ3QgcmVhZCBkb21haW4gZmllbGRzLiBgJ3JlZidgIOKAlCBwYXNzLXRocm91Z2ggYnlcbiAgICogcmVmZXJlbmNlOyB0aGUgY2FsbGVyIGFzc2VydHMgaW1tdXRhYmlsaXR5IChkZXYtbW9kZSB3YXJucykuXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZVBvbGljeTtcbiAgLyoqIFF1ZXVlIGJvdW5kIOKAlCBkZWZhdWx0IDEwIDAwMC4gKi9cbiAgcmVhZG9ubHkgbWF4UXVldWU/OiBudW1iZXI7XG4gIC8qKiBPdmVyZmxvdyBwb2xpY3kgYXQgYG1heFF1ZXVlYCDigJQgZGVmYXVsdCBgJ2Ryb3Atb2xkZXN0J2AuICovXG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIC8qKiBgJ3NhbXBsZSdgIG92ZXJmbG93IG9ubHkg4oCUIGFkbWl0IDEgaW4gdGhpcyBtYW55IHNhdHVyYXRlZCBhcnJpdmFscy4gKi9cbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIC8qKiBQZXItY2hlY2twb2ludCBmbHVzaCBidWRnZXQsIG1zIChBMSkg4oCUIGRlZmF1bHQgMjsgYEluZmluaXR5YCA9IGZ1bGwgZHJhaW4uICovXG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEJsb2NrIDkgb2JzZXJ2YWJpbGl0eSBzdXJmYWNlIOKAlCBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2AuIFRoZSBBNFxuICogZGlzcGF0Y2hlciBzdGF0cyBwbHVzIHRoZSB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQgZnJvbSBCbG9jayA4LlxuICogUHJlc2VudCBvbiBgUnVudGltZVNuYXBzaG90YCBvbmx5IHdoZW4gYSBkZWZlcnJlZCBvYnNlcnZlciB3YXMgYXR0YWNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2ZXJTdGF0cyBleHRlbmRzIERpc3BhdGNoZXJTdGF0cyB7XG4gIC8qKlxuICAgKiBFbnZlbG9wZXMgc3RpbGwgcXVldWVkIHdoZW4gYSB0ZXJtaW5hbCBmbHVzaCBoaXQgaXRzIHJ1bmF3YXktY2FzY2FkZVxuICAgKiByb3VuZCBjYXAgKEJsb2NrIDgpLiBgMGAgaW4gYW55IHNhbmUgcnVuIOKAlCBhIG5vbi16ZXJvIHZhbHVlIG1lYW5zIGFcbiAgICogbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIHdvcmsgYXQgZW5kLW9mLXJ1biBhbmQgZGVsaXZlcnkgd2FzIGN1dCBvZmZcbiAgICogKGFsc28gZGV2LXdhcm5lZCBhdCB0aGUgbW9tZW50IGl0IGhhcHBlbmVkKS4gTmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGVybWluYWxTdHJhbmRlZDogbnVtYmVyO1xufVxuXG4vKiogUmVzdWx0IHNoYXBlIG9mIGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCDigJQgc2VlIGBEcmFpblJlc3VsdGAuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRyYWluUmVzdWx0ID0gRHJhaW5SZXN1bHQ7XG5cbi8qKiBXZWxsLWtub3duIGlkcyBvZiB0aGUgc3ludGhldGljIGNhcHR1cmUgdGFwcyAoaW50ZXJuYWwsIGRvY3VtZW50ZWQgZm9yIGRlYnVnZ2luZykuICovXG5leHBvcnQgY29uc3QgREVGRVJSRURfU0NPUEVfVEFQX0lEID0gJ19fZGVmZXJyZWQtc2NvcGUtdGFwX18nO1xuZXhwb3J0IGNvbnN0IERFRkVSUkVEX0ZMT1dfVEFQX0lEID0gJ19fZGVmZXJyZWQtZmxvdy10YXBfXyc7XG5cbi8qKiBDaGFubmVsIHJlYWNoIG9mIHRoZSBzY29wZS1yZWNvcmRlciBsaXN0IChzY29wZSBldmVudHMgKyBlbWl0IGV2ZW50cykuICovXG5jb25zdCBTQ09QRV9MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydzY29wZScsICdlbWl0J107XG4vKiogQ2hhbm5lbCByZWFjaCBvZiB0aGUgZmxvdy1yZWNvcmRlciBsaXN0LiAqL1xuY29uc3QgRkxPV19MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydmbG93J107XG5cbi8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgc25hcHNob3QsIGtlcHQgZm9yIGNvbmZsaWN0IGRldGVjdGlvbi4gKi9cbmludGVyZmFjZSBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZyB7XG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlUG9saWN5O1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBEZWZlcnJlZFJlZ2lzdHJhdGlvbiB7XG4gIHJlYWRvbmx5IHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyO1xuICAvKiogV2hpY2ggZW52ZWxvcGUgY2hhbm5lbHMgcmVhY2ggdGhpcyByZWNvcmRlciAoaW5saW5lLXRpZXIgcGFyaXR5KS4gKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHM6IFNldDxDYXB0dXJlQ2hhbm5lbD47XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZE9ic2VydmVyVGllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGF0Y2hlcjogRGVmZXJyZWREaXNwYXRjaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGVmZXJyZWRSZWdpc3RyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGllZENvbmZpZzogQXBwbGllZERpc3BhdGNoZXJDb25maWc7XG4gIC8qKiBEZWR1cCBtZW1vcnkgZm9yIHRoZSBkZXYtd2FybiBzZWFtIChvbmUgd2FybmluZyBwZXIgdW5pcXVlIG1lc3NhZ2UpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHdhcm5lZE1lc3NhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgdGVybWluYWxTdHJhbmRlZCA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucykge1xuICAgIHRoaXMuYXBwbGllZENvbmZpZyA9IHtcbiAgICAgIC8vIEF0dGFjaC1zdXJmYWNlIGRlZmF1bHQgaXMgJ2Nsb25lJyAocmV2aWV3IENSSVRJQ0FMLTIpOiBhIHJlY29yZGVyXG4gICAgICAvLyBwb3J0ZWQgd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBrZWVwcyByZWNlaXZpbmcgdGhlIFNBTUVcbiAgICAgIC8vIGV2ZW50IHNoYXBlIGFzIGlubGluZSAoZS5rZXkvZS52YWx1ZS9lLnJ1bnRpbWVTdGFnZUlkIGFsbCBpbnRhY3QpLlxuICAgICAgLy8gVGhlIG1vZHVsZS1pbnRlcm5hbCBlbnZlbG9wZSBkZWZhdWx0IHN0YXlzICdzdW1tYXJ5JyBmb3IgcmF3LVxuICAgICAgLy8gZW52ZWxvcGUgY29uc3VtZXJzOyAnc3VtbWFyeScgaGVyZSBpcyBhbiBleHBsaWNpdCB0ZWxlbWV0cnkgY2hvaWNlLlxuICAgICAgY2FwdHVyZTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICB9O1xuICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBEZWZlcnJlZERpc3BhdGNoZXIoe1xuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgY2FwdHVyZVBvbGljeTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICAgIC8vIFRoZSBkZXYtd2FybiBzZWFtIChSRkMtMDAxIMKnXCJSZXNvbHV0aW9uOiB0aGUgZGV2LXdhcm4gc2VhbVwiKTogdGhlXG4gICAgICAvLyBwdXJlIG1vZHVsZSBpbnZva2VzIGB3YXJuYCBvbiBldmVyeSAncmVmJyBjYXB0dXJlIGFuZCBldmVyeSAnY2xvbmUnXG4gICAgICAvLyBkZWdyYWRhdGlvbjsgdGhlIHRpZXIgYmluZHMgaXQgdG8gdGhlIGNlbnRyYWwgaXNEZXZNb2RlKCkgZmxhZyBhbmRcbiAgICAgIC8vIGRlZHVwZXMgYnkgbWVzc2FnZSBzbyBhIGhvdCBsb29wIGNhbm5vdCBzcGFtIHRoZSBjb25zb2xlLlxuICAgICAgaG9va3M6IHsgd2FybjogKG1lc3NhZ2UpID0+IHRoaXMuZGV2V2FybkRlZHVwZWQobWVzc2FnZSkgfSxcbiAgICAgIC8vIExpc3RlbmVyIGZhaWx1cmVzIChzeW5jIHRocm93cyBBTkQgYXN5bmMgcmVqZWN0aW9ucykgcm91dGUgaW50byB0aGVcbiAgICAgIC8vIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yIGNoYW5uZWwg4oCUIHNlZSByb3V0ZUxpc3RlbmVyRXJyb3IuXG4gICAgICBvbkVycm9yOiAoZXJyb3IsIGN0eCkgPT4gdGhpcy5yb3V0ZUxpc3RlbmVyRXJyb3IoZXJyb3IsIGN0eC5saXN0ZW5lcklkLCBjdHguZW52ZWxvcGUsIGN0eC5waGFzZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVnaXN0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcmVjb3JkZXIgZm9yIGRlZmVycmVkIGRlbGl2ZXJ5IG9uIHRoZSBzY29wZS1saXN0IGNoYW5uZWxzXG4gICAqIChgc2NvcGVgICsgYGVtaXRgKSBhbmQvb3IgdGhlIGZsb3cgY2hhbm5lbC4gSWRlbXBvdGVudCBieSBpZCDigJQgc2FtZSBpZFxuICAgKiByZXBsYWNlcyB0aGUgcmVjb3JkZXIgb2JqZWN0OyBjaGFubmVsIGxpc3RzIE1FUkdFIGFjcm9zcyBjYWxscyAoc2FtZSBhc1xuICAgKiB0aGUgaW5saW5lIHRpZXIsIHdoZXJlIGBhdHRhY2hTY29wZVJlY29yZGVyKHgpYCArIGBhdHRhY2hGbG93UmVjb3JkZXIoeClgXG4gICAqIGxhbmRzIGB4YCBvbiBib3RoIGxpc3RzKS4gTGF0ZXIgYXR0YWNoZXMgcGFzc2luZyBkaXNwYXRjaGVyLWxldmVsXG4gICAqIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgZmlyc3QgYXR0YWNoJ3MgY29uZmlndXJhdGlvbiBrZWVwIHRoZVxuICAgKiBvcmlnaW5hbCBjb25maWcgYW5kIGRldi13YXJuLlxuICAgKi9cbiAgcmVnaXN0ZXIoXG4gICAgcmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIsXG4gICAgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9LFxuICAgIG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIHRoaXMud2Fybk9uQ29uZmlnQ29uZmxpY3QocmVjb3JkZXIuaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChyZWNvcmRlci5pZCk/LmNoYW5uZWxzID8/IG5ldyBTZXQ8Q2FwdHVyZUNoYW5uZWw+KCk7XG4gICAgaWYgKGxpc3RzLnNjb3BlKSBmb3IgKGNvbnN0IGMgb2YgU0NPUEVfTElTVF9DSEFOTkVMUykgY2hhbm5lbHMuYWRkKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSBjaGFubmVscy5hZGQoYyk7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25zLnNldChyZWNvcmRlci5pZCwgeyByZWNvcmRlciwgY2hhbm5lbHMgfSk7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmFkZExpc3RlbmVyKHJlY29yZGVyLmlkLCAoZW52ZWxvcGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQocmVjb3JkZXIuaWQpO1xuICAgICAgaWYgKCFyZWdpc3RyYXRpb24gfHwgIXJlZ2lzdHJhdGlvbi5jaGFubmVscy5oYXMoZW52ZWxvcGUuY2hhbm5lbCkpIHJldHVybjtcbiAgICAgIC8vIFNBTUUgaW52b2tlIGhlbHBlciBhcyB0aGUgaW5saW5lIHRpZXIgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlCBhXG4gICAgICAvLyByZXR1cm5lZCBQcm9taXNlIGxhbmRzIGluIHRoZSBkaXNwYXRjaGVyJ3MgaW5mbGlnaHQgc2V0LlxuICAgICAgcmV0dXJuIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgZW52ZWxvcGUubWV0aG9kLCBlbnZlbG9wZS5wYXlsb2FkKSBhcyB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNoYW5uZWwgbGlzdHMgZnJvbSBhIHJlZ2lzdHJhdGlvbiAobWlycm9ycyB0aGUgaW5saW5lXG4gICAqIHRpZXIsIHdoZXJlIGBkZXRhY2hTY29wZVJlY29yZGVyYCAvIGBkZXRhY2hGbG93UmVjb3JkZXJgIGVhY2ggY2xlYXIgb25lXG4gICAqIGxpc3QpLiBXaGVuIG5vIGNoYW5uZWxzIHJlbWFpbiwgdGhlIGxpc3RlbmVyIGlzIGZ1bGx5IHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVGcm9tTGlzdHMoaWQ6IHN0cmluZywgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChpZCk7XG4gICAgaWYgKCFyZWdpc3RyYXRpb24pIHJldHVybjtcbiAgICBpZiAobGlzdHMuc2NvcGUpIGZvciAoY29uc3QgYyBvZiBTQ09QRV9MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChyZWdpc3RyYXRpb24uY2hhbm5lbHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLmRlbGV0ZShpZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlTGlzdGVuZXIoaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gYGlkYCBpcyByZWdpc3RlcmVkIGZvciBkZWZlcnJlZCBkZWxpdmVyeSAoYW55IGNoYW5uZWwpLiAqL1xuICBoYXMoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuaGFzKGlkKTtcbiAgfVxuXG4gIC8qKiBEZWZlcnJlZCByZWNvcmRlcnMgd2hvc2UgcmVhY2ggaW5jbHVkZXMgdGhlIHNjb3BlIGxpc3QgKHNjb3BlK2VtaXQpLiAqL1xuICBzY29wZUxpc3RSZWNvcmRlcnMoKTogU2NvcGVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5ieUNoYW5uZWwoJ3Njb3BlJykgYXMgU2NvcGVSZWNvcmRlcltdO1xuICB9XG5cbiAgLyoqIERlZmVycmVkIHJlY29yZGVycyB3aG9zZSByZWFjaCBpbmNsdWRlcyB0aGUgZmxvdyBjaGFubmVsLiAqL1xuICBmbG93TGlzdFJlY29yZGVycygpOiBGbG93UmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnlDaGFubmVsKCdmbG93JykgYXMgRmxvd1JlY29yZGVyW107XG4gIH1cblxuICAvKiogUmVzZXQgZGVmZXJyZWQgcmVjb3JkZXJzIGJlZm9yZSBhIGZyZXNoIHJ1biAoc2FtZSBjb250cmFjdCBhcyBpbmxpbmUpLiAqL1xuICBjbGVhclJlY29yZGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIgfSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIChyZWNvcmRlciBhcyB7IGNsZWFyPzogKCkgPT4gdm9pZCB9KS5jbGVhcj8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIENhcHR1cmUgdGFwcyAoQmxvY2sgNykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgc2NvcGUtY2hhbm5lbCB0YXAg4oCUIGEgYFNjb3BlUmVjb3JkZXJgIHBsYWNlZCBvbiB0aGVcbiAgICogbm9ybWFsIHNjb3BlLXJlY29yZGVyIGxpc3Qgd2hvc2UgaG9va3MgY2FwdHVyZSBpbnRvIHRoZSBxdWV1ZS4gQnVpbHRcbiAgICogZnJlc2ggcGVyIHRyYXZlcnNlciBzbyBpdCByZWZsZWN0cyB0aGUgY3VycmVudCByZWdpc3RyYXRpb25zLiBPbmx5XG4gICAqIG1ldGhvZHMgc29tZSBkZWZlcnJlZCByZWNvcmRlciBhY3R1YWxseSBpbXBsZW1lbnRzIGFyZSBwcmVzZW50IChub1xuICAgKiB3YXN0ZWQgY2FwdHVyZXMpLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gbm90aGluZyBpcyByZWdpc3RlcmVkIGZvclxuICAgKiB0aGUgc2NvcGUgbGlzdC5cbiAgICpcbiAgICogUmVkYWN0aW9uIG9yZGVyaW5nOiB0aGUgdGFwIGlzIGludm9rZWQgZnJvbSB0aGUgU0FNRSBsb29wcyBhcyBpbmxpbmVcbiAgICogcmVjb3JkZXJzIChgX2ludm9rZUhvb2tgIC8gYGVtaXRFdmVudGApLCB3aGljaCByZWNlaXZlIGV2ZW50cyBBRlRFUiB0aGVcbiAgICogcmVkYWN0aW9uIGRlY2lzaW9uIOKAlCBzbyBhIGNhcHR1cmVkIHBheWxvYWQgY2FuIG5ldmVyIGNvbnRhaW4gYVxuICAgKiBwcmUtcmVkYWN0aW9uIHZhbHVlIHRoZSBpbmxpbmUgdGllciB3b3VsZCBub3QgaGF2ZSBzZWVuLlxuICAgKi9cbiAgYnVpbGRTY29wZVRhcCgpOiBTY29wZVJlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLnNjb3BlTGlzdFJlY29yZGVycygpO1xuICAgIGlmIChyZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBERUZFUlJFRF9TQ09QRV9UQVBfSUQgfTtcbiAgICAvLyBEZXJpdmVkIGZyb20gdGhlIGhvb2sgcmVnaXN0cnk6IGV2ZXJ5IGhvb2sgb2YgdGhlIHNjb3BlIGNoYW5uZWwgYW5kIG9mIHRoZSBlbWl0IGNoYW5uZWxcbiAgICAvLyAod2hpY2ggcmlkZXMgdGhlIHNjb3BlIGxpc3QpIOKAlCBhIGhvb2sgdGhlIHJlZ2lzdHJ5IGdhaW5zIGlzIHRhcHBlZCB3aXRoIG5vIGVkaXQgaGVyZS5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgWydzY29wZScsICdlbWl0J10gYXMgY29uc3QpIHtcbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGhvb2tzT24oY2hhbm5lbCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFueUltcGxlbWVudHMocmVjb3JkZXJzLCBtZXRob2QpKSBjb250aW51ZTtcbiAgICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZVNjb3BlRXZlbnQoY2hhbm5lbCwgbWV0aG9kLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXAgYXMgdW5rbm93biBhcyBTY29wZVJlY29yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgZmxvdy1jaGFubmVsIHRhcCDigJQgYSBgRmxvd1JlY29yZGVyYCBhcHBlbmRlZCB0byB0aGVcbiAgICogZmxvdy1yZWNvcmRlcnMgbGlzdCBoYW5kZWQgdG8gdGhlIHRyYXZlcnNlci4gU2FtZSBjb250cmFjdCBhc1xuICAgKiB7QGxpbmsgYnVpbGRTY29wZVRhcH0uXG4gICAqL1xuICBidWlsZEZsb3dUYXAoKTogRmxvd1JlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLmZsb3dMaXN0UmVjb3JkZXJzKCk7XG4gICAgaWYgKHJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IERFRkVSUkVEX0ZMT1dfVEFQX0lEIH07XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgaG9va3NPbignZmxvdycpKSB7XG4gICAgICBpZiAoIXRoaXMuYW55SW1wbGVtZW50cyhyZWNvcmRlcnMsIG1ldGhvZCkpIGNvbnRpbnVlO1xuICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZUZsb3dFdmVudChtZXRob2QsIGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcCBhcyB1bmtub3duIGFzIEZsb3dSZWNvcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3QgY2FwdHVyZSBmb3IgZXhlY3V0b3Itc3ludGhlc2l6ZWQgZXZlbnRzIHRoYXQgYnlwYXNzIHRoZSBkaXNwYXRjaFxuICAgKiBzaXRlcyAoZS5nLiB0aGUgc3ludGhldGljIGBvblJlc3VtZWAgdGhlIGV4ZWN1dG9yIGZpcmVzIG9uIHJlc3VtZSkuXG4gICAqL1xuICBjYXB0dXJlKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ6IHN0cmluZywgcGF5bG9hZDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHsgY2hhbm5lbCwgbWV0aG9kLCBydW50aW1lU3RhZ2VJZCwgcnVuSWQsIHBheWxvYWQgfSk7XG4gIH1cblxuICAvLyDilIDilIAgVGVybWluYWwgZmx1c2ggKyBkcmFpbiAoQmxvY2sgOCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzbHkgZGVsaXZlciBldmVyeXRoaW5nIHN0aWxsIHF1ZXVlZCDigJQgY2FsbGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiBhdCB0aGUgT1VURVJNT1NUIHJ1biBib3VuZGFyeSAocmVzb2x2ZSwgcmVqZWN0LCBwYXVzZSksIEJFRk9SRSBgcnVuKClgXG4gICAqIHJldHVybnMgLyByZXRocm93cyAvIHRoZSBjaGVja3BvaW50IGJlY29tZXMgYXZhaWxhYmxlLiBJbnNwZWN0c1xuICAgKiBgZmx1c2hTeW5jYCdzIGByZW1haW5pbmdgIChyZXZpZXdlciBOMSk6IGBmbHVzaFN5bmNgIGFscmVhZHkgbG9vcHNcbiAgICogc25hcHNob3Qgcm91bmRzIHVwIHRvIGl0cyBydW5hd2F5LWNhc2NhZGUgY2FwLCBzbyBhIG5vbi16ZXJvIHJlbWFpbmRlclxuICAgKiBtZWFucyBhIHBhdGhvbG9naWNhbCBzZWxmLWVucXVldWVpbmcgbGlzdGVuZXIg4oCUIGNvdW50ZWQgaW5cbiAgICogYG9ic2VydmVyU3RhdHMudGVybWluYWxTdHJhbmRlZGAgYW5kIGRldi13YXJuZWQsIG5ldmVyIHNpbGVudC5cbiAgICovXG4gIHRlcm1pbmFsRmx1c2goKTogdm9pZCB7XG4gICAgY29uc3QgeyByZW1haW5pbmcgfSA9IHRoaXMuZGlzcGF0Y2hlci5mbHVzaE5vdygpO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICB0aGlzLnRlcm1pbmFsU3RyYW5kZWQgKz0gcmVtYWluaW5nO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlcnM6IHRlcm1pbmFsIGZsdXNoIGhpdCB0aGUgcnVuYXdheS1jYXNjYWRlIGNhcCB3aXRoICR7cmVtYWluaW5nfSBgICtcbiAgICAgICAgICAgICdldmVudChzKSBzdGlsbCBxdWV1ZWQg4oCUIGEgbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIGR1cmluZyB0aGUgZmx1c2guIFRoZSBzdHJhbmRlZCBjb3VudCBpcyAnICtcbiAgICAgICAgICAgICdzdXJmYWNlZCBvbiBzbmFwc2hvdC5vYnNlcnZlclN0YXRzLnRlcm1pbmFsU3RyYW5kZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGJhY2tsb2csIHRoZW4gc2V0dGxlIGFzeW5jIGxpc3RlbmVyIGNvbnRpbnVhdGlvbnMgdW5kZXIgYVxuICAgKiBkZWFkbGluZSDigJQgdGhlIHNlcnZlcmxlc3MgLyBncmFjZWZ1bC1zaHV0ZG93biBwYXR0ZXJuIChSRkMtMDAxIMKnMTEpLlxuICAgKi9cbiAgZHJhaW4ob3B0cz86IHsgdGltZW91dE1zPzogbnVtYmVyIH0pOiBQcm9taXNlPE9ic2VydmVyRHJhaW5SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaGVyLmRyYWluKG9wdHMpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFN0YXRzIChCbG9jayA5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogVGhlIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYCBwYXlsb2FkIOKAlCBBNCBzdGF0cyArIEJsb2NrIDggc3RyYW5kaW5nLiAqL1xuICBnZXRTdGF0cygpOiBPYnNlcnZlclN0YXRzIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc3BhdGNoZXIuZ2V0U3RhdHMoKSwgdGVybWluYWxTdHJhbmRlZDogdGhpcy50ZXJtaW5hbFN0cmFuZGVkIH07XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYnlDaGFubmVsKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsKTogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4ge1xuICAgIGNvbnN0IG91dDogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIsIGNoYW5uZWxzIH0gb2YgdGhpcy5yZWdpc3RyYXRpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY2hhbm5lbHMuaGFzKGNoYW5uZWwpKSBvdXQucHVzaChyZWNvcmRlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogTm9ybWFsIHByb3BlcnR5IGxvb2t1cCDigJQgaW52b2NhdGlvbiBwYXJpdHkgd2l0aCB0aGUgaW5saW5lIHRpZXIuICovXG4gIHByaXZhdGUgYW55SW1wbGVtZW50cyhyZWNvcmRlcnM6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+LCBtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWNvcmRlcnMuc29tZSgocikgPT4gdHlwZW9mIChyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21ldGhvZF0gPT09ICdmdW5jdGlvbicpO1xuICB9XG5cbiAgLyoqIFNjb3BlL2VtaXQgZXZlbnRzIGNhcnJ5IHRoZWlyIG93biBpZHMgKGBydW50aW1lU3RhZ2VJZGAgKyBgcGlwZWxpbmVJZGApLiAqL1xuICBwcml2YXRlIGNhcHR1cmVTY29wZUV2ZW50KGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXZlbnQgYXMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZzsgcGlwZWxpbmVJZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHtcbiAgICAgIGNoYW5uZWwsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZT8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgICBydW5JZDogZT8ucGlwZWxpbmVJZCA/PyAnJyxcbiAgICAgIHBheWxvYWQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZsb3cgZXZlbnRzIGNhcnJ5IGlkcyBvbiBgdHJhdmVyc2FsQ29udGV4dGAgKGFic2VudCBvbiBhIGZldyBldmVudHMpLiAqL1xuICBwcml2YXRlIGNhcHR1cmVGbG93RXZlbnQobWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gKGV2ZW50IGFzIHsgdHJhdmVyc2FsQ29udGV4dD86IHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH0gfSB8IHVuZGVmaW5lZClcbiAgICAgID8udHJhdmVyc2FsQ29udGV4dDtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7XG4gICAgICBjaGFubmVsOiAnZmxvdycsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogY3R4Py5ydW50aW1lU3RhZ2VJZCA/PyAnJyxcbiAgICAgIHJ1bklkOiBjdHg/LnJ1bklkID8/ICcnLFxuICAgICAgcGF5bG9hZDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgYSBkZWZlcnJlZCBsaXN0ZW5lciBmYWlsdXJlIGludG8gdGhlIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yXG4gICAqIGNoYW5uZWw6IGV2ZXJ5IHJlZ2lzdGVyZWQgc2NvcGUgb2JzZXJ2ZXIg4oCUIHRoZSBmYWlsaW5nIG9uZSBpbmNsdWRlZCwgaW5cbiAgICogcmVnaXN0cmF0aW9uIG9yZGVyIOKAlCByZWNlaXZlcyB0aGUgc2NvcGUtc2hhcGVkIGBvbkVycm9yYCBldmVudCB0aGUgaW5saW5lXG4gICAqIHRpZXIgYnVpbGRzIChgcmVjb3JkZXJGYWlsdXJlRXZlbnRgKSwgYW5kIGEgdGhyb3cgZnJvbSBgb25FcnJvcmAgaXRzZWxmXG4gICAqIGlzIG5vdCByb3V0ZWQgYWdhaW46IHRoZSBjb250cmFjdCB0aGUgaW5saW5lIHRpZXIgaG9ub3JzIHdoZW4gYSByZWNvcmRlclxuICAgKiB0aHJvd3MgbWlkLWRpc3BhdGNoICg5LjM5LjAg4oCUIGJlZm9yZSwgdGhlIGZhaWxpbmcgbGlzdGVuZXIgd2FzIHNraXBwZWQsXG4gICAqIHNvIGEgQ29tcG9zaXRlUmVjb3JkZXIncyBvdGhlciBjaGlsZHJlbiBuZXZlciBoZWFyZCBhIHNpYmxpbmcncyB0aHJvdykuXG4gICAqIFRoZSBlcnJvciBzaW5rIG11c3QgbmV2ZXIgYmVjb21lIGFuIGVycm9yIHNvdXJjZTogc2luayB0aHJvd3MgYXJlXG4gICAqIHN3YWxsb3dlZCAoaXNvbGF0aW9uIGlzIGFic29sdXRlKS5cbiAgICovXG4gIHByaXZhdGUgcm91dGVMaXN0ZW5lckVycm9yKFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIGxpc3RlbmVySWQ6IHN0cmluZyxcbiAgICBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlLFxuICAgIHBoYXNlOiAnc3luYycgfCAnYXN5bmMnLFxuICApOiB2b2lkIHtcbiAgICAvLyBJbmxpbmUgcGFyaXR5ICg5LjM5LjApOiB0aGUgaW5saW5lIHRpZXIgaGFuZHMgYSByZWNvcmRlcidzIHRocm93IHRvIEVWRVJZIHJlY29yZGVyIG9uIHRoZVxuICAgIC8vIHNjb3BlIGxpc3Qg4oCUIHRoZSB0aHJvd2VyIGluY2x1ZGVkLCBzbyBhIENvbXBvc2l0ZVJlY29yZGVyJ3Mgb3RoZXIgY2hpbGRyZW4gaGVhciBpdCDigJQgYW5kXG4gICAgLy8gZHJvcHMgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGYuIFNhbWUgaGVyZSwgd2l0aCB0aGUgc2FtZSBldmVudCAoYHJlY29yZGVyRmFpbHVyZUV2ZW50YCkuXG4gICAgaWYgKGVudmVsb3BlLm1ldGhvZCAhPT0gJ29uRXJyb3InKSB0aGlzLmRlbGl2ZXJMaXN0ZW5lckVycm9yKGVycm9yLCBlbnZlbG9wZSk7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlciAnJHtsaXN0ZW5lcklkfScgZmFpbGVkICgke3BoYXNlfSkgaGFuZGxpbmcgYCArXG4gICAgICAgICAgYCR7ZW52ZWxvcGUuY2hhbm5lbH0uJHtlbnZlbG9wZS5tZXRob2R9IChzZXEgJHtlbnZlbG9wZS5zZXF9KTogJHtkZXNjcmliZVRocm93bihlcnJvcil9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmQgb25lIGxpc3RlbmVyIGZhaWx1cmUgdG8gZXZlcnkgc2NvcGUgb2JzZXJ2ZXIgYXMgYW4gYG9uRXJyb3JgIOKAlCBzZWUge0BsaW5rIHJvdXRlTGlzdGVuZXJFcnJvcn0uICovXG4gIHByaXZhdGUgZGVsaXZlckxpc3RlbmVyRXJyb3IoZXJyb3I6IHVua25vd24sIGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvckV2ZW50ID0gcmVjb3JkZXJGYWlsdXJlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIHN0YWdlTmFtZTogJycsXG4gICAgICAgIHN0YWdlSWQ6IHN0YWdlSWRPZihlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCksXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogZW52ZWxvcGUucnVuSWQsXG4gICAgICB9LFxuICAgICAgZXJyb3IsXG4gICAgICBlbnZlbG9wZS5tZXRob2QsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IFssIHsgcmVjb3JkZXIsIGNoYW5uZWxzIH1dIG9mIHRoaXMucmVnaXN0cmF0aW9ucykge1xuICAgICAgLy8gSW5saW5lLXRpZXIgcGFyaXR5IChyZXZpZXcgQ1JJVElDQUwtMSk6IHRoZSBzeW50aGVzaXplZCBldmVudCBpc1xuICAgICAgLy8gc2NvcGUtdHlwZWQsIHNvIGl0IHJlYWNoZXMgT05MWSByZWNvcmRlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgc2NvcGVcbiAgICAgIC8vIGxpc3RzIOKAlCBhIGZsb3ctb25seSByZWNvcmRlciBuZXZlciByZWNlaXZlcyBzY29wZS1jaGFubmVsIGVycm9yc1xuICAgICAgLy8gaW5saW5lIGFuZCBtdXN0IG5vdCBoZXJlIGVpdGhlci5cbiAgICAgIGlmICghY2hhbm5lbHMuaGFzKCdzY29wZScpKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgJ29uRXJyb3InLCBlcnJvckV2ZW50KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTd2FsbG93IOKAlCBzYW1lIHJ1bGUgYXMgRGVmZXJyZWREaXNwYXRjaGVyLnNhZmVPbkVycm9yLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgYXJlIGZpcnN0LWF0dGFjaC13aW5zOyBkaWZmZXJpbmcgbGF0ZXIgdmFsdWVzIGRldi13YXJuLiAqL1xuICBwcml2YXRlIHdhcm5PbkNvbmZpZ0NvbmZsaWN0KHJlY29yZGVySWQ6IHN0cmluZywgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZsaWN0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0ZWQ6IEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnID0ge1xuICAgICAgY2FwdHVyZTogb3B0aW9ucy5jYXB0dXJlLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnMubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zLnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucy5mbHVzaEJ1ZGdldE1zLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWVzdGVkKSBhcyBBcnJheTxrZXlvZiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZz4pIHtcbiAgICAgIGlmIChyZXF1ZXN0ZWRba2V5XSAhPT0gdW5kZWZpbmVkICYmIHJlcXVlc3RlZFtrZXldICE9PSB0aGlzLmFwcGxpZWRDb25maWdba2V5XSkge1xuICAgICAgICBjb25mbGljdHMucHVzaChTdHJpbmcoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25mbGljdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kZXZXYXJuRGVkdXBlZChcbiAgICAgICAgYFtmb290cHJpbnRqc10gYXR0YWNoICcke3JlY29yZGVySWR9JzogdGhlIGV4ZWN1dG9yJ3MgZGVmZXJyZWQtb2JzZXJ2ZXIgcXVldWUgd2FzIGFscmVhZHkgYCArXG4gICAgICAgICAgYGNvbmZpZ3VyZWQgYnkgdGhlIGZpcnN0IGRlZmVycmVkIGF0dGFjaCDigJQgaWdub3JpbmcgZGlmZmVyaW5nIG9wdGlvbihzKTogJHtjb25mbGljdHMuam9pbignLCAnKX0uIGAgK1xuICAgICAgICAgICdPbmUgZXhlY3V0b3IgaGFzIE9ORSBtZXJnZWQgcXVldWU7IGNvbmZpZ3VyZSBpdCBvbiB0aGUgZmlyc3QgZGVmZXJyZWQgYXR0YWNoLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgd2FybmVyIOKAlCB0aGUgYm91bmQgd2FybiBzZWFtLiAqL1xuICBwcml2YXRlIGRldldhcm5EZWR1cGVkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy53YXJuZWRNZXNzYWdlcy5oYXMobWVzc2FnZSkpIHJldHVybjtcbiAgICB0aGlzLndhcm5lZE1lc3NhZ2VzLmFkZChtZXNzYWdlKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgfVxufVxuIl19
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQU9MLGtCQUFrQixHQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE2RHJGLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQztBQUU1RCw2RUFBNkU7QUFDN0UsTUFBTSxtQkFBbUIsR0FBOEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekUsK0NBQStDO0FBQy9DLE1BQU0sa0JBQWtCLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFpQi9ELE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxr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Q0FBQyxPQUFlO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFBRSxPQUFPO1FBQ3pCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJ1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyDigJQgUkZDLTAwMSBCbG9ja3MgNuKAkzk6IHRoZSBlbmdpbmUgd2lyaW5nIG9mXG4gKiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgcGlwZWxpbmUuXG4gKlxuICogUGF0dGVybjogIFRoaW4gYWRhcHRlciBiZXR3ZWVuIHRoZSBleGVjdXRvcidzIHRocmVlIG9ic2VydmVyIGNoYW5uZWxzIGFuZFxuICogICAgICAgICAgIHRoZSBQVVJFIGBvYnNlcnZlci1xdWV1ZWAgbW9kdWxlLiBUaGUgcHVyZSBtb2R1bGUgc3RheXNcbiAqICAgICAgICAgICBlbmdpbmUtZnJlZSAoaXQgaW1wb3J0cyBub3RoaW5nIGZyb20gdGhlIGVuZ2luZSDigJQgdGhlIGVuZ2luZVxuICogICAgICAgICAgIGltcG9ydHMgSVQpOyB0aGlzIHRpZXIgb3ducyBldmVyeSBlbmdpbmUtZmxhdm9yZWQgY29uY2VybjpcbiAqICAgICAgICAgICAgIC0gdGhlIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCBgQ2FwdHVyZUhvb2tzLndhcm5gXG4gKiAgICAgICAgICAgICAgIGJpbmRpbmcgKHRoZSBkZXYtd2FybiBzZWFtLCBSRkMtMDAxIMKnXCJSZXNvbHV0aW9uXCIpO1xuICogICAgICAgICAgICAgLSByb3V0aW5nIGBEZWZlcnJlZERpc3BhdGNoZXIub25FcnJvcmAgaW50byB0aGUgZXhpc3RpbmdcbiAqICAgICAgICAgICAgICAgcmVjb3JkZXIgZXJyb3IgY2hhbm5lbCAoYG9uRXJyb3JgIG9uIHNpYmxpbmcgb2JzZXJ2ZXJzKTtcbiAqICAgICAgICAgICAgIC0gdGhlIGNhcHR1cmUgVEFQUyDigJQgc3ludGhldGljIHJlY29yZGVycyBwbGFjZWQgb24gdGhlXG4gKiAgICAgICAgICAgICAgIGV4aXN0aW5nIGlubGluZSBkaXNwYXRjaCBsaXN0cyBzbyB0aGUgdGhyZWUgZGlzcGF0Y2ggc2l0ZXNcbiAqICAgICAgICAgICAgICAgKGBTY29wZUZhY2FkZS5faW52b2tlSG9va2AsIGBTY29wZUZhY2FkZS5lbWl0RXZlbnRgLFxuICogICAgICAgICAgICAgICBgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmApIG5lZWQgTk8gcGVyLXNpdGUgdGllciBsb2dpYzogYVxuICogICAgICAgICAgICAgICB0YXAncyBob29rIGJvZHkgSVMgYGRpc3BhdGNoZXIuY2FwdHVyZSguLi4pYCwgYW5kIGJlY2F1c2VcbiAqICAgICAgICAgICAgICAgdGhlIHRhcCBzaXRzIGluIHRoZSBzYW1lIGxvb3AgYXMgaW5saW5lIHJlY29yZGVycyBpdCBzZWVzXG4gKiAgICAgICAgICAgICAgIGV4YWN0bHkgdGhlIHBvc3QtcmVkYWN0aW9uIGV2ZW50IG9iamVjdCBpbmxpbmUgb2JzZXJ2ZXJzXG4gKiAgICAgICAgICAgICAgIHNlZSDigJQgY2FwdHVyZSBjYW4gbmV2ZXIgb2JzZXJ2ZSBhIHByZS1yZWRhY3Rpb24gdmFsdWU7XG4gKiAgICAgICAgICAgICAtIHRoZSB0ZXJtaW5hbCBmbHVzaCAoQmxvY2sgOCkgd2l0aCBob25lc3Qgc3RyYW5kaW5nXG4gKiAgICAgICAgICAgICAgIGFjY291bnRpbmcsIGFuZCB0aGUgQmxvY2sgOSBzdGF0cyBzdXJmYWNlLlxuICpcbiAqIFJvbGU6ICAgICBPbmUgaW5zdGFuY2UgcGVyIGBGbG93Q2hhcnRFeGVjdXRvcmAsIGNyZWF0ZWQgTEFaSUxZIG9uIHRoZVxuICogICAgICAgICAgIGZpcnN0IGBkZWxpdmVyeTogJ2RlZmVycmVkJ2AgYXR0YWNoICh6ZXJvIGFsbG9jYXRpb24gd2hlbiBub2JvZHlcbiAqICAgICAgICAgICBvcHRzIGluIOKAlCBtaXJyb3JzIHRoZSBlbWl0IGZhc3QtcGF0aCBwcmVjZWRlbnQpLiBIb2xkcyB0aGUgT05FXG4gKiAgICAgICAgICAgYERlZmVycmVkRGlzcGF0Y2hlcmAgKG9uZSBtZXJnZWQgcXVldWUsIHRvdGFsIG9yZGVyIGFjcm9zc1xuICogICAgICAgICAgIGNoYW5uZWxzKSBwbHVzIHRoZSByZWdpc3RyeSBvZiBkZWZlcnJlZCByZWNvcmRlcnMuXG4gKlxuICogRGVsaXZlcnk6IGEgZGVmZXJyZWQgcmVjb3JkZXIncyBob29rcyBhcmUgaW52b2tlZCB0aHJvdWdoIHRoZSBTQU1FXG4gKiBgaW52b2tlUmVjb3JkZXJIb29rYCBoZWxwZXIgdGhlIGlubGluZSB0aWVyIHVzZXMgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlFxuICogb25lIGJlYXQgYmVoaW5kLCB3aXRoIGBlbnZlbG9wZS5wYXlsb2FkYCBtYXRlcmlhbGl6ZWQgcGVyIHRoZSBjYXB0dXJlXG4gKiBwb2xpY3kgKGAnY2xvbmUnYCBkZWZhdWx0IGF0IHRoaXMgYXR0YWNoIHRpZXIg4oCUIGZ1bGwgc3RydWN0dXJhbCBjb3B5LFxuICogZXZlbnQtc2hhcGUgY29tcGF0aWJsZSB3aXRoIGlubGluZTsgZXhwbGljaXQgYCdzdW1tYXJ5J2Ag4oCUIGJvdW5kZWQsXG4gKiByZWZlcmVuY2UtZnJlZTsgYCdyZWYnYCDigJQgdGhlIGxpdmUgZXZlbnQgb2JqZWN0LCBkZXYtd2FybmVkKS4gVGhlIHN0YW5kYWxvbmVcbiAqIHF1ZXVlIHJldGFpbnMgaXRzIGAnc3VtbWFyeSdgIGRlZmF1bHQgKGBvYnNlcnZlci1xdWV1ZS9tZXJnZWRRdWV1ZS50cyDCtyBNZXJnZWRRdWV1ZWApLlxuICpcbiAqIENoYW5uZWwgZmlsdGVyOiBhIHJlZ2lzdHJhdGlvbiByZW1lbWJlcnMgd2hpY2ggY2hhbm5lbHMgd291bGQgaGF2ZVxuICogcmVhY2hlZCB0aGUgcmVjb3JkZXIgaW5saW5lIChzY29wZS1saXN0IHJlY29yZGVycyBzZWUgYHNjb3BlYCArIGBlbWl0YFxuICogZW52ZWxvcGVzOyBmbG93LWxpc3QgcmVjb3JkZXJzIHNlZSBgZmxvd2AgZW52ZWxvcGVzKSBhbmQgc2tpcHMgdGhlIHJlc3Qg4oCUXG4gKiBzYW1lIHJlYWNoIGFzIHRoZSBpbmxpbmUgdGllciwgb25lIGJlYXQgYmVoaW5kLlxuICovXG5cbmltcG9ydCB7IHN0YWdlSWRPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4uL2NhcHR1cmUvaW52b2tlSG9vay5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhcHR1cmVDaGFubmVsLFxuICB0eXBlIENhcHR1cmVFbnZlbG9wZSxcbiAgdHlwZSBDYXB0dXJlUG9saWN5LFxuICB0eXBlIERpc3BhdGNoZXJTdGF0cyxcbiAgdHlwZSBEcmFpblJlc3VsdCxcbiAgdHlwZSBPdmVyZmxvd1BvbGljeSxcbiAgRGVmZXJyZWREaXNwYXRjaGVyLFxufSBmcm9tICcuLi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZXNjcmliZVRocm93biwgaG9va3NPbiwgcmVjb3JkZXJGYWlsdXJlRXZlbnQgfSBmcm9tICcuLi9yZWNvcmRlci9ob29rcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8qKiBEZWxpdmVyeSB0aWVyIGZvciBhbiBhdHRhY2hlZCBvYnNlcnZlciAoUkZDLTAwMSkuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRlbGl2ZXJ5ID0gJ2lubGluZScgfCAnZGVmZXJyZWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgYmFnIGFjY2VwdGVkIGJ5IGV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwuXG4gKlxuICogYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBvcHRzIHRoZSByZWNvcmRlciBpbnRvIHRoZSBib3VuZGVkIGNhcHR1cmUgcXVldWVcbiAqIChcIm9uZSBiZWF0IGJlaGluZFwiKTsgYWJzZW50IC8gYCdpbmxpbmUnYCBrZWVwcyB0aGUgaGlzdG9yaWNhbCBzeW5jaHJvbm91c1xuICogY2FsbCDigJQgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZS1SRkMgcGF0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBjb25maWd1cmUgdGhlIGV4ZWN1dG9yJ3MgT05FIHNoYXJlZCBkaXNwYXRjaGVyIGFuZFxuICogYXJlIGFwcGxpZWQgd2hlbiB0aGUgRklSU1QgZGVmZXJyZWQgYXR0YWNoIGNyZWF0ZXMgaXQ7IGxhdGVyIGF0dGFjaGVzXG4gKiBwYXNzaW5nIGRpZmZlcmVudCB2YWx1ZXMgZ2V0IGEgZGV2LW1vZGUgd2FybmluZyBhbmQga2VlcCB0aGUgb3JpZ2luYWxcbiAqIGNvbmZpZ3VyYXRpb24gKG9uZSBxdWV1ZSBwZXIgZXhlY3V0b3Ig4oCUIHBlci1yZWNvcmRlciBxdWV1ZXMgd291bGQgYnJlYWtcbiAqIHRoZSB0b3RhbCBjcm9zcy1jaGFubmVsIG9yZGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hSZWNvcmRlck9wdGlvbnMge1xuICAvKiogYCdkZWZlcnJlZCdgID0gY2FwdHVyZSDihpIgcXVldWUg4oaSIG5leHQtY2hlY2twb2ludCBkZWxpdmVyeS4gRGVmYXVsdCBgJ2lubGluZSdgLiAqL1xuICByZWFkb25seSBkZWxpdmVyeT86IE9ic2VydmVyRGVsaXZlcnk7XG4gIC8qKlxuICAgKiBQYXlsb2FkIG1hdGVyaWFsaXphdGlvbiBhdCBjYXB0dXJlIHRpbWUuIERlZmF1bHQgYCdjbG9uZSdgIOKAlCB5b3VyXG4gICAqIHJlY29yZGVyJ3MgaG9va3MgcmVjZWl2ZSB0aGUgU0FNRSBldmVudCBzaGFwZSBhcyBpbmxpbmUgZGVsaXZlcnlcbiAgICogKGBzdHJ1Y3R1cmVkQ2xvbmVgZDsgYGUua2V5YC9gZS52YWx1ZWAvYGUucnVudGltZVN0YWdlSWRgIGFsbCB3b3JrXG4gICAqIHVuY2hhbmdlZCksIHNvIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIGlzIGEgZHJvcC1pbiBwb3J0LlxuICAgKiBgJ3N1bW1hcnknYCDigJQgYSBib3VuZGVkIHR5cGUvc2l6ZS9wcmV2aWV3IGRpZ2VzdCAoYFBheWxvYWRTdW1tYXJ5YClcbiAgICogaW5zdGVhZCBvZiB0aGUgZXZlbnQgc2hhcGU6IGNoZWFwZXIgY2FwdHVyZSBmb3IgdGVsZW1ldHJ5LW9ubHlcbiAgICogY29uc3VtZXJzIHRoYXQgZG9uJ3QgcmVhZCBkb21haW4gZmllbGRzLiBgJ3JlZidgIOKAlCBwYXNzLXRocm91Z2ggYnlcbiAgICogcmVmZXJlbmNlOyB0aGUgY2FsbGVyIGFzc2VydHMgaW1tdXRhYmlsaXR5IChkZXYtbW9kZSB3YXJucykuXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZVBvbGljeTtcbiAgLyoqIFF1ZXVlIGJvdW5kIOKAlCBkZWZhdWx0IDEwIDAwMC4gKi9cbiAgcmVhZG9ubHkgbWF4UXVldWU/OiBudW1iZXI7XG4gIC8qKiBPdmVyZmxvdyBwb2xpY3kgYXQgYG1heFF1ZXVlYCDigJQgZGVmYXVsdCBgJ2Ryb3Atb2xkZXN0J2AuICovXG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIC8qKiBgJ3NhbXBsZSdgIG92ZXJmbG93IG9ubHkg4oCUIGFkbWl0IDEgaW4gdGhpcyBtYW55IHNhdHVyYXRlZCBhcnJpdmFscy4gKi9cbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIC8qKiBQZXItY2hlY2twb2ludCBmbHVzaCBidWRnZXQsIG1zIChBMSkg4oCUIGRlZmF1bHQgMjsgYEluZmluaXR5YCA9IGZ1bGwgZHJhaW4uICovXG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEJsb2NrIDkgb2JzZXJ2YWJpbGl0eSBzdXJmYWNlIOKAlCBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2AuIFRoZSBBNFxuICogZGlzcGF0Y2hlciBzdGF0cyBwbHVzIHRoZSB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQgZnJvbSBCbG9jayA4LlxuICogUHJlc2VudCBvbiBgUnVudGltZVNuYXBzaG90YCBvbmx5IHdoZW4gYSBkZWZlcnJlZCBvYnNlcnZlciB3YXMgYXR0YWNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2ZXJTdGF0cyBleHRlbmRzIERpc3BhdGNoZXJTdGF0cyB7XG4gIC8qKlxuICAgKiBFbnZlbG9wZXMgc3RpbGwgcXVldWVkIHdoZW4gYSB0ZXJtaW5hbCBmbHVzaCBoaXQgaXRzIHJ1bmF3YXktY2FzY2FkZVxuICAgKiByb3VuZCBjYXAgKEJsb2NrIDgpLiBgMGAgaW4gYW55IHNhbmUgcnVuIOKAlCBhIG5vbi16ZXJvIHZhbHVlIG1lYW5zIGFcbiAgICogbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIHdvcmsgYXQgZW5kLW9mLXJ1biBhbmQgZGVsaXZlcnkgd2FzIGN1dCBvZmZcbiAgICogKGFsc28gZGV2LXdhcm5lZCBhdCB0aGUgbW9tZW50IGl0IGhhcHBlbmVkKS4gTmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGVybWluYWxTdHJhbmRlZDogbnVtYmVyO1xufVxuXG4vKiogUmVzdWx0IHNoYXBlIG9mIGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCDigJQgc2VlIGBEcmFpblJlc3VsdGAuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRyYWluUmVzdWx0ID0gRHJhaW5SZXN1bHQ7XG5cbi8qKiBXZWxsLWtub3duIGlkcyBvZiB0aGUgc3ludGhldGljIGNhcHR1cmUgdGFwcyAoaW50ZXJuYWwsIGRvY3VtZW50ZWQgZm9yIGRlYnVnZ2luZykuICovXG5leHBvcnQgY29uc3QgREVGRVJSRURfU0NPUEVfVEFQX0lEID0gJ19fZGVmZXJyZWQtc2NvcGUtdGFwX18nO1xuZXhwb3J0IGNvbnN0IERFRkVSUkVEX0ZMT1dfVEFQX0lEID0gJ19fZGVmZXJyZWQtZmxvdy10YXBfXyc7XG5cbi8qKiBDaGFubmVsIHJlYWNoIG9mIHRoZSBzY29wZS1yZWNvcmRlciBsaXN0IChzY29wZSBldmVudHMgKyBlbWl0IGV2ZW50cykuICovXG5jb25zdCBTQ09QRV9MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydzY29wZScsICdlbWl0J107XG4vKiogQ2hhbm5lbCByZWFjaCBvZiB0aGUgZmxvdy1yZWNvcmRlciBsaXN0LiAqL1xuY29uc3QgRkxPV19MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydmbG93J107XG5cbi8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgc25hcHNob3QsIGtlcHQgZm9yIGNvbmZsaWN0IGRldGVjdGlvbi4gKi9cbmludGVyZmFjZSBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZyB7XG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlUG9saWN5O1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBEZWZlcnJlZFJlZ2lzdHJhdGlvbiB7XG4gIHJlYWRvbmx5IHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyO1xuICAvKiogV2hpY2ggZW52ZWxvcGUgY2hhbm5lbHMgcmVhY2ggdGhpcyByZWNvcmRlciAoaW5saW5lLXRpZXIgcGFyaXR5KS4gKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHM6IFNldDxDYXB0dXJlQ2hhbm5lbD47XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZE9ic2VydmVyVGllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGF0Y2hlcjogRGVmZXJyZWREaXNwYXRjaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGVmZXJyZWRSZWdpc3RyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGllZENvbmZpZzogQXBwbGllZERpc3BhdGNoZXJDb25maWc7XG4gIC8qKiBEZWR1cCBtZW1vcnkgZm9yIHRoZSBkZXYtd2FybiBzZWFtIChvbmUgd2FybmluZyBwZXIgdW5pcXVlIG1lc3NhZ2UpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHdhcm5lZE1lc3NhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgdGVybWluYWxTdHJhbmRlZCA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucykge1xuICAgIHRoaXMuYXBwbGllZENvbmZpZyA9IHtcbiAgICAgIC8vIEF0dGFjaC1zdXJmYWNlIGRlZmF1bHQgaXMgJ2Nsb25lJyAocmV2aWV3IENSSVRJQ0FMLTIpOiBhIHJlY29yZGVyXG4gICAgICAvLyBwb3J0ZWQgd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBrZWVwcyByZWNlaXZpbmcgdGhlIFNBTUVcbiAgICAgIC8vIGV2ZW50IHNoYXBlIGFzIGlubGluZSAoZS5rZXkvZS52YWx1ZS9lLnJ1bnRpbWVTdGFnZUlkIGFsbCBpbnRhY3QpLlxuICAgICAgLy8gVGhlIG1vZHVsZS1pbnRlcm5hbCBlbnZlbG9wZSBkZWZhdWx0IHN0YXlzICdzdW1tYXJ5JyBmb3IgcmF3LVxuICAgICAgLy8gZW52ZWxvcGUgY29uc3VtZXJzOyAnc3VtbWFyeScgaGVyZSBpcyBhbiBleHBsaWNpdCB0ZWxlbWV0cnkgY2hvaWNlLlxuICAgICAgY2FwdHVyZTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICB9O1xuICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBEZWZlcnJlZERpc3BhdGNoZXIoe1xuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgY2FwdHVyZVBvbGljeTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICAgIC8vIFRoZSBkZXYtd2FybiBzZWFtIChSRkMtMDAxIMKnXCJSZXNvbHV0aW9uOiB0aGUgZGV2LXdhcm4gc2VhbVwiKTogdGhlXG4gICAgICAvLyBwdXJlIG1vZHVsZSBpbnZva2VzIGB3YXJuYCBvbiBldmVyeSAncmVmJyBjYXB0dXJlIGFuZCBldmVyeSAnY2xvbmUnXG4gICAgICAvLyBkZWdyYWRhdGlvbjsgdGhlIHRpZXIgYmluZHMgaXQgdG8gdGhlIGNlbnRyYWwgaXNEZXZNb2RlKCkgZmxhZyBhbmRcbiAgICAgIC8vIGRlZHVwZXMgYnkgbWVzc2FnZSBzbyBhIGhvdCBsb29wIGNhbm5vdCBzcGFtIHRoZSBjb25zb2xlLlxuICAgICAgaG9va3M6IHsgd2FybjogKG1lc3NhZ2UpID0+IHRoaXMuZGV2V2FybkRlZHVwZWQobWVzc2FnZSkgfSxcbiAgICAgIC8vIExpc3RlbmVyIGZhaWx1cmVzIChzeW5jIHRocm93cyBBTkQgYXN5bmMgcmVqZWN0aW9ucykgcm91dGUgaW50byB0aGVcbiAgICAgIC8vIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yIGNoYW5uZWwg4oCUIHNlZSByb3V0ZUxpc3RlbmVyRXJyb3IuXG4gICAgICBvbkVycm9yOiAoZXJyb3IsIGN0eCkgPT4gdGhpcy5yb3V0ZUxpc3RlbmVyRXJyb3IoZXJyb3IsIGN0eC5saXN0ZW5lcklkLCBjdHguZW52ZWxvcGUsIGN0eC5waGFzZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVnaXN0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcmVjb3JkZXIgZm9yIGRlZmVycmVkIGRlbGl2ZXJ5IG9uIHRoZSBzY29wZS1saXN0IGNoYW5uZWxzXG4gICAqIChgc2NvcGVgICsgYGVtaXRgKSBhbmQvb3IgdGhlIGZsb3cgY2hhbm5lbC4gSWRlbXBvdGVudCBieSBpZCDigJQgc2FtZSBpZFxuICAgKiByZXBsYWNlcyB0aGUgcmVjb3JkZXIgb2JqZWN0OyBjaGFubmVsIGxpc3RzIE1FUkdFIGFjcm9zcyBjYWxscyAoc2FtZSBhc1xuICAgKiB0aGUgaW5saW5lIHRpZXIsIHdoZXJlIGBhdHRhY2hTY29wZVJlY29yZGVyKHgpYCArIGBhdHRhY2hGbG93UmVjb3JkZXIoeClgXG4gICAqIGxhbmRzIGB4YCBvbiBib3RoIGxpc3RzKS4gTGF0ZXIgYXR0YWNoZXMgcGFzc2luZyBkaXNwYXRjaGVyLWxldmVsXG4gICAqIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgZmlyc3QgYXR0YWNoJ3MgY29uZmlndXJhdGlvbiBrZWVwIHRoZVxuICAgKiBvcmlnaW5hbCBjb25maWcgYW5kIGRldi13YXJuLlxuICAgKi9cbiAgcmVnaXN0ZXIoXG4gICAgcmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIsXG4gICAgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9LFxuICAgIG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIHRoaXMud2Fybk9uQ29uZmlnQ29uZmxpY3QocmVjb3JkZXIuaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChyZWNvcmRlci5pZCk/LmNoYW5uZWxzID8/IG5ldyBTZXQ8Q2FwdHVyZUNoYW5uZWw+KCk7XG4gICAgaWYgKGxpc3RzLnNjb3BlKSBmb3IgKGNvbnN0IGMgb2YgU0NPUEVfTElTVF9DSEFOTkVMUykgY2hhbm5lbHMuYWRkKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSBjaGFubmVscy5hZGQoYyk7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25zLnNldChyZWNvcmRlci5pZCwgeyByZWNvcmRlciwgY2hhbm5lbHMgfSk7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmFkZExpc3RlbmVyKHJlY29yZGVyLmlkLCAoZW52ZWxvcGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQocmVjb3JkZXIuaWQpO1xuICAgICAgaWYgKCFyZWdpc3RyYXRpb24gfHwgIXJlZ2lzdHJhdGlvbi5jaGFubmVscy5oYXMoZW52ZWxvcGUuY2hhbm5lbCkpIHJldHVybjtcbiAgICAgIC8vIFNBTUUgaW52b2tlIGhlbHBlciBhcyB0aGUgaW5saW5lIHRpZXIgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlCBhXG4gICAgICAvLyByZXR1cm5lZCBQcm9taXNlIGxhbmRzIGluIHRoZSBkaXNwYXRjaGVyJ3MgaW5mbGlnaHQgc2V0LlxuICAgICAgcmV0dXJuIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgZW52ZWxvcGUubWV0aG9kLCBlbnZlbG9wZS5wYXlsb2FkKSBhcyB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNoYW5uZWwgbGlzdHMgZnJvbSBhIHJlZ2lzdHJhdGlvbiAobWlycm9ycyB0aGUgaW5saW5lXG4gICAqIHRpZXIsIHdoZXJlIGBkZXRhY2hTY29wZVJlY29yZGVyYCAvIGBkZXRhY2hGbG93UmVjb3JkZXJgIGVhY2ggY2xlYXIgb25lXG4gICAqIGxpc3QpLiBXaGVuIG5vIGNoYW5uZWxzIHJlbWFpbiwgdGhlIGxpc3RlbmVyIGlzIGZ1bGx5IHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVGcm9tTGlzdHMoaWQ6IHN0cmluZywgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChpZCk7XG4gICAgaWYgKCFyZWdpc3RyYXRpb24pIHJldHVybjtcbiAgICBpZiAobGlzdHMuc2NvcGUpIGZvciAoY29uc3QgYyBvZiBTQ09QRV9MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChyZWdpc3RyYXRpb24uY2hhbm5lbHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLmRlbGV0ZShpZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlTGlzdGVuZXIoaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gYGlkYCBpcyByZWdpc3RlcmVkIGZvciBkZWZlcnJlZCBkZWxpdmVyeSAoYW55IGNoYW5uZWwpLiAqL1xuICBoYXMoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuaGFzKGlkKTtcbiAgfVxuXG4gIC8qKiBEZWZlcnJlZCByZWNvcmRlcnMgd2hvc2UgcmVhY2ggaW5jbHVkZXMgdGhlIHNjb3BlIGxpc3QgKHNjb3BlK2VtaXQpLiAqL1xuICBzY29wZUxpc3RSZWNvcmRlcnMoKTogU2NvcGVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5ieUNoYW5uZWwoJ3Njb3BlJykgYXMgU2NvcGVSZWNvcmRlcltdO1xuICB9XG5cbiAgLyoqIERlZmVycmVkIHJlY29yZGVycyB3aG9zZSByZWFjaCBpbmNsdWRlcyB0aGUgZmxvdyBjaGFubmVsLiAqL1xuICBmbG93TGlzdFJlY29yZGVycygpOiBGbG93UmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnlDaGFubmVsKCdmbG93JykgYXMgRmxvd1JlY29yZGVyW107XG4gIH1cblxuICAvKiogUmVzZXQgZGVmZXJyZWQgcmVjb3JkZXJzIGJlZm9yZSBhIGZyZXNoIHJ1biAoc2FtZSBjb250cmFjdCBhcyBpbmxpbmUpLiAqL1xuICBjbGVhclJlY29yZGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIgfSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIChyZWNvcmRlciBhcyB7IGNsZWFyPzogKCkgPT4gdm9pZCB9KS5jbGVhcj8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIENhcHR1cmUgdGFwcyAoQmxvY2sgNykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgc2NvcGUtY2hhbm5lbCB0YXAg4oCUIGEgYFNjb3BlUmVjb3JkZXJgIHBsYWNlZCBvbiB0aGVcbiAgICogbm9ybWFsIHNjb3BlLXJlY29yZGVyIGxpc3Qgd2hvc2UgaG9va3MgY2FwdHVyZSBpbnRvIHRoZSBxdWV1ZS4gQnVpbHRcbiAgICogZnJlc2ggcGVyIHRyYXZlcnNlciBzbyBpdCByZWZsZWN0cyB0aGUgY3VycmVudCByZWdpc3RyYXRpb25zLiBPbmx5XG4gICAqIG1ldGhvZHMgc29tZSBkZWZlcnJlZCByZWNvcmRlciBhY3R1YWxseSBpbXBsZW1lbnRzIGFyZSBwcmVzZW50IChub1xuICAgKiB3YXN0ZWQgY2FwdHVyZXMpLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gbm90aGluZyBpcyByZWdpc3RlcmVkIGZvclxuICAgKiB0aGUgc2NvcGUgbGlzdC5cbiAgICpcbiAgICogUmVkYWN0aW9uIG9yZGVyaW5nOiB0aGUgdGFwIGlzIGludm9rZWQgZnJvbSB0aGUgU0FNRSBsb29wcyBhcyBpbmxpbmVcbiAgICogcmVjb3JkZXJzIChgX2ludm9rZUhvb2tgIC8gYGVtaXRFdmVudGApLCB3aGljaCByZWNlaXZlIGV2ZW50cyBBRlRFUiB0aGVcbiAgICogcmVkYWN0aW9uIGRlY2lzaW9uIOKAlCBzbyBhIGNhcHR1cmVkIHBheWxvYWQgY2FuIG5ldmVyIGNvbnRhaW4gYVxuICAgKiBwcmUtcmVkYWN0aW9uIHZhbHVlIHRoZSBpbmxpbmUgdGllciB3b3VsZCBub3QgaGF2ZSBzZWVuLlxuICAgKi9cbiAgYnVpbGRTY29wZVRhcCgpOiBTY29wZVJlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLnNjb3BlTGlzdFJlY29yZGVycygpO1xuICAgIGlmIChyZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBERUZFUlJFRF9TQ09QRV9UQVBfSUQgfTtcbiAgICAvLyBEZXJpdmVkIGZyb20gdGhlIGhvb2sgcmVnaXN0cnk6IGV2ZXJ5IGhvb2sgb2YgdGhlIHNjb3BlIGNoYW5uZWwgYW5kIG9mIHRoZSBlbWl0IGNoYW5uZWxcbiAgICAvLyAod2hpY2ggcmlkZXMgdGhlIHNjb3BlIGxpc3QpIOKAlCBhIGhvb2sgdGhlIHJlZ2lzdHJ5IGdhaW5zIGlzIHRhcHBlZCB3aXRoIG5vIGVkaXQgaGVyZS5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgWydzY29wZScsICdlbWl0J10gYXMgY29uc3QpIHtcbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGhvb2tzT24oY2hhbm5lbCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFueUltcGxlbWVudHMocmVjb3JkZXJzLCBtZXRob2QpKSBjb250aW51ZTtcbiAgICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZVNjb3BlRXZlbnQoY2hhbm5lbCwgbWV0aG9kLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXAgYXMgdW5rbm93biBhcyBTY29wZVJlY29yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgZmxvdy1jaGFubmVsIHRhcCDigJQgYSBgRmxvd1JlY29yZGVyYCBhcHBlbmRlZCB0byB0aGVcbiAgICogZmxvdy1yZWNvcmRlcnMgbGlzdCBoYW5kZWQgdG8gdGhlIHRyYXZlcnNlci4gU2FtZSBjb250cmFjdCBhc1xuICAgKiB7QGxpbmsgYnVpbGRTY29wZVRhcH0uXG4gICAqL1xuICBidWlsZEZsb3dUYXAoKTogRmxvd1JlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLmZsb3dMaXN0UmVjb3JkZXJzKCk7XG4gICAgaWYgKHJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IERFRkVSUkVEX0ZMT1dfVEFQX0lEIH07XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgaG9va3NPbignZmxvdycpKSB7XG4gICAgICBpZiAoIXRoaXMuYW55SW1wbGVtZW50cyhyZWNvcmRlcnMsIG1ldGhvZCkpIGNvbnRpbnVlO1xuICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZUZsb3dFdmVudChtZXRob2QsIGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcCBhcyB1bmtub3duIGFzIEZsb3dSZWNvcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3QgY2FwdHVyZSBmb3IgZXhlY3V0b3Itc3ludGhlc2l6ZWQgZXZlbnRzIHRoYXQgYnlwYXNzIHRoZSBkaXNwYXRjaFxuICAgKiBzaXRlcyAoZS5nLiB0aGUgc3ludGhldGljIGBvblJlc3VtZWAgdGhlIGV4ZWN1dG9yIGZpcmVzIG9uIHJlc3VtZSkuXG4gICAqL1xuICBjYXB0dXJlKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ6IHN0cmluZywgcGF5bG9hZDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHsgY2hhbm5lbCwgbWV0aG9kLCBydW50aW1lU3RhZ2VJZCwgcnVuSWQsIHBheWxvYWQgfSk7XG4gIH1cblxuICAvLyDilIDilIAgVGVybWluYWwgZmx1c2ggKyBkcmFpbiAoQmxvY2sgOCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzbHkgZGVsaXZlciBldmVyeXRoaW5nIHN0aWxsIHF1ZXVlZCDigJQgY2FsbGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiBhdCB0aGUgT1VURVJNT1NUIHJ1biBib3VuZGFyeSAocmVzb2x2ZSwgcmVqZWN0LCBwYXVzZSksIEJFRk9SRSBgcnVuKClgXG4gICAqIHJldHVybnMgLyByZXRocm93cyAvIHRoZSBjaGVja3BvaW50IGJlY29tZXMgYXZhaWxhYmxlLiBJbnNwZWN0c1xuICAgKiBgZmx1c2hTeW5jYCdzIGByZW1haW5pbmdgIChyZXZpZXdlciBOMSk6IGBmbHVzaFN5bmNgIGFscmVhZHkgbG9vcHNcbiAgICogc25hcHNob3Qgcm91bmRzIHVwIHRvIGl0cyBydW5hd2F5LWNhc2NhZGUgY2FwLCBzbyBhIG5vbi16ZXJvIHJlbWFpbmRlclxuICAgKiBtZWFucyBhIHBhdGhvbG9naWNhbCBzZWxmLWVucXVldWVpbmcgbGlzdGVuZXIg4oCUIGNvdW50ZWQgaW5cbiAgICogYG9ic2VydmVyU3RhdHMudGVybWluYWxTdHJhbmRlZGAgYW5kIGRldi13YXJuZWQsIG5ldmVyIHNpbGVudC5cbiAgICovXG4gIHRlcm1pbmFsRmx1c2goKTogdm9pZCB7XG4gICAgY29uc3QgeyByZW1haW5pbmcgfSA9IHRoaXMuZGlzcGF0Y2hlci5mbHVzaE5vdygpO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICB0aGlzLnRlcm1pbmFsU3RyYW5kZWQgKz0gcmVtYWluaW5nO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlcnM6IHRlcm1pbmFsIGZsdXNoIGhpdCB0aGUgcnVuYXdheS1jYXNjYWRlIGNhcCB3aXRoICR7cmVtYWluaW5nfSBgICtcbiAgICAgICAgICAgICdldmVudChzKSBzdGlsbCBxdWV1ZWQg4oCUIGEgbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIGR1cmluZyB0aGUgZmx1c2guIFRoZSBzdHJhbmRlZCBjb3VudCBpcyAnICtcbiAgICAgICAgICAgICdzdXJmYWNlZCBvbiBzbmFwc2hvdC5vYnNlcnZlclN0YXRzLnRlcm1pbmFsU3RyYW5kZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGJhY2tsb2csIHRoZW4gc2V0dGxlIGFzeW5jIGxpc3RlbmVyIGNvbnRpbnVhdGlvbnMgdW5kZXIgYVxuICAgKiBkZWFkbGluZSDigJQgdGhlIHNlcnZlcmxlc3MgLyBncmFjZWZ1bC1zaHV0ZG93biBwYXR0ZXJuIChSRkMtMDAxIMKnMTEpLlxuICAgKi9cbiAgZHJhaW4ob3B0cz86IHsgdGltZW91dE1zPzogbnVtYmVyIH0pOiBQcm9taXNlPE9ic2VydmVyRHJhaW5SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaGVyLmRyYWluKG9wdHMpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFN0YXRzIChCbG9jayA5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogVGhlIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYCBwYXlsb2FkIOKAlCBBNCBzdGF0cyArIEJsb2NrIDggc3RyYW5kaW5nLiAqL1xuICBnZXRTdGF0cygpOiBPYnNlcnZlclN0YXRzIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc3BhdGNoZXIuZ2V0U3RhdHMoKSwgdGVybWluYWxTdHJhbmRlZDogdGhpcy50ZXJtaW5hbFN0cmFuZGVkIH07XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYnlDaGFubmVsKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsKTogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4ge1xuICAgIGNvbnN0IG91dDogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIsIGNoYW5uZWxzIH0gb2YgdGhpcy5yZWdpc3RyYXRpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY2hhbm5lbHMuaGFzKGNoYW5uZWwpKSBvdXQucHVzaChyZWNvcmRlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogTm9ybWFsIHByb3BlcnR5IGxvb2t1cCDigJQgaW52b2NhdGlvbiBwYXJpdHkgd2l0aCB0aGUgaW5saW5lIHRpZXIuICovXG4gIHByaXZhdGUgYW55SW1wbGVtZW50cyhyZWNvcmRlcnM6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+LCBtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWNvcmRlcnMuc29tZSgocikgPT4gdHlwZW9mIChyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21ldGhvZF0gPT09ICdmdW5jdGlvbicpO1xuICB9XG5cbiAgLyoqIFNjb3BlL2VtaXQgZXZlbnRzIGNhcnJ5IHRoZWlyIG93biBpZHMgKGBydW50aW1lU3RhZ2VJZGAgKyBgcGlwZWxpbmVJZGApLiAqL1xuICBwcml2YXRlIGNhcHR1cmVTY29wZUV2ZW50KGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXZlbnQgYXMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZzsgcGlwZWxpbmVJZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHtcbiAgICAgIGNoYW5uZWwsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZT8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgICBydW5JZDogZT8ucGlwZWxpbmVJZCA/PyAnJyxcbiAgICAgIHBheWxvYWQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZsb3cgZXZlbnRzIGNhcnJ5IGlkcyBvbiBgdHJhdmVyc2FsQ29udGV4dGAgKGFic2VudCBvbiBhIGZldyBldmVudHMpLiAqL1xuICBwcml2YXRlIGNhcHR1cmVGbG93RXZlbnQobWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gKGV2ZW50IGFzIHsgdHJhdmVyc2FsQ29udGV4dD86IHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH0gfSB8IHVuZGVmaW5lZClcbiAgICAgID8udHJhdmVyc2FsQ29udGV4dDtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7XG4gICAgICBjaGFubmVsOiAnZmxvdycsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogY3R4Py5ydW50aW1lU3RhZ2VJZCA/PyAnJyxcbiAgICAgIHJ1bklkOiBjdHg/LnJ1bklkID8/ICcnLFxuICAgICAgcGF5bG9hZDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgYSBkZWZlcnJlZCBsaXN0ZW5lciBmYWlsdXJlIGludG8gdGhlIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yXG4gICAqIGNoYW5uZWw6IGV2ZXJ5IHJlZ2lzdGVyZWQgc2NvcGUgb2JzZXJ2ZXIg4oCUIHRoZSBmYWlsaW5nIG9uZSBpbmNsdWRlZCwgaW5cbiAgICogcmVnaXN0cmF0aW9uIG9yZGVyIOKAlCByZWNlaXZlcyB0aGUgc2NvcGUtc2hhcGVkIGBvbkVycm9yYCBldmVudCB0aGUgaW5saW5lXG4gICAqIHRpZXIgYnVpbGRzIChgcmVjb3JkZXJGYWlsdXJlRXZlbnRgKSwgYW5kIGEgdGhyb3cgZnJvbSBgb25FcnJvcmAgaXRzZWxmXG4gICAqIGlzIG5vdCByb3V0ZWQgYWdhaW46IHRoZSBjb250cmFjdCB0aGUgaW5saW5lIHRpZXIgaG9ub3JzIHdoZW4gYSByZWNvcmRlclxuICAgKiB0aHJvd3MgbWlkLWRpc3BhdGNoICg5LjM5LjAg4oCUIGJlZm9yZSwgdGhlIGZhaWxpbmcgbGlzdGVuZXIgd2FzIHNraXBwZWQsXG4gICAqIHNvIGEgQ29tcG9zaXRlUmVjb3JkZXIncyBvdGhlciBjaGlsZHJlbiBuZXZlciBoZWFyZCBhIHNpYmxpbmcncyB0aHJvdykuXG4gICAqIFRoZSBlcnJvciBzaW5rIG11c3QgbmV2ZXIgYmVjb21lIGFuIGVycm9yIHNvdXJjZTogc2luayB0aHJvd3MgYXJlXG4gICAqIHN3YWxsb3dlZCAoaXNvbGF0aW9uIGlzIGFic29sdXRlKS5cbiAgICovXG4gIHByaXZhdGUgcm91dGVMaXN0ZW5lckVycm9yKFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIGxpc3RlbmVySWQ6IHN0cmluZyxcbiAgICBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlLFxuICAgIHBoYXNlOiAnc3luYycgfCAnYXN5bmMnLFxuICApOiB2b2lkIHtcbiAgICAvLyBJbmxpbmUgcGFyaXR5ICg5LjM5LjApOiB0aGUgaW5saW5lIHRpZXIgaGFuZHMgYSByZWNvcmRlcidzIHRocm93IHRvIEVWRVJZIHJlY29yZGVyIG9uIHRoZVxuICAgIC8vIHNjb3BlIGxpc3Qg4oCUIHRoZSB0aHJvd2VyIGluY2x1ZGVkLCBzbyBhIENvbXBvc2l0ZVJlY29yZGVyJ3Mgb3RoZXIgY2hpbGRyZW4gaGVhciBpdCDigJQgYW5kXG4gICAgLy8gZHJvcHMgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGYuIFNhbWUgaGVyZSwgd2l0aCB0aGUgc2FtZSBldmVudCAoYHJlY29yZGVyRmFpbHVyZUV2ZW50YCkuXG4gICAgaWYgKGVudmVsb3BlLm1ldGhvZCAhPT0gJ29uRXJyb3InKSB0aGlzLmRlbGl2ZXJMaXN0ZW5lckVycm9yKGVycm9yLCBlbnZlbG9wZSk7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlciAnJHtsaXN0ZW5lcklkfScgZmFpbGVkICgke3BoYXNlfSkgaGFuZGxpbmcgYCArXG4gICAgICAgICAgYCR7ZW52ZWxvcGUuY2hhbm5lbH0uJHtlbnZlbG9wZS5tZXRob2R9IChzZXEgJHtlbnZlbG9wZS5zZXF9KTogJHtkZXNjcmliZVRocm93bihlcnJvcil9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmQgb25lIGxpc3RlbmVyIGZhaWx1cmUgdG8gZXZlcnkgc2NvcGUgb2JzZXJ2ZXIgYXMgYW4gYG9uRXJyb3JgIOKAlCBzZWUge0BsaW5rIHJvdXRlTGlzdGVuZXJFcnJvcn0uICovXG4gIHByaXZhdGUgZGVsaXZlckxpc3RlbmVyRXJyb3IoZXJyb3I6IHVua25vd24sIGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvckV2ZW50ID0gcmVjb3JkZXJGYWlsdXJlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIHN0YWdlTmFtZTogJycsXG4gICAgICAgIHN0YWdlSWQ6IHN0YWdlSWRPZihlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCksXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogZW52ZWxvcGUucnVuSWQsXG4gICAgICB9LFxuICAgICAgZXJyb3IsXG4gICAgICBlbnZlbG9wZS5tZXRob2QsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IFssIHsgcmVjb3JkZXIsIGNoYW5uZWxzIH1dIG9mIHRoaXMucmVnaXN0cmF0aW9ucykge1xuICAgICAgLy8gSW5saW5lLXRpZXIgcGFyaXR5IChyZXZpZXcgQ1JJVElDQUwtMSk6IHRoZSBzeW50aGVzaXplZCBldmVudCBpc1xuICAgICAgLy8gc2NvcGUtdHlwZWQsIHNvIGl0IHJlYWNoZXMgT05MWSByZWNvcmRlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgc2NvcGVcbiAgICAgIC8vIGxpc3RzIOKAlCBhIGZsb3ctb25seSByZWNvcmRlciBuZXZlciByZWNlaXZlcyBzY29wZS1jaGFubmVsIGVycm9yc1xuICAgICAgLy8gaW5saW5lIGFuZCBtdXN0IG5vdCBoZXJlIGVpdGhlci5cbiAgICAgIGlmICghY2hhbm5lbHMuaGFzKCdzY29wZScpKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgJ29uRXJyb3InLCBlcnJvckV2ZW50KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTd2FsbG93IOKAlCBzYW1lIHJ1bGUgYXMgRGVmZXJyZWREaXNwYXRjaGVyLnNhZmVPbkVycm9yLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgYXJlIGZpcnN0LWF0dGFjaC13aW5zOyBkaWZmZXJpbmcgbGF0ZXIgdmFsdWVzIGRldi13YXJuLiAqL1xuICBwcml2YXRlIHdhcm5PbkNvbmZpZ0NvbmZsaWN0KHJlY29yZGVySWQ6IHN0cmluZywgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZsaWN0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0ZWQ6IEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnID0ge1xuICAgICAgY2FwdHVyZTogb3B0aW9ucy5jYXB0dXJlLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnMubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zLnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucy5mbHVzaEJ1ZGdldE1zLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWVzdGVkKSBhcyBBcnJheTxrZXlvZiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZz4pIHtcbiAgICAgIGlmIChyZXF1ZXN0ZWRba2V5XSAhPT0gdW5kZWZpbmVkICYmIHJlcXVlc3RlZFtrZXldICE9PSB0aGlzLmFwcGxpZWRDb25maWdba2V5XSkge1xuICAgICAgICBjb25mbGljdHMucHVzaChTdHJpbmcoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25mbGljdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kZXZXYXJuRGVkdXBlZChcbiAgICAgICAgYFtmb290cHJpbnRqc10gYXR0YWNoICcke3JlY29yZGVySWR9JzogdGhlIGV4ZWN1dG9yJ3MgZGVmZXJyZWQtb2JzZXJ2ZXIgcXVldWUgd2FzIGFscmVhZHkgYCArXG4gICAgICAgICAgYGNvbmZpZ3VyZWQgYnkgdGhlIGZpcnN0IGRlZmVycmVkIGF0dGFjaCDigJQgaWdub3JpbmcgZGlmZmVyaW5nIG9wdGlvbihzKTogJHtjb25mbGljdHMuam9pbignLCAnKX0uIGAgK1xuICAgICAgICAgICdPbmUgZXhlY3V0b3IgaGFzIE9ORSBtZXJnZWQgcXVldWU7IGNvbmZpZ3VyZSBpdCBvbiB0aGUgZmlyc3QgZGVmZXJyZWQgYXR0YWNoLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgd2FybmVyIOKAlCB0aGUgYm91bmQgd2FybiBzZWFtLiAqL1xuICBwcml2YXRlIGRldldhcm5EZWR1cGVkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy53YXJuZWRNZXNzYWdlcy5oYXMobWVzc2FnZSkpIHJldHVybjtcbiAgICB0aGlzLndhcm5lZE1lc3NhZ2VzLmFkZChtZXNzYWdlKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgfVxufVxuIl19
@@ -9,13 +9,12 @@
9
9
  * The engine (FlowchartTraverser) receives this as its runtime parameter.
10
10
  * After execution, consumers query it for the full execution state.
11
11
  */
12
- import { EventLog } from '../memory/EventLog.js';
13
- import type { LogAddress } from '../memory/eventPosition.js';
12
+ import type { CommitBundle, CommitValuesMode, LogAddress } from 'foottrace';
13
+ import type { WriteProvenanceMode } from 'foottrace/write';
14
+ import { EventLog, SharedMemory } from 'foottrace/write';
14
15
  import type { StageSnapshot } from '../memory/frameTypes.js';
15
16
  import type { RunPolicy } from '../memory/runPolicy.js';
16
- import { SharedMemory } from '../memory/SharedMemory.js';
17
17
  import { StageContext } from '../memory/StageContext.js';
18
- import type { CommitBundle, CommitValuesMode, WriteProvenanceMode } from '../memory/types.js';
19
18
  import type { ObserverStats } from './DeferredObserverTier.js';
20
19
  /** Snapshot of a single recorder's collected data. */
21
20
  export interface RecorderSnapshot {
@@ -67,7 +66,7 @@ export type RuntimeSnapshot = {
67
66
  * Commit bundles are DIFFS, so the log alone cannot rebuild a value that
68
67
  * was seeded before the run and only ever merged afterwards. Shipping the
69
68
  * base WITH the log is what makes an offline fold — `stateAt(snapshot, i)`
70
- * from `footprintjs/trace` — reproduce the state a stage actually saw.
69
+ * from `foottrace` — reproduce the state a stage actually saw.
71
70
  *
72
71
  * OPTIONAL BY TYPE, and absent in exactly two cases. A plain `getSnapshot()`
73
72
  * always carries it, so a live fold reports `basis: 'initial+log'`. Under
@@ -9,11 +9,8 @@
9
9
  * The engine (FlowchartTraverser) receives this as its runtime parameter.
10
10
  * After execution, consumers query it for the full execution state.
11
11
  */
12
- import { freezeRecord } from '../capture/freeze.js';
13
- import { EventLog } from '../memory/EventLog.js';
14
- import { LOG_PLACEHOLDER } from '../memory/placeholders.js';
12
+ import { EventLog, freezeRecord, LOG_PLACEHOLDER, SharedMemory } from 'foottrace/write';
15
13
  import { DEFAULT_RUN_POLICY } from '../memory/runPolicy.js';
16
- import { SharedMemory } from '../memory/SharedMemory.js';
17
14
  import { StageContext } from '../memory/StageContext.js';
18
15
  export class ExecutionRuntime {
19
16
  globalStore;
@@ -188,4 +185,4 @@ export class ExecutionRuntime {
188
185
  };
189
186
  }
190
187
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFtSHpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsV0FBVyxDQUFlO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0ksYUFBYSxDQUFnQjtJQUM3QixnQkFBZ0IsQ0FBZTtJQUMvQixnQkFBZ0IsQ0FBVztJQUNsQyxvRkFBb0Y7SUFDNUUsYUFBYSxDQUFnQjtJQUM3QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFVO0lBQ2hDO21GQUMrRTtJQUN2RSxNQUFNLENBQVk7SUFFMUIsNEVBQTRFO0lBQ3BFLFNBQVMsQ0FBMkI7SUFFNUM7Ozs7OztPQU1HO0lBQ0gsWUFDRSxRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBdUIsRUFDdkIsWUFBc0IsRUFDdEIsU0FBb0Isa0JBQWtCO1FBRXRDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7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QyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckcsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUN0QyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1NBQzdDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4ZWN1dGlvblJ1bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBmcmVlemVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4uL21lbW9yeS9FdmVudExvZy5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuUG9saWN5IH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1JVTl9QT0xJQ1kgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmVyU3RhdHMgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZVJlY29yZGVyIHR5cGUgYW5kIHBhdHRlcm4gZGVzY3JpcHRpb24gKGUuZy4sIFwiVHJhbnNsYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRva2VuIHVzYWdlXCIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFByZWZlcnJlZCByZWFkLXRpbWUgb3BlcmF0aW9uIOKAlCBoaW50cyB0aGUgVUkgYWJvdXQgd2hpY2ggdmlldyB0byBzaG93IHByb21pbmVudGx5LiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICBkYXRhOiB1bmtub3duO1xuICAvKipcbiAgICogU21hbGwgbWFjaGluZS1yZWFkYWJsZSBmYWN0cyBhYm91dCB0aGUgQlVORExFIOKAlCBob3cgaXQgd2FzIHByb2R1Y2VkLFxuICAgKiB3aGljaCBwcm9qZWN0aW9uIG9mIHRoZSByZWNvcmRlcidzIGRhdGEgaXQgaXMsIHdoYXQgaXQgZGVsaWJlcmF0ZWx5XG4gICAqIGxlZnQgb3V0LiBXaGF0ZXZlciB0aGUgcmVjb3JkZXIncyBgdG9TbmFwc2hvdCgpYCBwdXQgaGVyZSwgY29waWVkXG4gICAqIHRocm91Z2ggdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgc3BsaXQgd2l0aCBgZGVzY3JpcHRpb25gOiBgZGVzY3JpcHRpb25gIGlzIHRoZSBzZW50ZW5jZSBhIGh1bWFuXG4gICAqIHJlYWRzOyBgbWV0YWAgaXMgd2hhdCBhbiBvZmZsaW5lIGNvbnN1bWVyIEJSQU5DSEVTIG9uLiBBIHJlY29yZGVyIHdpdGhcbiAgICogYSBcImZ1bGxcIiBhbmQgYSBcImxlYW5cIiBidW5kbGUgc2hhcGUgdGhhdCBzYXlzIHNvIG9ubHkgaW4gaXRzXG4gICAqIGRlc2NyaXB0aW9uIGZvcmNlcyBldmVyeSByZWFkZXIgdG8gc3RyaW5nLW1hdGNoIHByb3NlIOKAlCBhbmQgYSByZWFkZXJcbiAgICogdGhhdCBkb2Vzbid0IHJlbmRlcnMgYW4gZW1wdHkgcGFuZWwgaW5zdGVhZCBvZiBzYXlpbmcgXCJ0aGlzIHJlY29yZGluZ1xuICAgKiBjYXJyaWVzIHN0cnVjdHVyZSBvbmx5XCIuXG4gICAqXG4gICAqIE5vdCBpbnRlcnByZXRlZCBieSB0aGUgZW5naW5lLCBzbyBrZXlzIGFyZSB0aGUgcmVjb3JkZXIncyB0byBjaG9vc2U7XG4gICAqIGtlZXAgdGhlIHZhbHVlcyBKU09OLXNhZmUsIHNpbmNlIHRoaXMgcmlkZXMgdGhlIHNuYXBzaG90IG91dCB0byBkaXNrLlxuICAgKi9cbiAgbWV0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuZXhwb3J0IHR5cGUgUnVudGltZVNuYXBzaG90ID0ge1xuICAvKipcbiAgICogVGhlIHJ1biB0aGlzIHNuYXBzaG90IGJlbG9uZ3MgdG8g4oCUIHRoZSBzYW1lIGBydW5JZGAgc3RhbXBlZCBvbiBldmVyeVxuICAgKiBgVHJhdmVyc2FsQ29udGV4dGAgKGFuZCB0aHVzIGV2ZXJ5IHJlY29yZGVyIGV2ZW50KSBvZiB0aGUgcnVuLCBzbyBhXG4gICAqIHNuYXBzaG90IGNhbiBiZSBqb2luZWQgYWdhaW5zdCBhbiBldmVudCBzdHJlYW0gb3IgYW4gZXh0ZXJuYWxcbiAgICogY29ycmVsYXRpb24gdGFibGUuIFJlYWQtb25seSBieSBjb250cmFjdDogZ2VuZXJhdGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiAoYHJ1bm5lci9ydW5JZC50c2ApLCBuZXZlciBkZXJpdmVkIGZyb20gc25hcHNob3QgY29udGVudHMuXG4gICAqXG4gICAqIExpZmVjeWNsZSAobWF0Y2hlcyB0aGUgZXZlbnQgbW9kZWwpOiBmcmVzaCBwZXIgYHJ1bigpYCBBTkQgcGVyXG4gICAqIGByZXN1bWUoKWAg4oCUIHJlc3VtZSBpcyBsb2dpY2FsbHkgYSBkaXN0aW5jdCBydW4sIHNvIGEgcG9zdC1yZXN1bWVcbiAgICogc25hcHNob3QgY2FycmllcyBhIERJRkZFUkVOVCBydW5JZCB0aGFuIHRoZSBwYXVzZWQgcnVuJ3Mgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgQkFTRSDigJQgdGhlIHJ1bidzIHN0YXRlIGJlZm9yZSBpdHMgZmlyc3QgY29tbWl0XG4gICAqIChgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGA7IG9uIGEgcmVzdW1lLCB0aGVcbiAgICogY2hlY2twb2ludCdzIHN0YXRlKS4gRGVlcGx5IGZyb3plbiBhbmQgZnVsbHkgZGV0YWNoZWQgZnJvbSB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBDb21taXQgYnVuZGxlcyBhcmUgRElGRlMsIHNvIHRoZSBsb2cgYWxvbmUgY2Fubm90IHJlYnVpbGQgYSB2YWx1ZSB0aGF0XG4gICAqIHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gYW5kIG9ubHkgZXZlciBtZXJnZWQgYWZ0ZXJ3YXJkcy4gU2hpcHBpbmcgdGhlXG4gICAqIGJhc2UgV0lUSCB0aGUgbG9nIGlzIHdoYXQgbWFrZXMgYW4gb2ZmbGluZSBmb2xkIOKAlCBgc3RhdGVBdChzbmFwc2hvdCwgaSlgXG4gICAqIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUlILE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFrSHpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsV0FBVyxDQUFlO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0ksYUFBYSxDQUFnQjtJQUM3QixnQkFBZ0IsQ0FBZTtJQUMvQixnQkFBZ0IsQ0FBVztJQUNsQyxvRkFBb0Y7SUFDNUUsYUFBYSxDQUFnQjtJQUM3QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFVO0lBQ2hDO21GQUMrRTtJQUN2RSxNQUFNLENBQVk7SUFFMUIsNEVBQTRFO0lBQ3BFLFNBQVMsQ0FBMkI7SUFFNUM7Ozs7OztPQU1HO0lBQ0gsWUFDRSxRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBdUIsRUFDdkIsWUFBc0IsRUFDdEIsU0FBb0Isa0JBQWtCO1FBRXRDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJ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QyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1NBQzdDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4ZWN1dGlvblJ1bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgTG9nQWRkcmVzcyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuaW1wb3J0IHsgRXZlbnRMb2csIGZyZWV6ZVJlY29yZCwgTE9HX1BMQUNFSE9MREVSLCBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1blBvbGljeSB9IGZyb20gJy4uL21lbW9yeS9ydW5Qb2xpY3kuanMnO1xuaW1wb3J0IHsgREVGQVVMVF9SVU5fUE9MSUNZIH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2ZXJTdGF0cyB9IGZyb20gJy4vRGVmZXJyZWRPYnNlcnZlclRpZXIuanMnO1xuXG4vKiogU25hcHNob3Qgb2YgYSBzaW5nbGUgcmVjb3JkZXIncyBjb2xsZWN0ZWQgZGF0YS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJTbmFwc2hvdCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNjb3BlUmVjb3JkZXIgdHlwZSBhbmQgcGF0dGVybiBkZXNjcmlwdGlvbiAoZS5nLiwgXCJUcmFuc2xhdG9yIChLZXllZFN0b3JlKSDigJQgcGVyLXN0ZXAgdG9rZW4gdXNhZ2VcIikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIHJlYWQtdGltZSBvcGVyYXRpb24g4oCUIGhpbnRzIHRoZSBVSSBhYm91dCB3aGljaCB2aWV3IHRvIHNob3cgcHJvbWluZW50bHkuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86ICd0cmFuc2xhdGUnIHwgJ2FjY3VtdWxhdGUnIHwgJ2FnZ3JlZ2F0ZSc7XG4gIGRhdGE6IHVua25vd247XG4gIC8qKlxuICAgKiBTbWFsbCBtYWNoaW5lLXJlYWRhYmxlIGZhY3RzIGFib3V0IHRoZSBCVU5ETEUg4oCUIGhvdyBpdCB3YXMgcHJvZHVjZWQsXG4gICAqIHdoaWNoIHByb2plY3Rpb24gb2YgdGhlIHJlY29yZGVyJ3MgZGF0YSBpdCBpcywgd2hhdCBpdCBkZWxpYmVyYXRlbHlcbiAgICogbGVmdCBvdXQuIFdoYXRldmVyIHRoZSByZWNvcmRlcidzIGB0b1NuYXBzaG90KClgIHB1dCBoZXJlLCBjb3BpZWRcbiAgICogdGhyb3VnaCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSBzcGxpdCB3aXRoIGBkZXNjcmlwdGlvbmA6IGBkZXNjcmlwdGlvbmAgaXMgdGhlIHNlbnRlbmNlIGEgaHVtYW5cbiAgICogcmVhZHM7IGBtZXRhYCBpcyB3aGF0IGFuIG9mZmxpbmUgY29uc3VtZXIgQlJBTkNIRVMgb24uIEEgcmVjb3JkZXIgd2l0aFxuICAgKiBhIFwiZnVsbFwiIGFuZCBhIFwibGVhblwiIGJ1bmRsZSBzaGFwZSB0aGF0IHNheXMgc28gb25seSBpbiBpdHNcbiAgICogZGVzY3JpcHRpb24gZm9yY2VzIGV2ZXJ5IHJlYWRlciB0byBzdHJpbmctbWF0Y2ggcHJvc2Ug4oCUIGFuZCBhIHJlYWRlclxuICAgKiB0aGF0IGRvZXNuJ3QgcmVuZGVycyBhbiBlbXB0eSBwYW5lbCBpbnN0ZWFkIG9mIHNheWluZyBcInRoaXMgcmVjb3JkaW5nXG4gICAqIGNhcnJpZXMgc3RydWN0dXJlIG9ubHlcIi5cbiAgICpcbiAgICogTm90IGludGVycHJldGVkIGJ5IHRoZSBlbmdpbmUsIHNvIGtleXMgYXJlIHRoZSByZWNvcmRlcidzIHRvIGNob29zZTtcbiAgICoga2VlcCB0aGUgdmFsdWVzIEpTT04tc2FmZSwgc2luY2UgdGhpcyByaWRlcyB0aGUgc25hcHNob3Qgb3V0IHRvIGRpc2suXG4gICAqL1xuICBtZXRhPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG5leHBvcnQgdHlwZSBSdW50aW1lU25hcHNob3QgPSB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIHRoaXMgc25hcHNob3QgYmVsb25ncyB0byDigJQgdGhlIHNhbWUgYHJ1bklkYCBzdGFtcGVkIG9uIGV2ZXJ5XG4gICAqIGBUcmF2ZXJzYWxDb250ZXh0YCAoYW5kIHRodXMgZXZlcnkgcmVjb3JkZXIgZXZlbnQpIG9mIHRoZSBydW4sIHNvIGFcbiAgICogc25hcHNob3QgY2FuIGJlIGpvaW5lZCBhZ2FpbnN0IGFuIGV2ZW50IHN0cmVhbSBvciBhbiBleHRlcm5hbFxuICAgKiBjb3JyZWxhdGlvbiB0YWJsZS4gUmVhZC1vbmx5IGJ5IGNvbnRyYWN0OiBnZW5lcmF0ZWQgYnkgdGhlIGV4ZWN1dG9yXG4gICAqIChgcnVubmVyL3J1bklkLnRzYCksIG5ldmVyIGRlcml2ZWQgZnJvbSBzbmFwc2hvdCBjb250ZW50cy5cbiAgICpcbiAgICogTGlmZWN5Y2xlIChtYXRjaGVzIHRoZSBldmVudCBtb2RlbCk6IGZyZXNoIHBlciBgcnVuKClgIEFORCBwZXJcbiAgICogYHJlc3VtZSgpYCDigJQgcmVzdW1lIGlzIGxvZ2ljYWxseSBhIGRpc3RpbmN0IHJ1biwgc28gYSBwb3N0LXJlc3VtZVxuICAgKiBzbmFwc2hvdCBjYXJyaWVzIGEgRElGRkVSRU5UIHJ1bklkIHRoYW4gdGhlIHBhdXNlZCBydW4ncyBzbmFwc2hvdC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqXG4gICAqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBCQVNFIOKAlCB0aGUgcnVuJ3Mgc3RhdGUgYmVmb3JlIGl0cyBmaXJzdCBjb21taXRcbiAgICogKGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGggYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YDsgb24gYSByZXN1bWUsIHRoZVxuICAgKiBjaGVja3BvaW50J3Mgc3RhdGUpLiBEZWVwbHkgZnJvemVuIGFuZCBmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBlbmdpbmUuXG4gICAqXG4gICAqIENvbW1pdCBidW5kbGVzIGFyZSBESUZGUywgc28gdGhlIGxvZyBhbG9uZSBjYW5ub3QgcmVidWlsZCBhIHZhbHVlIHRoYXRcbiAgICogd2FzIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biBhbmQgb25seSBldmVyIG1lcmdlZCBhZnRlcndhcmRzLiBTaGlwcGluZyB0aGVcbiAgICogYmFzZSBXSVRIIHRoZSBsb2cgaXMgd2hhdCBtYWtlcyBhbiBvZmZsaW5lIGZvbGQg4oCUIGBzdGF0ZUF0KHNuYXBzaG90LCBpKWBcbiAgICogZnJvbSBgZm9vdHRyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -21,6 +21,7 @@
21
21
  * stays here is the per-run state and the run lifecycle that threads it.
22
22
  * const result = await executor.run({ input: data, env: { traceId: 'req-123' } });
23
23
  */
24
+ import type { CommitValuesMode } from 'foottrace';
24
25
  import type { FlowChart } from '../builder/types.js';
25
26
  import type { CombinedNarrativeRecorderOptions } from '../engine/narrative/CombinedNarrativeRecorder.js';
26
27
  import type { CombinedNarrativeEntry } from '../engine/narrative/narrativeTypes.js';
@@ -28,7 +29,6 @@ import type { ManifestEntry } from '../engine/narrative/recorders/ManifestFlowRe
28
29
  import type { FlowRecorder } from '../engine/narrative/types.js';
29
30
  import { type ExecutorResult, type RunOptions, type ScopeFactory, type SerializedPipelineStructure, type StageNode, type SubflowResult } from '../engine/types.js';
30
31
  import type { ReadTrackingMode, WriteTrackingMode } from '../memory/frameTypes.js';
31
- import type { CommitValuesMode } from '../memory/types.js';
32
32
  import type { FlowchartCheckpoint } from '../pause/types.js';
33
33
  import type { CombinedRecorder } from '../recorder/CombinedRecorder.js';
34
34
  import type { EmitRecorder } from '../recorder/EmitRecorder.js';